From 252c33779642abb4a61ce35757f0a0d230d03d15 Mon Sep 17 00:00:00 2001 From: Andres Mejia Date: Tue, 26 Jul 2011 22:43:07 -0400 Subject: [PATCH] Imported Upstream version 0.4.5+svn3450 --- INSTALLME | 11 + Makefile | 22 +- applications/GPAX/GPAXPlugin.cpp | 98 +- applications/generators/MPEG4/main.c | 32 +- applications/generators/MPEG4/templates10.txt | 106 +- applications/generators/MPEG4/templates8.txt | 248 +- applications/generators/MPEG4/templates9.txt | 136 +- applications/m3u82mpd/main.c | 232 +- applications/mp42avi/main.c | 80 +- applications/mp42ts/main.c | 468 +- applications/mp4box/filedump.c | 22 +- applications/mp4box/fileimport.c | 177 +- applications/mp4box/live.c | 24 +- applications/mp4box/main.c | 153 +- applications/mp4box/wrapper.c | 104 + applications/mp4box_android/.classpath | 7 + applications/mp4box_android/.project | 33 + .../mp4box_android/AndroidManifest.xml | 16 + .../mp4box_android/default.properties | 11 + .../mp4box_android/gen/org/enst/mp4box/R.java | 30 + .../proguard.cfg | 2 + .../mp4box_android/res/drawable-hdpi/icon.png | Bin 0 -> 4147 bytes .../mp4box_android/res/drawable-ldpi/icon.png | Bin 0 -> 1723 bytes .../mp4box_android/res/drawable-mdpi/icon.png | Bin 0 -> 2574 bytes .../mp4box_android/res/layout/main.xml | 10 + .../mp4box_android/res/values/strings.xml | 7 + .../src/com/enst/mp4box/mp4box.java | 129 + .../src/com/enst/mp4box/mp4terminal.java | 7 + applications/mp4client/Makefile | 40 +- applications/mp4client/extract.c | 10 +- applications/mp4client/main.c | 552 +-- applications/mp4client/resource.h | 36 +- .../osmo4_android/AndroidManifest.xml | 2 +- applications/osmo4_android/Osmo4_keystore | Bin 0 -> 1244 bytes applications/osmo4_android/build.properties | 4 + .../jni/wrapper-bitmap-20-09-2010.cpp | 960 ---- .../jni/wrapper-bitmap-20-09-2010.h | 228 - applications/osmo4_android/jni/wrapper.cpp | 1826 ++++---- applications/osmo4_android/jni/wrapper.h | 455 +- applications/osmo4_android/jni/wrapper_jni.c | 41 +- applications/osmo4_android/local.properties | 10 - .../{artemis => gpac}/Osmo4/BitmapView.java | 4 +- .../{artemis => gpac}/Osmo4/GPACInstance.java | 12 +- .../Osmo4/GPACInstanceInterface.java | 12 +- .../{artemis => gpac}/Osmo4/GpacCallback.java | 12 +- .../{artemis => gpac}/Osmo4/GpacConfig.java | 14 +- .../com/{artemis => gpac}/Osmo4/Osmo4.java | 28 +- .../Osmo4/Osmo4GLSurfaceView.java | 12 +- .../Osmo4/Osmo4Renderer.java | 6 +- .../Osmo4/extra/FileArrayAdapter.java | 10 +- .../Osmo4/extra/FileChooserActivity.java | 10 +- .../Osmo4/extra/FileEntry.java | 8 +- .../Osmo4/logs/GpacLogger.java | 14 +- applications/osmo4_ios/Resources/icon.png | Bin 0 -> 7682 bytes applications/osmo4_ios/Resources/osmo.icns | Bin 0 -> 147235 bytes applications/osmo4_ios/main.c | 201 +- applications/osmo4_ios/osmo4ios-Info.plist | 10 +- applications/osmo4_sym/osmo4_view.cpp | 62 +- applications/osmo4_w32/Options.cpp | 15 +- applications/osmo4_w32/Options.h | 4 +- applications/osmo4_w32/Osmo4.cpp | 198 +- applications/osmo4_w32/Osmo4.rc | 1752 ++++---- applications/osmo4_wce/Osmo4.cpp | 103 +- applications/osmo4_wx/Makefile | 9 +- applications/osmo4_wx/wxOsmo4.cpp | 265 +- applications/osmophone/main.cpp | 155 +- applications/osmozilla/Makefile | 2 +- applications/osmozilla/np_entry.cpp | 305 -- applications/osmozilla/npn_gate.cpp | 215 - applications/osmozilla/npp_gate.cpp | 353 -- applications/osmozilla/npplat.h | 151 - applications/osmozilla/nsIOsmozilla.h | 76 +- applications/osmozilla/osmo_npapi.cpp | 773 ++++ applications/osmozilla/osmo_npapi.h | 133 + applications/osmozilla/osmozilla.cpp | 1015 ++--- applications/osmozilla/osmozilla.h | 298 +- applications/osmozilla/osmozilla.rc | 12 +- applications/udptsseg/Makefile | 162 +- applications/udptsseg/main.c | 630 +-- applications/v4studio/wxGPACPanel.cpp | 87 +- .../release/install/archive.bat | 8 + .../install/{do.bat => build_installer.bat} | 60 +- .../release/install/gpac.inf | 4 +- .../release/nsis_install/gpac_installer.nsi | 7 +- bin/win32/release/nsis_install/readme.txt | 26 +- build/android/AndroidManifest.xml | 2 +- build/android/README | 73 + .../gen/com/{artemis => enst}/gpac/R.java | 2 +- build/android/jni/Android.mk | 2 + build/android/jni/Application.mk | 2 +- build/android/jni/common.mk | 2 +- build/android/jni/gpac_build_android | 104 +- build/android/jni/libgpac/Android.mk | 9 +- build/android/jni/libgpac/config.h | 1 - build/android/jni/modules/base.mk | 2 +- build/android/jni/modules/gm_ffmpeg_in.mk | 8 +- build/android/jni/modules/gm_ft_font.mk | 3 +- build/android/jni/modules/gm_gpac_js.mk | 5 +- build/android/jni/modules/gm_widgetman.mk | 6 +- build/android/jni/mp4box/Android.mk | 20 + build/android/jni/mp4box/Application.mk | 4 + build/android/jni/wrapper/Android.mk | 2 +- .../src/com/{artemis => enst}/gpac/gpac.java | 2 +- build/msvc8/gpac.sln | 320 +- build/msvc8/hyb_in.vcproj | 358 ++ build/msvc8/libgpac.vcproj | 27 +- build/msvc8/libgpac_dll.vcproj | 10 +- build/msvc8/osmozilla.vcproj | 184 +- build/msvc8/rvc_dec.vcproj | 453 ++ build/msvc9/GPAX.vcproj | 156 +- build/msvc9/aac_in.vcproj | 4 +- build/msvc9/ffmpeg_in.vcproj | 4 +- build/msvc9/gpac.sln | 36 +- build/msvc9/libgpac.vcproj | 59 +- build/msvc9/libgpac_dll.vcproj | 9 +- build/msvc9/osmozilla.vcproj | 185 +- build/msvc9/platinum.vcproj | 76 +- build/osxdmg/Osmo4.app/Contents/Info.plist | 4 +- build/xcode/README_IOS.txt | 44 +- .../libgpac_dynamic.dylib | Bin 0 -> 4168 bytes build/xcode/generate_ios.sh | 42 +- .../xcode/gpac4ios.xcodeproj/project.pbxproj | 63 +- build/xcode/libgpac_symbols.h | 6 +- configure | 2474 ++++++----- doc/configuration.html | 25 +- doc/man/mp4box.1 | 310 +- doc/man/mp4client.1 | 5 +- extra_lib/include/ffmpeg_android/.classpath | 7 + extra_lib/include/ffmpeg_android/.project | 33 + .../ffmpeg_android/libavcodec/avcodec.h | 3952 +++++++++++++++++ .../ffmpeg_android/libavformat/avformat.h | 1340 ++++++ .../include/ffmpeg_android/libavformat/avio.h | 525 +++ .../ffmpeg_android/libavutil/attributes.h | 113 + .../ffmpeg_android/libavutil/avconfig.h | 5 + .../include/ffmpeg_android/libavutil/avutil.h | 89 + .../include/ffmpeg_android/libavutil/common.h | 297 ++ .../include/ffmpeg_android/libavutil/error.h | 70 + .../libavutil/intfloat_readwrite.h | 40 + .../include/ffmpeg_android/libavutil/log.h | 115 + .../ffmpeg_android/libavutil/mathematics.h | 98 + .../include/ffmpeg_android/libavutil/mem.h | 125 + .../include/ffmpeg_android/libavutil/pixfmt.h | 162 + .../ffmpeg_android/libavutil/rational.h | 129 + .../ffmpeg_android/libswscale/swscale.h | 330 ++ extra_lib/include/jpeg/android/jconfig.h | 156 - extra_lib/include/jpeg/android/jmorecfg.h | 387 -- extra_lib/include/jpeg/android/jpeglib.h | 1100 ----- extra_lib/include/jpeg/jconfig.h | 46 +- extra_lib/include/jpeg/jmorecfg.h | 4 +- extra_lib/include/jpeg/jpeglib.h | 34 +- extra_lib/include/openssl/asn1.h | 1402 ++++++ extra_lib/include/openssl/bio.h | 770 ++++ extra_lib/include/openssl/bn.h | 858 ++++ extra_lib/include/openssl/buffer.h | 119 + extra_lib/include/openssl/comp.h | 80 + extra_lib/include/openssl/conf.h | 263 ++ extra_lib/include/openssl/crypto.h | 575 +++ extra_lib/include/openssl/dh.h | 260 ++ extra_lib/include/openssl/dsa.h | 307 ++ extra_lib/include/openssl/dtls1.h | 267 ++ extra_lib/include/openssl/e_os2.h | 289 ++ extra_lib/include/openssl/ec.h | 1100 +++++ extra_lib/include/openssl/ecdh.h | 123 + extra_lib/include/openssl/ecdsa.h | 258 ++ extra_lib/include/openssl/err.h | 385 ++ extra_lib/include/openssl/evp.h | 1324 ++++++ extra_lib/include/openssl/hmac.h | 110 + extra_lib/include/openssl/kssl.h | 179 + extra_lib/include/openssl/lhash.h | 241 + extra_lib/include/openssl/obj_mac.h | 3914 ++++++++++++++++ extra_lib/include/openssl/objects.h | 1138 +++++ extra_lib/include/openssl/opensslconf.h | 223 + extra_lib/include/openssl/opensslv.h | 89 + extra_lib/include/openssl/ossl_typ.h | 200 + extra_lib/include/openssl/pem.h | 641 +++ extra_lib/include/openssl/pem2.h | 70 + extra_lib/include/openssl/pkcs7.h | 499 +++ extra_lib/include/openssl/pqueue.h | 94 + extra_lib/include/openssl/rand.h | 140 + extra_lib/include/openssl/rsa.h | 503 +++ extra_lib/include/openssl/safestack.h | 2575 +++++++++++ extra_lib/include/openssl/sha.h | 200 + extra_lib/include/openssl/ssl.h | 2302 ++++++++++ extra_lib/include/openssl/ssl2.h | 268 ++ extra_lib/include/openssl/ssl23.h | 83 + extra_lib/include/openssl/ssl3.h | 637 +++ extra_lib/include/openssl/stack.h | 108 + extra_lib/include/openssl/symhacks.h | 449 ++ extra_lib/include/openssl/tls1.h | 532 +++ extra_lib/include/openssl/x509.h | 1286 ++++++ extra_lib/include/openssl/x509_vfy.h | 567 +++ .../lib/android/armeabi-v7a/libeditline.so | Bin 14036 -> 0 bytes extra_lib/lib/android/armeabi-v7a/libfaad.so | Bin 206248 -> 0 bytes .../lib/android/armeabi-v7a/libffmpeg.so | Bin 3804304 -> 0 bytes extra_lib/lib/android/armeabi-v7a/libft2.so | Bin 304108 -> 0 bytes extra_lib/lib/android/armeabi-v7a/libjpeg.so | Bin 129892 -> 0 bytes .../lib/android/armeabi-v7a/libjs_osmo.so | Bin 488976 -> 0 bytes extra_lib/lib/android/armeabi-v7a/libmad.so | Bin 83688 -> 0 bytes .../lib/android/armeabi-v7a/libopenjpeg.so | Bin 73484 -> 0 bytes extra_lib/lib/android/armeabi-v7a/libpng.so | Bin 101916 -> 0 bytes extra_lib/lib/android/armeabi-v7a/libz.so | Bin 68056 -> 0 bytes extra_lib/lib/android/armeabi/libeditline.so | Bin 14428 -> 0 bytes extra_lib/lib/android/armeabi/libfaad.so | Bin 220948 -> 0 bytes extra_lib/lib/android/armeabi/libffmpeg.so | Bin 3853076 -> 0 bytes extra_lib/lib/android/armeabi/libft2.so | Bin 304104 -> 0 bytes extra_lib/lib/android/armeabi/libjpeg.so | Bin 133636 -> 0 bytes extra_lib/lib/android/armeabi/libjs_osmo.so | Bin 511672 -> 0 bytes extra_lib/lib/android/armeabi/libmad.so | Bin 84304 -> 0 bytes extra_lib/lib/android/armeabi/libopenjpeg.so | Bin 77820 -> 0 bytes extra_lib/lib/android/armeabi/libpng.so | Bin 109644 -> 0 bytes extra_lib/lib/android/armeabi/libz.so | Bin 68988 -> 0 bytes gui/extensions/widget_manager/init.js | 8 +- gui/gui.js | 67 +- gui/gui_old.js | 19 +- gui/mpegu-wm.js | 4 +- include/gpac/bitstream.h | 11 + include/gpac/cache.h | 3 + include/gpac/carousel.h | 178 + include/gpac/compositor.h | 4 +- include/gpac/config_file.h | 12 + include/gpac/configuration.h | 12 +- include/gpac/constants.h | 27 +- include/gpac/download.h | 95 +- include/gpac/esi.h | 5 + include/gpac/events.h | 37 +- include/gpac/ietf.h | 4 + include/gpac/internal/bifs_tables.h | 2 +- include/gpac/internal/camera.h | 2 + include/gpac/internal/compositor_dev.h | 19 +- include/gpac/internal/ietf_dev.h | 2 +- include/gpac/internal/isomedia_dev.h | 52 +- include/gpac/internal/m3u8.h | 376 +- include/gpac/internal/mesh.h | 1 + include/gpac/internal/mpd.h | 261 +- include/gpac/internal/scenegraph_dev.h | 3 +- include/gpac/internal/terminal_dev.h | 30 +- include/gpac/isomedia.h | 51 +- include/gpac/media_tools.h | 12 +- include/gpac/mediaobject.h | 3 +- include/gpac/modules/codec.h | 18 +- include/gpac/modules/service.h | 24 +- include/gpac/mpeg4_odf.h | 18 +- include/gpac/mpegts.h | 209 +- include/gpac/nodes_mpeg4.h | 5 +- include/gpac/options.h | 3 + include/gpac/rtp_streamer.h | 2 +- include/gpac/scene_manager.h | 4 +- include/gpac/setup.h | 5 + include/gpac/terminal.h | 8 + include/gpac/tools.h | 22 +- include/gpac/user.h | 6 +- include/win32/stdint.h | 34 +- include/wince/errno.h | 206 +- mkdmg.sh | 2 + modules/Makefile | 4 + modules/aac_in/Makefile | 2 +- modules/aac_in/aac_in.c | 75 +- modules/aac_in/faad_dec.c | 77 +- modules/ac3_in/liba52_dec.c | 10 +- modules/amr_dec/amr_dec.c | 14 +- modules/amr_float_dec/amr_float_dec.c | 16 +- modules/bifs_dec/Makefile | 2 +- modules/bifs_dec/bifs_dec.c | 10 +- modules/ctx_load/Makefile | 2 +- modules/ctx_load/ctx_load.c | 28 +- modules/directfb_out/Makefile | 2 +- modules/directfb_out/directfb_out.c | 180 +- modules/droid_audio/droidaudio.c | 904 ++-- modules/droid_audio/javaenv.c | 102 +- modules/droid_audio/javaenv.h | 72 +- modules/droid_out/droid_vout-bitmap.c | 432 +- modules/droid_out/droid_vout.c | 1328 +++--- modules/dummy_in/Makefile | 2 +- modules/dx_hw/copy_pixels.c | 140 +- modules/dx_hw/dx_2d.c | 50 +- modules/dx_hw/dx_hw.h | 4 + modules/dx_hw/dx_window.c | 31 +- modules/epoc_hw/epoc_codec.cpp | 22 +- modules/ffmpeg_in/Makefile | 6 +- modules/ffmpeg_in/ffmpeg_decode.c | 92 +- modules/ffmpeg_in/ffmpeg_demux.c | 74 +- modules/ft_font/Makefile | 2 +- modules/gpac_js/gpac_js.c | 167 +- modules/hyb_in/fm_fake_pull.c | 184 + modules/hyb_in/fm_fake_push.c | 307 ++ modules/hyb_in/fm_mmbtools.c | 104 + modules/hyb_in/hyb_in.c | 308 ++ modules/hyb_in/hyb_in.h | 96 + modules/img_in/Makefile | 2 +- modules/img_in/img_dec.c | 25 +- modules/img_in/jp2_dec.c | 4 + modules/ismacryp/Makefile | 2 +- modules/isom_in/Makefile | 2 +- modules/isom_in/load.c | 35 +- modules/isom_in/read.c | 2 +- modules/isom_in/read_ch.c | 26 +- modules/laser_dec/Makefile | 2 +- modules/laser_dec/laser_dec.c | 10 +- modules/libplayer/Makefile | 106 +- modules/libplayer/libplayer.c | 193 +- modules/mp3_in/Makefile | 2 +- modules/mp3_in/mad_dec.c | 20 +- modules/mpd_in/Makefile | 114 +- modules/mpd_in/mpd_in.c | 1583 ++++--- modules/mpegts_in/Makefile | 6 +- modules/mpegts_in/mpegts_in.c | 1021 ++--- modules/odf_dec/Makefile | 2 +- modules/odf_dec/odf_dec.c | 6 +- modules/ogg/ogg_load.c | 20 +- modules/opensvc_dec/Makefile | 2 +- modules/opensvc_dec/opensvc_dec.c | 798 ++-- modules/oss_audio/Makefile | 2 +- modules/platinum/GPACPlatinum.cpp | 7 +- modules/raw_out/Makefile | 2 +- modules/redirect_av/Makefile | 116 +- modules/redirect_av/ffmpeg_ts_muxer.c | 18 +- modules/redirect_av/redirect_av.c | 1645 +++---- modules/rtp_in/Makefile | 2 +- modules/rtp_in/rtp_stream.c | 40 + modules/rtp_in/sdp_fetch.c | 32 +- modules/rtp_in/sdp_load.c | 9 + modules/rvc_dec/Makefile | 56 + modules/rvc_dec/rvc_dec.c | 447 ++ modules/saf_in/Makefile | 2 +- modules/sdl_out/sdl_out.h | 9 +- modules/sdl_out/video.c | 77 +- modules/soft_raster/Makefile | 2 +- modules/soft_raster/raster_argb.c | 4 +- modules/svg_in/Makefile | 2 +- modules/svg_in/svg_in.c | 21 +- modules/timedtext/Makefile | 2 +- modules/timedtext/timedtext_dec.c | 19 +- modules/widgetman/unzip.h | 4 +- modules/widgetman/wgt_load.c | 10 +- modules/widgetman/widgetman.c | 4 +- modules/x11_out/Makefile | 4 +- modules/x11_out/x11_out.c | 8 +- modules/xvid_dec/xvid_dec.c | 13 +- modules/xvid_dec/xvid_dec_wce.cpp | 10 +- .../bifs/bifs-cachetexture_nocache.bt | 2 +- src/Makefile | 5 +- src/bifs/bifs_node_tables.c | 2 +- src/bifs/com_dec.c | 4 +- src/bifs/field_decode.c | 62 +- src/compositor/audio_input.c | 5 +- src/compositor/camera.c | 27 +- src/compositor/compositor.c | 87 +- src/compositor/compositor_2d.c | 4 + src/compositor/compositor_3d.c | 24 +- src/compositor/events.c | 7 +- src/compositor/gl_inc.h | 6 +- src/compositor/hardcoded_protos.c | 6 +- src/compositor/mpeg4_background2d.c | 9 +- src/compositor/mpeg4_composite.c | 4 +- src/compositor/mpeg4_grouping.c | 1 + src/compositor/mpeg4_grouping_2d.c | 23 +- src/compositor/mpeg4_layer_3d.c | 8 +- src/compositor/mpeg4_layout.c | 11 +- src/compositor/mpeg4_textures.c | 168 +- src/compositor/navigate.c | 4 + src/compositor/svg_base.c | 4 +- src/compositor/svg_filters.c | 858 ++-- src/compositor/svg_media.c | 34 +- src/compositor/texturing_gl.c | 114 +- src/compositor/visual_manager.c | 6 +- src/compositor/visual_manager.h | 29 +- src/compositor/visual_manager_2d.c | 11 + src/compositor/visual_manager_2d_draw.c | 31 +- src/compositor/visual_manager_3d.c | 46 +- src/compositor/visual_manager_3d.h | 2 +- src/compositor/visual_manager_3d_gl.c | 332 +- src/export.cpp | 50 +- src/ietf/rtcp.c | 6 +- src/ietf/rtp_depacketizer.c | 8 +- src/ietf/rtp_streamer.c | 4 +- src/ietf/rtsp_command.c | 8 +- src/ietf/rtsp_common.c | 10 +- src/ietf/rtsp_response.c | 12 +- src/ietf/sdp.c | 2 +- src/isomedia/box_code_base.c | 196 +- src/isomedia/box_dump.c | 36 +- src/isomedia/box_funcs.c | 26 +- src/isomedia/data_map.c | 8 +- src/isomedia/hinting.c | 21 +- src/isomedia/isom_intern.c | 27 +- src/isomedia/isom_read.c | 140 +- src/isomedia/isom_store.c | 38 +- src/isomedia/isom_write.c | 124 +- src/isomedia/media.c | 4 +- src/isomedia/meta.c | 101 +- src/isomedia/movie_fragments.c | 352 +- src/isomedia/stbl_read.c | 10 +- src/isomedia/stbl_write.c | 32 +- src/isomedia/track.c | 55 +- src/laser/lsr_dec.c | 8 +- src/laser/lsr_enc.c | 9 +- src/media_tools/av_parsers.c | 45 +- src/media_tools/carousel.c | 409 ++ src/media_tools/dvb.c | 68 + src/media_tools/dvb_mpe.c | 4 +- src/media_tools/img.c | 46 +- src/media_tools/isom_hinter.c | 34 +- src/media_tools/isom_tools.c | 353 +- src/media_tools/m2ts_mux.c | 833 +++- src/media_tools/m3u8.c | 1454 +++--- src/media_tools/media_export.c | 6 +- src/media_tools/media_import.c | 147 +- src/media_tools/mpd.c | 1461 +++--- src/media_tools/mpegts.c | 1010 ++++- src/media_tools/text_import.c | 35 +- src/odf/ipmpx_parse.c | 4 +- src/odf/odf_code.c | 3 +- src/scene_manager/encode_isom.c | 11 +- src/scene_manager/loader_bt.c | 12 +- src/scene_manager/loader_xmt.c | 16 +- src/scene_manager/scene_dump.c | 8 +- src/scene_manager/scene_manager.c | 4 +- src/scene_manager/swf_bifs.c | 2 +- src/scene_manager/text_to_bifs.c | 2 +- src/scenegraph/base_scenegraph.c | 5 +- src/scenegraph/dom_events.c | 12 +- src/scenegraph/dom_smjs.c | 30 +- src/scenegraph/mpeg4_nodes.c | 7 +- src/scenegraph/smil_anim.c | 3033 ++++++------- src/scenegraph/svg_attributes.c | 16 +- src/scenegraph/svg_smjs.c | 82 +- src/scenegraph/vrml_proto.c | 30 +- src/scenegraph/vrml_smjs.c | 29 +- src/terminal/channel.c | 88 +- src/terminal/decoder.c | 253 +- src/terminal/media_manager.c | 18 +- src/terminal/media_memory.c | 62 +- src/terminal/media_memory.h | 3 +- src/terminal/media_object.c | 25 +- src/terminal/media_sensor.c | 28 +- src/terminal/network_service.c | 185 +- src/terminal/object_browser.c | 18 +- src/terminal/object_manager.c | 75 +- src/terminal/scene.c | 185 +- src/terminal/terminal.c | 96 +- src/utils/alloc.c | 1424 +++--- src/utils/base_encoding.c | 2 +- src/utils/bitstream.c | 45 + src/utils/cache.c | 1206 ++--- src/utils/color.c | 69 +- src/utils/configfile.c | 44 +- src/utils/downloader.c | 625 ++- src/utils/error.c | 26 +- src/utils/math.c | 4 +- src/utils/module.c | 12 +- src/utils/os_config_init.c | 518 +++ src/utils/os_divers.c | 94 +- src/utils/os_net.c | 13 +- src/utils/os_thread.c | 20 +- src/utils/xml_parser.c | 2 +- 455 files changed, 61157 insertions(+), 22932 deletions(-) create mode 100644 applications/mp4box/wrapper.c create mode 100644 applications/mp4box_android/.classpath create mode 100644 applications/mp4box_android/.project create mode 100644 applications/mp4box_android/AndroidManifest.xml create mode 100644 applications/mp4box_android/default.properties create mode 100644 applications/mp4box_android/gen/org/enst/mp4box/R.java rename applications/{osmo4_android => mp4box_android}/proguard.cfg (89%) create mode 100644 applications/mp4box_android/res/drawable-hdpi/icon.png create mode 100644 applications/mp4box_android/res/drawable-ldpi/icon.png create mode 100644 applications/mp4box_android/res/drawable-mdpi/icon.png create mode 100644 applications/mp4box_android/res/layout/main.xml create mode 100644 applications/mp4box_android/res/values/strings.xml create mode 100644 applications/mp4box_android/src/com/enst/mp4box/mp4box.java create mode 100644 applications/mp4box_android/src/com/enst/mp4box/mp4terminal.java create mode 100644 applications/osmo4_android/Osmo4_keystore create mode 100644 applications/osmo4_android/build.properties delete mode 100644 applications/osmo4_android/jni/wrapper-bitmap-20-09-2010.cpp delete mode 100644 applications/osmo4_android/jni/wrapper-bitmap-20-09-2010.h delete mode 100644 applications/osmo4_android/local.properties rename applications/osmo4_android/src/com/{artemis => gpac}/Osmo4/BitmapView.java (97%) rename applications/osmo4_android/src/com/{artemis => gpac}/Osmo4/GPACInstance.java (96%) rename applications/osmo4_android/src/com/{artemis => gpac}/Osmo4/GPACInstanceInterface.java (80%) rename applications/osmo4_android/src/com/{artemis => gpac}/Osmo4/GpacCallback.java (97%) rename applications/osmo4_android/src/com/{artemis => gpac}/Osmo4/GpacConfig.java (93%) rename applications/osmo4_android/src/com/{artemis => gpac}/Osmo4/Osmo4.java (97%) rename applications/osmo4_android/src/com/{artemis => gpac}/Osmo4/Osmo4GLSurfaceView.java (93%) rename applications/osmo4_android/src/com/{artemis => gpac}/Osmo4/Osmo4Renderer.java (94%) rename applications/osmo4_android/src/com/{artemis => gpac}/Osmo4/extra/FileArrayAdapter.java (87%) rename applications/osmo4_android/src/com/{artemis => gpac}/Osmo4/extra/FileChooserActivity.java (91%) rename applications/osmo4_android/src/com/{artemis => gpac}/Osmo4/extra/FileEntry.java (80%) rename applications/osmo4_android/src/com/{artemis => gpac}/Osmo4/logs/GpacLogger.java (91%) create mode 100644 applications/osmo4_ios/Resources/icon.png create mode 100644 applications/osmo4_ios/Resources/osmo.icns delete mode 100644 applications/osmozilla/np_entry.cpp delete mode 100644 applications/osmozilla/npn_gate.cpp delete mode 100644 applications/osmozilla/npp_gate.cpp delete mode 100644 applications/osmozilla/npplat.h create mode 100644 applications/osmozilla/osmo_npapi.cpp create mode 100644 applications/osmozilla/osmo_npapi.h create mode 100644 bin/smartphone 2003 (armv4)/release/install/archive.bat rename bin/smartphone 2003 (armv4)/release/install/{do.bat => build_installer.bat} (90%) create mode 100644 build/android/README rename build/android/gen/com/{artemis => enst}/gpac/R.java (95%) create mode 100644 build/android/jni/mp4box/Android.mk create mode 100644 build/android/jni/mp4box/Application.mk rename build/android/src/com/{artemis => enst}/gpac/gpac.java (91%) create mode 100644 build/msvc8/hyb_in.vcproj create mode 100644 build/msvc8/rvc_dec.vcproj create mode 100644 build/xcode/build/Release-iphonesimulator/libgpac_dynamic.dylib create mode 100644 extra_lib/include/ffmpeg_android/.classpath create mode 100644 extra_lib/include/ffmpeg_android/.project create mode 100644 extra_lib/include/ffmpeg_android/libavcodec/avcodec.h create mode 100644 extra_lib/include/ffmpeg_android/libavformat/avformat.h create mode 100644 extra_lib/include/ffmpeg_android/libavformat/avio.h create mode 100644 extra_lib/include/ffmpeg_android/libavutil/attributes.h create mode 100644 extra_lib/include/ffmpeg_android/libavutil/avconfig.h create mode 100644 extra_lib/include/ffmpeg_android/libavutil/avutil.h create mode 100644 extra_lib/include/ffmpeg_android/libavutil/common.h create mode 100644 extra_lib/include/ffmpeg_android/libavutil/error.h create mode 100644 extra_lib/include/ffmpeg_android/libavutil/intfloat_readwrite.h create mode 100644 extra_lib/include/ffmpeg_android/libavutil/log.h create mode 100644 extra_lib/include/ffmpeg_android/libavutil/mathematics.h create mode 100644 extra_lib/include/ffmpeg_android/libavutil/mem.h create mode 100644 extra_lib/include/ffmpeg_android/libavutil/pixfmt.h create mode 100644 extra_lib/include/ffmpeg_android/libavutil/rational.h create mode 100644 extra_lib/include/ffmpeg_android/libswscale/swscale.h delete mode 100644 extra_lib/include/jpeg/android/jconfig.h delete mode 100644 extra_lib/include/jpeg/android/jmorecfg.h delete mode 100644 extra_lib/include/jpeg/android/jpeglib.h create mode 100644 extra_lib/include/openssl/asn1.h create mode 100644 extra_lib/include/openssl/bio.h create mode 100644 extra_lib/include/openssl/bn.h create mode 100644 extra_lib/include/openssl/buffer.h create mode 100644 extra_lib/include/openssl/comp.h create mode 100644 extra_lib/include/openssl/conf.h create mode 100644 extra_lib/include/openssl/crypto.h create mode 100644 extra_lib/include/openssl/dh.h create mode 100644 extra_lib/include/openssl/dsa.h create mode 100644 extra_lib/include/openssl/dtls1.h create mode 100644 extra_lib/include/openssl/e_os2.h create mode 100644 extra_lib/include/openssl/ec.h create mode 100644 extra_lib/include/openssl/ecdh.h create mode 100644 extra_lib/include/openssl/ecdsa.h create mode 100644 extra_lib/include/openssl/err.h create mode 100644 extra_lib/include/openssl/evp.h create mode 100644 extra_lib/include/openssl/hmac.h create mode 100644 extra_lib/include/openssl/kssl.h create mode 100644 extra_lib/include/openssl/lhash.h create mode 100644 extra_lib/include/openssl/obj_mac.h create mode 100644 extra_lib/include/openssl/objects.h create mode 100644 extra_lib/include/openssl/opensslconf.h create mode 100644 extra_lib/include/openssl/opensslv.h create mode 100644 extra_lib/include/openssl/ossl_typ.h create mode 100644 extra_lib/include/openssl/pem.h create mode 100644 extra_lib/include/openssl/pem2.h create mode 100644 extra_lib/include/openssl/pkcs7.h create mode 100644 extra_lib/include/openssl/pqueue.h create mode 100644 extra_lib/include/openssl/rand.h create mode 100644 extra_lib/include/openssl/rsa.h create mode 100644 extra_lib/include/openssl/safestack.h create mode 100644 extra_lib/include/openssl/sha.h create mode 100644 extra_lib/include/openssl/ssl.h create mode 100644 extra_lib/include/openssl/ssl2.h create mode 100644 extra_lib/include/openssl/ssl23.h create mode 100644 extra_lib/include/openssl/ssl3.h create mode 100644 extra_lib/include/openssl/stack.h create mode 100644 extra_lib/include/openssl/symhacks.h create mode 100644 extra_lib/include/openssl/tls1.h create mode 100644 extra_lib/include/openssl/x509.h create mode 100644 extra_lib/include/openssl/x509_vfy.h delete mode 100755 extra_lib/lib/android/armeabi-v7a/libeditline.so delete mode 100755 extra_lib/lib/android/armeabi-v7a/libfaad.so delete mode 100755 extra_lib/lib/android/armeabi-v7a/libffmpeg.so delete mode 100755 extra_lib/lib/android/armeabi-v7a/libft2.so delete mode 100755 extra_lib/lib/android/armeabi-v7a/libjpeg.so delete mode 100755 extra_lib/lib/android/armeabi-v7a/libjs_osmo.so delete mode 100755 extra_lib/lib/android/armeabi-v7a/libmad.so delete mode 100755 extra_lib/lib/android/armeabi-v7a/libopenjpeg.so delete mode 100755 extra_lib/lib/android/armeabi-v7a/libpng.so delete mode 100755 extra_lib/lib/android/armeabi-v7a/libz.so delete mode 100755 extra_lib/lib/android/armeabi/libeditline.so delete mode 100755 extra_lib/lib/android/armeabi/libfaad.so delete mode 100755 extra_lib/lib/android/armeabi/libffmpeg.so delete mode 100755 extra_lib/lib/android/armeabi/libft2.so delete mode 100755 extra_lib/lib/android/armeabi/libjpeg.so delete mode 100755 extra_lib/lib/android/armeabi/libjs_osmo.so delete mode 100755 extra_lib/lib/android/armeabi/libmad.so delete mode 100755 extra_lib/lib/android/armeabi/libopenjpeg.so delete mode 100755 extra_lib/lib/android/armeabi/libpng.so delete mode 100755 extra_lib/lib/android/armeabi/libz.so create mode 100644 include/gpac/carousel.h create mode 100644 modules/hyb_in/fm_fake_pull.c create mode 100644 modules/hyb_in/fm_fake_push.c create mode 100644 modules/hyb_in/fm_mmbtools.c create mode 100644 modules/hyb_in/hyb_in.c create mode 100644 modules/hyb_in/hyb_in.h create mode 100644 modules/rvc_dec/Makefile create mode 100644 modules/rvc_dec/rvc_dec.c create mode 100644 src/media_tools/carousel.c create mode 100644 src/media_tools/dvb.c create mode 100644 src/utils/os_config_init.c diff --git a/INSTALLME b/INSTALLME index 7f548e4..ae0f038 100644 --- a/INSTALLME +++ b/INSTALLME @@ -1,3 +1,14 @@ +Installation instructions for latest GPAC svn version: + +For Windows, Linux and Mac OS X versions, follow the instructions on http://gpac.sourceforge.net/home_download.php + +For WindowsMobile platform, get the latest package of gpac extra libs available on GPAC svn: +http://gpac.svn.sourceforge.net/viewvc/gpac/trunk/gpac_extra_libs/gpac_extra_libs.zip +and follow the instructions in gpac/doc/INSTALL.wCE + + + + Installation instructions for GPAC 0.4.5 - December 2008: diff --git a/Makefile b/Makefile index 3bfe4ce..a04681a 100644 --- a/Makefile +++ b/Makefile @@ -11,7 +11,7 @@ all: version $(MAKE) -C modules all version: - @if which svnversion >/dev/null; then echo "#define GPAC_SVN_REVISION \"$(shell svnversion \"$(SRC_PATH)\")\"" > $(SRC_PATH)/include/gpac/version.h ; else echo "No SVN Version found"; fi + @if which svnversion >/dev/null; then echo "#define GPAC_SVN_REVISION \"$(shell svnversion $(SRC_PATH) )\"" > $(SRC_PATH)/include/gpac/version.h ; else echo "No SVN Version found"; fi lib: version $(MAKE) -C src all @@ -57,7 +57,7 @@ install: $(INSTALL) -d "$(DESTDIR)$(prefix)" $(INSTALL) -d "$(DESTDIR)$(prefix)/bin" $(INSTALL) $(INSTFLAGS) -m 755 bin/gcc/MP4Box "$(DESTDIR)$(prefix)/bin" - $(MAKE) -C applications install + $(INSTALL) $(INSTFLAGS) -m 755 bin/gcc/MP4Client "$(DESTDIR)$(prefix)/bin" $(INSTALL) -d "$(DESTDIR)$(moddir)" $(INSTALL) bin/gcc/*.$(DYN_LIB_SUFFIX) "$(DESTDIR)$(moddir)" rm -f $(DESTDIR)$(moddir)/libgpac.$(DYN_LIB_SUFFIX) @@ -86,14 +86,14 @@ install: uninstall: $(MAKE) -C applications uninstall - rm -rf $(moddir) - rm -rf $(prefix)/$(libdir)/libgpac* - rm -rf $(prefix)/bin/MP4Box - rm -rf $(prefix)/bin/MP4Client - rm -rf $(mandir)/man1/mp4box.1 - rm -rf $(mandir)/man1/mp4client.1 - rm -rf $(mandir)/man1/gpac.1 - rm -rf $(prefix)/share/gpac + rm -rf $(DESTDIR)$(moddir) + rm -rf $(DESTDIR)$(prefix)/$(libdir)/libgpac* + rm -rf $(DESTDIR)$(prefix)/bin/MP4Box + rm -rf $(DESTDIR)$(prefix)/bin/MP4Client + rm -rf $(DESTDIR)$(mandir)/man1/mp4box.1 + rm -rf $(DESTDIR)$(mandir)/man1/mp4client.1 + rm -rf $(DESTDIR)$(mandir)/man1/gpac.1 + rm -rf $(DESTDIR)$(prefix)/share/gpac installdylib: ifeq ($(CONFIG_WIN32),yes) @@ -121,7 +121,7 @@ install-lib: $(INSTALL) $(INSTFLAGS) -m 644 $(SRC_PATH)/include/gpac/internal/*.h "$(DESTDIR)$(prefix)/include/gpac/internal" mkdir -p "$(DESTDIR)$(prefix)/include/gpac/modules" $(INSTALL) $(INSTFLAGS) -m 644 $(SRC_PATH)/include/gpac/modules/*.h "$(DESTDIR)$(prefix)/include/gpac/modules" - $(INSTALL) $(INSTFLAGS) -m 644 $(SRC_PATH)/config.h "$(DESTDIR)$(prefix)/include/gpac/configuration.h" + $(INSTALL) $(INSTFLAGS) -m 644 config.h "$(DESTDIR)$(prefix)/include/gpac/configuration.h" ifeq ($(GPAC_ENST), yes) mkdir -p "$(DESTDIR)$(prefix)/include/gpac/enst" $(INSTALL) $(INSTFLAGS) -m 644 $(SRC_PATH)/include/gpac/enst/*.h "$(DESTDIR)$(prefix)/include/gpac/enst" diff --git a/applications/GPAX/GPAXPlugin.cpp b/applications/GPAX/GPAXPlugin.cpp index 98e3ff6..d37e823 100644 --- a/applications/GPAX/GPAXPlugin.cpp +++ b/applications/GPAX/GPAXPlugin.cpp @@ -294,62 +294,10 @@ BOOL CGPAXPlugin::PreTranslateMessage(MSG* pMsg) LRESULT CGPAXPlugin::OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { if (m_term) return 0; - - char config_path[GF_MAX_PATH], config_test_file[GF_MAX_PATH]; - char *gpac_cfg; const char *str; if (m_hWnd==NULL) return 0; - - gpac_cfg = "GPAC.cfg"; - - //Here we retrieve GPAC config file in the install diractory, which is indicated in the - //Registry - HKEY hKey = NULL; - DWORD dwSize; -#ifdef _WIN32_WCE - u16 w_path[1024]; - RegOpenKeyEx(GPAC_REG_KEY, TEXT("Software\\GPAC"), 0, KEY_READ, &hKey); - DWORD dwType = REG_SZ; - dwSize = GF_MAX_PATH; -#ifdef _DEBUG - if (RegQueryValueEx(hKey, TEXT("DebugDir"), 0, &dwType, (LPBYTE) w_path, &dwSize) != ERROR_SUCCESS) -#endif - RegQueryValueEx(hKey, TEXT("InstallDir"), 0, &dwType, (LPBYTE) w_path, &dwSize); - CE_WideToChar(w_path, (char *)config_path); - RegCloseKey(hKey); -#else - /*locate the key in current user, then in local machine*/ - if (RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\GPAC", 0, KEY_READ, &hKey) != ERROR_SUCCESS) - RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\GPAC", 0, KEY_READ, &hKey); - dwSize = GF_MAX_PATH; -#ifdef _DEBUG - if (RegQueryValueEx(hKey, "DebugDir", NULL, NULL,(unsigned char*) config_path, &dwSize) != ERROR_SUCCESS) -#endif - RegQueryValueEx(hKey, "InstallDir", NULL, NULL,(unsigned char*) config_path, &dwSize); - RegCloseKey(hKey); - - /*do we have write access?*/ - strcpy(config_test_file, config_path); - assert(strlen(config_path)+strlen(gpac_cfg)+1familly, bf->name, bf->type); } } + if (!strcmp(n->name, "CacheTexture")) { + fprintf(f, "\t/*GPAC private*/\n"); + fprintf(f, "\tu8 *data;\n"); + fprintf(f, "\tu32 data_len;\n"); + } fprintf(f, "} M_%s;\n\n\n", n->name); } @@ -878,6 +883,9 @@ void WriteNodeCode(GF_List *BNodes) } } } + if (!strcmp(n->name, "CacheTexture")) { + fprintf(f, "\tif (p->data) gf_free(p->data);\n"); + } if (is_parent) fprintf(f, "\tgf_sg_vrml_parent_destroy((GF_Node *) p);\t\n"); fprintf(f, "\tgf_node_free((GF_Node *) p);\n}\n\n"); @@ -1686,7 +1694,7 @@ int main (int argc, char **argv) BNode *n; BField *bf; - if (argc < 2) { + if (argc < 1) { PrintUsage(); return 0; } @@ -1697,16 +1705,18 @@ int main (int argc, char **argv) fskip = NULL; - i=1; - if (!strcmp(argv[i], "-ndt")) { - generate_ndt = 1; - } else if (argv[i][0]=='-') { - fskip = fopen(argv[i+1], "rt"); - if (!fskip) { - printf("file %s not found\n", argv[i+1]); - return 0; + if (argc>1) { + i=1; + if (!strcmp(argv[i], "-ndt")) { + generate_ndt = 1; + } else if (argv[i][0]=='-') { + fskip = fopen(argv[i+1], "rt"); + if (!fskip) { + printf("file %s not found\n", argv[i+1]); + return 0; + } + i+=2; } - i+=2; } nbVersion=1; while (1) { diff --git a/applications/generators/MPEG4/templates10.txt b/applications/generators/MPEG4/templates10.txt index 70b3d0c..1c4898a 100644 --- a/applications/generators/MPEG4/templates10.txt +++ b/applications/generators/MPEG4/templates10.txt @@ -1,53 +1,53 @@ -PROTO CacheTexture [#%NDT=SFWorldNode,SF2DNode,SF3DNode,SFTextureNode %COD=N -field SFInt32 objectTypeIndication 0 -field SFString decoderSpecificInfo "" -field SFString image "" -field SFString cacheURL "" -field MFURL cacheOD [] -field SFInt32 expirationDate 0 -field SFBool repeatS TRUE -field SFBool repeatT TRUE -]{} - -PROTO EnvironmentTest [ #%NDT=SFWorldNode,SF2DNode,SF3DNode %COD=N -eventIn SFBool evaluate -exposedField SFBool enabled TRUE -exposedField SFInt32 parameter 0 -exposedField SFString compareValue "" -exposedField SFBool evaluateOnChange TRUE -eventOut SFBool valueLarger -eventOut SFBool valueEqual -eventOut SFBool valueSmaller -eventOut SFString parameterValue -] {} - - -PROTO KeyNavigator [ #%NDT=SFWorldNode,SF2DNode,SF3DNode %COD=N -eventIn SFBool setFocus -exposedField SF3DNode sensor NULL -exposedField SF2DNode left NULL -exposedField SF2DNode right NULL -exposedField SF2DNode up NULL -exposedField SF2DNode down NULL -exposedField SF2DNode select NULL -exposedField SF2DNode quit NULL -exposedField SFFloat step 0 -eventOut SFBool focusSet -]{} - -PROTO SpacePartition [ #%NDT=SFWorldNode,SF3DNode %COD=N -eventIn MF3DNode addChildren -eventIn MF3DNode removeChildren -exposedField MF3DNode children [] -exposedField SFUrl SPStream NULL -]{} - -PROTO Storage [ #%NDT=SFWorldNode,SF2DNode,SF3DNode %COD=N -eventIn SFBool forceSave -eventIn SFBool forceRestore -exposedField SFBool auto TRUE -field SFInt32 expireAfter 0 -field SFString name "" -field MFAttrRef storageList [] -]{} - +PROTO CacheTexture [#%NDT=SFWorldNode,SF2DNode,SF3DNode,SFTextureNode %COD=N +field SFInt32 objectTypeIndication 0 +field SFString decoderSpecificInfo "" +field SFString image "" +field SFString cacheURL "" +field MFURL cacheOD [] +field SFInt32 expirationDate 0 +field SFBool repeatS TRUE +field SFBool repeatT TRUE +]{} + +PROTO EnvironmentTest [ #%NDT=SFWorldNode,SF2DNode,SF3DNode %COD=N +eventIn SFBool evaluate +exposedField SFBool enabled TRUE +exposedField SFInt32 parameter 0 +exposedField SFString compareValue "" +exposedField SFBool evaluateOnChange TRUE +eventOut SFBool valueLarger +eventOut SFBool valueEqual +eventOut SFBool valueSmaller +eventOut SFString parameterValue +] {} + + +PROTO KeyNavigator [ #%NDT=SFWorldNode,SF2DNode,SF3DNode %COD=N +eventIn SFBool setFocus +exposedField SF3DNode sensor NULL +exposedField SF2DNode left NULL +exposedField SF2DNode right NULL +exposedField SF2DNode up NULL +exposedField SF2DNode down NULL +exposedField SF2DNode select NULL +exposedField SF2DNode quit NULL +exposedField SFFloat step 0 +eventOut SFBool focusSet +]{} + +PROTO SpacePartition [ #%NDT=SFWorldNode,SF3DNode %COD=N +eventIn MF3DNode addChildren +eventIn MF3DNode removeChildren +exposedField MF3DNode children [] +exposedField SFURL SPStream NULL +]{} + +PROTO Storage [ #%NDT=SFWorldNode,SF2DNode,SF3DNode %COD=N +eventIn SFBool forceSave +eventIn SFBool forceRestore +exposedField SFBool auto TRUE +field SFInt32 expireAfter 0 +field SFString name "" +field MFAttrRef storageList [] +]{} + diff --git a/applications/generators/MPEG4/templates8.txt b/applications/generators/MPEG4/templates8.txt index 93f2a87..2a907b2 100644 --- a/applications/generators/MPEG4/templates8.txt +++ b/applications/generators/MPEG4/templates8.txt @@ -1,124 +1,124 @@ -#-- Version 8 --# -# -# Beta for Symbolic Music Representation (SMR) -# -# templates for the BIFS nodes -# ============================= -# Notations I = Infinity -# %q=x Quantization method x -# 0 None -# 1 3D Position (SFVec3F) -# 2 2D Position (SFVec2F) -# 3 drawing Order -# 4 Color (SFColor) -# 5 Texture Coordinate -# 6 Angle (SFFloat 0-2PI) -# 7 Scale (SFVec2F or SFVec3F) -# 8 Interpolators keys -# 9 Normals -# 10 Rotations (SFRotation) -# 11 Object Size 3D (SFVec3F and SFFloat) -# 12 Object Size 2D -# 13 Linear Quantization (+ Nb Bits) -# 14 Index (of IndexedFaceSet,...) -# 15 SFVec4f -# 16 Reserved -# -# %a=y Animation method for fields that can be animated -# -## OO 081498 To match BIFS's update numbering -# 0 None -# 1 Position 3D -# 2 Position 2D -# 4 Color -# 6 Angle -# 7 Float -# 8 BoundFloat (intensities, transparencies,...) -# 9 Normal -# 10 Rotation -# 11 Size 3D -# 12 Size 2D -# 13 Integer -# 14 Reserved -## 0 3D Position -## 1 2D positon -## 2 Color (SFColor) -## 3 Angle (SFFloat 0-2pi) -## 4 Normals -## 5 Scale (SFVec2F) -## 6 Rotation (SFRotation) -## 7 Object Size or Scalar (SFFloat) -# -# %b=[min,max] bounds of value -# For each scalar or vectorial value, bounds may be specified. -# This will be used to check if user-specified values are out of bounds. In -# this case, bounds specified in the templates will be used (if not infinity). -# -# %NDT=Node Data Type -# For each node, one or several Node Data Types are assigned, specifying which node sub -# types the node belongs to. Moreover, each field of type SF/MF3DNode is re assigned -# a unique correct NodeDataType according to specify the allowed values of the field -# -# %COD Type of encoding -# N Normal Syntax : The node syntax follos the generic syntax for nodes -# S Special Syntax : The node has a specific syntax -# -# -# NCT => VRML type equivalence -# -# SF/MFxxxNode => SF/MFNode -# SF/MFURL => SF/MFString -# SF/MFCommandBuffer => SF/MFString -# SF/MFScript => SF/MFString -# -# -# Modification History -# ------------------------------------------------ -# October 9, 2006 [MBS] Added SMR nodes based on w8121 - -# -# Symbolic Music Representation (SMR) nodes -# - - -PROTO ScoreShape [ #%NDT=SFWorldNode,SF2DNode,SF3DNode %COD=N -exposedField SFMusicScoreNode score NULL -exposedField SFNode geometry NULL -]{} - - -PROTO MusicScore [ #%NDT=SFWorldNode,SFMusicScoreNode %COD=N -eventIn SFBool executeCommand -eventIn SFString gotoLabel -eventIn SFInt32 gotoMeasure -eventIn SFTime highlightTimePosition -eventIn SFVec3f mousePosition -exposedField MFString argumentsOnExecute [] -exposedField SFString commandOnExecute "" -exposedField SFInt32 firstVisibleMeasure 0 -exposedField SFBool hyperlinkEnable TRUE -exposedField SFBool loop FALSE -exposedField MFString partsLyrics [] -exposedField MFInt32 partsShown [] -exposedField SFTime scoreOffset 0.0 -exposedField SFVec2f size -1, -1 -exposedField SFFloat speed 1.0 #%b=(-I,+I) #%q=0 #%a=7 -exposedField SFTime startTime 0 #%b=(-I,+I) -exposedField SFTime stopTime 0 #%b=(-I,+I) -exposedField SFFloat transpose 0.0 -exposedField MFURL url [] -exposedField MFURL urlSA [] -exposedField SFString viewType "" -eventOut SFString activatedLink -eventOut MFString availableCommands -eventOut MFString availableLabels -eventOut MFString availableLyricLanguages -eventOut MFString availableViewTypes -eventOut SFBool isActive -eventOut SFVec3f highlightPosition -eventOut SFInt32 lastVisibleMeasure -eventOut SFInt32 numMeasures -eventOut MFString partNames -]{} - - +#-- Version 8 --# +# +# Beta for Symbolic Music Representation (SMR) +# +# templates for the BIFS nodes +# ============================= +# Notations I = Infinity +# %q=x Quantization method x +# 0 None +# 1 3D Position (SFVec3F) +# 2 2D Position (SFVec2F) +# 3 drawing Order +# 4 Color (SFColor) +# 5 Texture Coordinate +# 6 Angle (SFFloat 0-2PI) +# 7 Scale (SFVec2F or SFVec3F) +# 8 Interpolators keys +# 9 Normals +# 10 Rotations (SFRotation) +# 11 Object Size 3D (SFVec3F and SFFloat) +# 12 Object Size 2D +# 13 Linear Quantization (+ Nb Bits) +# 14 Index (of IndexedFaceSet,...) +# 15 SFVec4f +# 16 Reserved +# +# %a=y Animation method for fields that can be animated +# +## OO 081498 To match BIFS's update numbering +# 0 None +# 1 Position 3D +# 2 Position 2D +# 4 Color +# 6 Angle +# 7 Float +# 8 BoundFloat (intensities, transparencies,...) +# 9 Normal +# 10 Rotation +# 11 Size 3D +# 12 Size 2D +# 13 Integer +# 14 Reserved +## 0 3D Position +## 1 2D positon +## 2 Color (SFColor) +## 3 Angle (SFFloat 0-2pi) +## 4 Normals +## 5 Scale (SFVec2F) +## 6 Rotation (SFRotation) +## 7 Object Size or Scalar (SFFloat) +# +# %b=[min,max] bounds of value +# For each scalar or vectorial value, bounds may be specified. +# This will be used to check if user-specified values are out of bounds. In +# this case, bounds specified in the templates will be used (if not infinity). +# +# %NDT=Node Data Type +# For each node, one or several Node Data Types are assigned, specifying which node sub +# types the node belongs to. Moreover, each field of type SF/MF3DNode is re assigned +# a unique correct NodeDataType according to specify the allowed values of the field +# +# %COD Type of encoding +# N Normal Syntax : The node syntax follos the generic syntax for nodes +# S Special Syntax : The node has a specific syntax +# +# +# NCT => VRML type equivalence +# +# SF/MFxxxNode => SF/MFNode +# SF/MFURL => SF/MFString +# SF/MFCommandBuffer => SF/MFString +# SF/MFScript => SF/MFString +# +# +# Modification History +# ------------------------------------------------ +# October 9, 2006 [MBS] Added SMR nodes based on w8121 + +# +# Symbolic Music Representation (SMR) nodes +# + + +PROTO ScoreShape [ #%NDT=SFWorldNode,SF2DNode,SF3DNode %COD=N +exposedField SFMusicScoreNode score NULL +exposedField SF2DNode geometry NULL +]{} + + +PROTO MusicScore [ #%NDT=SFWorldNode,SFMusicScoreNode %COD=N +eventIn SFBool executeCommand +eventIn SFString gotoLabel +eventIn SFInt32 gotoMeasure +eventIn SFTime highlightTimePosition +eventIn SFVec3f mousePosition +exposedField MFString argumentsOnExecute [] +exposedField SFString commandOnExecute "" +exposedField SFInt32 firstVisibleMeasure 0 +exposedField SFBool hyperlinkEnable TRUE +exposedField SFBool loop FALSE +exposedField MFString partsLyrics [] +exposedField MFInt32 partsShown [] +exposedField SFTime scoreOffset 0.0 +exposedField SFVec2f size -1 -1 +exposedField SFFloat speed 1.0 #%b=(-I,+I) #%q=0 #%a=7 +exposedField SFTime startTime 0 #%b=(-I,+I) +exposedField SFTime stopTime 0 #%b=(-I,+I) +exposedField SFFloat transpose 0.0 +exposedField MFURL url [] +exposedField MFURL urlSA [] +exposedField SFString viewType "" +eventOut SFString activatedLink +eventOut MFString availableCommands +eventOut MFString availableLabels +eventOut MFString availableLyricLanguages +eventOut MFString availableViewTypes +eventOut SFBool isActive +eventOut SFVec3f highlightPosition +eventOut SFInt32 lastVisibleMeasure +eventOut SFInt32 numMeasures +eventOut MFString partNames +]{} + + diff --git a/applications/generators/MPEG4/templates9.txt b/applications/generators/MPEG4/templates9.txt index 465437b..16f86b4 100644 --- a/applications/generators/MPEG4/templates9.txt +++ b/applications/generators/MPEG4/templates9.txt @@ -1,68 +1,68 @@ -PROTO FootPrintSetNode [#%NDT=SFWorldNode,SF3DNode,SFGeometryNode %COD=N -exposedField MFGeometryNode children [] -]{} - -PROTO FootPrintNode [#%NDT=SFWorldNode,SF3DNode,SFGeometryNode %COD=N - -exposedField SFInt32 index -1 #%b=[0,65535] -exposedField SFGeometryNode footprint NULL -]{} - -PROTO BuildingPartNode [#%NDT=SFWorldNode,SF3DNode,SFGeometryNode %COD=N - -exposedField SFInt32 index -1 #%b=[0,65535] -exposedField SFGeometryNode footprint NULL -exposedField SFInt32 buildingIndex -1 #%b=[0,65535] -exposedField SFFloat height 0 #%b=[0,I] -exposedField SFFloat altitude 0 #%b=[0,I] -exposedField MFGeometryNode alternativeGeometry [] -exposedField MFGeometryNode roofs [] -exposedField MFGeometryNode facades [] -]{} - - - -PROTO RoofNode [#%NDT=SFWorldNode,SF3DNode,SFGeometryNode %COD=N - -exposedField SFInt32 Type 0 #%b=[0,65535] -exposedField SFFloat Height 0.0 #%b=[0,I] -exposedField MFFloat SlopeAngle [0.0] #%b=[0,6.2831854] -exposedField SFFloat EaveProjection 0.0 -exposedField SFInt32 EdgeSupportIndex -1 #%b=[0,65535] -exposedField SFURL RoofTextureURL "" -exposedField SFBool IsGenericTexture TRUE -exposedField SFFloat TextureXScale 1.0 #%b=[0,I] -exposedField SFFloat TextureYScale 1.0 #%b=[0,I] -exposedField SFFloat TextureXPosition 0.0 #%b=[0,I] -exposedField SFFloat TextureYPosition 0.0 #%b=[0,I] -exposedField SFFloat TextureRotation 0.0 #%b=[0,I] -]{} - - - -PROTO FacadeNode [#%NDT=SFWorldNode,SF3DNode,SFGeometryNode %COD=N -exposedField SFFloat WidthRatio 1.0 #%b=[-I,I] -exposedField SFFloat XScale 1.0 #%b=[-I,I] -exposedField SFFloat YScale 1.0 #%b=[-I,I] -exposedField SFFloat XPosition 0.0 #%b=[-I,I] -exposedField SFFloat YPosition 0.0 #%b=[-I,I] -exposedField SFFloat XRepeatInterval 0.0 #%b=[-I,I] -exposedField SFFloat YRepeatInterval 0.0 #%b=[-I,I] -exposedField SFBool Repeat FALSE -exposedField SFURL FacadePrimitive "" -exposedField SFInt32 NbStories 0 #%b=[0,65535] -exposedField MFInt32 NbFacadeCellsByStorey 0 -exposedField MFFloat StoreyHeight 1.0 #%b=[0,I] -exposedField MFGeometryNode FacadeCellsArray [] -]{} - - -PROTO Shadow [#%NDT=SFWorldNode,SF3DNode,SFGeometryNode %COD=N -eventIn SF3DNode addChildren -eventIn SF3DNode removeChildren -exposedField MF3DNode children [] -exposedField SFBool enabled TRUE -exposedField SFBool cast TRUE -exposedField SFBool receive TRUE -exposedField SFFloat penumbra 0 #%b=[0,I] -]{} +PROTO FootPrintSetNode [#%NDT=SFWorldNode,SF3DNode,SFGeometryNode %COD=N +exposedField MFGeometryNode children [] +]{} + +PROTO FootPrintNode [#%NDT=SFWorldNode,SF3DNode,SFGeometryNode %COD=N + +exposedField SFInt32 index -1 #%b=[0,65535] +exposedField SFGeometryNode footprint NULL +]{} + +PROTO BuildingPartNode [#%NDT=SFWorldNode,SF3DNode,SFGeometryNode %COD=N + +exposedField SFInt32 index -1 #%b=[0,65535] +exposedField SFGeometryNode footprint NULL +exposedField SFInt32 buildingIndex -1 #%b=[0,65535] +exposedField SFFloat height 0 #%b=[0,I] +exposedField SFFloat altitude 0 #%b=[0,I] +exposedField MFGeometryNode alternativeGeometry [] +exposedField MFGeometryNode roofs [] +exposedField MFGeometryNode facades [] +]{} + + + +PROTO RoofNode [#%NDT=SFWorldNode,SF3DNode,SFGeometryNode %COD=N + +exposedField SFInt32 Type 0 #%b=[0,65535] +exposedField SFFloat Height 0.0 #%b=[0,I] +exposedField MFFloat SlopeAngle [0.0] #%b=[0,6.2831854] +exposedField SFFloat EaveProjection 0.0 +exposedField SFInt32 EdgeSupportIndex -1 #%b=[0,65535] +exposedField SFURL RoofTextureURL "" +exposedField SFBool IsGenericTexture TRUE +exposedField SFFloat TextureXScale 1.0 #%b=[0,I] +exposedField SFFloat TextureYScale 1.0 #%b=[0,I] +exposedField SFFloat TextureXPosition 0.0 #%b=[0,I] +exposedField SFFloat TextureYPosition 0.0 #%b=[0,I] +exposedField SFFloat TextureRotation 0.0 #%b=[0,I] +]{} + + + +PROTO FacadeNode [#%NDT=SFWorldNode,SF3DNode,SFGeometryNode %COD=N +exposedField SFFloat WidthRatio 1.0 #%b=[-I,I] +exposedField SFFloat XScale 1.0 #%b=[-I,I] +exposedField SFFloat YScale 1.0 #%b=[-I,I] +exposedField SFFloat XPosition 0.0 #%b=[-I,I] +exposedField SFFloat YPosition 0.0 #%b=[-I,I] +exposedField SFFloat XRepeatInterval 0.0 #%b=[-I,I] +exposedField SFFloat YRepeatInterval 0.0 #%b=[-I,I] +exposedField SFBool Repeat FALSE +exposedField SFURL FacadePrimitive "" +exposedField SFInt32 NbStories 0 #%b=[0,65535] +exposedField MFInt32 NbFacadeCellsByStorey 0 +exposedField MFFloat StoreyHeight 1.0 #%b=[0,I] +exposedField MFGeometryNode FacadeCellsArray [] +]{} + + +PROTO Shadow [#%NDT=SFWorldNode,SF3DNode,SFGeometryNode %COD=N +eventIn SF3DNode addChildren +eventIn SF3DNode removeChildren +exposedField MF3DNode children [] +exposedField SFBool enabled TRUE +exposedField SFBool cast TRUE +exposedField SFBool receive TRUE +exposedField SFFloat penumbra 0 #%b=[0,I] +]{} diff --git a/applications/m3u82mpd/main.c b/applications/m3u82mpd/main.c index e3732e2..114c4d4 100644 --- a/applications/m3u82mpd/main.c +++ b/applications/m3u82mpd/main.c @@ -1,116 +1,116 @@ -/* - * GPAC - Multimedia Framework C SDK - * - * Copyright (c) Telecom ParisTech 2010 - - * All rights reserved - * - * This file is part of GPAC / m3u82mpd application - * - * GPAC is gf_free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * GPAC 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -#include "../modules/mpd_in/m3u8.h" -#include -#include - -int main(int argc, char **argv) -{ - GF_Err e; - VariantPlaylist * pl = NULL; - char *url = argv[1]; - char *cache_m3u8_file; - u32 i, count; - FILE *fmpd; - Bool verbose = 0; - u32 update_interval = 0; - char *m3u8_local_name = "file.m3u8"; - Bool is_local = 0; - - gf_sys_init(0); - - gf_log_set_level(verbose ? GF_LOG_DEBUG : GF_LOG_INFO); - gf_log_set_tools(GF_LOG_NETWORK); - - while (1) { - - if (gf_url_is_local(url)) { - m3u8_local_name = url; - is_local = 1; - } else { - e = gf_dm_wget(url, m3u8_local_name); - if (e != GF_OK) return -1; - } - - e = parse_root_playlist(m3u8_local_name, &pl, "."); - if (e != GF_OK) return -1; - - fmpd = fopen(argv[2], "wt"); - - fprintf(fmpd, "\n"); - fprintf(fmpd, " \n"); - fprintf(fmpd, " Media Presentation Description for file %s\n", url); - fprintf(fmpd, " Generated by GPAC %s\n", GPAC_FULL_VERSION); - - fprintf(fmpd, " \n"); - fprintf(fmpd, " \n"); - - count = gf_list_count(pl->programs); - for (i=0; iprograms, i); - count2 = gf_list_count(prog->bitrates); - for (j = 0; jbitrates, j); - fprintf(stdout, "%d, %d, %s, %s, %d\n", pe->durationInfo, pe->bandwidth, pe->title, pe->url, pe->elementType); - if (pe->elementType == TYPE_PLAYLIST) { - u32 k, count3; - char *tmp; - char c; - char baseURL[GF_MAX_PATH]; - tmp = strrchr(url, '/'); - tmp++; - c = tmp[0]; - tmp[0] = 0; - strcpy(baseURL, url); - tmp[0] = c; - fprintf(fmpd, " \n"); - fprintf(fmpd, " \n", pe->durationInfo, baseURL); - count3 = gf_list_count(pe->element.playlist.elements); - update_interval = (count3 - 1) * pe->durationInfo * 1000; - for (k=0; kelement.playlist.elements, k); - if (k) fprintf(fmpd, " \n", elt->url); - else fprintf(fmpd, " \n", elt->url); - } - fprintf(fmpd, " \n"); - fprintf(fmpd, " \n"); - } else if (pe->elementType == TYPE_STREAM) { - fprintf(stdout, "Stream\n"); - } - } - } - fprintf(fmpd, " \n"); - fprintf(fmpd, ""); - fclose(fmpd); - variant_playlist_del(pl); - if (is_local) break; - gf_sleep(update_interval); - - } - - gf_sys_close(); - return 0; -} +/* + * GPAC - Multimedia Framework C SDK + * + * Copyright (c) Telecom ParisTech 2010 - + * All rights reserved + * + * This file is part of GPAC / m3u82mpd application + * + * GPAC is gf_free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * GPAC 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; see the file COPYING. If not, write to + * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + * + */ + +#include "../modules/mpd_in/m3u8.h" +#include +#include + +int main(int argc, char **argv) +{ + GF_Err e; + VariantPlaylist * pl = NULL; + char *url = argv[1]; + char *cache_m3u8_file; + u32 i, count; + FILE *fmpd; + Bool verbose = 0; + u32 update_interval = 0; + char *m3u8_local_name = "file.m3u8"; + Bool is_local = 0; + + gf_sys_init(0); + + gf_log_set_level(verbose ? GF_LOG_DEBUG : GF_LOG_INFO); + gf_log_set_tools(GF_LOG_NETWORK); + + while (1) { + + if (gf_url_is_local(url)) { + m3u8_local_name = url; + is_local = 1; + } else { + e = gf_dm_wget(url, m3u8_local_name); + if (e != GF_OK) return -1; + } + + e = parse_root_playlist(m3u8_local_name, &pl, "."); + if (e != GF_OK) return -1; + + fmpd = fopen(argv[2], "wt"); + + fprintf(fmpd, "\n"); + fprintf(fmpd, " \n"); + fprintf(fmpd, " Media Presentation Description for file %s\n", url); + fprintf(fmpd, " Generated by GPAC %s\n", GPAC_FULL_VERSION); + + fprintf(fmpd, " \n"); + fprintf(fmpd, " \n"); + + count = gf_list_count(pl->programs); + for (i=0; iprograms, i); + count2 = gf_list_count(prog->bitrates); + for (j = 0; jbitrates, j); + fprintf(stdout, "%d, %d, %s, %s, %d\n", pe->durationInfo, pe->bandwidth, pe->title, pe->url, pe->elementType); + if (pe->elementType == TYPE_PLAYLIST) { + u32 k, count3; + char *tmp; + char c; + char baseURL[GF_MAX_PATH]; + tmp = strrchr(url, '/'); + tmp++; + c = tmp[0]; + tmp[0] = 0; + strcpy(baseURL, url); + tmp[0] = c; + fprintf(fmpd, " \n"); + fprintf(fmpd, " \n", pe->durationInfo, baseURL); + count3 = gf_list_count(pe->element.playlist.elements); + update_interval = (count3 - 1) * pe->durationInfo * 1000; + for (k=0; kelement.playlist.elements, k); + if (k) fprintf(fmpd, " \n", elt->url); + else fprintf(fmpd, " \n", elt->url); + } + fprintf(fmpd, " \n"); + fprintf(fmpd, " \n"); + } else if (pe->elementType == TYPE_STREAM) { + fprintf(stdout, "Stream\n"); + } + } + } + fprintf(fmpd, " \n"); + fprintf(fmpd, ""); + fclose(fmpd); + variant_playlist_del(pl); + if (is_local) break; + gf_sleep(update_interval); + + } + + gf_sys_close(); + return 0; +} diff --git a/applications/mp42avi/main.c b/applications/mp42avi/main.c index de19cc4..ad7def4 100644 --- a/applications/mp42avi/main.c +++ b/applications/mp42avi/main.c @@ -233,58 +233,6 @@ void dump_frame(BIFSVID b2v, char *conv_buf, char *out_path, u32 dump_type, avi_ gf_sc_release_screen_buffer(b2v.sr, &fb); } - - -GF_Config *loadconfigfile() -{ - GF_Config *cfg; - char *cfg_dir; - char szPath[GF_MAX_PATH]; - -#ifdef WIN32 - GetModuleFileNameA(NULL, szPath, GF_MAX_PATH); - cfg_dir = strrchr(szPath, '\\'); - if (cfg_dir) cfg_dir[1] = 0; - - cfg = gf_cfg_new(szPath, "GPAC.cfg"); - if (cfg) goto success; - -#ifdef _DEBUG - strcpy(szPath, "C:\\Users\\Cyril\\sourceforge\\gpac\\bin\\w32_deb\\"); -#else - strcpy(szPath, "C:\\Users\\Cyril\\sourceforge\\gpac\\bin\\w32_rel\\"); -#endif - cfg = gf_cfg_new(szPath, "GPAC.cfg"); - if (cfg) goto success; - strcpy(szPath, "."); - cfg = gf_cfg_new(szPath, "GPAC.cfg"); - if (cfg) goto success; - strcpy(szPath, "C:\\Program Files\\GPAC"); - cfg = gf_cfg_new(szPath, "GPAC.cfg"); - if (cfg) goto success; - strcpy(szPath, "."); - cfg = gf_cfg_new(szPath, "GPAC.cfg"); -#else - /*linux*/ - cfg_dir = getenv("HOME"); - if (cfg_dir) { - strcpy(szPath, cfg_dir); - } else { - fprintf(stdout, "WARNING: HOME env var not set - using current directory for config file\n"); - strcpy(szPath, "."); - } - cfg = gf_cfg_new(szPath, ".gpacrc"); - if (cfg) goto success; -#endif - if (!cfg) { - fprintf(stdout, "cannot create config file in %s directory\n", szPath); - return NULL; - } - success: - fprintf(stdout, "Using config file in %s directory\n", szPath); - return cfg; -} - /*generates an intertwined bmp from a scene file with 5 different viewpoints*/ void bifs3d_viewpoints_merger(GF_ISOFile *file, char *szConfigFile, u32 width, u32 height, char *rad_name, u32 dump_type, char *out_dir, Double fps, s32 frameID, s32 dump_time) { @@ -305,20 +253,11 @@ void bifs3d_viewpoints_merger(GF_ISOFile *file, char *szConfigFile, u32 width, u const char *test; char config_path[GF_MAX_PATH]; memset(&user, 0, sizeof(GF_User)); - if (szConfigFile && strlen(szConfigFile)) { - user.config = gf_cfg_new(config_path, GPAC_CFG_FILE); - } else { - user.config = loadconfigfile(); - } + user.config = gf_cfg_init(szConfigFile, NULL); if (!user.config) { - fprintf(stdout, "Configuration File \"GPAC.cfg\" not found\nPlease enter full path to config file:\n"); - scanf("%s", config_path); - user.config = gf_cfg_new(config_path, GPAC_CFG_FILE); - if (!user.config) { - fprintf(stdout, "Error: Configuration File \"%s\" not found in %s\n", GPAC_CFG_FILE, config_path); - return; - } + fprintf(stdout, "Error: Configuration File \"%s\" not found in %s\n", GPAC_CFG_FILE, config_path); + return; } test = gf_cfg_get_key(user.config, "General", "ModulesDirectory"); @@ -528,19 +467,14 @@ void bifs_to_vid(GF_ISOFile *file, char *szConfigFile, u32 width, u32 height, ch memset(&user, 0, sizeof(GF_User)); if (szConfigFile && strlen(szConfigFile)) { - user.config = gf_cfg_new(config_path, GPAC_CFG_FILE); + user.config = gf_cfg_init(config_path, NULL); } else { - user.config = loadconfigfile(); + user.config = gf_cfg_init(NULL, NULL); } if (!user.config) { - fprintf(stdout, "Configuration File \"GPAC.cfg\" not found\nPlease enter full path to config file:\n"); - scanf("%s", config_path); - user.config = gf_cfg_new(config_path, GPAC_CFG_FILE); - if (!user.config) { - fprintf(stdout, "Error: Configuration File \"%s\" not found in %s\n", GPAC_CFG_FILE, config_path); - return; - } + fprintf(stdout, "Error: Configuration File \"%s\" not found in %s\n", GPAC_CFG_FILE, config_path); + return; } avi_out = NULL; conv_buf = NULL; diff --git a/applications/mp42ts/main.c b/applications/mp42ts/main.c index 5a6c12d..4f9261a 100644 --- a/applications/mp42ts/main.c +++ b/applications/mp42ts/main.c @@ -29,7 +29,8 @@ #include #include -#define TDMB_PSI_REFRESH_RATE 500 /*repeat PAT/PMT every TDMB_PSI_REFRESH_RATE ms*/ + +#define DEFAULT_PCR_OFFSET 18000 #define UDP_BUFFER_SIZE 0x40000 @@ -40,16 +41,23 @@ static GFINLINE void usage(const char * progname) { fprintf(stderr, "USAGE: %s -rate=R [[-prog=prog1]..[-prog=progn]] [-audio=url] [-video=url] [-mpeg4-carousel=n] [-mpeg4] [-time=n] [-src=file] DST [[DST]]\n" "\n" +#ifdef GPAC_MEMORY_TRACKING + "\t-mem-track: enables memory tracker\n" +#endif "\t-rate=R specifies target rate in kbps of the multiplex (mandatory)\n" - /* "\t If not set transport stream will be of variable bitrate\n" */ + "\t-real-time specifies the muxer will work in real-time mode\n" + "\t * automatically set for SDP or BT input\n" + "\t-pcr-init=V sets initial value V for PCR - if not set, random value is used\n" + "\t-pcr-offset=V offsets all timestamps from PCR by V, in 90kHz. Default value: %d\n" + "\t-psi-rate=V sets PSI refresh rate V in ms (default 100ms). If 0, PSI data is only send once at the begining\n" + "\t-time=n request the program to stop after n ms\n" + "\t-single-au forces 1 PES = 1 AU (disabled by default)\n" + "\t-prog=filename specifies an input file used for a TS service\n" "\t * currently only supports ISO files and SDP files\n" "\t * can be used several times, once for each program\n" "\t-audio=url may be mp3/udp or aac/http (shoutcast/icecast)\n" - "\t-video=url shall be raw h264\n" - "\t-mpeg4-carousel=n carousel period in ms\n" - "\t-mpeg4 forces usage of MPEG-4 signaling (IOD and SL Config)\n" - "\t-time=n request the program to stop after n ms\n" + "\t-video=url shall be a raw h264 frame\n" "\t-src=filename update file: must be either an .sdp or a .bt file\n\n" "\tDST : Destinations, at least one is mandatory\n" "\t -dst-udp UDP_address:port (multicast or unicast)\n" @@ -60,7 +68,18 @@ static GFINLINE void usage(const char * progname) "\t -segment-manifest=file m3u8 file basename\n" "\t -segment-http-prefix=p client address for accessing server segments\n" "\t -segment-number=n only n segments are used using a cyclic pattern\n" - "\n", progname + "\t\n" + "\tMPEG-4 options\n" + "\t-mpeg4-carousel=n carousel period in ms\n" + "\t-mpeg4 or -4on2 forces usage of MPEG-4 signaling (IOD and SL Config)\n" + "\t-4over2 same as -4on2 and uses PMT to carry OD Updates\n" + "\t-bifs-pes carries BIFS over PES instead of sections\n" + "\t-bifs-pes-ex carries BIFS over PES without writing timestamps in SL\n" + "\t\n" + "\t-ll=LogLevel specifies log level to use (by default error)\n" + "\t-lt=LogTools specifies log tools to use (by default all)\n" + "\t-h or -help Print this screen\n" + "\n", progname, DEFAULT_PCR_OFFSET ); } @@ -79,6 +98,10 @@ typedef struct Bool repeat; u32 mpeg4_signaling; Bool audio_configured; + u64 samples_done, samples_count; + u32 nb_real_streams; + Bool real_time; + GF_List *od_updates; } M2TSProgram; typedef struct @@ -93,7 +116,10 @@ typedef struct u32 nalu_size; void *dsi_and_rap; Bool loop; + Bool is_repeat; u64 ts_offset; + M2TSProgram *prog; + char nalu_delim[6]; } GF_ESIMP4; typedef struct @@ -146,6 +172,7 @@ static GF_Err mp4_input_ctrl(GF_ESInterface *ifce, u32 act_type, void *param) pck.flags = GF_ESI_DATA_AU_START | GF_ESI_DATA_HAS_CTS; if (priv->sample->IsRAP) pck.flags |= GF_ESI_DATA_AU_RAP; pck.cts = priv->sample->DTS + priv->ts_offset; + if (priv->is_repeat) pck.flags |= GF_ESI_DATA_REPEAT; if (priv->nb_repeat_last) { pck.cts += priv->nb_repeat_last*ifce->timescale * priv->image_repeat_ms / 1000; @@ -157,19 +184,24 @@ static GF_Err mp4_input_ctrl(GF_ESInterface *ifce, u32 act_type, void *param) pck.flags |= GF_ESI_DATA_HAS_DTS; } - if (priv->sample->IsRAP && priv->dsi) { + if (priv->sample->IsRAP && priv->dsi && priv->dsi_size) { pck.data = priv->dsi; pck.data_len = priv->dsi_size; ifce->output_ctrl(ifce, GF_ESI_OUTPUT_DATA_DISPATCH, &pck); pck.flags = 0; } + + if (priv->nalu_size) { + Bool nalu_delim_sent = 0; u32 remain = priv->sample->dataLength; char *ptr = priv->sample->data; u32 v, size; - char sc[4]; - sc[0] = sc[1] = sc[2] = 0; sc[3] = 1; + char sc[10]; + + /*send nalus*/ + sc[0] = sc[1] = sc[2] = 0; sc[3] = 1; while (remain) { size = 0; v = priv->nalu_size; @@ -182,12 +214,25 @@ static GF_Err mp4_input_ctrl(GF_ESInterface *ifce, u32 act_type, void *param) } remain -= size; + if (!nalu_delim_sent) { + nalu_delim_sent = 1; + /*send a NALU delim: copy over NAL ref idc*/ + sc[4] = (ptr[0] & 0x60) | GF_AVC_NALU_ACCESS_UNIT; + sc[5] = 0xF0 /*7 "all supported NALUs" (=111) + rbsp trailing (10000)*/; + + pck.data = sc; + pck.data_len = 6; + ifce->output_ctrl(ifce, GF_ESI_OUTPUT_DATA_DISPATCH, &pck); + pck.flags &= ~GF_ESI_DATA_AU_START; + } + + pck.data = sc; pck.data_len = 4; ifce->output_ctrl(ifce, GF_ESI_OUTPUT_DATA_DISPATCH, &pck); - pck.flags &= ~GF_ESI_DATA_AU_START; if (!remain) pck.flags |= GF_ESI_DATA_AU_END; + pck.flags &= ~GF_ESI_DATA_AU_START; pck.data = ptr; pck.data_len = size; @@ -204,6 +249,12 @@ static GF_Err mp4_input_ctrl(GF_ESInterface *ifce, u32 act_type, void *param) gf_isom_sample_del(&priv->sample); priv->sample_number++; + + if (!priv->prog->real_time && !priv->is_repeat) { + priv->prog->samples_done++; + gf_set_progress("Converting to MPEG-2 TS", priv->prog->samples_done, priv->prog->samples_count); + } + if (priv->sample_number==priv->sample_count) { if (priv->loop) { Double scale; @@ -214,12 +265,20 @@ static GF_Err mp4_input_ctrl(GF_ESInterface *ifce, u32 act_type, void *param) duration = (u64) (gf_isom_get_duration(priv->mp4) * scale); priv->ts_offset += duration; priv->sample_number = 0; + priv->is_repeat = (priv->sample_count==1) ? 1 : 0; } - else if (priv->image_repeat_ms) { + else if (priv->image_repeat_ms && priv->prog->nb_real_streams) { priv->nb_repeat_last++; priv->sample_number--; + priv->is_repeat = 1; } else { - ifce->caps |= GF_ESI_STREAM_IS_OVER; + if (!(ifce->caps & GF_ESI_STREAM_IS_OVER)) { + ifce->caps |= GF_ESI_STREAM_IS_OVER; + if (priv->sample_count>1) { + assert(priv->prog->nb_real_streams); + priv->prog->nb_real_streams--; + } + } } } } @@ -239,7 +298,7 @@ static GF_Err mp4_input_ctrl(GF_ESInterface *ifce, u32 act_type, void *param) } } -static void fill_isom_es_ifce(GF_ESInterface *ifce, GF_ISOFile *mp4, u32 track_num) +static void fill_isom_es_ifce(M2TSProgram *prog, GF_ESInterface *ifce, GF_ISOFile *mp4, u32 track_num, u32 bifs_use_pes) { GF_ESIMP4 *priv; char _lan[4]; @@ -250,9 +309,13 @@ static void fill_isom_es_ifce(GF_ESInterface *ifce, GF_ISOFile *mp4, u32 track_n priv->mp4 = mp4; priv->track = track_num; - priv->loop = 1; + priv->loop = prog->real_time ? 1 : 0; priv->sample_count = gf_isom_get_sample_count(mp4, track_num); + prog->samples_count += priv->sample_count; + if (priv->sample_count>1) + prog->nb_real_streams++; + priv->prog = prog; memset(ifce, 0, sizeof(GF_ESInterface)); ifce->stream_id = gf_isom_get_track_id(mp4, track_num); dcd = gf_isom_get_decoder_config(mp4, track_num, 1); @@ -292,6 +355,9 @@ static void fill_isom_es_ifce(GF_ESInterface *ifce, GF_ISOFile *mp4, u32 track_n gf_bs_get_content(bs, (char **) &priv->dsi, &priv->dsi_size); gf_bs_del(bs); #endif + priv->nalu_delim[3] = 1; + priv->nalu_delim[4] = 0; /*this will be nal header*/ + priv->nalu_delim[5] = 0xF0 /*7 "all supported NALUs" (=111) + rbsp trailing (10000)*/; } break; } @@ -313,6 +379,24 @@ static void fill_isom_es_ifce(GF_ESInterface *ifce, GF_ISOFile *mp4, u32 track_n ifce->duration = (Double) (s64) gf_isom_get_media_duration(mp4, track_num); ifce->duration /= ifce->timescale; + GF_SAFEALLOC(ifce->sl_config, GF_SLConfig); + ifce->sl_config->tag = GF_ODF_SLC_TAG; +// ifce->sl_config->predefined = 3; + ifce->sl_config->useAccessUnitStartFlag = 1; + ifce->sl_config->useAccessUnitEndFlag = 1; + ifce->sl_config->useRandomAccessPointFlag = 1; + ifce->sl_config->useTimestampsFlag = 1; + ifce->sl_config->timestampLength = 33; + ifce->sl_config->timestampResolution = ifce->timescale; + + /*test mode in which time stamps are 90khz and not coded but copied over from PES header*/ + if (bifs_use_pes==2) { + ifce->sl_config->timestampLength = 0; + ifce->sl_config->timestampResolution = 90000; + } + + gf_isom_set_extraction_slc(mp4, track_num, 1, ifce->sl_config); + ifce->input_ctrl = mp4_input_ctrl; if (priv != ifce->input_udta){ if (ifce->input_udta) @@ -476,7 +560,8 @@ static void SampleCallBack(void *calling_object, u16 ESID, char *data, u32 size, prog->streams[i].timescale = esd->slConfig->timestampResolution; e = gf_m2ts_program_stream_update_ts_scale(&prog->streams[i], esd->slConfig->timestampResolution); assert(!e); - gf_m2ts_program_stream_update_sl_config(&prog->streams[i], esd->slConfig); + if (!prog->streams[i].sl_config) prog->streams[i].sl_config = (GF_SLConfig *)gf_odf_desc_new(GF_ODF_SLC_TAG); + memcpy(prog->streams[i].sl_config, esd->slConfig, sizeof(GF_SLConfig)); break; } } @@ -952,69 +1037,157 @@ void fill_seng_es_ifce(GF_ESInterface *ifce, u32 i, GF_SceneEngine *seng, u32 pe } -static Bool open_program(M2TSProgram *prog, char *src, u32 carousel_rate, Bool force_mpeg4, char *update, char *audio_input_ip, u16 audio_input_port, char *video_buffer) +static Bool open_program(M2TSProgram *prog, char *src, u32 carousel_rate, u32 mpeg4_signaling, char *update, char *audio_input_ip, u16 audio_input_port, char *video_buffer, Bool force_real_time, u32 bifs_use_pes) { GF_SDPInfo *sdp; u32 i; GF_Err e; memset(prog, 0, sizeof(M2TSProgram)); - prog->mpeg4_signaling = force_mpeg4 ? GF_M2TS_MPEG4_SIGNALING_FULL : GF_M2TS_MPEG4_SIGNALING_NONE; + prog->mpeg4_signaling = mpeg4_signaling; /*open ISO file*/ if (gf_isom_probe_file(src)) { u32 nb_tracks; + Bool has_bifs_od = 0; u32 first_audio = 0; + u32 first_other = 0; prog->mp4 = gf_isom_open(src, GF_ISOM_OPEN_READ, 0); prog->nb_streams = 0; + prog->real_time = force_real_time; /*on MPEG-2 TS, carry 3GPP timed text as MPEG-4 Part17*/ gf_isom_text_set_streaming_mode(prog->mp4, 1); nb_tracks = gf_isom_get_track_count(prog->mp4); + for (i=0; imp4, i+1) == GF_ISOM_MEDIA_HINT) continue; - fill_isom_es_ifce(&prog->streams[i], prog->mp4, i+1); + + fill_isom_es_ifce(prog, &prog->streams[i], prog->mp4, i+1, bifs_use_pes); + switch(prog->streams[i].stream_type) { - case GF_STREAM_OD: - case GF_STREAM_SCENE: - prog->mpeg4_signaling = GF_M2TS_MPEG4_SIGNALING_FULL; - prog->streams[i].repeat_rate = carousel_rate; - break; - case GF_STREAM_VISUAL: - /*turn on image repeat*/ - switch (prog->streams[i].object_type_indication) { - case GPAC_OTI_IMAGE_JPEG: - case GPAC_OTI_IMAGE_PNG: - ((GF_ESIMP4 *)prog->streams[i].input_udta)->image_repeat_ms = carousel_rate; - break; - } + case GF_STREAM_OD: + has_bifs_od = 1; + prog->streams[i].repeat_rate = carousel_rate; + break; + case GF_STREAM_SCENE: + has_bifs_od = 1; + prog->streams[i].repeat_rate = carousel_rate; + break; + case GF_STREAM_VISUAL: + /*turn on image repeat*/ + switch (prog->streams[i].object_type_indication) { + case GPAC_OTI_IMAGE_JPEG: + case GPAC_OTI_IMAGE_PNG: + ((GF_ESIMP4 *)prog->streams[i].input_udta)->image_repeat_ms = carousel_rate; break; default: - /*log not supported stream type: %s*/ + check_deps = 1; + if (gf_isom_get_sample_count(prog->mp4, i+1)>1) { + /*get first visual stream as PCR*/ + if (!prog->pcr_idx) prog->pcr_idx = i+1; + } break; + } + break; + case GF_STREAM_AUDIO: + if (!first_audio) first_audio = i+1; + check_deps = 1; + break; + default: + /*log not supported stream type: %s*/ + break; } prog->nb_streams++; - /*get first visual stream as PCR*/ - if (!prog->pcr_idx && - (gf_isom_get_media_type(prog->mp4, i+1) == GF_ISOM_MEDIA_VISUAL) && - (gf_isom_get_sample_count(prog->mp4, i+1)>1) ) { - prog->pcr_idx = i+1; - } - if (!first_audio && (gf_isom_get_media_type(prog->mp4, i+1) == GF_ISOM_MEDIA_AUDIO) ) { - first_audio = i+1; + if (gf_isom_get_sample_count(prog->mp4, i+1)>1) first_other = i+1; + + if (check_deps) { + u32 k; + Bool found_dep = 0; + for (k=0; kmp4, k+1) != GF_ISOM_MEDIA_OD) + continue; + + /*this stream is not refered to by any OD, send as regular PES*/ + if (gf_isom_has_track_reference(prog->mp4, k+1, GF_ISOM_REF_OD, gf_isom_get_track_id(prog->mp4, i+1) )==1) { + found_dep = 1; + break; + } + } + if (!found_dep) { + prog->streams[i].caps |= GF_ESI_STREAM_WITHOUT_MPEG4_SYSTEMS; + } } } + if (has_bifs_od && !prog->mpeg4_signaling) prog->mpeg4_signaling = GF_M2TS_MPEG4_SIGNALING_FULL; + /*if no visual PCR found, use first audio*/ if (!prog->pcr_idx) prog->pcr_idx = first_audio; + if (!prog->pcr_idx) prog->pcr_idx = first_other; if (prog->pcr_idx) { GF_ESIMP4 *priv; prog->pcr_idx-=1; priv = prog->streams[prog->pcr_idx].input_udta; gf_isom_set_default_sync_track(prog->mp4, priv->track); } + prog->iod = gf_isom_get_root_od(prog->mp4); - if (!prog->iod) - fprintf(stderr, "NULL IOD for program !\n"); + if (prog->iod) { + GF_ObjectDescriptor*iod = (GF_ObjectDescriptor*)prog->iod; + if (gf_list_count( ((GF_ObjectDescriptor*)prog->iod)->ESDescriptors) == 0) { + gf_odf_desc_del(prog->iod); + prog->iod = NULL; + } else { + fprintf(stderr, "IOD found for program %s\n", src); + + /*if using 4over2, get rid of OD tracks*/ + if (prog->mpeg4_signaling==GF_M2TS_MPEG4_SIGNALING_SCENE) { + for (i=0; iESDescriptors); i++) { + u32 track_num, k; + GF_M2TSDescriptor *oddesc; + GF_ISOSample *sample; + GF_ESD *esd = gf_list_get(iod->ESDescriptors, i); + if (esd->decoderConfig->streamType!=GF_STREAM_OD) continue; + track_num = gf_isom_get_track_by_id(prog->mp4, esd->ESID); + if (gf_isom_get_sample_count(prog->mp4, track_num)>1) continue; + + sample = gf_isom_get_sample(prog->mp4, track_num, 1, NULL); + if (sample->dataLength >= 255-2) { + gf_isom_sample_del(&sample); + continue; + } + /*rewrite ESD dependencies*/ + for (k=0; kESDescriptors); k++) { + GF_ESD *dep_esd = gf_list_get(iod->ESDescriptors, k); + if (dep_esd->dependsOnESID==esd->ESID) dep_esd->dependsOnESID = esd->dependsOnESID; + } + + for (k=0; knb_streams; k++) { + if (prog->streams[k].stream_id==esd->ESID) { + prog->streams[k].stream_type = 0; + break; + } + } + + if (!prog->od_updates) prog->od_updates = gf_list_new(); + GF_SAFEALLOC(oddesc, GF_M2TSDescriptor); + oddesc->data_len = sample->dataLength; + oddesc->data = sample->data; + oddesc->tag = GF_M2TS_MPEG4_ODUPDATE_DESCRIPTOR; + sample->data = NULL; + gf_isom_sample_del(&sample); + gf_list_add(prog->od_updates, oddesc); + + gf_list_rem(iod->ESDescriptors, i); + i--; + gf_odf_desc_del((GF_Descriptor *) esd); + prog->samples_count--; + } + } + + } + } return 1; } @@ -1136,7 +1309,7 @@ static Bool open_program(M2TSProgram *prog, char *src, u32 carousel_rate, Bool f ((GF_ESIStream*)prog->streams[prog->nb_streams].input_udta)->vers_inc = 1; /*increment version number at every audio update*/ assert( prog ); //assert( prog->iod); - if (prog->iod && ((prog->iod->tag!=GF_ODF_IOD_TAG) || ((GF_InitialObjectDescriptor*)prog->iod)->OD_profileAndLevel!=GPAC_MAGIC_OD_PROFILE_FOR_MPEG4_SIGNALING)) { + if (prog->iod && ((prog->iod->tag!=GF_ODF_IOD_TAG) || (mpeg4_signaling != GF_M2TS_MPEG4_SIGNALING_SCENE))) { /*create the descriptor*/ GF_ESD *esd; GF_SimpleDataDescriptor *audio_desc; @@ -1188,7 +1361,7 @@ static Bool open_program(M2TSProgram *prog, char *src, u32 carousel_rate, Bool f ((GF_ESIStream*)prog->streams[prog->nb_streams].input_udta)->vers_inc = 1; /*increment version number at every video update*/ assert(prog); - if (prog->iod && ((prog->iod->tag!=GF_ODF_IOD_TAG) || ((GF_InitialObjectDescriptor*)prog->iod)->OD_profileAndLevel!=GPAC_MAGIC_OD_PROFILE_FOR_MPEG4_SIGNALING)) { + if (prog->iod && ((prog->iod->tag!=GF_ODF_IOD_TAG) || (mpeg4_signaling != GF_M2TS_MPEG4_SIGNALING_SCENE))) { assert(0); /*TODO*/ #if 0 /*create the descriptor*/ @@ -1228,29 +1401,46 @@ static Bool open_program(M2TSProgram *prog, char *src, u32 carousel_rate, Bool f gf_th_run(prog->th, seng_output, prog); return 1; } else { - fprintf(stderr, "Error opening %s - not a supported input media, skipping.\n", src); + FILE *f = fopen(src, "rt"); + if (f) { + fclose(f); + fprintf(stderr, "Error opening %s - not a supported input media, skipping.\n", src); + } else { + fprintf(stderr, "Error opening %s - no such file.\n", src); + } return 0; } } /*parse MP42TS arguments*/ -static GFINLINE GF_Err parse_args(int argc, char **argv, u32 *mux_rate, u32 *carrousel_rate, +static GFINLINE GF_Err parse_args(int argc, char **argv, u32 *mux_rate, u32 *carrousel_rate, u64 *pcr_init_val, u32 *pcr_offset, u32 *psi_refresh_rate, Bool *single_au_pes, u32 *bifs_use_pes, M2TSProgram *progs, u32 *nb_progs, char **src_name, Bool *real_time, u32 *run_time, char **video_buffer, u32 *video_buffer_size, u32 *audio_input_type, char **audio_input_ip, u16 *audio_input_port, u32 *output_type, char **ts_out, char **udp_out, char **rtp_out, u16 *output_port, char** segment_dir, u32 *segment_duration, char **segment_manifest, u32 *segment_number, char **segment_http_prefix) { - Bool rate_found=0, mpeg4_carousel_found=0, prog_found=0, mpeg4_found=0, time_found=0, src_found=0, dst_found=0, audio_input_found=0, video_input_found=0, + Bool rate_found=0, mpeg4_carousel_found=0, time_found=0, src_found=0, dst_found=0, audio_input_found=0, video_input_found=0, seg_dur_found=0, seg_dir_found=0, seg_manifest_found=0, seg_number_found=0, seg_http_found = 0, real_time_found=0; char *prog_name, *arg = NULL, *error_msg = "no argument found"; - Bool mpeg4_signaling = 0; + u32 mpeg4_signaling = GF_M2TS_MPEG4_SIGNALING_NONE; + Bool force_real_time = 0; s32 i; - /*first pass: find audio*/ + /*first pass: find audio - NO GPAC INIT MODIFICATION MUST OCCUR IN THIS PASS*/ for (i=1; iiod = progs[i].iod; + if (progs[i].od_updates) { + program->loop_descriptors = progs[i].od_updates; + progs[i].od_updates = NULL; + } for (j=0; javg_br); } + /*cpu load regulation*/ + gf_sleep(1); } - /*cpu load regulation*/ - gf_sleep(1); if (run_time) { if (gf_m2ts_get_ts_clock(muxer) > run_time) { @@ -1914,6 +2135,11 @@ int main(int argc, char **argv) } } + { + u64 bits = muxer->tot_pck_sent*8*188; + u32 dur_sec = gf_m2ts_get_ts_clock(muxer) / 1000; + fprintf(stdout, "Done muxing - %d sec - average rate %d kbps "LLD" packets written ("LLD" padding)\n", dur_sec, (u32) (bits/dur_sec/1000), muxer->tot_pck_sent, muxer->tot_pad_sent); + } exit: run = 0; @@ -1938,8 +2164,12 @@ exit: if (progs[i].streams[j].input_udta){ gf_free(progs[i].streams[j].input_udta); } - if (progs[i].streams[j].decoder_config) + if (progs[i].streams[j].decoder_config) { gf_free(progs[i].streams[j].decoder_config); + } + if (progs[i].streams[j].sl_config) { + gf_free(progs[i].streams[j].sl_config); + } } if (progs[i].iod) gf_odf_desc_del((GF_Descriptor*)progs[i].iod); if (progs[i].mp4) gf_isom_close(progs[i].mp4); diff --git a/applications/mp4box/filedump.c b/applications/mp4box/filedump.c index 0c09810..2d39a3d 100644 --- a/applications/mp4box/filedump.c +++ b/applications/mp4box/filedump.c @@ -807,7 +807,7 @@ void dump_file_ts(GF_ISOFile *file, char *inName) for (i=0; iDTS; cts = dts + (s32) samp->CTS_Offset; - fprintf(dump, "Sample %d - DTS "LLD" - CTS "LLD"", j+1, LLD_CAST dts, LLD_CAST cts); - if (samp->IsRAP) fprintf(dump, " - RAP"); + fprintf(dump, "Sample %d\tDTS "LLD"\tCTS "LLD"\t%d\t%d", j+1, LLD_CAST dts, LLD_CAST cts, samp->dataLength, samp->IsRAP); if (ctsdecoderConfig->streamType==GF_STREAM_VISUAL) { u32 w, h; + u16 rvc_predef; w = h = 0; if (esd->decoderConfig->objectTypeIndication==GPAC_OTI_VIDEO_MPEG4_PART2) { #ifndef GPAC_DISABLE_AV_PARSERS @@ -1230,6 +1230,10 @@ void DumpTrackInfo(GF_ISOFile *file, u32 trackID, Bool full_dump) if (full_dump) fprintf(stdout, "\t"); fprintf(stdout, "Visual Size %d x %d\n", w, h); } + if (gf_isom_get_rvc_config(file, trackNum, 1, &rvc_predef, NULL, NULL, NULL)==GF_OK) { + fprintf(stdout, "Has RVC signaled - Predefined configuration %d\n", rvc_predef); + } + } else if (esd->decoderConfig->streamType==GF_STREAM_AUDIO) { #ifndef GPAC_DISABLE_AV_PARSERS GF_M4ADecSpecInfo a_cfg; @@ -1889,7 +1893,7 @@ static void m2ts_sidx_add_entry(GF_SegmentIndexBox *sidx, Bool type, ref = &(sidx->refs[sidx->nb_refs-1]); ref->reference_type = type; ref->contains_RAP = has_rap; - ref->reference_offset = size; + ref->reference_size = size; ref->subsegment_duration = duration; ref->RAP_delta_time = (has_rap ? RAP_delta_time: 0); } @@ -1907,9 +1911,9 @@ static void m2ts_sidx_finalize_size(GF_M2TS_IndexingInfo *index_info, u64 file_s GF_SIDXReference *ref; if (index_info->sidx->nb_refs == 0) return; ref = &(index_info->sidx->refs[index_info->sidx->nb_refs-1]); - ref->reference_offset = (u32)(file_size - index_info->prev_base_offset); + ref->reference_size = (u32)(file_size - index_info->prev_base_offset); fprintf(stderr, "Subsegment: position-range ajdustment:%d-%d (%d bytes)\n", - index_info->prev_base_offset, (u32)file_size, ref->reference_offset); + index_info->prev_base_offset, (u32)file_size, ref->reference_size); } static void m2ts_sidx_flush_entry(GF_M2TS_IndexingInfo *index_info) @@ -2393,8 +2397,8 @@ static void write_mpd_segment_info(GF_M2TS_IndexingInfo *index_info, char *media start=index_info->sidx->first_offset; for (i=0; isidx->nb_refs; i++) { GF_SIDXReference *ref = &index_info->sidx->refs[i]; - fprintf(index_info->mpd_file, " \n", start, start+ref->reference_offset-1); - start += ref->reference_offset; + fprintf(index_info->mpd_file, " \n", start, start+ref->reference_size-1); + start += ref->reference_size; } } else { fprintf(index_info->mpd_file, " \n", media_file_name); @@ -2427,7 +2431,7 @@ void dump_mpeg2_ts(char *mpeg2ts_file, char *pes_out_name, Bool prog_num, dumper.index_info.segment_duration = dash_duration; dumper.index_info.segment_at_rap = seg_at_rap; dumper.index_info.subsegs_per_segment = subseg_per_seg; - dumper.index_info.seg_name = gf_strdup(seg_name); + dumper.index_info.seg_name = seg_name ? gf_strdup(seg_name) : NULL; dumper.index_info.use_url_template = use_url_template; dumper.index_info.init_seg_name = NULL; dumper.index_info.use_index_segment = use_index_segment; diff --git a/applications/mp4box/fileimport.c b/applications/mp4box/fileimport.c index 6c5b81c..4c8f456 100644 --- a/applications/mp4box/fileimport.c +++ b/applications/mp4box/fileimport.c @@ -138,11 +138,12 @@ GF_Err import_file(GF_ISOFile *dest, char *inName, u32 import_flags, Double forc s32 par_d, par_n, prog_id, delay; s32 tw, th, tx, ty; Bool do_audio, do_video, do_all, disable, track_layout, chap_ref, is_chap, keep_handler; - u32 group, handler; + u32 group, handler, rvc_predefined; const char *szLan; GF_Err e; GF_MediaImporter import; char *ext, szName[1000], *fmt, *handler_name, *rvc_config; + rvc_predefined = 0; memset(&import, 0, sizeof(GF_MediaImporter)); @@ -183,7 +184,7 @@ GF_Err import_file(GF_ISOFile *dest, char *inName, u32 import_flags, Double forc if (!strnicmp(ext+1, "lang=", 5)) szLan = GetLanguageCode(ext+6); else if (!strnicmp(ext+1, "delay=", 6)) delay = atoi(ext+7); else if (!strnicmp(ext+1, "fps=", 4)) { - if (!strcmp(ext+5, "auto")) force_fps = 10000.0; + if (!strcmp(ext+5, "auto")) force_fps = GF_IMPORT_AUTO_FPS; else if (strchr(ext+5, '-')) { u32 ticks, dts_inc; sscanf(ext+5, "%u-%u", &ticks, &dts_inc); @@ -200,10 +201,11 @@ GF_Err import_file(GF_ISOFile *dest, char *inName, u32 import_flags, Double forc else if (!stricmp(ext+1, "sbr")) import_flags |= GF_IMPORT_SBR_IMPLICIT; else if (!stricmp(ext+1, "sbrx")) import_flags |= GF_IMPORT_SBR_EXPLICIT; else if (!stricmp(ext+1, "ovsbr")) import_flags |= GF_IMPORT_OVSBR; - else if (!stricmp(ext+1, "svc")) import_flags |= GF_IMPORT_SVC_EXPLICIT; - else if (!stricmp(ext+1, "nosvc")) import_flags |= GF_IMPORT_SVC_NONE; else if (!stricmp(ext+1, "ps")) import_flags |= GF_IMPORT_PS_IMPLICIT; else if (!stricmp(ext+1, "psx")) import_flags |= GF_IMPORT_PS_EXPLICIT; + else if (!stricmp(ext+1, "svc")) import_flags |= GF_IMPORT_SVC_EXPLICIT; + else if (!stricmp(ext+1, "nosvc")) import_flags |= GF_IMPORT_SVC_NONE; + else if (!stricmp(ext+1, "subsamples")) import_flags |= GF_IMPORT_SET_SUBSAMPLES; else if (!stricmp(ext+1, "mpeg4")) import_flags |= GF_IMPORT_FORCE_MPEG4; else if (!strnicmp(ext+1, "agg=", 4)) frames_per_sample = atoi(ext+5); else if (!strnicmp(ext+1, "dur=", 4)) import.duration = (u32) (atof(ext+5) * 1000); @@ -218,7 +220,11 @@ GF_Err import_file(GF_ISOFile *dest, char *inName, u32 import_flags, Double forc } } else if (!strnicmp(ext+1, "name=", 5)) handler_name = gf_strdup(ext+6); - else if (!strnicmp(ext+1, "rvc=", 4)) rvc_config = gf_strdup(ext+5); + else if (!strnicmp(ext+1, "rvc=", 4)) { + if (sscanf(ext+5, "%d", &rvc_predefined) != 1) { + rvc_config = gf_strdup(ext+5); + } + } else if (!strnicmp(ext+1, "font=", 5)) import.fontName = gf_strdup(ext+6); else if (!strnicmp(ext+1, "size=", 5)) import.fontSize = atoi(ext+6); else if (!strnicmp(ext+1, "fmt=", 4)) import.streamFormat = gf_strdup(ext+5); @@ -475,19 +481,22 @@ GF_Err import_file(GF_ISOFile *dest, char *inName, u32 import_flags, Double forc if (f) { char *data; u32 size; + size_t read; gf_f64_seek(f, 0, SEEK_END); size = (u32) gf_f64_tell(f); gf_f64_seek(f, 0, SEEK_SET); data = gf_malloc(sizeof(char)*size); - fread(data, 1, size, f); + read = fread(data, 1, size, f); + assert(read); + assert(read == size); fclose(f); gf_gz_compress_payload(&data, size, &size); - e = gf_isom_set_meta_type(import.dest, 0, track, GF_4CC('r','v','c','z')); - gf_isom_modify_alternate_brand(import.dest, GF_ISOM_BRAND_ISO2, 1); - gf_isom_set_meta_xml_memory(import.dest, 0, track, data, size, 1); + gf_isom_set_rvc_config(import.dest, track, 1, 0, "application/rvc-config+xml+gz", data, size); gf_free(data); } + } else if (rvc_predefined>0) { + gf_isom_set_rvc_config(import.dest, track, 1, rvc_predefined, NULL, NULL, 0); } } if (track_id) fprintf(stdout, "WARNING: Track ID %d not found in file\n", track_id); @@ -518,14 +527,15 @@ typedef struct Bool can_duplicate; /*controls import by time rather than by sample (otherwise we would have to remove much more samples video vs audio for example*/ Bool first_sample_done; + Bool next_sample_is_rap; u32 stop_state; } TKInfo; -GF_Err split_isomedia_file(GF_ISOFile *mp4, Double split_dur, u32 split_size_kb, char *inName, Double InterleavingTime, Double chunk_start_time, const char *tmpdir, char *outfile) +GF_Err split_isomedia_file(GF_ISOFile *mp4, Double split_dur, u32 split_size_kb, char *inName, Double InterleavingTime, Double chunk_start_time, const char *tmpdir) { u32 i, count, nb_tk, needs_rap_sync, cur_file, conv_type, nb_tk_done, nb_samp, nb_done, di; Double max_dur, cur_file_time; - Bool do_add, all_duplicatable, size_exceeded, chunk_extraction; + Bool do_add, all_duplicatable, size_exceeded, chunk_extraction, rap_split; GF_ISOFile *dest; GF_ISOSample *samp; GF_Err e; @@ -535,6 +545,14 @@ GF_Err split_isomedia_file(GF_ISOFile *mp4, Double split_dur, u32 split_size_kb, chunk_extraction = (chunk_start>=0) ? 1 : 0; + rap_split = 0; + if (split_size_kb==(u32) -1) rap_split = 1; + if (split_dur==-1) rap_split = 1; + if (rap_split) { + split_size_kb = 0; + split_dur = (double) GF_MAX_FLOAT; + } + strcpy(szName, inName); ext = strrchr(szName, '.'); @@ -640,7 +658,7 @@ GF_Err split_isomedia_file(GF_ISOFile *mp4, Double split_dur, u32 split_size_kb, gf_free(tks); return GF_NOT_SUPPORTED; } - if (max_dur<=split_dur) { + if (!rap_split && (max_dur<=split_dur)) { fprintf(stdout, "Input file (%f) shorter than requested split duration (%f)\n", max_dur, split_dur); gf_free(tks); return GF_NOT_SUPPORTED; @@ -718,11 +736,7 @@ GF_Err split_isomedia_file(GF_ISOFile *mp4, Double split_dur, u32 split_size_kb, Bool is_last; if (chunk_extraction) { - if (outfile) { - strcpy(szFile, outfile); - } else { - sprintf(szFile, "%s_%d_%d%s", szName, (u32) chunk_start, (u32) (chunk_start+split_dur), ext); - } + sprintf(szFile, "%s_%d_%d%s", szName, (u32) chunk_start, (u32) (chunk_start+split_dur), ext); } else { sprintf(szFile, "%s_%03d%s", szName, cur_file+1, ext); } @@ -821,6 +835,12 @@ GF_Err split_isomedia_file(GF_ISOFile *mp4, Double split_dur, u32 split_size_kb, fprintf(stdout, "Error cloning track %d sample %d\n", tki->tk, tki->last_sample); goto err_exit; } + + tki->next_sample_is_rap = 0; + if (rap_split && tki->has_non_raps) { + if ( gf_isom_get_sample_sync(mp4, tki->tk, tki->last_sample+1)) + tki->next_sample_is_rap = 1; + } } /*test by size/duration*/ @@ -845,11 +865,20 @@ GF_Err split_isomedia_file(GF_ISOFile *mp4, Double split_dur, u32 split_size_kb, } time = (Double) (s64) tki->lastDTS; time /= tki->time_scale; - if (size_exceeded || (tki->last_sample==tki->sample_count) || (!tki->can_duplicate && (time>file_split_dur)) ) { + if (size_exceeded + || (tki->last_sample==tki->sample_count) + || (!tki->can_duplicate && (time>file_split_dur)) + || (rap_split && tki->has_non_raps && tki->next_sample_is_rap) + ) { nb_over++; tki->stop_state = 1; if (tki->last_samplesample_count) is_last = 0; if ((!tki->can_duplicate || all_duplicatable) && (tki->last_sample==tki->sample_count)) is_last = 1; + + if (rap_split && tki->next_sample_is_rap) { + file_split_dur = (Double) ( gf_isom_get_sample_dts(mp4, tki->tk, tki->last_sample+1) - tki->firstDTS); + file_split_dur /= tki->time_scale; + } } /*special tracks (not audio, not video)*/ else if (tki->can_duplicate) { @@ -878,12 +907,19 @@ GF_Err split_isomedia_file(GF_ISOFile *mp4, Double split_dur, u32 split_size_kb, continue; } - if (tki->lastDTS) { - time = (Double) (s64) tki->lastDTS; + //if (tki->lastDTS) + { + //time = (Double) (s64) tki->lastDTS; + time = (Double) (s64) ( gf_isom_get_sample_dts(mp4, tki->tk, tki->last_sample+1) - tki->firstDTS); time /= tki->time_scale; if ((!tki->can_duplicate || all_duplicatable) && timenext_sample_is_rap) file_split_dur = time; } } + if (file_split_dur == (Double) GF_MAX_FLOAT) { + fprintf(stdout, "Cannot split file (duration too small or size too small)\n"); + goto err_exit; + } if (chunk_extraction) file_split_dur = split_dur; /*don't split if eq to copy...*/ @@ -911,11 +947,15 @@ GF_Err split_isomedia_file(GF_ISOFile *mp4, Double split_dur, u32 split_size_kb, while (1) { u64 dts; last_samp = gf_isom_get_sample_count(dest, tki->dst_tk); - if (!last_samp) break; + if (last_samp<=1) break; dts = gf_isom_get_sample_dts(dest, tki->dst_tk, last_samp); time = (Double) (s64) dts; time /= tki->time_scale; + + time = (Double) (s64) gf_isom_get_media_duration(dest, tki->dst_tk); + time /= tki->time_scale; + /*done*/ if (tki->last_sample==tki->sample_count) { if (!chunk_extraction && !tki->can_duplicate) { @@ -923,7 +963,11 @@ GF_Err split_isomedia_file(GF_ISOFile *mp4, Double split_dur, u32 split_size_kb, break; } } - if (time /*+ (Double) GF_EPSILON_FLOAT*/ < file_split_dur) break; + if (rap_split) { + if (time <= file_split_dur) break; + } else { + if (time < file_split_dur) break; + } gf_isom_remove_sample(dest, tki->dst_tk, last_samp); tki->last_sample--; @@ -1064,7 +1108,8 @@ GF_Err cat_isomedia_file(GF_ISOFile *dest, char *fileName, u32 import_flags, Dou e = import_file(orig, fileName, import_flags, force_fps, frames_per_sample); if (e) return e; } else { - orig = gf_isom_open(fileName, GF_ISOM_OPEN_READ, NULL); + /*we open the original file in edit mode since we may have to rewrite AVC samples*/ + orig = gf_isom_open(fileName, GF_ISOM_OPEN_EDIT, tmp_dir); } nb_samp = 0; @@ -1147,11 +1192,7 @@ GF_Err cat_isomedia_file(GF_ISOFile *dest, char *fileName, u32 import_flags, Dou if (gf_isom_get_sample_description_count(orig, i+1) != gf_isom_get_sample_description_count(dest, dst_tk)) dst_tk = 0; /*if not forcing cat, check the media codec config is the same*/ if (!gf_isom_is_same_sample_description(orig, i+1, dest, dst_tk)) { - if (!force_cat) { - dst_tk = 0; - } else { - fprintf(stdout, "WARNING: Concatenating track ID %d even though sample descriptions do not match\n", tk_id); - } + dst_tk = 0; } /*we force the same visual resolution*/ else if (mtype==GF_ISOM_MEDIA_VISUAL) { @@ -1159,40 +1200,82 @@ GF_Err cat_isomedia_file(GF_ISOFile *dest, char *fileName, u32 import_flags, Dou gf_isom_get_visual_info(orig, i+1, 1, &ow, &oh); gf_isom_get_visual_info(dest, dst_tk, 1, &w, &h); if ((ow!=w) || (oh!=h)) { - if (!force_cat) { - dst_tk = 0; - } else { - fprintf(stdout, "WARNING: Concatenating track ID %d even though visual sizes do not match\n", tk_id); - } + dst_tk = 0; } } + /*merge AVC config if possible*/ if (!dst_tk && ((stype == GF_ISOM_SUBTYPE_AVC_H264) || (stype == GF_ISOM_SUBTYPE_AVC2_H264)) ) { GF_AVCConfig *avc_src, *avc_dst; dst_tk = gf_isom_get_track_by_id(dest, tk_id); avc_src = gf_isom_avc_config_get(orig, i+1, 1); avc_dst = gf_isom_avc_config_get(dest, dst_tk, 1); - - if (avc_src->nal_unit_size != avc_dst->nal_unit_size) dst_tk = 0; - else if (avc_src->AVCLevelIndication!=avc_dst->AVCLevelIndication) dst_tk = 0; - else if (avc_src->AVCProfileIndication!=avc_dst->AVCProfileIndication) dst_tk = 0; + + if (avc_src->AVCLevelIndication!=avc_dst->AVCLevelIndication) { + fprintf(stdout, "Cannot concatenate files: Different AVC Level Indication between source (%d) and destination (%d)\n", avc_src->AVCLevelIndication, avc_dst->AVCLevelIndication); + dst_tk = 0; + } else if (avc_src->AVCProfileIndication!=avc_dst->AVCProfileIndication) { + fprintf(stdout, "Cannot concatenate files: Different AVC Profile Indication between source (%d) and destination (%d)\n", avc_src->AVCProfileIndication, avc_dst->AVCProfileIndication); + dst_tk = 0; + } else { - while (gf_list_count(avc_src->sequenceParameterSets)) { - GF_AVCConfigSlot *slc = gf_list_get(avc_src->sequenceParameterSets, 0); - gf_list_rem(avc_src->sequenceParameterSets, 0); - gf_list_add(avc_dst->sequenceParameterSets, slc); + u32 j, k; + /*rewrite all samples if using different NALU size*/ + if (avc_src->nal_unit_size > avc_dst->nal_unit_size) { + gf_media_avc_rewrite_samples(dest, dst_tk, 8*avc_dst->nal_unit_size, 8*avc_src->nal_unit_size); + avc_dst->nal_unit_size = avc_src->nal_unit_size; + } else if (avc_src->nal_unit_size < avc_dst->nal_unit_size) { + gf_media_avc_rewrite_samples(orig, i+1, 8*avc_src->nal_unit_size, 8*avc_dst->nal_unit_size); + } + + /*merge SPS*/ + for (j=0; jsequenceParameterSets); j++) { + Bool found = 0; + GF_AVCConfigSlot *slc = gf_list_get(avc_src->sequenceParameterSets, j); + for (k=0; ksequenceParameterSets); k++) { + GF_AVCConfigSlot *slc_dst = gf_list_get(avc_dst->sequenceParameterSets, k); + if ( (slc->size==slc_dst->size) && !memcmp(slc->data, slc_dst->data, slc->size) ) { + found = 1; + break; + } + } + if (!found) { + gf_list_rem(avc_src->sequenceParameterSets, j); + j--; + gf_list_add(avc_dst->sequenceParameterSets, slc); + } } - while (gf_list_count(avc_src->pictureParameterSets)) { - GF_AVCConfigSlot *slc = gf_list_get(avc_src->pictureParameterSets, 0); - gf_list_rem(avc_src->pictureParameterSets, 0); - gf_list_add(avc_dst->pictureParameterSets, slc); + /*merge PPS*/ + for (j=0; jpictureParameterSets); j++) { + Bool found = 0; + GF_AVCConfigSlot *slc = gf_list_get(avc_src->pictureParameterSets, j); + for (k=0; kpictureParameterSets); k++) { + GF_AVCConfigSlot *slc_dst = gf_list_get(avc_dst->pictureParameterSets, k); + if ( (slc->size==slc_dst->size) && !memcmp(slc->data, slc_dst->data, slc->size) ) { + found = 1; + break; + } + } + if (!found) { + gf_list_rem(avc_src->pictureParameterSets, j); + j--; + gf_list_add(avc_dst->pictureParameterSets, slc); + } } + gf_isom_avc_config_update(dest, dst_tk, 1, avc_dst); - gf_odf_avc_cfg_del(avc_src); - gf_odf_avc_cfg_del(avc_dst); } + + + gf_odf_avc_cfg_del(avc_src); + gf_odf_avc_cfg_del(avc_dst); + } + + if (!dst_tk && force_cat) { + dst_tk = gf_isom_get_track_by_id(dest, tk_id); + fprintf(stdout, "WARNING: Concatenating track ID %d even though sample descriptions do not match\n", tk_id); } } diff --git a/applications/mp4box/live.c b/applications/mp4box/live.c index b0c1d63..ef26ac2 100644 --- a/applications/mp4box/live.c +++ b/applications/mp4box/live.c @@ -163,7 +163,8 @@ typedef struct u32 timescale, init_time; u32 carousel_period, ts_delta; u16 aggregate_on_stream; - Bool adjust_carousel_time, discard, aggregate, rap, critical, m2ts_vers_inc; + Bool adjust_carousel_time, discard, aggregate, rap, m2ts_vers_inc; + u32 critical; } RTPChannel; typedef struct @@ -234,11 +235,16 @@ static void live_session_callback(void *calling_object, u16 ESID, char *data, u3 } /*send data*/ else { + u32 critical = 0; Bool rap = rtpch->rap; if (livesess->carousel_generation) rap = 1; - ts += rtpch->timescale*(gf_sys_clock()-rtpch->init_time + rtpch->ts_delta)/1000; - gf_rtp_streamer_send_au_with_sn(rtpch->rtp, data, size, ts, ts, rap, (livesess->critical || rtpch->critical) ? 1 : 0 ); - fprintf(stdout, "Stream %d: Sending update at TS "LLD", %d bytes - RAP %d - critical %d\n", ESID, ts, size, rap, (livesess->critical || rtpch->critical) ? 1 : 0); + ts += rtpch->timescale*((u64)gf_sys_clock()-rtpch->init_time + rtpch->ts_delta)/1000; + if (rtpch->critical) critical = rtpch->critical; + else if (livesess->critical) critical = 1; + + gf_rtp_streamer_send_au_with_sn(rtpch->rtp, data, size, ts, ts, rap, critical); + + fprintf(stdout, "Stream %d: Sending update at TS "LLD", %d bytes - RAP %d - critical %d\n", ESID, ts, size, rap, critical); rtpch->rap = rtpch->critical = 0; if (rtpch->manual_rtcp) gf_rtp_streamer_send_rtcp(rtpch->rtp, 0, 0); @@ -254,7 +260,7 @@ static void live_session_send_carousel(LiveSession *livesess, RTPChannel *ch) u64 ts=0; if (ch) { if (ch->carousel_size) { - ts = ch->carousel_ts + ch->timescale * ( (ch->adjust_carousel_time ? gf_sys_clock() : ch->time_at_carousel_store) - ch->init_time + ch->ts_delta)/1000; + ts = ch->carousel_ts + ch->timescale * ( (ch->adjust_carousel_time ? (u64)gf_sys_clock() : ch->time_at_carousel_store) - ch->init_time + ch->ts_delta)/1000; gf_rtp_streamer_send_au_with_sn(ch->rtp, ch->carousel_data, ch->carousel_size, ts, ts, 1, 0); ch->last_carousel_time = now - livesess->start_time; @@ -359,7 +365,7 @@ void live_session_shutdown(LiveSession *livesess) } -static RTPChannel *set_broadcast_params(LiveSession *livesess, u16 esid, u32 period, u32 ts_delta, u16 aggregate_on_stream, Bool adjust_carousel_time, Bool force_rap, Bool aggregate_au, Bool discard_pending, Bool signal_rap, Bool signal_critical, Bool version_inc) +static RTPChannel *set_broadcast_params(LiveSession *livesess, u16 esid, u32 period, u32 ts_delta, u16 aggregate_on_stream, Bool adjust_carousel_time, Bool force_rap, Bool aggregate_au, Bool discard_pending, Bool signal_rap, u32 signal_critical, Bool version_inc) { RTPChannel *rtpch = NULL; @@ -369,6 +375,8 @@ static RTPChannel *set_broadcast_params(LiveSession *livesess, u16 esid, u32 per while ( (rtpch = gf_list_enum(livesess->streams, &i))) { if (rtpch->ESID == esid) break; } + } else { + rtpch = gf_list_get(livesess->streams, 0); } /*TODO - set/reset the ESID for the parsers*/ @@ -429,9 +437,9 @@ int live_session(int argc, char **argv) char *update_buffer = NULL; u32 update_buffer_size = 0; u16 aggregate_on_stream; - Bool adjust_carousel_time, force_rap, aggregate_au, discard_pending, signal_rap, signal_critical, version_inc; + Bool adjust_carousel_time, force_rap, aggregate_au, discard_pending, signal_rap, version_inc; Bool update_context; - u32 period, ts_delta; + u32 period, ts_delta, signal_critical; u16 es_id; e = GF_OK; /* souchay : needs to initialize those two vars... */ diff --git a/applications/mp4box/main.c b/applications/mp4box/main.c index 0af8789..b096daf 100644 --- a/applications/mp4box/main.c +++ b/applications/mp4box/main.c @@ -48,7 +48,7 @@ #ifndef GPAC_DISABLE_ISOM_WRITE void convert_file_info(char *inName, u32 trackID); GF_Err import_file(GF_ISOFile *dest, char *inName, u32 import_flags, Double force_fps, u32 frames_per_sample); -GF_Err split_isomedia_file(GF_ISOFile *mp4, Double split_dur, u32 split_size_kb, char *inName, Double InterleavingTime, Double chunk_start, const char *tmpdir, char *outfile); +GF_Err split_isomedia_file(GF_ISOFile *mp4, Double split_dur, u32 split_size_kb, char *inName, Double InterleavingTime, Double chunk_start, const char *tmpdir); GF_Err cat_isomedia_file(GF_ISOFile *mp4, char *fileName, u32 import_flags, Double force_fps, u32 frames_per_sample, char *tmp_dir, Bool force_cat); #ifndef GPAC_DISABLE_SCENE_ENCODER @@ -113,7 +113,7 @@ int stream_file_rtp(int argc, char **argv); int live_session(int argc, char **argv); void PrintLiveUsage(); - +int mp4boxTerminal(int argc, char **argv); u32 quiet = 0; Bool dvbhdemux =0; @@ -163,6 +163,10 @@ void PrintVersion() void PrintGeneralUsage() { fprintf(stdout, "General Options:\n" +#ifdef GPAC_MEMORY_TRACKING + " -mem-track: enables memory tracker\n" +#endif + " -strict-error exits after the first error is reported\n" " -inter time_in_ms interleaves file data (track chunks of time_in_ms)\n" " * Note 1: Interleaving is 0.5s by default\n" " * Note 2: Performs drift checking accross tracks\n" @@ -204,9 +208,11 @@ void PrintGeneralUsage() " -itags tag1[:tag2] sets iTunes tags to file - more info: MP4Box -tag-list.\n" " -split time_sec splits in files of time_sec max duration\n" " * Note: this removes all MPEG-4 Systems media\n" - " -split-size size splits in files of max filesize kB.\n" + " -split-size size splits in files of max filesize kB. same as -splits.\n" + " * Note: this removes all MPEG-4 Systems media\n" + " -split-rap splits in files begining at each RAP. same as -splitr.\n" " * Note: this removes all MPEG-4 Systems media\n" - " -split-chunk S:E extracts a new file from Start to End (in seconds)\n" + " -split-chunk S:E extracts a new file from Start to End (in seconds). same as -splitx\n" " * Note: this removes all MPEG-4 Systems media\n" " -group-add fmt creates a new grouping information in the file. Format is\n" " a colon-separated list of following options:\n" @@ -234,12 +240,18 @@ void PrintGeneralUsage() " using the interleaver (-inter) switch.\n" " Note: You can specify -rap switch to split segments at RAP boundaries\n" " -frags-per-sidx N sets the number of segments to be written in each SIDX box\n" - " If 0, SIDX box is not used\n" + " If 0, a single SIDX box is used per segment\n" + " If -1, no SIDX box is used\n" + " -rap segments begin with random access points\n" + " Note: segment duration may not be exactly what asked by\n" + " \"-dash\" since raw video data is not modified\n" " -segment-name name sets the segment name for generated segments\n" " If not set (default), segments are concatenated in output file\n" " -segment-ext name sets the segment extension. Default is m4s\n" " -url-template uses UrlTemplate instead of explicit sources in segments.\n" " Ignored if segments are stored in the output file.\n" + " -daisy-chain Uses daisy-chain SIDX instead of hierarchical. Ignored if frags/sidx is 0.\n" + " -dash-ctx FILE Stores/restore DASH timing from FILE.\n" "\n"); } @@ -314,6 +326,9 @@ void PrintImportUsage() " \":psx\": same as -psx option\n" " \":ovsbr\": same as -ovsbr option\n" " \":mpeg4\" same as -mpeg4 option\n" + " \":svc\" import SVC with explicit signaling (no AVC base compatibility)\n" + " \":nosvc\" discard SVC data when importing\n" + " \":subsamples\" adds SubSample information for AVC+SVC\n" " \":font=name\" specifies font name for text import (default \"Serif\")\n" " \":size=s\" specifies font size for text import (default 18)\n" " \":stype=4CC\" forces the sample description type to a different value\n" @@ -537,6 +552,8 @@ void PrintMetaUsage() " -dump-item args dumps item to file - syntax item_ID[:tk=ID][:path=fileName]\n" " -package packages input XML file into an ISO container\n" " * all media referenced except hyperlinks are added to file\n" + " -mgt packages input XML file into an MPEG-U widget with ISO container.\n" + " * all files contained in the current folder are added to the widget package\n" "\n"); } @@ -546,7 +563,7 @@ void PrintSWFUsage() "SWF Importer Options\n" "\n" "MP4Box can import simple Macromedia Flash files (\".SWF\")\n" - "You can specify a SWF input file with \'-bt\', \'xmt\' and \'-mp4\' options\n" + "You can specify a SWF input file with \'-bt\', \'-xmt\' and \'-mp4\' options\n" "\n" " -global all SWF defines are placed in first scene replace\n" " * Note: By default SWF defines are sent when needed\n" @@ -577,7 +594,8 @@ void PrintUsage() " -h swf Flash (SWF) options help\n" " -h crypt ISMA E&A options help\n" " -h format supported formats help\n" - " -h rtp streamer help\n" + " -h rtp file streamer help\n" + " -h live BIFS streamer help\n" "\n" " -nodes lists supported MPEG4 nodes\n" " -node NodeName gets MPEG4 node syntax and QP info\n" @@ -587,8 +605,8 @@ void PrintUsage() " -snode NodeName gets SVG node syntax\n" " -languages lists supported ISO 639 languages\n" "\n" - "-quiet quiet mode\n" - "-noprog disables progress\n" + " -quiet quiet mode\n" + " -noprog disables progress\n" " -v verbose mode\n" " -version gets build version\n" ); @@ -1166,7 +1184,8 @@ enum GF_ISOM_CONV_TYPE_PSP }; -int main(int argc, char **argv) + +int mp4boxMain(int argc, char **argv) { char outfile[5000]; GF_Err e; @@ -1179,15 +1198,20 @@ int main(int argc, char **argv) TrackAction tracks[MAX_CUMUL_OPS]; TSELAction tsel_acts[MAX_CUMUL_OPS]; u64 movie_time; + s32 frags_per_sidx; u32 brand_add[MAX_CUMUL_OPS], brand_rem[MAX_CUMUL_OPS]; - u32 i, MTUSize, stat_level, hint_flags, info_track_id, import_flags, nb_add, nb_cat, ismaCrypt, agg_samples, nb_sdp_ex, max_ptime, raw_sample_num, split_size, nb_meta_act, nb_track_act, rtp_rate, major_brand, nb_alt_brand_add, nb_alt_brand_rem, old_interleave, car_dur, minor_version, conv_type, nb_tsel_acts, frags_per_sidx, program_number; + u32 i, MTUSize, stat_level, hint_flags, info_track_id, import_flags, nb_add, nb_cat, ismaCrypt, agg_samples, nb_sdp_ex, max_ptime, raw_sample_num, split_size, nb_meta_act, nb_track_act, rtp_rate, major_brand, nb_alt_brand_add, nb_alt_brand_rem, old_interleave, car_dur, minor_version, conv_type, nb_tsel_acts, program_number; Bool HintIt, needSave, FullInter, Frag, HintInter, dump_std, dump_rtp, dump_mode, regular_iod, trackID, HintCopy, remove_sys_tracks, remove_hint, force_new, remove_root_od, import_subtitle, dump_chap; Bool print_sdp, print_info, open_edit, track_dump_type, dump_isom, dump_cr, force_ocr, encode, do_log, do_flat, dump_srt, dump_ttxt, x3d_info, chunk_mode, dump_ts, do_saf, do_mpd, dump_m2ts, dump_cart, do_hash, verbose, force_cat, pack_wgt, dash_ts_use_index; - char *inName, *outName, *arg, *mediaSource, *tmpdir, *input_ctx, *output_ctx, *drm_file, *avi2raw, *cprt, *chap_file, *pes_dump, *itunes_tags, *pack_file, *raw_cat, *seg_name; + char *inName, *outName, *arg, *mediaSource, *tmpdir, *input_ctx, *output_ctx, *drm_file, *avi2raw, *cprt, *chap_file, *pes_dump, *itunes_tags, *pack_file, *raw_cat, *seg_name, *dash_ctx; GF_ISOFile *file; Bool stream_rtp=0; Bool live_scene=0; +#ifdef GPAC_MEMORY_TRACKING + Bool enable_mem_tracker = 0; +#endif Bool dump_iod=0; + Bool daisy_chain_sidx=0; Bool use_url_template=0; Bool seg_at_rap =0; char *seg_ext = "m4s"; @@ -1212,12 +1236,12 @@ int main(int argc, char **argv) HintCopy = FullInter = HintInter = encode = do_log = old_interleave = do_saf = do_mpd = do_hash = verbose = 0; chunk_mode = dump_mode = Frag = force_ocr = remove_sys_tracks = agg_samples = remove_hint = keep_sys_tracks = remove_root_od = 0; x3d_info = conv_type = HintIt = needSave = print_sdp = print_info = regular_iod = dump_std = open_edit = dump_isom = dump_rtp = dump_cr = dump_chap = dump_srt = dump_ttxt = force_new = dump_ts = dump_m2ts = dump_cart = import_subtitle = force_cat = pack_wgt = 0; - frags_per_sidx = 1; + frags_per_sidx = 0; track_dump_type = 0; ismaCrypt = 0; file = NULL; itunes_tags = pes_dump = NULL; - seg_name = NULL; + seg_name = dash_ctx = NULL; #ifndef GPAC_DISABLE_SCENE_ENCODER memset(&opts, 0, sizeof(opts)); @@ -1428,7 +1452,15 @@ int main(int argc, char **argv) } else if (!stricmp(arg, "-cprt")) { CHECK_NEXT_ARG cprt = argv[i+1]; i++; open_edit = 1; } else if (!stricmp(arg, "-chap")) { CHECK_NEXT_ARG chap_file = argv[i+1]; i++; open_edit = 1; } - else if (!stricmp(arg, "-inter") || !stricmp(arg, "-old-inter")) { + else if (!strcmp(arg, "-mem-track")) { +#ifdef GPAC_MEMORY_TRACKING + enable_mem_tracker = 1; +#else + fprintf(stdout, "WARNING - GPAC not compiled with Memory Tracker - ignoring \"-mem-track\"\n"); +#endif + } else if (!strcmp(arg, "-strict-error")) { + gf_log_set_strict_error(1); + } else if (!stricmp(arg, "-inter") || !stricmp(arg, "-old-inter")) { CHECK_NEXT_ARG InterleavingTime = atof(argv[i+1]) / 1000; open_edit = 1; @@ -1465,9 +1497,15 @@ int main(int argc, char **argv) CHECK_NEXT_ARG seg_ext = argv[i+1]; i++; + } else if (!stricmp(arg, "-dash-ctx")) { + CHECK_NEXT_ARG + dash_ctx = argv[i+1]; + i++; + } else if (!stricmp(arg, "-daisy-chain")) { + daisy_chain_sidx = 1; } else if (!stricmp(arg, "-url-template")) { use_url_template = 1; - } + } else if (!stricmp(arg, "-itags")) { CHECK_NEXT_ARG itunes_tags = argv[i+1]; i++; open_edit = 1; } #ifndef GPAC_DISABLE_ISOM_HINTING else if (!stricmp(arg, "-hint")) { open_edit = 1; HintIt = 1; } @@ -1726,7 +1764,7 @@ int main(int argc, char **argv) else if (!stricmp(arg, "-ovsbr")) import_flags |= GF_IMPORT_OVSBR; else if (!stricmp(arg, "-fps")) { CHECK_NEXT_ARG - if (!strcmp(argv[i+1], "auto")) import_fps = 10000.0; + if (!strcmp(argv[i+1], "auto")) import_fps = GF_IMPORT_AUTO_FPS; else if (strchr(argv[i+1], '-')) { u32 ticks, dts_inc; sscanf(argv[i+1], "%u-%u", &ticks, &dts_inc); @@ -1847,8 +1885,25 @@ int main(int argc, char **argv) nb_track_act++; i++; } - else if (!stricmp(arg, "-split")) { CHECK_NEXT_ARG split_duration = atof(argv[i+1]); i++; split_size = 0; } - else if (!stricmp(arg, "-split-size") || !stricmp(arg, "-splits")) { CHECK_NEXT_ARG split_size = atoi(argv[i+1]); i++; split_duration = 0; } + else if (!stricmp(arg, "-split")) { + CHECK_NEXT_ARG + split_duration = atof(argv[i+1]); + if (split_duration<0) split_duration=0;; + i++; + split_size = 0; + } + else if (!stricmp(arg, "-split-rap") || !stricmp(arg, "-splitr")) { + CHECK_NEXT_ARG + split_duration = -1; + split_size = -1; + } + else if (!stricmp(arg, "-split-size") || !stricmp(arg, "-splits")) { + CHECK_NEXT_ARG + split_size = atoi(argv[i+1]); + if (split_size<0) split_size = 0; + i++; + split_duration = 0; + } else if (!stricmp(arg, "-split-chunk") || !stricmp(arg, "-splitx")) { CHECK_NEXT_ARG if (!strstr(argv[i+1], ":")) { @@ -2070,16 +2125,29 @@ int main(int argc, char **argv) return 0; } -// gf_log_set_level((verbose>1) ? GF_LOG_DEBUG : (verbose ? GF_LOG_INFO : GF_LOG_WARNING) ); - gf_log_set_level(verbose ? GF_LOG_DEBUG : GF_LOG_INFO); - gf_log_set_tools(GF_LOG_CONTAINER|GF_LOG_SCENE|GF_LOG_PARSER|GF_LOG_AUTHOR|GF_LOG_CODING); - if (quiet) { - if (quiet==2) gf_log_set_level(0); - gf_set_progress_callback(NULL, progress_quiet); + { + u32 logtools = GF_LOG_CONTAINER|GF_LOG_SCENE|GF_LOG_PARSER|GF_LOG_AUTHOR|GF_LOG_CODING; +#ifdef GPAC_MEMORY_TRACKING + if (enable_mem_tracker) logtools |= GF_LOG_MEMORY; +#endif + + //gf_log_set_level((verbose>1) ? GF_LOG_DEBUG : (verbose ? GF_LOG_INFO : GF_LOG_WARNING) ); + gf_log_set_level(verbose ? GF_LOG_DEBUG : GF_LOG_INFO); + gf_log_set_tools(logtools); + if (quiet) { + if (quiet==2) gf_log_set_level(0); + gf_set_progress_callback(NULL, progress_quiet); + + } } + /*init libgpac*/ - gf_sys_init(1); +#ifdef GPAC_MEMORY_TRACKING + gf_sys_init(enable_mem_tracker); +#else + gf_sys_init(0); +#endif if (do_mpd) { Bool remote = 0; @@ -2167,8 +2235,13 @@ int main(int argc, char **argv) if (!test) { open_mode = (do_flat) ? GF_ISOM_OPEN_WRITE : GF_ISOM_WRITE_EDIT; if (!outName) outName = inName; + } else { + fclose(test); + if (! gf_isom_probe_file(inName) ) { + open_mode = (do_flat) ? GF_ISOM_OPEN_WRITE : GF_ISOM_WRITE_EDIT; + if (!outName) outName = inName; + } } - else fclose(test); } open_edit = 1; @@ -2192,7 +2265,8 @@ int main(int argc, char **argv) /*unless explicitly asked, remove all systems tracks*/ if (!keep_sys_tracks) remove_systems_tracks(file); needSave = 1; - if (!conv_type && can_convert_to_isma(file)) conv_type = GF_ISOM_CONV_TYPE_ISMA; + /*JLF commented: if you want ISMA, just ask for it, no more auto-detect*/ +// if (!conv_type && can_convert_to_isma(file)) conv_type = GF_ISOM_CONV_TYPE_ISMA; } if (nb_cat) { @@ -2366,6 +2440,7 @@ int main(int argc, char **argv) } if (dash_duration) { + if (frags_per_sidx<0) frags_per_sidx = 0; #ifndef GPAC_DISABLE_MPEG2TS dump_mpeg2_ts(inName, NULL, program_number, dash_duration, seg_at_rap, frags_per_sidx, seg_name, seg_ext, use_url_template, dash_ts_use_index); @@ -2516,9 +2591,10 @@ int main(int argc, char **argv) #ifndef GPAC_DISABLE_ISOM_WRITE if (split_duration || split_size) { - split_isomedia_file(file, split_duration, split_size, inName, InterleavingTime, split_start, tmpdir, outName); + split_isomedia_file(file, split_duration, split_size, inName, InterleavingTime, split_start, tmpdir); /*never save file when splitting is desired*/ open_edit = 0; + needSave = 0; } #endif @@ -2601,7 +2677,7 @@ int main(int argc, char **argv) break; #endif case 7: - if (gf_isom_get_meta_item_count(file, meta->root_meta, tk)) { + if (gf_isom_has_meta_xml(file, meta->root_meta, tk)) { e = gf_isom_extract_meta_xml(file, meta->root_meta, tk, meta->szPath, NULL); } else { fprintf(stdout, "No meta box in input file\n"); @@ -3001,7 +3077,11 @@ int main(int argc, char **argv) /*split file*/ if (dash_duration) { - fprintf(stdout, "DASH-ing file with %.3f secs segments with %d fragments of %.3f secs", dash_duration, frags_per_sidx, InterleavingTime); + + fprintf(stdout, "DASH-ing file with %.3f secs segments - fragments: %.3f secs - ", dash_duration, InterleavingTime); + if (frags_per_sidx<0) fprintf(stdout, "no sidx"); + else if (frags_per_sidx) fprintf(stdout, "%d per sidx", frags_per_sidx); + else fprintf(stdout, "single sidx"); if (seg_at_rap) fprintf(stdout, " at GOP boundaries"); fprintf(stdout, "\n"); @@ -3009,7 +3089,7 @@ int main(int argc, char **argv) while (outfile[strlen(outfile)-1] != '.') outfile[strlen(outfile)-1] = 0; outfile[strlen(outfile)-1] = 0; if (!outName) strcat(outfile, "_dash"); - e = gf_media_fragment_file(file, outfile, InterleavingTime, seg_at_rap ? 2 : 1, dash_duration, seg_name, seg_ext, frags_per_sidx, 0, use_url_template); + e = gf_media_fragment_file(file, outfile, InterleavingTime, seg_at_rap ? 2 : 1, dash_duration, seg_name, seg_ext, frags_per_sidx, daisy_chain_sidx, use_url_template, dash_ctx); if (e) fprintf(stdout, "Error while DASH-ing file: %s\n", gf_error_to_string(e)); gf_isom_delete(file); gf_sys_close(); @@ -3018,7 +3098,7 @@ int main(int argc, char **argv) if (!InterleavingTime) InterleavingTime = 0.5; if (HintIt) fprintf(stdout, "Warning: cannot hint and fragment - ignoring hint\n"); fprintf(stdout, "Fragmenting file (%.3f seconds fragments)\n", InterleavingTime); - e = gf_media_fragment_file(file, outfile, InterleavingTime, 0, 0, NULL, NULL, 0, 0, 0); + e = gf_media_fragment_file(file, outfile, InterleavingTime, 0, 0, NULL, NULL, 0, 0, 0, NULL); if (e) fprintf(stdout, "Error while fragmenting file: %s\n", gf_error_to_string(e)); gf_isom_delete(file); if (!e && !outName && !force_new) { @@ -3150,9 +3230,14 @@ int main(int argc, char **argv) err_exit: /*close libgpac*/ gf_sys_close(); - if (file) gf_isom_delete(file); + if (file) gf_isom_delete(file); fprintf(stdout, "\n\tError: %s\n", gf_error_to_string(e)); return 1; } +int main( int argc, char** argv ) +{ + return mp4boxMain( argc, argv ); +} + #endif /*GPAC_DISABLE_ISOM*/ diff --git a/applications/mp4box/wrapper.c b/applications/mp4box/wrapper.c new file mode 100644 index 0000000..8a8bc58 --- /dev/null +++ b/applications/mp4box/wrapper.c @@ -0,0 +1,104 @@ +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include "stdlib.h" +#include "stdio.h" +#include "string.h" + + +#define jniTAG "WRAPPER_JNI" + +#define jniLOGV(X) __android_log_print(ANDROID_LOG_VERBOSE, jniTAG, X) +#define jniLOGI(X) __android_log_print(ANDROID_LOG_INFO, jniTAG, X) +#define jniLOGE(X) __android_log_print(ANDROID_LOG_ERROR, jniTAG, X) + +/*#define CAST_HANDLE(wr) jclass c = env->GetObjectClass(obj);\ + if (!c) return;\ + jfieldID fid = env->GetFieldID(c, "handle", "J");\ + if (!fid){\ + __android_log_print(ANDROID_LOG_ERROR, jniTAG, "No Field ID, ERROR");\ + return;\ + }\ + jlong h = env->GetLongField(obj, fid); + //CNativeWrapper* wr = (CNativeWrapper*) h;*/ + +char ** ConvertCommandLine( const char* sCommand, int* iNbArg ); + +JNIEXPORT void JNICALL Java_com_enst_mp4box_mp4terminal_run(JNIEnv * env, jobject obj, jstring sCommand) +{ + //CAST_HANDLE(wr); + jniLOGV("mp4terminal::start"); + /*if (!wr) + { + jniLOGV("mp4terminal::end : aborted"); + return; + }*/ + jboolean isCopy; + const char * sOriginalCommand = (*env)->GetStringUTFChars(env, sCommand, &isCopy); + + jniLOGV("mp4terminal::command get back ok"); + jniLOGV(sOriginalCommand); + + int iNbArg = 0; + + int i = 0; + char** sConvertedCommandLine; + sConvertedCommandLine = ConvertCommandLine( sOriginalCommand, &i ); + + jniLOGV("Convert command line done"); + FILE* ferr = freopen( "/mnt/sdcard/stderrout.txt", "w", stderr ); + + FILE* fout = freopen( "/mnt/sdcard/stdout.txt", "w", stdout ); + + mp4boxMain(i, sConvertedCommandLine); + + (*env)->ReleaseStringUTFChars(env, sCommand, sOriginalCommand); + jniLOGV("mp4terminal::end"); + fclose(ferr); + fclose(fout); +} + +char ** ConvertCommandLine( const char* sCommand, int* iNbArg ) +{ + int iLength = strlen( sCommand ); + int iArgNumber = 1; + int i = 0; + char** pReturn; + int iPreviousPos = 0; + int k = 1;//begin at character position 1 as the 0 position will be held by the process name , i.e. mp4box + int l = 0; + + for ( i = 0; i < iLength ; i++ ) + { + if( sCommand[i] == ' ' ) + { + iArgNumber++; + } + } + iArgNumber++;; // last argument will not be detected as it is not followed by a space character + pReturn = (char**)malloc(sizeof(char*)*iArgNumber); + pReturn[0] = (char*)malloc(sizeof( char) * ( 7 )); + strcpy( pReturn[0], "MP4Box" );//just a place holder , will never be read. + pReturn[0][6] = '\0'; + + for ( l = 0; l <= iLength ; l++ ) + { + if( sCommand[l] == ' ' || l == ( iLength ) ) + { + pReturn[k] = (char*)malloc(sizeof( char) * ( l - iPreviousPos + 1)); + strncpy( pReturn[k], sCommand + iPreviousPos, l - iPreviousPos ); + pReturn[k][l-iPreviousPos] = '\0'; + iPreviousPos = l + 1; + k++; + } + } + *iNbArg = iArgNumber; + return pReturn; +} +#ifdef __cplusplus +} +#endif + diff --git a/applications/mp4box_android/.classpath b/applications/mp4box_android/.classpath new file mode 100644 index 0000000..609aa00 --- /dev/null +++ b/applications/mp4box_android/.classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/applications/mp4box_android/.project b/applications/mp4box_android/.project new file mode 100644 index 0000000..d7f5daa --- /dev/null +++ b/applications/mp4box_android/.project @@ -0,0 +1,33 @@ + + + mp4box + + + + + + com.android.ide.eclipse.adt.ResourceManagerBuilder + + + + + com.android.ide.eclipse.adt.PreCompilerBuilder + + + + + org.eclipse.jdt.core.javabuilder + + + + + com.android.ide.eclipse.adt.ApkBuilder + + + + + + com.android.ide.eclipse.adt.AndroidNature + org.eclipse.jdt.core.javanature + + diff --git a/applications/mp4box_android/AndroidManifest.xml b/applications/mp4box_android/AndroidManifest.xml new file mode 100644 index 0000000..ba98ed9 --- /dev/null +++ b/applications/mp4box_android/AndroidManifest.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + diff --git a/applications/mp4box_android/default.properties b/applications/mp4box_android/default.properties new file mode 100644 index 0000000..e2e8061 --- /dev/null +++ b/applications/mp4box_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-8 diff --git a/applications/mp4box_android/gen/org/enst/mp4box/R.java b/applications/mp4box_android/gen/org/enst/mp4box/R.java new file mode 100644 index 0000000..399c89c --- /dev/null +++ b/applications/mp4box_android/gen/org/enst/mp4box/R.java @@ -0,0 +1,30 @@ +/* AUTO-GENERATED FILE. DO NOT MODIFY. + * + * This class was automatically generated by the + * aapt tool from the resource data it found. It + * should not be modified by hand. + */ + +package com.enst.mp4box; + +public final class R { + public static final class attr { + } + public static final class drawable { + public static final int icon=0x7f020000; + } + public static final class id { + public static final int CommandLineEdit=0x7f050001; + public static final int OkButton=0x7f050002; + public static final int textView1=0x7f050000; + } + public static final class layout { + public static final int main=0x7f030000; + } + public static final class string { + public static final int CommandLineTitle=0x7f040002; + public static final int OkButton=0x7f040003; + public static final int app_name=0x7f040001; + public static final int hello=0x7f040000; + } +} diff --git a/applications/osmo4_android/proguard.cfg b/applications/mp4box_android/proguard.cfg similarity index 89% rename from applications/osmo4_android/proguard.cfg rename to applications/mp4box_android/proguard.cfg index 8ad7d33..12dd039 100644 --- a/applications/osmo4_android/proguard.cfg +++ b/applications/mp4box_android/proguard.cfg @@ -10,6 +10,8 @@ -keep public class * extends android.app.Service -keep public class * extends android.content.BroadcastReceiver -keep public class * extends android.content.ContentProvider +-keep public class * extends android.app.backup.BackupAgentHelper +-keep public class * extends android.preference.Preference -keep public class com.android.vending.licensing.ILicensingService -keepclasseswithmembernames class * { diff --git a/applications/mp4box_android/res/drawable-hdpi/icon.png b/applications/mp4box_android/res/drawable-hdpi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..8074c4c571b8cd19e27f4ee5545df367420686d7 GIT binary patch literal 4147 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 literal 0 HcmV?d00001 diff --git a/applications/mp4box_android/res/drawable-ldpi/icon.png b/applications/mp4box_android/res/drawable-ldpi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1095584ec21f71cd0afc9e0993aa2209671b590c GIT binary patch literal 1723 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 + + + + + diff --git a/applications/mp4box_android/res/values/strings.xml b/applications/mp4box_android/res/values/strings.xml new file mode 100644 index 0000000..dece8e7 --- /dev/null +++ b/applications/mp4box_android/res/values/strings.xml @@ -0,0 +1,7 @@ + + + Hello World, mp4box! + mp4box + Command Line : + Ok + diff --git a/applications/mp4box_android/src/com/enst/mp4box/mp4box.java b/applications/mp4box_android/src/com/enst/mp4box/mp4box.java new file mode 100644 index 0000000..4a3f1e7 --- /dev/null +++ b/applications/mp4box_android/src/com/enst/mp4box/mp4box.java @@ -0,0 +1,129 @@ +package com.enst.mp4box; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +import com.enst.mp4box.R; + +import android.app.Activity; +import android.os.Bundle; +import android.widget.Button; +import android.widget.EditText; +import android.util.Log; +import android.view.View; + + + +public class mp4box extends Activity { + private mp4terminal myTerminal; + + /** Called when the activity is first created. */ + @Override + + + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.main); + myTerminal = new mp4terminal(); + errors = loadAllLibraries(); + System.out.println( "hello world java" ); + final Button button = (Button) findViewById(R.id.OkButton); + + button.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + EditText oCommandLine = (EditText) findViewById(R.id.CommandLineEdit ); + CharSequence sCommandLine = oCommandLine.getText(); + myTerminal.run( sCommandLine.toString() ); + //showKeyboard( true ); + } + }); + + } + + + + + private static Map errors = null; + + synchronized static Map loadAllLibraries() + { + if( errors != null) + return errors; + StringBuilder sb = new StringBuilder(); + final String[] toLoad = { "GLESv1_CM", "dl", "log",//$NON-NLS-3$ //$NON-NLS-2$ //$NON-NLS-1$ + "jpeg", "javaenv", //$NON-NLS-1$ //$NON-NLS-2$ + "mad", "editline", "ft2", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + "js_osmo", "openjpeg", "png", "z", //$NON-NLS-1$ //$NON-NLS-2$//$NON-NLS-3$ //$NON-NLS-4$ + "ffmpeg", "faad", "gpac", //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ + "stdc++", "mp4box" }; // //$NON-NLS-1$ //$NON-NLS-2$ + HashMap exceptions = new HashMap(); + for (String s : toLoad) { + try { + String msg = "Loading library " + s + "...";//$NON-NLS-1$//$NON-NLS-2$ + sb.append(msg); + //Log.i(LOG_LIB, msg); + System.loadLibrary(s); + } catch (UnsatisfiedLinkError e) { + sb.append("Failed to load " + s + ", error=" + e.getLocalizedMessage() + " :: " //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$ + + e.getClass().getSimpleName() + "\n"); //$NON-NLS-1$ + exceptions.put(s, e); + //Log.e(LOG_LIB, "Failed to load library : " + s + " due to link error " + e.getLocalizedMessage(), e); //$NON-NLS-1$ //$NON-NLS-2$ + } catch (SecurityException e) { + exceptions.put(s, e); + //Log.e(LOG_LIB, "Failed to load library : " + s + " due to security error " + e.getLocalizedMessage(), e); //$NON-NLS-1$ //$NON-NLS-2$ + } catch (Throwable e) { + exceptions.put(s, e); + //Log.e(LOG_LIB, "Failed to load library : " + s + " due to Runtime error " + e.getLocalizedMessage(), e); //$NON-NLS-1$ //$NON-NLS-2$ + } + } + + /*if (!exceptions.isEmpty()) { + try { + PrintStream out = new PrintStream(config.getGpacConfigDirectory() + "debug_libs.txt", "UTF-8"); //$NON-NLS-1$//$NON-NLS-2$ + out.println("$Revision: 2972 $"); //$NON-NLS-1$ + out.println(new Date()); + out.println("\n*** Configuration\n"); //$NON-NLS-1$ + out.println(config.getConfigAsText()); + sb.append("*** Libs listing: "); //$NON-NLS-1$ + sb.append(config.getGpacLibsDirectory()); + sb.append('\n'); + listing(sb, new File(config.getGpacLibsDirectory()), 2); + sb.append("*** Modules listing: "); //$NON-NLS-1$ + sb.append(config.getGpacModulesDirectory()); + sb.append('\n'); + listing(sb, new File(config.getGpacModulesDirectory()), 2); + sb.append("*** Fonts listing: \n"); //$NON-NLS-1$ + sb.append(config.getGpacFontDirectory()); + sb.append('\n'); + listing(sb, new File(config.getGpacFontDirectory()), 2); + sb.append("*** Exceptions:\n"); //$NON-NLS-1$ + for (Map.Entry ex : exceptions.entrySet()) { + sb.append(ex.getKey()).append(": ") //$NON-NLS-1$ + .append(ex.getValue().getLocalizedMessage()) + .append('(') + .append(ex.getValue().getClass()) + .append(")\n"); //$NON-NLS-1$ + } + out.println(sb.toString()); + out.flush(); + out.close(); + } catch (Exception e) { + Log.e(LOG_LIB, "Failed to output debug info to debug file", e); //$NON-NLS-1$ + } + }*/ + errors = Collections.unmodifiableMap(exceptions); + return errors; +} + /*public void showKeyboard(boolean showKeyboard) { + if (keyboardIsVisible == showKeyboard == true) + return; + InputMethodManager mgr = ((InputMethodManager) getSystemService(INPUT_METHOD_SERVICE)); + this.keyboardIsVisible = showKeyboard; + if (showKeyboard) + mgr.showSoftInput(findViewById(R.id.CommandLineEdit ), 0); + else + mgr.hideSoftInputFromInputMethod(findViewById(R.id.CommandLineEdit ).getWindowToken(), 0); + + }*/ +} \ No newline at end of file diff --git a/applications/mp4box_android/src/com/enst/mp4box/mp4terminal.java b/applications/mp4box_android/src/com/enst/mp4box/mp4terminal.java new file mode 100644 index 0000000..7b77bb6 --- /dev/null +++ b/applications/mp4box_android/src/com/enst/mp4box/mp4terminal.java @@ -0,0 +1,7 @@ +package com.enst.mp4box; + + +public class mp4terminal { + + public native void run( String sCommandLine); +} diff --git a/applications/mp4client/Makefile b/applications/mp4client/Makefile index 68bac02..0cdc8d9 100644 --- a/applications/mp4client/Makefile +++ b/applications/mp4client/Makefile @@ -4,7 +4,7 @@ vpath %.c $(SRC_PATH)/applications/mp4client CFLAGS= $(OPTFLAGS) -I"$(SRC_PATH)/include" -I../../ -LINKLIBS=$(OGL_LIBS) +LINKLIBS=$(GPAC_SH_FLAGS) ifeq ($(DEBUGBUILD), yes) CFLAGS+=-g @@ -23,15 +23,6 @@ endif #common obj OBJS= main.o extract.o -#not the same path as local in target -ifneq ($(CROSS_COMPILING), yes) -ifeq ($(BUILD_INSTALL), yes) -INSTALL_FLAGS=-DGPAC_MODULES_PATH=\"$(moddir)\" -else -INSTALL_FLAGS= -endif -endif - ifeq ($(CONFIG_WIN32),yes) EXE=.exe PROG=MP4Client$(EXE) @@ -40,30 +31,6 @@ EXT= PROG=MP4Client endif -ifneq ($(CONFIG_JPEG), no) -#LINKLIBS+= -L$(prefix)/lib -else -ifneq ($(CONFIG_PNG), no) -#LINKLIBS+= -L$(prefix)/lib -else -ifeq ($(CONFIG_JS),prefix) -#LINKLIBS+= -L$(prefix)/lib -endif -endif -endif - -ifeq ($(CONFIG_JPEG), no) -else -#LINKLIBS+= -ljpeg -endif - - -ifeq ($(CONFIG_PNG), no) -else -#LINKLIBS+= -lpng -endif - - SRCS := $(OBJS:.o=.c) all: $(PROG) @@ -72,17 +39,16 @@ MP4Client$(EXE): $(OBJS) $(CC) $(LDFLAGS) -o ../../bin/gcc/$@ $(OBJS) -L../../bin/gcc -lgpac $(LINKLIBS) %.o: %.c - $(CC) $(CFLAGS) $(INSTALL_FLAGS) -c -o $@ $< + $(CC) $(CFLAGS) -c -o $@ $< clean: rm -f $(OBJS) ../../bin/gcc/$(PROG) install: clean - $(MAKE) -override BUILD_INSTALL=yes all install -m 755 $(INSTFLAGS) ../../bin/gcc/MP4Client "$(DESTDIR)$(prefix)/bin" uninstall: - rm -rf $(prefix)/bin/MP4Client + rm -rf $(DESTDIR)$(prefix)/bin/MP4Client dep: depend diff --git a/applications/mp4client/extract.c b/applications/mp4client/extract.c index 6aac57e..2458dcf 100644 --- a/applications/mp4client/extract.c +++ b/applications/mp4client/extract.c @@ -26,6 +26,7 @@ #include #include +#include #ifdef WIN32 #include @@ -678,7 +679,7 @@ Bool dump_file(char *url, u32 dump_mode, Double fps, u32 width, u32 height, Floa } } - if (!fps) fps = 25.0; + if (!fps) fps = GF_IMPORT_DEFAULT_FPS; time = prev_time = 0; nb_frames = 0; @@ -705,7 +706,7 @@ Bool dump_file(char *url, u32 dump_mode, Double fps, u32 width, u32 height, Floa while ((gf_term_get_option(term, GF_OPT_PLAY_STATE) == GF_STATE_STEP_PAUSE)) { gf_term_process_flush(term); } - fprintf(stdout, "Dumping %02d/100\r", (u32) ((100.0*prev_time)/dump_dur) ); + fprintf(stdout, "Dumping %02d/100 %% - time %.02f sec\r", (u32) ((100.0*prev_time)/dump_dur), prev_time/1000.0 ); if (dump_mode==8) { /*we'll dump both buffers at once*/ @@ -721,6 +722,11 @@ Bool dump_file(char *url, u32 dump_mode, Double fps, u32 width, u32 height, Floa time = (u32) (nb_frames*1000/fps); gf_term_step_clocks(term, time - prev_time); prev_time = time; + + if (gf_prompt_has_input() && (gf_prompt_get_char()=='q')) { + fprintf(stdout, "Aborting dump\n"); + break; + } } AVI_close(avi_out); if (dump_mode==8) AVI_close(depth_avi_out); diff --git a/applications/mp4client/main.c b/applications/mp4client/main.c index 08cecb7..5861508 100644 --- a/applications/mp4client/main.c +++ b/applications/mp4client/main.c @@ -26,6 +26,7 @@ #include #include #include +#include #include #include #include @@ -44,12 +45,6 @@ #else #include /*for GetModuleFileName*/ -#include /*for _mkdir*/ -#include /*for getting user-dir*/ -#ifndef SHGFP_TYPE_CURRENT -#define SHGFP_TYPE_CURRENT 0 /*needed for MinGW*/ -#endif - #endif //WIN32 /*local prototypes*/ @@ -83,6 +78,8 @@ GF_Err last_error = GF_OK; static Fixed bench_speed = FLT2FIX(20); static Bool request_next_playlist_item = 0; +FILE *playlist = NULL; +static Bool readonly_playlist = 0; static GF_Config *cfg_file; static Bool display_rti = 0; @@ -126,19 +123,23 @@ void hide_shell(u32 cmd_type) void PrintUsage() { fprintf(stdout, "Usage MP4Client [options] [filename]\n" - "\t-c fileName: user-defined configuration file\n" + "\t-c fileName: user-defined configuration file. Also works with -cfg\n" +#ifdef GPAC_MEMORY_TRACKING + "\t-mem-track: enables memory tracker\n" +#endif "\t-rti fileName: logs run-time info (FPS, CPU, Mem usage) to file\n" "\t-rtix fileName: same as -rti but driven by GPAC logs\n" "\t-quiet: removes script message, buffering and downloading status\n" + "\t-strict-error: exit when the player reports its first error\n" "\t-opt option: Overrides an option in the configuration file. String format is section:key=value\n" - "\t-log-file file: sets output log file.\n" - "\t-log-level lev: sets log level. Possible values are:\n" + "\t-log-file file: sets output log file. Also works with -lf\n" + "\t-log-level lev: sets log level. Also works with -ll. Possible values are:\n" "\t \"error\" : logs only error messages\n" "\t \"warning\" : logs error+warning messages\n" "\t \"info\" : logs error+warning+info messages\n" "\t \"debug\" : logs all messages\n" "\n" - "\t-log-tools lt: sets tool(s) to log. List of \':\'-separated values:\n" + "\t-log-tools lt: sets tool(s) to log. Also works with -lt. List of \':\'-separated values:\n" "\t \"core\" : libgpac core\n" "\t \"coding\" : bitstream formats (audio, video, scene)\n" "\t \"container\" : container formats (ISO File, MPEG-2 TS, AVI, ...)\n" @@ -159,7 +160,6 @@ void PrintUsage() "\t \"all\" : all tools logged\n" "\n" "\t-size WxH: specifies visual size (default: scene size)\n" - "\t-scale s: scales the visual size (default: 1)\n" #if defined(__DARWIN__) || defined(__APPLE__) "\t-thread: enables thread usage for terminal and compositor \n" #else @@ -167,6 +167,7 @@ void PrintUsage() #endif "\t-no-audio: disables audio \n" "\t-no-wnd: uses windowless mode (Win32 only)\n" + "\t-no-back: uses transparent background for output window when no background is specified (Win32 only)\n" "\t-align vh: specifies v and h alignment for windowless mode\n" " possible v values: t(op), m(iddle), b(ottom)\n" " possible h values: l(eft), m(iddle), r(ight)\n" @@ -174,6 +175,15 @@ void PrintUsage() " default alignment is top-left\n" "\t-pause: pauses at first frame\n" "\t-loop: loops presentation\n" + "\t-no-regulation: disables framerate regulation\n" + "\t-fs: starts in fullscreen mode\n" + "\t-views v1:.:vN: creates an auto-stereo scene of N views. vN can be any type of URL supported by GPAC. \n" + " in this mode, URL argument of GPAC is ignored, GUI as well.\n" + " this is equivalent as using views://v1:.:N as an URL.\n" + "\n" + "\t-exit: automatically exits when presentation is over\n" + "\t-run-for TIME: runs for TIME seconds and exits\n" + "\t-gui: starts in GUI mode. The GUI is indicated in GPAC config, section General, by the key [StartupFile]\n" "\n" "Dumper Options:\n" "\t-bmp [times]: dumps given frames to bmp\n" @@ -187,14 +197,16 @@ void PrintUsage() "\t-depth: dumps depthmap (z-buffer) frames\n" " with -avi [times]: dumps depthmap in grayscale .avi\n" " with -bmp: dumps depthmap in grayscale .bmp\n" - "\t-fps FPS: specifies frame rate for AVI dumping (default: 25.0)\n" - "\t-2d: uses 2D compositor\n" - "\t-3d: uses 3D compositor\n" + "\t-fps FPS: specifies frame rate for AVI dumping (default: %f)\n" + "\t-scale s: scales the visual size (default: 1)\n" "\t-fill: uses fill aspect ratio for dumping (default: none)\n" "\t-show: show window while dumping (default: no)\n" + "\n" + "\t-help: show this screen\n" + "\n" "MP4Client - GPAC command line player and dumper - version %s\n" "GPAC Written by Jean Le Feuvre (c) 2001-2005 - ENST (c) 2005-200X\n", - + GF_IMPORT_DEFAULT_FPS, GPAC_FULL_VERSION ); } @@ -202,15 +214,23 @@ void PrintUsage() void PrintHelp() { fprintf(stdout, "MP4Client command keys:\n" + "\tq: quit\n" + "\tX: kill\n" "\to: connect to the specified URL\n" - "\tO: connect to the specified URL in playlist mode\n" - "\tN: switch to the next URL in the playlist (works with return key as well)\n" - "\tr: restart current presentation\n" + "\tO: connect to the specified playlist\n" + "\tN: switch to the next URL in the playlist. Also works with \\n\n" + "\tP: jumps to a given number ahead in the playlist\n" + "\tr: reload current presentation\n" + "\tD: disconnects the current presentation\n" + "\n" "\tp: play/pause the presentation\n" "\ts: step one frame ahead\n" "\tz: seek into presentation\n" "\tt: print current timing\n" "\n" + "\tu: sends a command (BIFS or LASeR) to the main scene\n" + "\tZ: dumps output video to PNG\n" + "\n" "\tw: view world info\n" "\tv: view Object Descriptor list\n" "\ti: view Object Descriptor info (by ID)\n" @@ -219,16 +239,11 @@ void PrintHelp() "\tm: view media objects buffering and memory info\n" "\td: dumps scene graph\n" "\n" - "\tC: Enable Streaming Cache\n" - "\tS: Stops Streaming Cache and save to file\n" - "\tA: Aborts Streaming Cache\n" - "\n" "\tk: turns stress mode on/off\n" "\tn: changes navigation mode\n" "\tx: reset to last active viewpoint\n" "\n" - "\t2: restart using 2D compositor\n" - "\t3: restart using 3D compositor\n" + "\t3: switch OpenGL on or off for 2D scenes\n" "\n" "\t4: forces 4/3 Aspect Ratio\n" "\t5: forces 16/9 Aspect Ratio\n" @@ -240,10 +255,19 @@ void PrintHelp() "\n" "\tl: list available modules\n" "\tc: prints some GPAC configuration info\n" - "\tR: toggles run-time info display on/off\n" - "\tq: exit the application\n" + "\tE: forces reload of GPAC configuration\n" + "\n" + "\tR: toggles run-time info display in window title bar on/off\n" + "\tF: toggle displaying of FPS in stdout on/off\n" + "\tg: print GPAC allocated memory\n" "\th: print this message\n" "\n" + "\tEXPERIMENTAL/UNSTABLE OPTIONS\n" + "\tC: Enable Streaming Cache\n" + "\tS: Stops Streaming Cache and save to file\n" + "\tA: Aborts Streaming Cache\n" + "\tM: specifies video cache memory for 2D objects\n" + "\n" "MP4Client - GPAC command line player - version %s\n" "GPAC Written by Jean Le Feuvre (c) 2001-2005 - ENST (c) 2005-200X\n", @@ -251,195 +275,7 @@ void PrintHelp() ); } -GF_Config *create_default_config(char *file_path, char *file_name) -{ - GF_Config *cfg; - char szPath[GF_MAX_PATH]; - char gui_path[GF_MAX_PATH]; -#ifdef WIN32 - FILE *f; - Bool write_access = 0; - - strcpy(gui_path, file_path); - - /*following code is highly inspired by Osmo4*/ - /*do we have the write privileges on this dir ? if not, use user local data directory*/ - strcpy(szPath, file_path); - strcat(szPath, "GPAC.cfg"); - f = gf_f64_open(szPath, "wb"); - if (f != NULL) { - fclose(f); - write_access = 1; - } else { - write_access = 0; - } - strcpy(szPath, file_path); - - /*get GPAC.cfg path*/ - if (!write_access) { - char szPath2[GF_MAX_PATH]; - SHGetFolderPath(NULL, CSIDL_APPDATA | CSIDL_FLAG_CREATE, NULL, SHGFP_TYPE_CURRENT, file_path); - if (file_path[strlen((char *) file_path)-1] != '\\') strcat(file_path, "\\"); - strcat(file_path, "GPAC\\"); - /*create GPAC dir*/ - _mkdir(file_path); - strcpy(szPath2, file_path); - strcat(szPath2, "GPAC.cfg"); - f = gf_f64_open(szPath2, "wb"); - assert(f); - if (!f) return NULL; - fclose(f); - } -#else - FILE *f; - strcpy(gui_path, ""); - - sprintf(szPath, "%s%c%s", file_path, GF_PATH_SEPARATOR, file_name); - f = gf_f64_open(szPath, "wt"); - fprintf(stdout, "create %s: %s\n", szPath, (f==NULL) ? "Error" : "OK"); - if (!f) return NULL; - fclose(f); -#endif - - cfg = gf_cfg_new(file_path, file_name); - if (!cfg) return NULL; - -#if defined(WIN32) - //szPath still contains the executable directory -#elif defined(GPAC_MODULES_PATH) /* Mac OS and UNIX */ - fprintf(stdout, "Using module directory %s \n", GPAC_MODULES_PATH); - strcpy(szPath, GPAC_MODULES_PATH); -#else - fprintf(stdout, "Please enter full path to GPAC modules directory:\n"); - while ( 1 > scanf("%s", szPath)); -#endif - gf_cfg_set_key(cfg, "General", "ModulesDirectory", szPath); - gf_cfg_set_key(cfg, "Compositor", "Raster2D", "GPAC 2D Raster"); - gf_cfg_set_key(cfg, "Audio", "ForceConfig", "yes"); - gf_cfg_set_key(cfg, "Audio", "NumBuffers", "2"); - gf_cfg_set_key(cfg, "Audio", "TotalDuration", "120"); - gf_cfg_set_key(cfg, "Audio", "DisableNotification", "no"); - gf_cfg_set_key(cfg, "FontEngine", "FontReader", "ft_font"); - -#ifdef WIN32 - GetWindowsDirectory((char*)szPath, MAX_PATH); - if (szPath[strlen((char*)szPath)-1] != '\\') strcat((char*)szPath, "\\"); - strcat((char *)szPath, "Fonts"); -#elif defined(__DARWIN__) || defined(__APPLE__) - strcpy(szPath, "/Library/Fonts"); -#else - strcpy(szPath, "/usr/share/fonts/truetype/"); -#endif - fprintf(stdout, "Using default font directory %s\n", szPath); - gf_cfg_set_key(cfg, "FontEngine", "FontDirectory", szPath); - - { - char * tmp = gf_get_default_cache_directory(); - gf_cfg_set_key(cfg, "General", "CacheDirectory", tmp); - fprintf(stdout, "Using default cache directory %s\n", tmp); - gf_free(tmp); - } - - gf_cfg_set_key(cfg, "Downloader", "CleanCache", "yes"); - gf_cfg_set_key(cfg, "Compositor", "AntiAlias", "All"); - gf_cfg_set_key(cfg, "Compositor", "FrameRate", "30"); - /*use power-of-2 emulation*/ - gf_cfg_set_key(cfg, "Compositor", "EmulatePOW2", "yes"); -#ifdef WIN32 - gf_cfg_set_key(cfg, "Compositor", "ScalableZoom", "yes"); - gf_cfg_set_key(cfg, "Video", "DriverName", "DirectX Video Output"); -#elif defined(__DARWIN__) - gf_cfg_set_key(cfg, "Video", "DriverName", "SDL Video Output"); - /*SDL not so fast with scalable zoom*/ - gf_cfg_set_key(cfg, "Compositor", "ScalableZoom", "no"); -#else - gf_cfg_set_key(cfg, "Video", "DriverName", "X11 Video Output"); - /*x11 only supports scalable zoom*/ - gf_cfg_set_key(cfg, "Compositor", "ScalableZoom", "yes"); - gf_cfg_set_key(cfg, "Audio", "DriverName", "SDL Audio Output"); -#endif - - gf_cfg_set_key(cfg, "Video", "SwitchResolution", "no"); - gf_cfg_set_key(cfg, "Network", "AutoReconfigUDP", "yes"); - gf_cfg_set_key(cfg, "Network", "UDPTimeout", "10000"); - gf_cfg_set_key(cfg, "Network", "BufferLength", "3000"); - -#if defined(__DARWIN__) || defined(__APPLE__) - gf_cfg_set_key(cfg, "Video", "DriverName", "SDL Video Output"); -#endif - - if (gui_path[0]) { - FILE *f; - strcat(gui_path, "gui/gui.bt"); - f = fopen(gui_path, "rt"); - if (f) { - fclose(f); - gf_cfg_set_key(cfg, "General", "StartupFile", gui_path); - } - } - - - /*store and reload*/ - gf_cfg_del(cfg); - return gf_cfg_new(file_path, file_name); -} - -#if (defined(__DARWIN__) || defined(__APPLE__) ) -#include -#endif /* Apple, needs this for _NSGetExecutablePath on Mac OS X */ - -static void check_config_directories(GF_Config *cfg) -{ -#if (defined(__DARWIN__) || defined(__APPLE__) ) - char mod_path[GF_MAX_PATH]; - char gui_path[GF_MAX_PATH]; - char root_path[GF_MAX_PATH]; - char *sep; - const char *opt; - u32 size = GF_MAX_PATH; - if (_NSGetExecutablePath(root_path, &size)!=0) return; - /*installed or symlink on system, do not attempt to modify the path*/ - if (!strnicmp(root_path, "/usr/", 5)) return; - sep = strstr(root_path, ".app/"); - if (sep) { - sep[4] = 0; - } - gui_path[0] = '\0'; - strcpy(mod_path, root_path); - strcat(mod_path, "/Contents/MacOS/modules/"); - { - struct stat buf; - int status_dir; - memset(&buf, 0, sizeof(struct stat)); - status_dir = stat(mod_path, &buf); - if (!status_dir){ - if (!(buf.st_mode & S_IFDIR)){ -#ifdef GPAC_MODULES_PATH - strcpy(mod_path, GPAC_MODULES_PATH); - gui_path[0] = '\0'; -#endif - } else { - /* OK, it means we are in an .app directory ! */ - strcpy(gui_path, root_path); - strcat(gui_path, "/Contents/MacOS/gui/gui.bt"); - } - } else { -#ifdef GPAC_MODULES_PATH - strcpy(mod_path, GPAC_MODULES_PATH); - gui_path[0] = '\0'; -#endif - } - } - opt = gf_cfg_get_key(cfg, "General", "ModulesDirectory"); - /*modules directory has changed, forced to new location*/ - if (!opt || strcmp(opt, mod_path)) { - gf_cfg_set_key(cfg, "General", "ModulesDirectory", mod_path); - if (gui_path[0]) - gf_cfg_set_key(cfg, "General", "StartupFile", gui_path); - } -#endif -} static void PrintTime(u64 time) @@ -455,7 +291,6 @@ static void PrintTime(u64 time) static u32 rti_update_time_ms = 200; static FILE *rti_logs = NULL; -static u64 memory_at_gpac_startup = 0; static void UpdateRTInfo(const char *legend) { @@ -468,9 +303,6 @@ static void UpdateRTInfo(const char *legend) if (display_rti) { char szMsg[1024]; - if (!rti.process_memory) rti.process_memory = (u32) (memory_at_gpac_startup-rti.physical_memory_avail); - if (!rti.gpac_memory) rti.gpac_memory = (u32) (memory_at_gpac_startup-rti.physical_memory_avail); - if (rti.total_cpu_usage) { sprintf(szMsg, "FPS %02.2f - CPU %02d (%02d) - Mem %d kB", @@ -634,23 +466,23 @@ Bool GPAC_EventProc(void *ptr, GF_Event *evt) { const char *servName; if (!evt->message.service || !strcmp(evt->message.service, the_url)) { - servName = "main service"; - } else if (!strnicmp(evt->message.service, "data:", 5)) { servName = ""; + } else if (!strnicmp(evt->message.service, "data:", 5)) { + servName = "(embedded data)"; } else { servName = evt->message.service; } - servName = ""; if (!evt->message.message) return 0; + if (evt->message.error==GF_SCRIPT_INFO) { GF_LOG(GF_LOG_INFO, GF_LOG_SCRIPT, ("[Script] %s\n", evt->message.message)); - fprintf(stdout, "%s\n", evt->message.message); } else if (evt->message.error) { if (!is_connected) last_error = evt->message.error; - fprintf(stdout, "%s (%s): %s\n", evt->message.message, servName, gf_error_to_string(evt->message.error)); + GF_LOG(GF_LOG_ERROR, GF_LOG_ALL, ("%s %s: %s\n", evt->message.message, servName, gf_error_to_string(evt->message.error))); } else if (!be_quiet) - fprintf(stdout, "(%s) %s\r", servName, evt->message.message); + /*TODO: put a GF_LOG here*/ + fprintf(stdout, "%s %s\r", evt->message.message, servName); } break; case GF_EVENT_PROGRESS: @@ -818,6 +650,32 @@ Bool GPAC_EventProc(void *ptr, GF_Event *evt) ResetCaption(); break; + case GF_EVENT_OPENFILE: + { + u32 i, pos; + /*todo - force playlist mode*/ + if (readonly_playlist) { + fclose(playlist); + playlist = NULL; + } + readonly_playlist = 0; + if (!playlist) { + readonly_playlist = 0; + playlist = gf_temp_file_new(); + } + pos = ftell(playlist); + i=0; + while (iopen_file.nb_files) { + if (evt->open_file.files[i] != NULL) { + fprintf(playlist, "%s\n", evt->open_file.files[i]); + } + i++; + } + fseek(playlist, pos, SEEK_SET); + request_next_playlist_item = 1; + } + return 1; + case GF_EVENT_QUIT: Run = 0; break; @@ -870,69 +728,6 @@ Bool GPAC_EventProc(void *ptr, GF_Event *evt) return 0; } -GF_Config *loadconfigfile(char *filepath) -{ - GF_Config *cfg = NULL; - char *cfg_dir; - char szPath[GF_MAX_PATH]; - - if (filepath) { - strcpy(szPath, filepath); - cfg_dir = strrchr(szPath, '\\'); - if (!cfg_dir) cfg_dir = strrchr(szPath, '/'); - if (cfg_dir) { - char c = cfg_dir[0]; - cfg_dir[0] = 0; - cfg = gf_cfg_new(cfg_dir, cfg_dir+1); - cfg_dir[0] = c; - if (cfg) goto success; - } else { - cfg = gf_cfg_new(".", filepath); - if (cfg) goto success; - } - } - -#ifdef WIN32 - GetModuleFileNameA(NULL, szPath, GF_MAX_PATH); - cfg_dir = strrchr(szPath, '\\'); - if (cfg_dir) cfg_dir[1] = 0; - - cfg = gf_cfg_new(szPath, "GPAC.cfg"); - if (cfg) goto success; - strcpy(szPath, "."); - cfg = gf_cfg_new(szPath, "GPAC.cfg"); - if (cfg) goto success; - strcpy(szPath, "."); - cfg = gf_cfg_new(szPath, "GPAC.cfg"); - if (cfg) goto success; - - GetModuleFileNameA(NULL, szPath, GF_MAX_PATH); - cfg_dir = strrchr(szPath, '\\'); - if (cfg_dir) cfg_dir[1] = 0; - cfg = create_default_config(szPath, "GPAC.cfg"); -#else - /*linux*/ - cfg_dir = getenv("HOME"); - if (cfg_dir) { - strcpy(szPath, cfg_dir); - } else { - fprintf(stdout, "WARNING: HOME env var not set - using current directory for config file\n"); - strcpy(szPath, "."); - } - cfg = gf_cfg_new(szPath, ".gpacrc"); - if (cfg) goto success; - fprintf(stdout, "GPAC config file not found in %s - creating new file\n", szPath); - cfg = create_default_config(szPath, ".gpacrc"); -#endif - if (!cfg) { - fprintf(stdout, "cannot create config file in %s directory\n", szPath); - return NULL; - } - success: - fprintf(stdout, "Using config file in %s directory\n", szPath); - check_config_directories(cfg); - return cfg; -} void list_modules(GF_ModuleManager *modules) { @@ -1068,7 +863,7 @@ int main (int argc, char **argv) char c; const char *str; u32 i, times[100], nb_times, dump_mode; - u32 simulation_time = 0; + u32 simulation_time_in_ms = 0; Bool auto_exit = 0; Bool logs_set = 0; Bool start_fs = 0; @@ -1077,12 +872,12 @@ int main (int argc, char **argv) Bool rgbd_dump = 0; Bool depth_dump = 0; Bool pause_at_first = 0; +#ifdef GPAC_MEMORY_TRACKING Bool enable_mem_tracker = 0; - Double fps = 25.0; +#endif + Double fps = GF_IMPORT_DEFAULT_FPS; Bool ret, fill_ar, visible; - char *url_arg, *the_cfg, *rti_file; - GF_SystemRTInfo rti; - FILE *playlist = NULL; + char *url_arg, *the_cfg, *rti_file, *views; FILE *logfile = NULL; Float scale = 1; #ifndef WIN32 @@ -1096,7 +891,7 @@ int main (int argc, char **argv) dump_mode = 0; fill_ar = visible = 0; - url_arg = the_cfg = rti_file = NULL; + url_arg = the_cfg = rti_file = views = NULL; nb_times = 0; times[0] = 0; @@ -1107,24 +902,32 @@ int main (int argc, char **argv) the_cfg = argv[i+1]; i++; } - else if (!strcmp(arg, "-mem-track")) enable_mem_tracker = 1; + else if (!strcmp(arg, "-mem-track")) { +#ifdef GPAC_MEMORY_TRACKING + enable_mem_tracker = 1; +#else + fprintf(stdout, "WARNING - GPAC not compiled with Memory Tracker - ignoring \"-mem-track\"\n"); +#endif + } else if (!strcmp(arg, "-h") || !strcmp(arg, "-help")) { PrintUsage(); return 1; } } +#ifdef GPAC_MEMORY_TRACKING gf_sys_init(enable_mem_tracker); +#else + gf_sys_init(0); +#endif - cfg_file = loadconfigfile(the_cfg); + cfg_file = gf_cfg_init(the_cfg, NULL); if (!cfg_file) { - fprintf(stdout, "Error: Configuration File \"GPAC.cfg\" not found\n"); + fprintf(stdout, "Error: Configuration File not found\n"); if (logfile) fclose(logfile); return 1; } - - for (i=1; i<(u32) argc; i++) { char *arg = argv[i]; // if (isalnum(arg[0]) || (arg[0]=='/') || (arg[0]=='.') || (arg[0]=='\\') ) { @@ -1192,16 +995,22 @@ int main (int argc, char **argv) i++; } else if (!strcmp(arg, "-quiet")) { be_quiet = 1; + } else if (!strcmp(arg, "-strict-error")) { + gf_log_set_strict_error(1); } else if (!strcmp(arg, "-log-file") || !strcmp(arg, "-lf")) { logfile = gf_f64_open(argv[i+1], "wt"); gf_log_set_callback(logfile, on_gpac_log); i++; } else if (!strcmp(arg, "-log-level") || !strcmp(arg, "-ll")) { - gf_log_set_level(gf_log_parse_level(argv[i+1])); + u32 flags = gf_log_parse_level(argv[i+1]); + if (!flags) return 1; + gf_log_set_level(flags); logs_set = 1; i++; } else if (!strcmp(arg, "-log-tools") || !strcmp(arg, "-lt")) { - gf_log_set_tools(gf_log_parse_tools(argv[i+1])); + u32 flags = gf_log_parse_tools(argv[i+1]); + if (!flags) return 1; + gf_log_set_tools(flags); logs_set = 1; i++; } else if (!strcmp(arg, "-log-clock") || !strcmp(arg, "-lc")) { @@ -1226,7 +1035,13 @@ int main (int argc, char **argv) else if (!strcmp(arg, "-fs")) start_fs = 1; else if (!strcmp(arg, "-pause")) pause_at_first = 1; else if (!strcmp(arg, "-exit")) auto_exit = 1; - else if (!strcmp(arg, "-mem-track")) enable_mem_tracker = 1; + else if (!strcmp(arg, "-mem-track")) { +#ifdef GPAC_MEMORY_TRACKING + enable_mem_tracker = 1; +#else + fprintf(stdout, "WARNING - GPAC not compiled with Memory Tracker - ignoring \"-mem-track\"\n"); +#endif + } else if (!strcmp(arg, "-loop")) loop_at_end = 1; else if (!strcmp(arg, "-opt")) { char *sep, *sep2, szSec[1024], szKey[1024], szVal[1024]; @@ -1247,7 +1062,16 @@ int main (int argc, char **argv) } i++; } - else if (!strncmp(arg, "-run-for=", 9)) simulation_time = atoi(arg+9); + else if (!stricmp(arg, "-views")) { + views = argv[i+1]; + i++; + } + else if (!stricmp(arg, "-run-for")) { + simulation_time_in_ms = atoi(argv[i+1]) * 1000; + if (!simulation_time_in_ms) + simulation_time_in_ms = 1; /*1ms*/ + i++; + } else if (!stricmp(arg, "-help")) { PrintUsage(); return 1; @@ -1255,13 +1079,15 @@ int main (int argc, char **argv) fprintf(stdout, "Unrecognized option %s - skipping\n", arg); } } - if (dump_mode && !url_arg) { + if (dump_mode && !url_arg ) { fprintf(stdout, "Missing argument for dump\n"); PrintUsage(); if (logfile) fclose(logfile); return 1; } + if (!url_arg && simulation_time_in_ms) + simulation_time_in_ms += gf_sys_clock(); if (!gui_mode) { str = gf_cfg_get_key(cfg_file, "General", "ForceGUI"); @@ -1284,8 +1110,6 @@ int main (int argc, char **argv) gf_log_set_tools(0xFFFFFFFF); } - gf_sys_get_rti(500, &rti, GF_RTI_SYSTEM_MEMORY_ONLY); - memory_at_gpac_startup = rti.physical_memory_avail; if (rti_file) init_rti_logs(rti_file, url_arg, use_rtix); /*setup dumping options*/ @@ -1380,7 +1204,8 @@ int main (int argc, char **argv) } else /*connect if requested*/ - if (!gui_mode && url_arg) { + if (views) { + } else if (!gui_mode && url_arg) { char *ext; strcpy(the_url, url_arg); @@ -1388,6 +1213,7 @@ int main (int argc, char **argv) if (ext && strncmp("http:", the_url, 5) && (!stricmp(ext, ".m3u") || !stricmp(ext, ".pls"))) { fprintf(stdout, "Opening Playlist %s\n", the_url); playlist = gf_f64_open(the_url, "rt"); + readonly_playlist = 1; if (playlist) { strcpy(pl_path, the_url); if (1 > fscanf(playlist, "%s", the_url)) @@ -1420,6 +1246,12 @@ int main (int argc, char **argv) if (start_fs) gf_term_set_option(term, GF_OPT_FULLSCREEN, 1); + if (views) { + char szTemp[4046]; + sprintf(szTemp, "views://%s", views); + gf_term_connect(term, szTemp); + } + while (Run) { /*we don't want getchar to block*/ if (gui_mode || !gf_prompt_has_input()) { @@ -1442,7 +1274,9 @@ int main (int argc, char **argv) gf_sleep(rti_update_time_ms); } /*sim time*/ - if (simulation_time && (gf_term_get_time_in_ms(term)>simulation_time)) { + if (simulation_time_in_ms + && ( (gf_term_get_time_in_ms(term)>simulation_time_in_ms) || (!url_arg && gf_sys_clock()>simulation_time_in_ms)) + ) { Run = 0; } continue; @@ -1737,24 +1571,34 @@ force_input: case 'L': { + u32 flags; char szLog[1024]; fprintf(stdout, "Enter new log level:\n"); if (1 > scanf("%s", szLog)){ fprintf(stderr, "Cannot read new log level, aborting.\n"); break; } - gf_log_set_level(gf_log_parse_level(szLog)); + flags = gf_log_parse_level(szLog); + if (!flags) + fprintf(stderr, "Wrong log level specified, aborting.\n"); + else + gf_log_set_level(flags); } break; case 'T': { + u32 flags; char szLog[1024]; fprintf(stdout, "Enter new log tools:\n"); - if (1 > scanf("%s", szLog)){ + if (1 > scanf("%s", szLog)) { fprintf(stderr, "Cannot read new log tools, aborting.\n"); break; } - gf_log_set_tools(gf_log_parse_tools(szLog)); + flags = gf_log_parse_tools(szLog); + if (!flags) + fprintf(stderr, "Wrong log tools specified, aborting.\n"); + else + gf_log_set_tools(flags); } break; case 'g': @@ -1785,31 +1629,63 @@ force_input: /*extract to PNG*/ case 'Z': { + char szFileName[100]; + u32 nb_pass, nb_views, offscreen_view = 0; GF_VideoSurface fb; GF_Err e; - e = gf_term_get_screen_buffer(term, &fb); - if (e) { - fprintf(stdout, "Error dumping screen buffer %s\n", gf_error_to_string(e) ); - } else { - u32 dst_size = fb.width*fb.height*3; - char *dst = (char*)gf_malloc(sizeof(char)*dst_size); - - e = gf_img_png_enc(fb.video_buffer, fb.width, fb.height, fb.pitch_y, fb.pixel_format, dst, &dst_size); + nb_pass = 1; + nb_views = gf_term_get_option(term, GF_OPT_NUM_STEREO_VIEWS); + if (nb_views>1) { + fprintf(stdout, "Auto-stereo mode detected - type number of view to dump (0 is main output, 1 to %d offscreen view, %d for all offscreen, %d for all offscreen and main)\n", nb_views, nb_views+1, nb_views+2); + if (scanf("%d", &offscreen_view) != 1) { + offscreen_view = 0; + } + if (offscreen_view==nb_views+1) { + offscreen_view = 1; + nb_pass = nb_views; + } + else if (offscreen_view==nb_views+2) { + offscreen_view = 0; + nb_pass = nb_views+1; + } + } + while (nb_pass) { + nb_pass--; + if (offscreen_view) { + sprintf(szFileName, "view%d_dump.png", offscreen_view); + e = gf_term_get_offscreen_buffer(term, &fb, offscreen_view-1, 0); + } else { + sprintf(szFileName, "video_dump.png"); + e = gf_term_get_screen_buffer(term, &fb); + } + offscreen_view++; if (e) { - fprintf(stdout, "Error encoding PNG %s\n", gf_error_to_string(e) ); + fprintf(stdout, "Error dumping screen buffer %s\n", gf_error_to_string(e) ); + nb_pass = 0; } else { - FILE *png = gf_f64_open("dump.png", "wb"); - if (!png) { - fprintf(stdout, "Error writing file dump.png\n"); + u32 dst_size = fb.width*fb.height*4; + char *dst = (char*)gf_malloc(sizeof(char)*dst_size); + + e = gf_img_png_enc(fb.video_buffer, fb.width, fb.height, fb.pitch_y, fb.pixel_format, dst, &dst_size); + if (e) { + fprintf(stdout, "Error encoding PNG %s\n", gf_error_to_string(e) ); + nb_pass = 0; } else { - fwrite(dst, dst_size, 1, png); - fclose(png); - fprintf(stdout, "Writing file dump.png\n"); + FILE *png = gf_f64_open(szFileName, "wb"); + if (!png) { + fprintf(stdout, "Error writing file %s\n", szFileName); + nb_pass = 0; + } else { + fwrite(dst, dst_size, 1, png); + fclose(png); + fprintf(stdout, "Dump to %s\n", szFileName); + } } + if (dst) gf_free(dst); + gf_term_release_screen_buffer(term, &fb); } - if (dst) gf_free(dst); - gf_term_release_screen_buffer(term, &fb); } + fprintf(stdout, "Done: %s\n", szFileName); } break; @@ -1833,16 +1709,6 @@ force_input: gf_modules_del(user.modules); gf_cfg_del(cfg_file); -#ifdef GPAC_MEMORY_TRACKING - if (enable_mem_tracker) { - gf_memory_print(); - fprintf(stdout, "print any key\n"); - while (!gf_prompt_has_input()) { - gf_sleep(100); - } - } -#endif - gf_sys_close(); if (rti_logs) fclose(rti_logs); if (logfile) fclose(logfile); @@ -1854,8 +1720,6 @@ force_input: } - - void PrintWorldInfo(GF_Terminal *term) { u32 i; @@ -1887,6 +1751,11 @@ void PrintODList(GF_Terminal *term, GF_ObjectManager *root_odm, u32 num, u32 ind root_odm = gf_term_get_root_object(term); } if (!root_odm) return; + + count = gf_term_get_current_service_id(term); + if (count) + fprintf(stdout, "Current service ID %d\n", count); + if (gf_term_get_object_info(term, root_odm, &odi) != GF_OK) return; if (!odi.od) { fprintf(stdout, "Service not attached\n"); @@ -1898,6 +1767,7 @@ void PrintODList(GF_Terminal *term, GF_ObjectManager *root_odm, u32 num, u32 ind fprintf(stdout, "%s", szIndent); fprintf(stdout, "#%d %s - ", num, root_name); + if (odi.od->ServiceID) fprintf(stdout, "Service ID %d ", odi.od->ServiceID); if (odi.media_url) { fprintf(stdout, "%s\n", odi.media_url); } else { @@ -1932,7 +1802,9 @@ void PrintODList(GF_Terminal *term, GF_ObjectManager *root_odm, u32 num, u32 ind } else { fprintf(stdout, "ID %d", odi.od->objectDescriptorID); } - fprintf(stdout, " - %s\n", (odi.od_type==GF_STREAM_VISUAL) ? "Video" : (odi.od_type==GF_STREAM_AUDIO) ? "Audio" : "Systems"); + fprintf(stdout, " - %s", (odi.od_type==GF_STREAM_VISUAL) ? "Video" : (odi.od_type==GF_STREAM_AUDIO) ? "Audio" : "Systems"); + if (odi.od && odi.od->ServiceID) fprintf(stdout, " - Service ID %d", odi.od->ServiceID); + fprintf(stdout, "\n"); break; } } diff --git a/applications/mp4client/resource.h b/applications/mp4client/resource.h index 2b88c52..deb8163 100644 --- a/applications/mp4client/resource.h +++ b/applications/mp4client/resource.h @@ -1,18 +1,18 @@ -//{{NO_DEPENDENCIES}} -// Microsoft Visual C++ generated include file. -// Used by mp4client.rc -// -#define IDI_ICON1 102 -#define IDI_ICON2 103 -#define IDI_ICON3 105 - -// Next default values for new objects -// -#ifdef APSTUDIO_INVOKED -#ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 106 -#define _APS_NEXT_COMMAND_VALUE 40001 -#define _APS_NEXT_CONTROL_VALUE 1001 -#define _APS_NEXT_SYMED_VALUE 101 -#endif -#endif +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by mp4client.rc +// +#define IDI_ICON1 102 +#define IDI_ICON2 103 +#define IDI_ICON3 105 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 106 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/applications/osmo4_android/AndroidManifest.xml b/applications/osmo4_android/AndroidManifest.xml index b0d3ccf..44cb2a8 100644 --- a/applications/osmo4_android/AndroidManifest.xml +++ b/applications/osmo4_android/AndroidManifest.xml @@ -1,5 +1,5 @@ - diff --git a/applications/osmo4_android/Osmo4_keystore b/applications/osmo4_android/Osmo4_keystore new file mode 100644 index 0000000000000000000000000000000000000000..d504ce3a3b841d837af7cdc1d64933ba94508537 GIT binary patch literal 1244 zcmezO_TO6u1_mY|W&~q_{Nmhvlla8El%o91lpoIQC?`7OTMSBdIn06TOv2kg$ zF|sgfF$ppYAGCj!gXr%ld*T~Q(Dvuj47Po3O>9#(4{cW9Vrl0)j zTc=O`I;TEs?`*?Qk@+pQYNd_aWSdQLYbX3lZ8@^BY`qlcCeJt-_qO#6_n7jh9G%j- z-QO6(f!}uF09x)=gZF34=yeZ zwm2!Y@yO)U#_LvZGnR4*I-~f*#AQz>Po%o|obB1`9{vluC^P5Zzk;Xt_ut9op2{^> z_)hrigpwfp@~g5^DnzBS} z_B=tB8?TpiGqx;V7r5_;OsGPetWuomw}^9goi`u0$VKh9x6=$`(PVRqDGB?$*--jt z%p}RhDoTfs%DQWx-8XU1wwJ6Pii~P;o_W`?RccY&mxWRhmQHwZW;I zHA2tSz!I3G&l@x`o(5u*1QTsxg?p@I3L+1z%0hx*vnwh*vZt`$gt+deOF$t%WLx(yY7Cxu}vcR#^j)9f>}a; zjx4)ZbzklI-w<8bAF~xVoUxhC^+aKR!vZrGiR&FPlY@-hJg+?TUC;YOZqI+MrWZ$< zio-WI>YR`K8&JjTcicg~V#Dmiyrr9hwS*3OyPin0+vHQ9x{=X;F7ut|6K2jV{?Nf9 z(spcSBoi|u10%BYfC0q}bXU6Wt@NBd1s!VNHf<=$)jO_x!`6D`=kSX?Li1lwNN;c8 zKYCYt-vhlMnRTD9*Y1)(zy8tJB(vMU4lQB)J*CxumWcnpIWJeVug`gOME2t9l|RHR zJdQa!FJ2vg>0s1OhfhWCm-W0}zs>rZC(D)Jt63Ga;vX`fd?e1i_~*u*?81TCeGg9j YUG(SytCLJ{mQPQ8h1A?T$8RkH04{ - -#include -#include -#include -#include -#include -#include - -#include "wrapper.h" - -#include - -#undef PI -#define PI 3.1415926535897932f - -#include -#ifndef ANDROID_NDK -//#include -#endif /* !ANDROID_NDK */ -//--------------------------------------------------------------------------------------------------- -//--------------------------------------------------------------------------------------------------- -//CPeriodic -//------------------------------- -CPeriodic::CPeriodic(){} -//------------------------------- -CPeriodic::~CPeriodic(){} -//------------------------------- -void CPeriodic::Start(){ -} -//------------------------------- -void CPeriodic::Cancel(){} -//--------------------------------------------------------------------------------------------------- - -void initGL() -{ - /* Enable smooth shading */ - glShadeModel(GL_SMOOTH); - - /* Set the background black */ - glClearColor(0.0f, 0.0f, 0.0f, 0.0f); - - /* Depth buffer setup */ - glClearDepthf(1.0f); - - /* Enables Depth Testing */ - glEnable(GL_DEPTH_TEST); - - /* The Type Of Depth Test To Do */ - glDepthFunc(GL_LEQUAL); - - /* Really Nice Perspective Calculations */ - glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); -} - -void gluPerspective(GLfloat fovy, GLfloat aspect, - GLfloat zNear, GLfloat zFar) -{ - GLfloat xmin, xmax, ymin, ymax; - - ymax = zNear * (GLfloat)tan(fovy * PI / 360); - ymin = -ymax; - xmin = ymin * aspect; - xmax = ymax * aspect; - - glFrustumx((GLfixed)(xmin * 65536), (GLfixed)(xmax * 65536), - (GLfixed)(ymin * 65536), (GLfixed)(ymax * 65536), - (GLfixed)(zNear * 65536), (GLfixed)(zFar * 65536)); -} - -void resizeWindow(int width, int height) -{ - /* Height / width ration */ - GLfloat ratio; - - /* Protect against a divide by zero */ - if (height==0) - { - height=1; - } - - ratio=(GLfloat)width/(GLfloat)height; - - /* Setup our viewport. */ - glViewport(0, 0, (GLsizei)width, (GLsizei)height); - - /* change to the projection matrix and set our viewing volume. */ - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - - /* Set our perspective */ - gluPerspective(45.0f, ratio, 0.1f, 100.0f); - - /* Make sure we're chaning the model view and not the projection */ - glMatrixMode(GL_MODELVIEW); - - /* Reset The View */ - glLoadIdentity(); -} - -void drawGLScene() -{ - GLfloat vertices[4][3]; - - /* Clear The Screen And The Depth Buffer */ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - /* Enable VERTEX array */ - glEnableClientState(GL_VERTEX_ARRAY); - - /* Setup pointer to VERTEX array */ - glVertexPointer(3, GL_FLOAT, 0, vertices); - - /* Move Left 1.5 Units And Into The Screen 6.0 */ - glLoadIdentity(); - glTranslatef(-1.5f, 0.0f, -6.0f); - - /* Top Of Triangle */ - vertices[0][0]=0.0f; vertices[0][1]=1.0f; vertices[0][2]=0.0f; - /* Left Of Triangle */ - vertices[1][0]=-1.0f; vertices[1][1]=-1.0f; vertices[1][2]=0.0f; - /* Right Of Triangle */ - vertices[2][0]=1.0f; vertices[2][1]=-1.0f; vertices[2][2]=0.0f; - - /* Drawing Using Triangles, draw triangles using 3 vertices */ - glDrawArrays(GL_TRIANGLES, 0, 3); - - /* Move Right 3 Units */ - glLoadIdentity(); - glTranslatef(1.5f, 0.0f, -6.0f); - - /* Top Right Of The Quad */ - vertices[0][0]=1.0f; vertices[0][1]=1.0f; vertices[0][2]=0.0f; - /* Top Left Of The Quad */ - vertices[1][0]=-1.0f; vertices[1][1]=1.0f; vertices[1][2]=0.0f; - /* Bottom Left Of The Quad */ - vertices[2][0]=1.0f; vertices[2][1]=-1.0f; vertices[2][2]=0.0f; - /* Bottom Right Of The Quad */ - vertices[3][0]=-1.0f; vertices[3][1]=-1.0f; vertices[3][2]=0.0f; - - /* Drawing using triangle strips, draw triangles using 4 vertices */ - glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); - - /* Disable vertex array */ - glDisableClientState(GL_VERTEX_ARRAY); - - /* Flush all drawings */ - glFinish(); -} - -//--------------------------------------------------------------------------------------------------- -//CNativeWrapper -//------------------------------- -CNativeWrapper::CNativeWrapper(){ - do_log = 1; - logfile = NULL; - - m_pTimer = NULL; -#ifndef GPAC_GUI_ONLY - memset(&m_user, 0, sizeof(GF_User)); - m_term = NULL; - m_mx = NULL; - memset(&m_rti, 0, sizeof(GF_SystemRTInfo)); -#endif - -#ifdef DEBUG_MODE - debug_f = fopen(DEBUG_FILE, "w"); -#endif -} -//------------------------------- -CNativeWrapper::~CNativeWrapper(){ - Shutdown(); - - if (logfile) fclose(logfile); - -#ifdef DEBUG_MODE - if (debug_f){ - debug_log("~CNativeWrapper()\n"); - fclose(debug_f); - } - -#endif -} -//------------------------------- -void CNativeWrapper::debug_log(const char* msg){ -#ifdef DEBUG_MODE - fprintf(debug_f, "%s\n", msg); - fflush(debug_f); -#endif -} -//------------------------------- -void CNativeWrapper::Shutdown() -{ - - if (m_mx) gf_mx_del(m_mx); - - MessageBox("Osmo4 shutdown request", ""); - if (m_pTimer) { - m_pTimer->Cancel(); - delete m_pTimer; - m_pTimer = NULL; - } -#ifndef GPAC_GUI_ONLY - if (m_term) { - GF_Terminal *t = m_term; - m_term = NULL; - gf_term_del(t); - } - if (m_user.config) { - gf_cfg_del(m_user.config); - m_user.config = NULL; - } - if (m_user.modules) { - gf_modules_del(m_user.modules); - m_user.modules = NULL; - } -#endif - MessageBox("Osmo4 shutdown OK", ""); -} -//------------------------------- -int CNativeWrapper::MessageBox(const char* msg, const char* title){ - //call java function to display a message box - - debug_log(msg); - - return 1; -} -//------------------------------- -int CNativeWrapper::OnTick(){ -#ifndef GPAC_GUI_ONLY - if (m_term) gf_term_process_step(m_term); - - /*check RTI display*/ - //if (show_rti && gf_sys_get_rti(500, &m_rti, 0)) DisplayRTI(); -#endif - /*never stop...*/ - return 1; -} -//------------------------------- -void CNativeWrapper::DisplayRTI(){ -#ifndef GPAC_GUI_ONLY - // display some system informations ? -#endif -} -//------------------------------- -int CNativeWrapper::Quit(int code){ - - Shutdown(); - // send shutdown request to java - return code; -} -//------------------------------- -void CNativeWrapper::on_gpac_log(void *cbk, u32 ll, u32 lm, const char *fmt, va_list list){ - // do log here - FILE *logs = (FILE*)cbk; - - /*if (rti_logs && (lm & GF_LOG_RTI)) { - char szMsg[2048]; - vsprintf(szMsg, fmt, list); - UpdateRTInfo(szMsg + 6 ); - } else { - if (log_time_start) fprintf(logs, "[At %d]", gf_sys_clock() - log_time_start); - vfprintf(logs, fmt, list); - fflush(logs); - }*/ - - vfprintf(logs, fmt, list); - fflush(logs); - -} -//------------------------------- -Bool CNativeWrapper::GPAC_EventProc(void *ptr, GF_Event *evt){ - //event - return true; -} -//------------------------------- -void CNativeWrapper::Osmo4_progress_cbk(void *usr, char *title, u32 done, u32 total){ - -} -//------------------------------- -void CNativeWrapper::SetupLogs(){ - const char *opt; - debug_log("SetupLogs()"); - -//#ifndef GPAC_GUI_ONLY - gf_mx_p(m_mx); - if (do_log) { - gf_log_set_level(0); - do_log = 0; - } - /*setup GPAC logs: log all errors*/ - gf_log_set_level(GF_LOG_DEBUG); - gf_log_set_tools(0xFFFFFFFF); - opt = gf_cfg_get_key(m_user.config, "General", "LogLevel"); - if ((opt && !stricmp(opt, "debug")) /*|| 1*/) { - FILE *logs = fopen(GPAC_LOG_FILE, "wt"); - if (!logs) { - MessageBox("Cannot open log file - disabling logs", "Warning !"); - } else { - MessageBox("Debug log enabled in \\data\\gpac_logs.txt", "Info"); - fclose(logs); - do_log = 1; - gf_log_set_level(GF_LOG_DEBUG); - gf_log_set_tools(0xFFFFFFFF); - } - } - if (!do_log) { - gf_log_set_level(GF_LOG_ERROR); - gf_log_set_tools(0xFFFFFFFF); - } - - - gf_log_set_level(GF_LOG_DEBUG); - gf_log_set_tools(0xFFFFFFFF); - - logfile = fopen(GPAC_LOG_FILE, "wt"); - - gf_log_set_callback(logfile, on_gpac_log); - gf_mx_v(m_mx); - - GF_LOG(GF_LOG_DEBUG, GF_LOG_CORE, ("Osmo4 logs initialized\n")); -//#endif -} -//------------------------------- -int CNativeWrapper::init(JNIEnv * env, jobject * bitmap){ - - debug_log("int CNativeWrapper::init()"); - - int m_Width = 100, m_Height = 100; - - int first_launch = 0; - const char *opt; - - m_window = env; - m_session = bitmap; - - m_mx = gf_mx_new("Osmo4"); - - //load config file - m_user.config = gf_cfg_new(GPAC_CFG_DIR, "GPAC.cfg"); - if (!m_user.config) { - first_launch = 1; - FILE *ft = fopen(GPAC_CFG_DIR"GPAC.cfg", "wt"); - if (!ft) { - MessageBox("Cannot create GPAC Config file", "Fatal Error"); - return Quit(KErrGeneral); - } else { - fclose(ft); - } - m_user.config = gf_cfg_new(GPAC_CFG_DIR, "GPAC.cfg"); - if (!m_user.config) { - MessageBox("GPAC Configuration file not found", "Fatal Error"); - return Quit(KErrGeneral); - } - } - - SetupLogs(); - gf_set_progress_callback(this, Osmo4_progress_cbk); - - opt = gf_cfg_get_key(m_user.config, "General", "ModulesDirectory"); - if (!opt) first_launch = 2; - - if (first_launch) { - /*hardcode module directory*/ - gf_cfg_set_key(m_user.config, "General", "ModulesDirectory", GPAC_MODULES_DIR); - /*hardcode cache directory*/ - gf_cfg_set_key(m_user.config, "General", "CacheDirectory", GPAC_CACHE_DIR); - gf_cfg_set_key(m_user.config, "Downloader", "CleanCache", "yes"); - /*startup file*/ - //gf_cfg_set_key(m_user.config, "General", "StartupFile", GPAC_CFG_DIR"gpac.mp4"); - /*setup UDP traffic autodetect*/ - gf_cfg_set_key(m_user.config, "Network", "AutoReconfigUDP", "yes"); - gf_cfg_set_key(m_user.config, "Network", "UDPTimeout", "10000"); - gf_cfg_set_key(m_user.config, "Network", "BufferLength", "3000"); - - gf_cfg_set_key(m_user.config, "Compositor", "TextureTextMode", "Default"); - //gf_cfg_set_key(m_user.config, "Compositor", "FrameRate", "30"); - - gf_cfg_set_key(m_user.config, "Video", "DriverName", "Android Video Output"); - - gf_cfg_set_key(m_user.config, "FontEngine", "FontReader", "ft_font"); - - gf_cfg_set_key(m_user.config, "FontEngine", "FontDirectory", GPAC_FONT_DIR); - - - /*save cfg and reload*/ - gf_cfg_del(m_user.config); - m_user.config = gf_cfg_new(GPAC_CFG_DIR, "GPAC.cfg"); - if (!m_user.config) { - MessageBox("Cannot save initial GPAC Config file", "Fatal Error"); - return Quit(KErrGeneral); - } - - - MessageBox("Osmo4", "Thank you for Installing"); - } - - /*load modules*/ - opt = gf_cfg_get_key(m_user.config, "General", "ModulesDirectory"); - m_user.modules = gf_modules_new(opt, m_user.config); - if (!m_user.modules || !gf_modules_get_count(m_user.modules)) { - MessageBox(m_user.modules ? "No modules available" : "Cannot create module manager", "Fatal Error"); - if (m_user.modules) gf_modules_del(m_user.modules); - gf_cfg_del(m_user.config); - return Quit(KErrGeneral); - } - - if (first_launch) { - /*first launch, register all files ext*/ - for (u32 i=0; iCanHandleURL(ifce, "test.test"); - gf_modules_close_interface((GF_BaseInterface *)ifce); - } - } - } - - /*we don't thread the terminal, ie appart from the audio renderer, media decoding and visual rendering is - handled by the app process*/ - m_user.init_flags = GF_TERM_NO_THREAD | GF_TERM_NO_REGULATION; - m_user.init_flags |= GF_TERM_NO_AUDIO; - m_user.EventProc = GPAC_EventProc; - m_user.opaque = this; - m_user.os_window_handler = m_window; - m_user.os_display = m_session; - - m_term = gf_term_new(&m_user); - if (!m_term) { - MessageBox("Cannot load GPAC terminal", "Fatal Error"); - gf_modules_del(m_user.modules); - gf_cfg_del(m_user.config); - return Quit(KErrGeneral); - } - MessageBox("GPAC terminal loaded", "Success !"); - - gf_term_set_size(m_term, m_Width, m_Height); - - m_pTimer = new CPeriodic(); - m_pTimer->Start(); - - opt = gf_cfg_get_key(m_user.config, "General", "StartupFile"); - //if (opt) gf_term_connect(m_term, opt); - - //initGL(); -} -//------------------------------- -int CNativeWrapper::connect(const char *url){ - /*debug_log("Starting to connect ..."); - - gf_term_connect_from_time(m_term, url, 0, false); - //gf_term_connect(m_term, url); - - debug_log("connected ...");*/ - - char pl_path[GF_MAX_PATH]; - - strcpy(pl_path, url); - - debug_log("Connecting to ..."); - debug_log(pl_path); - - //gf_term_connect_with_path(m_term, url, pl_path); - gf_term_connect(m_term, url); - debug_log("connected ..."); -} -//----------------------------------------------------- -void CNativeWrapper::disconnect(){ - - gf_term_disconnect(m_term); - debug_log("disconnected ..."); -} -//----------------------------------------------------- -void CNativeWrapper::step(JNIEnv * env, jobject * bitmap){ - m_window = env; - m_session = bitmap; - debug_log("Step ..."); - if (!m_term) - debug_log("m_term ..."); - else - if (!m_term->compositor) - debug_log("compositor ..."); - else - if (!m_term->compositor->video_out) - debug_log("video_out ..."); - else - if (!m_term->compositor->video_out->Setup) - debug_log("Setup ..."); - else - { - debug_log("Video Setup ..."); - m_term->compositor->video_out->Setup(m_term->compositor->video_out, m_window, m_session, -1); - } - gf_term_process_step(m_term); - //drawGLScene(); -} -//----------------------------------------------------- -void CNativeWrapper::resize(int w, int h){ - gf_term_set_size(m_term, w, h); - //resizeWindow(w,h); -} -//----------------------------------------------------- -void CNativeWrapper::onMouseDown(float x, float y){ - char msg[100]; - sprintf(msg, "onMousedown x=%f, y=%f", x, y ); - debug_log(msg); - - GF_Event evt; - evt.type = GF_EVENT_MOUSEDOWN; - evt.mouse.button = GF_MOUSE_LEFT; - evt.mouse.x = x; - evt.mouse.y = y; - - int ret = gf_term_user_event(m_term, &evt); -} -//----------------------------------------------------- -void CNativeWrapper::onMouseUp(float x, float y){ - char msg[100]; - sprintf(msg, "onMouseUp x=%f, y=%f", x, y ); - debug_log(msg); - - GF_Event evt; - evt.type = GF_EVENT_MOUSEUP; - evt.mouse.button = GF_MOUSE_LEFT; - evt.mouse.x = x; - evt.mouse.y = y; - - int ret = gf_term_user_event(m_term, &evt); -} -//----------------------------------------------------- -void CNativeWrapper::onKeyPress(int keycode, int rawkeycode, int up, int flag){ - GF_Event evt; - if (up == 0) evt.type = GF_EVENT_KEYUP; - else evt.type = GF_EVENT_KEYDOWN; - - evt.key.flags = 0; - evt.key.hw_code = rawkeycode; - - char msg[100]; - sprintf(msg, "onKeyPress keycode=%d", keycode); - debug_log(msg); - - //translate_key(keycode, &evt.key); - evt.key.key_code = GF_KEY_A; - int ret = gf_term_user_event(m_term, &evt); - /*generate a key up*/ - - sprintf(msg, "onKeyPress gpac keycode=%d, GF_KEY_A=%d, ret=%d", evt.key.key_code, GF_KEY_A, ret); - debug_log(msg); -} -//----------------------------------------------------- -void CNativeWrapper::translate_key(ANDROID_KEYCODE keycode, GF_EventKey *evt){ - evt->flags = 0; - - char msg[100]; - sprintf(msg, "translate_key keycode=%d", keycode); - debug_log(msg); - - switch (keycode) { - case ANDROID_KEYCODE_BACK: evt->key_code = GF_KEY_BACKSPACE; break; - case ANDROID_KEYCODE_TAB: evt->key_code = GF_KEY_TAB; break; - case ANDROID_KEYCODE_CLEAR: evt->key_code = GF_KEY_CLEAR; break; - case ANDROID_KEYCODE_ENTER: evt->key_code = GF_KEY_ENTER; break; - case ANDROID_KEYCODE_SHIFT_LEFT: evt->key_code = GF_KEY_SHIFT; break; - case ANDROID_KEYCODE_SHIFT_RIGHT: evt->key_code = GF_KEY_SHIFT; break; - //case VK_CONTROL: evt->key_code = GF_KEY_CONTROL; break; - case ANDROID_KEYCODE_ALT_LEFT: evt->key_code = GF_KEY_ALT; break; - case ANDROID_KEYCODE_ALT_RIGHT: evt->key_code = GF_KEY_ALT; break; - //case VK_PAUSE: evt->key_code = GF_KEY_PAUSE; break; - //case VK_CAPITAL: evt->key_code = GF_KEY_CAPSLOCK; break; - //case VK_KANA: evt->key_code = GF_KEY_KANAMODE; break; - //case VK_JUNJA: evt->key_code = GF_KEY_JUNJAMODE; break; - //case VK_FINAL: evt->key_code = GF_KEY_FINALMODE; break; - //case VK_KANJI: evt->key_code = GF_KEY_KANJIMODE; break; - //case VK_ESCAPE: evt->key_code = GF_KEY_ESCAPE; break; - //case VK_CONVERT: evt->key_code = GF_KEY_CONVERT; break; - case ANDROID_KEYCODE_SPACE: evt->key_code = GF_KEY_SPACE; break; - //case VK_PRIOR: evt->key_code = GF_KEY_PAGEUP; break; - //case VK_NEXT: evt->key_code = GF_KEY_PAGEDOWN; break; - //case VK_END: evt->key_code = GF_KEY_END; break; - case ANDROID_KEYCODE_HOME: evt->key_code = GF_KEY_HOME; break; - case ANDROID_KEYCODE_DPAD_LEFT: evt->key_code = GF_KEY_LEFT; break; - case ANDROID_KEYCODE_DPAD_UP: evt->key_code = GF_KEY_UP; break; - case ANDROID_KEYCODE_DPAD_RIGHT: evt->key_code = GF_KEY_RIGHT; break; - case ANDROID_KEYCODE_DPAD_DOWN: evt->key_code = GF_KEY_DOWN; break; - //case VK_SELECT: evt->key_code = GF_KEY_SELECT; break; - //case VK_PRINT: - //case VK_SNAPSHOT: - // evt->key_code = GF_KEY_PRINTSCREEN; break; - //case VK_EXECUTE: evt->key_code = GF_KEY_EXECUTE; break; - //case VK_INSERT: evt->key_code = GF_KEY_INSERT; break; - case ANDROID_KEYCODE_DEL: evt->key_code = GF_KEY_DEL; break; - //case VK_HELP: evt->key_code = GF_KEY_HELP; break; - - -/* case '!': evt->key_code = GF_KEY_EXCLAMATION; break; - case '"': evt->key_code = GF_KEY_QUOTATION; break; - case '#': evt->key_code = GF_KEY_NUMBER; break; - case '$': evt->key_code = GF_KEY_DOLLAR; break; - case '&': evt->key_code = GF_KEY_AMPERSAND; break; - case '\'': evt->key_code = GF_KEY_APOSTROPHE; break; - case '(': evt->key_code = GF_KEY_LEFTPARENTHESIS; break; - case ')': evt->key_code = GF_KEY_RIGHTPARENTHESIS; break; - case ',': evt->key_code = GF_KEY_COMMA; break; - case ':': evt->key_code = GF_KEY_COLON; break; - case ';': evt->key_code = GF_KEY_SEMICOLON; break; - case '<': evt->key_code = GF_KEY_LESSTHAN; break; - case '>': evt->key_code = GF_KEY_GREATERTHAN; break; - case '?': evt->key_code = GF_KEY_QUESTION; break; - case '@': evt->key_code = GF_KEY_AT; break; - case '[': evt->key_code = GF_KEY_LEFTSQUAREBRACKET; break; - case ']': evt->key_code = GF_KEY_RIGHTSQUAREBRACKET; break; - case '\\': evt->key_code = GF_KEY_BACKSLASH; break; - case '_': evt->key_code = GF_KEY_UNDERSCORE; break; - case '`': evt->key_code = GF_KEY_GRAVEACCENT; break; - case ' ': evt->key_code = GF_KEY_SPACE; break; - case '/': evt->key_code = GF_KEY_SLASH; break; - case '*': evt->key_code = GF_KEY_STAR; break; - case '-': evt->key_code = GF_KEY_HIPHEN; break; - case '+': evt->key_code = GF_KEY_PLUS; break; - case '=': evt->key_code = GF_KEY_EQUALS; break; - case '^': evt->key_code = GF_KEY_CIRCUM; break; - case '{': evt->key_code = GF_KEY_LEFTCURLYBRACKET; break; - case '}': evt->key_code = GF_KEY_RIGHTCURLYBRACKET; break; - case '|': evt->key_code = GF_KEY_PIPE; break; -*/ - - -/* case VK_LWIN: return ; - case VK_RWIN: return ; - case VK_APPS: return ; -*/ - case ANDROID_KEYCODE_0: - evt->key_code = GF_KEY_0; - evt->flags = GF_KEY_EXT_NUMPAD; - break; - case ANDROID_KEYCODE_1: - evt->key_code = GF_KEY_1; - evt->flags = GF_KEY_EXT_NUMPAD; - break; - case ANDROID_KEYCODE_2: - evt->key_code = GF_KEY_2; - evt->flags = GF_KEY_EXT_NUMPAD; - break; - case ANDROID_KEYCODE_3: - evt->key_code = GF_KEY_3; - evt->flags = GF_KEY_EXT_NUMPAD; - break; - case ANDROID_KEYCODE_4: - evt->key_code = GF_KEY_4; - evt->flags = GF_KEY_EXT_NUMPAD; - break; - case ANDROID_KEYCODE_5: - evt->key_code = GF_KEY_5; - evt->flags = GF_KEY_EXT_NUMPAD; - break; - case ANDROID_KEYCODE_6: - evt->key_code = GF_KEY_6; - evt->flags = GF_KEY_EXT_NUMPAD; - break; - case ANDROID_KEYCODE_7: - evt->key_code = GF_KEY_7; - evt->flags = GF_KEY_EXT_NUMPAD; - break; - case ANDROID_KEYCODE_8: - evt->key_code = GF_KEY_8; - evt->flags = GF_KEY_EXT_NUMPAD; - break; - case ANDROID_KEYCODE_9: - evt->key_code = GF_KEY_9; - evt->flags = GF_KEY_EXT_NUMPAD; - break; - case ANDROID_KEYCODE_A: - evt->key_code = GF_KEY_9; - evt->flags = GF_KEY_EXT_NUMPAD; - break; - /* - case VK_MULTIPLY: - evt->key_code = GF_KEY_STAR; - evt->flags = GF_KEY_EXT_NUMPAD; - break; - case VK_ADD: - evt->key_code = GF_KEY_PLUS; - evt->flags = GF_KEY_EXT_NUMPAD; - break; - case VK_SEPARATOR: - evt->key_code = GF_KEY_FULLSTOP; - evt->flags = GF_KEY_EXT_NUMPAD; - break; - case VK_SUBTRACT: - evt->key_code = GF_KEY_HYPHEN; - evt->flags = GF_KEY_EXT_NUMPAD; - break; - case VK_DECIMAL: - evt->key_code = GF_KEY_COMMA; - evt->flags = GF_KEY_EXT_NUMPAD; - break; - case VK_DIVIDE: - evt->key_code = GF_KEY_SLASH; - evt->flags = GF_KEY_EXT_NUMPAD; - break; - - case VK_F1: evt->key_code = GF_KEY_F1; break; - case VK_F2: evt->key_code = GF_KEY_F2; break; - case VK_F3: evt->key_code = GF_KEY_F3; break; - case VK_F4: evt->key_code = GF_KEY_F4; break; - case VK_F5: evt->key_code = GF_KEY_F5; break; - case VK_F6: evt->key_code = GF_KEY_F6; break; - case VK_F7: evt->key_code = GF_KEY_F7; break; - case VK_F8: evt->key_code = GF_KEY_F8; break; - case VK_F9: evt->key_code = GF_KEY_F9; break; - case VK_F10: evt->key_code = GF_KEY_F10; break; - case VK_F11: evt->key_code = GF_KEY_F11; break; - case VK_F12: evt->key_code = GF_KEY_F12; break; - case VK_F13: evt->key_code = GF_KEY_F13; break; - case VK_F14: evt->key_code = GF_KEY_F14; break; - case VK_F15: evt->key_code = GF_KEY_F15; break; - case VK_F16: evt->key_code = GF_KEY_F16; break; - case VK_F17: evt->key_code = GF_KEY_F17; break; - case VK_F18: evt->key_code = GF_KEY_F18; break; - case VK_F19: evt->key_code = GF_KEY_F19; break; - case VK_F20: evt->key_code = GF_KEY_F20; break; - case VK_F21: evt->key_code = GF_KEY_F21; break; - case VK_F22: evt->key_code = GF_KEY_F22; break; - case VK_F23: evt->key_code = GF_KEY_F23; break; - case VK_F24: evt->key_code = GF_KEY_F24; break; - - case VK_NUMLOCK: evt->key_code = GF_KEY_NUMLOCK; break; - case VK_SCROLL: evt->key_code = GF_KEY_SCROLL; break; - */ - -/* - * VK_L* & VK_R* - left and right Alt, Ctrl and Shift virtual keys. - * Used only as parameters to GetAsyncKeyState() and GetKeyState(). - * No other API or message will distinguish left and right keys in this way. - */ - /* - case ANDROID_KEYCODE_SHIFT_LEFT: - evt->key_code = GF_KEY_SHIFT; - evt->flags = GF_KEY_EXT_LEFT; - break; - case ANDROID_KEYCODE_SHIFT_RIGHT: - evt->key_code = GF_KEY_SHIFT; - evt->flags = GF_KEY_EXT_RIGHT; - break; - case VK_LCONTROL: - evt->key_code = GF_KEY_CONTROL; - evt->flags = GF_KEY_EXT_LEFT; - break; - case VK_RCONTROL: - evt->key_code = GF_KEY_CONTROL; - evt->flags = GF_KEY_EXT_RIGHT; - break; - case VK_LMENU: - evt->key_code = GF_KEY_ALT; - evt->flags = GF_KEY_EXT_LEFT; - break; - case VK_RMENU: - evt->key_code = GF_KEY_ALT; - evt->flags = GF_KEY_EXT_RIGHT; - break; - */ - - /*thru VK_9 are the same as ASCII '0' thru '9' (0x30 - 0x39) */ - /* VK_A thru VK_Z are the same as ASCII 'A' thru 'Z' (0x41 - 0x5A) */ - default: - if ((keycode>=ANDROID_KEYCODE_A) && (keycode<=ANDROID_KEYCODE_Z)) { evt->key_code = GF_KEY_A + keycode - ANDROID_KEYCODE_A; debug_log("default keycode"); } - else - evt->key_code = GF_KEY_UNIDENTIFIED; - break; - } - - //evt->hw_code = keycode; - evt->hw_code = evt->key_code; -} -//----------------------------------------------------- -GF_Config *CNativeWrapper::create_default_config(char *file_path, char *file_name){ - GF_Config *cfg; - char szPath[GF_MAX_PATH]; - FILE *f; - sprintf(szPath, "%s%c%s", file_path, GF_PATH_SEPARATOR, file_name); - f = fopen(szPath, "wt"); - fprintf(stdout, "create %s: %s\n", szPath, (f==NULL) ? "Error" : "OK"); - if (!f) return NULL; - fclose(f); - - cfg = gf_cfg_new(file_path, file_name); - if (!cfg) return NULL; - -#ifdef GPAC_MODULES_PATH - fprintf(stdout, "Using module directory %s \n", GPAC_MODULES_PATH); - strcpy(szPath, GPAC_MODULES_PATH); -#elif defined(WIN32) - strcpy(szPath, file_path); -#else - fprintf(stdout, "Please enter full path to GPAC modules directory:\n"); - scanf("%s", szPath); -#endif - gf_cfg_set_key(cfg, "General", "ModulesDirectory", szPath); - gf_cfg_set_key(cfg, "Audio", "ForceConfig", "yes"); - gf_cfg_set_key(cfg, "Audio", "NumBuffers", "2"); - gf_cfg_set_key(cfg, "Audio", "TotalDuration", "120"); - gf_cfg_set_key(cfg, "Audio", "DisableNotification", "no"); - gf_cfg_set_key(cfg, "FontEngine", "FontReader", "ft_font"); - - /*these fonts seems installed by default on many systems...*/ - //gf_cfg_set_key(cfg, "FontEngine", "FontSerif", "Bitstream Vera Serif"); - //gf_cfg_set_key(cfg, "FontEngine", "FontSans", "Bitstream Vera Sans"); - //gf_cfg_set_key(cfg, "FontEngine", "FontFixed", "Bitstream Vera Monospace"); - strcpy(szPath, "/system/fonts/"); - - fprintf(stdout, "Using default font directory %s\n", szPath); - gf_cfg_set_key(cfg, "FontEngine", "FontDirectory", szPath); - - fprintf(stdout, "Using /tmp as a cache directory for HTTP downloads:\n"); - gf_cfg_set_key(cfg, "General", "CacheDirectory", "/data/osmo/tmp"); - - gf_cfg_set_key(cfg, "Downloader", "CleanCache", "yes"); - gf_cfg_set_key(cfg, "Compositor", "AntiAlias", "All"); - gf_cfg_set_key(cfg, "Compositor", "FrameRate", "30"); - /*use power-of-2 emulation*/ - gf_cfg_set_key(cfg, "Compositor", "EmulatePOW2", "yes"); - - gf_cfg_set_key(cfg, "Video", "DriverName", "Android Video Output"); - /*x11 only supports scalable zoom*/ - gf_cfg_set_key(cfg, "Compositor", "ScalableZoom", "yes"); - gf_cfg_set_key(cfg, "Audio", "DriverName", "SDL Audio Output"); - - gf_cfg_set_key(cfg, "Video", "SwitchResolution", "no"); - gf_cfg_set_key(cfg, "Network", "AutoReconfigUDP", "yes"); - gf_cfg_set_key(cfg, "Network", "UDPTimeout", "10000"); - gf_cfg_set_key(cfg, "Network", "BufferLength", "3000"); - - /*store and reload*/ - gf_cfg_del(cfg); - return gf_cfg_new(file_path, file_name); -} -//--------------------------------------------------------------------------------------------------- -//--------------------------------------------------------------------------------------------------- -// this function will be called by Java to init gpac - -void gpac_init(JNIEnv * env, jobject * bitmap){ - - gpac_obj = new CNativeWrapper(); - if (gpac_obj) gpac_obj->init(env, bitmap); - //if (gpac_obj) gpac_obj->connect("/data/osmo/tidycity.mp4"); -} - -void gpac_render(JNIEnv * env, jobject * bitmap){ - if (gpac_obj) gpac_obj->step(env, bitmap); -} - -void gpac_connect(const char *url){ - //gpac_obj->connect("/data/osmo/tidycity.mp4"); - gpac_obj->connect(url); -} - -void gpac_resize(int w, int h){ - if (gpac_obj) gpac_obj->resize(w, h); -} - -void gpac_disconnect(){ - if (gpac_obj) gpac_obj->disconnect(); -} - -void gpac_free(){ - if (gpac_obj) delete gpac_obj; -} - -void gpac_onmousedown(float x, float y){ - if (gpac_obj) gpac_obj->onMouseDown(x, y); -} - -void gpac_onmouseup(float x, float y){ - if (gpac_obj) gpac_obj->onMouseUp(x, y); -} -void gpac_onkeypress(int keycode, int rawkeycode, int up, int flag){ - if (gpac_obj) gpac_obj->onKeyPress(keycode, rawkeycode, up, flag); -} -//--------------------------------------------------------------------------------------------------- -//--------------------------------------------------------------------------------------------------- - -JNIEXPORT void JNICALL Java_com_artemis_Osmo4_GpacObject_gpacinit(JNIEnv * env, jobject obj, jobject bitmap, jint width, jint height) -{ - int x = width; - int y = height; - gpac_init(env, &bitmap); - //initGL(); -} -//----------------------------------- -JNIEXPORT void JNICALL Java_com_artemis_Osmo4_GpacObject_gpacconnect(JNIEnv * env, jobject obj, jstring url) -{ - const char *the_url = env->GetStringUTFChars(url, NULL); - //(*env)->ReleaseStringUTFChars(env, prompt, str); - gpac_connect(the_url); -} -//----------------------------------- -JNIEXPORT void JNICALL Java_com_artemis_Osmo4_GpacObject_gpacdisconnect(JNIEnv * env, jobject obj){ - gpac_disconnect(); -} -//----------------------------------- -JNIEXPORT void JNICALL Java_com_artemis_Osmo4_GpacObject_gpacfree(JNIEnv * env, jobject obj) -{ - gpac_free(); -} -//----------------------------------- -JNIEXPORT void JNICALL Java_com_artemis_Osmo4_GpacObject_gpacrender (JNIEnv * env, jobject obj, jobject bitmap) -{ - gpac_render(env, &bitmap); - //drawGLScene(); -} -//----------------------------------- -JNIEXPORT void JNICALL Java_com_artemis_Osmo4_GpacObject_gpacresize (JNIEnv * env, jobject obj, jint width, jint height) -{ - int w = width; - int h = height; - gpac_resize(w,h); - //resizeWindow(w,h); -} -//----------------------------------- -JNIEXPORT void JNICALL Java_com_artemis_Osmo4_GpacObject_gpaceventmousedown(JNIEnv * env, jobject obj, jfloat x, jfloat y){ - gpac_onmousedown(x, y); -} -//----------------------------------- -JNIEXPORT void JNICALL Java_com_artemis_Osmo4_GpacObject_gpaceventmouseup(JNIEnv * env, jobject obj, jfloat x, jfloat y){ - gpac_onmouseup(x, y); -} -//----------------------------------- -JNIEXPORT void JNICALL Java_com_artemis_Osmo4_GpacObject_gpaceventkeypress(JNIEnv * env, jobject obj, jint keycode, jint rawkeycode, jint up, jint flag){ - gpac_onkeypress(keycode, rawkeycode, up, flag); -} -//----------------------------------- diff --git a/applications/osmo4_android/jni/wrapper-bitmap-20-09-2010.h b/applications/osmo4_android/jni/wrapper-bitmap-20-09-2010.h deleted file mode 100644 index 8e39ad9..0000000 --- a/applications/osmo4_android/jni/wrapper-bitmap-20-09-2010.h +++ /dev/null @@ -1,228 +0,0 @@ -/* - * GPAC - Multimedia Framework C SDK - * - * Copyright (c) ENST 2009- - * Authors: Jean Le Feuvre - * All rights reserved - * - * Created by NGO Van Luyen, Ivica ARSOV / ARTEMIS / Telecom SudParis /Institut TELECOM on Oct, 2010 - * - * This file is part of GPAC / Wrapper - * - * GPAC is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * GPAC 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -#include - -#include -#include -#include -#include - -#include - -#define KErrGeneral 1 -#define GPAC_CFG_DIR "/data/osmo/" -#define GPAC_MODULES_DIR "/data/osmo/modules/" -#define GPAC_MODULES_PATH "/data/osmo/modules/" -#define GPAC_CACHE_DIR "/data/osmo/cache/" -#define GPAC_LOG_FILE "/data/osmo/gpac_logs.txt" -#define GPAC_FONT_DIR "/system/fonts/" - -#define DEBUG_MODE 1 -#define DEBUG_FILE "/data/osmo/osmo_debug.txt" - -// keyboard code -#define ANDROID_KEYCODE int -#define ANDROID_KEYCODE_0 7 -#define ANDROID_KEYCODE_1 8 -#define ANDROID_KEYCODE_2 9 -#define ANDROID_KEYCODE_3 10 -#define ANDROID_KEYCODE_4 11 -#define ANDROID_KEYCODE_5 12 -#define ANDROID_KEYCODE_6 13 -#define ANDROID_KEYCODE_7 14 -#define ANDROID_KEYCODE_8 15 -#define ANDROID_KEYCODE_9 16 -#define ANDROID_KEYCODE_A 29 -#define ANDROID_KEYCODE_B 30 -#define ANDROID_KEYCODE_C 31 -#define ANDROID_KEYCODE_D 32 -#define ANDROID_KEYCODE_E 33 -#define ANDROID_KEYCODE_F 34 -#define ANDROID_KEYCODE_G 35 -#define ANDROID_KEYCODE_H 36 -#define ANDROID_KEYCODE_I 37 -#define ANDROID_KEYCODE_J 38 -#define ANDROID_KEYCODE_K 39 -#define ANDROID_KEYCODE_L 40 -#define ANDROID_KEYCODE_M 41 -#define ANDROID_KEYCODE_N 42 -#define ANDROID_KEYCODE_O 43 -#define ANDROID_KEYCODE_P 44 -#define ANDROID_KEYCODE_Q 45 -#define ANDROID_KEYCODE_R 46 -#define ANDROID_KEYCODE_S 47 -#define ANDROID_KEYCODE_T 48 -#define ANDROID_KEYCODE_U 49 -#define ANDROID_KEYCODE_V 50 -#define ANDROID_KEYCODE_W 51 -#define ANDROID_KEYCODE_X 52 -#define ANDROID_KEYCODE_Y 53 -#define ANDROID_KEYCODE_Z 54 -#define ANDROID_KEYCODE_ALT_LEFT 57 -#define ANDROID_KEYCODE_ALT_RIGHT 58 -#define ANDROID_KEYCODE_AT 77 -#define ANDROID_KEYCODE_BACK 4 -#define ANDROID_KEYCODE_BACKSLASH 73 -#define ANDROID_KEYCODE_CALL 5 -#define ANDROID_KEYCODE_CAMERA 27 -#define ANDROID_KEYCODE_CLEAR 28 -#define ANDROID_KEYCODE_COMMA 55 -#define ANDROID_KEYCODE_DEL 67 -#define ANDROID_KEYCODE_DPAD_CENTER 23 -#define ANDROID_KEYCODE_DPAD_DOWN 20 -#define ANDROID_KEYCODE_DPAD_LEFT 21 -#define ANDROID_KEYCODE_DPAD_RIGHT 22 -#define ANDROID_KEYCODE_DPAD_UP 19 -#define ANDROID_KEYCODE_ENDCALL 6 -#define ANDROID_KEYCODE_ENTER 66 -#define ANDROID_KEYCODE_ENVELOPE 65 -#define ANDROID_KEYCODE_EQUALS 70 -#define ANDROID_KEYCODE_EXPLORER 64 -#define ANDROID_KEYCODE_FOCUS 80 -#define ANDROID_KEYCODE_GRAVE 68 -#define ANDROID_KEYCODE_HEADSETHOOK 79 -#define ANDROID_KEYCODE_HOME 3 -#define ANDROID_KEYCODE_LEFT_BRACKET 71 -#define ANDROID_KEYCODE_MEDIA_FAST_FORWARD 90 -#define ANDROID_KEYCODE_MEDIA_NEXT 87 -#define ANDROID_KEYCODE_MEDIA_PLAY_PAUSE 85 -#define ANDROID_KEYCODE_MEDIA_PREVIOUS 88 -#define ANDROID_KEYCODE_MEDIA_REWIND 89 -#define ANDROID_KEYCODE_MEDIA_STOP 86 -#define ANDROID_KEYCODE_MENU 82 -#define ANDROID_KEYCODE_MINUS 69 -#define ANDROID_KEYCODE_MUTE 91 -#define ANDROID_KEYCODE_NUM 78 -#define ANDROID_KEYCODE_PLUS 81 -#define ANDROID_KEYCODE_POWER 26 -#define ANDROID_KEYCODE_RIGHT_BRACKET 72 -#define ANDROID_KEYCODE_SEARCH 84 -#define ANDROID_KEYCODE_SEMICOLON 74 -#define ANDROID_KEYCODE_SHIFT_LEFT 59 -#define ANDROID_KEYCODE_SHIFT_RIGHT 60 -#define ANDROID_KEYCODE_SLASH 76 -#define ANDROID_KEYCODE_SOFT_LEFT 1 -#define ANDROID_KEYCODE_SOFT_RIGHT 2 -#define ANDROID_KEYCODE_SPACE 62 -#define ANDROID_KEYCODE_STAR 17 -#define ANDROID_KEYCODE_SYM 63 -#define ANDROID_KEYCODE_TAB 61 - -#define ANDROID_KEYCODE_UNKWON -1 - -//--------------------------------------------------------------------------------------------------- -//--------------------------------------------------------------------------------------------------- -class CPeriodic{ - public: - CPeriodic(); - ~CPeriodic(); - - void Start(); - void Cancel(); - -}; -//--------------------------------------------------------------------------------------------------- -//--------------------------------------------------------------------------------------------------- -class CNativeWrapper{ - - private: - void* m_window; - void* m_session; - - GF_User *GetUser() { return &m_user; } - GF_Terminal *m_term; - - CPeriodic *m_pTimer; - GF_Mutex *m_mx; - GF_User m_user; - GF_SystemRTInfo m_rti; - - int do_log; - FILE *logfile; - private: - void SetupLogs(); - void Shutdown(); - void DisplayRTI(); - public: - CNativeWrapper(); - ~CNativeWrapper(); - int init(JNIEnv * env, jobject * bitmap); - int OnTick(); - - int connect(const char *url); - void disconnect(); - void step(JNIEnv * env, jobject * bitmap); - void resize(int w, int h); - - void onMouseDown(float x, float y); - void onMouseUp(float x, float y); - void onKeyPress(int keycode, int rawkeycode, int up, int flag); - void translate_key(ANDROID_KEYCODE keycode, GF_EventKey *evt); - public: - int MessageBox(const char* msg, const char* title); - int Quit(int code); - GF_Config *create_default_config(char *file_path, char *file_name); - - static void on_gpac_log(void *cbk, u32 ll, u32 lm, const char *fmt, va_list list); - static Bool GPAC_EventProc(void *ptr, GF_Event *evt); - static void Osmo4_progress_cbk(void *usr, char *title, u32 done, u32 total); - - private: -#ifdef DEBUG_MODE - FILE *debug_f; -#endif - void debug_log(const char* msg); - -}; -//--------------------------------------------------------------------------------------------------- -//--------------------------------------------------------------------------------------------------- -// this function will be called by Java to init gpac -CNativeWrapper* gpac_obj = NULL; - -/* -void gpac_init(); -void gpac_connect(const char *url); -void gpac_disconnect(); -void gpac_render(); -void gpac_free(); -*/ -//--------------------------------------------------------------------------------------------------- -//--------------------------------------------------------------------------------------------------- -extern "C" { - JNIEXPORT void JNICALL Java_com_artemis_Osmo4_GpacObject_gpacinit(JNIEnv * env, jobject obj, jobject bitmap, jint width, jint height); - JNIEXPORT void JNICALL Java_com_artemis_Osmo4_GpacObject_gpacconnect(JNIEnv * env, jobject obj, jstring url); - JNIEXPORT void JNICALL Java_com_artemis_Osmo4_GpacObject_gpacdisconnect(JNIEnv * env, jobject obj); - JNIEXPORT void JNICALL Java_com_artemis_Osmo4_GpacObject_gpacrender(JNIEnv * env, jobject obj, jobject bitmap); - JNIEXPORT void JNICALL Java_com_artemis_Osmo4_GpacObject_gpacresize (JNIEnv * env, jobject obj, jint width, jint height); - JNIEXPORT void JNICALL Java_com_artemis_Osmo4_GpacObject_gpacfree(JNIEnv * env, jobject obj); - - JNIEXPORT void JNICALL Java_com_artemis_Osmo4_GpacObject_gpaceventmousedown(JNIEnv * env, jobject obj, jfloat x, jfloat y); - JNIEXPORT void JNICALL Java_com_artemis_Osmo4_GpacObject_gpaceventmouseup(JNIEnv * env, jobject obj, jfloat x, jfloat y); - JNIEXPORT void JNICALL Java_com_artemis_Osmo4_GpacObject_gpaceventkeypress(JNIEnv * env, jobject obj, jint keycode, jint rawkeycode, jint up, jint flag); -}; - diff --git a/applications/osmo4_android/jni/wrapper.cpp b/applications/osmo4_android/jni/wrapper.cpp index 4855fad..93b0394 100644 --- a/applications/osmo4_android/jni/wrapper.cpp +++ b/applications/osmo4_android/jni/wrapper.cpp @@ -1,910 +1,916 @@ -/* - * GPAC - Multimedia Framework C SDK - * - * Copyright (c) ENST 2009- - * Authors: Jean Le Feuvre - * All rights reserved - * - * Created by NGO Van Luyen, Ivica ARSOV / ARTEMIS / Telecom SudParis /Institut TELECOM on Oct, 2010 - * - * This file is part of GPAC / Wrapper - * - * GPAC is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * GPAC 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -#include - -#include -#include -#include -#include -#include -#include - -#include "wrapper.h" -#include "wrapper_jni.c" - -#include -#include - -#define TAG "GPAC_WRAPPER" - -#define LOGV(X, Y) __android_log_print(ANDROID_LOG_VERBOSE, TAG, X, Y) -#define LOGD(X, Y) __android_log_print(ANDROID_LOG_DEBUG, TAG, X, Y) -#define LOGE(X, Y) __android_log_print(ANDROID_LOG_ERROR, TAG, X, Y) -#define LOGW(X, Y) __android_log_print(ANDROID_LOG_WARN, TAG, X, Y) -#define LOGI(X, Y) __android_log_print(ANDROID_LOG_INFO, TAG, X, Y) -#include - -static JavaVM* javaVM = NULL; - -static pthread_key_t jni_thread_env_key = 0; - -/** - * This method is called when a pthread is destroyed, so we can delete the JNI env - */ -static void jni_destroy_env_func(void * env) { - LOGI("Destroying a thread with attached data, env=%p.\n", env); - JavaEnvTh * jniEnv = (JavaEnvTh *) env; - if (jniEnv){ - /*jniEnv->env->DeleteLocalRef(&jniEnv->cbk_displayMessage); - jniEnv->env->DeleteLocalRef(&jniEnv->cbk_onProgress); - jniEnv->env->DeleteLocalRef(&jniEnv->cbk_showKeyboard); - jniEnv->env->DeleteLocalRef(&jniEnv->cbk_setCaption); - jniEnv->env->DeleteLocalRef(&jniEnv->cbk_onLog);*/ - memset(jniEnv, 0, sizeof(JavaEnvTh)); - gf_free(jniEnv); - } - pthread_setspecific(jni_thread_env_key, NULL); - if (javaVM) - javaVM->DetachCurrentThread(); -} - -static int jniRegisterNativeMethods(JNIEnv* env, const char* className, - const JNINativeMethod* gMethods, int numMethods) -{ - jclass clazz; - clazz = env->FindClass(className); - if (clazz == NULL) { - LOGE("Native registration unable to find class '%s'\n", className); - return -1; - } - if (env->RegisterNatives(clazz, gMethods, numMethods) < 0) { - LOGE("RegisterNatives failed for '%s'\n", className); - return -1; - } - return 0; -} - -static JNINativeMethod sMethods[] = { - /* name, signature, funcPtr */ - - {"createInstance", - "(Lcom/artemis/Osmo4/GpacCallback;IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)J", - (void*)&Java_com_artemis_Osmo4_GPACInstance_createInstance}, - {"gpacdisconnect", - "()V", - (void*)Java_com_artemis_Osmo4_GPACInstance_gpacdisconnect}, - {"gpacrender", - "()V", - (void*)Java_com_artemis_Osmo4_GPACInstance_gpacrender}, - {"gpacresize", - "(II)V", - (void*)Java_com_artemis_Osmo4_GPACInstance_gpacresize}, - {"gpacfree", - "()V", - (void*)Java_com_artemis_Osmo4_GPACInstance_gpacfree}, - {"gpaceventkeypress", - "(IIIII)V", - (void*)Java_com_artemis_Osmo4_GPACInstance_gpaceventkeypress}, - {"gpaceventmousedown", - "(FF)V", - (void*)Java_com_artemis_Osmo4_GPACInstance_gpaceventmousedown}, - {"gpaceventmouseup", - "(FF)V", - (void*)Java_com_artemis_Osmo4_GPACInstance_gpaceventmouseup}, - {"gpaceventmousemove", - "(FF)V", - (void*)Java_com_artemis_Osmo4_GPACInstance_gpaceventmousemove}, - {"setGpacPreference", - "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V", - (void*)Java_com_artemis_Osmo4_GPACInstance_setGpacPreference}, - NULL -}; - - -jint JNI_OnUnLoad(JavaVM* vm, void* reserved){ - LOGI("Deleting library, vm=%p...\n", vm); - if (pthread_key_delete(jni_thread_env_key)){ - LOGW("Failed to delete key jni_thread_env_key jni_thread_env_key=%p\n", jni_thread_env_key); - } - javaVM = NULL; - jni_thread_env_key = NULL; -} - -//--------------------------------------------------------------------------------------------------- -jint JNI_OnLoad(JavaVM* vm, void* reserved){ - const char * className = "com/artemis/Osmo4/GPACInstance"; - JNIEnv * env; - if (!vm) - return -1; - if (vm->GetEnv((void**)(&env), JNI_VERSION_1_2) != JNI_OK) - return -1; - javaVM = vm; - LOGI("Registering %s natives\n", className); - if (jniRegisterNativeMethods(env, className, sMethods, 9) < 0){ - LOGE("Failed to register native methods for %s !\n", className); - return -1; - } - LOGI("Registering natives DONE, now registering pthread_keys with destructor=%p\n", &jni_destroy_env_func); - int ret = pthread_key_create(&jni_thread_env_key, &jni_destroy_env_func); - if (ret){ - LOGE("Failed to register jni_thread_env_key jni_thread_env_key=%p\n", jni_thread_env_key); - } - return JNI_VERSION_1_2; -} - -//--------------------------------------------------------------------------------------------------- -//CNativeWrapper -//------------------------------- - -CNativeWrapper::CNativeWrapper(){ - do_log = 1; - m_term = NULL; - m_mx = NULL; -#ifndef GPAC_GUI_ONLY - memset(&m_user, 0, sizeof(GF_User)); - memset(&m_rti, 0, sizeof(GF_SystemRTInfo)); -#endif -} -//------------------------------- -CNativeWrapper::~CNativeWrapper(){ - debug_log("~CNativeWrapper()"); - JavaEnvTh * env = getEnv(); - if (env && env->cbk_obj) - env->env->DeleteGlobalRef(env->cbk_obj); - Shutdown(); - debug_log("~CNativeWrapper() : DONE\n"); -} -//------------------------------- -void CNativeWrapper::debug_log(const char* msg){ - LOGV("%s", msg); -} -//------------------------------- -void CNativeWrapper::Shutdown() -{ - debug_log("shutdown"); - if (m_term) - gf_term_disconnect(m_term); - if (m_mx) - gf_mx_del(m_mx); - m_mx = NULL; -#ifndef GPAC_GUI_ONLY - if (m_term) { - GF_Terminal *t = m_term; - m_term = NULL; - gf_term_del(t); - } - if (m_user.config) { - gf_cfg_del(m_user.config); - m_user.config = NULL; - } - if (m_user.modules) { - gf_modules_del(m_user.modules); - m_user.modules = NULL; - } -#endif - m_term = NULL; - debug_log("shutdown end"); -} - -void CNativeWrapper::setJavaEnv(JavaEnvTh * envToSet, JNIEnv *env, jobject callback){ - assert( envToSet ); - jclass localRef = env->GetObjectClass(callback); - envToSet->env = env; - envToSet->javaThreadId = gf_th_id(); - envToSet->cbk_obj = callback; - envToSet->cbk_displayMessage = - env->GetMethodID(localRef, "displayMessage", "(Ljava/lang/String;Ljava/lang/String;I)V"); - envToSet->cbk_onProgress = - env->GetMethodID(localRef, "onProgress", "(Ljava/lang/String;II)V"); - envToSet->cbk_onLog = - env->GetMethodID(localRef, "onLog", "(IILjava/lang/String;)V"); - envToSet->cbk_setCaption = - env->GetMethodID(localRef, "setCaption", "(Ljava/lang/String;)V"); - envToSet->cbk_showKeyboard = - env->GetMethodID(localRef, "showKeyboard", "(Z)V"); - env->DeleteLocalRef(localRef); -} - -static u32 beforeThreadExits(void * param){ - LOGI("Before Thread exist, detach the JavaVM from Thread for thread %p...\n", gf_th_current()); - if (javaVM) - javaVM->DetachCurrentThread(); -} - -JavaEnvTh * CNativeWrapper::getEnv(){ - JNIEnv *env; - JavaEnvTh * javaEnv; - if (!javaVM){ - debug_log("************* No JVM Found ************"); - return NULL; - } - javaEnv = (JavaEnvTh*) pthread_getspecific( jni_thread_env_key ); - if (javaEnv) - return javaEnv; - javaEnv = (JavaEnvTh *) gf_malloc(sizeof(JavaEnvTh)); - if (!javaEnv) - return NULL; - memset(javaEnv, 0, sizeof(JavaEnvTh)); - javaVM->AttachCurrentThread(&env, NULL); - if (!env){ - LOGE("Attaching to thread did faild for thread id=%d", gf_th_id()); - gf_free(javaEnv); - return NULL; - } - LOGI("Rebuilding methods for thread %d", gf_th_id()); - setJavaEnv(javaEnv, env, mainJavaEnv.cbk_obj); - if (pthread_setspecific(jni_thread_env_key, javaEnv)){ - LOGE("Failed to set specific thread data to jni_thread_env_key for thread=%d. No ENV available !", gf_th_id()); - gf_free(javaEnv); - return NULL; - } - GF_Thread * t; - LOGI("Getting current Thread %d...", gf_th_id()); - t = gf_th_current(); - LOGI("Getting current Thread DONE = %p, now registering before exit...", t); - - if (GF_OK != gf_register_before_exit_function(gf_th_current(), &beforeThreadExits)){ - LOGE("Failed to register exit function for thread %p, no javaEnv for current thread.", gf_th_current()); - //javaVM->DetachCurrentThread(); - gf_free(javaEnv); - javaEnv = NULL; - } - LOGI("Registering DONE for %d", gf_th_id()); - return javaEnv; -} - - -//------------------------------- -int CNativeWrapper::MessageBox(const char* msg, const char* title, GF_Err status){ - LOGV("MessageBox start %s", msg); - JavaEnvTh * env = getEnv(); - if (!env || !env->cbk_displayMessage) - return 0; - env->env->PushLocalFrame(2); - jstring tit = env->env->NewStringUTF(title?title:"null"); - jstring mes = env->env->NewStringUTF(msg?msg:"null"); - env->env->CallVoidMethod(env->cbk_obj, env->cbk_displayMessage, mes, tit, status); - env->env->PopLocalFrame(NULL); - LOGV("MessageBox done %s", msg); - return 1; -} -//------------------------------- -void CNativeWrapper::DisplayRTI(){ -#ifndef GPAC_GUI_ONLY - // display some system informations ? -#endif -} -//------------------------------- -int CNativeWrapper::Quit(int code){ - - Shutdown(); - // send shutdown request to java - return code; -} - -#include - -//------------------------------- -void CNativeWrapper::on_gpac_log(void *cbk, u32 ll, u32 lm, const char *fmt, va_list list){ - char szMsg[4096]; - const char * tag; - char unknTag[32]; - int debug; - // We do not want to be flood by mutexes - if (ll == GF_LOG_DEBUG && lm == GF_LOG_MUTEX) - return; - switch (ll){ - case GF_LOG_DEBUG: - debug = ANDROID_LOG_DEBUG; - break; - case GF_LOG_INFO: - debug = ANDROID_LOG_INFO; - break; - case GF_LOG_WARNING: - debug = ANDROID_LOG_WARN; - break; - case GF_LOG_ERROR: - debug = ANDROID_LOG_ERROR; - break; - default: - debug = ANDROID_LOG_INFO; - } - vsnprintf(szMsg, 4096, fmt, list); - CNativeWrapper * self = (CNativeWrapper *) cbk; - if (!self) - goto displayInAndroidlogs; - - { - JavaEnvTh *env = self->getEnv(); - jstring msg; - if (!env || !env->cbk_onLog) - goto displayInAndroidlogs; - env->env->PushLocalFrame(1); - msg = env->env->NewStringUTF(szMsg); - env->env->CallVoidMethod(env->cbk_obj, env->cbk_onLog, debug, lm, msg); - env->env->PopLocalFrame(NULL); - return; - } -displayInAndroidlogs: - { - /* When no callback is properly set, we use direct logging */ - switch( lm){ - case GF_LOG_CORE: - tag="GF_LOG_CORE"; - break; - case GF_LOG_CODING: - tag="GF_LOG_CODING"; - break; - case GF_LOG_CONTAINER: - tag="GF_LOG_CONTAINER"; - break; - case GF_LOG_NETWORK: - tag="GF_LOG_NETWORK"; - break; - case GF_LOG_RTP: - tag="GF_LOG_RTP"; - break; - case GF_LOG_AUTHOR: - tag="GF_LOG_AUTHOR"; - break; - case GF_LOG_SYNC: - tag="GF_LOG_SYNC"; - break; - case GF_LOG_CODEC: - tag="GF_LOG_CODEC"; - break; - case GF_LOG_PARSER: - tag="GF_LOG_PARSER"; - break; - case GF_LOG_MEDIA: - tag="GF_LOG_MEDIA"; - break; - case GF_LOG_SCENE: - tag="GF_LOG_SCENE"; - break; - case GF_LOG_SCRIPT: - tag="GF_LOG_SCRIPT"; - break; - case GF_LOG_INTERACT: - tag="GF_LOG_INTERACT"; - break; - case GF_LOG_COMPOSE: - tag="GF_LOG_COMPOSE"; - break; - case GF_LOG_CACHE: - tag="GF_LOG_CACHE"; - break; - case GF_LOG_MMIO: - tag="GF_LOG_MMIO"; - break; - case GF_LOG_RTI: - tag="GF_LOG_RTI"; - break; - case GF_LOG_SMIL: - tag="GF_LOG_SMIL"; - break; - case GF_LOG_MEMORY: - tag="GF_LOG_MEMORY"; - break; - case GF_LOG_AUDIO: - tag="GF_LOG_AUDIO"; - break; - case GF_LOG_MODULE: - tag="GF_LOG_MODULE"; - break; - case GF_LOG_MUTEX: - tag="GF_LOG_MUTEX"; - break; - default: - snprintf(unknTag, 32, "GPAC_UNKNOWN[%d]", lm); - tag = unknTag; - } - __android_log_print(debug, tag, szMsg); - } -} -//------------------------------- -Bool CNativeWrapper::GPAC_EventProc(void *cbk, GF_Event *evt){ - if (cbk) - { - CNativeWrapper* ptr = (CNativeWrapper*)cbk; - char msg[4096]; - msg[0] = 0; - LOGD("GPAC_EventProc() Message=%d", evt->type); - switch (evt->type){ - case GF_EVENT_CLICK: - case GF_EVENT_MOUSEUP: - case GF_EVENT_MOUSEDOWN: - case GF_EVENT_MOUSEOVER: - case GF_EVENT_MOUSEOUT: - case GF_EVENT_MOUSEMOVE: - case GF_EVENT_MOUSEWHEEL: - case GF_EVENT_KEYUP: - case GF_EVENT_KEYDOWN: - case GF_EVENT_LONGKEYPRESS: - case GF_EVENT_TEXTINPUT: - /* We ignore all these events */ - break; - case GF_EVENT_MEDIA_BEGIN_SESSION_SETUP: - case GF_EVENT_MEDIA_END_SESSION_SETUP: - case GF_EVENT_MEDIA_DATA_REQUEST: - case GF_EVENT_MEDIA_PLAYABLE: - case GF_EVENT_MEDIA_NOT_PLAYABLE: - case GF_EVENT_MEDIA_DATA_PROGRESS: - case GF_EVENT_MEDIA_END_OF_DATA: - case GF_EVENT_MEDIA_STOP: - case GF_EVENT_MEDIA_ERROR: - LOGD("GPAC_EventProc() Media Event detected = [index=%d]", evt->type - GF_EVENT_MEDIA_BEGIN_SESSION_SETUP); - break; - case GF_EVENT_MESSAGE: - { - ptr->debug_log("GPAC_EventProc start"); - if ( evt->message.message ) - { - strcat(msg, evt->message.message); - strcat(msg, ": "); - } - strcat(msg, gf_error_to_string(evt->message.error)); - - ptr->debug_log(msg); - ptr->MessageBox(msg, evt->message.service ? evt->message.service : "GF_EVENT_MESSAGE", evt->message.error); - ptr->debug_log("GPAC_EventProc end"); - }; - break; - case GF_EVENT_CONNECT: - if (evt->connect.is_connected) - ptr->MessageBox("Connected", "Connected to scene", GF_OK); - else - ptr->MessageBox("Disconnected", "Disconnected from scene.", GF_OK); - break; - case GF_EVENT_PROGRESS: - { - const char * szTitle;; - if (evt->progress.progress_type==0) - szTitle = "Buffering"; - else if (evt->progress.progress_type==1) - szTitle = "Downloading..."; - else if (evt->progress.progress_type==2) - szTitle = "Import "; - else - szTitle = "Unknown Progress Event"; - ptr->Osmo4_progress_cbk(ptr, szTitle, evt->progress.done, evt->progress.total); - gf_set_progress(szTitle, evt->progress.done, evt->progress.total); - } - break; - case GF_EVENT_TEXT_EDITING_START: - case GF_EVENT_TEXT_EDITING_END: - { - JavaEnvTh * env = ptr->getEnv(); - if (!env || !env->cbk_showKeyboard) - return 0; - LOGI("Needs to display/hide the Virtual Keyboard (%d)", evt->type); - env->env->CallVoidMethod(env->cbk_obj, env->cbk_showKeyboard, GF_EVENT_TEXT_EDITING_START == evt->type); - LOGV("Done showing virtual keyboard (%d)", evt->type); - } - break; - case GF_EVENT_EOS: - LOGI("EOS Reached (%d)", evt->type); - break; - case GF_EVENT_DISCONNECT: - /* FIXME : not sure about this behaviour */ - if (ptr) - ptr->disconnect(); - break; - default: - LOGI("Unknown Message %d", evt->type); - } - } - return 0; -} - - -void CNativeWrapper::progress_cbk(const char *title, u64 done, u64 total){ - JavaEnvTh *env = getEnv(); - if (!env || !env->cbk_onProgress) - return; - debug_log("Osmo4_progress_cbk start"); - env->env->PushLocalFrame(1); - jstring js = env->env->NewStringUTF(title); - env->env->CallVoidMethod(env->cbk_obj, env->cbk_onProgress, js, done, total); - env->env->PopLocalFrame(NULL); - debug_log("Osmo4_progress_cbk end"); -} - - -//------------------------------- -void CNativeWrapper::Osmo4_progress_cbk(const void *usr, const char *title, u64 done, u64 total){ - if (!usr) - return; - CNativeWrapper * self = (CNativeWrapper *) usr; - self->progress_cbk(title, done, total); -} -//------------------------------- -void CNativeWrapper::SetupLogs(){ - const char *opt; - debug_log("SetupLogs()"); - - gf_mx_p(m_mx); - - /*setup GPAC logs: log all errors*/ - gf_log_set_level(GF_LOG_DEBUG); - gf_log_set_tools(0xFFFFFFFF); - - opt = gf_cfg_get_key(m_user.config, "General", "LogLevel"); - /* FIXME : set the loglevel according to config file */ - - opt = gf_cfg_get_key(m_user.config, "General", "LogTools"); - if (opt) gf_log_set_tools(gf_log_parse_tools(opt)); - - gf_log_set_callback(this, on_gpac_log); - gf_mx_v(m_mx); - - GF_LOG(GF_LOG_INFO, GF_LOG_CORE, ("Osmo4 logs initialized\n")); - /* Test for JNI invocations, should work properly - int k; - for (k = 0 ; k < 512; k++){ - GF_LOG(GF_LOG_INFO, GF_LOG_CORE, ("Message %d\n", k)); - }*/ -} -//------------------------------- -// dir should end with / -int CNativeWrapper::init(JNIEnv * env, void * bitmap, jobject * callback, int width, int height, const char * cfg_dir, const char * modules_dir, const char * cache_dir, const char * font_dir, const char * urlToLoad){ - LOGI("Initializing GPAC with URL=%s...", urlToLoad); - strcpy(m_cfg_dir, cfg_dir); - strcpy(m_modules_dir, modules_dir); - strcpy(m_cache_dir, cache_dir); - strcpy(m_font_dir, font_dir); - - char m_cfg_filename[GF_MAX_PATH]; - strcpy(m_cfg_filename, m_cfg_dir); - strcat(m_cfg_filename, "GPAC.cfg"); - - int m_Width = width; - int m_Height = height; - - int first_launch = 0; - const char *opt; - - m_window = env; - m_session = bitmap; - setJavaEnv(&mainJavaEnv, env, env->NewGlobalRef(*callback)); - if (pthread_setspecific( jni_thread_env_key, &mainJavaEnv)){ - LOGE("Failed to set specific thread data to jni_thread_env_key=%p for main thread !", jni_thread_env_key); - } - - m_mx = gf_mx_new("Osmo4"); - - //load config file - LOGI("Loading User Config %s...", "GPAC.cfg"); - m_user.config = gf_cfg_force_new(cfg_dir, "GPAC.cfg"); - SetupLogs(); - gf_set_progress_callback(this, Osmo4_progress_cbk); - - opt = gf_cfg_get_key(m_user.config, "General", "ModulesDirectory"); - if (!opt) { - FILE * fstart; - char msg[256]; - LOGI("First launch, initializing new Config %s...", "GPAC.cfg"); - /*hardcode module directory*/ - gf_cfg_set_key(m_user.config, "Downloader", "CleanCache", "yes"); - /*startup file*/ - snprintf(msg, 256, "%sgui/gui.bt", cfg_dir); - fstart = fopen(msg, "r"); - if (fstart){ - fclose(fstart); - gf_cfg_set_key(m_user.config, "General", "StartupFile", msg); - } else { - gf_cfg_set_key(m_user.config, "General", "#StartupFile", msg); - } - gf_cfg_set_key(m_user.config, "GUI", "UnhideControlPlayer", "1"); - /*setup UDP traffic autodetect*/ - gf_cfg_set_key(m_user.config, "Network", "AutoReconfigUDP", "yes"); - gf_cfg_set_key(m_user.config, "Network", "UDPTimeout", "10000"); - gf_cfg_set_key(m_user.config, "Network", "BufferLength", "3000"); - gf_cfg_set_key(m_user.config, "Compositor", "TextureTextMode", "Default"); - //gf_cfg_set_key(m_user.config, "Compositor", "FrameRate", "30"); - gf_cfg_set_key(m_user.config, "Audio", "ForceConfig", "no"); - gf_cfg_set_key(m_user.config, "Audio", "NumBuffers", "1"); - gf_cfg_set_key(m_user.config, "FontEngine", "FontReader", "ft_font"); - } - /* All of this has to be done for every instance */ - gf_cfg_set_key(m_user.config, "General", "ModulesDirectory", modules_dir ? modules_dir : GPAC_MODULES_DIR); - gf_cfg_set_key(m_user.config, "General", "CacheDirectory", cache_dir ? cache_dir : GPAC_CACHE_DIR); - gf_cfg_set_key(m_user.config, "General", "LastWorkingDir", cfg_dir); - gf_cfg_set_key(m_user.config, "FontEngine", "FontDirectory", GPAC_FONT_DIR); - gf_cfg_set_key(m_user.config, "Video", "DriverName", "Android Video Output"); - gf_cfg_set_key(m_user.config, "Audio", "DriverName", "Android Audio Output"); - - opt = gf_cfg_get_key(m_user.config, "General", "ModulesDirectory"); - LOGI("loading modules in directory %s...", opt); - m_user.modules = gf_modules_new(opt, m_user.config); - if (!m_user.modules || !gf_modules_get_count(m_user.modules)) { - LOGE("No modules found in directory %s !", opt); - if (m_user.modules) - gf_modules_del(m_user.modules); - gf_cfg_del(m_user.config); - m_user.config = NULL; - return Quit(KErrGeneral); - } - - /*we don't thread the visual compositor to be able to minimize the app and still have audio running*/ - m_user.init_flags = GF_TERM_NO_COMPOSITOR_THREAD | GF_TERM_NO_REGULATION; - //m_user.init_flags |= GF_TERM_NO_AUDIO; - m_user.opaque = this; - - m_user.os_window_handler = m_window; - m_user.os_display = m_session; - m_user.EventProc = GPAC_EventProc; - if (!javaVM){ - LOGE("NO JAVA VM FOUND, m_user=%p !!!!\n", &m_user); - return Quit(KErrGeneral); - } - - LOGD("Loading GPAC terminal, m_user=%p...", &m_user); - m_term = gf_term_new(&m_user); - if (!m_term) { - LOGE("Cannot load GPAC Terminal with m_user=%p", m_user); - MessageBox("Cannot load GPAC terminal", "Fatal Error", GF_SERVICE_ERROR); - gf_modules_del(m_user.modules); - m_user.modules = NULL; - gf_cfg_del(m_user.config); - m_user.config = NULL; - return Quit(KErrGeneral); - } - - //setAudioEnvironment(javaVM); - - LOGD("Setting term size m_user=%p...", &m_user); - gf_term_set_size(m_term, m_Width, m_Height); - - opt = gf_cfg_get_key(m_user.config, "General", "StartupFile"); - LOGD("File loaded at startup=%s.", opt); - - if (!urlToLoad) - urlToLoad = opt; - if (urlToLoad){ - LOGI("Connecting to %s...", urlToLoad); - gf_term_connect(m_term, urlToLoad); - } - debug_log("init end"); - LOGD("Saving config file %s...\n", m_cfg_filename); - gf_cfg_save(m_user.config); - LOGI("Initialization complete, config file saved as %s.\n", m_cfg_filename); - return 0; -} -//------------------------------- -int CNativeWrapper::connect(const char *url){ - if (m_term){ - debug_log("Starting to connect ..."); - gf_term_connect_from_time(m_term, url, 0, false); - debug_log("connected ..."); - } -} - -void CNativeWrapper::setGpacPreference( const char * category, const char * name, const char * value) -{ - if (m_user.config){ - gf_cfg_set_key(m_user.config, category, name, value); - gf_cfg_save(m_user.config); - } -} - -//----------------------------------------------------- -void CNativeWrapper::disconnect(){ - if (m_term){ - debug_log("disconnecting"); - gf_term_disconnect(m_term); - debug_log("disconnected ..."); - } -} -//----------------------------------------------------- -void CNativeWrapper::step(void * env, void * bitmap){ - m_window = env; - m_session = bitmap; - //debug_log("Step ..."); - if (!m_term){ - debug_log("step(): No m_term found."); - return; - } else - if (!m_term->compositor) - debug_log("step(): No compositor found."); - else if (!m_term->compositor->video_out) - debug_log("step(): No video_out found"); - else if (!m_term->compositor->video_out->Setup) - debug_log("step(): No video_out->Setup found"); - else { - //debug_log("step(): gf_term_process_step : start()"); - m_term->compositor->frame_draw_type = GF_SC_DRAW_FRAME; - gf_term_process_step(m_term); - //debug_log("step(): gf_term_process_step : end()"); - } -} - -//----------------------------------------------------- -void CNativeWrapper::setAudioEnvironment(JavaVM* javaVM){ - if (!m_term){ - debug_log("setAudioEnvironment(): no m_term found."); - return; - } - debug_log("setAudioEnvironment start"); - m_term->compositor->audio_renderer->audio_out->Setup(m_term->compositor->audio_renderer->audio_out, javaVM, 0, 0); - debug_log("setAudioEnvironment end"); -} -//----------------------------------------------------- -void CNativeWrapper::resize(int w, int h){ - if (!m_term) - return; - debug_log("resize start"); - gf_term_set_size(m_term, w, h); - debug_log("resize end"); -} -//----------------------------------------------------- -void CNativeWrapper::onMouseDown(float x, float y){ - if (!m_term) - return; - debug_log("onMouseDown start"); - //char msg[100]; - //sprintf(msg, "onMousedown x=%f, y=%f", x, y ); - //debug_log(msg); - - GF_Event evt; - evt.type = GF_EVENT_MOUSEDOWN; - evt.mouse.button = GF_MOUSE_LEFT; - evt.mouse.x = x; - evt.mouse.y = y; - - int ret = gf_term_user_event(m_term, &evt); - debug_log("onMouseDown end"); -} -//----------------------------------------------------- -void CNativeWrapper::onMouseUp(float x, float y){ - if (!m_term) - return; - debug_log("onMouseUp start"); - //char msg[100]; - //sprintf(msg, "onMouseUp x=%f, y=%f", x, y ); - //debug_log(msg); - - GF_Event evt; - evt.type = GF_EVENT_MOUSEUP; - evt.mouse.button = GF_MOUSE_LEFT; - evt.mouse.x = x; - evt.mouse.y = y; - - int ret = gf_term_user_event(m_term, &evt); - debug_log("onMouseUp end"); -} -//----------------------------------------------------- -void CNativeWrapper::onMouseMove(float x, float y){ - if (!m_term) - return; - GF_Event evt; - evt.type = GF_EVENT_MOUSEMOVE; - evt.mouse.button = GF_MOUSE_LEFT; - evt.mouse.x = x; - evt.mouse.y = y; - - int ret = gf_term_user_event(m_term, &evt); -} -//----------------------------------------------------- -void CNativeWrapper::onKeyPress(int keycode, int rawkeycode, int up, int flag, int unicode){ - if (!m_term) - return; - debug_log("onKeyPress start"); - GF_Event evt; - memset(&evt, 0, sizeof(GF_Event)); - if (up == 0) evt.type = GF_EVENT_KEYUP; - else evt.type = GF_EVENT_KEYDOWN; - - evt.key.flags = 0; - evt.key.hw_code = rawkeycode; - - translate_key(keycode, &evt.key); - //evt.key.key_code = GF_KEY_A; - int ret = gf_term_user_event(m_term, &evt); - - if (evt.type == GF_EVENT_KEYUP && unicode){ - memset(&evt, 0, sizeof(GF_Event)); - evt.type = GF_EVENT_TEXTINPUT; - evt.character.unicode_char = unicode; - ret = gf_term_user_event(m_term, &evt); - } -} -//----------------------------------------------------- -void CNativeWrapper::translate_key(ANDROID_KEYCODE keycode, GF_EventKey *evt){ - evt->flags = 0; - switch (keycode) { - case ANDROID_KEYCODE_BACK: evt->key_code = GF_KEY_BACKSPACE; break; - case ANDROID_KEYCODE_TAB: evt->key_code = GF_KEY_TAB; break; - case ANDROID_KEYCODE_CLEAR: evt->key_code = GF_KEY_CLEAR; break; - case ANDROID_KEYCODE_ENTER: evt->key_code = GF_KEY_ENTER; break; - case ANDROID_KEYCODE_SHIFT_LEFT: evt->key_code = GF_KEY_SHIFT; break; - case ANDROID_KEYCODE_SHIFT_RIGHT: evt->key_code = GF_KEY_SHIFT; break; - case ANDROID_KEYCODE_ALT_LEFT: evt->key_code = GF_KEY_ALT; break; - case ANDROID_KEYCODE_ALT_RIGHT: evt->key_code = GF_KEY_ALT; break; - case ANDROID_KEYCODE_SPACE: evt->key_code = GF_KEY_SPACE; break; - case ANDROID_KEYCODE_HOME: evt->key_code = GF_KEY_HOME; break; - case ANDROID_KEYCODE_DPAD_LEFT: evt->key_code = GF_KEY_LEFT; break; - case ANDROID_KEYCODE_DPAD_UP: evt->key_code = GF_KEY_UP; break; - case ANDROID_KEYCODE_DPAD_RIGHT: evt->key_code = GF_KEY_RIGHT; break; - case ANDROID_KEYCODE_DPAD_DOWN: evt->key_code = GF_KEY_DOWN; break; - case ANDROID_KEYCODE_DEL: evt->key_code = GF_KEY_DEL; break; - case ANDROID_KEYCODE_0: - evt->key_code = GF_KEY_0; - evt->flags = GF_KEY_EXT_NUMPAD; - break; - case ANDROID_KEYCODE_1: - evt->key_code = GF_KEY_1; - evt->flags = GF_KEY_EXT_NUMPAD; - break; - case ANDROID_KEYCODE_2: - evt->key_code = GF_KEY_2; - evt->flags = GF_KEY_EXT_NUMPAD; - break; - case ANDROID_KEYCODE_3: - evt->key_code = GF_KEY_3; - evt->flags = GF_KEY_EXT_NUMPAD; - break; - case ANDROID_KEYCODE_4: - evt->key_code = GF_KEY_4; - evt->flags = GF_KEY_EXT_NUMPAD; - break; - case ANDROID_KEYCODE_5: - evt->key_code = GF_KEY_5; - evt->flags = GF_KEY_EXT_NUMPAD; - break; - case ANDROID_KEYCODE_6: - evt->key_code = GF_KEY_6; - evt->flags = GF_KEY_EXT_NUMPAD; - break; - case ANDROID_KEYCODE_7: - evt->key_code = GF_KEY_7; - evt->flags = GF_KEY_EXT_NUMPAD; - break; - case ANDROID_KEYCODE_8: - evt->key_code = GF_KEY_8; - evt->flags = GF_KEY_EXT_NUMPAD; - break; - case ANDROID_KEYCODE_9: - evt->key_code = GF_KEY_9; - evt->flags = GF_KEY_EXT_NUMPAD; - break; - /*thru VK_9 are the same as ASCII '0' thru '9' (0x30 - 0x39) */ - /* VK_A thru VK_Z are the same as ASCII 'A' thru 'Z' (0x41 - 0x5A) */ - default: - if ((keycode>=ANDROID_KEYCODE_A) && (keycode<=ANDROID_KEYCODE_Z)){ - evt->key_code = GF_KEY_A + keycode - ANDROID_KEYCODE_A; - } else { - evt->key_code = GF_KEY_UNIDENTIFIED; - } - break; - } - evt->hw_code = evt->key_code; -} - -//--------------------------------------------------------------------------------------------------- -//--------------------------------------------------------------------------------------------------- +/* + * GPAC - Multimedia Framework C SDK + * + * Copyright (c) ENST 2009- + * Authors: Jean Le Feuvre + * All rights reserved + * + * Created by NGO Van Luyen, Ivica ARSOV / ARTEMIS / Telecom SudParis /Institut TELECOM on Oct, 2010 + * + * This file is part of GPAC / Wrapper + * + * GPAC is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * GPAC 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; see the file COPYING. If not, write to + * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + * + */ + +#include + +#include +#include +#include +#include +#include +#include + +#include "wrapper.h" +#include "wrapper_jni.c" + +#include +#include + +#define TAG "GPAC_WRAPPER" + +#define LOGV(X, Y) __android_log_print(ANDROID_LOG_VERBOSE, TAG, X, Y) +#define LOGD(X, Y) __android_log_print(ANDROID_LOG_DEBUG, TAG, X, Y) +#define LOGE(X, Y) __android_log_print(ANDROID_LOG_ERROR, TAG, X, Y) +#define LOGW(X, Y) __android_log_print(ANDROID_LOG_WARN, TAG, X, Y) +#define LOGI(X, Y) __android_log_print(ANDROID_LOG_INFO, TAG, X, Y) +#include + +static JavaVM* javaVM = NULL; + +static pthread_key_t jni_thread_env_key = 0; + +/** + * This method is called when a pthread is destroyed, so we can delete the JNI env + */ +static void jni_destroy_env_func(void * env) { + LOGI("Destroying a thread with attached data, env=%p.\n", env); + JavaEnvTh * jniEnv = (JavaEnvTh *) env; + if (jniEnv){ + /*jniEnv->env->DeleteLocalRef(&jniEnv->cbk_displayMessage); + jniEnv->env->DeleteLocalRef(&jniEnv->cbk_onProgress); + jniEnv->env->DeleteLocalRef(&jniEnv->cbk_showKeyboard); + jniEnv->env->DeleteLocalRef(&jniEnv->cbk_setCaption); + jniEnv->env->DeleteLocalRef(&jniEnv->cbk_onLog);*/ + memset(jniEnv, 0, sizeof(JavaEnvTh)); + gf_free(jniEnv); + } + pthread_setspecific(jni_thread_env_key, NULL); + if (javaVM) + javaVM->DetachCurrentThread(); +} + +static int jniRegisterNativeMethods(JNIEnv* env, const char* className, + const JNINativeMethod* gMethods, int numMethods) +{ + jclass clazz; + clazz = env->FindClass(className); + if (clazz == NULL) { + LOGE("Native registration unable to find class '%s'\n", className); + return -1; + } + if (env->RegisterNatives(clazz, gMethods, numMethods) < 0) { + LOGE("RegisterNatives failed for '%s'\n", className); + return -1; + } + return 0; +} + +static JNINativeMethod sMethods[] = { + /* name, signature, funcPtr */ + + {"createInstance", + "(Lcom/gpac/Osmo4/GpacCallback;IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)J", + (void*)&Java_com_gpac_Osmo4_GPACInstance_createInstance}, + {"gpacdisconnect", + "()V", + (void*)Java_com_gpac_Osmo4_GPACInstance_gpacdisconnect}, + {"gpacrender", + "()V", + (void*)Java_com_gpac_Osmo4_GPACInstance_gpacrender}, + {"gpacresize", + "(II)V", + (void*)Java_com_gpac_Osmo4_GPACInstance_gpacresize}, + {"gpacfree", + "()V", + (void*)Java_com_gpac_Osmo4_GPACInstance_gpacfree}, + {"gpaceventkeypress", + "(IIIII)V", + (void*)Java_com_gpac_Osmo4_GPACInstance_gpaceventkeypress}, + {"gpaceventmousedown", + "(FF)V", + (void*)Java_com_gpac_Osmo4_GPACInstance_gpaceventmousedown}, + {"gpaceventmouseup", + "(FF)V", + (void*)Java_com_gpac_Osmo4_GPACInstance_gpaceventmouseup}, + {"gpaceventmousemove", + "(FF)V", + (void*)Java_com_gpac_Osmo4_GPACInstance_gpaceventmousemove}, + {"setGpacPreference", + "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V", + (void*)Java_com_gpac_Osmo4_GPACInstance_setGpacPreference}, + NULL +}; + + +jint JNI_OnUnLoad(JavaVM* vm, void* reserved){ + LOGI("Deleting library, vm=%p...\n", vm); + if (pthread_key_delete(jni_thread_env_key)){ + LOGW("Failed to delete key jni_thread_env_key jni_thread_env_key=%p\n", jni_thread_env_key); + } + javaVM = NULL; + jni_thread_env_key = NULL; +} + +//--------------------------------------------------------------------------------------------------- +jint JNI_OnLoad(JavaVM* vm, void* reserved){ + const char * className = "com/gpac/Osmo4/GPACInstance"; + JNIEnv * env; + if (!vm) + return -1; + if (vm->GetEnv((void**)(&env), JNI_VERSION_1_2) != JNI_OK) + return -1; + javaVM = vm; + LOGI("Registering %s natives\n", className); + if (jniRegisterNativeMethods(env, className, sMethods, 9) < 0){ + LOGE("Failed to register native methods for %s !\n", className); + return -1; + } + LOGI("Registering natives DONE, now registering pthread_keys with destructor=%p\n", &jni_destroy_env_func); + int ret = pthread_key_create(&jni_thread_env_key, &jni_destroy_env_func); + if (ret){ + LOGE("Failed to register jni_thread_env_key jni_thread_env_key=%p\n", jni_thread_env_key); + } + return JNI_VERSION_1_2; +} + +//--------------------------------------------------------------------------------------------------- +//CNativeWrapper +//------------------------------- + +CNativeWrapper::CNativeWrapper(){ + do_log = 1; + m_term = NULL; + m_mx = NULL; +#ifndef GPAC_GUI_ONLY + memset(&m_user, 0, sizeof(GF_User)); + memset(&m_rti, 0, sizeof(GF_SystemRTInfo)); +#endif +} +//------------------------------- +CNativeWrapper::~CNativeWrapper(){ + debug_log("~CNativeWrapper()"); + JavaEnvTh * env = getEnv(); + if (env && env->cbk_obj) + env->env->DeleteGlobalRef(env->cbk_obj); + Shutdown(); + debug_log("~CNativeWrapper() : DONE\n"); +} +//------------------------------- +void CNativeWrapper::debug_log(const char* msg){ + LOGV("%s", msg); +} +//------------------------------- +void CNativeWrapper::Shutdown() +{ + debug_log("shutdown"); + if (m_term) + gf_term_disconnect(m_term); + if (m_mx) + gf_mx_del(m_mx); + m_mx = NULL; +#ifndef GPAC_GUI_ONLY + if (m_term) { + GF_Terminal *t = m_term; + m_term = NULL; + gf_term_del(t); + } + if (m_user.config) { + gf_cfg_del(m_user.config); + m_user.config = NULL; + } + if (m_user.modules) { + gf_modules_del(m_user.modules); + m_user.modules = NULL; + } +#endif + m_term = NULL; + debug_log("shutdown end"); +} + +void CNativeWrapper::setJavaEnv(JavaEnvTh * envToSet, JNIEnv *env, jobject callback){ + assert( envToSet ); + jclass localRef = env->GetObjectClass(callback); + envToSet->env = env; + envToSet->javaThreadId = gf_th_id(); + envToSet->cbk_obj = callback; + envToSet->cbk_displayMessage = + env->GetMethodID(localRef, "displayMessage", "(Ljava/lang/String;Ljava/lang/String;I)V"); + envToSet->cbk_onProgress = + env->GetMethodID(localRef, "onProgress", "(Ljava/lang/String;II)V"); + envToSet->cbk_onLog = + env->GetMethodID(localRef, "onLog", "(IILjava/lang/String;)V"); + envToSet->cbk_setCaption = + env->GetMethodID(localRef, "setCaption", "(Ljava/lang/String;)V"); + envToSet->cbk_showKeyboard = + env->GetMethodID(localRef, "showKeyboard", "(Z)V"); + env->DeleteLocalRef(localRef); +} + +static u32 beforeThreadExits(void * param){ + LOGI("Before Thread exist, detach the JavaVM from Thread for thread %p...\n", gf_th_current()); + if (javaVM) + javaVM->DetachCurrentThread(); +} + +JavaEnvTh * CNativeWrapper::getEnv(){ + JNIEnv *env; + JavaEnvTh * javaEnv; + if (!javaVM){ + debug_log("************* No JVM Found ************"); + return NULL; + } + javaEnv = (JavaEnvTh*) pthread_getspecific( jni_thread_env_key ); + if (javaEnv) + return javaEnv; + javaEnv = (JavaEnvTh *) gf_malloc(sizeof(JavaEnvTh)); + if (!javaEnv) + return NULL; + memset(javaEnv, 0, sizeof(JavaEnvTh)); + javaVM->AttachCurrentThread(&env, NULL); + if (!env){ + LOGE("Attaching to thread did faild for thread id=%d", gf_th_id()); + gf_free(javaEnv); + return NULL; + } + LOGI("Rebuilding methods for thread %d", gf_th_id()); + setJavaEnv(javaEnv, env, mainJavaEnv.cbk_obj); + if (pthread_setspecific(jni_thread_env_key, javaEnv)){ + LOGE("Failed to set specific thread data to jni_thread_env_key for thread=%d. No ENV available !", gf_th_id()); + gf_free(javaEnv); + return NULL; + } + GF_Thread * t; + LOGI("Getting current Thread %d...", gf_th_id()); + t = gf_th_current(); + LOGI("Getting current Thread DONE = %p, now registering before exit...", t); + + if (GF_OK != gf_register_before_exit_function(gf_th_current(), &beforeThreadExits)){ + LOGE("Failed to register exit function for thread %p, no javaEnv for current thread.", gf_th_current()); + //javaVM->DetachCurrentThread(); + gf_free(javaEnv); + javaEnv = NULL; + } + LOGI("Registering DONE for %d", gf_th_id()); + return javaEnv; +} + + +//------------------------------- +int CNativeWrapper::MessageBox(const char* msg, const char* title, GF_Err status){ + LOGV("MessageBox start %s", msg); + JavaEnvTh * env = getEnv(); + if (!env || !env->cbk_displayMessage) + return 0; + env->env->PushLocalFrame(2); + jstring tit = env->env->NewStringUTF(title?title:"null"); + jstring mes = env->env->NewStringUTF(msg?msg:"null"); + env->env->CallVoidMethod(env->cbk_obj, env->cbk_displayMessage, mes, tit, status); + env->env->PopLocalFrame(NULL); + LOGV("MessageBox done %s", msg); + return 1; +} +//------------------------------- +void CNativeWrapper::DisplayRTI(){ +#ifndef GPAC_GUI_ONLY + // display some system informations ? +#endif +} +//------------------------------- +int CNativeWrapper::Quit(int code){ + + Shutdown(); + // send shutdown request to java + return code; +} + +#include + +//------------------------------- +void CNativeWrapper::on_gpac_log(void *cbk, u32 ll, u32 lm, const char *fmt, va_list list){ + char szMsg[4096]; + const char * tag; + char unknTag[32]; + int debug; + // We do not want to be flood by mutexes + if (ll == GF_LOG_DEBUG && lm == GF_LOG_MUTEX) + return; + switch (ll){ + case GF_LOG_DEBUG: + debug = ANDROID_LOG_DEBUG; + break; + case GF_LOG_INFO: + debug = ANDROID_LOG_INFO; + break; + case GF_LOG_WARNING: + debug = ANDROID_LOG_WARN; + break; + case GF_LOG_ERROR: + debug = ANDROID_LOG_ERROR; + break; + default: + debug = ANDROID_LOG_INFO; + } + vsnprintf(szMsg, 4096, fmt, list); + CNativeWrapper * self = (CNativeWrapper *) cbk; + if (!self) + goto displayInAndroidlogs; + + { + JavaEnvTh *env = self->getEnv(); + jstring msg; + if (!env || !env->cbk_onLog) + goto displayInAndroidlogs; + env->env->PushLocalFrame(1); + msg = env->env->NewStringUTF(szMsg); + env->env->CallVoidMethod(env->cbk_obj, env->cbk_onLog, debug, lm, msg); + env->env->PopLocalFrame(NULL); + return; + } +displayInAndroidlogs: + { + /* When no callback is properly set, we use direct logging */ + switch( lm){ + case GF_LOG_CORE: + tag="GF_LOG_CORE"; + break; + case GF_LOG_CODING: + tag="GF_LOG_CODING"; + break; + case GF_LOG_CONTAINER: + tag="GF_LOG_CONTAINER"; + break; + case GF_LOG_NETWORK: + tag="GF_LOG_NETWORK"; + break; + case GF_LOG_RTP: + tag="GF_LOG_RTP"; + break; + case GF_LOG_AUTHOR: + tag="GF_LOG_AUTHOR"; + break; + case GF_LOG_SYNC: + tag="GF_LOG_SYNC"; + break; + case GF_LOG_CODEC: + tag="GF_LOG_CODEC"; + break; + case GF_LOG_PARSER: + tag="GF_LOG_PARSER"; + break; + case GF_LOG_MEDIA: + tag="GF_LOG_MEDIA"; + break; + case GF_LOG_SCENE: + tag="GF_LOG_SCENE"; + break; + case GF_LOG_SCRIPT: + tag="GF_LOG_SCRIPT"; + break; + case GF_LOG_INTERACT: + tag="GF_LOG_INTERACT"; + break; + case GF_LOG_COMPOSE: + tag="GF_LOG_COMPOSE"; + break; + case GF_LOG_CACHE: + tag="GF_LOG_CACHE"; + break; + case GF_LOG_MMIO: + tag="GF_LOG_MMIO"; + break; + case GF_LOG_RTI: + tag="GF_LOG_RTI"; + break; + case GF_LOG_SMIL: + tag="GF_LOG_SMIL"; + break; + case GF_LOG_MEMORY: + tag="GF_LOG_MEMORY"; + break; + case GF_LOG_AUDIO: + tag="GF_LOG_AUDIO"; + break; + case GF_LOG_MODULE: + tag="GF_LOG_MODULE"; + break; + case GF_LOG_MUTEX: + tag="GF_LOG_MUTEX"; + break; + default: + snprintf(unknTag, 32, "GPAC_UNKNOWN[%d]", lm); + tag = unknTag; + } + __android_log_print(debug, tag, szMsg); + } +} +//------------------------------- +Bool CNativeWrapper::GPAC_EventProc(void *cbk, GF_Event *evt){ + if (cbk) + { + CNativeWrapper* ptr = (CNativeWrapper*)cbk; + char msg[4096]; + msg[0] = 0; + LOGD("GPAC_EventProc() Message=%d", evt->type); + switch (evt->type){ + case GF_EVENT_CLICK: + case GF_EVENT_MOUSEUP: + case GF_EVENT_MOUSEDOWN: + case GF_EVENT_MOUSEOVER: + case GF_EVENT_MOUSEOUT: + case GF_EVENT_MOUSEMOVE: + case GF_EVENT_MOUSEWHEEL: + case GF_EVENT_KEYUP: + case GF_EVENT_KEYDOWN: + case GF_EVENT_LONGKEYPRESS: + case GF_EVENT_TEXTINPUT: + /* We ignore all these events */ + break; + case GF_EVENT_MEDIA_BEGIN_SESSION_SETUP: + case GF_EVENT_MEDIA_END_SESSION_SETUP: + case GF_EVENT_MEDIA_DATA_REQUEST: + case GF_EVENT_MEDIA_PLAYABLE: + case GF_EVENT_MEDIA_NOT_PLAYABLE: + case GF_EVENT_MEDIA_DATA_PROGRESS: + case GF_EVENT_MEDIA_END_OF_DATA: + case GF_EVENT_MEDIA_STOP: + case GF_EVENT_MEDIA_ERROR: + LOGD("GPAC_EventProc() Media Event detected = [index=%d]", evt->type - GF_EVENT_MEDIA_BEGIN_SESSION_SETUP); + break; + case GF_EVENT_MESSAGE: + { + ptr->debug_log("GPAC_EventProc start"); + if ( evt->message.message ) + { + strcat(msg, evt->message.message); + strcat(msg, ": "); + } + strcat(msg, gf_error_to_string(evt->message.error)); + + ptr->debug_log(msg); + ptr->MessageBox(msg, evt->message.service ? evt->message.service : "GF_EVENT_MESSAGE", evt->message.error); + ptr->debug_log("GPAC_EventProc end"); + }; + break; + case GF_EVENT_CONNECT: + if (evt->connect.is_connected) + ptr->MessageBox("Connected", "Connected to scene", GF_OK); + else + ptr->MessageBox("Disconnected", "Disconnected from scene.", GF_OK); + break; + case GF_EVENT_PROGRESS: + { + const char * szTitle;; + if (evt->progress.progress_type==0) + szTitle = "Buffering"; + else if (evt->progress.progress_type==1) + szTitle = "Downloading..."; + else if (evt->progress.progress_type==2) + szTitle = "Import "; + else + szTitle = "Unknown Progress Event"; + ptr->Osmo4_progress_cbk(ptr, szTitle, evt->progress.done, evt->progress.total); + gf_set_progress(szTitle, evt->progress.done, evt->progress.total); + } + break; + case GF_EVENT_TEXT_EDITING_START: + case GF_EVENT_TEXT_EDITING_END: + { + JavaEnvTh * env = ptr->getEnv(); + if (!env || !env->cbk_showKeyboard) + return 0; + LOGI("Needs to display/hide the Virtual Keyboard (%d)", evt->type); + env->env->CallVoidMethod(env->cbk_obj, env->cbk_showKeyboard, GF_EVENT_TEXT_EDITING_START == evt->type); + LOGV("Done showing virtual keyboard (%d)", evt->type); + } + break; + case GF_EVENT_EOS: + LOGI("EOS Reached (%d)", evt->type); + break; + case GF_EVENT_DISCONNECT: + /* FIXME : not sure about this behaviour */ + if (ptr) + ptr->disconnect(); + break; + case GF_EVENT_NAVIGATE: + ptr->navigate( evt); + break; + default: + LOGI("Unknown Message %d", evt->type); + } + } + return 0; +} + +void CNativeWrapper::navigate( GF_Event* evt) +{ + if (gf_term_is_supported_url(m_term, evt->navigate.to_url, 1, 1)) + { + gf_term_navigate_to(m_term, evt->navigate.to_url); + } +} + +void CNativeWrapper::progress_cbk(const char *title, u64 done, u64 total){ + JavaEnvTh *env = getEnv(); + if (!env || !env->cbk_onProgress) + return; + debug_log("Osmo4_progress_cbk start"); + env->env->PushLocalFrame(1); + jstring js = env->env->NewStringUTF(title); + env->env->CallVoidMethod(env->cbk_obj, env->cbk_onProgress, js, done, total); + env->env->PopLocalFrame(NULL); + debug_log("Osmo4_progress_cbk end"); +} + + +//------------------------------- +void CNativeWrapper::Osmo4_progress_cbk(const void *usr, const char *title, u64 done, u64 total){ + if (!usr) + return; + CNativeWrapper * self = (CNativeWrapper *) usr; + self->progress_cbk(title, done, total); +} +//------------------------------- +void CNativeWrapper::SetupLogs(){ + const char *opt; + debug_log("SetupLogs()"); + + gf_mx_p(m_mx); + + u32 ll = gf_log_parse_level( gf_cfg_get_key(m_user.config, "General", "LogLevel") ); + gf_log_set_level(ll); + u32 lt = gf_log_parse_tools( gf_cfg_get_key(m_user.config, "General", "LogTools") ); + gf_log_set_tools(lt); + + gf_log_set_callback(this, on_gpac_log); + gf_mx_v(m_mx); + + GF_LOG(GF_LOG_INFO, GF_LOG_CORE, ("Osmo4 logs initialized\n")); + /* Test for JNI invocations, should work properly + int k; + for (k = 0 ; k < 512; k++){ + GF_LOG(GF_LOG_INFO, GF_LOG_CORE, ("Message %d\n", k)); + }*/ +} +//------------------------------- +// dir should end with / +int CNativeWrapper::init(JNIEnv * env, void * bitmap, jobject * callback, int width, int height, const char * cfg_dir, const char * modules_dir, const char * cache_dir, const char * font_dir, const char * urlToLoad){ + LOGI("Initializing GPAC with URL=%s...", urlToLoad); + strcpy(m_cfg_dir, cfg_dir); + strcpy(m_modules_dir, modules_dir); + strcpy(m_cache_dir, cache_dir); + strcpy(m_font_dir, font_dir); + + char m_cfg_filename[GF_MAX_PATH]; + strcpy(m_cfg_filename, m_cfg_dir); + strcat(m_cfg_filename, "GPAC.cfg"); + + int m_Width = width; + int m_Height = height; + + int first_launch = 0; + const char *opt; + + m_window = env; + m_session = bitmap; + setJavaEnv(&mainJavaEnv, env, env->NewGlobalRef(*callback)); + if (pthread_setspecific( jni_thread_env_key, &mainJavaEnv)){ + LOGE("Failed to set specific thread data to jni_thread_env_key=%p for main thread !", jni_thread_env_key); + } + + m_mx = gf_mx_new("Osmo4"); + + //load config file + LOGI("Loading User Config %s...", "GPAC.cfg"); + m_user.config = gf_cfg_force_new(cfg_dir, "GPAC.cfg"); + SetupLogs(); + gf_set_progress_callback(this, Osmo4_progress_cbk); + + opt = gf_cfg_get_key(m_user.config, "General", "ModulesDirectory"); + if (!opt) { + FILE * fstart; + char msg[256]; + LOGI("First launch, initializing new Config %s...", "GPAC.cfg"); + /*hardcode module directory*/ + gf_cfg_set_key(m_user.config, "Downloader", "CleanCache", "yes"); + /*startup file*/ + snprintf(msg, 256, "%sgui/gui.bt", cfg_dir); + fstart = fopen(msg, "r"); + if (fstart){ + fclose(fstart); + gf_cfg_set_key(m_user.config, "General", "StartupFile", msg); + } else { + gf_cfg_set_key(m_user.config, "General", "#StartupFile", msg); + } + gf_cfg_set_key(m_user.config, "GUI", "UnhideControlPlayer", "1"); + /*setup UDP traffic autodetect*/ + gf_cfg_set_key(m_user.config, "Network", "AutoReconfigUDP", "yes"); + gf_cfg_set_key(m_user.config, "Network", "UDPTimeout", "10000"); + gf_cfg_set_key(m_user.config, "Network", "BufferLength", "3000"); + gf_cfg_set_key(m_user.config, "Compositor", "TextureTextMode", "Default"); + //gf_cfg_set_key(m_user.config, "Compositor", "FrameRate", "30"); + gf_cfg_set_key(m_user.config, "Audio", "ForceConfig", "no"); + gf_cfg_set_key(m_user.config, "Audio", "NumBuffers", "1"); + gf_cfg_set_key(m_user.config, "FontEngine", "FontReader", "ft_font"); + } + /* All of this has to be done for every instance */ + gf_cfg_set_key(m_user.config, "General", "ModulesDirectory", modules_dir ? modules_dir : GPAC_MODULES_DIR); + gf_cfg_set_key(m_user.config, "General", "CacheDirectory", cache_dir ? cache_dir : GPAC_CACHE_DIR); + gf_cfg_set_key(m_user.config, "General", "LastWorkingDir", cfg_dir); + gf_cfg_set_key(m_user.config, "FontEngine", "FontDirectory", GPAC_FONT_DIR); + gf_cfg_set_key(m_user.config, "Video", "DriverName", "Android Video Output"); + gf_cfg_set_key(m_user.config, "Audio", "DriverName", "Android Audio Output"); + + opt = gf_cfg_get_key(m_user.config, "General", "ModulesDirectory"); + LOGI("loading modules in directory %s...", opt); + m_user.modules = gf_modules_new(opt, m_user.config); + if (!m_user.modules || !gf_modules_get_count(m_user.modules)) { + LOGE("No modules found in directory %s !", opt); + if (m_user.modules) + gf_modules_del(m_user.modules); + gf_cfg_del(m_user.config); + m_user.config = NULL; + return Quit(KErrGeneral); + } + + /*we don't thread the visual compositor to be able to minimize the app and still have audio running*/ + m_user.init_flags = GF_TERM_NO_COMPOSITOR_THREAD | GF_TERM_NO_REGULATION; + //m_user.init_flags |= GF_TERM_NO_AUDIO; + m_user.opaque = this; + + m_user.os_window_handler = m_window; + m_user.os_display = m_session; + m_user.EventProc = GPAC_EventProc; + if (!javaVM){ + LOGE("NO JAVA VM FOUND, m_user=%p !!!!\n", &m_user); + return Quit(KErrGeneral); + } + + LOGD("Loading GPAC terminal, m_user=%p...", &m_user); + m_term = gf_term_new(&m_user); + if (!m_term) { + LOGE("Cannot load GPAC Terminal with m_user=%p", m_user); + MessageBox("Cannot load GPAC terminal", "Fatal Error", GF_SERVICE_ERROR); + gf_modules_del(m_user.modules); + m_user.modules = NULL; + gf_cfg_del(m_user.config); + m_user.config = NULL; + return Quit(KErrGeneral); + } + + //setAudioEnvironment(javaVM); + + LOGD("Setting term size m_user=%p...", &m_user); + gf_term_set_size(m_term, m_Width, m_Height); + + opt = gf_cfg_get_key(m_user.config, "General", "StartupFile"); + LOGD("File loaded at startup=%s.", opt); + + if (!urlToLoad) + urlToLoad = opt; + if (urlToLoad){ + LOGI("Connecting to %s...", urlToLoad); + gf_term_connect(m_term, urlToLoad); + } + debug_log("init end"); + LOGD("Saving config file %s...\n", m_cfg_filename); + gf_cfg_save(m_user.config); + LOGI("Initialization complete, config file saved as %s.\n", m_cfg_filename); + + return 0; +} +//------------------------------- +int CNativeWrapper::connect(const char *url){ + if (m_term){ + debug_log("Starting to connect ..."); + gf_term_connect_from_time(m_term, url, 0, false); + debug_log("connected ..."); + } +} + +void CNativeWrapper::setGpacPreference( const char * category, const char * name, const char * value) +{ + if (m_user.config){ + gf_cfg_set_key(m_user.config, category, name, value); + gf_cfg_save(m_user.config); + } +} + +//----------------------------------------------------- +void CNativeWrapper::disconnect(){ + if (m_term){ + debug_log("disconnecting"); + gf_term_disconnect(m_term); + debug_log("disconnected ..."); + } +} +//----------------------------------------------------- +void CNativeWrapper::step(void * env, void * bitmap){ + m_window = env; + m_session = bitmap; + //debug_log("Step ..."); + if (!m_term){ + debug_log("step(): No m_term found."); + return; + } else + if (!m_term->compositor) + debug_log("step(): No compositor found."); + else if (!m_term->compositor->video_out) + debug_log("step(): No video_out found"); + else if (!m_term->compositor->video_out->Setup) + debug_log("step(): No video_out->Setup found"); + else { + //debug_log("step(): gf_term_process_step : start()"); + m_term->compositor->frame_draw_type = GF_SC_DRAW_FRAME; + gf_term_process_step(m_term); + //debug_log("step(): gf_term_process_step : end()"); + } +} + +//----------------------------------------------------- +void CNativeWrapper::setAudioEnvironment(JavaVM* javaVM){ + if (!m_term){ + debug_log("setAudioEnvironment(): no m_term found."); + return; + } + debug_log("setAudioEnvironment start"); + m_term->compositor->audio_renderer->audio_out->Setup(m_term->compositor->audio_renderer->audio_out, javaVM, 0, 0); + debug_log("setAudioEnvironment end"); +} +//----------------------------------------------------- +void CNativeWrapper::resize(int w, int h){ + if (!m_term) + return; + debug_log("resize start"); + gf_term_set_size(m_term, w, h); + debug_log("resize end"); +} +//----------------------------------------------------- +void CNativeWrapper::onMouseDown(float x, float y){ + if (!m_term) + return; + debug_log("onMouseDown start"); + //char msg[100]; + //sprintf(msg, "onMousedown x=%f, y=%f", x, y ); + //debug_log(msg); + + GF_Event evt; + evt.type = GF_EVENT_MOUSEDOWN; + evt.mouse.button = GF_MOUSE_LEFT; + evt.mouse.x = x; + evt.mouse.y = y; + + int ret = gf_term_user_event(m_term, &evt); + debug_log("onMouseDown end"); +} +//----------------------------------------------------- +void CNativeWrapper::onMouseUp(float x, float y){ + if (!m_term) + return; + debug_log("onMouseUp start"); + //char msg[100]; + //sprintf(msg, "onMouseUp x=%f, y=%f", x, y ); + //debug_log(msg); + + GF_Event evt; + evt.type = GF_EVENT_MOUSEUP; + evt.mouse.button = GF_MOUSE_LEFT; + evt.mouse.x = x; + evt.mouse.y = y; + + int ret = gf_term_user_event(m_term, &evt); + debug_log("onMouseUp end"); +} +//----------------------------------------------------- +void CNativeWrapper::onMouseMove(float x, float y){ + if (!m_term) + return; + GF_Event evt; + evt.type = GF_EVENT_MOUSEMOVE; + evt.mouse.button = GF_MOUSE_LEFT; + evt.mouse.x = x; + evt.mouse.y = y; + + int ret = gf_term_user_event(m_term, &evt); +} +//----------------------------------------------------- +void CNativeWrapper::onKeyPress(int keycode, int rawkeycode, int up, int flag, int unicode){ + if (!m_term) + return; + debug_log("onKeyPress start"); + GF_Event evt; + memset(&evt, 0, sizeof(GF_Event)); + if (up == 0) evt.type = GF_EVENT_KEYUP; + else evt.type = GF_EVENT_KEYDOWN; + + evt.key.flags = 0; + evt.key.hw_code = rawkeycode; + + translate_key(keycode, &evt.key); + //evt.key.key_code = GF_KEY_A; + int ret = gf_term_user_event(m_term, &evt); + + if (evt.type == GF_EVENT_KEYUP && unicode){ + memset(&evt, 0, sizeof(GF_Event)); + evt.type = GF_EVENT_TEXTINPUT; + evt.character.unicode_char = unicode; + ret = gf_term_user_event(m_term, &evt); + } +} +//----------------------------------------------------- +void CNativeWrapper::translate_key(ANDROID_KEYCODE keycode, GF_EventKey *evt){ + evt->flags = 0; + switch (keycode) { + case ANDROID_KEYCODE_BACK: evt->key_code = GF_KEY_BACKSPACE; break; + case ANDROID_KEYCODE_TAB: evt->key_code = GF_KEY_TAB; break; + case ANDROID_KEYCODE_CLEAR: evt->key_code = GF_KEY_CLEAR; break; + case ANDROID_KEYCODE_ENTER: evt->key_code = GF_KEY_ENTER; break; + case ANDROID_KEYCODE_SHIFT_LEFT: evt->key_code = GF_KEY_SHIFT; break; + case ANDROID_KEYCODE_SHIFT_RIGHT: evt->key_code = GF_KEY_SHIFT; break; + case ANDROID_KEYCODE_ALT_LEFT: evt->key_code = GF_KEY_ALT; break; + case ANDROID_KEYCODE_ALT_RIGHT: evt->key_code = GF_KEY_ALT; break; + case ANDROID_KEYCODE_SPACE: evt->key_code = GF_KEY_SPACE; break; + case ANDROID_KEYCODE_HOME: evt->key_code = GF_KEY_HOME; break; + case ANDROID_KEYCODE_DPAD_LEFT: evt->key_code = GF_KEY_LEFT; break; + case ANDROID_KEYCODE_DPAD_UP: evt->key_code = GF_KEY_UP; break; + case ANDROID_KEYCODE_DPAD_RIGHT: evt->key_code = GF_KEY_RIGHT; break; + case ANDROID_KEYCODE_DPAD_DOWN: evt->key_code = GF_KEY_DOWN; break; + case ANDROID_KEYCODE_DEL: evt->key_code = GF_KEY_DEL; break; + case ANDROID_KEYCODE_0: + evt->key_code = GF_KEY_0; + evt->flags = GF_KEY_EXT_NUMPAD; + break; + case ANDROID_KEYCODE_1: + evt->key_code = GF_KEY_1; + evt->flags = GF_KEY_EXT_NUMPAD; + break; + case ANDROID_KEYCODE_2: + evt->key_code = GF_KEY_2; + evt->flags = GF_KEY_EXT_NUMPAD; + break; + case ANDROID_KEYCODE_3: + evt->key_code = GF_KEY_3; + evt->flags = GF_KEY_EXT_NUMPAD; + break; + case ANDROID_KEYCODE_4: + evt->key_code = GF_KEY_4; + evt->flags = GF_KEY_EXT_NUMPAD; + break; + case ANDROID_KEYCODE_5: + evt->key_code = GF_KEY_5; + evt->flags = GF_KEY_EXT_NUMPAD; + break; + case ANDROID_KEYCODE_6: + evt->key_code = GF_KEY_6; + evt->flags = GF_KEY_EXT_NUMPAD; + break; + case ANDROID_KEYCODE_7: + evt->key_code = GF_KEY_7; + evt->flags = GF_KEY_EXT_NUMPAD; + break; + case ANDROID_KEYCODE_8: + evt->key_code = GF_KEY_8; + evt->flags = GF_KEY_EXT_NUMPAD; + break; + case ANDROID_KEYCODE_9: + evt->key_code = GF_KEY_9; + evt->flags = GF_KEY_EXT_NUMPAD; + break; + /*thru VK_9 are the same as ASCII '0' thru '9' (0x30 - 0x39) */ + /* VK_A thru VK_Z are the same as ASCII 'A' thru 'Z' (0x41 - 0x5A) */ + default: + if ((keycode>=ANDROID_KEYCODE_A) && (keycode<=ANDROID_KEYCODE_Z)){ + evt->key_code = GF_KEY_A + keycode - ANDROID_KEYCODE_A; + } else { + evt->key_code = GF_KEY_UNIDENTIFIED; + } + break; + } + evt->hw_code = evt->key_code; +} + +//--------------------------------------------------------------------------------------------------- +//--------------------------------------------------------------------------------------------------- diff --git a/applications/osmo4_android/jni/wrapper.h b/applications/osmo4_android/jni/wrapper.h index e220627..1cd231d 100644 --- a/applications/osmo4_android/jni/wrapper.h +++ b/applications/osmo4_android/jni/wrapper.h @@ -1,227 +1,228 @@ -/* - * GPAC - Multimedia Framework C SDK - * - * Copyright (c) ENST 2009- - * Authors: Jean Le Feuvre - * All rights reserved - * - * Created by NGO Van Luyen, Ivica ARSOV / ARTEMIS / Telecom SudParis /Institut TELECOM on Oct, 2010 - * - * This file is part of GPAC / Wrapper - * - * GPAC is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * GPAC 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -#include - -#include -#include -#include -#include - -//#define MAX_PATH 255 - -#define KErrGeneral 1 -//#define GPAC_CFG_DIR "/data/osmo/" -#define GPAC_CFG_DIR m_cfg_dir -//#define GPAC_MODULES_DIR "/data/osmo/modules/" -#define GPAC_MODULES_DIR m_modules_dir -//#define GPAC_MODULES_PATH "/data/osmo/modules/" -#define GPAC_MODULES_PATH m_modules_dir -//#define GPAC_CACHE_DIR "/data/osmo/cache/" -#define GPAC_CACHE_DIR m_cache_dir -//#define GPAC_LOG_FILE "/data/osmo/gpac_logs.txt" -#define GPAC_LOG_FILE m_log_filename -//#define GPAC_FONT_DIR "/system/fonts/" -#define GPAC_FONT_DIR m_font_dir - -#define DEBUG_MODE 1 -//#define DEBUG_FILE "/data/osmo/osmo_debug.txt" -#define DEBUG_FILE m_debug_filename - -// keyboard code -#define ANDROID_KEYCODE int -#define ANDROID_KEYCODE_0 7 -#define ANDROID_KEYCODE_1 8 -#define ANDROID_KEYCODE_2 9 -#define ANDROID_KEYCODE_3 10 -#define ANDROID_KEYCODE_4 11 -#define ANDROID_KEYCODE_5 12 -#define ANDROID_KEYCODE_6 13 -#define ANDROID_KEYCODE_7 14 -#define ANDROID_KEYCODE_8 15 -#define ANDROID_KEYCODE_9 16 -#define ANDROID_KEYCODE_A 29 -#define ANDROID_KEYCODE_B 30 -#define ANDROID_KEYCODE_C 31 -#define ANDROID_KEYCODE_D 32 -#define ANDROID_KEYCODE_E 33 -#define ANDROID_KEYCODE_F 34 -#define ANDROID_KEYCODE_G 35 -#define ANDROID_KEYCODE_H 36 -#define ANDROID_KEYCODE_I 37 -#define ANDROID_KEYCODE_J 38 -#define ANDROID_KEYCODE_K 39 -#define ANDROID_KEYCODE_L 40 -#define ANDROID_KEYCODE_M 41 -#define ANDROID_KEYCODE_N 42 -#define ANDROID_KEYCODE_O 43 -#define ANDROID_KEYCODE_P 44 -#define ANDROID_KEYCODE_Q 45 -#define ANDROID_KEYCODE_R 46 -#define ANDROID_KEYCODE_S 47 -#define ANDROID_KEYCODE_T 48 -#define ANDROID_KEYCODE_U 49 -#define ANDROID_KEYCODE_V 50 -#define ANDROID_KEYCODE_W 51 -#define ANDROID_KEYCODE_X 52 -#define ANDROID_KEYCODE_Y 53 -#define ANDROID_KEYCODE_Z 54 -#define ANDROID_KEYCODE_ALT_LEFT 57 -#define ANDROID_KEYCODE_ALT_RIGHT 58 -#define ANDROID_KEYCODE_AT 77 -#define ANDROID_KEYCODE_BACK 4 -#define ANDROID_KEYCODE_BACKSLASH 73 -#define ANDROID_KEYCODE_CALL 5 -#define ANDROID_KEYCODE_CAMERA 27 -#define ANDROID_KEYCODE_CLEAR 28 -#define ANDROID_KEYCODE_COMMA 55 -#define ANDROID_KEYCODE_DEL 67 -#define ANDROID_KEYCODE_DPAD_CENTER 23 -#define ANDROID_KEYCODE_DPAD_DOWN 20 -#define ANDROID_KEYCODE_DPAD_LEFT 21 -#define ANDROID_KEYCODE_DPAD_RIGHT 22 -#define ANDROID_KEYCODE_DPAD_UP 19 -#define ANDROID_KEYCODE_ENDCALL 6 -#define ANDROID_KEYCODE_ENTER 66 -#define ANDROID_KEYCODE_ENVELOPE 65 -#define ANDROID_KEYCODE_EQUALS 70 -#define ANDROID_KEYCODE_EXPLORER 64 -#define ANDROID_KEYCODE_FOCUS 80 -#define ANDROID_KEYCODE_GRAVE 68 -#define ANDROID_KEYCODE_HEADSETHOOK 79 -#define ANDROID_KEYCODE_HOME 3 -#define ANDROID_KEYCODE_LEFT_BRACKET 71 -#define ANDROID_KEYCODE_MEDIA_FAST_FORWARD 90 -#define ANDROID_KEYCODE_MEDIA_NEXT 87 -#define ANDROID_KEYCODE_MEDIA_PLAY_PAUSE 85 -#define ANDROID_KEYCODE_MEDIA_PREVIOUS 88 -#define ANDROID_KEYCODE_MEDIA_REWIND 89 -#define ANDROID_KEYCODE_MEDIA_STOP 86 -#define ANDROID_KEYCODE_MENU 82 -#define ANDROID_KEYCODE_MINUS 69 -#define ANDROID_KEYCODE_MUTE 91 -#define ANDROID_KEYCODE_NUM 78 -#define ANDROID_KEYCODE_PLUS 81 -#define ANDROID_KEYCODE_POWER 26 -#define ANDROID_KEYCODE_RIGHT_BRACKET 72 -#define ANDROID_KEYCODE_SEARCH 84 -#define ANDROID_KEYCODE_SEMICOLON 74 -#define ANDROID_KEYCODE_SHIFT_LEFT 59 -#define ANDROID_KEYCODE_SHIFT_RIGHT 60 -#define ANDROID_KEYCODE_SLASH 76 -#define ANDROID_KEYCODE_SOFT_LEFT 1 -#define ANDROID_KEYCODE_SOFT_RIGHT 2 -#define ANDROID_KEYCODE_SPACE 62 -#define ANDROID_KEYCODE_STAR 17 -#define ANDROID_KEYCODE_SYM 63 -#define ANDROID_KEYCODE_TAB 61 - -#define ANDROID_KEYCODE_UNKWON -1 - -#include - -typedef struct _JavaEnvTh { - JNIEnv * env; - u32 javaThreadId; - jobject cbk_obj; - jmethodID cbk_displayMessage; - jmethodID cbk_onProgress; - jmethodID cbk_showKeyboard; - jmethodID cbk_setCaption; - jmethodID cbk_onLog; -} JavaEnvTh; - - -//--------------------------------------------------------------------------------------------------- -//--------------------------------------------------------------------------------------------------- -class CNativeWrapper{ - - private: - void* m_window; - void* m_session; - - GF_User *GetUser() { return &m_user; } - GF_Terminal *m_term; - - /* - * Callback management - */ - JavaEnvTh mainJavaEnv; - - GF_Mutex *m_mx; - GF_User m_user; - GF_SystemRTInfo m_rti; - - int do_log; - private: - char m_cfg_dir[GF_MAX_PATH]; - char m_modules_dir[GF_MAX_PATH]; - char m_cache_dir[GF_MAX_PATH]; - char m_font_dir[GF_MAX_PATH]; - void setJavaEnv(JavaEnvTh * envToSet, JNIEnv *env, jobject callback); - private: - void SetupLogs(); - void Shutdown(); - void DisplayRTI(); - protected: - JavaEnvTh * getEnv(); - - public: - CNativeWrapper(); - ~CNativeWrapper(); - int init(JNIEnv * env, void * bitmap, jobject * callback, int width, int height, const char * cfg_dir, const char * modules_dir, const char * cache_dir, const char * font_dir, const char * urlToLoad); - - int connect(const char *url); - void disconnect(); - void step(void * env, void * bitmap); - void resize(int w, int h); - void setAudioEnvironment(JavaVM* javaVM); - - void onMouseDown(float x, float y); - void onMouseUp(float x, float y); - void onMouseMove(float x, float y); - void onKeyPress(int keycode, int rawkeycode, int up, int flag, int unicode); - void translate_key(ANDROID_KEYCODE keycode, GF_EventKey *evt); - void setGpacPreference( const char * category, const char * name, const char * value); - public: - int MessageBox(const char* msg, const char* title, GF_Err status); - int Quit(int code); - GF_Config *create_default_config(char *file_path, char *file_name); - - static void on_gpac_log(void *cbk, u32 ll, u32 lm, const char *fmt, va_list list); - static Bool GPAC_EventProc(void *cbk, GF_Event *evt); - void progress_cbk(const char *title, u64 done, u64 total); - static void Osmo4_progress_cbk(const void *usr, const char *title, u64 done, u64 total); - - private: -#ifdef DEBUG_MODE - FILE *debug_f; -#endif - void debug_log(const char* msg); - -}; - +/* + * GPAC - Multimedia Framework C SDK + * + * Copyright (c) ENST 2009- + * Authors: Jean Le Feuvre + * All rights reserved + * + * Created by NGO Van Luyen, Ivica ARSOV / ARTEMIS / Telecom SudParis /Institut TELECOM on Oct, 2010 + * + * This file is part of GPAC / Wrapper + * + * GPAC is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * GPAC 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; see the file COPYING. If not, write to + * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + * + */ + +#include + +#include +#include +#include +#include + +//#define MAX_PATH 255 + +#define KErrGeneral 1 +//#define GPAC_CFG_DIR "/data/osmo/" +#define GPAC_CFG_DIR m_cfg_dir +//#define GPAC_MODULES_DIR "/data/osmo/modules/" +#define GPAC_MODULES_DIR m_modules_dir +//#define GPAC_MODULES_PATH "/data/osmo/modules/" +#define GPAC_MODULES_PATH m_modules_dir +//#define GPAC_CACHE_DIR "/data/osmo/cache/" +#define GPAC_CACHE_DIR m_cache_dir +//#define GPAC_LOG_FILE "/data/osmo/gpac_logs.txt" +#define GPAC_LOG_FILE m_log_filename +//#define GPAC_FONT_DIR "/system/fonts/" +#define GPAC_FONT_DIR m_font_dir + +#define DEBUG_MODE 1 +//#define DEBUG_FILE "/data/osmo/osmo_debug.txt" +#define DEBUG_FILE m_debug_filename + +// keyboard code +#define ANDROID_KEYCODE int +#define ANDROID_KEYCODE_0 7 +#define ANDROID_KEYCODE_1 8 +#define ANDROID_KEYCODE_2 9 +#define ANDROID_KEYCODE_3 10 +#define ANDROID_KEYCODE_4 11 +#define ANDROID_KEYCODE_5 12 +#define ANDROID_KEYCODE_6 13 +#define ANDROID_KEYCODE_7 14 +#define ANDROID_KEYCODE_8 15 +#define ANDROID_KEYCODE_9 16 +#define ANDROID_KEYCODE_A 29 +#define ANDROID_KEYCODE_B 30 +#define ANDROID_KEYCODE_C 31 +#define ANDROID_KEYCODE_D 32 +#define ANDROID_KEYCODE_E 33 +#define ANDROID_KEYCODE_F 34 +#define ANDROID_KEYCODE_G 35 +#define ANDROID_KEYCODE_H 36 +#define ANDROID_KEYCODE_I 37 +#define ANDROID_KEYCODE_J 38 +#define ANDROID_KEYCODE_K 39 +#define ANDROID_KEYCODE_L 40 +#define ANDROID_KEYCODE_M 41 +#define ANDROID_KEYCODE_N 42 +#define ANDROID_KEYCODE_O 43 +#define ANDROID_KEYCODE_P 44 +#define ANDROID_KEYCODE_Q 45 +#define ANDROID_KEYCODE_R 46 +#define ANDROID_KEYCODE_S 47 +#define ANDROID_KEYCODE_T 48 +#define ANDROID_KEYCODE_U 49 +#define ANDROID_KEYCODE_V 50 +#define ANDROID_KEYCODE_W 51 +#define ANDROID_KEYCODE_X 52 +#define ANDROID_KEYCODE_Y 53 +#define ANDROID_KEYCODE_Z 54 +#define ANDROID_KEYCODE_ALT_LEFT 57 +#define ANDROID_KEYCODE_ALT_RIGHT 58 +#define ANDROID_KEYCODE_AT 77 +#define ANDROID_KEYCODE_BACK 4 +#define ANDROID_KEYCODE_BACKSLASH 73 +#define ANDROID_KEYCODE_CALL 5 +#define ANDROID_KEYCODE_CAMERA 27 +#define ANDROID_KEYCODE_CLEAR 28 +#define ANDROID_KEYCODE_COMMA 55 +#define ANDROID_KEYCODE_DEL 67 +#define ANDROID_KEYCODE_DPAD_CENTER 23 +#define ANDROID_KEYCODE_DPAD_DOWN 20 +#define ANDROID_KEYCODE_DPAD_LEFT 21 +#define ANDROID_KEYCODE_DPAD_RIGHT 22 +#define ANDROID_KEYCODE_DPAD_UP 19 +#define ANDROID_KEYCODE_ENDCALL 6 +#define ANDROID_KEYCODE_ENTER 66 +#define ANDROID_KEYCODE_ENVELOPE 65 +#define ANDROID_KEYCODE_EQUALS 70 +#define ANDROID_KEYCODE_EXPLORER 64 +#define ANDROID_KEYCODE_FOCUS 80 +#define ANDROID_KEYCODE_GRAVE 68 +#define ANDROID_KEYCODE_HEADSETHOOK 79 +#define ANDROID_KEYCODE_HOME 3 +#define ANDROID_KEYCODE_LEFT_BRACKET 71 +#define ANDROID_KEYCODE_MEDIA_FAST_FORWARD 90 +#define ANDROID_KEYCODE_MEDIA_NEXT 87 +#define ANDROID_KEYCODE_MEDIA_PLAY_PAUSE 85 +#define ANDROID_KEYCODE_MEDIA_PREVIOUS 88 +#define ANDROID_KEYCODE_MEDIA_REWIND 89 +#define ANDROID_KEYCODE_MEDIA_STOP 86 +#define ANDROID_KEYCODE_MENU 82 +#define ANDROID_KEYCODE_MINUS 69 +#define ANDROID_KEYCODE_MUTE 91 +#define ANDROID_KEYCODE_NUM 78 +#define ANDROID_KEYCODE_PLUS 81 +#define ANDROID_KEYCODE_POWER 26 +#define ANDROID_KEYCODE_RIGHT_BRACKET 72 +#define ANDROID_KEYCODE_SEARCH 84 +#define ANDROID_KEYCODE_SEMICOLON 74 +#define ANDROID_KEYCODE_SHIFT_LEFT 59 +#define ANDROID_KEYCODE_SHIFT_RIGHT 60 +#define ANDROID_KEYCODE_SLASH 76 +#define ANDROID_KEYCODE_SOFT_LEFT 1 +#define ANDROID_KEYCODE_SOFT_RIGHT 2 +#define ANDROID_KEYCODE_SPACE 62 +#define ANDROID_KEYCODE_STAR 17 +#define ANDROID_KEYCODE_SYM 63 +#define ANDROID_KEYCODE_TAB 61 + +#define ANDROID_KEYCODE_UNKWON -1 + +#include + +typedef struct _JavaEnvTh { + JNIEnv * env; + u32 javaThreadId; + jobject cbk_obj; + jmethodID cbk_displayMessage; + jmethodID cbk_onProgress; + jmethodID cbk_showKeyboard; + jmethodID cbk_setCaption; + jmethodID cbk_onLog; +} JavaEnvTh; + + +//--------------------------------------------------------------------------------------------------- +//--------------------------------------------------------------------------------------------------- +class CNativeWrapper{ + + private: + void* m_window; + void* m_session; + + GF_User *GetUser() { return &m_user; } + GF_Terminal *m_term; + + /* + * Callback management + */ + JavaEnvTh mainJavaEnv; + + GF_Mutex *m_mx; + GF_User m_user; + GF_SystemRTInfo m_rti; + + int do_log; + private: + char m_cfg_dir[GF_MAX_PATH]; + char m_modules_dir[GF_MAX_PATH]; + char m_cache_dir[GF_MAX_PATH]; + char m_font_dir[GF_MAX_PATH]; + void setJavaEnv(JavaEnvTh * envToSet, JNIEnv *env, jobject callback); + private: + void SetupLogs(); + void Shutdown(); + void DisplayRTI(); + protected: + JavaEnvTh * getEnv(); + + public: + CNativeWrapper(); + ~CNativeWrapper(); + int init(JNIEnv * env, void * bitmap, jobject * callback, int width, int height, const char * cfg_dir, const char * modules_dir, const char * cache_dir, const char * font_dir, const char * urlToLoad); + + int connect(const char *url); + void disconnect(); + void step(void * env, void * bitmap); + void resize(int w, int h); + void setAudioEnvironment(JavaVM* javaVM); + + void onMouseDown(float x, float y); + void onMouseUp(float x, float y); + void onMouseMove(float x, float y); + void onKeyPress(int keycode, int rawkeycode, int up, int flag, int unicode); + void translate_key(ANDROID_KEYCODE keycode, GF_EventKey *evt); + void navigate( GF_Event* evt); + void setGpacPreference( const char * category, const char * name, const char * value); + public: + int MessageBox(const char* msg, const char* title, GF_Err status); + int Quit(int code); + GF_Config *create_default_config(char *file_path, char *file_name); + + static void on_gpac_log(void *cbk, u32 ll, u32 lm, const char *fmt, va_list list); + static Bool GPAC_EventProc(void *cbk, GF_Event *evt); + void progress_cbk(const char *title, u64 done, u64 total); + static void Osmo4_progress_cbk(const void *usr, const char *title, u64 done, u64 total); + + private: +#ifdef DEBUG_MODE + FILE *debug_f; +#endif + void debug_log(const char* msg); + +}; + diff --git a/applications/osmo4_android/jni/wrapper_jni.c b/applications/osmo4_android/jni/wrapper_jni.c index 48d9c27..e9bcd0b 100644 --- a/applications/osmo4_android/jni/wrapper_jni.c +++ b/applications/osmo4_android/jni/wrapper_jni.c @@ -24,11 +24,11 @@ extern "C" { // __android_log_print(ANDROID_LOG_VERBOSE, jniTAG, "Handle = %p", wr); /* - * Class: com_artemis_Osmo4_GPACInstance + * Class: com_gpac_Osmo4_GPACInstance * Method: createInstance - * Signature: (Lcom/artemis/Osmo4/GpacCallback;IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I + * Signature: (Lcom/gpac/Osmo4/GpacCallback;IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I */ -JNIEXPORT jlong JNICALL Java_com_artemis_Osmo4_GPACInstance_createInstance(JNIEnv * env, jclass obj, jobject callback, jint width, jint height, jstring cfg_dir, jstring modules_dir, jstring cache_dir, jstring font_dir, jstring url_to_open) +JNIEXPORT jlong JNICALL Java_com_gpac_Osmo4_GPACInstance_createInstance(JNIEnv * env, jclass obj, jobject callback, jint width, jint height, jstring cfg_dir, jstring modules_dir, jstring cache_dir, jstring font_dir, jstring url_to_open) { jboolean isCopy; const char * s1 = env->GetStringUTFChars(cfg_dir, &isCopy); @@ -66,7 +66,7 @@ JNIEXPORT jlong JNICALL Java_com_artemis_Osmo4_GPACInstance_createInstance(JNIEn return (jlong) gpac_obj; } //----------------------------------- -JNIEXPORT void JNICALL Java_com_artemis_Osmo4_GPACInstance_gpacconnect(JNIEnv * env, jobject obj, jstring fileName) +JNIEXPORT void JNICALL Java_com_gpac_Osmo4_GPACInstance_gpacconnect(JNIEnv * env, jobject obj, jstring fileName) { CAST_HANDLE(wr); jniLOGV("connect::start"); @@ -83,7 +83,7 @@ JNIEXPORT void JNICALL Java_com_artemis_Osmo4_GPACInstance_gpacconnect(JNIEnv * jniLOGV("connect::end"); } //----------------------------------- -JNIEXPORT void JNICALL Java_com_artemis_Osmo4_GPACInstance_gpacdisconnect(JNIEnv * env, jobject obj){ +JNIEXPORT void JNICALL Java_com_gpac_Osmo4_GPACInstance_gpacdisconnect(JNIEnv * env, jobject obj){ CAST_HANDLE(wr); jniLOGV("disconnect::start"); if (wr) @@ -91,7 +91,7 @@ JNIEXPORT void JNICALL Java_com_artemis_Osmo4_GPACInstance_gpacdisconnect(JNIEnv jniLOGV("disconnect::end"); } //----------------------------------- -JNIEXPORT void JNICALL Java_com_artemis_Osmo4_GPACInstance_gpacfree(JNIEnv * env, jobject obj) +JNIEXPORT void JNICALL Java_com_gpac_Osmo4_GPACInstance_gpacfree(JNIEnv * env, jobject obj) { CAST_HANDLE(wr); jniLOGV("free::start"); @@ -100,7 +100,7 @@ JNIEXPORT void JNICALL Java_com_artemis_Osmo4_GPACInstance_gpacfree(JNIEnv * env jniLOGV("free::end"); } //----------------------------------- -JNIEXPORT void JNICALL Java_com_artemis_Osmo4_GPACInstance_gpacrender (JNIEnv * env, jobject obj) +JNIEXPORT void JNICALL Java_com_gpac_Osmo4_GPACInstance_gpacrender (JNIEnv * env, jobject obj) { CAST_HANDLE(wr); //jniLOGV("render::start"); @@ -109,7 +109,7 @@ JNIEXPORT void JNICALL Java_com_artemis_Osmo4_GPACInstance_gpacrender (JNIEnv * //jniLOGV("render::end"); } //----------------------------------- -JNIEXPORT void JNICALL Java_com_artemis_Osmo4_GPACInstance_gpacresize (JNIEnv * env, jobject obj, jint width, jint height) +JNIEXPORT void JNICALL Java_com_gpac_Osmo4_GPACInstance_gpacresize (JNIEnv * env, jobject obj, jint width, jint height) { CAST_HANDLE(wr); jniLOGV("resize::start"); @@ -118,7 +118,7 @@ JNIEXPORT void JNICALL Java_com_artemis_Osmo4_GPACInstance_gpacresize (JNIEnv * jniLOGV("resize::end"); } //----------------------------------- -JNIEXPORT void JNICALL Java_com_artemis_Osmo4_GPACInstance_gpaceventmousedown(JNIEnv * env, jobject obj, jfloat x, jfloat y){ +JNIEXPORT void JNICALL Java_com_gpac_Osmo4_GPACInstance_gpaceventmousedown(JNIEnv * env, jobject obj, jfloat x, jfloat y){ CAST_HANDLE(wr); jniLOGV("mouseDown::start"); if (wr) @@ -126,7 +126,7 @@ JNIEXPORT void JNICALL Java_com_artemis_Osmo4_GPACInstance_gpaceventmousedown(JN jniLOGV("mouseDown::end"); } //----------------------------------- -JNIEXPORT void JNICALL Java_com_artemis_Osmo4_GPACInstance_gpaceventmouseup(JNIEnv * env, jobject obj, jfloat x, jfloat y){ +JNIEXPORT void JNICALL Java_com_gpac_Osmo4_GPACInstance_gpaceventmouseup(JNIEnv * env, jobject obj, jfloat x, jfloat y){ CAST_HANDLE(wr); jniLOGV("mouseUp::start"); if (wr) @@ -134,7 +134,7 @@ JNIEXPORT void JNICALL Java_com_artemis_Osmo4_GPACInstance_gpaceventmouseup(JNIE jniLOGV("mouseUp::end"); } //----------------------------------- -JNIEXPORT void JNICALL Java_com_artemis_Osmo4_GPACInstance_gpaceventmousemove(JNIEnv * env, jobject obj, jfloat x, jfloat y){ +JNIEXPORT void JNICALL Java_com_gpac_Osmo4_GPACInstance_gpaceventmousemove(JNIEnv * env, jobject obj, jfloat x, jfloat y){ CAST_HANDLE(wr); jniLOGV("mouseMouv::start"); if (wr) @@ -142,21 +142,32 @@ JNIEXPORT void JNICALL Java_com_artemis_Osmo4_GPACInstance_gpaceventmousemove(JN jniLOGV("mouseMouv::end"); } //----------------------------------- -JNIEXPORT void JNICALL Java_com_artemis_Osmo4_GPACInstance_gpaceventkeypress(JNIEnv * env, jobject obj, jint keycode, jint rawkeycode, jint up, jint flag, jint unicode){ +JNIEXPORT void JNICALL Java_com_gpac_Osmo4_GPACInstance_gpaceventkeypress(JNIEnv * env, jobject obj, jint keycode, jint rawkeycode, jint up, jint flag, jint unicode){ CAST_HANDLE(wr); jniLOGV("keypress::start"); if (wr) wr->onKeyPress(keycode, rawkeycode, up, flag, unicode); jniLOGV("keypress::end"); } - +/* +JNIEXPORT void JNICALL Java_com_gpac_Osmo4_GPACInstance_getdpi(JNIEnv * env, jobject obj, jint keycode,jfloat x, jfloat y){ + CAST_HANDLE(wr); + jniLOGV("get DPI::start"); + jclass cls = (*env)->GetObjectClass(env, obj); + jmethodID mid = (*env)->GetStaticMethodID(env, cls, "getdpi", "(FF)V"); + if (mid == 0) + return; + (*env)->CallStaticIntMethod(env, cls, mid, x,y); + jniLOGV("get DPI::end"); +} +*/ /* - * Class: com_artemis_Osmo4_GPACInstance + * Class: com_gpac_Osmo4_GPACInstance * Method: setGpacPreference * Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V */ -JNIEXPORT void JNICALL Java_com_artemis_Osmo4_GPACInstance_setGpacPreference +JNIEXPORT void JNICALL Java_com_gpac_Osmo4_GPACInstance_setGpacPreference (JNIEnv * env, jobject obj, jstring category, jstring name, jstring value){ CAST_HANDLE(wr); jboolean isCopy; diff --git a/applications/osmo4_android/local.properties b/applications/osmo4_android/local.properties deleted file mode 100644 index 3ec4ddb..0000000 --- a/applications/osmo4_android/local.properties +++ /dev/null @@ -1,10 +0,0 @@ -# This file is automatically generated by Android Tools. -# Do not modify this file -- YOUR CHANGES WILL BE ERASED! -# -# This file must *NOT* be checked in Version Control Systems, -# as it contains information specific to your local configuration. - -# location of the SDK. This is only used by Ant -# For customization when using a Version Control System, please read the -# header note. -sdk.dir=/opt/android-sdk diff --git a/applications/osmo4_android/src/com/artemis/Osmo4/BitmapView.java b/applications/osmo4_android/src/com/gpac/Osmo4/BitmapView.java similarity index 97% rename from applications/osmo4_android/src/com/artemis/Osmo4/BitmapView.java rename to applications/osmo4_android/src/com/gpac/Osmo4/BitmapView.java index 08b6211..d851a82 100644 --- a/applications/osmo4_android/src/com/artemis/Osmo4/BitmapView.java +++ b/applications/osmo4_android/src/com/gpac/Osmo4/BitmapView.java @@ -5,7 +5,7 @@ // * // * // */ -//package com.artemis.Osmo4; +//package com.gpac.Osmo4; // //import android.content.Context; //import android.graphics.Bitmap; @@ -15,7 +15,7 @@ // ///** // * -// * @version $Revision: 2822 $ +// * @version $Revision: 3371 $ // * // */ //@Deprecated diff --git a/applications/osmo4_android/src/com/artemis/Osmo4/GPACInstance.java b/applications/osmo4_android/src/com/gpac/Osmo4/GPACInstance.java similarity index 96% rename from applications/osmo4_android/src/com/artemis/Osmo4/GPACInstance.java rename to applications/osmo4_android/src/com/gpac/Osmo4/GPACInstance.java index 2f731a5..863a347 100644 --- a/applications/osmo4_android/src/com/artemis/Osmo4/GPACInstance.java +++ b/applications/osmo4_android/src/com/gpac/Osmo4/GPACInstance.java @@ -1,9 +1,9 @@ /** - * $URL: http://gpac.svn.sourceforge.net/svnroot/gpac/trunk/gpac/applications/osmo4_android/src/com/artemis/Osmo4/GPACInstance.java $ + * $URL: http://gpac.svn.sourceforge.net/svnroot/gpac/trunk/gpac/applications/osmo4_android/src/com/gpac/Osmo4/GPACInstance.java $ * - * $LastChangedBy: bad_sheep $ - $LastChangedDate: 2011-04-20 12:31:24 -0400 (Wed, 20 Apr 2011) $ + * $LastChangedBy: enst_devs $ - $LastChangedDate: 2011-07-05 12:35:26 -0400 (Tue, 05 Jul 2011) $ */ -package com.artemis.Osmo4; +package com.gpac.Osmo4; import java.io.File; import java.io.PrintStream; @@ -16,7 +16,7 @@ import android.view.KeyEvent; import android.view.MotionEvent; /** - * @version $Revision: 2972 $ + * @version $Revision: 3371 $ * */ public class GPACInstance implements GPACInstanceInterface { @@ -83,7 +83,7 @@ public class GPACInstance implements GPACInstanceInterface { if (!exceptions.isEmpty()) { try { PrintStream out = new PrintStream(config.getGpacConfigDirectory() + "debug_libs.txt", "UTF-8"); //$NON-NLS-1$//$NON-NLS-2$ - out.println("$Revision: 2972 $"); //$NON-NLS-1$ + out.println("$Revision: 3371 $"); //$NON-NLS-1$ out.println(new Date()); out.println("\n*** Configuration\n"); //$NON-NLS-1$ out.println(config.getConfigAsText()); @@ -361,7 +361,7 @@ public class GPACInstance implements GPACInstanceInterface { } /** - * @see com.artemis.Osmo4.GPACInstanceInterface#setGpacPreference(String, String, String) + * @see com.gpac.Osmo4.GPACInstanceInterface#setGpacPreference(String, String, String) */ @Override public native void setGpacPreference(String category, String name, String value); diff --git a/applications/osmo4_android/src/com/artemis/Osmo4/GPACInstanceInterface.java b/applications/osmo4_android/src/com/gpac/Osmo4/GPACInstanceInterface.java similarity index 80% rename from applications/osmo4_android/src/com/artemis/Osmo4/GPACInstanceInterface.java rename to applications/osmo4_android/src/com/gpac/Osmo4/GPACInstanceInterface.java index 6892ab5..fa11124 100644 --- a/applications/osmo4_android/src/com/artemis/Osmo4/GPACInstanceInterface.java +++ b/applications/osmo4_android/src/com/gpac/Osmo4/GPACInstanceInterface.java @@ -1,20 +1,20 @@ /** - * $URL: http://gpac.svn.sourceforge.net/svnroot/gpac/trunk/gpac/applications/osmo4_android/src/com/artemis/Osmo4/GPACInstanceInterface.java $ + * $URL: http://gpac.svn.sourceforge.net/svnroot/gpac/trunk/gpac/applications/osmo4_android/src/com/gpac/Osmo4/GPACInstanceInterface.java $ * - * $LastChangedBy: bad_sheep $ - $LastChangedDate: 2011-04-18 09:33:58 -0400 (Mon, 18 Apr 2011) $ + * $LastChangedBy: enst_devs $ - $LastChangedDate: 2011-07-05 12:35:26 -0400 (Tue, 05 Jul 2011) $ */ -package com.artemis.Osmo4; +package com.gpac.Osmo4; /** * @copyright RTL Group 2008 - * @author RTL Group DTIT software development team (last changed by $LastChangedBy: bad_sheep $) - * @version $Revision: 2935 $ + * @author RTL Group DTIT software development team (last changed by $LastChangedBy: enst_devs $) + * @version $Revision: 3371 $ * */ public interface GPACInstanceInterface { /** - * @version $Revision: 2935 $ + * @version $Revision: 3371 $ * */ public static class GpacInstanceException extends Exception { diff --git a/applications/osmo4_android/src/com/artemis/Osmo4/GpacCallback.java b/applications/osmo4_android/src/com/gpac/Osmo4/GpacCallback.java similarity index 97% rename from applications/osmo4_android/src/com/artemis/Osmo4/GpacCallback.java rename to applications/osmo4_android/src/com/gpac/Osmo4/GpacCallback.java index 315c973..1aa07d0 100644 --- a/applications/osmo4_android/src/com/artemis/Osmo4/GpacCallback.java +++ b/applications/osmo4_android/src/com/gpac/Osmo4/GpacCallback.java @@ -1,14 +1,14 @@ /** - * $URL: http://gpac.svn.sourceforge.net/svnroot/gpac/trunk/gpac/applications/osmo4_android/src/com/artemis/Osmo4/GpacCallback.java $ + * $URL: http://gpac.svn.sourceforge.net/svnroot/gpac/trunk/gpac/applications/osmo4_android/src/com/gpac/Osmo4/GpacCallback.java $ * - * $LastChangedBy: bad_sheep $ - $LastChangedDate: 2011-04-11 02:42:42 -0400 (Mon, 11 Apr 2011) $ + * $LastChangedBy: enst_devs $ - $LastChangedDate: 2011-07-05 12:35:26 -0400 (Tue, 05 Jul 2011) $ */ -package com.artemis.Osmo4; +package com.gpac.Osmo4; /** * Interface to implement by Java Objects to listen for callbacks from GPAC native code * - * @version $Revision: 2888 $ + * @version $Revision: 3371 $ * */ public interface GpacCallback { @@ -16,7 +16,7 @@ public interface GpacCallback { /** * GPAC Error codes * - * @version $Revision: 2888 $ + * @version $Revision: 3371 $ * */ public enum GF_Err { @@ -141,7 +141,7 @@ public interface GpacCallback { /** * Mapping between GPAC Log Modules and Java symbols * - * @version $Revision: 2888 $ + * @version $Revision: 3371 $ * */ public enum GF_Log_Module implements Comparable { diff --git a/applications/osmo4_android/src/com/artemis/Osmo4/GpacConfig.java b/applications/osmo4_android/src/com/gpac/Osmo4/GpacConfig.java similarity index 93% rename from applications/osmo4_android/src/com/artemis/Osmo4/GpacConfig.java rename to applications/osmo4_android/src/com/gpac/Osmo4/GpacConfig.java index a0d0a69..6ab692a 100644 --- a/applications/osmo4_android/src/com/artemis/Osmo4/GpacConfig.java +++ b/applications/osmo4_android/src/com/gpac/Osmo4/GpacConfig.java @@ -1,9 +1,9 @@ /** - * $URL: http://gpac.svn.sourceforge.net/svnroot/gpac/trunk/gpac/applications/osmo4_android/src/com/artemis/Osmo4/GpacConfig.java $ + * $URL: http://gpac.svn.sourceforge.net/svnroot/gpac/trunk/gpac/applications/osmo4_android/src/com/gpac/Osmo4/GpacConfig.java $ * - * $LastChangedBy: bad_sheep $ - $LastChangedDate: 2011-04-20 08:42:10 -0400 (Wed, 20 Apr 2011) $ + * $LastChangedBy: enst_devs $ - $LastChangedDate: 2011-07-05 12:35:26 -0400 (Tue, 05 Jul 2011) $ */ -package com.artemis.Osmo4; +package com.gpac.Osmo4; import java.io.File; import android.content.Context; @@ -14,8 +14,8 @@ import android.util.Log; /** * This class handles all GPAC configuration directories * - * @author Pierre Souchay (VizionR SAS) (last changed by $LastChangedBy: bad_sheep $) - * @version $Revision: 2964 $ + * @author Pierre Souchay (VizionR SAS) (last changed by $LastChangedBy: enst_devs $) + * @version $Revision: 3371 $ * */ public class GpacConfig { @@ -34,12 +34,12 @@ public class GpacConfig { Log.v(LOG_GPAC_CONFIG, "Using directory " + gpacConfigDirectory + " for osmo"); //$NON-NLS-1$ //$NON-NLS-2$ gpacCacheDirectory = new File(osmo, "cache").getAbsolutePath() + '/'; //$NON-NLS-1$ Log.v(LOG_GPAC_CONFIG, "Using directory " + gpacCacheDirectory + " for cache"); //$NON-NLS-1$ //$NON-NLS-2$ - //gpacModulesDirectory = (new File(Environment.getDataDirectory() + "/data", "com.artemis.Osmo4")).getAbsolutePath() + '/'; //$NON-NLS-1$ //$NON-NLS-2$ + //gpacModulesDirectory = (new File(Environment.getDataDirectory() + "/data", "com.gpac.Osmo4")).getAbsolutePath() + '/'; //$NON-NLS-1$ //$NON-NLS-2$ //Log.v(LOG_GPAC_CONFIG, "Using directory " + gpacModulesDirectory + " for modules"); //$NON-NLS-1$ //$NON-NLS-2$ String dataDir; try { if (context == null || context.getPackageManager() == null) { - dataDir = Environment.getDataDirectory() + "/data/com.artemis.Osmo4/"; //$NON-NLS-1$ + dataDir = Environment.getDataDirectory() + "/data/com.gpac.Osmo4/"; //$NON-NLS-1$ Log.e(LOG_GPAC_CONFIG, "Cannot get context or PackageManager, using default directory=" + dataDir); //$NON-NLS-1$ } else dataDir = context.getPackageManager().getApplicationInfo(context.getPackageName(), 0).dataDir; diff --git a/applications/osmo4_android/src/com/artemis/Osmo4/Osmo4.java b/applications/osmo4_android/src/com/gpac/Osmo4/Osmo4.java similarity index 97% rename from applications/osmo4_android/src/com/artemis/Osmo4/Osmo4.java rename to applications/osmo4_android/src/com/gpac/Osmo4/Osmo4.java index c234886..94ba4e3 100644 --- a/applications/osmo4_android/src/com/artemis/Osmo4/Osmo4.java +++ b/applications/osmo4_android/src/com/gpac/Osmo4/Osmo4.java @@ -2,10 +2,10 @@ * Osmo on Android * Aug/2010 * NGO Van Luyen - * $Id: Osmo4.java 2964 2011-04-20 12:42:10Z bad_sheep $ + * $Id: Osmo4.java 3371 2011-07-05 16:35:26Z enst_devs $ * */ -package com.artemis.Osmo4; +package com.gpac.Osmo4; import java.io.BufferedReader; import java.io.BufferedWriter; @@ -53,13 +53,13 @@ import android.view.inputmethod.InputMethodManager; import android.widget.ArrayAdapter; import android.widget.AutoCompleteTextView; import android.widget.Toast; -import com.artemis.Osmo4.extra.FileChooserActivity; -import com.artemis.Osmo4.logs.GpacLogger; +import com.gpac.Osmo4.extra.FileChooserActivity; +import com.gpac.Osmo4.logs.GpacLogger; /** * The main Osmo4 activity, used to launch everything * - * @version $Revision: 2964 $ + * @version $Revision: 3371 $ * */ public class Osmo4 extends Activity implements GpacCallback { @@ -590,7 +590,7 @@ public class Osmo4 extends Activity implements GpacCallback { // long start = System.currentTimeMillis(); // byte buffer[] = new byte[1024]; // int[] ids = getAllRawResources(); - // String currentRevision = "$Revision: 2964 $"; //$NON-NLS-1$ + // String currentRevision = "$Revision: 3371 $"; //$NON-NLS-1$ // File revisionFile = gpacConfig.getGpacLastRevFile(); // boolean fastStartup = false; // // We check if we already copied all the modules once without error... @@ -768,7 +768,7 @@ public class Osmo4 extends Activity implements GpacCallback { } /** - * @see com.artemis.Osmo4.GpacCallback#displayMessage(String, String, int) + * @see com.gpac.Osmo4.GpacCallback#displayMessage(String, String, int) */ @Override public void displayMessage(final String message, final String title, final int status) { @@ -808,7 +808,7 @@ public class Osmo4 extends Activity implements GpacCallback { } /** - * @see com.artemis.Osmo4.GpacCallback#onLog(int, int, String) + * @see com.gpac.Osmo4.GpacCallback#onLog(int, int, String) */ @Override public void onLog(int level, int module, String message) { @@ -816,7 +816,7 @@ public class Osmo4 extends Activity implements GpacCallback { } /** - * @see com.artemis.Osmo4.GpacCallback#onProgress(java.lang.String, int, int) + * @see com.gpac.Osmo4.GpacCallback#onProgress(java.lang.String, int, int) */ @Override public void onProgress(final String msg, final int done, final int total) { @@ -841,7 +841,7 @@ public class Osmo4 extends Activity implements GpacCallback { } /** - * @see com.artemis.Osmo4.GpacCallback#onGPACReady() + * @see com.gpac.Osmo4.GpacCallback#onGPACReady() */ @Override public void onGPACReady() { @@ -850,7 +850,7 @@ public class Osmo4 extends Activity implements GpacCallback { } /** - * @see com.artemis.Osmo4.GpacCallback#onGPACError(java.lang.Throwable) + * @see com.gpac.Osmo4.GpacCallback#onGPACError(java.lang.Throwable) */ @Override public void onGPACError(final Throwable e) { @@ -871,7 +871,7 @@ public class Osmo4 extends Activity implements GpacCallback { sb.append("Description: "); //$NON-NLS-1$ sb.append(e.getLocalizedMessage()); sb.append('\n'); - sb.append("Revision: $Revision: 2964 $"); //$NON-NLS-1$ + sb.append("Revision: $Revision: 3371 $"); //$NON-NLS-1$ sb.append("\nConfiguration information :\n") //$NON-NLS-1$ .append(gpacConfig.getConfigAsText()); builder.setMessage(sb.toString()); @@ -903,7 +903,7 @@ public class Osmo4 extends Activity implements GpacCallback { } /** - * @see com.artemis.Osmo4.GpacCallback#setCaption(java.lang.String) + * @see com.gpac.Osmo4.GpacCallback#setCaption(java.lang.String) */ @Override public void setCaption(final String newCaption) { @@ -926,7 +926,7 @@ public class Osmo4 extends Activity implements GpacCallback { } /** - * @see com.artemis.Osmo4.GpacCallback#showKeyboard(boolean) + * @see com.gpac.Osmo4.GpacCallback#showKeyboard(boolean) */ @Override public void showKeyboard(boolean showKeyboard) { diff --git a/applications/osmo4_android/src/com/artemis/Osmo4/Osmo4GLSurfaceView.java b/applications/osmo4_android/src/com/gpac/Osmo4/Osmo4GLSurfaceView.java similarity index 93% rename from applications/osmo4_android/src/com/artemis/Osmo4/Osmo4GLSurfaceView.java rename to applications/osmo4_android/src/com/gpac/Osmo4/Osmo4GLSurfaceView.java index ee41d71..005d83b 100644 --- a/applications/osmo4_android/src/com/artemis/Osmo4/Osmo4GLSurfaceView.java +++ b/applications/osmo4_android/src/com/gpac/Osmo4/Osmo4GLSurfaceView.java @@ -1,4 +1,4 @@ -package com.artemis.Osmo4; +package com.gpac.Osmo4; import android.content.Context; import android.opengl.GLSurfaceView; @@ -9,7 +9,7 @@ import android.view.MotionEvent; /** * The view represented the blitted contents by libgpac * - * @version $Revision: 2942 $ + * @version $Revision: 3371 $ * */ public class Osmo4GLSurfaceView extends GLSurfaceView implements GPACInstanceInterface { @@ -139,7 +139,7 @@ public class Osmo4GLSurfaceView extends GLSurfaceView implements GPACInstanceInt } /** - * @see com.artemis.Osmo4.GPACInstanceInterface#connect(java.lang.String) + * @see com.gpac.Osmo4.GPACInstanceInterface#connect(java.lang.String) */ @Override public void connect(final String url) { @@ -155,7 +155,7 @@ public class Osmo4GLSurfaceView extends GLSurfaceView implements GPACInstanceInt } /** - * @see com.artemis.Osmo4.GPACInstanceInterface#disconnect() + * @see com.gpac.Osmo4.GPACInstanceInterface#disconnect() */ @Override public void disconnect() { @@ -171,7 +171,7 @@ public class Osmo4GLSurfaceView extends GLSurfaceView implements GPACInstanceInt } /** - * @see com.artemis.Osmo4.GPACInstanceInterface#destroy() + * @see com.gpac.Osmo4.GPACInstanceInterface#destroy() */ @Override public void destroy() { @@ -187,7 +187,7 @@ public class Osmo4GLSurfaceView extends GLSurfaceView implements GPACInstanceInt } /** - * @see com.artemis.Osmo4.GPACInstanceInterface#setGpacPreference(String, String, String) + * @see com.gpac.Osmo4.GPACInstanceInterface#setGpacPreference(String, String, String) */ @Override public void setGpacPreference(final String category, final String name, final String value) { diff --git a/applications/osmo4_android/src/com/artemis/Osmo4/Osmo4Renderer.java b/applications/osmo4_android/src/com/gpac/Osmo4/Osmo4Renderer.java similarity index 94% rename from applications/osmo4_android/src/com/artemis/Osmo4/Osmo4Renderer.java rename to applications/osmo4_android/src/com/gpac/Osmo4/Osmo4Renderer.java index 4da698a..9938457 100644 --- a/applications/osmo4_android/src/com/artemis/Osmo4/Osmo4Renderer.java +++ b/applications/osmo4_android/src/com/gpac/Osmo4/Osmo4Renderer.java @@ -1,4 +1,4 @@ -package com.artemis.Osmo4; +package com.gpac.Osmo4; import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.opengles.GL10; @@ -8,7 +8,7 @@ import android.util.Log; /** * The renderer * - * @version $Revision: 2950 $ + * @version $Revision: 3371 $ * */ public class Osmo4Renderer implements GLSurfaceView.Renderer { @@ -23,7 +23,7 @@ public class Osmo4Renderer implements GLSurfaceView.Renderer { try { Log.i(LOG_RENDERER, "Creating instance from thread " + Thread.currentThread()); //$NON-NLS-1$ instance = new GPACInstance(callback, 320, 430, gpacConfig, urlToLoad); - } catch (com.artemis.Osmo4.GPACInstanceInterface.GpacInstanceException e) { + } catch (com.gpac.Osmo4.GPACInstanceInterface.GpacInstanceException e) { Log.e(LOG_RENDERER, "Failed to create new GPAC instance !"); //$NON-NLS-1$ instance = null; callback.onGPACError(e); diff --git a/applications/osmo4_android/src/com/artemis/Osmo4/extra/FileArrayAdapter.java b/applications/osmo4_android/src/com/gpac/Osmo4/extra/FileArrayAdapter.java similarity index 87% rename from applications/osmo4_android/src/com/artemis/Osmo4/extra/FileArrayAdapter.java rename to applications/osmo4_android/src/com/gpac/Osmo4/extra/FileArrayAdapter.java index da0fd36..4d421e9 100644 --- a/applications/osmo4_android/src/com/artemis/Osmo4/extra/FileArrayAdapter.java +++ b/applications/osmo4_android/src/com/gpac/Osmo4/extra/FileArrayAdapter.java @@ -1,9 +1,9 @@ /** - * $URL: http://gpac.svn.sourceforge.net/svnroot/gpac/trunk/gpac/applications/osmo4_android/src/com/artemis/Osmo4/extra/FileArrayAdapter.java $ + * $URL: http://gpac.svn.sourceforge.net/svnroot/gpac/trunk/gpac/applications/osmo4_android/src/com/gpac/Osmo4/extra/FileArrayAdapter.java $ * - * $LastChangedBy: bad_sheep $ - $LastChangedDate: 2011-04-06 10:23:04 -0400 (Wed, 06 Apr 2011) $ + * $LastChangedBy: enst_devs $ - $LastChangedDate: 2011-07-05 12:35:26 -0400 (Tue, 05 Jul 2011) $ */ -package com.artemis.Osmo4.extra; +package com.gpac.Osmo4.extra; import java.io.File; import java.util.List; @@ -13,12 +13,12 @@ import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.TextView; -import com.artemis.Osmo4.R; +import com.gpac.Osmo4.R; /** * Class that contains the list of file for given directory * - * @version $Revision: 2864 $ + * @version $Revision: 3371 $ * */ public class FileArrayAdapter extends ArrayAdapter { diff --git a/applications/osmo4_android/src/com/artemis/Osmo4/extra/FileChooserActivity.java b/applications/osmo4_android/src/com/gpac/Osmo4/extra/FileChooserActivity.java similarity index 91% rename from applications/osmo4_android/src/com/artemis/Osmo4/extra/FileChooserActivity.java rename to applications/osmo4_android/src/com/gpac/Osmo4/extra/FileChooserActivity.java index 0c1aa5d..bae7171 100644 --- a/applications/osmo4_android/src/com/artemis/Osmo4/extra/FileChooserActivity.java +++ b/applications/osmo4_android/src/com/gpac/Osmo4/extra/FileChooserActivity.java @@ -1,9 +1,9 @@ /** - * $URL: http://gpac.svn.sourceforge.net/svnroot/gpac/trunk/gpac/applications/osmo4_android/src/com/artemis/Osmo4/extra/FileChooserActivity.java $ + * $URL: http://gpac.svn.sourceforge.net/svnroot/gpac/trunk/gpac/applications/osmo4_android/src/com/gpac/Osmo4/extra/FileChooserActivity.java $ * - * $LastChangedBy: bad_sheep $ - $LastChangedDate: 2011-04-06 10:23:04 -0400 (Wed, 06 Apr 2011) $ + * $LastChangedBy: enst_devs $ - $LastChangedDate: 2011-07-05 12:35:26 -0400 (Tue, 05 Jul 2011) $ */ -package com.artemis.Osmo4.extra; +package com.gpac.Osmo4.extra; import java.io.File; import java.util.ArrayList; @@ -15,10 +15,10 @@ import android.net.Uri; import android.os.Bundle; import android.view.View; import android.widget.ListView; -import com.artemis.Osmo4.R; +import com.gpac.Osmo4.R; /** - * @version $Revision: 2864 $ + * @version $Revision: 3371 $ * */ public class FileChooserActivity extends ListActivity { diff --git a/applications/osmo4_android/src/com/artemis/Osmo4/extra/FileEntry.java b/applications/osmo4_android/src/com/gpac/Osmo4/extra/FileEntry.java similarity index 80% rename from applications/osmo4_android/src/com/artemis/Osmo4/extra/FileEntry.java rename to applications/osmo4_android/src/com/gpac/Osmo4/extra/FileEntry.java index 9138a0a..ca0b2c1 100644 --- a/applications/osmo4_android/src/com/artemis/Osmo4/extra/FileEntry.java +++ b/applications/osmo4_android/src/com/gpac/Osmo4/extra/FileEntry.java @@ -1,14 +1,14 @@ /** - * $URL: http://gpac.svn.sourceforge.net/svnroot/gpac/trunk/gpac/applications/osmo4_android/src/com/artemis/Osmo4/extra/FileEntry.java $ + * $URL: http://gpac.svn.sourceforge.net/svnroot/gpac/trunk/gpac/applications/osmo4_android/src/com/gpac/Osmo4/extra/FileEntry.java $ * - * $LastChangedBy: bad_sheep $ - $LastChangedDate: 2011-04-06 10:23:04 -0400 (Wed, 06 Apr 2011) $ + * $LastChangedBy: enst_devs $ - $LastChangedDate: 2011-07-05 12:35:26 -0400 (Tue, 05 Jul 2011) $ */ -package com.artemis.Osmo4.extra; +package com.gpac.Osmo4.extra; import java.io.File; /** - * @version $Revision: 2864 $ + * @version $Revision: 3371 $ * */ public class FileEntry implements Comparable { diff --git a/applications/osmo4_android/src/com/artemis/Osmo4/logs/GpacLogger.java b/applications/osmo4_android/src/com/gpac/Osmo4/logs/GpacLogger.java similarity index 91% rename from applications/osmo4_android/src/com/artemis/Osmo4/logs/GpacLogger.java rename to applications/osmo4_android/src/com/gpac/Osmo4/logs/GpacLogger.java index 6a93ffe..d879b80 100644 --- a/applications/osmo4_android/src/com/artemis/Osmo4/logs/GpacLogger.java +++ b/applications/osmo4_android/src/com/gpac/Osmo4/logs/GpacLogger.java @@ -1,9 +1,9 @@ /** - * $URL: http://gpac.svn.sourceforge.net/svnroot/gpac/trunk/gpac/applications/osmo4_android/src/com/artemis/Osmo4/logs/GpacLogger.java $ + * $URL: http://gpac.svn.sourceforge.net/svnroot/gpac/trunk/gpac/applications/osmo4_android/src/com/gpac/Osmo4/logs/GpacLogger.java $ * - * $LastChangedBy: bad_sheep $ - $LastChangedDate: 2011-04-19 09:16:05 -0400 (Tue, 19 Apr 2011) $ + * $LastChangedBy: enst_devs $ - $LastChangedDate: 2011-07-05 12:35:26 -0400 (Tue, 05 Jul 2011) $ */ -package com.artemis.Osmo4.logs; +package com.gpac.Osmo4.logs; import java.io.BufferedOutputStream; import java.io.File; @@ -13,15 +13,15 @@ import java.util.Date; import java.util.SortedSet; import java.util.TreeSet; import android.util.Log; -import com.artemis.Osmo4.GpacConfig; -import com.artemis.Osmo4.GpacCallback.GF_Log_Module; +import com.gpac.Osmo4.GpacConfig; +import com.gpac.Osmo4.GpacCallback.GF_Log_Module; /** * This class handles logging. * * It will be extended soon to be configurable and enable saving files on disk * - * @version $Revision: 2950 $ + * @version $Revision: 3371 $ * */ public class GpacLogger { @@ -71,7 +71,7 @@ public class GpacLogger { } } if (writer != null) - writer.println("New log $Revision: 2950 $ at " + new Date()); //$NON-NLS-1$ + writer.println("New log $Revision: 3371 $ at " + new Date()); //$NON-NLS-1$ } /** diff --git a/applications/osmo4_ios/Resources/icon.png b/applications/osmo4_ios/Resources/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..13f1dee1cbed855335c048d2321c4f60a5598f0c GIT binary patch literal 7682 zcmV+d9{u5oP)4Tx0C?KfmRC@ec^1X*_kEoMsT%|&G&$$gfaKVKf@BbtrkmWfZPNrXD}y6A z21G^3B%@Zi3CCOyXl!B^SgYmr~mi69!usJJi!YBAOKhp29{tA7GN%k z&z1lHc&rkw5ho`mNmyp?*XLT09reE8RE=Y4+j8%2MS076O=#=v_KzBz!Gf15nRCw z{2&lQAqrLi50W4a#E=E+U^C=F0qll-Pzpz&5~|@OoPj22h0AaaZb3Kn!T=1xD7=IT z_yAJ~f)Eip!a$S|bwmd-LM#zB;*5A90Z1?sg~TF>h!Dv@)*)Mw0;CWrMaq#H~ zxs2REdXR_6Ffxw3MZTaIN<*2bDyoZ`p={I*^+!X|VV`jX90SL~ zncy68zPK7CsMOjIY8s z;IHC)@uT<;1Oh>UphvJH_!6QBDTK9z9fU)KdO{nahcH5zBoc{AL?faTF_6e5N{D&H z1H===OT@dxQQ{{Om84FxBzcpfNkY;VQZeZ`=_2Va={aeNEJM~IJCFm(eDWIdF7i=w z3;7OtlsrX|rRY(dD4~=T%4SLlrH*oyGDvwxrBXGi_SB`+Wa=hr3H229I(3-(nI=aw zq;T|vGiH#JJPRY$TGSz9x_~+4Kigi=Vkh3CS@727P5h|X|g+HkIUYW z9g`!<>B@P@@#S*mD&;!lMi>}Fi{ZiGF}5;}GOjX4nFOXDlfz757BEjTyOI`*f^ zr&H&nuAXj$?l#>f-7!5yJ&so%9L_lWUi97 zY?0og_(ew-jW}sKah=MYhMZZ>vCcm`54mW#a9t`~p1Nwe@?EQ3pSu~jrMR7Nd+l!S zE_QEl|LEc1vEHN26Z7=(%=hf_lJg4lD)oBet?8ZUUF$vJW8<^dr_C4d>+ieAx1XcR z;c;p>6MlAn>;10y)BHpHOZ}e)7zT&~S{9>={TAiEv3%AOvy(_Xa)=(hFK0 z^y^Z>(x9bfOP>W>1g{J33}J+<3^^Y1A=Eu|SLi^Pepp6Wd$@FXOn6QB#|Y1e!ib?r zv&i+4x1yAzlB1fViP7QFRne2nyq4`-HX36SlNZysTyJ^y@*69ZR|r;ISSh`dyYg%- zJ~krucjN`-|jGN$j@b>dw@?H5w{PB3F_`>+-2~G)x31f*)iF*^rlU$OD zlU^lzB$pbd%4f>dlnRshfY>V!owt%loYnTU&Bf zb2sIV{NVFLZJtz~IIn-3V27K>NV%1Jk8RrM+eDW%UPD4sJjA@eu#e-NUYj>yD@%DLC@w=j5Lsl>3x7R_Im~ zR}v~SE1w+=Kic^V`tMnirh(zvE^qA96qs5z>+=e*zf z_7=yMhF?v8J=UtxT6RJH!mf*yi@6tPF6CUBY!kJ;x}11xXQIE)07P-+mhMbYO%x^74=LKc+`>pV6NcKUaTVGiEu~I_^E*{bJdR(U+o^ zQ?K&=l>PJIYyH>f{&M~6_C(~w=o|5ynYTOMDZM-P-uiv}WYFZ34{0B!KIVT?`c(ay z{kii?#Fyt&S<}SnlCK6|TfX^!8=Og-nGtctTmS&T002!$0C;;0fF1?F=mwy)&30h` z06=E@JHTuQ`S(2AmjM947N8CQ0$l;D+W<~)0?=&(kOF`pSAbAgK&`Ci-`|yfH(oYoh?q}8PE*~QkHKPr}`Fc7fd>X+df-VR|05c$& zkyZ>_GNkEKE{iurBt9>eU+~PnjUT56%z0OxeNu6=mPhr+gje4E$3xyXun1FDZwCO} zb9PTNsEHCJ8?Mou)WjfMEn*6Ubq#)9ut`L^00jOAQUUN3!)4}_r>N0WNVpP>Fr_qo zv$SC3u?DHie)aa2GyvQ`s0VIbwe24V`NUNtG4`+X0RVpu19_H) zup!u|3DR0d_Y}iphQ|a&1i=iQ7#b0DA`lo7Kw2>;Tt(H6M4i%-Y2BRRTA|rfR&C!5 z08d>#3RnE)mG2(%fgyb`X~~BGfP2sEe1*?xni3VVcSlPgZs}|Yf|Qa{3fSX-w2>`Q( zosNl%Kltt-XAJ3s8!~{W<;{pFXKbF%!Tf*@pC;JxJXEKdHfvc}v9lUm5;oU*M2$?a z6~SXhv)&jw5q!i5356`3xHw|cj|$_eo2(bPCLv(x>`JD+wu?$nG$mj@e$%>xlK^1m zkUqG+WgcHgw6CwhzL>P+L(F;hX=}jtcV3FKeOaMTSOo!t1%T?5OCNBQ{_Zbay+;q< z_(ny2!>;<|X=$Oe&~!2l1Afzl&op2eI&@7yGNI99K9KUL+6X68c>g0n3hCY0$)x8D!)BYiHK`pEoir#>hj9NrI$%l3YIntbBwQ5f6e3-|WPc_oLP z;e|m>>tN~J<@24kf8V}cmkb+fc695D^X!^wMfSlTceNCvrpDEdq}?egt6(j>ab4vo z0C;NrMY!UTm%h0s?;BKv3G-280=&cWPPAYwM z!Th&3m2F8UK6wuV2MlOvYHF$^q7k~TlVKQankMPG4j}|IO=BV=P16tz2CwhctJgbQ zw{GP*`?kojn|4<&zkSWKCv9G;*lsw(gfeq14F*A^J-7JWf~=g^_ckthW!*+hJG%%= zch!C=gZT0+WB{hD+TI#uBAgyu;MYV4OXs?@#OAc_tqK-B_vl#@hpl|+nex%YhXDY3 z_3DMCOP8upD6}{j3@)-P3zlV(X__!i6P9JcG)*!L1EEl8Q6v&s{QB#!t6sf&;nYUp zs!=}$t|^hfTlw)_Wzp`FcQ~T5%8|%6HSX*aT2!VkpLRz6r2sJbo$Yv_^vrK=u74g_ zbiBW*W^RF@dUp?*>_~}?woa>pMNj`_`Fp~(X{)a?iR-)hQ_;^T-xo5 z^-ccRr8loG-||)S7hl!jp0j(JhSPXuRLI`>0Ue6D*$0DNmpn1#H{(IXBSwrk1aQEB z0nL-W^2#^;e*bf(X|idWWLXvr!yv;j*s`qWCQO*{CIFmy<`=aw``KqPcFY*84gzF=o%1gXb>35&-bal^Y+e)k0JE+Y*KVcd`V0(z!8g8YNG@wei>> z=iNRD?_SY3z6&eI{bq8_2u_Fnl`FRbz`O4rIWL_#dp7PGGa3Nknt`cx-_jjtVy>mZ5QNG!qr%F0u|W^K1pqHDTKtv%JYvKM z0KkeBD;{=TcYRY+6PS7Z+O=yR27uDi(ytuj&N=fiZE!EhqEo6}&A7A51q6X|ECD@j zPYU+?N$~pnW*wWk*6iLkCP-;5YzX$GqHQ7uS2Je3v~W@K%lZu-Jh=7qf&~lUx-I~~ zFpP0kRaG1a1jYe?=XqGPXwhN&wU^1uHsGemUx2OX?@8!ulAc1y&^UrLQstjs4gkNJ zJo)QG&KlVqG-RT7bi@$wX#xpXpV$*@%fryp~A)Yb}ZCwQ0$prgZvjPR`G4+nz&2v!l`I;I3V}qNJpRk2~%-E-5KNad9#C z=+T4o^Yal51_v|qlc`i{PEJnF&j4WK#*HW`DLLdFH?7_Q0I+ql!eQQ=Rt%pe5cE=r zzrX0bBeCd5`avdYPjA`LldBj~VN11@wGRO1FI;#C;Fc}TYjP|W`-4*I#!x5}%+1Y3 zEEeNPBtn5efOK64GsAUVN~Kb0YHC6_9OgtKK{Yis15>HgsaaWBy=!Z0e^XXg_Jwi3 zAl*-{^tPnIm~O(RPe&>E@-0C?@FAPL;7xnu#@9>XP3xhtnfEwJK{wwZ}UqtSbb zXi_W|GxGBCI4diQVzC%SqfvyzVVI@~&-0K>CehT?giKB^HZW zb#-;WJS-r98=hKNGyAlxU5)_4I$#Kb?%F+%I=Xs|37;+q0t62P2vNJcbFaqs?FtJE z0RZuMd>k`h9f?GYcs$OLNQ5Gh2qKXPqR}X_va%45#}SD{5DJA53WX311`!Mf5ekJ6 z4u>fciEuC&G^CVQ$K&yF08mg+aM<~=5Ge(MAV4R;OEw0M9@0*N2+cJa5@2R~a~+)a z?RM?jg_4qzo{r;;_xXI$a5#)mC`7?v5PrWOKA#VUVE{lT&_LI97>3cBtowXE_Nw8$o;`c^tf;6syrt;|GYNp2>qds5$B!CP_XWV*Ty!F4kdg%5IBYcD zzkmO5!!XVWg+lQA{h724nx=t>pp=5=d2k%3HL3#0Y`LK8I@<0~{C+=#5N8}bcyRcU z=BGTDzzSdn1Mo=mjvCSkMQq6o1we;_kH|kNSZlR!m!F^CQA+tEP19gm7H0s35QhM! z(`mS_3n?X(Qeb8fQ7f#bX&DW(rfHB;{-|^3&K(b{NhSRnD<}q}0z8QNqlQ$V4X$E% zilGaF!Ct)h^W~Au?}G*n0stfui2@E(^c%BE>b>TQpD`+~MhUa-u zO0~jfG}{79EoB4NO_#qleUD@egd-To*M2!Gi3V zUArp|0Oy@^4pyyNl}XjQFmp`Tbx=ztq?F2(H{iN%D_929bzQiwdst8at=erFw+n#Q z_W=NJ|0GveUS~@qxQby*g=9FV?5H7cTKM;kuHj3kJVgcp7U8&{v>&Uga=VBENI zx@nq)Ek4F=0W%tG51IMg7BusRWPG&+l9f_045Q1~v12s=c=Upk0RWbCyO@Gbumr(Y ziW|s8Wgz>lqk??!!sgu76Z-N-PeB0)!xceNeW#3{X#8M)b2+f0qJpH90cHj>Q${Np zz_!|J|Fnh8fM)u)XqH;E8{D^Vp8$Y=U-~KTy!{SgLiO=Oh6seDE2+wtg*RWAyZWdg zC%oKzzCn@r+y+;|QOpsY;8SjCj|~euWZFfeQKgh>%=ll%JljGZPK#}WP+K3(JZ%G$ z=Xnj$XjEn1nYVm)Cj&e>W)M7PPPhv7R&+^%NFCEwE32SrZUYQE;VSa!gdn;70whnr z=aNzafEQnUQEHmDPYBTpcsL(y``EU9h(*y1xJU=bx7VaQ|gP$s%=z zAKsZkU7*pERK+H$;)PEgQ)S@g`|d%-`qi$hTeGSi36H@!I$(LuZ8--vM>Fkg+ujMF zzU^e&L)y08`W((|Gkw~^x~>Z$M13li+L?KmRq=Vu@SNLo3 z$P1_Z8YgY2RS1S3ua%;y&XE){G>(yXhUumzWZK1Iu{{9Rwt#VafcB7WLEHWjZT&Ny zPP6N}VCJ>aXmn3&g5o5vkFwi0X6W4LO6-;v>H|4{e6PxNCm&(M{FTM!xp&=#vpQ!b zbR~oAxr4GyK|xI*nNFYmJf zYo~cmrBdX19&}xwRaI5>CICEiPSMCnx?xtKUlT$AyOS<$@^#!^AIZDr#l=hN-+S-9 zV=qbmcFi^?WksH@g}!lL%7vv7cQRpynyMe3`NI?X13+Pyf>)V&eS5!auffATM~b`v z))y8Oyb1u*26i79O4iKEx1a}g!PP03$|;OmU+j<1pFU>yH##Qx^N=&}=GHw}w!5bC z+`?Q>x#=HUP)3eVXALUiC7aGWr>MgRPp{whNltdQY)U47sFboY8Bg0KA*03iYiK4L zYGc~ud0t~yEOz&fojaFJ8`yO~+^%~j-$G#rpU$;ui84p0?Y<5#Z7b|Mb@Tmqq|OAe z=U5@%+`0$30FnT>qHbOOUuPVz-1I4y0OeR3bf_%l*h4NT&fhk7W5sikNF+CzO!i}D z0zhrev@Klwbu?qHwr#WPx-t|BJycy?{ilb|DH<8G>t^R$DD33dQ12@2NGjT@XK&h6 z&}YhP&plNR0OyY#i;q6~=-3Z@k^ug6X(=ANcnk`zy7LYHmiGs;o9=1~P>!jwDLCTU z_C-Sr<2?7juKNA-*Ed9)lF3u0QhEy{ODU;6Xq#xtwr!K+I7qv$6A6bOs(twCUw5e} zzb%|@m{s7TXa}Fp^{&FsCP`%?df>y3eQ#d;%8SeYZTK*JTDIj&0gvhs_Ku-vcy=AjAV8i~Jajukkx~2s*O@pp! zEQFvorp#UoyeC!C&_rdgPT7CGr^H;dufB0=l-<4^eHubKacx>+XNqZyh*qxe*yoOg z3l}_cUe^v-vGc&UdkFjXmR-1Q$RIrM{L2m9E}pQM_HI4iaorM!iyWCwpVuG^Xp1te=Cio&vNb5 zo%x39)X8VCCV4PjGbL7=3o(BLsV&8Xb#QfhmOI~`1UM!n+#LI;$GsAVA6 zr@KXd+Skcozb@U}h(QSI0t|4ID{;V`_YOHfY}frN*RDM`U!)PYG=vO|O+myAcuK)#hNr-iG-4q@ zNgFw0<7=l1(&P5wNiF(JQ-O@t2FYiFLKQ?twPS0nSKL7N=OG<~~`LA&_@txer znsniiY&6uB2AgVso1Z+;Er(phOk%&T!_tUMA)pf=sO60<_jsg2^L|h%q+H2~w4_Ry z*yiu()rE2&w2i>SA9d+hw(;S+Issdp5?8AAjfp>&%(>UcQ&_<^P}jHxyc(p+H~;_u07*qoM6N<$g8z=n7ytkO literal 0 HcmV?d00001 diff --git a/applications/osmo4_ios/Resources/osmo.icns b/applications/osmo4_ios/Resources/osmo.icns new file mode 100644 index 0000000000000000000000000000000000000000..da7226f64f8939dfd5fddf847699e6f2ba13250b GIT binary patch literal 147235 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

@@ -40,6 +40,7 @@ The config file is based on the win32 .ini file model, thus is ordered by sectio FFMPEG ISOReader DVB +DASH ALSA Shortcuts @@ -348,7 +349,7 @@ Specifies whether text shall be drawn to a texture and then rendered or directly

Read-only option listing the OpenGL extensions supported by the GL driver. Only valid after the 3D renderer has been used.

-StereoType [value: "None", "SideBySide", "TopToBottom", "Anaglyph", "Columns", "Rows", "Custom"] +StereoType [value: "None", "SideBySide", "TopToBottom", "Anaglyph", "Columns", "Rows", "SPV19", "Custom"]

Specifies the stereo output type (default "None"). If your graphic card does not support OpenGL shaders, only SideBySide and TopToBottom modes will be available.

    @@ -357,6 +358,7 @@ Specifies the stereo output type (default "None"). If your graphic card does not
  • "Anaglyph": Standard color anaglyph (red for left view, green and blue for right view) is used.
  • "Columns": images are interleaved by columns, left view on even columns and left view on odd columns.
  • "Rows": images are interleaved by columns, left view on even rows and left view on odd rows.
  • +
  • "SPV19": images are interleaved by for SpatialView 19'' 5 views display, fullscreen mode.
  • "Custom": images are interleaved according to the shader specified by InterleaverShader
@@ -519,9 +521,9 @@ The FreeType module uses this section to cache familly names to font file name a CleanCache [value: "yes" "no"]

Specifies whether downloaded files shall be removed once used.

-RestartFiles [value: "yes" "no"] +DisableCache [value: "yes" "no"]

-Specifies whether incompletely downloaded files shall be removed before redownloading.

+Specifies whether HTTP caching instructions are disabled or not.

MaxRate [value: positive integer]

Specifies a maximum data rate in kilo bits per seconds for file downloading. This is used for simulation purposes. A value of 0 means no rate restriction.

@@ -676,6 +678,21 @@ Specifies the DVB channels configuration file as produced by dvbtools' scan util

+ +Section "DASH" Back to top +

The "DASH" section of the config file holds all configuration options for DASH or HLS/M3U8 playback.

+MaxCachedSegments [value: positive integer] +

+Specifies how many segments should be downloaded at most in the cache.

+KeepFiles [value: yes, no] +

+Specifies whether downloaded files should not be deleted.

+AutoSwitchCount [value: yes, no] +

+For debug purposes, instructs the player to switch representation every N segments. If 0 (default), switching is disabled.

+ +

+ Section "ALSA" Back to top

The "ALSA" section of the config file holds all configuration options of the ALSA audio output module on GNU/Linux systems.

diff --git a/doc/man/mp4box.1 b/doc/man/mp4box.1 index b0647a8..7063fc5 100644 --- a/doc/man/mp4box.1 +++ b/doc/man/mp4box.1 @@ -24,11 +24,23 @@ MP4Box doesn't expect any particular order in options at prompt. .SH GETTING HELP WITH MP4Box .TP .B \-h [type] -prints help screen. "type" can be one of "general", "hint", "import", "encode", "extract", "dump", "swf", "meta", "crypt", "format" for specific help. +prints help screen. "type" can be one of "general", "hint", "import", "encode", "extract", "dump", "swf", "meta", "crypt", "format", "rtp", "live" for specific help. .TP .B \-version prints version of MP4Box. .TP +.B \-noprog +disable progress reports. +.TP +.B \-quiet +quiet mode (no log info). +.TP +.B \-v +verbose mode (more log info). +.TP +.B \-strict-error +exits after the first error is reported. +.TP .B \-nodes lists supported MPEG-4 Systems nodes in MP4Box current build. .TP @@ -39,6 +51,16 @@ prints the node syntax. Each field is listed as .br and field quantization information and quantization bounds if any. . +.TP +.B \-xnodes +lists supported X3D nodes in MP4Box current build. +.TP +.B \-xnode NodeName +prints the X3D node syntax. Each field is listed as +. +.TP +.B \-snodes +lists supported SVG/LASeR nodes in MP4Box current build. . .SH GENERAL OPTIONS .P @@ -46,6 +68,9 @@ and field quantization information and quantization bounds if any. .B \-inter duration interleaves media data in chunks of the maximum specified duration (expressed in milliseconds) and prepare file for HTTP/FTP streaming. By default MP4Box always stores with 0.5 second interleaving. An interleaving value of '0' stores without interleaving (meta-data then track after track). .br +.B \-old-inter duration +same as -inter but without drift adjustment +.br .B NOTE: Track Edit Lists are ignored when performing interleaving. .TP .B \-flat @@ -60,8 +85,14 @@ specifies output file name. .B -tmp\ \ specifies driectory for temporary storage. If not set, temporary storage is OS-dependent. .TP +.B -ffspace size +inserts free space before moof in fragmented files. +.TP .B \-nosys -removes all MPEG-4 Systems information from the file but keeps an empty IOD for MPEG-4 Profile@Level indications. +removes all MPEG-4 Systems information from the file but keeps an empty IOD for MPEG-4 Profile@Level indications. alias: -no-sys +.TP +.B \-no-iod +removes InitialObjectDescriptor from file. .TP .B \-isma rewrites the file as an ISMA 1.0 Audio/Video file (all systems info rewritten) with proper clock references. @@ -74,6 +105,18 @@ rewrites the file as an ISMA 1.0 Audio/Video file (all systems info rewritten) w .B \-3gp rewrites the file as a 3GP file (no more MPEG-4 Systems specific info). This option is turned on by default when input file extension is .3gp or .3g2. .TP +.B \-ipod +rewrites the file for iPod. +.TP +.B \-brand ABCD[:v] +sets major brand of file, with optional version. +.TP +.B \-ab ABCD +adds given brand to file's alternate brand list. +.TP +.B \-rb ABCD +removes given brand to file's alternate brand list. +.TP .B -cprt string adds string copyright notice to file. .TP @@ -83,6 +126,12 @@ adds chapter information contained in chap_file to movie. For more details on ch .B -rem trackID removes given track from file - can be specified multiple times. .TP +.B -enable trackID +enables given track. +.TP +.B -disable trackID +disables given track. +.TP .B -new forces creation of a new destination file. .TP @@ -92,14 +141,75 @@ sets the language of all tracks or the given track. LAN is the ISO 639-2 3 chara .B -delay [tkID=]delay_ms sets the delay in milliseconds of all tracks or the given track. LAN is the ISO 639-2 3 character code. .TP +.B -par tkID=PAR +sets visual track pixel aspect ratio (PAR=Num:Den or "none"). +.TP +.B -name tkID=name +sets track handler name. +.TP +.B -itags tag1[:tag2] +sets iTunes tags to file - more info: MP4Box -tag-list. +.TP .B \-split time_in_seconds splits in files of desired maximum duration. This will remove all MPEG-4 Systems media. .TP -.B \-splits size_in_kilobytes -splits in files of desired maximum size. This will remove all MPEG-4 Systems media. +.B \-split-size size_in_kilobytes +splits in files of desired maximum size. This will remove all MPEG-4 Systems media. Alias: -splits +.TP +.B \-split-chunk start:end +extracts a new file from specified start to end times (in seconds). This will remove all MPEG-4 Systems media. Alias: -splitx .TP -.B \-splitx start:end -extracts a new file from specified start to end times (in seconds). This will remove all MPEG-4 Systems media. +.B \-split-rap start:end +splits in files begining at each RAP. This will remove all MPEG-4 Systems media. Alias: -splitr +.TP +.B \-group-add fmt +creates a new grouping information in the file. Format is a colon-separated list of following options: +.br +refTrack=ID: ID of the track used as a group reference. If not set, the track will belong to the same group as the previous trackID specified. If 0 or no previous track specified, a new alternate group will be created. +.br +switchID=ID: ID of the switch group to create. If 0, a new ID will be computed for you. If <0, disables SwitchGroup. +.br +criteria=string: list of space-separated 4CCs. +.br +trackID=ID: ID of the track to add to this group. +.br +*WARNING* Options modify state as they are parsed: trackID=1:criteria=lang:trackID=2 is different from: criteria=lang:trackID=1:trackID=2. +.B \-group-rem-track ID +removes track from its group. +.TP +.B \-group-rem ID +removes the track's group. +.TP +.B \-group-clean +removes all group information from all tracks. +.TP +.B \-ref id:XXXX:refID +adds a reference of type 4CC from track ID to track refID. +.TP +.B \-dash DUR +enables DASH-ing of the file with a segment duration of DUR. +.TP +.B \-rap +segments begin with random access points. +.TP +.B \-frags-per-sidx N +sets the number of segments to be written in each SIDX box. +.TP +.B \-segment-name name +sets the segment name for generated segments. +.TP +.B \-segment-ext name +sets the segment extension name. Default is m4s. +.TP +.B \-url-template +uses UrlTemplate instead of explicit sources in segments. +.TP +.B \-daisy-chain +Uses daisy-chain SIDX instead of hierarchical. Ignored if frags/sidx is 0. +.TP +.B \-dash-ctx FILE +Stores/restore DASH timing from FILE. + .B When input file is an ISO-Media file (QT, MP4, 3GP), if no output is specified THE INPUT FILE IS OVERWRITTEN. . . @@ -157,7 +267,7 @@ enables Access Units concatenation in RTP packets (-ts, -size and -idx are selec prevents system tracks embedding in IOD (ISMA-like IOD) when generating in SDP. MP4Box automatically detects ambiguous (ISMA/non-ISMA) files but nobody's perfect. This shouldn't be used with -isma option. . .TP -.B \-sdp_ex string +.B \-add-sdp string adds string to movie SDP or track SDP (tkID:string, where tkID is the OD of the hint track or its media track). This takes care of SDP line reordering, but not of SDP content validity. .TP .B \-unhint @@ -181,10 +291,14 @@ file#trackID=ID or file#ID: imports given trackfrom src_file. To get a listing o .B \-cat concatenates all src_file tracks to input file, creating it if not exisiting. Media samples are added at the end of existing compatible tracks. If no compatible track is found for a media it is created. Up to 20 cumulated -cat operations can be used. Syntax is the same as -add. .TP +.B \-force-cat +skips media configuration check when concatenating file. +.TP .B \-keepsys by default all MPEG-4 systems media are removed with -add and -cat. This option will avoid removing them from final file. .TP -. +.B \-keep-all +keeps all existing tracks when add file. .TP .B \-dref keeps media data in original file an only imports meta-data (frame timing, size and random access). @@ -193,7 +307,7 @@ keeps media data in original file an only imports meta-data (frame timing, size .B NOTE Data referencing may fail with some AVI because it requires the framed data (eg an MP4 sample) to be continuous in the original file, which is not always the case depending on the original interleaving. .TP -.B \-nodrop +.B \-no-drop forces constant FPS when importing AVI video. By default non coded frames (n-vop) are removed at import time, resulting in a variable frame-rate media. .TP .B \-packed @@ -204,6 +318,15 @@ imports AAC as AAC-SBR, with backward compatible signaling (non AAC-SBR decoders .TP .B \-sbrx imports AAC as AAC-SBR, with non-backward compatible signaling (non AAC-SBR decoders will not be able to play it). +.TP +.B \-ovsbr +imports AAC as AAC-SBR with oversample SBR. +.TP +.B \-ps +imports AAC as AAC-PS, with backward compatible signaling of AAC-PS. +.TP +.B \-psx +imports AAC as AAC-PS, with non-backward compatible signaling (non AAC-PS decoders will not be able to play it). .TP .B \-fps FrameRate overrides the input video frame rate or specifies it for SUB subtitles. @@ -235,12 +358,59 @@ forces BIFS random access point generation every time milliseconds. Cannot be us .B \-shadow time forces BIFS shadow random access points generation every time milliseconds. Shadow samples are random access points that can be used instead of non random access points when seeking. WARNING: this may be not supported by some players (EXPERTS ONLY - DANGEROUS). Cannot be used with -sync. .TP -.B \-inctx file +.B \-ctx-in file specifies initial context (MP4/BT/XMTA) for chunk processing. Input file must then be a command-only file: no IOD, and no implicit commands (commands without 'AT'). .TP -.B \-outctx file +.B \-ctx-out file specifies output file of updated context (MP4/BT/XMTA) in chunk processing mode. This is optional, chunk processing doesn't need to store the final context. +.TP +.B \-resolution res +LASeR resolution factor (-8 to 7, default 0). All coords are multiplied by 2^res before truncation. +.TP +.B \-coord-bits bits +bits used for encoding truncated coordinates in LASeR. (0 to 31, default 12) +.TP +.B \-scale-bits bits +bits used for encoding truncated scales in LASeR. (0 to 4, default 0) +.TP +.B \-auto-quant res +Use automatic LASeR quantification. resolution is given as if using -resolution but coord-bits and scale-bits are infered. . +.SH ISMACRYPT OPTIONS +.TP +.B \-crypt drm_file +crypts a specific track using ISMA AES CTR 128. +.TP +.B \-decrypt [drm_file] +decrypts a specific track using ISMA AES CTR 128. drm_file can be omitted if keys are in file. +.TP +.B \-set-kms [tkID=]kms_uri +changes KMS location for all tracks or a given one if tkID is specified. +.TP +.B \DRM file syntax for GPAC ISMACryp +File is XML and shall start with xml header. File root is an "ISMACryp" element. File is a list of "ISMACrypTrack" elements. +.br +ISMACrypTrack attributes: +.br +TrackID: ID of track to en/decrypt. +.br +key: AES-128 key formatted (hex string 0x +32 chars. +.br +salt: CTR IV salt key (64 bits) (hex string 0x +16 chars. +.br +Encryption only attributes +.br +Scheme_URI: URI of scheme used. +.br +KMS_URI: URI of key management system - \'self\' writes key and salt in the file. +.br +selectiveType selective encryption type - understood values are "None": all samples encrypted (default), "RAP": only encrypts random access units, "Non-RAP": only encrypts non-random access units, "Rand": random selection is performed", "X": Encrypts every first sample out of X, "RandX": Encrypts one random sample out of X. +.br +ipmpType: IPMP Signaling Type: None, IPMP, IPMPX. +.br +ipmpDescriptorID: IPMP_Descriptor ID to use if IPMP(X) is used. If not set MP4Box will generate one for you. +. + .SH EXTRACTING OPTIONS .TP .B \-raw TrackID @@ -252,6 +422,9 @@ extract each track sample to a file. Note: 'TrackID:N' extracts Nth sample of th .B \-nhnt TrackID extracts given track in NHNT format. All track types except ObjectDescriptors tracks can be exported. .TP +.B \-nhml TrackID +extracts track in nhml format (XML nhnt). All track types except ObjectDescriptors tracks can be exported. +.TP .B \-single TrackID extracts given track to a new mp4 file with a single track. .TP @@ -263,6 +436,15 @@ same as '-raw' but defaults to QCP file format for AVRC and SMV audio codecs. .TP .B \-aviraw TK extracts AVI track to its raw format. TK can be one of "video", "audio" or "audioN" for multi-track avi files (cf '-info'). +.TP +.B \-saf +remux file to SAF multiplex. +.TP +.B \-dvbhdemux +demux DVB-H file into IP Datagrams. +.TP +.B \-diod +extracts file IOD in raw format when supported. . .SH DUMP OPTIONS .TP @@ -284,18 +466,30 @@ dumps complete scene in an X3D XML file. This will remove unknown X3D nodes. .B \-x3dv dumps complete scene in an X3D Text (VRML) file. This will remove unknown X3D nodes. .TP +.B \-lsr +dumps complete scene in a LASeR+XML file. +.TP .B \-diso creates XML image of the file atoms. .TP .B \-drtp creates XML image of all hint tracks samples of a hinted mp4 file. .TP +.B \-dts +prints sample timing to text output. +.TP .B \-dcr creates XML image of all ISMACryp tracks samples of an mp4 file. .TP .B \-sdp creates SDP file associated with a hinted mp4 file. .TP +.B \-dump-cover +Extracts cover art if any. +.TP +.B \-dump-chap +Extracts chapter list to file if any. +.TP .B \-ttxt converts input subtitle to GPAC TTXT format. .TP @@ -319,6 +513,9 @@ generates statistic report on node/field usage per BIFS Access Unit. .TP .B \-statx generates statistic report on node/field usage in the scene graph after each BIFS Access Unit. +.TP +.B \-hash +generates SHA-1 Hash of the input file. . .SH Meta OPTIONS . @@ -361,28 +558,103 @@ dumps the XML data of the given meta to a file. .TP .B \-dump-item itemID[;tk=ID][;path=fileName] dumps the given item of the the given meta to a file. By default the item name is used as the output file name. +.TP +.B \-package +packages input XML file into an ISO container. all media referenced except hyperlinks are added to file. +.TP +.B \-mgt +packages input XML file into an MPEG-U widget in ISO container. All files contained in the current folder are added to the widget package. +. +.SH RTP STREAMER OPTIONS +. +.LP +MP4Box can stream ISO files to RTP. The streamer currently doesn't support data carrouselling and will therefore not handle BIFS and OD streams properly. +.TP +.B \-rtp +enables rtp file streamer. +.TP +.B \-noloop +disables looping when streaming. +.TP +.B \-mpeg4 +forces MPEG-4 ES Generic for all RTP streams. +.TP +.B \-dst=IP +IP destination (uni/multi-cast). Default: 127.0.0.1. +.TP +.B \-port=PORT +output port of the first stream. Default: 7000. +.TP +.B \-mtu=MTU +path MTU for RTP packets. Default is 1450 bytes. +.TP +.B \-ifce=IP +IP address of the physical interface to use. Default: NULL (ANY). +.TP +.B \-ttl=N +time to live for multicast packets. Default: 1. +.TP +.B \-sdp=FILE +file name of the generated SDP. Default is session.sdp. +. +.SH LIVE SCENE STREAMER OPTIONS +. +.LP +MP4Box can stream BIFS or DIMS content to RTP with carousel generation and updates. The streamer currently doesn't support audio/video/image streaming at the same time. All options supported by the file streamer are supported. +.TP +.B \-live +enables rtp live streamer. +.TP +.B \-dims +turns on DIMS mode for SVG input - default: off. +.TP +.B \-src=FILE +source of updates - default: null. +.TP +.B \-rap=TIME +duration in ms of base carousel - default: 0 (off). you can specify the RAP period of a single ESID (not in DIMS) with -rap=ESID=X:time. +.TP +.B \Runtime Options +The following options can be used at prompt: +.br +q: quits +.br +u: inputs some commands to be sent +.br +U: same as u but signals the updates as critical +.br +e: inputs some commands to be sent without being aggregated +.br +E: same as e but signals the updates as critical +.br +f: forces RAP sending +.br +F: forces RAP regeneration and sending +.br +p: dumps current scene +. . .SH SWF OPTIONS . .LP MP4Box can import very simple Macromedia Flash files (".SWF"). You can specify a SWF input file with -bt, xmt and -mp4 switches. .TP -.B \-static +.B \-global all SWF defines are placed in first scene replace. By default SWF defines are sent when needed. .TP -.B \-ctrl -uses a dedicated stream for movie control (forces -static option). +.B \-no-ctrl +uses a dedicated stream for movie control. This will disable ActionScript. .TP -.B \-notext +.B \-no-text removes all SWF text. .TP -.B \-nofont +.B \-no-font removes all embedded SWF Fonts, forcing usage of MPEG-4 Text and terminal fonts. .TP -.B \-noline +.B \-no-line removes all lines from SWF shapes. .TP -.B \-nograd +.B \-no-grad removes all gradients from swf shapes. .TP .B \-quad @@ -523,7 +795,7 @@ For bug reports, more information on BT or XMT-A formats or GPAC TTXT files or I . .SH "AUTHORS" .LP -Jean Le Feuvre - GPAC (c) 2000-2005 +Jean Le Feuvre - GPAC (c) 2000-2005 - (c) Telecom ParisTech 2005-2011 . .SH "SEE ALSO" .LP diff --git a/doc/man/mp4client.1 b/doc/man/mp4client.1 index 14bbc04..c7e58e1 100644 --- a/doc/man/mp4client.1 +++ b/doc/man/mp4client.1 @@ -25,6 +25,9 @@ logs run-time information to file. Information logged is: FPS, CPU, Memory usage .TP .B \-quiet removes script message, buffering and downloading status. +.TP +.B \-strict-error +exits after the first error is reported. . .SH PLAYBACK OPTIONS A file can be controled during playback by typing one of the following key at prompt. @@ -193,7 +196,7 @@ Mouse: Horizontal move: Y-Axis rotate - Vertical move: X-Axis rotate Keys: left/right: Y-Axis rotate - up/down: X-Axis rotate .TP .B SHIFT -.Speeds up movement +Speeds up movement . .SH VISUAL EXTRACTION OPTIONS When used to dump a visual presentation, the client is no longer interactive. All GPAC features are supported during capture, except audio-related ones. The following options can be passed at prompt: diff --git a/extra_lib/include/ffmpeg_android/.classpath b/extra_lib/include/ffmpeg_android/.classpath new file mode 100644 index 0000000..609aa00 --- /dev/null +++ b/extra_lib/include/ffmpeg_android/.classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/extra_lib/include/ffmpeg_android/.project b/extra_lib/include/ffmpeg_android/.project new file mode 100644 index 0000000..1e7da8d --- /dev/null +++ b/extra_lib/include/ffmpeg_android/.project @@ -0,0 +1,33 @@ + + + ffmpeg + + + + + + com.android.ide.eclipse.adt.ResourceManagerBuilder + + + + + com.android.ide.eclipse.adt.PreCompilerBuilder + + + + + org.eclipse.jdt.core.javabuilder + + + + + com.android.ide.eclipse.adt.ApkBuilder + + + + + + com.android.ide.eclipse.adt.AndroidNature + org.eclipse.jdt.core.javanature + + diff --git a/extra_lib/include/ffmpeg_android/libavcodec/avcodec.h b/extra_lib/include/ffmpeg_android/libavcodec/avcodec.h new file mode 100644 index 0000000..add4b10 --- /dev/null +++ b/extra_lib/include/ffmpeg_android/libavcodec/avcodec.h @@ -0,0 +1,3952 @@ +/* + * copyright (c) 2001 Fabrice Bellard + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef AVCODEC_AVCODEC_H +#define AVCODEC_AVCODEC_H + +/** + * @file libavcodec/avcodec.h + * external API header + */ + +#include +#include "libavutil/avutil.h" + +#define LIBAVCODEC_VERSION_MAJOR 52 +#define LIBAVCODEC_VERSION_MINOR 66 +#define LIBAVCODEC_VERSION_MICRO 0 + +#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ + LIBAVCODEC_VERSION_MINOR, \ + LIBAVCODEC_VERSION_MICRO) +#define LIBAVCODEC_VERSION AV_VERSION(LIBAVCODEC_VERSION_MAJOR, \ + LIBAVCODEC_VERSION_MINOR, \ + LIBAVCODEC_VERSION_MICRO) +#define LIBAVCODEC_BUILD LIBAVCODEC_VERSION_INT + +#define LIBAVCODEC_IDENT "Lavc" AV_STRINGIFY(LIBAVCODEC_VERSION) + +#define AV_NOPTS_VALUE INT64_C(0x8000000000000000) +#define AV_TIME_BASE 1000000 +#define AV_TIME_BASE_Q (AVRational){1, AV_TIME_BASE} + +/** + * Identifies the syntax and semantics of the bitstream. + * The principle is roughly: + * Two decoders with the same ID can decode the same streams. + * Two encoders with the same ID can encode compatible streams. + * There may be slight deviations from the principle due to implementation + * details. + * + * If you add a codec ID to this list, add it so that + * 1. no value of a existing codec ID changes (that would break ABI), + * 2. it is as close as possible to similar codecs. + */ +enum CodecID { + CODEC_ID_NONE, + + /* video codecs */ + CODEC_ID_MPEG1VIDEO, + CODEC_ID_MPEG2VIDEO, ///< preferred ID for MPEG-1/2 video decoding + CODEC_ID_MPEG2VIDEO_XVMC, + CODEC_ID_H261, + CODEC_ID_H263, + CODEC_ID_RV10, + CODEC_ID_RV20, + CODEC_ID_MJPEG, + CODEC_ID_MJPEGB, + CODEC_ID_LJPEG, + CODEC_ID_SP5X, + CODEC_ID_JPEGLS, + CODEC_ID_MPEG4, + CODEC_ID_RAWVIDEO, + CODEC_ID_MSMPEG4V1, + CODEC_ID_MSMPEG4V2, + CODEC_ID_MSMPEG4V3, + CODEC_ID_WMV1, + CODEC_ID_WMV2, + CODEC_ID_H263P, + CODEC_ID_H263I, + CODEC_ID_FLV1, + CODEC_ID_SVQ1, + CODEC_ID_SVQ3, + CODEC_ID_DVVIDEO, + CODEC_ID_HUFFYUV, + CODEC_ID_CYUV, + CODEC_ID_H264, + CODEC_ID_INDEO3, + CODEC_ID_VP3, + CODEC_ID_THEORA, + CODEC_ID_ASV1, + CODEC_ID_ASV2, + CODEC_ID_FFV1, + CODEC_ID_4XM, + CODEC_ID_VCR1, + CODEC_ID_CLJR, + CODEC_ID_MDEC, + CODEC_ID_ROQ, + CODEC_ID_INTERPLAY_VIDEO, + CODEC_ID_XAN_WC3, + CODEC_ID_XAN_WC4, + CODEC_ID_RPZA, + CODEC_ID_CINEPAK, + CODEC_ID_WS_VQA, + CODEC_ID_MSRLE, + CODEC_ID_MSVIDEO1, + CODEC_ID_IDCIN, + CODEC_ID_8BPS, + CODEC_ID_SMC, + CODEC_ID_FLIC, + CODEC_ID_TRUEMOTION1, + CODEC_ID_VMDVIDEO, + CODEC_ID_MSZH, + CODEC_ID_ZLIB, + CODEC_ID_QTRLE, + CODEC_ID_SNOW, + CODEC_ID_TSCC, + CODEC_ID_ULTI, + CODEC_ID_QDRAW, + CODEC_ID_VIXL, + CODEC_ID_QPEG, +#if LIBAVCODEC_VERSION_MAJOR < 53 + CODEC_ID_XVID, +#endif + CODEC_ID_PNG, + CODEC_ID_PPM, + CODEC_ID_PBM, + CODEC_ID_PGM, + CODEC_ID_PGMYUV, + CODEC_ID_PAM, + CODEC_ID_FFVHUFF, + CODEC_ID_RV30, + CODEC_ID_RV40, + CODEC_ID_VC1, + CODEC_ID_WMV3, + CODEC_ID_LOCO, + CODEC_ID_WNV1, + CODEC_ID_AASC, + CODEC_ID_INDEO2, + CODEC_ID_FRAPS, + CODEC_ID_TRUEMOTION2, + CODEC_ID_BMP, + CODEC_ID_CSCD, + CODEC_ID_MMVIDEO, + CODEC_ID_ZMBV, + CODEC_ID_AVS, + CODEC_ID_SMACKVIDEO, + CODEC_ID_NUV, + CODEC_ID_KMVC, + CODEC_ID_FLASHSV, + CODEC_ID_CAVS, + CODEC_ID_JPEG2000, + CODEC_ID_VMNC, + CODEC_ID_VP5, + CODEC_ID_VP6, + CODEC_ID_VP6F, + CODEC_ID_TARGA, + CODEC_ID_DSICINVIDEO, + CODEC_ID_TIERTEXSEQVIDEO, + CODEC_ID_TIFF, + CODEC_ID_GIF, + CODEC_ID_FFH264, + CODEC_ID_DXA, + CODEC_ID_DNXHD, + CODEC_ID_THP, + CODEC_ID_SGI, + CODEC_ID_C93, + CODEC_ID_BETHSOFTVID, + CODEC_ID_PTX, + CODEC_ID_TXD, + CODEC_ID_VP6A, + CODEC_ID_AMV, + CODEC_ID_VB, + CODEC_ID_PCX, + CODEC_ID_SUNRAST, + CODEC_ID_INDEO4, + CODEC_ID_INDEO5, + CODEC_ID_MIMIC, + CODEC_ID_RL2, + CODEC_ID_8SVX_EXP, + CODEC_ID_8SVX_FIB, + CODEC_ID_ESCAPE124, + CODEC_ID_DIRAC, + CODEC_ID_BFI, + CODEC_ID_CMV, + CODEC_ID_MOTIONPIXELS, + CODEC_ID_TGV, + CODEC_ID_TGQ, + CODEC_ID_TQI, + CODEC_ID_AURA, + CODEC_ID_AURA2, + CODEC_ID_V210X, + CODEC_ID_TMV, + CODEC_ID_V210, + CODEC_ID_DPX, + CODEC_ID_MAD, + CODEC_ID_FRWU, + CODEC_ID_FLASHSV2, + CODEC_ID_CDGRAPHICS, + CODEC_ID_R210, + CODEC_ID_ANM, + CODEC_ID_BINKVIDEO, + CODEC_ID_IFF_ILBM, + CODEC_ID_IFF_BYTERUN1, + CODEC_ID_KGV1, + CODEC_ID_YOP, + + /* various PCM "codecs" */ + CODEC_ID_PCM_S16LE= 0x10000, + CODEC_ID_PCM_S16BE, + CODEC_ID_PCM_U16LE, + CODEC_ID_PCM_U16BE, + CODEC_ID_PCM_S8, + CODEC_ID_PCM_U8, + CODEC_ID_PCM_MULAW, + CODEC_ID_PCM_ALAW, + CODEC_ID_PCM_S32LE, + CODEC_ID_PCM_S32BE, + CODEC_ID_PCM_U32LE, + CODEC_ID_PCM_U32BE, + CODEC_ID_PCM_S24LE, + CODEC_ID_PCM_S24BE, + CODEC_ID_PCM_U24LE, + CODEC_ID_PCM_U24BE, + CODEC_ID_PCM_S24DAUD, + CODEC_ID_PCM_ZORK, + CODEC_ID_PCM_S16LE_PLANAR, + CODEC_ID_PCM_DVD, + CODEC_ID_PCM_F32BE, + CODEC_ID_PCM_F32LE, + CODEC_ID_PCM_F64BE, + CODEC_ID_PCM_F64LE, + CODEC_ID_PCM_BLURAY, + + /* various ADPCM codecs */ + CODEC_ID_ADPCM_IMA_QT= 0x11000, + CODEC_ID_ADPCM_IMA_WAV, + CODEC_ID_ADPCM_IMA_DK3, + CODEC_ID_ADPCM_IMA_DK4, + CODEC_ID_ADPCM_IMA_WS, + CODEC_ID_ADPCM_IMA_SMJPEG, + CODEC_ID_ADPCM_MS, + CODEC_ID_ADPCM_4XM, + CODEC_ID_ADPCM_XA, + CODEC_ID_ADPCM_ADX, + CODEC_ID_ADPCM_EA, + CODEC_ID_ADPCM_G726, + CODEC_ID_ADPCM_CT, + CODEC_ID_ADPCM_SWF, + CODEC_ID_ADPCM_YAMAHA, + CODEC_ID_ADPCM_SBPRO_4, + CODEC_ID_ADPCM_SBPRO_3, + CODEC_ID_ADPCM_SBPRO_2, + CODEC_ID_ADPCM_THP, + CODEC_ID_ADPCM_IMA_AMV, + CODEC_ID_ADPCM_EA_R1, + CODEC_ID_ADPCM_EA_R3, + CODEC_ID_ADPCM_EA_R2, + CODEC_ID_ADPCM_IMA_EA_SEAD, + CODEC_ID_ADPCM_IMA_EA_EACS, + CODEC_ID_ADPCM_EA_XAS, + CODEC_ID_ADPCM_EA_MAXIS_XA, + CODEC_ID_ADPCM_IMA_ISS, + + /* AMR */ + CODEC_ID_AMR_NB= 0x12000, + CODEC_ID_AMR_WB, + + /* RealAudio codecs*/ + CODEC_ID_RA_144= 0x13000, + CODEC_ID_RA_288, + + /* various DPCM codecs */ + CODEC_ID_ROQ_DPCM= 0x14000, + CODEC_ID_INTERPLAY_DPCM, + CODEC_ID_XAN_DPCM, + CODEC_ID_SOL_DPCM, + + /* audio codecs */ + CODEC_ID_MP2= 0x15000, + CODEC_ID_MP3, ///< preferred ID for decoding MPEG audio layer 1, 2 or 3 + CODEC_ID_AAC, + CODEC_ID_AC3, + CODEC_ID_DTS, + CODEC_ID_VORBIS, + CODEC_ID_DVAUDIO, + CODEC_ID_WMAV1, + CODEC_ID_WMAV2, + CODEC_ID_MACE3, + CODEC_ID_MACE6, + CODEC_ID_VMDAUDIO, + CODEC_ID_SONIC, + CODEC_ID_SONIC_LS, + CODEC_ID_FLAC, + CODEC_ID_MP3ADU, + CODEC_ID_MP3ON4, + CODEC_ID_SHORTEN, + CODEC_ID_ALAC, + CODEC_ID_WESTWOOD_SND1, + CODEC_ID_GSM, ///< as in Berlin toast format + CODEC_ID_QDM2, + CODEC_ID_COOK, + CODEC_ID_TRUESPEECH, + CODEC_ID_TTA, + CODEC_ID_SMACKAUDIO, + CODEC_ID_QCELP, + CODEC_ID_WAVPACK, + CODEC_ID_DSICINAUDIO, + CODEC_ID_IMC, + CODEC_ID_MUSEPACK7, + CODEC_ID_MLP, + CODEC_ID_GSM_MS, /* as found in WAV */ + CODEC_ID_ATRAC3, + CODEC_ID_VOXWARE, + CODEC_ID_APE, + CODEC_ID_NELLYMOSER, + CODEC_ID_MUSEPACK8, + CODEC_ID_SPEEX, + CODEC_ID_WMAVOICE, + CODEC_ID_WMAPRO, + CODEC_ID_WMALOSSLESS, + CODEC_ID_ATRAC3P, + CODEC_ID_EAC3, + CODEC_ID_SIPR, + CODEC_ID_MP1, + CODEC_ID_TWINVQ, + CODEC_ID_TRUEHD, + CODEC_ID_MP4ALS, + CODEC_ID_ATRAC1, + CODEC_ID_BINKAUDIO_RDFT, + CODEC_ID_BINKAUDIO_DCT, + + /* subtitle codecs */ + CODEC_ID_DVD_SUBTITLE= 0x17000, + CODEC_ID_DVB_SUBTITLE, + CODEC_ID_TEXT, ///< raw UTF-8 text + CODEC_ID_XSUB, + CODEC_ID_SSA, + CODEC_ID_MOV_TEXT, + CODEC_ID_HDMV_PGS_SUBTITLE, + CODEC_ID_DVB_TELETEXT, + + /* other specific kind of codecs (generally used for attachments) */ + CODEC_ID_TTF= 0x18000, + + CODEC_ID_PROBE= 0x19000, ///< codec_id is not known (like CODEC_ID_NONE) but lavf should attempt to identify it + + CODEC_ID_MPEG2TS= 0x20000, /**< _FAKE_ codec to indicate a raw MPEG-2 TS + * stream (only used by libavformat) */ +}; + +#if LIBAVCODEC_VERSION_MAJOR < 53 +#define CodecType AVMediaType + +#define CODEC_TYPE_UNKNOWN AVMEDIA_TYPE_UNKNOWN +#define CODEC_TYPE_VIDEO AVMEDIA_TYPE_VIDEO +#define CODEC_TYPE_AUDIO AVMEDIA_TYPE_AUDIO +#define CODEC_TYPE_DATA AVMEDIA_TYPE_DATA +#define CODEC_TYPE_SUBTITLE AVMEDIA_TYPE_SUBTITLE +#define CODEC_TYPE_ATTACHMENT AVMEDIA_TYPE_ATTACHMENT +#define CODEC_TYPE_NB AVMEDIA_TYPE_NB +#endif + +/** + * all in native-endian format + */ +enum SampleFormat { + SAMPLE_FMT_NONE = -1, + SAMPLE_FMT_U8, ///< unsigned 8 bits + SAMPLE_FMT_S16, ///< signed 16 bits + SAMPLE_FMT_S32, ///< signed 32 bits + SAMPLE_FMT_FLT, ///< float + SAMPLE_FMT_DBL, ///< double + SAMPLE_FMT_NB ///< Number of sample formats. DO NOT USE if dynamically linking to libavcodec +}; + +/* Audio channel masks */ +#define CH_FRONT_LEFT 0x00000001 +#define CH_FRONT_RIGHT 0x00000002 +#define CH_FRONT_CENTER 0x00000004 +#define CH_LOW_FREQUENCY 0x00000008 +#define CH_BACK_LEFT 0x00000010 +#define CH_BACK_RIGHT 0x00000020 +#define CH_FRONT_LEFT_OF_CENTER 0x00000040 +#define CH_FRONT_RIGHT_OF_CENTER 0x00000080 +#define CH_BACK_CENTER 0x00000100 +#define CH_SIDE_LEFT 0x00000200 +#define CH_SIDE_RIGHT 0x00000400 +#define CH_TOP_CENTER 0x00000800 +#define CH_TOP_FRONT_LEFT 0x00001000 +#define CH_TOP_FRONT_CENTER 0x00002000 +#define CH_TOP_FRONT_RIGHT 0x00004000 +#define CH_TOP_BACK_LEFT 0x00008000 +#define CH_TOP_BACK_CENTER 0x00010000 +#define CH_TOP_BACK_RIGHT 0x00020000 +#define CH_STEREO_LEFT 0x20000000 ///< Stereo downmix. +#define CH_STEREO_RIGHT 0x40000000 ///< See CH_STEREO_LEFT. + +/** Channel mask value used for AVCodecContext.request_channel_layout + to indicate that the user requests the channel order of the decoder output + to be the native codec channel order. */ +#define CH_LAYOUT_NATIVE 0x8000000000000000LL + +/* Audio channel convenience macros */ +#define CH_LAYOUT_MONO (CH_FRONT_CENTER) +#define CH_LAYOUT_STEREO (CH_FRONT_LEFT|CH_FRONT_RIGHT) +#define CH_LAYOUT_2_1 (CH_LAYOUT_STEREO|CH_BACK_CENTER) +#define CH_LAYOUT_SURROUND (CH_LAYOUT_STEREO|CH_FRONT_CENTER) +#define CH_LAYOUT_4POINT0 (CH_LAYOUT_SURROUND|CH_BACK_CENTER) +#define CH_LAYOUT_2_2 (CH_LAYOUT_STEREO|CH_SIDE_LEFT|CH_SIDE_RIGHT) +#define CH_LAYOUT_QUAD (CH_LAYOUT_STEREO|CH_BACK_LEFT|CH_BACK_RIGHT) +#define CH_LAYOUT_5POINT0 (CH_LAYOUT_SURROUND|CH_SIDE_LEFT|CH_SIDE_RIGHT) +#define CH_LAYOUT_5POINT1 (CH_LAYOUT_5POINT0|CH_LOW_FREQUENCY) +#define CH_LAYOUT_5POINT0_BACK (CH_LAYOUT_SURROUND|CH_BACK_LEFT|CH_BACK_RIGHT) +#define CH_LAYOUT_5POINT1_BACK (CH_LAYOUT_5POINT0_BACK|CH_LOW_FREQUENCY) +#define CH_LAYOUT_7POINT0 (CH_LAYOUT_5POINT0|CH_BACK_LEFT|CH_BACK_RIGHT) +#define CH_LAYOUT_7POINT1 (CH_LAYOUT_5POINT1|CH_BACK_LEFT|CH_BACK_RIGHT) +#define CH_LAYOUT_7POINT1_WIDE (CH_LAYOUT_5POINT1_BACK|\ + CH_FRONT_LEFT_OF_CENTER|CH_FRONT_RIGHT_OF_CENTER) +#define CH_LAYOUT_STEREO_DOWNMIX (CH_STEREO_LEFT|CH_STEREO_RIGHT) + +/* in bytes */ +#define AVCODEC_MAX_AUDIO_FRAME_SIZE 192000 // 1 second of 48khz 32bit audio + +/** + * Required number of additionally allocated bytes at the end of the input bitstream for decoding. + * This is mainly needed because some optimized bitstream readers read + * 32 or 64 bit at once and could read over the end.
+ * Note: If the first 23 bits of the additional bytes are not 0, then damaged + * MPEG bitstreams could cause overread and segfault. + */ +#define FF_INPUT_BUFFER_PADDING_SIZE 8 + +/** + * minimum encoding buffer size + * Used to avoid some checks during header writing. + */ +#define FF_MIN_BUFFER_SIZE 16384 + + +/** + * motion estimation type. + */ +enum Motion_Est_ID { + ME_ZERO = 1, ///< no search, that is use 0,0 vector whenever one is needed + ME_FULL, + ME_LOG, + ME_PHODS, + ME_EPZS, ///< enhanced predictive zonal search + ME_X1, ///< reserved for experiments + ME_HEX, ///< hexagon based search + ME_UMH, ///< uneven multi-hexagon search + ME_ITER, ///< iterative search + ME_TESA, ///< transformed exhaustive search algorithm +}; + +enum AVDiscard{ + /* We leave some space between them for extensions (drop some + * keyframes for intra-only or drop just some bidir frames). */ + AVDISCARD_NONE =-16, ///< discard nothing + AVDISCARD_DEFAULT= 0, ///< discard useless packets like 0 size packets in avi + AVDISCARD_NONREF = 8, ///< discard all non reference + AVDISCARD_BIDIR = 16, ///< discard all bidirectional frames + AVDISCARD_NONKEY = 32, ///< discard all frames except keyframes + AVDISCARD_ALL = 48, ///< discard all +}; + +enum AVColorPrimaries{ + AVCOL_PRI_BT709 =1, ///< also ITU-R BT1361 / IEC 61966-2-4 / SMPTE RP177 Annex B + AVCOL_PRI_UNSPECIFIED=2, + AVCOL_PRI_BT470M =4, + AVCOL_PRI_BT470BG =5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM + AVCOL_PRI_SMPTE170M =6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC + AVCOL_PRI_SMPTE240M =7, ///< functionally identical to above + AVCOL_PRI_FILM =8, + AVCOL_PRI_NB , ///< Not part of ABI +}; + +enum AVColorTransferCharacteristic{ + AVCOL_TRC_BT709 =1, ///< also ITU-R BT1361 + AVCOL_TRC_UNSPECIFIED=2, + AVCOL_TRC_GAMMA22 =4, ///< also ITU-R BT470M / ITU-R BT1700 625 PAL & SECAM + AVCOL_TRC_GAMMA28 =5, ///< also ITU-R BT470BG + AVCOL_TRC_NB , ///< Not part of ABI +}; + +enum AVColorSpace{ + AVCOL_SPC_RGB =0, + AVCOL_SPC_BT709 =1, ///< also ITU-R BT1361 / IEC 61966-2-4 xvYCC709 / SMPTE RP177 Annex B + AVCOL_SPC_UNSPECIFIED=2, + AVCOL_SPC_FCC =4, + AVCOL_SPC_BT470BG =5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM / IEC 61966-2-4 xvYCC601 + AVCOL_SPC_SMPTE170M =6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC / functionally identical to above + AVCOL_SPC_SMPTE240M =7, + AVCOL_SPC_NB , ///< Not part of ABI +}; + +enum AVColorRange{ + AVCOL_RANGE_UNSPECIFIED=0, + AVCOL_RANGE_MPEG =1, ///< the normal 219*2^(n-8) "MPEG" YUV ranges + AVCOL_RANGE_JPEG =2, ///< the normal 2^n-1 "JPEG" YUV ranges + AVCOL_RANGE_NB , ///< Not part of ABI +}; + +/** + * X X 3 4 X X are luma samples, + * 1 2 1-6 are possible chroma positions + * X X 5 6 X 0 is undefined/unknown position + */ +enum AVChromaLocation{ + AVCHROMA_LOC_UNSPECIFIED=0, + AVCHROMA_LOC_LEFT =1, ///< mpeg2/4, h264 default + AVCHROMA_LOC_CENTER =2, ///< mpeg1, jpeg, h263 + AVCHROMA_LOC_TOPLEFT =3, ///< DV + AVCHROMA_LOC_TOP =4, + AVCHROMA_LOC_BOTTOMLEFT =5, + AVCHROMA_LOC_BOTTOM =6, + AVCHROMA_LOC_NB , ///< Not part of ABI +}; + +typedef struct RcOverride{ + int start_frame; + int end_frame; + int qscale; // If this is 0 then quality_factor will be used instead. + float quality_factor; +} RcOverride; + +#define FF_MAX_B_FRAMES 16 + +/* encoding support + These flags can be passed in AVCodecContext.flags before initialization. + Note: Not everything is supported yet. +*/ + +#define CODEC_FLAG_QSCALE 0x0002 ///< Use fixed qscale. +#define CODEC_FLAG_4MV 0x0004 ///< 4 MV per MB allowed / advanced prediction for H.263. +#define CODEC_FLAG_QPEL 0x0010 ///< Use qpel MC. +#define CODEC_FLAG_GMC 0x0020 ///< Use GMC. +#define CODEC_FLAG_MV0 0x0040 ///< Always try a MB with MV=<0,0>. +#define CODEC_FLAG_PART 0x0080 ///< Use data partitioning. +/** + * The parent program guarantees that the input for B-frames containing + * streams is not written to for at least s->max_b_frames+1 frames, if + * this is not set the input will be copied. + */ +#define CODEC_FLAG_INPUT_PRESERVED 0x0100 +#define CODEC_FLAG_PASS1 0x0200 ///< Use internal 2pass ratecontrol in first pass mode. +#define CODEC_FLAG_PASS2 0x0400 ///< Use internal 2pass ratecontrol in second pass mode. +#define CODEC_FLAG_EXTERN_HUFF 0x1000 ///< Use external Huffman table (for MJPEG). +#define CODEC_FLAG_GRAY 0x2000 ///< Only decode/encode grayscale. +#define CODEC_FLAG_EMU_EDGE 0x4000 ///< Don't draw edges. +#define CODEC_FLAG_PSNR 0x8000 ///< error[?] variables will be set during encoding. +#define CODEC_FLAG_TRUNCATED 0x00010000 /** Input bitstream might be truncated at a random + location instead of only at frame boundaries. */ +#define CODEC_FLAG_NORMALIZE_AQP 0x00020000 ///< Normalize adaptive quantization. +#define CODEC_FLAG_INTERLACED_DCT 0x00040000 ///< Use interlaced DCT. +#define CODEC_FLAG_LOW_DELAY 0x00080000 ///< Force low delay. +#define CODEC_FLAG_ALT_SCAN 0x00100000 ///< Use alternate scan. +#define CODEC_FLAG_GLOBAL_HEADER 0x00400000 ///< Place global headers in extradata instead of every keyframe. +#define CODEC_FLAG_BITEXACT 0x00800000 ///< Use only bitexact stuff (except (I)DCT). +/* Fx : Flag for h263+ extra options */ +#define CODEC_FLAG_AC_PRED 0x01000000 ///< H.263 advanced intra coding / MPEG-4 AC prediction +#define CODEC_FLAG_H263P_UMV 0x02000000 ///< unlimited motion vector +#define CODEC_FLAG_CBP_RD 0x04000000 ///< Use rate distortion optimization for cbp. +#define CODEC_FLAG_QP_RD 0x08000000 ///< Use rate distortion optimization for qp selectioon. +#define CODEC_FLAG_H263P_AIV 0x00000008 ///< H.263 alternative inter VLC +#define CODEC_FLAG_OBMC 0x00000001 ///< OBMC +#define CODEC_FLAG_LOOP_FILTER 0x00000800 ///< loop filter +#define CODEC_FLAG_H263P_SLICE_STRUCT 0x10000000 +#define CODEC_FLAG_INTERLACED_ME 0x20000000 ///< interlaced motion estimation +#define CODEC_FLAG_SVCD_SCAN_OFFSET 0x40000000 ///< Will reserve space for SVCD scan offset user data. +#define CODEC_FLAG_CLOSED_GOP 0x80000000 +#define CODEC_FLAG2_FAST 0x00000001 ///< Allow non spec compliant speedup tricks. +#define CODEC_FLAG2_STRICT_GOP 0x00000002 ///< Strictly enforce GOP size. +#define CODEC_FLAG2_NO_OUTPUT 0x00000004 ///< Skip bitstream encoding. +#define CODEC_FLAG2_LOCAL_HEADER 0x00000008 ///< Place global headers at every keyframe instead of in extradata. +#define CODEC_FLAG2_BPYRAMID 0x00000010 ///< H.264 allow B-frames to be used as references. +#define CODEC_FLAG2_WPRED 0x00000020 ///< H.264 weighted biprediction for B-frames +#define CODEC_FLAG2_MIXED_REFS 0x00000040 ///< H.264 one reference per partition, as opposed to one reference per macroblock +#define CODEC_FLAG2_8X8DCT 0x00000080 ///< H.264 high profile 8x8 transform +#define CODEC_FLAG2_FASTPSKIP 0x00000100 ///< H.264 fast pskip +#define CODEC_FLAG2_AUD 0x00000200 ///< H.264 access unit delimiters +#define CODEC_FLAG2_BRDO 0x00000400 ///< B-frame rate-distortion optimization +#define CODEC_FLAG2_INTRA_VLC 0x00000800 ///< Use MPEG-2 intra VLC table. +#define CODEC_FLAG2_MEMC_ONLY 0x00001000 ///< Only do ME/MC (I frames -> ref, P frame -> ME+MC). +#define CODEC_FLAG2_DROP_FRAME_TIMECODE 0x00002000 ///< timecode is in drop frame format. +#define CODEC_FLAG2_SKIP_RD 0x00004000 ///< RD optimal MB level residual skipping +#define CODEC_FLAG2_CHUNKS 0x00008000 ///< Input bitstream might be truncated at a packet boundaries instead of only at frame boundaries. +#define CODEC_FLAG2_NON_LINEAR_QUANT 0x00010000 ///< Use MPEG-2 nonlinear quantizer. +#define CODEC_FLAG2_BIT_RESERVOIR 0x00020000 ///< Use a bit reservoir when encoding if possible +#define CODEC_FLAG2_MBTREE 0x00040000 ///< Use macroblock tree ratecontrol (x264 only) +#define CODEC_FLAG2_PSY 0x00080000 ///< Use psycho visual optimizations. +#define CODEC_FLAG2_SSIM 0x00100000 ///< Compute SSIM during encoding, error[] values are undefined. + +/* Unsupported options : + * Syntax Arithmetic coding (SAC) + * Reference Picture Selection + * Independent Segment Decoding */ +/* /Fx */ +/* codec capabilities */ + +#define CODEC_CAP_DRAW_HORIZ_BAND 0x0001 ///< Decoder can use draw_horiz_band callback. +/** + * Codec uses get_buffer() for allocating buffers and supports custom allocators. + * If not set, it might not use get_buffer() at all or use operations that + * assume the buffer was allocated by avcodec_default_get_buffer. + */ +#define CODEC_CAP_DR1 0x0002 +/* If 'parse_only' field is true, then avcodec_parse_frame() can be used. */ +#define CODEC_CAP_PARSE_ONLY 0x0004 +#define CODEC_CAP_TRUNCATED 0x0008 +/* Codec can export data for HW decoding (XvMC). */ +#define CODEC_CAP_HWACCEL 0x0010 +/** + * Codec has a nonzero delay and needs to be fed with NULL at the end to get the delayed data. + * If this is not set, the codec is guaranteed to never be fed with NULL data. + */ +#define CODEC_CAP_DELAY 0x0020 +/** + * Codec can be fed a final frame with a smaller size. + * This can be used to prevent truncation of the last audio samples. + */ +#define CODEC_CAP_SMALL_LAST_FRAME 0x0040 +/** + * Codec can export data for HW decoding (VDPAU). + */ +#define CODEC_CAP_HWACCEL_VDPAU 0x0080 +/** + * Codec can output multiple frames per AVPacket + * Normally demuxers return one frame at a time, demuxers which do not do + * are connected to a parser to split what they return into proper frames. + * This flag is reserved to the very rare category of codecs which have a + * bitstream that cannot be split into frames without timeconsuming + * operations like full decoding. Demuxers carring such bitstreams thus + * may return multiple frames in a packet. This has many disadvantages like + * prohibiting stream copy in many cases thus it should only be considered + * as a last resort. + */ +#define CODEC_CAP_SUBFRAMES 0x0100 + +//The following defines may change, don't expect compatibility if you use them. +#define MB_TYPE_INTRA4x4 0x0001 +#define MB_TYPE_INTRA16x16 0x0002 //FIXME H.264-specific +#define MB_TYPE_INTRA_PCM 0x0004 //FIXME H.264-specific +#define MB_TYPE_16x16 0x0008 +#define MB_TYPE_16x8 0x0010 +#define MB_TYPE_8x16 0x0020 +#define MB_TYPE_8x8 0x0040 +#define MB_TYPE_INTERLACED 0x0080 +#define MB_TYPE_DIRECT2 0x0100 //FIXME +#define MB_TYPE_ACPRED 0x0200 +#define MB_TYPE_GMC 0x0400 +#define MB_TYPE_SKIP 0x0800 +#define MB_TYPE_P0L0 0x1000 +#define MB_TYPE_P1L0 0x2000 +#define MB_TYPE_P0L1 0x4000 +#define MB_TYPE_P1L1 0x8000 +#define MB_TYPE_L0 (MB_TYPE_P0L0 | MB_TYPE_P1L0) +#define MB_TYPE_L1 (MB_TYPE_P0L1 | MB_TYPE_P1L1) +#define MB_TYPE_L0L1 (MB_TYPE_L0 | MB_TYPE_L1) +#define MB_TYPE_QUANT 0x00010000 +#define MB_TYPE_CBP 0x00020000 +//Note bits 24-31 are reserved for codec specific use (h264 ref0, mpeg1 0mv, ...) + +/** + * Pan Scan area. + * This specifies the area which should be displayed. + * Note there may be multiple such areas for one frame. + */ +typedef struct AVPanScan{ + /** + * id + * - encoding: Set by user. + * - decoding: Set by libavcodec. + */ + int id; + + /** + * width and height in 1/16 pel + * - encoding: Set by user. + * - decoding: Set by libavcodec. + */ + int width; + int height; + + /** + * position of the top left corner in 1/16 pel for up to 3 fields/frames + * - encoding: Set by user. + * - decoding: Set by libavcodec. + */ + int16_t position[3][2]; +}AVPanScan; + +#define FF_COMMON_FRAME \ + /**\ + * pointer to the picture planes.\ + * This might be different from the first allocated byte\ + * - encoding: \ + * - decoding: \ + */\ + uint8_t *data[4];\ + int linesize[4];\ + /**\ + * pointer to the first allocated byte of the picture. Can be used in get_buffer/release_buffer.\ + * This isn't used by libavcodec unless the default get/release_buffer() is used.\ + * - encoding: \ + * - decoding: \ + */\ + uint8_t *base[4];\ + /**\ + * 1 -> keyframe, 0-> not\ + * - encoding: Set by libavcodec.\ + * - decoding: Set by libavcodec.\ + */\ + int key_frame;\ +\ + /**\ + * Picture type of the frame, see ?_TYPE below.\ + * - encoding: Set by libavcodec. for coded_picture (and set by user for input).\ + * - decoding: Set by libavcodec.\ + */\ + int pict_type;\ +\ + /**\ + * presentation timestamp in time_base units (time when frame should be shown to user)\ + * If AV_NOPTS_VALUE then frame_rate = 1/time_base will be assumed.\ + * - encoding: MUST be set by user.\ + * - decoding: Set by libavcodec.\ + */\ + int64_t pts;\ +\ + /**\ + * picture number in bitstream order\ + * - encoding: set by\ + * - decoding: Set by libavcodec.\ + */\ + int coded_picture_number;\ + /**\ + * picture number in display order\ + * - encoding: set by\ + * - decoding: Set by libavcodec.\ + */\ + int display_picture_number;\ +\ + /**\ + * quality (between 1 (good) and FF_LAMBDA_MAX (bad)) \ + * - encoding: Set by libavcodec. for coded_picture (and set by user for input).\ + * - decoding: Set by libavcodec.\ + */\ + int quality; \ +\ + /**\ + * buffer age (1->was last buffer and dint change, 2->..., ...).\ + * Set to INT_MAX if the buffer has not been used yet.\ + * - encoding: unused\ + * - decoding: MUST be set by get_buffer().\ + */\ + int age;\ +\ + /**\ + * is this picture used as reference\ + * The values for this are the same as the MpegEncContext.picture_structure\ + * variable, that is 1->top field, 2->bottom field, 3->frame/both fields.\ + * Set to 4 for delayed, non-reference frames.\ + * - encoding: unused\ + * - decoding: Set by libavcodec. (before get_buffer() call)).\ + */\ + int reference;\ +\ + /**\ + * QP table\ + * - encoding: unused\ + * - decoding: Set by libavcodec.\ + */\ + int8_t *qscale_table;\ + /**\ + * QP store stride\ + * - encoding: unused\ + * - decoding: Set by libavcodec.\ + */\ + int qstride;\ +\ + /**\ + * mbskip_table[mb]>=1 if MB didn't change\ + * stride= mb_width = (width+15)>>4\ + * - encoding: unused\ + * - decoding: Set by libavcodec.\ + */\ + uint8_t *mbskip_table;\ +\ + /**\ + * motion vector table\ + * @code\ + * example:\ + * int mv_sample_log2= 4 - motion_subsample_log2;\ + * int mb_width= (width+15)>>4;\ + * int mv_stride= (mb_width << mv_sample_log2) + 1;\ + * motion_val[direction][x + y*mv_stride][0->mv_x, 1->mv_y];\ + * @endcode\ + * - encoding: Set by user.\ + * - decoding: Set by libavcodec.\ + */\ + int16_t (*motion_val[2])[2];\ +\ + /**\ + * macroblock type table\ + * mb_type_base + mb_width + 2\ + * - encoding: Set by user.\ + * - decoding: Set by libavcodec.\ + */\ + uint32_t *mb_type;\ +\ + /**\ + * log2 of the size of the block which a single vector in motion_val represents: \ + * (4->16x16, 3->8x8, 2-> 4x4, 1-> 2x2)\ + * - encoding: unused\ + * - decoding: Set by libavcodec.\ + */\ + uint8_t motion_subsample_log2;\ +\ + /**\ + * for some private data of the user\ + * - encoding: unused\ + * - decoding: Set by user.\ + */\ + void *opaque;\ +\ + /**\ + * error\ + * - encoding: Set by libavcodec. if flags&CODEC_FLAG_PSNR.\ + * - decoding: unused\ + */\ + uint64_t error[4];\ +\ + /**\ + * type of the buffer (to keep track of who has to deallocate data[*])\ + * - encoding: Set by the one who allocates it.\ + * - decoding: Set by the one who allocates it.\ + * Note: User allocated (direct rendering) & internal buffers cannot coexist currently.\ + */\ + int type;\ + \ + /**\ + * When decoding, this signals how much the picture must be delayed.\ + * extra_delay = repeat_pict / (2*fps)\ + * - encoding: unused\ + * - decoding: Set by libavcodec.\ + */\ + int repeat_pict;\ + \ + /**\ + * \ + */\ + int qscale_type;\ + \ + /**\ + * The content of the picture is interlaced.\ + * - encoding: Set by user.\ + * - decoding: Set by libavcodec. (default 0)\ + */\ + int interlaced_frame;\ + \ + /**\ + * If the content is interlaced, is top field displayed first.\ + * - encoding: Set by user.\ + * - decoding: Set by libavcodec.\ + */\ + int top_field_first;\ + \ + /**\ + * Pan scan.\ + * - encoding: Set by user.\ + * - decoding: Set by libavcodec.\ + */\ + AVPanScan *pan_scan;\ + \ + /**\ + * Tell user application that palette has changed from previous frame.\ + * - encoding: ??? (no palette-enabled encoder yet)\ + * - decoding: Set by libavcodec. (default 0).\ + */\ + int palette_has_changed;\ + \ + /**\ + * codec suggestion on buffer type if != 0\ + * - encoding: unused\ + * - decoding: Set by libavcodec. (before get_buffer() call)).\ + */\ + int buffer_hints;\ +\ + /**\ + * DCT coefficients\ + * - encoding: unused\ + * - decoding: Set by libavcodec.\ + */\ + short *dct_coeff;\ +\ + /**\ + * motion reference frame index\ + * the order in which these are stored can depend on the codec.\ + * - encoding: Set by user.\ + * - decoding: Set by libavcodec.\ + */\ + int8_t *ref_index[2];\ +\ + /**\ + * reordered opaque 64bit number (generally a PTS) from AVCodecContext.reordered_opaque\ + * output in AVFrame.reordered_opaque\ + * - encoding: unused\ + * - decoding: Read by user.\ + */\ + int64_t reordered_opaque;\ +\ + /**\ + * hardware accelerator private data (FFmpeg allocated)\ + * - encoding: unused\ + * - decoding: Set by libavcodec\ + */\ + void *hwaccel_picture_private;\ + + +#define FF_QSCALE_TYPE_MPEG1 0 +#define FF_QSCALE_TYPE_MPEG2 1 +#define FF_QSCALE_TYPE_H264 2 +#define FF_QSCALE_TYPE_VP56 3 + +#define FF_BUFFER_TYPE_INTERNAL 1 +#define FF_BUFFER_TYPE_USER 2 ///< direct rendering buffers (image is (de)allocated by user) +#define FF_BUFFER_TYPE_SHARED 4 ///< Buffer from somewhere else; don't deallocate image (data/base), all other tables are not shared. +#define FF_BUFFER_TYPE_COPY 8 ///< Just a (modified) copy of some other buffer, don't deallocate anything. + + +#define FF_I_TYPE 1 ///< Intra +#define FF_P_TYPE 2 ///< Predicted +#define FF_B_TYPE 3 ///< Bi-dir predicted +#define FF_S_TYPE 4 ///< S(GMC)-VOP MPEG4 +#define FF_SI_TYPE 5 ///< Switching Intra +#define FF_SP_TYPE 6 ///< Switching Predicted +#define FF_BI_TYPE 7 + +#define FF_BUFFER_HINTS_VALID 0x01 // Buffer hints value is meaningful (if 0 ignore). +#define FF_BUFFER_HINTS_READABLE 0x02 // Codec will read from buffer. +#define FF_BUFFER_HINTS_PRESERVE 0x04 // User must not alter buffer content. +#define FF_BUFFER_HINTS_REUSABLE 0x08 // Codec will reuse the buffer (update). + +typedef struct AVPacket { + /** + * Presentation timestamp in AVStream->time_base units; the time at which + * the decompressed packet will be presented to the user. + * Can be AV_NOPTS_VALUE if it is not stored in the file. + * pts MUST be larger or equal to dts as presentation cannot happen before + * decompression, unless one wants to view hex dumps. Some formats misuse + * the terms dts and pts/cts to mean something different. Such timestamps + * must be converted to true pts/dts before they are stored in AVPacket. + */ + int64_t pts; + /** + * Decompression timestamp in AVStream->time_base units; the time at which + * the packet is decompressed. + * Can be AV_NOPTS_VALUE if it is not stored in the file. + */ + int64_t dts; + uint8_t *data; + int size; + int stream_index; + int flags; + /** + * Duration of this packet in AVStream->time_base units, 0 if unknown. + * Equals next_pts - this_pts in presentation order. + */ + int duration; + void (*destruct)(struct AVPacket *); + void *priv; + int64_t pos; ///< byte position in stream, -1 if unknown + + /** + * Time difference in AVStream->time_base units from the pts of this + * packet to the point at which the output from the decoder has converged + * independent from the availability of previous frames. That is, the + * frames are virtually identical no matter if decoding started from + * the very first frame or from this keyframe. + * Is AV_NOPTS_VALUE if unknown. + * This field is not the display duration of the current packet. + * + * The purpose of this field is to allow seeking in streams that have no + * keyframes in the conventional sense. It corresponds to the + * recovery point SEI in H.264 and match_time_delta in NUT. It is also + * essential for some types of subtitle streams to ensure that all + * subtitles are correctly displayed after seeking. + */ + int64_t convergence_duration; +} AVPacket; +#define AV_PKT_FLAG_KEY 0x0001 +#if LIBAVCODEC_VERSION_MAJOR < 53 +#define PKT_FLAG_KEY AV_PKT_FLAG_KEY +#endif + +/** + * Audio Video Frame. + * New fields can be added to the end of FF_COMMON_FRAME with minor version + * bumps. + * Removal, reordering and changes to existing fields require a major + * version bump. No fields should be added into AVFrame before or after + * FF_COMMON_FRAME! + * sizeof(AVFrame) must not be used outside libav*. + */ +typedef struct AVFrame { + FF_COMMON_FRAME +} AVFrame; + +/** + * main external API structure. + * New fields can be added to the end with minor version bumps. + * Removal, reordering and changes to existing fields require a major + * version bump. + * sizeof(AVCodecContext) must not be used outside libav*. + */ +typedef struct AVCodecContext { + /** + * information on struct for av_log + * - set by avcodec_alloc_context + */ + const AVClass *av_class; + /** + * the average bitrate + * - encoding: Set by user; unused for constant quantizer encoding. + * - decoding: Set by libavcodec. 0 or some bitrate if this info is available in the stream. + */ + int bit_rate; + + /** + * number of bits the bitstream is allowed to diverge from the reference. + * the reference can be CBR (for CBR pass1) or VBR (for pass2) + * - encoding: Set by user; unused for constant quantizer encoding. + * - decoding: unused + */ + int bit_rate_tolerance; + + /** + * CODEC_FLAG_*. + * - encoding: Set by user. + * - decoding: Set by user. + */ + int flags; + + /** + * Some codecs need additional format info. It is stored here. + * If any muxer uses this then ALL demuxers/parsers AND encoders for the + * specific codec MUST set it correctly otherwise stream copy breaks. + * In general use of this field by muxers is not recommanded. + * - encoding: Set by libavcodec. + * - decoding: Set by libavcodec. (FIXME: Is this OK?) + */ + int sub_id; + + /** + * Motion estimation algorithm used for video coding. + * 1 (zero), 2 (full), 3 (log), 4 (phods), 5 (epzs), 6 (x1), 7 (hex), + * 8 (umh), 9 (iter), 10 (tesa) [7, 8, 10 are x264 specific, 9 is snow specific] + * - encoding: MUST be set by user. + * - decoding: unused + */ + int me_method; + + /** + * some codecs need / can use extradata like Huffman tables. + * mjpeg: Huffman tables + * rv10: additional flags + * mpeg4: global headers (they can be in the bitstream or here) + * The allocated memory should be FF_INPUT_BUFFER_PADDING_SIZE bytes larger + * than extradata_size to avoid prolems if it is read with the bitstream reader. + * The bytewise contents of extradata must not depend on the architecture or CPU endianness. + * - encoding: Set/allocated/freed by libavcodec. + * - decoding: Set/allocated/freed by user. + */ + uint8_t *extradata; + int extradata_size; + + /** + * This is the fundamental unit of time (in seconds) in terms + * of which frame timestamps are represented. For fixed-fps content, + * timebase should be 1/framerate and timestamp increments should be + * identically 1. + * - encoding: MUST be set by user. + * - decoding: Set by libavcodec. + */ + AVRational time_base; + + /* video only */ + /** + * picture width / height. + * - encoding: MUST be set by user. + * - decoding: Set by libavcodec. + * Note: For compatibility it is possible to set this instead of + * coded_width/height before decoding. + */ + int width, height; + +#define FF_ASPECT_EXTENDED 15 + + /** + * the number of pictures in a group of pictures, or 0 for intra_only + * - encoding: Set by user. + * - decoding: unused + */ + int gop_size; + + /** + * Pixel format, see PIX_FMT_xxx. + * - encoding: Set by user. + * - decoding: Set by libavcodec. + */ + enum PixelFormat pix_fmt; + + /** + * Frame rate emulation. If not zero, the lower layer (i.e. format handler) + * has to read frames at native frame rate. + * - encoding: Set by user. + * - decoding: unused + */ + int rate_emu; + + /** + * If non NULL, 'draw_horiz_band' is called by the libavcodec + * decoder to draw a horizontal band. It improves cache usage. Not + * all codecs can do that. You must check the codec capabilities + * beforehand. + * The function is also used by hardware acceleration APIs. + * It is called at least once during frame decoding to pass + * the data needed for hardware render. + * In that mode instead of pixel data, AVFrame points to + * a structure specific to the acceleration API. The application + * reads the structure and can change some fields to indicate progress + * or mark state. + * - encoding: unused + * - decoding: Set by user. + * @param height the height of the slice + * @param y the y position of the slice + * @param type 1->top field, 2->bottom field, 3->frame + * @param offset offset into the AVFrame.data from which the slice should be read + */ + void (*draw_horiz_band)(struct AVCodecContext *s, + const AVFrame *src, int offset[4], + int y, int type, int height); + + /* audio only */ + int sample_rate; ///< samples per second + int channels; ///< number of audio channels + + /** + * audio sample format + * - encoding: Set by user. + * - decoding: Set by libavcodec. + */ + enum SampleFormat sample_fmt; ///< sample format + + /* The following data should not be initialized. */ + /** + * Samples per packet, initialized when calling 'init'. + */ + int frame_size; + int frame_number; ///< audio or video frame number +#if LIBAVCODEC_VERSION_MAJOR < 53 + int real_pict_num; ///< Returns the real picture number of previous encoded frame. +#endif + + /** + * Number of frames the decoded output will be delayed relative to + * the encoded input. + * - encoding: Set by libavcodec. + * - decoding: unused + */ + int delay; + + /* - encoding parameters */ + float qcompress; ///< amount of qscale change between easy & hard scenes (0.0-1.0) + float qblur; ///< amount of qscale smoothing over time (0.0-1.0) + + /** + * minimum quantizer + * - encoding: Set by user. + * - decoding: unused + */ + int qmin; + + /** + * maximum quantizer + * - encoding: Set by user. + * - decoding: unused + */ + int qmax; + + /** + * maximum quantizer difference between frames + * - encoding: Set by user. + * - decoding: unused + */ + int max_qdiff; + + /** + * maximum number of B-frames between non-B-frames + * Note: The output will be delayed by max_b_frames+1 relative to the input. + * - encoding: Set by user. + * - decoding: unused + */ + int max_b_frames; + + /** + * qscale factor between IP and B-frames + * If > 0 then the last P-frame quantizer will be used (q= lastp_q*factor+offset). + * If < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset). + * - encoding: Set by user. + * - decoding: unused + */ + float b_quant_factor; + + /** obsolete FIXME remove */ + int rc_strategy; +#define FF_RC_STRATEGY_XVID 1 + + int b_frame_strategy; + + /** + * hurry up amount + * - encoding: unused + * - decoding: Set by user. 1-> Skip B-frames, 2-> Skip IDCT/dequant too, 5-> Skip everything except header + * @deprecated Deprecated in favor of skip_idct and skip_frame. + */ + int hurry_up; + + struct AVCodec *codec; + + void *priv_data; + + int rtp_payload_size; /* The size of the RTP payload: the coder will */ + /* do its best to deliver a chunk with size */ + /* below rtp_payload_size, the chunk will start */ + /* with a start code on some codecs like H.263. */ + /* This doesn't take account of any particular */ + /* headers inside the transmitted RTP payload. */ + + + /* The RTP callback: This function is called */ + /* every time the encoder has a packet to send. */ + /* It depends on the encoder if the data starts */ + /* with a Start Code (it should). H.263 does. */ + /* mb_nb contains the number of macroblocks */ + /* encoded in the RTP payload. */ + void (*rtp_callback)(struct AVCodecContext *avctx, void *data, int size, int mb_nb); + + /* statistics, used for 2-pass encoding */ + int mv_bits; + int header_bits; + int i_tex_bits; + int p_tex_bits; + int i_count; + int p_count; + int skip_count; + int misc_bits; + + /** + * number of bits used for the previously encoded frame + * - encoding: Set by libavcodec. + * - decoding: unused + */ + int frame_bits; + + /** + * Private data of the user, can be used to carry app specific stuff. + * - encoding: Set by user. + * - decoding: Set by user. + */ + void *opaque; + + char codec_name[32]; + enum AVMediaType codec_type; /* see AVMEDIA_TYPE_xxx */ + enum CodecID codec_id; /* see CODEC_ID_xxx */ + + /** + * fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A'). + * This is used to work around some encoder bugs. + * A demuxer should set this to what is stored in the field used to identify the codec. + * If there are multiple such fields in a container then the demuxer should choose the one + * which maximizes the information about the used codec. + * If the codec tag field in a container is larger then 32 bits then the demuxer should + * remap the longer ID to 32 bits with a table or other structure. Alternatively a new + * extra_codec_tag + size could be added but for this a clear advantage must be demonstrated + * first. + * - encoding: Set by user, if not then the default based on codec_id will be used. + * - decoding: Set by user, will be converted to uppercase by libavcodec during init. + */ + unsigned int codec_tag; + + /** + * Work around bugs in encoders which sometimes cannot be detected automatically. + * - encoding: Set by user + * - decoding: Set by user + */ + int workaround_bugs; +#define FF_BUG_AUTODETECT 1 ///< autodetection +#define FF_BUG_OLD_MSMPEG4 2 +#define FF_BUG_XVID_ILACE 4 +#define FF_BUG_UMP4 8 +#define FF_BUG_NO_PADDING 16 +#define FF_BUG_AMV 32 +#define FF_BUG_AC_VLC 0 ///< Will be removed, libavcodec can now handle these non-compliant files by default. +#define FF_BUG_QPEL_CHROMA 64 +#define FF_BUG_STD_QPEL 128 +#define FF_BUG_QPEL_CHROMA2 256 +#define FF_BUG_DIRECT_BLOCKSIZE 512 +#define FF_BUG_EDGE 1024 +#define FF_BUG_HPEL_CHROMA 2048 +#define FF_BUG_DC_CLIP 4096 +#define FF_BUG_MS 8192 ///< Work around various bugs in Microsoft's broken decoders. +#define FF_BUG_TRUNCATED 16384 +//#define FF_BUG_FAKE_SCALABILITY 16 //Autodetection should work 100%. + + /** + * luma single coefficient elimination threshold + * - encoding: Set by user. + * - decoding: unused + */ + int luma_elim_threshold; + + /** + * chroma single coeff elimination threshold + * - encoding: Set by user. + * - decoding: unused + */ + int chroma_elim_threshold; + + /** + * strictly follow the standard (MPEG4, ...). + * - encoding: Set by user. + * - decoding: Set by user. + * Setting this to STRICT or higher means the encoder and decoder will + * generally do stupid things. While setting it to inofficial or lower + * will mean the encoder might use things that are not supported by all + * spec compliant decoders. Decoders make no difference between normal, + * inofficial and experimental, that is they always try to decode things + * when they can unless they are explicitly asked to behave stupid + * (=strictly conform to the specs) + */ + int strict_std_compliance; +#define FF_COMPLIANCE_VERY_STRICT 2 ///< Strictly conform to a older more strict version of the spec or reference software. +#define FF_COMPLIANCE_STRICT 1 ///< Strictly conform to all the things in the spec no matter what consequences. +#define FF_COMPLIANCE_NORMAL 0 +#define FF_COMPLIANCE_INOFFICIAL -1 ///< Allow inofficial extensions. +#define FF_COMPLIANCE_EXPERIMENTAL -2 ///< Allow nonstandardized experimental things. + + /** + * qscale offset between IP and B-frames + * - encoding: Set by user. + * - decoding: unused + */ + float b_quant_offset; + + /** + * Error recognization; higher values will detect more errors but may + * misdetect some more or less valid parts as errors. + * - encoding: unused + * - decoding: Set by user. + */ + int error_recognition; +#define FF_ER_CAREFUL 1 +#define FF_ER_COMPLIANT 2 +#define FF_ER_AGGRESSIVE 3 +#define FF_ER_VERY_AGGRESSIVE 4 + + /** + * Called at the beginning of each frame to get a buffer for it. + * If pic.reference is set then the frame will be read later by libavcodec. + * avcodec_align_dimensions2() should be used to find the required width and + * height, as they normally need to be rounded up to the next multiple of 16. + * if CODEC_CAP_DR1 is not set then get_buffer() must call + * avcodec_default_get_buffer() instead of providing buffers allocated by + * some other means. + * - encoding: unused + * - decoding: Set by libavcodec., user can override. + */ + int (*get_buffer)(struct AVCodecContext *c, AVFrame *pic); + + /** + * Called to release buffers which were allocated with get_buffer. + * A released buffer can be reused in get_buffer(). + * pic.data[*] must be set to NULL. + * - encoding: unused + * - decoding: Set by libavcodec., user can override. + */ + void (*release_buffer)(struct AVCodecContext *c, AVFrame *pic); + + /** + * Size of the frame reordering buffer in the decoder. + * For MPEG-2 it is 1 IPB or 0 low delay IP. + * - encoding: Set by libavcodec. + * - decoding: Set by libavcodec. + */ + int has_b_frames; + + /** + * number of bytes per packet if constant and known or 0 + * Used by some WAV based audio codecs. + */ + int block_align; + + int parse_only; /* - decoding only: If true, only parsing is done + (function avcodec_parse_frame()). The frame + data is returned. Only MPEG codecs support this now. */ + + /** + * 0-> h263 quant 1-> mpeg quant + * - encoding: Set by user. + * - decoding: unused + */ + int mpeg_quant; + + /** + * pass1 encoding statistics output buffer + * - encoding: Set by libavcodec. + * - decoding: unused + */ + char *stats_out; + + /** + * pass2 encoding statistics input buffer + * Concatenated stuff from stats_out of pass1 should be placed here. + * - encoding: Allocated/set/freed by user. + * - decoding: unused + */ + char *stats_in; + + /** + * ratecontrol qmin qmax limiting method + * 0-> clipping, 1-> use a nice continous function to limit qscale wthin qmin/qmax. + * - encoding: Set by user. + * - decoding: unused + */ + float rc_qsquish; + + float rc_qmod_amp; + int rc_qmod_freq; + + /** + * ratecontrol override, see RcOverride + * - encoding: Allocated/set/freed by user. + * - decoding: unused + */ + RcOverride *rc_override; + int rc_override_count; + + /** + * rate control equation + * - encoding: Set by user + * - decoding: unused + */ + const char *rc_eq; + + /** + * maximum bitrate + * - encoding: Set by user. + * - decoding: unused + */ + int rc_max_rate; + + /** + * minimum bitrate + * - encoding: Set by user. + * - decoding: unused + */ + int rc_min_rate; + + /** + * decoder bitstream buffer size + * - encoding: Set by user. + * - decoding: unused + */ + int rc_buffer_size; + float rc_buffer_aggressivity; + + /** + * qscale factor between P and I-frames + * If > 0 then the last p frame quantizer will be used (q= lastp_q*factor+offset). + * If < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset). + * - encoding: Set by user. + * - decoding: unused + */ + float i_quant_factor; + + /** + * qscale offset between P and I-frames + * - encoding: Set by user. + * - decoding: unused + */ + float i_quant_offset; + + /** + * initial complexity for pass1 ratecontrol + * - encoding: Set by user. + * - decoding: unused + */ + float rc_initial_cplx; + + /** + * DCT algorithm, see FF_DCT_* below + * - encoding: Set by user. + * - decoding: unused + */ + int dct_algo; +#define FF_DCT_AUTO 0 +#define FF_DCT_FASTINT 1 +#define FF_DCT_INT 2 +#define FF_DCT_MMX 3 +#define FF_DCT_MLIB 4 +#define FF_DCT_ALTIVEC 5 +#define FF_DCT_FAAN 6 + + /** + * luminance masking (0-> disabled) + * - encoding: Set by user. + * - decoding: unused + */ + float lumi_masking; + + /** + * temporary complexity masking (0-> disabled) + * - encoding: Set by user. + * - decoding: unused + */ + float temporal_cplx_masking; + + /** + * spatial complexity masking (0-> disabled) + * - encoding: Set by user. + * - decoding: unused + */ + float spatial_cplx_masking; + + /** + * p block masking (0-> disabled) + * - encoding: Set by user. + * - decoding: unused + */ + float p_masking; + + /** + * darkness masking (0-> disabled) + * - encoding: Set by user. + * - decoding: unused + */ + float dark_masking; + + /** + * IDCT algorithm, see FF_IDCT_* below. + * - encoding: Set by user. + * - decoding: Set by user. + */ + int idct_algo; +#define FF_IDCT_AUTO 0 +#define FF_IDCT_INT 1 +#define FF_IDCT_SIMPLE 2 +#define FF_IDCT_SIMPLEMMX 3 +#define FF_IDCT_LIBMPEG2MMX 4 +#define FF_IDCT_PS2 5 +#define FF_IDCT_MLIB 6 +#define FF_IDCT_ARM 7 +#define FF_IDCT_ALTIVEC 8 +#define FF_IDCT_SH4 9 +#define FF_IDCT_SIMPLEARM 10 +#define FF_IDCT_H264 11 +#define FF_IDCT_VP3 12 +#define FF_IDCT_IPP 13 +#define FF_IDCT_XVIDMMX 14 +#define FF_IDCT_CAVS 15 +#define FF_IDCT_SIMPLEARMV5TE 16 +#define FF_IDCT_SIMPLEARMV6 17 +#define FF_IDCT_SIMPLEVIS 18 +#define FF_IDCT_WMV2 19 +#define FF_IDCT_FAAN 20 +#define FF_IDCT_EA 21 +#define FF_IDCT_SIMPLENEON 22 +#define FF_IDCT_SIMPLEALPHA 23 +#define FF_IDCT_BINK 24 + + /** + * slice count + * - encoding: Set by libavcodec. + * - decoding: Set by user (or 0). + */ + int slice_count; + /** + * slice offsets in the frame in bytes + * - encoding: Set/allocated by libavcodec. + * - decoding: Set/allocated by user (or NULL). + */ + int *slice_offset; + + /** + * error concealment flags + * - encoding: unused + * - decoding: Set by user. + */ + int error_concealment; +#define FF_EC_GUESS_MVS 1 +#define FF_EC_DEBLOCK 2 + + /** + * dsp_mask could be add used to disable unwanted CPU features + * CPU features (i.e. MMX, SSE. ...) + * + * With the FORCE flag you may instead enable given CPU features. + * (Dangerous: Usable in case of misdetection, improper usage however will + * result into program crash.) + */ + unsigned dsp_mask; +#define FF_MM_FORCE 0x80000000 /* Force usage of selected flags (OR) */ + /* lower 16 bits - CPU features */ +#define FF_MM_MMX 0x0001 ///< standard MMX +#define FF_MM_3DNOW 0x0004 ///< AMD 3DNOW +#if LIBAVCODEC_VERSION_MAJOR < 53 +#define FF_MM_MMXEXT 0x0002 ///< SSE integer functions or AMD MMX ext +#endif +#define FF_MM_MMX2 0x0002 ///< SSE integer functions or AMD MMX ext +#define FF_MM_SSE 0x0008 ///< SSE functions +#define FF_MM_SSE2 0x0010 ///< PIV SSE2 functions +#define FF_MM_3DNOWEXT 0x0020 ///< AMD 3DNowExt +#define FF_MM_SSE3 0x0040 ///< Prescott SSE3 functions +#define FF_MM_SSSE3 0x0080 ///< Conroe SSSE3 functions +#define FF_MM_SSE4 0x0100 ///< Penryn SSE4.1 functions +#define FF_MM_SSE42 0x0200 ///< Nehalem SSE4.2 functions +#define FF_MM_IWMMXT 0x0100 ///< XScale IWMMXT +#define FF_MM_ALTIVEC 0x0001 ///< standard AltiVec + + /** + * bits per sample/pixel from the demuxer (needed for huffyuv). + * - encoding: Set by libavcodec. + * - decoding: Set by user. + */ + int bits_per_coded_sample; + + /** + * prediction method (needed for huffyuv) + * - encoding: Set by user. + * - decoding: unused + */ + int prediction_method; +#define FF_PRED_LEFT 0 +#define FF_PRED_PLANE 1 +#define FF_PRED_MEDIAN 2 + + /** + * sample aspect ratio (0 if unknown) + * That is the width of a pixel divided by the height of the pixel. + * Numerator and denominator must be relatively prime and smaller than 256 for some video standards. + * - encoding: Set by user. + * - decoding: Set by libavcodec. + */ + AVRational sample_aspect_ratio; + + /** + * the picture in the bitstream + * - encoding: Set by libavcodec. + * - decoding: Set by libavcodec. + */ + AVFrame *coded_frame; + + /** + * debug + * - encoding: Set by user. + * - decoding: Set by user. + */ + int debug; +#define FF_DEBUG_PICT_INFO 1 +#define FF_DEBUG_RC 2 +#define FF_DEBUG_BITSTREAM 4 +#define FF_DEBUG_MB_TYPE 8 +#define FF_DEBUG_QP 16 +#define FF_DEBUG_MV 32 +#define FF_DEBUG_DCT_COEFF 0x00000040 +#define FF_DEBUG_SKIP 0x00000080 +#define FF_DEBUG_STARTCODE 0x00000100 +#define FF_DEBUG_PTS 0x00000200 +#define FF_DEBUG_ER 0x00000400 +#define FF_DEBUG_MMCO 0x00000800 +#define FF_DEBUG_BUGS 0x00001000 +#define FF_DEBUG_VIS_QP 0x00002000 +#define FF_DEBUG_VIS_MB_TYPE 0x00004000 +#define FF_DEBUG_BUFFERS 0x00008000 + + /** + * debug + * - encoding: Set by user. + * - decoding: Set by user. + */ + int debug_mv; +#define FF_DEBUG_VIS_MV_P_FOR 0x00000001 //visualize forward predicted MVs of P frames +#define FF_DEBUG_VIS_MV_B_FOR 0x00000002 //visualize forward predicted MVs of B frames +#define FF_DEBUG_VIS_MV_B_BACK 0x00000004 //visualize backward predicted MVs of B frames + + /** + * error + * - encoding: Set by libavcodec if flags&CODEC_FLAG_PSNR. + * - decoding: unused + */ + uint64_t error[4]; + + /** + * minimum MB quantizer + * - encoding: unused + * - decoding: unused + */ + int mb_qmin; + + /** + * maximum MB quantizer + * - encoding: unused + * - decoding: unused + */ + int mb_qmax; + + /** + * motion estimation comparison function + * - encoding: Set by user. + * - decoding: unused + */ + int me_cmp; + /** + * subpixel motion estimation comparison function + * - encoding: Set by user. + * - decoding: unused + */ + int me_sub_cmp; + /** + * macroblock comparison function (not supported yet) + * - encoding: Set by user. + * - decoding: unused + */ + int mb_cmp; + /** + * interlaced DCT comparison function + * - encoding: Set by user. + * - decoding: unused + */ + int ildct_cmp; +#define FF_CMP_SAD 0 +#define FF_CMP_SSE 1 +#define FF_CMP_SATD 2 +#define FF_CMP_DCT 3 +#define FF_CMP_PSNR 4 +#define FF_CMP_BIT 5 +#define FF_CMP_RD 6 +#define FF_CMP_ZERO 7 +#define FF_CMP_VSAD 8 +#define FF_CMP_VSSE 9 +#define FF_CMP_NSSE 10 +#define FF_CMP_W53 11 +#define FF_CMP_W97 12 +#define FF_CMP_DCTMAX 13 +#define FF_CMP_DCT264 14 +#define FF_CMP_CHROMA 256 + + /** + * ME diamond size & shape + * - encoding: Set by user. + * - decoding: unused + */ + int dia_size; + + /** + * amount of previous MV predictors (2a+1 x 2a+1 square) + * - encoding: Set by user. + * - decoding: unused + */ + int last_predictor_count; + + /** + * prepass for motion estimation + * - encoding: Set by user. + * - decoding: unused + */ + int pre_me; + + /** + * motion estimation prepass comparison function + * - encoding: Set by user. + * - decoding: unused + */ + int me_pre_cmp; + + /** + * ME prepass diamond size & shape + * - encoding: Set by user. + * - decoding: unused + */ + int pre_dia_size; + + /** + * subpel ME quality + * - encoding: Set by user. + * - decoding: unused + */ + int me_subpel_quality; + + /** + * callback to negotiate the pixelFormat + * @param fmt is the list of formats which are supported by the codec, + * it is terminated by -1 as 0 is a valid format, the formats are ordered by quality. + * The first is always the native one. + * @return the chosen format + * - encoding: unused + * - decoding: Set by user, if not set the native format will be chosen. + */ + enum PixelFormat (*get_format)(struct AVCodecContext *s, const enum PixelFormat * fmt); + + /** + * DTG active format information (additional aspect ratio + * information only used in DVB MPEG-2 transport streams) + * 0 if not set. + * + * - encoding: unused + * - decoding: Set by decoder. + */ + int dtg_active_format; +#define FF_DTG_AFD_SAME 8 +#define FF_DTG_AFD_4_3 9 +#define FF_DTG_AFD_16_9 10 +#define FF_DTG_AFD_14_9 11 +#define FF_DTG_AFD_4_3_SP_14_9 13 +#define FF_DTG_AFD_16_9_SP_14_9 14 +#define FF_DTG_AFD_SP_4_3 15 + + /** + * maximum motion estimation search range in subpel units + * If 0 then no limit. + * + * - encoding: Set by user. + * - decoding: unused + */ + int me_range; + + /** + * intra quantizer bias + * - encoding: Set by user. + * - decoding: unused + */ + int intra_quant_bias; +#define FF_DEFAULT_QUANT_BIAS 999999 + + /** + * inter quantizer bias + * - encoding: Set by user. + * - decoding: unused + */ + int inter_quant_bias; + + /** + * color table ID + * - encoding: unused + * - decoding: Which clrtable should be used for 8bit RGB images. + * Tables have to be stored somewhere. FIXME + */ + int color_table_id; + + /** + * internal_buffer count + * Don't touch, used by libavcodec default_get_buffer(). + */ + int internal_buffer_count; + + /** + * internal_buffers + * Don't touch, used by libavcodec default_get_buffer(). + */ + void *internal_buffer; + +#define FF_LAMBDA_SHIFT 7 +#define FF_LAMBDA_SCALE (1< ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A'). + * This is used to work around some encoder bugs. + * - encoding: unused + * - decoding: Set by user, will be converted to uppercase by libavcodec during init. + */ + unsigned int stream_codec_tag; + + /** + * scene change detection threshold + * 0 is default, larger means fewer detected scene changes. + * - encoding: Set by user. + * - decoding: unused + */ + int scenechange_threshold; + + /** + * minimum Lagrange multipler + * - encoding: Set by user. + * - decoding: unused + */ + int lmin; + + /** + * maximum Lagrange multipler + * - encoding: Set by user. + * - decoding: unused + */ + int lmax; + + /** + * palette control structure + * - encoding: ??? (no palette-enabled encoder yet) + * - decoding: Set by user. + */ + struct AVPaletteControl *palctrl; + + /** + * noise reduction strength + * - encoding: Set by user. + * - decoding: unused + */ + int noise_reduction; + + /** + * Called at the beginning of a frame to get cr buffer for it. + * Buffer type (size, hints) must be the same. libavcodec won't check it. + * libavcodec will pass previous buffer in pic, function should return + * same buffer or new buffer with old frame "painted" into it. + * If pic.data[0] == NULL must behave like get_buffer(). + * if CODEC_CAP_DR1 is not set then reget_buffer() must call + * avcodec_default_reget_buffer() instead of providing buffers allocated by + * some other means. + * - encoding: unused + * - decoding: Set by libavcodec., user can override + */ + int (*reget_buffer)(struct AVCodecContext *c, AVFrame *pic); + + /** + * Number of bits which should be loaded into the rc buffer before decoding starts. + * - encoding: Set by user. + * - decoding: unused + */ + int rc_initial_buffer_occupancy; + + /** + * + * - encoding: Set by user. + * - decoding: unused + */ + int inter_threshold; + + /** + * CODEC_FLAG2_* + * - encoding: Set by user. + * - decoding: Set by user. + */ + int flags2; + + /** + * Simulates errors in the bitstream to test error concealment. + * - encoding: Set by user. + * - decoding: unused + */ + int error_rate; + + /** + * MP3 antialias algorithm, see FF_AA_* below. + * - encoding: unused + * - decoding: Set by user. + */ + int antialias_algo; +#define FF_AA_AUTO 0 +#define FF_AA_FASTINT 1 //not implemented yet +#define FF_AA_INT 2 +#define FF_AA_FLOAT 3 + /** + * quantizer noise shaping + * - encoding: Set by user. + * - decoding: unused + */ + int quantizer_noise_shaping; + + /** + * thread count + * is used to decide how many independent tasks should be passed to execute() + * - encoding: Set by user. + * - decoding: Set by user. + */ + int thread_count; + + /** + * The codec may call this to execute several independent things. + * It will return only after finishing all tasks. + * The user may replace this with some multithreaded implementation, + * the default implementation will execute the parts serially. + * @param count the number of things to execute + * - encoding: Set by libavcodec, user can override. + * - decoding: Set by libavcodec, user can override. + */ + int (*execute)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg), void *arg2, int *ret, int count, int size); + + /** + * thread opaque + * Can be used by execute() to store some per AVCodecContext stuff. + * - encoding: set by execute() + * - decoding: set by execute() + */ + void *thread_opaque; + + /** + * Motion estimation threshold below which no motion estimation is + * performed, but instead the user specified motion vectors are used. + * + * - encoding: Set by user. + * - decoding: unused + */ + int me_threshold; + + /** + * Macroblock threshold below which the user specified macroblock types will be used. + * - encoding: Set by user. + * - decoding: unused + */ + int mb_threshold; + + /** + * precision of the intra DC coefficient - 8 + * - encoding: Set by user. + * - decoding: unused + */ + int intra_dc_precision; + + /** + * noise vs. sse weight for the nsse comparsion function + * - encoding: Set by user. + * - decoding: unused + */ + int nsse_weight; + + /** + * Number of macroblock rows at the top which are skipped. + * - encoding: unused + * - decoding: Set by user. + */ + int skip_top; + + /** + * Number of macroblock rows at the bottom which are skipped. + * - encoding: unused + * - decoding: Set by user. + */ + int skip_bottom; + + /** + * profile + * - encoding: Set by user. + * - decoding: Set by libavcodec. + */ + int profile; +#define FF_PROFILE_UNKNOWN -99 + +#define FF_PROFILE_AAC_MAIN 0 +#define FF_PROFILE_AAC_LOW 1 +#define FF_PROFILE_AAC_SSR 2 +#define FF_PROFILE_AAC_LTP 3 + +#define FF_PROFILE_H264_BASELINE 66 +#define FF_PROFILE_H264_MAIN 77 +#define FF_PROFILE_H264_EXTENDED 88 +#define FF_PROFILE_H264_HIGH 100 +#define FF_PROFILE_H264_HIGH_10 110 +#define FF_PROFILE_H264_HIGH_422 122 +#define FF_PROFILE_H264_HIGH_444 244 +#define FF_PROFILE_H264_CAVLC_444 44 + + /** + * level + * - encoding: Set by user. + * - decoding: Set by libavcodec. + */ + int level; +#define FF_LEVEL_UNKNOWN -99 + + /** + * low resolution decoding, 1-> 1/2 size, 2->1/4 size + * - encoding: unused + * - decoding: Set by user. + */ + int lowres; + + /** + * Bitstream width / height, may be different from width/height if lowres + * or other things are used. + * - encoding: unused + * - decoding: Set by user before init if known. Codec should override / dynamically change if needed. + */ + int coded_width, coded_height; + + /** + * frame skip threshold + * - encoding: Set by user. + * - decoding: unused + */ + int frame_skip_threshold; + + /** + * frame skip factor + * - encoding: Set by user. + * - decoding: unused + */ + int frame_skip_factor; + + /** + * frame skip exponent + * - encoding: Set by user. + * - decoding: unused + */ + int frame_skip_exp; + + /** + * frame skip comparison function + * - encoding: Set by user. + * - decoding: unused + */ + int frame_skip_cmp; + + /** + * Border processing masking, raises the quantizer for mbs on the borders + * of the picture. + * - encoding: Set by user. + * - decoding: unused + */ + float border_masking; + + /** + * minimum MB lagrange multipler + * - encoding: Set by user. + * - decoding: unused + */ + int mb_lmin; + + /** + * maximum MB lagrange multipler + * - encoding: Set by user. + * - decoding: unused + */ + int mb_lmax; + + /** + * + * - encoding: Set by user. + * - decoding: unused + */ + int me_penalty_compensation; + + /** + * + * - encoding: unused + * - decoding: Set by user. + */ + enum AVDiscard skip_loop_filter; + + /** + * + * - encoding: unused + * - decoding: Set by user. + */ + enum AVDiscard skip_idct; + + /** + * + * - encoding: unused + * - decoding: Set by user. + */ + enum AVDiscard skip_frame; + + /** + * + * - encoding: Set by user. + * - decoding: unused + */ + int bidir_refine; + + /** + * + * - encoding: Set by user. + * - decoding: unused + */ + int brd_scale; + + /** + * constant rate factor - quality-based VBR - values ~correspond to qps + * - encoding: Set by user. + * - decoding: unused + */ + float crf; + + /** + * constant quantization parameter rate control method + * - encoding: Set by user. + * - decoding: unused + */ + int cqp; + + /** + * minimum GOP size + * - encoding: Set by user. + * - decoding: unused + */ + int keyint_min; + + /** + * number of reference frames + * - encoding: Set by user. + * - decoding: Set by lavc. + */ + int refs; + + /** + * chroma qp offset from luma + * - encoding: Set by user. + * - decoding: unused + */ + int chromaoffset; + + /** + * Influences how often B-frames are used. + * - encoding: Set by user. + * - decoding: unused + */ + int bframebias; + + /** + * trellis RD quantization + * - encoding: Set by user. + * - decoding: unused + */ + int trellis; + + /** + * Reduce fluctuations in qp (before curve compression). + * - encoding: Set by user. + * - decoding: unused + */ + float complexityblur; + + /** + * in-loop deblocking filter alphac0 parameter + * alpha is in the range -6...6 + * - encoding: Set by user. + * - decoding: unused + */ + int deblockalpha; + + /** + * in-loop deblocking filter beta parameter + * beta is in the range -6...6 + * - encoding: Set by user. + * - decoding: unused + */ + int deblockbeta; + + /** + * macroblock subpartition sizes to consider - p8x8, p4x4, b8x8, i8x8, i4x4 + * - encoding: Set by user. + * - decoding: unused + */ + int partitions; +#define X264_PART_I4X4 0x001 /* Analyze i4x4 */ +#define X264_PART_I8X8 0x002 /* Analyze i8x8 (requires 8x8 transform) */ +#define X264_PART_P8X8 0x010 /* Analyze p16x8, p8x16 and p8x8 */ +#define X264_PART_P4X4 0x020 /* Analyze p8x4, p4x8, p4x4 */ +#define X264_PART_B8X8 0x100 /* Analyze b16x8, b8x16 and b8x8 */ + + /** + * direct MV prediction mode - 0 (none), 1 (spatial), 2 (temporal), 3 (auto) + * - encoding: Set by user. + * - decoding: unused + */ + int directpred; + + /** + * Audio cutoff bandwidth (0 means "automatic") + * - encoding: Set by user. + * - decoding: unused + */ + int cutoff; + + /** + * Multiplied by qscale for each frame and added to scene_change_score. + * - encoding: Set by user. + * - decoding: unused + */ + int scenechange_factor; + + /** + * + * Note: Value depends upon the compare function used for fullpel ME. + * - encoding: Set by user. + * - decoding: unused + */ + int mv0_threshold; + + /** + * Adjusts sensitivity of b_frame_strategy 1. + * - encoding: Set by user. + * - decoding: unused + */ + int b_sensitivity; + + /** + * - encoding: Set by user. + * - decoding: unused + */ + int compression_level; +#define FF_COMPRESSION_DEFAULT -1 + + /** + * Sets whether to use LPC mode - used by FLAC encoder. + * - encoding: Set by user. + * - decoding: unused + */ + int use_lpc; + + /** + * LPC coefficient precision - used by FLAC encoder + * - encoding: Set by user. + * - decoding: unused + */ + int lpc_coeff_precision; + + /** + * - encoding: Set by user. + * - decoding: unused + */ + int min_prediction_order; + + /** + * - encoding: Set by user. + * - decoding: unused + */ + int max_prediction_order; + + /** + * search method for selecting prediction order + * - encoding: Set by user. + * - decoding: unused + */ + int prediction_order_method; + + /** + * - encoding: Set by user. + * - decoding: unused + */ + int min_partition_order; + + /** + * - encoding: Set by user. + * - decoding: unused + */ + int max_partition_order; + + /** + * GOP timecode frame start number, in non drop frame format + * - encoding: Set by user. + * - decoding: unused + */ + int64_t timecode_frame_start; + +#if LIBAVCODEC_VERSION_MAJOR < 53 + /** + * Decoder should decode to this many channels if it can (0 for default) + * - encoding: unused + * - decoding: Set by user. + * @deprecated Deprecated in favor of request_channel_layout. + */ + int request_channels; +#endif + + /** + * Percentage of dynamic range compression to be applied by the decoder. + * The default value is 1.0, corresponding to full compression. + * - encoding: unused + * - decoding: Set by user. + */ + float drc_scale; + + /** + * opaque 64bit number (generally a PTS) that will be reordered and + * output in AVFrame.reordered_opaque + * - encoding: unused + * - decoding: Set by user. + */ + int64_t reordered_opaque; + + /** + * Bits per sample/pixel of internal libavcodec pixel/sample format. + * This field is applicable only when sample_fmt is SAMPLE_FMT_S32. + * - encoding: set by user. + * - decoding: set by libavcodec. + */ + int bits_per_raw_sample; + + /** + * Audio channel layout. + * - encoding: set by user. + * - decoding: set by libavcodec. + */ + int64_t channel_layout; + + /** + * Request decoder to use this channel layout if it can (0 for default) + * - encoding: unused + * - decoding: Set by user. + */ + int64_t request_channel_layout; + + /** + * Ratecontrol attempt to use, at maximum, of what can be used without an underflow. + * - encoding: Set by user. + * - decoding: unused. + */ + float rc_max_available_vbv_use; + + /** + * Ratecontrol attempt to use, at least, times the amount needed to prevent a vbv overflow. + * - encoding: Set by user. + * - decoding: unused. + */ + float rc_min_vbv_overflow_use; + + /** + * Hardware accelerator in use + * - encoding: unused. + * - decoding: Set by libavcodec + */ + struct AVHWAccel *hwaccel; + + /** + * For some codecs, the time base is closer to the field rate than the frame rate. + * Most notably, H.264 and MPEG-2 specify time_base as half of frame duration + * if no telecine is used ... + * + * Set to time_base ticks per frame. Default 1, e.g., H.264/MPEG-2 set it to 2. + */ + int ticks_per_frame; + + /** + * Hardware accelerator context. + * For some hardware accelerators, a global context needs to be + * provided by the user. In that case, this holds display-dependent + * data FFmpeg cannot instantiate itself. Please refer to the + * FFmpeg HW accelerator documentation to know how to fill this + * is. e.g. for VA API, this is a struct vaapi_context. + * - encoding: unused + * - decoding: Set by user + */ + void *hwaccel_context; + + /** + * Chromaticity coordinates of the source primaries. + * - encoding: Set by user + * - decoding: Set by libavcodec + */ + enum AVColorPrimaries color_primaries; + + /** + * Color Transfer Characteristic. + * - encoding: Set by user + * - decoding: Set by libavcodec + */ + enum AVColorTransferCharacteristic color_trc; + + /** + * YUV colorspace type. + * - encoding: Set by user + * - decoding: Set by libavcodec + */ + enum AVColorSpace colorspace; + + /** + * MPEG vs JPEG YUV range. + * - encoding: Set by user + * - decoding: Set by libavcodec + */ + enum AVColorRange color_range; + + /** + * This defines the location of chroma samples. + * - encoding: Set by user + * - decoding: Set by libavcodec + */ + enum AVChromaLocation chroma_sample_location; + + /** + * The codec may call this to execute several independent things. + * It will return only after finishing all tasks. + * The user may replace this with some multithreaded implementation, + * the default implementation will execute the parts serially. + * Also see avcodec_thread_init and e.g. the --enable-pthread configure option. + * @param c context passed also to func + * @param count the number of things to execute + * @param arg2 argument passed unchanged to func + * @param ret return values of executed functions, must have space for "count" values. May be NULL. + * @param func function that will be called count times, with jobnr from 0 to count-1. + * threadnr will be in the range 0 to c->thread_count-1 < MAX_THREADS and so that no + * two instances of func executing at the same time will have the same threadnr. + * @return always 0 currently, but code should handle a future improvement where when any call to func + * returns < 0 no further calls to func may be done and < 0 is returned. + * - encoding: Set by libavcodec, user can override. + * - decoding: Set by libavcodec, user can override. + */ + int (*execute2)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg, int jobnr, int threadnr), void *arg2, int *ret, int count); + + /** + * explicit P-frame weighted prediction analysis method + * 0: off + * 1: fast blind weighting (one reference duplicate with -1 offset) + * 2: smart weighting (full fade detection analysis) + * - encoding: Set by user. + * - decoding: unused + */ + int weighted_p_pred; + + /** + * AQ mode + * 0: Disabled + * 1: Variance AQ (complexity mask) + * 2: Auto-variance AQ (experimental) + * - encoding: Set by user + * - decoding: unused + */ + int aq_mode; + + /** + * AQ strength + * Reduces blocking and blurring in flat and textured areas. + * - encoding: Set by user + * - decoding: unused + */ + float aq_strength; + + /** + * PSY RD + * Strength of psychovisual optimization + * - encoding: Set by user + * - decoding: unused + */ + float psy_rd; + + /** + * PSY trellis + * Strength of psychovisual optimization + * - encoding: Set by user + * - decoding: unused + */ + float psy_trellis; + + /** + * RC lookahead + * Number of frames for frametype and ratecontrol lookahead + * - encoding: Set by user + * - decoding: unused + */ + int rc_lookahead; +} AVCodecContext; + +/** + * AVCodec. + */ +typedef struct AVCodec { + /** + * Name of the codec implementation. + * The name is globally unique among encoders and among decoders (but an + * encoder and a decoder can share the same name). + * This is the primary way to find a codec from the user perspective. + */ + const char *name; + enum AVMediaType type; + enum CodecID id; + int priv_data_size; + int (*init)(AVCodecContext *); + int (*encode)(AVCodecContext *, uint8_t *buf, int buf_size, void *data); + int (*close)(AVCodecContext *); + int (*decode)(AVCodecContext *, void *outdata, int *outdata_size, AVPacket *avpkt); + /** + * Codec capabilities. + * see CODEC_CAP_* + */ + int capabilities; + struct AVCodec *next; + /** + * Flush buffers. + * Will be called when seeking + */ + void (*flush)(AVCodecContext *); + const AVRational *supported_framerates; ///< array of supported framerates, or NULL if any, array is terminated by {0,0} + const enum PixelFormat *pix_fmts; ///< array of supported pixel formats, or NULL if unknown, array is terminated by -1 + /** + * Descriptive name for the codec, meant to be more human readable than name. + * You should use the NULL_IF_CONFIG_SMALL() macro to define it. + */ + const char *long_name; + const int *supported_samplerates; ///< array of supported audio samplerates, or NULL if unknown, array is terminated by 0 + const enum SampleFormat *sample_fmts; ///< array of supported sample formats, or NULL if unknown, array is terminated by -1 + const int64_t *channel_layouts; ///< array of support channel layouts, or NULL if unknown. array is terminated by 0 +} AVCodec; + +/** + * AVHWAccel. + */ +typedef struct AVHWAccel { + /** + * Name of the hardware accelerated codec. + * The name is globally unique among encoders and among decoders (but an + * encoder and a decoder can share the same name). + */ + const char *name; + + /** + * Type of codec implemented by the hardware accelerator. + * + * See AVMEDIA_TYPE_xxx + */ + enum AVMediaType type; + + /** + * Codec implemented by the hardware accelerator. + * + * See CODEC_ID_xxx + */ + enum CodecID id; + + /** + * Supported pixel format. + * + * Only hardware accelerated formats are supported here. + */ + enum PixelFormat pix_fmt; + + /** + * Hardware accelerated codec capabilities. + * see FF_HWACCEL_CODEC_CAP_* + */ + int capabilities; + + struct AVHWAccel *next; + + /** + * Called at the beginning of each frame or field picture. + * + * Meaningful frame information (codec specific) is guaranteed to + * be parsed at this point. This function is mandatory. + * + * Note that buf can be NULL along with buf_size set to 0. + * Otherwise, this means the whole frame is available at this point. + * + * @param avctx the codec context + * @param buf the frame data buffer base + * @param buf_size the size of the frame in bytes + * @return zero if successful, a negative value otherwise + */ + int (*start_frame)(AVCodecContext *avctx, const uint8_t *buf, uint32_t buf_size); + + /** + * Callback for each slice. + * + * Meaningful slice information (codec specific) is guaranteed to + * be parsed at this point. This function is mandatory. + * + * @param avctx the codec context + * @param buf the slice data buffer base + * @param buf_size the size of the slice in bytes + * @return zero if successful, a negative value otherwise + */ + int (*decode_slice)(AVCodecContext *avctx, const uint8_t *buf, uint32_t buf_size); + + /** + * Called at the end of each frame or field picture. + * + * The whole picture is parsed at this point and can now be sent + * to the hardware accelerator. This function is mandatory. + * + * @param avctx the codec context + * @return zero if successful, a negative value otherwise + */ + int (*end_frame)(AVCodecContext *avctx); + + /** + * Size of HW accelerator private data. + * + * Private data is allocated with av_mallocz() before + * AVCodecContext.get_buffer() and deallocated after + * AVCodecContext.release_buffer(). + */ + int priv_data_size; +} AVHWAccel; + +/** + * four components are given, that's all. + * the last component is alpha + */ +typedef struct AVPicture { + uint8_t *data[4]; + int linesize[4]; ///< number of bytes per line +} AVPicture; + +#if LIBAVCODEC_VERSION_MAJOR < 53 +/** + * AVPaletteControl + * This structure defines a method for communicating palette changes + * between and demuxer and a decoder. + * + * @deprecated Use AVPacket to send palette changes instead. + * This is totally broken. + */ +#define AVPALETTE_SIZE 1024 +#define AVPALETTE_COUNT 256 +typedef struct AVPaletteControl { + + /* Demuxer sets this to 1 to indicate the palette has changed; + * decoder resets to 0. */ + int palette_changed; + + /* 4-byte ARGB palette entries, stored in native byte order; note that + * the individual palette components should be on a 8-bit scale; if + * the palette data comes from an IBM VGA native format, the component + * data is probably 6 bits in size and needs to be scaled. */ + unsigned int palette[AVPALETTE_COUNT]; + +} AVPaletteControl attribute_deprecated; +#endif + +enum AVSubtitleType { + SUBTITLE_NONE, + + SUBTITLE_BITMAP, ///< A bitmap, pict will be set + + /** + * Plain text, the text field must be set by the decoder and is + * authoritative. ass and pict fields may contain approximations. + */ + SUBTITLE_TEXT, + + /** + * Formatted text, the ass field must be set by the decoder and is + * authoritative. pict and text fields may contain approximations. + */ + SUBTITLE_ASS, +}; + +typedef struct AVSubtitleRect { + int x; ///< top left corner of pict, undefined when pict is not set + int y; ///< top left corner of pict, undefined when pict is not set + int w; ///< width of pict, undefined when pict is not set + int h; ///< height of pict, undefined when pict is not set + int nb_colors; ///< number of colors in pict, undefined when pict is not set + + /** + * data+linesize for the bitmap of this subtitle. + * can be set for text/ass as well once they where rendered + */ + AVPicture pict; + enum AVSubtitleType type; + + char *text; ///< 0 terminated plain UTF-8 text + + /** + * 0 terminated ASS/SSA compatible event line. + * The pressentation of this is unaffected by the other values in this + * struct. + */ + char *ass; +} AVSubtitleRect; + +typedef struct AVSubtitle { + uint16_t format; /* 0 = graphics */ + uint32_t start_display_time; /* relative to packet pts, in ms */ + uint32_t end_display_time; /* relative to packet pts, in ms */ + unsigned num_rects; + AVSubtitleRect **rects; + int64_t pts; ///< Same as packet pts, in AV_TIME_BASE +} AVSubtitle; + +/* packet functions */ + +/** + * @deprecated use NULL instead + */ +attribute_deprecated void av_destruct_packet_nofree(AVPacket *pkt); + +/** + * Default packet destructor. + */ +void av_destruct_packet(AVPacket *pkt); + +/** + * Initialize optional fields of a packet with default values. + * + * @param pkt packet + */ +void av_init_packet(AVPacket *pkt); + +/** + * Allocate the payload of a packet and initialize its fields with + * default values. + * + * @param pkt packet + * @param size wanted payload size + * @return 0 if OK, AVERROR_xxx otherwise + */ +int av_new_packet(AVPacket *pkt, int size); + +/** + * Reduce packet size, correctly zeroing padding + * + * @param pkt packet + * @param size new size + */ +void av_shrink_packet(AVPacket *pkt, int size); + +/** + * @warning This is a hack - the packet memory allocation stuff is broken. The + * packet is allocated if it was not really allocated. + */ +int av_dup_packet(AVPacket *pkt); + +/** + * Free a packet. + * + * @param pkt packet to free + */ +void av_free_packet(AVPacket *pkt); + +/* resample.c */ + +struct ReSampleContext; +struct AVResampleContext; + +typedef struct ReSampleContext ReSampleContext; + +#if LIBAVCODEC_VERSION_MAJOR < 53 +/** + * @deprecated Use av_audio_resample_init() instead. + */ +attribute_deprecated ReSampleContext *audio_resample_init(int output_channels, int input_channels, + int output_rate, int input_rate); +#endif +/** + * Initializes audio resampling context + * + * @param output_channels number of output channels + * @param input_channels number of input channels + * @param output_rate output sample rate + * @param input_rate input sample rate + * @param sample_fmt_out requested output sample format + * @param sample_fmt_in input sample format + * @param filter_length length of each FIR filter in the filterbank relative to the cutoff freq + * @param log2_phase_count log2 of the number of entries in the polyphase filterbank + * @param linear If 1 then the used FIR filter will be linearly interpolated + between the 2 closest, if 0 the closest will be used + * @param cutoff cutoff frequency, 1.0 corresponds to half the output sampling rate + * @return allocated ReSampleContext, NULL if error occured + */ +ReSampleContext *av_audio_resample_init(int output_channels, int input_channels, + int output_rate, int input_rate, + enum SampleFormat sample_fmt_out, + enum SampleFormat sample_fmt_in, + int filter_length, int log2_phase_count, + int linear, double cutoff); + +int audio_resample(ReSampleContext *s, short *output, short *input, int nb_samples); +void audio_resample_close(ReSampleContext *s); + + +/** + * Initializes an audio resampler. + * Note, if either rate is not an integer then simply scale both rates up so they are. + * @param filter_length length of each FIR filter in the filterbank relative to the cutoff freq + * @param log2_phase_count log2 of the number of entries in the polyphase filterbank + * @param linear If 1 then the used FIR filter will be linearly interpolated + between the 2 closest, if 0 the closest will be used + * @param cutoff cutoff frequency, 1.0 corresponds to half the output sampling rate + */ +struct AVResampleContext *av_resample_init(int out_rate, int in_rate, int filter_length, int log2_phase_count, int linear, double cutoff); + +/** + * resamples. + * @param src an array of unconsumed samples + * @param consumed the number of samples of src which have been consumed are returned here + * @param src_size the number of unconsumed samples available + * @param dst_size the amount of space in samples available in dst + * @param update_ctx If this is 0 then the context will not be modified, that way several channels can be resampled with the same context. + * @return the number of samples written in dst or -1 if an error occurred + */ +int av_resample(struct AVResampleContext *c, short *dst, short *src, int *consumed, int src_size, int dst_size, int update_ctx); + + +/** + * Compensates samplerate/timestamp drift. The compensation is done by changing + * the resampler parameters, so no audible clicks or similar distortions occur + * @param compensation_distance distance in output samples over which the compensation should be performed + * @param sample_delta number of output samples which should be output less + * + * example: av_resample_compensate(c, 10, 500) + * here instead of 510 samples only 500 samples would be output + * + * note, due to rounding the actual compensation might be slightly different, + * especially if the compensation_distance is large and the in_rate used during init is small + */ +void av_resample_compensate(struct AVResampleContext *c, int sample_delta, int compensation_distance); +void av_resample_close(struct AVResampleContext *c); + +/** + * Allocate memory for a picture. Call avpicture_free to free it. + * + * @param picture the picture to be filled in + * @param pix_fmt the format of the picture + * @param width the width of the picture + * @param height the height of the picture + * @return zero if successful, a negative value if not + */ +int avpicture_alloc(AVPicture *picture, enum PixelFormat pix_fmt, int width, int height); + +/** + * Free a picture previously allocated by avpicture_alloc(). + * + * @param picture the AVPicture to be freed + */ +void avpicture_free(AVPicture *picture); + +/** + * Fill in the AVPicture fields. + * The fields of the given AVPicture are filled in by using the 'ptr' address + * which points to the image data buffer. Depending on the specified picture + * format, one or multiple image data pointers and line sizes will be set. + * If a planar format is specified, several pointers will be set pointing to + * the different picture planes and the line sizes of the different planes + * will be stored in the lines_sizes array. + * Call with ptr == NULL to get the required size for the ptr buffer. + * + * @param picture AVPicture whose fields are to be filled in + * @param ptr Buffer which will contain or contains the actual image data + * @param pix_fmt The format in which the picture data is stored. + * @param width the width of the image in pixels + * @param height the height of the image in pixels + * @return size of the image data in bytes + */ +int avpicture_fill(AVPicture *picture, uint8_t *ptr, + enum PixelFormat pix_fmt, int width, int height); +int avpicture_layout(const AVPicture* src, enum PixelFormat pix_fmt, int width, int height, + unsigned char *dest, int dest_size); + +/** + * Calculate the size in bytes that a picture of the given width and height + * would occupy if stored in the given picture format. + * Note that this returns the size of a compact representation as generated + * by avpicture_layout, which can be smaller than the size required for e.g. + * avpicture_fill. + * + * @param pix_fmt the given picture format + * @param width the width of the image + * @param height the height of the image + * @return Image data size in bytes or -1 on error (e.g. too large dimensions). + */ +int avpicture_get_size(enum PixelFormat pix_fmt, int width, int height); +void avcodec_get_chroma_sub_sample(enum PixelFormat pix_fmt, int *h_shift, int *v_shift); +const char *avcodec_get_pix_fmt_name(enum PixelFormat pix_fmt); +void avcodec_set_dimensions(AVCodecContext *s, int width, int height); + +#if LIBAVCODEC_VERSION_MAJOR < 53 +/** + * Returns the pixel format corresponding to the name name. + * + * If there is no pixel format with name name, then looks for a + * pixel format with the name corresponding to the native endian + * format of name. + * For example in a little-endian system, first looks for "gray16", + * then for "gray16le". + * + * Finally if no pixel format has been found, returns PIX_FMT_NONE. + * + * @deprecated Deprecated in favor of av_get_pix_fmt(). + */ +attribute_deprecated enum PixelFormat avcodec_get_pix_fmt(const char* name); +#endif + +/** + * Returns a value representing the fourCC code associated to the + * pixel format pix_fmt, or 0 if no associated fourCC code can be + * found. + */ +unsigned int avcodec_pix_fmt_to_codec_tag(enum PixelFormat pix_fmt); + +#define FF_LOSS_RESOLUTION 0x0001 /**< loss due to resolution change */ +#define FF_LOSS_DEPTH 0x0002 /**< loss due to color depth change */ +#define FF_LOSS_COLORSPACE 0x0004 /**< loss due to color space conversion */ +#define FF_LOSS_ALPHA 0x0008 /**< loss of alpha bits */ +#define FF_LOSS_COLORQUANT 0x0010 /**< loss due to color quantization */ +#define FF_LOSS_CHROMA 0x0020 /**< loss of chroma (e.g. RGB to gray conversion) */ + +/** + * Computes what kind of losses will occur when converting from one specific + * pixel format to another. + * When converting from one pixel format to another, information loss may occur. + * For example, when converting from RGB24 to GRAY, the color information will + * be lost. Similarly, other losses occur when converting from some formats to + * other formats. These losses can involve loss of chroma, but also loss of + * resolution, loss of color depth, loss due to the color space conversion, loss + * of the alpha bits or loss due to color quantization. + * avcodec_get_fix_fmt_loss() informs you about the various types of losses + * which will occur when converting from one pixel format to another. + * + * @param[in] dst_pix_fmt destination pixel format + * @param[in] src_pix_fmt source pixel format + * @param[in] has_alpha Whether the source pixel format alpha channel is used. + * @return Combination of flags informing you what kind of losses will occur. + */ +int avcodec_get_pix_fmt_loss(enum PixelFormat dst_pix_fmt, enum PixelFormat src_pix_fmt, + int has_alpha); + +/** + * Finds the best pixel format to convert to given a certain source pixel + * format. When converting from one pixel format to another, information loss + * may occur. For example, when converting from RGB24 to GRAY, the color + * information will be lost. Similarly, other losses occur when converting from + * some formats to other formats. avcodec_find_best_pix_fmt() searches which of + * the given pixel formats should be used to suffer the least amount of loss. + * The pixel formats from which it chooses one, are determined by the + * pix_fmt_mask parameter. + * + * @code + * src_pix_fmt = PIX_FMT_YUV420P; + * pix_fmt_mask = (1 << PIX_FMT_YUV422P) || (1 << PIX_FMT_RGB24); + * dst_pix_fmt = avcodec_find_best_pix_fmt(pix_fmt_mask, src_pix_fmt, alpha, &loss); + * @endcode + * + * @param[in] pix_fmt_mask bitmask determining which pixel format to choose from + * @param[in] src_pix_fmt source pixel format + * @param[in] has_alpha Whether the source pixel format alpha channel is used. + * @param[out] loss_ptr Combination of flags informing you what kind of losses will occur. + * @return The best pixel format to convert to or -1 if none was found. + */ +enum PixelFormat avcodec_find_best_pix_fmt(int64_t pix_fmt_mask, enum PixelFormat src_pix_fmt, + int has_alpha, int *loss_ptr); + + +/** + * Print in buf the string corresponding to the pixel format with + * number pix_fmt, or an header if pix_fmt is negative. + * + * @param[in] buf the buffer where to write the string + * @param[in] buf_size the size of buf + * @param[in] pix_fmt the number of the pixel format to print the corresponding info string, or + * a negative value to print the corresponding header. + * Meaningful values for obtaining a pixel format info vary from 0 to PIX_FMT_NB -1. + */ +void avcodec_pix_fmt_string (char *buf, int buf_size, enum PixelFormat pix_fmt); + +#define FF_ALPHA_TRANSP 0x0001 /* image has some totally transparent pixels */ +#define FF_ALPHA_SEMI_TRANSP 0x0002 /* image has some transparent pixels */ + +/** + * Tell if an image really has transparent alpha values. + * @return ored mask of FF_ALPHA_xxx constants + */ +int img_get_alpha_info(const AVPicture *src, + enum PixelFormat pix_fmt, int width, int height); + +/* deinterlace a picture */ +/* deinterlace - if not supported return -1 */ +int avpicture_deinterlace(AVPicture *dst, const AVPicture *src, + enum PixelFormat pix_fmt, int width, int height); + +/* external high level API */ + +/** + * If c is NULL, returns the first registered codec, + * if c is non-NULL, returns the next registered codec after c, + * or NULL if c is the last one. + */ +AVCodec *av_codec_next(AVCodec *c); + +/** + * Returns the LIBAVCODEC_VERSION_INT constant. + */ +unsigned avcodec_version(void); + +/** + * Returns the libavcodec build-time configuration. + */ +const char *avcodec_configuration(void); + +/** + * Returns the libavcodec license. + */ +const char *avcodec_license(void); + +/** + * Initializes libavcodec. + * + * @warning This function must be called before any other libavcodec + * function. + */ +void avcodec_init(void); + +#if LIBAVCODEC_VERSION_MAJOR < 53 +/** + * @deprecated Deprecated in favor of avcodec_register(). + */ +attribute_deprecated void register_avcodec(AVCodec *codec); +#endif + +/** + * Register the codec codec and initialize libavcodec. + * + * @see avcodec_init() + */ +void avcodec_register(AVCodec *codec); + +/** + * Finds a registered encoder with a matching codec ID. + * + * @param id CodecID of the requested encoder + * @return An encoder if one was found, NULL otherwise. + */ +AVCodec *avcodec_find_encoder(enum CodecID id); + +/** + * Finds a registered encoder with the specified name. + * + * @param name name of the requested encoder + * @return An encoder if one was found, NULL otherwise. + */ +AVCodec *avcodec_find_encoder_by_name(const char *name); + +/** + * Finds a registered decoder with a matching codec ID. + * + * @param id CodecID of the requested decoder + * @return A decoder if one was found, NULL otherwise. + */ +AVCodec *avcodec_find_decoder(enum CodecID id); + +/** + * Finds a registered decoder with the specified name. + * + * @param name name of the requested decoder + * @return A decoder if one was found, NULL otherwise. + */ +AVCodec *avcodec_find_decoder_by_name(const char *name); +void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode); + +/** + * Sets the fields of the given AVCodecContext to default values. + * + * @param s The AVCodecContext of which the fields should be set to default values. + */ +void avcodec_get_context_defaults(AVCodecContext *s); + +/** THIS FUNCTION IS NOT YET PART OF THE PUBLIC API! + * we WILL change its arguments and name a few times! */ +void avcodec_get_context_defaults2(AVCodecContext *s, enum AVMediaType); + +/** + * Allocates an AVCodecContext and sets its fields to default values. The + * resulting struct can be deallocated by simply calling av_free(). + * + * @return An AVCodecContext filled with default values or NULL on failure. + * @see avcodec_get_context_defaults + */ +AVCodecContext *avcodec_alloc_context(void); + +/** THIS FUNCTION IS NOT YET PART OF THE PUBLIC API! + * we WILL change its arguments and name a few times! */ +AVCodecContext *avcodec_alloc_context2(enum AVMediaType); + +/** + * Copy the settings of the source AVCodecContext into the destination + * AVCodecContext. The resulting destination codec context will be + * unopened, i.e. you are required to call avcodec_open() before you + * can use this AVCodecContext to decode/encode video/audio data. + * + * @param dest target codec context, should be initialized with + * avcodec_alloc_context(), but otherwise uninitialized + * @param src source codec context + * @return AVERROR() on error (e.g. memory allocation error), 0 on success + */ +int avcodec_copy_context(AVCodecContext *dest, const AVCodecContext *src); + +/** + * Sets the fields of the given AVFrame to default values. + * + * @param pic The AVFrame of which the fields should be set to default values. + */ +void avcodec_get_frame_defaults(AVFrame *pic); + +/** + * Allocates an AVFrame and sets its fields to default values. The resulting + * struct can be deallocated by simply calling av_free(). + * + * @return An AVFrame filled with default values or NULL on failure. + * @see avcodec_get_frame_defaults + */ +AVFrame *avcodec_alloc_frame(void); + +int avcodec_default_get_buffer(AVCodecContext *s, AVFrame *pic); +void avcodec_default_release_buffer(AVCodecContext *s, AVFrame *pic); +int avcodec_default_reget_buffer(AVCodecContext *s, AVFrame *pic); + +/** + * Returns the amount of padding in pixels which the get_buffer callback must + * provide around the edge of the image for codecs which do not have the + * CODEC_FLAG_EMU_EDGE flag. + * + * @return Required padding in pixels. + */ +unsigned avcodec_get_edge_width(void); +/** + * Modifies width and height values so that they will result in a memory + * buffer that is acceptable for the codec if you do not use any horizontal + * padding. + */ +void avcodec_align_dimensions(AVCodecContext *s, int *width, int *height); +/** + * Modifies width and height values so that they will result in a memory + * buffer that is acceptable for the codec if you also ensure that all + * line sizes are a multiple of the respective linesize_align[i]. + */ +void avcodec_align_dimensions2(AVCodecContext *s, int *width, int *height, + int linesize_align[4]); + +/** + * Checks if the given dimension of a picture is valid, meaning that all + * bytes of the picture can be addressed with a signed int. + * + * @param[in] w Width of the picture. + * @param[in] h Height of the picture. + * @return Zero if valid, a negative value if invalid. + */ +int avcodec_check_dimensions(void *av_log_ctx, unsigned int w, unsigned int h); +enum PixelFormat avcodec_default_get_format(struct AVCodecContext *s, const enum PixelFormat * fmt); + +int avcodec_thread_init(AVCodecContext *s, int thread_count); +void avcodec_thread_free(AVCodecContext *s); +int avcodec_default_execute(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2),void *arg, int *ret, int count, int size); +int avcodec_default_execute2(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2, int, int),void *arg, int *ret, int count); +//FIXME func typedef + +/** + * Initializes the AVCodecContext to use the given AVCodec. Prior to using this + * function the context has to be allocated. + * + * The functions avcodec_find_decoder_by_name(), avcodec_find_encoder_by_name(), + * avcodec_find_decoder() and avcodec_find_encoder() provide an easy way for + * retrieving a codec. + * + * @warning This function is not thread safe! + * + * @code + * avcodec_register_all(); + * codec = avcodec_find_decoder(CODEC_ID_H264); + * if (!codec) + * exit(1); + * + * context = avcodec_alloc_context(); + * + * if (avcodec_open(context, codec) < 0) + * exit(1); + * @endcode + * + * @param avctx The context which will be set up to use the given codec. + * @param codec The codec to use within the context. + * @return zero on success, a negative value on error + * @see avcodec_alloc_context, avcodec_find_decoder, avcodec_find_encoder + */ +int avcodec_open(AVCodecContext *avctx, AVCodec *codec); + +#if LIBAVCODEC_VERSION_MAJOR < 53 +/** + * Decodes an audio frame from buf into samples. + * Wrapper function which calls avcodec_decode_audio3. + * + * @deprecated Use avcodec_decode_audio3 instead. + * @param avctx the codec context + * @param[out] samples the output buffer + * @param[in,out] frame_size_ptr the output buffer size in bytes + * @param[in] buf the input buffer + * @param[in] buf_size the input buffer size in bytes + * @return On error a negative value is returned, otherwise the number of bytes + * used or zero if no frame could be decompressed. + */ +attribute_deprecated int avcodec_decode_audio2(AVCodecContext *avctx, int16_t *samples, + int *frame_size_ptr, + const uint8_t *buf, int buf_size); +#endif + +/** + * Decodes the audio frame of size avpkt->size from avpkt->data into samples. + * Some decoders may support multiple frames in a single AVPacket, such + * decoders would then just decode the first frame. In this case, + * avcodec_decode_audio3 has to be called again with an AVPacket that contains + * the remaining data in order to decode the second frame etc. + * If no frame + * could be outputted, frame_size_ptr is zero. Otherwise, it is the + * decompressed frame size in bytes. + * + * @warning You must set frame_size_ptr to the allocated size of the + * output buffer before calling avcodec_decode_audio3(). + * + * @warning The input buffer must be FF_INPUT_BUFFER_PADDING_SIZE larger than + * the actual read bytes because some optimized bitstream readers read 32 or 64 + * bits at once and could read over the end. + * + * @warning The end of the input buffer avpkt->data should be set to 0 to ensure that + * no overreading happens for damaged MPEG streams. + * + * @note You might have to align the input buffer avpkt->data and output buffer + * samples. The alignment requirements depend on the CPU: On some CPUs it isn't + * necessary at all, on others it won't work at all if not aligned and on others + * it will work but it will have an impact on performance. + * + * In practice, avpkt->data should have 4 byte alignment at minimum and + * samples should be 16 byte aligned unless the CPU doesn't need it + * (AltiVec and SSE do). + * + * @param avctx the codec context + * @param[out] samples the output buffer, sample type in avctx->sample_fmt + * @param[in,out] frame_size_ptr the output buffer size in bytes + * @param[in] avpkt The input AVPacket containing the input buffer. + * You can create such packet with av_init_packet() and by then setting + * data and size, some decoders might in addition need other fields. + * All decoders are designed to use the least fields possible though. + * @return On error a negative value is returned, otherwise the number of bytes + * used or zero if no frame data was decompressed (used) from the input AVPacket. + */ +int avcodec_decode_audio3(AVCodecContext *avctx, int16_t *samples, + int *frame_size_ptr, + AVPacket *avpkt); + +#if LIBAVCODEC_VERSION_MAJOR < 53 +/** + * Decodes a video frame from buf into picture. + * Wrapper function which calls avcodec_decode_video2. + * + * @deprecated Use avcodec_decode_video2 instead. + * @param avctx the codec context + * @param[out] picture The AVFrame in which the decoded video frame will be stored. + * @param[in] buf the input buffer + * @param[in] buf_size the size of the input buffer in bytes + * @param[in,out] got_picture_ptr Zero if no frame could be decompressed, otherwise, it is nonzero. + * @return On error a negative value is returned, otherwise the number of bytes + * used or zero if no frame could be decompressed. + */ +attribute_deprecated int avcodec_decode_video(AVCodecContext *avctx, AVFrame *picture, + int *got_picture_ptr, + const uint8_t *buf, int buf_size); +#endif + +/** + * Decodes the video frame of size avpkt->size from avpkt->data into picture. + * Some decoders may support multiple frames in a single AVPacket, such + * decoders would then just decode the first frame. + * + * @warning The input buffer must be FF_INPUT_BUFFER_PADDING_SIZE larger than + * the actual read bytes because some optimized bitstream readers read 32 or 64 + * bits at once and could read over the end. + * + * @warning The end of the input buffer buf should be set to 0 to ensure that + * no overreading happens for damaged MPEG streams. + * + * @note You might have to align the input buffer avpkt->data. + * The alignment requirements depend on the CPU: on some CPUs it isn't + * necessary at all, on others it won't work at all if not aligned and on others + * it will work but it will have an impact on performance. + * + * In practice, avpkt->data should have 4 byte alignment at minimum. + * + * @note Some codecs have a delay between input and output, these need to be + * fed with avpkt->data=NULL, avpkt->size=0 at the end to return the remaining frames. + * + * @param avctx the codec context + * @param[out] picture The AVFrame in which the decoded video frame will be stored. + * @param[in] avpkt The input AVpacket containing the input buffer. + * You can create such packet with av_init_packet() and by then setting + * data and size, some decoders might in addition need other fields like + * flags&AV_PKT_FLAG_KEY. All decoders are designed to use the least + * fields possible. + * @param[in,out] got_picture_ptr Zero if no frame could be decompressed, otherwise, it is nonzero. + * @return On error a negative value is returned, otherwise the number of bytes + * used or zero if no frame could be decompressed. + */ +int avcodec_decode_video2(AVCodecContext *avctx, AVFrame *picture, + int *got_picture_ptr, + AVPacket *avpkt); + +#if LIBAVCODEC_VERSION_MAJOR < 53 +/* Decode a subtitle message. Return -1 if error, otherwise return the + * number of bytes used. If no subtitle could be decompressed, + * got_sub_ptr is zero. Otherwise, the subtitle is stored in *sub. */ +attribute_deprecated int avcodec_decode_subtitle(AVCodecContext *avctx, AVSubtitle *sub, + int *got_sub_ptr, + const uint8_t *buf, int buf_size); +#endif + +/** + * Decodes a subtitle message. + * Returns a negative value on error, otherwise returns the number of bytes used. + * If no subtitle could be decompressed, got_sub_ptr is zero. + * Otherwise, the subtitle is stored in *sub. + * + * @param avctx the codec context + * @param[out] sub The AVSubtitle in which the decoded subtitle will be stored. + * @param[in,out] got_sub_ptr Zero if no subtitle could be decompressed, otherwise, it is nonzero. + * @param[in] avpkt The input AVPacket containing the input buffer. + */ +int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub, + int *got_sub_ptr, + AVPacket *avpkt); +int avcodec_parse_frame(AVCodecContext *avctx, uint8_t **pdata, + int *data_size_ptr, + uint8_t *buf, int buf_size); + +/** + * Encodes an audio frame from samples into buf. + * + * @note The output buffer should be at least FF_MIN_BUFFER_SIZE bytes large. + * However, for PCM audio the user will know how much space is needed + * because it depends on the value passed in buf_size as described + * below. In that case a lower value can be used. + * + * @param avctx the codec context + * @param[out] buf the output buffer + * @param[in] buf_size the output buffer size + * @param[in] samples the input buffer containing the samples + * The number of samples read from this buffer is frame_size*channels, + * both of which are defined in avctx. + * For PCM audio the number of samples read from samples is equal to + * buf_size * input_sample_size / output_sample_size. + * @return On error a negative value is returned, on success zero or the number + * of bytes used to encode the data read from the input buffer. + */ +int avcodec_encode_audio(AVCodecContext *avctx, uint8_t *buf, int buf_size, + const short *samples); + +/** + * Encodes a video frame from pict into buf. + * The input picture should be + * stored using a specific format, namely avctx.pix_fmt. + * + * @param avctx the codec context + * @param[out] buf the output buffer for the bitstream of encoded frame + * @param[in] buf_size the size of the output buffer in bytes + * @param[in] pict the input picture to encode + * @return On error a negative value is returned, on success zero or the number + * of bytes used from the output buffer. + */ +int avcodec_encode_video(AVCodecContext *avctx, uint8_t *buf, int buf_size, + const AVFrame *pict); +int avcodec_encode_subtitle(AVCodecContext *avctx, uint8_t *buf, int buf_size, + const AVSubtitle *sub); + +int avcodec_close(AVCodecContext *avctx); + +/** + * Register all the codecs, parsers and bitstream filters which were enabled at + * configuration time. If you do not call this function you can select exactly + * which formats you want to support, by using the individual registration + * functions. + * + * @see avcodec_register + * @see av_register_codec_parser + * @see av_register_bitstream_filter + */ +void avcodec_register_all(void); + +/** + * Flush buffers, should be called when seeking or when switching to a different stream. + */ +void avcodec_flush_buffers(AVCodecContext *avctx); + +void avcodec_default_free_buffers(AVCodecContext *s); + +/* misc useful functions */ + +/** + * Returns a single letter to describe the given picture type pict_type. + * + * @param[in] pict_type the picture type + * @return A single character representing the picture type. + */ +char av_get_pict_type_char(int pict_type); + +/** + * Returns codec bits per sample. + * + * @param[in] codec_id the codec + * @return Number of bits per sample or zero if unknown for the given codec. + */ +int av_get_bits_per_sample(enum CodecID codec_id); + +/** + * Returns sample format bits per sample. + * + * @param[in] sample_fmt the sample format + * @return Number of bits per sample or zero if unknown for the given sample format. + */ +int av_get_bits_per_sample_format(enum SampleFormat sample_fmt); + +/* frame parsing */ +typedef struct AVCodecParserContext { + void *priv_data; + struct AVCodecParser *parser; + int64_t frame_offset; /* offset of the current frame */ + int64_t cur_offset; /* current offset + (incremented by each av_parser_parse()) */ + int64_t next_frame_offset; /* offset of the next frame */ + /* video info */ + int pict_type; /* XXX: Put it back in AVCodecContext. */ + /** + * This field is used for proper frame duration computation in lavf. + * It signals, how much longer the frame duration of the current frame + * is compared to normal frame duration. + * + * frame_duration = (1 + repeat_pict) * time_base + * + * It is used by codecs like H.264 to display telecined material. + */ + int repeat_pict; /* XXX: Put it back in AVCodecContext. */ + int64_t pts; /* pts of the current frame */ + int64_t dts; /* dts of the current frame */ + + /* private data */ + int64_t last_pts; + int64_t last_dts; + int fetch_timestamp; + +#define AV_PARSER_PTS_NB 4 + int cur_frame_start_index; + int64_t cur_frame_offset[AV_PARSER_PTS_NB]; + int64_t cur_frame_pts[AV_PARSER_PTS_NB]; + int64_t cur_frame_dts[AV_PARSER_PTS_NB]; + + int flags; +#define PARSER_FLAG_COMPLETE_FRAMES 0x0001 + + int64_t offset; ///< byte offset from starting packet start + int64_t cur_frame_end[AV_PARSER_PTS_NB]; + + /*! + * Set by parser to 1 for key frames and 0 for non-key frames. + * It is initialized to -1, so if the parser doesn't set this flag, + * old-style fallback using FF_I_TYPE picture type as key frames + * will be used. + */ + int key_frame; + + /** + * Time difference in stream time base units from the pts of this + * packet to the point at which the output from the decoder has converged + * independent from the availability of previous frames. That is, the + * frames are virtually identical no matter if decoding started from + * the very first frame or from this keyframe. + * Is AV_NOPTS_VALUE if unknown. + * This field is not the display duration of the current frame. + * + * The purpose of this field is to allow seeking in streams that have no + * keyframes in the conventional sense. It corresponds to the + * recovery point SEI in H.264 and match_time_delta in NUT. It is also + * essential for some types of subtitle streams to ensure that all + * subtitles are correctly displayed after seeking. + */ + int64_t convergence_duration; + + // Timestamp generation support: + /** + * Synchronization point for start of timestamp generation. + * + * Set to >0 for sync point, 0 for no sync point and <0 for undefined + * (default). + * + * For example, this corresponds to presence of H.264 buffering period + * SEI message. + */ + int dts_sync_point; + + /** + * Offset of the current timestamp against last timestamp sync point in + * units of AVCodecContext.time_base. + * + * Set to INT_MIN when dts_sync_point unused. Otherwise, it must + * contain a valid timestamp offset. + * + * Note that the timestamp of sync point has usually a nonzero + * dts_ref_dts_delta, which refers to the previous sync point. Offset of + * the next frame after timestamp sync point will be usually 1. + * + * For example, this corresponds to H.264 cpb_removal_delay. + */ + int dts_ref_dts_delta; + + /** + * Presentation delay of current frame in units of AVCodecContext.time_base. + * + * Set to INT_MIN when dts_sync_point unused. Otherwise, it must + * contain valid non-negative timestamp delta (presentation time of a frame + * must not lie in the past). + * + * This delay represents the difference between decoding and presentation + * time of the frame. + * + * For example, this corresponds to H.264 dpb_output_delay. + */ + int pts_dts_delta; + + /** + * Position of the packet in file. + * + * Analogous to cur_frame_pts/dts + */ + int64_t cur_frame_pos[AV_PARSER_PTS_NB]; + + /** + * Byte position of currently parsed frame in stream. + */ + int64_t pos; + + /** + * Previous frame byte position. + */ + int64_t last_pos; +} AVCodecParserContext; + +typedef struct AVCodecParser { + int codec_ids[5]; /* several codec IDs are permitted */ + int priv_data_size; + int (*parser_init)(AVCodecParserContext *s); + int (*parser_parse)(AVCodecParserContext *s, + AVCodecContext *avctx, + const uint8_t **poutbuf, int *poutbuf_size, + const uint8_t *buf, int buf_size); + void (*parser_close)(AVCodecParserContext *s); + int (*split)(AVCodecContext *avctx, const uint8_t *buf, int buf_size); + struct AVCodecParser *next; +} AVCodecParser; + +AVCodecParser *av_parser_next(AVCodecParser *c); + +void av_register_codec_parser(AVCodecParser *parser); +AVCodecParserContext *av_parser_init(int codec_id); + +#if LIBAVCODEC_VERSION_MAJOR < 53 +attribute_deprecated +int av_parser_parse(AVCodecParserContext *s, + AVCodecContext *avctx, + uint8_t **poutbuf, int *poutbuf_size, + const uint8_t *buf, int buf_size, + int64_t pts, int64_t dts); +#endif + +/** + * Parse a packet. + * + * @param s parser context. + * @param avctx codec context. + * @param poutbuf set to pointer to parsed buffer or NULL if not yet finished. + * @param poutbuf_size set to size of parsed buffer or zero if not yet finished. + * @param buf input buffer. + * @param buf_size input length, to signal EOF, this should be 0 (so that the last frame can be output). + * @param pts input presentation timestamp. + * @param dts input decoding timestamp. + * @param pos input byte position in stream. + * @return the number of bytes of the input bitstream used. + * + * Example: + * @code + * while(in_len){ + * len = av_parser_parse2(myparser, AVCodecContext, &data, &size, + * in_data, in_len, + * pts, dts, pos); + * in_data += len; + * in_len -= len; + * + * if(size) + * decode_frame(data, size); + * } + * @endcode + */ +int av_parser_parse2(AVCodecParserContext *s, + AVCodecContext *avctx, + uint8_t **poutbuf, int *poutbuf_size, + const uint8_t *buf, int buf_size, + int64_t pts, int64_t dts, + int64_t pos); + +int av_parser_change(AVCodecParserContext *s, + AVCodecContext *avctx, + uint8_t **poutbuf, int *poutbuf_size, + const uint8_t *buf, int buf_size, int keyframe); +void av_parser_close(AVCodecParserContext *s); + + +typedef struct AVBitStreamFilterContext { + void *priv_data; + struct AVBitStreamFilter *filter; + AVCodecParserContext *parser; + struct AVBitStreamFilterContext *next; +} AVBitStreamFilterContext; + + +typedef struct AVBitStreamFilter { + const char *name; + int priv_data_size; + int (*filter)(AVBitStreamFilterContext *bsfc, + AVCodecContext *avctx, const char *args, + uint8_t **poutbuf, int *poutbuf_size, + const uint8_t *buf, int buf_size, int keyframe); + void (*close)(AVBitStreamFilterContext *bsfc); + struct AVBitStreamFilter *next; +} AVBitStreamFilter; + +void av_register_bitstream_filter(AVBitStreamFilter *bsf); +AVBitStreamFilterContext *av_bitstream_filter_init(const char *name); +int av_bitstream_filter_filter(AVBitStreamFilterContext *bsfc, + AVCodecContext *avctx, const char *args, + uint8_t **poutbuf, int *poutbuf_size, + const uint8_t *buf, int buf_size, int keyframe); +void av_bitstream_filter_close(AVBitStreamFilterContext *bsf); + +AVBitStreamFilter *av_bitstream_filter_next(AVBitStreamFilter *f); + +/* memory */ + +/** + * Reallocates the given block if it is not large enough, otherwise it + * does nothing. + * + * @see av_realloc + */ +void *av_fast_realloc(void *ptr, unsigned int *size, unsigned int min_size); + +/** + * Allocates a buffer, reusing the given one if large enough. + * + * Contrary to av_fast_realloc the current buffer contents might not be + * preserved and on error the old buffer is freed, thus no special + * handling to avoid memleaks is necessary. + * + * @param ptr pointer to pointer to already allocated buffer, overwritten with pointer to new buffer + * @param size size of the buffer *ptr points to + * @param min_size minimum size of *ptr buffer after returning, *ptr will be NULL and + * *size 0 if an error occurred. + */ +void av_fast_malloc(void *ptr, unsigned int *size, unsigned int min_size); + +/** + * Copy image 'src' to 'dst'. + */ +void av_picture_copy(AVPicture *dst, const AVPicture *src, + enum PixelFormat pix_fmt, int width, int height); + +/** + * Crop image top and left side. + */ +int av_picture_crop(AVPicture *dst, const AVPicture *src, + enum PixelFormat pix_fmt, int top_band, int left_band); + +/** + * Pad image. + */ +int av_picture_pad(AVPicture *dst, const AVPicture *src, int height, int width, enum PixelFormat pix_fmt, + int padtop, int padbottom, int padleft, int padright, int *color); + +/** + * Encodes extradata length to a buffer. Used by xiph codecs. + * + * @param s buffer to write to; must be at least (v/255+1) bytes long + * @param v size of extradata in bytes + * @return number of bytes written to the buffer. + */ +unsigned int av_xiphlacing(unsigned char *s, unsigned int v); + +/** + * Parses str and put in width_ptr and height_ptr the detected values. + * + * @return 0 in case of a successful parsing, a negative value otherwise + * @param[in] str the string to parse: it has to be a string in the format + * x or a valid video frame size abbreviation. + * @param[in,out] width_ptr pointer to the variable which will contain the detected + * frame width value + * @param[in,out] height_ptr pointer to the variable which will contain the detected + * frame height value + */ +int av_parse_video_frame_size(int *width_ptr, int *height_ptr, const char *str); + +/** + * Parses str and put in frame_rate the detected values. + * + * @return 0 in case of a successful parsing, a negative value otherwise + * @param[in] str the string to parse: it has to be a string in the format + * /, a float number or a valid video rate abbreviation + * @param[in,out] frame_rate pointer to the AVRational which will contain the detected + * frame rate + */ +int av_parse_video_frame_rate(AVRational *frame_rate, const char *str); + +/** + * Logs a generic warning message about a missing feature. This function is + * intended to be used internally by FFmpeg (libavcodec, libavformat, etc.) + * only, and would normally not be used by applications. + * @param[in] avc a pointer to an arbitrary struct of which the first field is + * a pointer to an AVClass struct + * @param[in] feature string containing the name of the missing feature + * @param[in] want_sample indicates if samples are wanted which exhibit this feature. + * If want_sample is non-zero, additional verbage will be added to the log + * message which tells the user how to report samples to the development + * mailing list. + */ +void av_log_missing_feature(void *avc, const char *feature, int want_sample); + +/** + * Logs a generic warning message asking for a sample. This function is + * intended to be used internally by FFmpeg (libavcodec, libavformat, etc.) + * only, and would normally not be used by applications. + * @param[in] avc a pointer to an arbitrary struct of which the first field is + * a pointer to an AVClass struct + * @param[in] msg string containing an optional message, or NULL if no message + */ +void av_log_ask_for_sample(void *avc, const char *msg); + +/** + * Registers the hardware accelerator hwaccel. + */ +void av_register_hwaccel(AVHWAccel *hwaccel); + +/** + * If hwaccel is NULL, returns the first registered hardware accelerator, + * if hwaccel is non-NULL, returns the next registered hardware accelerator + * after hwaccel, or NULL if hwaccel is the last one. + */ +AVHWAccel *av_hwaccel_next(AVHWAccel *hwaccel); + + +/** + * Lock operation used by lockmgr + */ +enum AVLockOp { + AV_LOCK_CREATE, ///< Create a mutex + AV_LOCK_OBTAIN, ///< Lock the mutex + AV_LOCK_RELEASE, ///< Unlock the mutex + AV_LOCK_DESTROY, ///< Free mutex resources +}; + +/** + * Register a user provided lock manager supporting the operations + * specified by AVLockOp. mutex points to a (void *) where the + * lockmgr should store/get a pointer to a user allocated mutex. It's + * NULL upon AV_LOCK_CREATE and != NULL for all other ops. + * + * @param cb User defined callback. Note: FFmpeg may invoke calls to this + * callback during the call to av_lockmgr_register(). + * Thus, the application must be prepared to handle that. + * If cb is set to NULL the lockmgr will be unregistered. + * Also note that during unregistration the previously registered + * lockmgr callback may also be invoked. + */ +int av_lockmgr_register(int (*cb)(void **mutex, enum AVLockOp op)); + +#endif /* AVCODEC_AVCODEC_H */ diff --git a/extra_lib/include/ffmpeg_android/libavformat/avformat.h b/extra_lib/include/ffmpeg_android/libavformat/avformat.h new file mode 100644 index 0000000..5ff08c0 --- /dev/null +++ b/extra_lib/include/ffmpeg_android/libavformat/avformat.h @@ -0,0 +1,1340 @@ +/* + * copyright (c) 2001 Fabrice Bellard + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef AVFORMAT_AVFORMAT_H +#define AVFORMAT_AVFORMAT_H + +#define LIBAVFORMAT_VERSION_MAJOR 52 +#define LIBAVFORMAT_VERSION_MINOR 61 +#define LIBAVFORMAT_VERSION_MICRO 0 + +#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ + LIBAVFORMAT_VERSION_MINOR, \ + LIBAVFORMAT_VERSION_MICRO) +#define LIBAVFORMAT_VERSION AV_VERSION(LIBAVFORMAT_VERSION_MAJOR, \ + LIBAVFORMAT_VERSION_MINOR, \ + LIBAVFORMAT_VERSION_MICRO) +#define LIBAVFORMAT_BUILD LIBAVFORMAT_VERSION_INT + +#define LIBAVFORMAT_IDENT "Lavf" AV_STRINGIFY(LIBAVFORMAT_VERSION) + +/** + * I return the LIBAVFORMAT_VERSION_INT constant. You got + * a fucking problem with that, douchebag? + */ +unsigned avformat_version(void); + +/** + * Returns the libavformat build-time configuration. + */ +const char *avformat_configuration(void); + +/** + * Returns the libavformat license. + */ +const char *avformat_license(void); + +#include +#include /* FILE */ +#include "libavcodec/avcodec.h" + +#include "avio.h" + +struct AVFormatContext; + + +/* + * Public Metadata API. + * The metadata API allows libavformat to export metadata tags to a client + * application using a sequence of key/value pairs. Like all strings in FFmpeg, + * metadata must be stored as UTF-8 encoded Unicode. Note that metadata + * exported by demuxers isn't checked to be valid UTF-8 in most cases. + * Important concepts to keep in mind: + * 1. Keys are unique; there can never be 2 tags with the same key. This is + * also meant semantically, i.e., a demuxer should not knowingly produce + * several keys that are literally different but semantically identical. + * E.g., key=Author5, key=Author6. In this example, all authors must be + * placed in the same tag. + * 2. Metadata is flat, not hierarchical; there are no subtags. If you + * want to store, e.g., the email address of the child of producer Alice + * and actor Bob, that could have key=alice_and_bobs_childs_email_address. + * 3. Several modifiers can be applied to the tag name. This is done by + * appending a dash character ('-') and the modifier name in the order + * they appear in the list below -- e.g. foo-eng-sort, not foo-sort-eng. + * a) language -- a tag whose value is localized for a particular language + * is appended with the ISO 639-2/B 3-letter language code. + * For example: Author-ger=Michael, Author-eng=Mike + * The original/default language is in the unqualified "Author" tag. + * A demuxer should set a default if it sets any translated tag. + * b) sorting -- a modified version of a tag that should be used for + * sorting will have '-sort' appended. E.g. artist="The Beatles", + * artist-sort="Beatles, The". + * + * 4. Tag names are normally exported exactly as stored in the container to + * allow lossless remuxing to the same format. For container-independent + * handling of metadata, av_metadata_conv() can convert it to ffmpeg generic + * format. Follows a list of generic tag names: + * + * album -- name of the set this work belongs to + * album_artist -- main creator of the set/album, if different from artist. + * e.g. "Various Artists" for compilation albums. + * artist -- main creator of the work + * comment -- any additional description of the file. + * composer -- who composed the work, if different from artist. + * copyright -- name of copyright holder. + * date -- date when the work was created, preferably in ISO 8601. + * disc -- number of a subset, e.g. disc in a multi-disc collection. + * encoder -- name/settings of the software/hardware that produced the file. + * encoded_by -- person/group who created the file. + * filename -- original name of the file. + * genre -- . + * language -- main language in which the work is performed, preferably + * in ISO 639-2 format. + * performer -- artist who performed the work, if different from artist. + * E.g for "Also sprach Zarathustra", artist would be "Richard + * Strauss" and performer "London Philharmonic Orchestra". + * publisher -- name of the label/publisher. + * title -- name of the work. + * track -- number of this work in the set, can be in form current/total. + */ + +#define AV_METADATA_MATCH_CASE 1 +#define AV_METADATA_IGNORE_SUFFIX 2 +#define AV_METADATA_DONT_STRDUP_KEY 4 +#define AV_METADATA_DONT_STRDUP_VAL 8 +#define AV_METADATA_DONT_OVERWRITE 16 ///< Don't overwrite existing tags. + +typedef struct { + char *key; + char *value; +}AVMetadataTag; + +typedef struct AVMetadata AVMetadata; +typedef struct AVMetadataConv AVMetadataConv; + +/** + * Gets a metadata element with matching key. + * @param prev Set to the previous matching element to find the next. + * If set to NULL the first matching element is returned. + * @param flags Allows case as well as suffix-insensitive comparisons. + * @return Found tag or NULL, changing key or value leads to undefined behavior. + */ +AVMetadataTag * +av_metadata_get(AVMetadata *m, const char *key, const AVMetadataTag *prev, int flags); + +#if LIBAVFORMAT_VERSION_MAJOR == 52 +/** + * Sets the given tag in m, overwriting an existing tag. + * @param key tag key to add to m (will be av_strduped) + * @param value tag value to add to m (will be av_strduped) + * @return >= 0 on success otherwise an error code <0 + */ +int av_metadata_set(AVMetadata **pm, const char *key, const char *value); +#endif + +/** + * Sets the given tag in m, overwriting an existing tag. + * @param key tag key to add to m (will be av_strduped depending on flags) + * @param value tag value to add to m (will be av_strduped depending on flags) + * @return >= 0 on success otherwise an error code <0 + */ +int av_metadata_set2(AVMetadata **pm, const char *key, const char *value, int flags); + +/** + * Converts all the metadata sets from ctx according to the source and + * destination conversion tables. If one of the tables is NULL, then + * tags are converted to/from ffmpeg generic tag names. + * @param d_conv destination tags format conversion table + * @param s_conv source tags format conversion table + */ +void av_metadata_conv(struct AVFormatContext *ctx,const AVMetadataConv *d_conv, + const AVMetadataConv *s_conv); + +/** + * Frees all the memory allocated for an AVMetadata struct. + */ +void av_metadata_free(AVMetadata **m); + + +/* packet functions */ + + +/** + * Allocates and reads the payload of a packet and initializes its + * fields with default values. + * + * @param pkt packet + * @param size desired payload size + * @return >0 (read size) if OK, AVERROR_xxx otherwise + */ +int av_get_packet(ByteIOContext *s, AVPacket *pkt, int size); + + +/*************************************************/ +/* fractional numbers for exact pts handling */ + +/** + * The exact value of the fractional number is: 'val + num / den'. + * num is assumed to be 0 <= num < den. + */ +typedef struct AVFrac { + int64_t val, num, den; +} AVFrac; + +/*************************************************/ +/* input/output formats */ + +struct AVCodecTag; + +/** This structure contains the data a format has to probe a file. */ +typedef struct AVProbeData { + const char *filename; + unsigned char *buf; /**< Buffer must have AVPROBE_PADDING_SIZE of extra allocated bytes filled with zero. */ + int buf_size; /**< Size of buf except extra allocated bytes */ +} AVProbeData; + +#define AVPROBE_SCORE_MAX 100 ///< maximum score, half of that is used for file-extension-based detection +#define AVPROBE_PADDING_SIZE 32 ///< extra allocated bytes at the end of the probe buffer + +typedef struct AVFormatParameters { + AVRational time_base; + int sample_rate; + int channels; + int width; + int height; + enum PixelFormat pix_fmt; + int channel; /**< Used to select DV channel. */ + const char *standard; /**< TV standard, NTSC, PAL, SECAM */ + unsigned int mpeg2ts_raw:1; /**< Force raw MPEG-2 transport stream output, if possible. */ + unsigned int mpeg2ts_compute_pcr:1; /**< Compute exact PCR for each transport + stream packet (only meaningful if + mpeg2ts_raw is TRUE). */ + unsigned int initial_pause:1; /**< Do not begin to play the stream + immediately (RTSP only). */ + unsigned int prealloced_context:1; +#if LIBAVFORMAT_VERSION_INT < (53<<16) + enum CodecID video_codec_id; + enum CodecID audio_codec_id; +#endif +} AVFormatParameters; + +//! Demuxer will use url_fopen, no opened file should be provided by the caller. +#define AVFMT_NOFILE 0x0001 +#define AVFMT_NEEDNUMBER 0x0002 /**< Needs '%d' in filename. */ +#define AVFMT_SHOW_IDS 0x0008 /**< Show format stream IDs numbers. */ +#define AVFMT_RAWPICTURE 0x0020 /**< Format wants AVPicture structure for + raw picture data. */ +#define AVFMT_GLOBALHEADER 0x0040 /**< Format wants global header. */ +#define AVFMT_NOTIMESTAMPS 0x0080 /**< Format does not need / have any timestamps. */ +#define AVFMT_GENERIC_INDEX 0x0100 /**< Use generic index building code. */ +#define AVFMT_TS_DISCONT 0x0200 /**< Format allows timestamp discontinuities. */ +#define AVFMT_VARIABLE_FPS 0x0400 /**< Format allows variable fps. */ +#define AVFMT_NODIMENSIONS 0x0800 /**< Format does not need width/height */ + +typedef struct AVOutputFormat { + const char *name; + /** + * Descriptive name for the format, meant to be more human-readable + * than name. You should use the NULL_IF_CONFIG_SMALL() macro + * to define it. + */ + const char *long_name; + const char *mime_type; + const char *extensions; /**< comma-separated filename extensions */ + /** size of private data so that it can be allocated in the wrapper */ + int priv_data_size; + /* output support */ + enum CodecID audio_codec; /**< default audio codec */ + enum CodecID video_codec; /**< default video codec */ + int (*write_header)(struct AVFormatContext *); + int (*write_packet)(struct AVFormatContext *, AVPacket *pkt); + int (*write_trailer)(struct AVFormatContext *); + /** can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, AVFMT_GLOBALHEADER */ + int flags; + /** Currently only used to set pixel format if not YUV420P. */ + int (*set_parameters)(struct AVFormatContext *, AVFormatParameters *); + int (*interleave_packet)(struct AVFormatContext *, AVPacket *out, + AVPacket *in, int flush); + + /** + * List of supported codec_id-codec_tag pairs, ordered by "better + * choice first". The arrays are all terminated by CODEC_ID_NONE. + */ + const struct AVCodecTag * const *codec_tag; + + enum CodecID subtitle_codec; /**< default subtitle codec */ + + const AVMetadataConv *metadata_conv; + + /* private fields */ + struct AVOutputFormat *next; +} AVOutputFormat; + +typedef struct AVInputFormat { + const char *name; + /** + * Descriptive name for the format, meant to be more human-readable + * than name. You should use the NULL_IF_CONFIG_SMALL() macro + * to define it. + */ + const char *long_name; + /** Size of private data so that it can be allocated in the wrapper. */ + int priv_data_size; + /** + * Tell if a given file has a chance of being parsed as this format. + * The buffer provided is guaranteed to be AVPROBE_PADDING_SIZE bytes + * big so you do not have to check for that unless you need more. + */ + int (*read_probe)(AVProbeData *); + /** Read the format header and initialize the AVFormatContext + structure. Return 0 if OK. 'ap' if non-NULL contains + additional parameters. Only used in raw format right + now. 'av_new_stream' should be called to create new streams. */ + int (*read_header)(struct AVFormatContext *, + AVFormatParameters *ap); + /** Read one packet and put it in 'pkt'. pts and flags are also + set. 'av_new_stream' can be called only if the flag + AVFMTCTX_NOHEADER is used. + @return 0 on success, < 0 on error. + When returning an error, pkt must not have been allocated + or must be freed before returning */ + int (*read_packet)(struct AVFormatContext *, AVPacket *pkt); + /** Close the stream. The AVFormatContext and AVStreams are not + freed by this function */ + int (*read_close)(struct AVFormatContext *); + +#if LIBAVFORMAT_VERSION_MAJOR < 53 + /** + * Seek to a given timestamp relative to the frames in + * stream component stream_index. + * @param stream_index Must not be -1. + * @param flags Selects which direction should be preferred if no exact + * match is available. + * @return >= 0 on success (but not necessarily the new offset) + */ + int (*read_seek)(struct AVFormatContext *, + int stream_index, int64_t timestamp, int flags); +#endif + /** + * Gets the next timestamp in stream[stream_index].time_base units. + * @return the timestamp or AV_NOPTS_VALUE if an error occurred + */ + int64_t (*read_timestamp)(struct AVFormatContext *s, int stream_index, + int64_t *pos, int64_t pos_limit); + /** Can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER. */ + int flags; + /** If extensions are defined, then no probe is done. You should + usually not use extension format guessing because it is not + reliable enough */ + const char *extensions; + /** General purpose read-only value that the format can use. */ + int value; + + /** Starts/resumes playing - only meaningful if using a network-based format + (RTSP). */ + int (*read_play)(struct AVFormatContext *); + + /** Pauses playing - only meaningful if using a network-based format + (RTSP). */ + int (*read_pause)(struct AVFormatContext *); + + const struct AVCodecTag * const *codec_tag; + + /** + * Seeks to timestamp ts. + * Seeking will be done so that the point from which all active streams + * can be presented successfully will be closest to ts and within min/max_ts. + * Active streams are all streams that have AVStream.discard < AVDISCARD_ALL. + */ + int (*read_seek2)(struct AVFormatContext *s, int stream_index, int64_t min_ts, int64_t ts, int64_t max_ts, int flags); + + const AVMetadataConv *metadata_conv; + + /* private fields */ + struct AVInputFormat *next; +} AVInputFormat; + +enum AVStreamParseType { + AVSTREAM_PARSE_NONE, + AVSTREAM_PARSE_FULL, /**< full parsing and repack */ + AVSTREAM_PARSE_HEADERS, /**< Only parse headers, do not repack. */ + AVSTREAM_PARSE_TIMESTAMPS, /**< full parsing and interpolation of timestamps for frames not starting on a packet boundary */ +}; + +typedef struct AVIndexEntry { + int64_t pos; + int64_t timestamp; +#define AVINDEX_KEYFRAME 0x0001 + int flags:2; + int size:30; //Yeah, trying to keep the size of this small to reduce memory requirements (it is 24 vs. 32 bytes due to possible 8-byte alignment). + int min_distance; /**< Minimum distance between this and the previous keyframe, used to avoid unneeded searching. */ +} AVIndexEntry; + +#define AV_DISPOSITION_DEFAULT 0x0001 +#define AV_DISPOSITION_DUB 0x0002 +#define AV_DISPOSITION_ORIGINAL 0x0004 +#define AV_DISPOSITION_COMMENT 0x0008 +#define AV_DISPOSITION_LYRICS 0x0010 +#define AV_DISPOSITION_KARAOKE 0x0020 + +/** + * Stream structure. + * New fields can be added to the end with minor version bumps. + * Removal, reordering and changes to existing fields require a major + * version bump. + * sizeof(AVStream) must not be used outside libav*. + */ +typedef struct AVStream { + int index; /**< stream index in AVFormatContext */ + int id; /**< format-specific stream ID */ + AVCodecContext *codec; /**< codec context */ + /** + * Real base framerate of the stream. + * This is the lowest framerate with which all timestamps can be + * represented accurately (it is the least common multiple of all + * framerates in the stream). Note, this value is just a guess! + * For example, if the time base is 1/90000 and all frames have either + * approximately 3600 or 1800 timer ticks, then r_frame_rate will be 50/1. + */ + AVRational r_frame_rate; + void *priv_data; + + /* internal data used in av_find_stream_info() */ + int64_t first_dts; + /** encoding: pts generation when outputting stream */ + struct AVFrac pts; + + /** + * This is the fundamental unit of time (in seconds) in terms + * of which frame timestamps are represented. For fixed-fps content, + * time base should be 1/framerate and timestamp increments should be 1. + */ + AVRational time_base; + int pts_wrap_bits; /**< number of bits in pts (used for wrapping control) */ + /* ffmpeg.c private use */ + int stream_copy; /**< If set, just copy stream. */ + enum AVDiscard discard; ///< Selects which packets can be discarded at will and do not need to be demuxed. + //FIXME move stuff to a flags field? + /** Quality, as it has been removed from AVCodecContext and put in AVVideoFrame. + * MN: dunno if that is the right place for it */ + float quality; + /** + * Decoding: pts of the first frame of the stream, in stream time base. + * Only set this if you are absolutely 100% sure that the value you set + * it to really is the pts of the first frame. + * This may be undefined (AV_NOPTS_VALUE). + * @note The ASF header does NOT contain a correct start_time the ASF + * demuxer must NOT set this. + */ + int64_t start_time; + /** + * Decoding: duration of the stream, in stream time base. + * If a source file does not specify a duration, but does specify + * a bitrate, this value will be estimated from bitrate and file size. + */ + int64_t duration; + +#if LIBAVFORMAT_VERSION_INT < (53<<16) + char language[4]; /** ISO 639-2/B 3-letter language code (empty string if undefined) */ +#endif + + /* av_read_frame() support */ + enum AVStreamParseType need_parsing; + struct AVCodecParserContext *parser; + + int64_t cur_dts; + int last_IP_duration; + int64_t last_IP_pts; + /* av_seek_frame() support */ + AVIndexEntry *index_entries; /**< Only used if the format does not + support seeking natively. */ + int nb_index_entries; + unsigned int index_entries_allocated_size; + + int64_t nb_frames; ///< number of frames in this stream if known or 0 + +#if LIBAVFORMAT_VERSION_INT < (53<<16) + int64_t unused[4+1]; + + char *filename; /**< source filename of the stream */ +#endif + + int disposition; /**< AV_DISPOSITION_* bit field */ + + AVProbeData probe_data; +#define MAX_REORDER_DELAY 16 + int64_t pts_buffer[MAX_REORDER_DELAY+1]; + + /** + * sample aspect ratio (0 if unknown) + * - encoding: Set by user. + * - decoding: Set by libavformat. + */ + AVRational sample_aspect_ratio; + + AVMetadata *metadata; + + /* av_read_frame() support */ + const uint8_t *cur_ptr; + int cur_len; + AVPacket cur_pkt; + + // Timestamp generation support: + /** + * Timestamp corresponding to the last dts sync point. + * + * Initialized when AVCodecParserContext.dts_sync_point >= 0 and + * a DTS is received from the underlying container. Otherwise set to + * AV_NOPTS_VALUE by default. + */ + int64_t reference_dts; + + /** + * Number of packets to buffer for codec probing + * NOT PART OF PUBLIC API + */ +#define MAX_PROBE_PACKETS 2500 + int probe_packets; + + /** + * last packet in packet_buffer for this stream when muxing. + * used internally, NOT PART OF PUBLIC API, dont read or write from outside of libav* + */ + struct AVPacketList *last_in_packet_buffer; + + /** + * Average framerate + */ + AVRational avg_frame_rate; + + /** + * Number of frames that have been demuxed during av_find_stream_info() + */ + int codec_info_nb_frames; +} AVStream; + +#define AV_PROGRAM_RUNNING 1 + +/** + * New fields can be added to the end with minor version bumps. + * Removal, reordering and changes to existing fields require a major + * version bump. + * sizeof(AVProgram) must not be used outside libav*. + */ +typedef struct AVProgram { + int id; +#if LIBAVFORMAT_VERSION_INT < (53<<16) + char *provider_name; ///< network name for DVB streams + char *name; ///< service name for DVB streams +#endif + int flags; + enum AVDiscard discard; ///< selects which program to discard and which to feed to the caller + unsigned int *stream_index; + unsigned int nb_stream_indexes; + AVMetadata *metadata; +} AVProgram; + +#define AVFMTCTX_NOHEADER 0x0001 /**< signal that no header is present + (streams are added dynamically) */ + +typedef struct AVChapter { + int id; ///< unique ID to identify the chapter + AVRational time_base; ///< time base in which the start/end timestamps are specified + int64_t start, end; ///< chapter start/end time in time_base units +#if LIBAVFORMAT_VERSION_INT < (53<<16) + char *title; ///< chapter title +#endif + AVMetadata *metadata; +} AVChapter; + +#if LIBAVFORMAT_VERSION_MAJOR < 53 +#define MAX_STREAMS 20 +#else +#define MAX_STREAMS 100 +#endif + +/** + * Format I/O context. + * New fields can be added to the end with minor version bumps. + * Removal, reordering and changes to existing fields require a major + * version bump. + * sizeof(AVFormatContext) must not be used outside libav*. + */ +typedef struct AVFormatContext { + const AVClass *av_class; /**< Set by avformat_alloc_context. */ + /* Can only be iformat or oformat, not both at the same time. */ + struct AVInputFormat *iformat; + struct AVOutputFormat *oformat; + void *priv_data; + ByteIOContext *pb; + unsigned int nb_streams; + AVStream *streams[MAX_STREAMS]; + char filename[1024]; /**< input or output filename */ + /* stream info */ + int64_t timestamp; +#if LIBAVFORMAT_VERSION_INT < (53<<16) + char title[512]; + char author[512]; + char copyright[512]; + char comment[512]; + char album[512]; + int year; /**< ID3 year, 0 if none */ + int track; /**< track number, 0 if none */ + char genre[32]; /**< ID3 genre */ +#endif + + int ctx_flags; /**< Format-specific flags, see AVFMTCTX_xx */ + /* private data for pts handling (do not modify directly). */ + /** This buffer is only needed when packets were already buffered but + not decoded, for example to get the codec parameters in MPEG + streams. */ + struct AVPacketList *packet_buffer; + + /** Decoding: position of the first frame of the component, in + AV_TIME_BASE fractional seconds. NEVER set this value directly: + It is deduced from the AVStream values. */ + int64_t start_time; + /** Decoding: duration of the stream, in AV_TIME_BASE fractional + seconds. Only set this value if you know none of the individual stream + durations and also dont set any of them. This is deduced from the + AVStream values if not set. */ + int64_t duration; + /** decoding: total file size, 0 if unknown */ + int64_t file_size; + /** Decoding: total stream bitrate in bit/s, 0 if not + available. Never set it directly if the file_size and the + duration are known as FFmpeg can compute it automatically. */ + int bit_rate; + + /* av_read_frame() support */ + AVStream *cur_st; +#if LIBAVFORMAT_VERSION_INT < (53<<16) + const uint8_t *cur_ptr_deprecated; + int cur_len_deprecated; + AVPacket cur_pkt_deprecated; +#endif + + /* av_seek_frame() support */ + int64_t data_offset; /** offset of the first packet */ + int index_built; + + int mux_rate; + unsigned int packet_size; + int preload; + int max_delay; + +#define AVFMT_NOOUTPUTLOOP -1 +#define AVFMT_INFINITEOUTPUTLOOP 0 + /** number of times to loop output in formats that support it */ + int loop_output; + + int flags; +#define AVFMT_FLAG_GENPTS 0x0001 ///< Generate missing pts even if it requires parsing future frames. +#define AVFMT_FLAG_IGNIDX 0x0002 ///< Ignore index. +#define AVFMT_FLAG_NONBLOCK 0x0004 ///< Do not block when reading packets from input. +#define AVFMT_FLAG_IGNDTS 0x0008 ///< Ignore DTS on frames that contain both DTS & PTS +#define AVFMT_FLAG_NOFILLIN 0x0010 ///< Do not infer any values from other values, just return what is stored in the container +#define AVFMT_FLAG_NOPARSE 0x0020 ///< Do not use AVParsers, you also must set AVFMT_FLAG_NOFILLIN as the fillin code works on frames and no parsing -> no frames. Also seeking to frames can not work if parsing to find frame boundaries has been disabled + + int loop_input; + /** decoding: size of data to probe; encoding: unused. */ + unsigned int probesize; + + /** + * Maximum time (in AV_TIME_BASE units) during which the input should + * be analyzed in av_find_stream_info(). + */ + int max_analyze_duration; + + const uint8_t *key; + int keylen; + + unsigned int nb_programs; + AVProgram **programs; + + /** + * Forced video codec_id. + * Demuxing: Set by user. + */ + enum CodecID video_codec_id; + /** + * Forced audio codec_id. + * Demuxing: Set by user. + */ + enum CodecID audio_codec_id; + /** + * Forced subtitle codec_id. + * Demuxing: Set by user. + */ + enum CodecID subtitle_codec_id; + + /** + * Maximum amount of memory in bytes to use for the index of each stream. + * If the index exceeds this size, entries will be discarded as + * needed to maintain a smaller size. This can lead to slower or less + * accurate seeking (depends on demuxer). + * Demuxers for which a full in-memory index is mandatory will ignore + * this. + * muxing : unused + * demuxing: set by user + */ + unsigned int max_index_size; + + /** + * Maximum amount of memory in bytes to use for buffering frames + * obtained from realtime capture devices. + */ + unsigned int max_picture_buffer; + + unsigned int nb_chapters; + AVChapter **chapters; + + /** + * Flags to enable debugging. + */ + int debug; +#define FF_FDEBUG_TS 0x0001 + + /** + * Raw packets from the demuxer, prior to parsing and decoding. + * This buffer is used for buffering packets until the codec can + * be identified, as parsing cannot be done without knowing the + * codec. + */ + struct AVPacketList *raw_packet_buffer; + struct AVPacketList *raw_packet_buffer_end; + + struct AVPacketList *packet_buffer_end; + + AVMetadata *metadata; + + /** + * Remaining size available for raw_packet_buffer, in bytes. + * NOT PART OF PUBLIC API + */ +#define RAW_PACKET_BUFFER_SIZE 2500000 + int raw_packet_buffer_remaining_size; + + /** + * Start time of the stream in real world time, in microseconds + * since the unix epoch (00:00 1st January 1970). That is, pts=0 + * in the stream was captured at this real world time. + * - encoding: Set by user. + * - decoding: Unused. + */ + int64_t start_time_realtime; +} AVFormatContext; + +typedef struct AVPacketList { + AVPacket pkt; + struct AVPacketList *next; +} AVPacketList; + +#if LIBAVFORMAT_VERSION_INT < (53<<16) +extern AVInputFormat *first_iformat; +extern AVOutputFormat *first_oformat; +#endif + +/** + * If f is NULL, returns the first registered input format, + * if f is non-NULL, returns the next registered input format after f + * or NULL if f is the last one. + */ +AVInputFormat *av_iformat_next(AVInputFormat *f); + +/** + * If f is NULL, returns the first registered output format, + * if f is non-NULL, returns the next registered output format after f + * or NULL if f is the last one. + */ +AVOutputFormat *av_oformat_next(AVOutputFormat *f); + +enum CodecID av_guess_image2_codec(const char *filename); + +/* XXX: Use automatic init with either ELF sections or C file parser */ +/* modules. */ + +/* utils.c */ +void av_register_input_format(AVInputFormat *format); +void av_register_output_format(AVOutputFormat *format); +#if LIBAVFORMAT_VERSION_MAJOR < 53 +attribute_deprecated AVOutputFormat *guess_stream_format(const char *short_name, + const char *filename, + const char *mime_type); + +/** + * @deprecated Use av_guess_format() instead. + */ +attribute_deprecated AVOutputFormat *guess_format(const char *short_name, + const char *filename, + const char *mime_type); +#endif + +/** + * Returns the output format in the list of registered output formats + * which best matches the provided parameters, or returns NULL if + * there is no match. + * + * @param short_name if non-NULL checks if short_name matches with the + * names of the registered formats + * @param filename if non-NULL checks if filename terminates with the + * extensions of the registered formats + * @param mime_type if non-NULL checks if mime_type matches with the + * MIME type of the registered formats + */ +AVOutputFormat *av_guess_format(const char *short_name, + const char *filename, + const char *mime_type); + +/** + * Guesses the codec ID based upon muxer and filename. + */ +enum CodecID av_guess_codec(AVOutputFormat *fmt, const char *short_name, + const char *filename, const char *mime_type, + enum AVMediaType type); + +/** + * Sends a nice hexadecimal dump of a buffer to the specified file stream. + * + * @param f The file stream pointer where the dump should be sent to. + * @param buf buffer + * @param size buffer size + * + * @see av_hex_dump_log, av_pkt_dump, av_pkt_dump_log + */ +void av_hex_dump(FILE *f, uint8_t *buf, int size); + +/** + * Sends a nice hexadecimal dump of a buffer to the log. + * + * @param avcl A pointer to an arbitrary struct of which the first field is a + * pointer to an AVClass struct. + * @param level The importance level of the message, lower values signifying + * higher importance. + * @param buf buffer + * @param size buffer size + * + * @see av_hex_dump, av_pkt_dump, av_pkt_dump_log + */ +void av_hex_dump_log(void *avcl, int level, uint8_t *buf, int size); + +/** + * Sends a nice dump of a packet to the specified file stream. + * + * @param f The file stream pointer where the dump should be sent to. + * @param pkt packet to dump + * @param dump_payload True if the payload must be displayed, too. + */ +void av_pkt_dump(FILE *f, AVPacket *pkt, int dump_payload); + +/** + * Sends a nice dump of a packet to the log. + * + * @param avcl A pointer to an arbitrary struct of which the first field is a + * pointer to an AVClass struct. + * @param level The importance level of the message, lower values signifying + * higher importance. + * @param pkt packet to dump + * @param dump_payload True if the payload must be displayed, too. + */ +void av_pkt_dump_log(void *avcl, int level, AVPacket *pkt, int dump_payload); + +/** + * Initializes libavformat and registers all the muxers, demuxers and + * protocols. If you do not call this function, then you can select + * exactly which formats you want to support. + * + * @see av_register_input_format() + * @see av_register_output_format() + * @see av_register_protocol() + */ +void av_register_all(void); + +/** codec tag <-> codec id */ +enum CodecID av_codec_get_id(const struct AVCodecTag * const *tags, unsigned int tag); +unsigned int av_codec_get_tag(const struct AVCodecTag * const *tags, enum CodecID id); + +/* media file input */ + +/** + * Finds AVInputFormat based on the short name of the input format. + */ +AVInputFormat *av_find_input_format(const char *short_name); + +/** + * Guesses the file format. + * + * @param is_opened Whether the file is already opened; determines whether + * demuxers with or without AVFMT_NOFILE are probed. + */ +AVInputFormat *av_probe_input_format(AVProbeData *pd, int is_opened); + +/** + * Allocates all the structures needed to read an input stream. + * This does not open the needed codecs for decoding the stream[s]. + */ +int av_open_input_stream(AVFormatContext **ic_ptr, + ByteIOContext *pb, const char *filename, + AVInputFormat *fmt, AVFormatParameters *ap); + +/** + * Opens a media file as input. The codecs are not opened. Only the file + * header (if present) is read. + * + * @param ic_ptr The opened media file handle is put here. + * @param filename filename to open + * @param fmt If non-NULL, force the file format to use. + * @param buf_size optional buffer size (zero if default is OK) + * @param ap Additional parameters needed when opening the file + * (NULL if default). + * @return 0 if OK, AVERROR_xxx otherwise + */ +int av_open_input_file(AVFormatContext **ic_ptr, const char *filename, + AVInputFormat *fmt, + int buf_size, + AVFormatParameters *ap); + +#if LIBAVFORMAT_VERSION_MAJOR < 53 +/** + * @deprecated Use avformat_alloc_context() instead. + */ +attribute_deprecated AVFormatContext *av_alloc_format_context(void); +#endif + +/** + * Allocates an AVFormatContext. + * Can be freed with av_free() but do not forget to free everything you + * explicitly allocated as well! + */ +AVFormatContext *avformat_alloc_context(void); + +/** + * Reads packets of a media file to get stream information. This + * is useful for file formats with no headers such as MPEG. This + * function also computes the real framerate in case of MPEG-2 repeat + * frame mode. + * The logical file position is not changed by this function; + * examined packets may be buffered for later processing. + * + * @param ic media file handle + * @return >=0 if OK, AVERROR_xxx on error + * @todo Let the user decide somehow what information is needed so that + * we do not waste time getting stuff the user does not need. + */ +int av_find_stream_info(AVFormatContext *ic); + +/** + * Reads a transport packet from a media file. + * + * This function is obsolete and should never be used. + * Use av_read_frame() instead. + * + * @param s media file handle + * @param pkt is filled + * @return 0 if OK, AVERROR_xxx on error + */ +int av_read_packet(AVFormatContext *s, AVPacket *pkt); + +/** + * Returns the next frame of a stream. + * + * The returned packet is valid + * until the next av_read_frame() or until av_close_input_file() and + * must be freed with av_free_packet. For video, the packet contains + * exactly one frame. For audio, it contains an integer number of + * frames if each frame has a known fixed size (e.g. PCM or ADPCM + * data). If the audio frames have a variable size (e.g. MPEG audio), + * then it contains one frame. + * + * pkt->pts, pkt->dts and pkt->duration are always set to correct + * values in AVStream.time_base units (and guessed if the format cannot + * provide them). pkt->pts can be AV_NOPTS_VALUE if the video format + * has B-frames, so it is better to rely on pkt->dts if you do not + * decompress the payload. + * + * @return 0 if OK, < 0 on error or end of file + */ +int av_read_frame(AVFormatContext *s, AVPacket *pkt); + +/** + * Seeks to the keyframe at timestamp. + * 'timestamp' in 'stream_index'. + * @param stream_index If stream_index is (-1), a default + * stream is selected, and timestamp is automatically converted + * from AV_TIME_BASE units to the stream specific time_base. + * @param timestamp Timestamp in AVStream.time_base units + * or, if no stream is specified, in AV_TIME_BASE units. + * @param flags flags which select direction and seeking mode + * @return >= 0 on success + */ +int av_seek_frame(AVFormatContext *s, int stream_index, int64_t timestamp, + int flags); + +/** + * Seeks to timestamp ts. + * Seeking will be done so that the point from which all active streams + * can be presented successfully will be closest to ts and within min/max_ts. + * Active streams are all streams that have AVStream.discard < AVDISCARD_ALL. + * + * If flags contain AVSEEK_FLAG_BYTE, then all timestamps are in bytes and + * are the file position (this may not be supported by all demuxers). + * If flags contain AVSEEK_FLAG_FRAME, then all timestamps are in frames + * in the stream with stream_index (this may not be supported by all demuxers). + * Otherwise all timestamps are in units of the stream selected by stream_index + * or if stream_index is -1, in AV_TIME_BASE units. + * If flags contain AVSEEK_FLAG_ANY, then non-keyframes are treated as + * keyframes (this may not be supported by all demuxers). + * + * @param stream_index index of the stream which is used as time base reference + * @param min_ts smallest acceptable timestamp + * @param ts target timestamp + * @param max_ts largest acceptable timestamp + * @param flags flags + * @return >=0 on success, error code otherwise + * + * @NOTE This is part of the new seek API which is still under construction. + * Thus do not use this yet. It may change at any time, do not expect + * ABI compatibility yet! + */ +int avformat_seek_file(AVFormatContext *s, int stream_index, int64_t min_ts, int64_t ts, int64_t max_ts, int flags); + +/** + * Starts playing a network-based stream (e.g. RTSP stream) at the + * current position. + */ +int av_read_play(AVFormatContext *s); + +/** + * Pauses a network-based stream (e.g. RTSP stream). + * + * Use av_read_play() to resume it. + */ +int av_read_pause(AVFormatContext *s); + +/** + * Frees a AVFormatContext allocated by av_open_input_stream. + * @param s context to free + */ +void av_close_input_stream(AVFormatContext *s); + +/** + * Closes a media file (but not its codecs). + * + * @param s media file handle + */ +void av_close_input_file(AVFormatContext *s); + +/** + * Adds a new stream to a media file. + * + * Can only be called in the read_header() function. If the flag + * AVFMTCTX_NOHEADER is in the format context, then new streams + * can be added in read_packet too. + * + * @param s media file handle + * @param id file-format-dependent stream ID + */ +AVStream *av_new_stream(AVFormatContext *s, int id); +AVProgram *av_new_program(AVFormatContext *s, int id); + +/** + * Adds a new chapter. + * This function is NOT part of the public API + * and should ONLY be used by demuxers. + * + * @param s media file handle + * @param id unique ID for this chapter + * @param start chapter start time in time_base units + * @param end chapter end time in time_base units + * @param title chapter title + * + * @return AVChapter or NULL on error + */ +AVChapter *ff_new_chapter(AVFormatContext *s, int id, AVRational time_base, + int64_t start, int64_t end, const char *title); + +/** + * Sets the pts for a given stream. + * + * @param s stream + * @param pts_wrap_bits number of bits effectively used by the pts + * (used for wrap control, 33 is the value for MPEG) + * @param pts_num numerator to convert to seconds (MPEG: 1) + * @param pts_den denominator to convert to seconds (MPEG: 90000) + */ +void av_set_pts_info(AVStream *s, int pts_wrap_bits, + unsigned int pts_num, unsigned int pts_den); + +#define AVSEEK_FLAG_BACKWARD 1 ///< seek backward +#define AVSEEK_FLAG_BYTE 2 ///< seeking based on position in bytes +#define AVSEEK_FLAG_ANY 4 ///< seek to any frame, even non-keyframes +#define AVSEEK_FLAG_FRAME 8 ///< seeking based on frame number + +int av_find_default_stream_index(AVFormatContext *s); + +/** + * Gets the index for a specific timestamp. + * @param flags if AVSEEK_FLAG_BACKWARD then the returned index will correspond + * to the timestamp which is <= the requested one, if backward + * is 0, then it will be >= + * if AVSEEK_FLAG_ANY seek to any frame, only keyframes otherwise + * @return < 0 if no such timestamp could be found + */ +int av_index_search_timestamp(AVStream *st, int64_t timestamp, int flags); + +/** + * Ensures the index uses less memory than the maximum specified in + * AVFormatContext.max_index_size by discarding entries if it grows + * too large. + * This function is not part of the public API and should only be called + * by demuxers. + */ +void ff_reduce_index(AVFormatContext *s, int stream_index); + +/** + * Adds an index entry into a sorted list. Updates the entry if the list + * already contains it. + * + * @param timestamp timestamp in the time base of the given stream + */ +int av_add_index_entry(AVStream *st, int64_t pos, int64_t timestamp, + int size, int distance, int flags); + +/** + * Does a binary search using av_index_search_timestamp() and + * AVCodec.read_timestamp(). + * This is not supposed to be called directly by a user application, + * but by demuxers. + * @param target_ts target timestamp in the time base of the given stream + * @param stream_index stream number + */ +int av_seek_frame_binary(AVFormatContext *s, int stream_index, + int64_t target_ts, int flags); + +/** + * Updates cur_dts of all streams based on the given timestamp and AVStream. + * + * Stream ref_st unchanged, others set cur_dts in their native time base. + * Only needed for timestamp wrapping or if (dts not set and pts!=dts). + * @param timestamp new dts expressed in time_base of param ref_st + * @param ref_st reference stream giving time_base of param timestamp + */ +void av_update_cur_dts(AVFormatContext *s, AVStream *ref_st, int64_t timestamp); + +/** + * Does a binary search using read_timestamp(). + * This is not supposed to be called directly by a user application, + * but by demuxers. + * @param target_ts target timestamp in the time base of the given stream + * @param stream_index stream number + */ +int64_t av_gen_search(AVFormatContext *s, int stream_index, + int64_t target_ts, int64_t pos_min, + int64_t pos_max, int64_t pos_limit, + int64_t ts_min, int64_t ts_max, + int flags, int64_t *ts_ret, + int64_t (*read_timestamp)(struct AVFormatContext *, int , int64_t *, int64_t )); + +/** media file output */ +int av_set_parameters(AVFormatContext *s, AVFormatParameters *ap); + +/** + * Allocates the stream private data and writes the stream header to an + * output media file. + * + * @param s media file handle + * @return 0 if OK, AVERROR_xxx on error + */ +int av_write_header(AVFormatContext *s); + +/** + * Writes a packet to an output media file. + * + * The packet shall contain one audio or video frame. + * The packet must be correctly interleaved according to the container + * specification, if not then av_interleaved_write_frame must be used. + * + * @param s media file handle + * @param pkt The packet, which contains the stream_index, buf/buf_size, + dts/pts, ... + * @return < 0 on error, = 0 if OK, 1 if end of stream wanted + */ +int av_write_frame(AVFormatContext *s, AVPacket *pkt); + +/** + * Writes a packet to an output media file ensuring correct interleaving. + * + * The packet must contain one audio or video frame. + * If the packets are already correctly interleaved, the application should + * call av_write_frame() instead as it is slightly faster. It is also important + * to keep in mind that completely non-interleaved input will need huge amounts + * of memory to interleave with this, so it is preferable to interleave at the + * demuxer level. + * + * @param s media file handle + * @param pkt The packet, which contains the stream_index, buf/buf_size, + dts/pts, ... + * @return < 0 on error, = 0 if OK, 1 if end of stream wanted + */ +int av_interleaved_write_frame(AVFormatContext *s, AVPacket *pkt); + +/** + * Interleaves a packet per dts in an output media file. + * + * Packets with pkt->destruct == av_destruct_packet will be freed inside this + * function, so they cannot be used after it. Note that calling av_free_packet() + * on them is still safe. + * + * @param s media file handle + * @param out the interleaved packet will be output here + * @param in the input packet + * @param flush 1 if no further packets are available as input and all + * remaining packets should be output + * @return 1 if a packet was output, 0 if no packet could be output, + * < 0 if an error occurred + */ +int av_interleave_packet_per_dts(AVFormatContext *s, AVPacket *out, + AVPacket *pkt, int flush); + +/** + * Writes the stream trailer to an output media file and frees the + * file private data. + * + * May only be called after a successful call to av_write_header. + * + * @param s media file handle + * @return 0 if OK, AVERROR_xxx on error + */ +int av_write_trailer(AVFormatContext *s); + +void dump_format(AVFormatContext *ic, + int index, + const char *url, + int is_output); + +#if LIBAVFORMAT_VERSION_MAJOR < 53 +/** + * Parses width and height out of string str. + * @deprecated Use av_parse_video_frame_size instead. + */ +attribute_deprecated int parse_image_size(int *width_ptr, int *height_ptr, + const char *str); + +/** + * Converts framerate from a string to a fraction. + * @deprecated Use av_parse_video_frame_rate instead. + */ +attribute_deprecated int parse_frame_rate(int *frame_rate, int *frame_rate_base, + const char *arg); +#endif + +/** + * Parses datestr and returns a corresponding number of microseconds. + * @param datestr String representing a date or a duration. + * - If a date the syntax is: + * @code + * [{YYYY-MM-DD|YYYYMMDD}]{T| }{HH[:MM[:SS[.m...]]][Z]|HH[MM[SS[.m...]]][Z]} + * @endcode + * Time is local time unless Z is appended, in which case it is + * interpreted as UTC. + * If the year-month-day part is not specified it takes the current + * year-month-day. + * Returns the number of microseconds since 1st of January, 1970 up to + * the time of the parsed date or INT64_MIN if datestr cannot be + * successfully parsed. + * - If a duration the syntax is: + * @code + * [-]HH[:MM[:SS[.m...]]] + * [-]S+[.m...] + * @endcode + * Returns the number of microseconds contained in a time interval + * with the specified duration or INT64_MIN if datestr cannot be + * successfully parsed. + * @param duration Flag which tells how to interpret datestr, if + * not zero datestr is interpreted as a duration, otherwise as a + * date. + */ +int64_t parse_date(const char *datestr, int duration); + +/** Gets the current time in microseconds. */ +int64_t av_gettime(void); + +/* ffm-specific for ffserver */ +#define FFM_PACKET_SIZE 4096 +int64_t ffm_read_write_index(int fd); +int ffm_write_write_index(int fd, int64_t pos); +void ffm_set_write_index(AVFormatContext *s, int64_t pos, int64_t file_size); + +/** + * Attempts to find a specific tag in a URL. + * + * syntax: '?tag1=val1&tag2=val2...'. Little URL decoding is done. + * Return 1 if found. + */ +int find_info_tag(char *arg, int arg_size, const char *tag1, const char *info); + +/** + * Returns in 'buf' the path with '%d' replaced by a number. + * + * Also handles the '%0nd' format where 'n' is the total number + * of digits and '%%'. + * + * @param buf destination buffer + * @param buf_size destination buffer size + * @param path numbered sequence string + * @param number frame number + * @return 0 if OK, -1 on format error + */ +int av_get_frame_filename(char *buf, int buf_size, + const char *path, int number); + +/** + * Checks whether filename actually is a numbered sequence generator. + * + * @param filename possible numbered sequence string + * @return 1 if a valid numbered sequence string, 0 otherwise + */ +int av_filename_number_test(const char *filename); + +/** + * Generates an SDP for an RTP session. + * + * @param ac array of AVFormatContexts describing the RTP streams. If the + * array is composed by only one context, such context can contain + * multiple AVStreams (one AVStream per RTP stream). Otherwise, + * all the contexts in the array (an AVCodecContext per RTP stream) + * must contain only one AVStream. + * @param n_files number of AVCodecContexts contained in ac + * @param buff buffer where the SDP will be stored (must be allocated by + * the caller) + * @param size the size of the buffer + * @return 0 if OK, AVERROR_xxx on error + */ +int avf_sdp_create(AVFormatContext *ac[], int n_files, char *buff, int size); + +/** + * Returns a positive value if the given filename has one of the given + * extensions, 0 otherwise. + * + * @param extensions a comma-separated list of filename extensions + */ +int av_match_ext(const char *filename, const char *extensions); + +#endif /* AVFORMAT_AVFORMAT_H */ diff --git a/extra_lib/include/ffmpeg_android/libavformat/avio.h b/extra_lib/include/ffmpeg_android/libavformat/avio.h new file mode 100644 index 0000000..d186876 --- /dev/null +++ b/extra_lib/include/ffmpeg_android/libavformat/avio.h @@ -0,0 +1,525 @@ +/* + * copyright (c) 2001 Fabrice Bellard + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ +#ifndef AVFORMAT_AVIO_H +#define AVFORMAT_AVIO_H + +/** + * @file libavformat/avio.h + * unbuffered I/O operations + * + * @warning This file has to be considered an internal but installed + * header, so it should not be directly included in your projects. + */ + +#include + +#include "libavutil/common.h" + +/* unbuffered I/O */ + +/** + * URL Context. + * New fields can be added to the end with minor version bumps. + * Removal, reordering and changes to existing fields require a major + * version bump. + * sizeof(URLContext) must not be used outside libav*. + */ +typedef struct URLContext { +#if LIBAVFORMAT_VERSION_MAJOR >= 53 + const AVClass *av_class; ///< information for av_log(). Set by url_open(). +#endif + struct URLProtocol *prot; + int flags; + int is_streamed; /**< true if streamed (no seek possible), default = false */ + int max_packet_size; /**< if non zero, the stream is packetized with this max packet size */ + void *priv_data; + char *filename; /**< specified URL */ +} URLContext; + +typedef struct URLPollEntry { + URLContext *handle; + int events; + int revents; +} URLPollEntry; + +#define URL_RDONLY 0 +#define URL_WRONLY 1 +#define URL_RDWR 2 + +typedef int URLInterruptCB(void); + +/** + * Creates an URLContext for accessing to the resource indicated by + * url, and opens it using the URLProtocol up. + * + * @param puc pointer to the location where, in case of success, the + * function puts the pointer to the created URLContext + * @param flags flags which control how the resource indicated by url + * is to be opened + * @return 0 in case of success, a negative value corresponding to an + * AVERROR code in case of failure + */ +int url_open_protocol (URLContext **puc, struct URLProtocol *up, + const char *url, int flags); + +/** + * Creates an URLContext for accessing to the resource indicated by + * url, and opens it. + * + * @param puc pointer to the location where, in case of success, the + * function puts the pointer to the created URLContext + * @param flags flags which control how the resource indicated by url + * is to be opened + * @return 0 in case of success, a negative value corresponding to an + * AVERROR code in case of failure + */ +int url_open(URLContext **h, const char *url, int flags); + +/** + * Reads up to size bytes from the resource accessed by h, and stores + * the read bytes in buf. + * + * @return The number of bytes actually read, or a negative value + * corresponding to an AVERROR code in case of error. A value of zero + * indicates that it is not possible to read more from the accessed + * resource (except if the value of the size argument is also zero). + */ +int url_read(URLContext *h, unsigned char *buf, int size); + +/** + * Read as many bytes as possible (up to size), calling the + * read function multiple times if necessary. + * Will also retry if the read function returns AVERROR(EAGAIN). + * This makes special short-read handling in applications + * unnecessary, if the return value is < size then it is + * certain there was either an error or the end of file was reached. + */ +int url_read_complete(URLContext *h, unsigned char *buf, int size); +int url_write(URLContext *h, unsigned char *buf, int size); + +/** + * Changes the position that will be used by the next read/write + * operation on the resource accessed by h. + * + * @param pos specifies the new position to set + * @param whence specifies how pos should be interpreted, it must be + * one of SEEK_SET (seek from the beginning), SEEK_CUR (seek from the + * current position), SEEK_END (seek from the end), or AVSEEK_SIZE + * (return the filesize of the requested resource, pos is ignored). + * @return a negative value corresponding to an AVERROR code in case + * of failure, or the resulting file position, measured in bytes from + * the beginning of the file. You can use this feature together with + * SEEK_CUR to read the current file position. + */ +int64_t url_seek(URLContext *h, int64_t pos, int whence); + +/** + * Closes the resource accessed by the URLContext h, and frees the + * memory used by it. + * + * @return a negative value if an error condition occurred, 0 + * otherwise + */ +int url_close(URLContext *h); + +/** + * Returns a non-zero value if the resource indicated by url + * exists, 0 otherwise. + */ +int url_exist(const char *url); + +int64_t url_filesize(URLContext *h); + +/** + * Return the file descriptor associated with this URL. For RTP, this + * will return only the RTP file descriptor, not the RTCP file descriptor. + * To get both, use rtp_get_file_handles(). + * + * @return the file descriptor associated with this URL, or <0 on error. + */ +int url_get_file_handle(URLContext *h); + +/** + * Return the maximum packet size associated to packetized file + * handle. If the file is not packetized (stream like HTTP or file on + * disk), then 0 is returned. + * + * @param h file handle + * @return maximum packet size in bytes + */ +int url_get_max_packet_size(URLContext *h); +void url_get_filename(URLContext *h, char *buf, int buf_size); + +/** + * The callback is called in blocking functions to test regulary if + * asynchronous interruption is needed. AVERROR(EINTR) is returned + * in this case by the interrupted function. 'NULL' means no interrupt + * callback is given. + */ +void url_set_interrupt_cb(URLInterruptCB *interrupt_cb); + +/* not implemented */ +int url_poll(URLPollEntry *poll_table, int n, int timeout); + +/** + * Pause and resume playing - only meaningful if using a network streaming + * protocol (e.g. MMS). + * @param pause 1 for pause, 0 for resume + */ +int av_url_read_pause(URLContext *h, int pause); + +/** + * Seek to a given timestamp relative to some component stream. + * Only meaningful if using a network streaming protocol (e.g. MMS.). + * @param stream_index The stream index that the timestamp is relative to. + * If stream_index is (-1) the timestamp should be in AV_TIME_BASE + * units from the beginning of the presentation. + * If a stream_index >= 0 is used and the protocol does not support + * seeking based on component streams, the call will fail with ENOTSUP. + * @param timestamp timestamp in AVStream.time_base units + * or if there is no stream specified then in AV_TIME_BASE units. + * @param flags Optional combination of AVSEEK_FLAG_BACKWARD, AVSEEK_FLAG_BYTE + * and AVSEEK_FLAG_ANY. The protocol may silently ignore + * AVSEEK_FLAG_BACKWARD and AVSEEK_FLAG_ANY, but AVSEEK_FLAG_BYTE will + * fail with ENOTSUP if used and not supported. + * @return >= 0 on success + * @see AVInputFormat::read_seek + */ +int64_t av_url_read_seek(URLContext *h, int stream_index, + int64_t timestamp, int flags); + +/** + * Passing this as the "whence" parameter to a seek function causes it to + * return the filesize without seeking anywhere. Supporting this is optional. + * If it is not supported then the seek function will return <0. + */ +#define AVSEEK_SIZE 0x10000 + +/** + * Oring this flag as into the "whence" parameter to a seek function causes it to + * seek by any means (like reopening and linear reading) or other normally unreasonble + * means that can be extreemly slow. + * This may be ignored by the seek code. + */ +#define AVSEEK_FORCE 0x20000 + +typedef struct URLProtocol { + const char *name; + int (*url_open)(URLContext *h, const char *url, int flags); + int (*url_read)(URLContext *h, unsigned char *buf, int size); + int (*url_write)(URLContext *h, unsigned char *buf, int size); + int64_t (*url_seek)(URLContext *h, int64_t pos, int whence); + int (*url_close)(URLContext *h); + struct URLProtocol *next; + int (*url_read_pause)(URLContext *h, int pause); + int64_t (*url_read_seek)(URLContext *h, int stream_index, + int64_t timestamp, int flags); + int (*url_get_file_handle)(URLContext *h); +} URLProtocol; + +#if LIBAVFORMAT_VERSION_MAJOR < 53 +extern URLProtocol *first_protocol; +#endif + +extern URLInterruptCB *url_interrupt_cb; + +/** + * If protocol is NULL, returns the first registered protocol, + * if protocol is non-NULL, returns the next registered protocol after protocol, + * or NULL if protocol is the last one. + */ +URLProtocol *av_protocol_next(URLProtocol *p); + +#if LIBAVFORMAT_VERSION_MAJOR < 53 +/** + * @deprecated Use av_register_protocol() instead. + */ +attribute_deprecated int register_protocol(URLProtocol *protocol); +#endif + +/** + * Registers the URLProtocol protocol. + */ +int av_register_protocol(URLProtocol *protocol); + +/** + * Bytestream IO Context. + * New fields can be added to the end with minor version bumps. + * Removal, reordering and changes to existing fields require a major + * version bump. + * sizeof(ByteIOContext) must not be used outside libav*. + */ +typedef struct { + unsigned char *buffer; + int buffer_size; + unsigned char *buf_ptr, *buf_end; + void *opaque; + int (*read_packet)(void *opaque, uint8_t *buf, int buf_size); + int (*write_packet)(void *opaque, uint8_t *buf, int buf_size); + int64_t (*seek)(void *opaque, int64_t offset, int whence); + int64_t pos; /**< position in the file of the current buffer */ + int must_flush; /**< true if the next seek should flush */ + int eof_reached; /**< true if eof reached */ + int write_flag; /**< true if open for writing */ + int is_streamed; + int max_packet_size; + unsigned long checksum; + unsigned char *checksum_ptr; + unsigned long (*update_checksum)(unsigned long checksum, const uint8_t *buf, unsigned int size); + int error; ///< contains the error code or 0 if no error happened + int (*read_pause)(void *opaque, int pause); + int64_t (*read_seek)(void *opaque, int stream_index, + int64_t timestamp, int flags); +} ByteIOContext; + +int init_put_byte(ByteIOContext *s, + unsigned char *buffer, + int buffer_size, + int write_flag, + void *opaque, + int (*read_packet)(void *opaque, uint8_t *buf, int buf_size), + int (*write_packet)(void *opaque, uint8_t *buf, int buf_size), + int64_t (*seek)(void *opaque, int64_t offset, int whence)); +ByteIOContext *av_alloc_put_byte( + unsigned char *buffer, + int buffer_size, + int write_flag, + void *opaque, + int (*read_packet)(void *opaque, uint8_t *buf, int buf_size), + int (*write_packet)(void *opaque, uint8_t *buf, int buf_size), + int64_t (*seek)(void *opaque, int64_t offset, int whence)); + +void put_byte(ByteIOContext *s, int b); +void put_buffer(ByteIOContext *s, const unsigned char *buf, int size); +void put_le64(ByteIOContext *s, uint64_t val); +void put_be64(ByteIOContext *s, uint64_t val); +void put_le32(ByteIOContext *s, unsigned int val); +void put_be32(ByteIOContext *s, unsigned int val); +void put_le24(ByteIOContext *s, unsigned int val); +void put_be24(ByteIOContext *s, unsigned int val); +void put_le16(ByteIOContext *s, unsigned int val); +void put_be16(ByteIOContext *s, unsigned int val); +void put_tag(ByteIOContext *s, const char *tag); + +void put_strz(ByteIOContext *s, const char *buf); + +/** + * fseek() equivalent for ByteIOContext. + * @return new position or AVERROR. + */ +int64_t url_fseek(ByteIOContext *s, int64_t offset, int whence); + +/** + * Skip given number of bytes forward. + * @param offset number of bytes + */ +void url_fskip(ByteIOContext *s, int64_t offset); + +/** + * ftell() equivalent for ByteIOContext. + * @return position or AVERROR. + */ +int64_t url_ftell(ByteIOContext *s); + +/** + * Gets the filesize. + * @return filesize or AVERROR + */ +int64_t url_fsize(ByteIOContext *s); + +/** + * feof() equivalent for ByteIOContext. + * @return non zero if and only if end of file + */ +int url_feof(ByteIOContext *s); + +int url_ferror(ByteIOContext *s); + +int av_url_read_fpause(ByteIOContext *h, int pause); +int64_t av_url_read_fseek(ByteIOContext *h, int stream_index, + int64_t timestamp, int flags); + +#define URL_EOF (-1) +/** @note return URL_EOF (-1) if EOF */ +int url_fgetc(ByteIOContext *s); + +/** @warning currently size is limited */ +#ifdef __GNUC__ +int url_fprintf(ByteIOContext *s, const char *fmt, ...) __attribute__ ((__format__ (__printf__, 2, 3))); +#else +int url_fprintf(ByteIOContext *s, const char *fmt, ...); +#endif + +/** @note unlike fgets, the EOL character is not returned and a whole + line is parsed. return NULL if first char read was EOF */ +char *url_fgets(ByteIOContext *s, char *buf, int buf_size); + +void put_flush_packet(ByteIOContext *s); + + +/** + * Reads size bytes from ByteIOContext into buf. + * @return number of bytes read or AVERROR + */ +int get_buffer(ByteIOContext *s, unsigned char *buf, int size); + +/** + * Reads size bytes from ByteIOContext into buf. + * This reads at most 1 packet. If that is not enough fewer bytes will be + * returned. + * @return number of bytes read or AVERROR + */ +int get_partial_buffer(ByteIOContext *s, unsigned char *buf, int size); + +/** @note return 0 if EOF, so you cannot use it if EOF handling is + necessary */ +int get_byte(ByteIOContext *s); +unsigned int get_le24(ByteIOContext *s); +unsigned int get_le32(ByteIOContext *s); +uint64_t get_le64(ByteIOContext *s); +unsigned int get_le16(ByteIOContext *s); + +char *get_strz(ByteIOContext *s, char *buf, int maxlen); +unsigned int get_be16(ByteIOContext *s); +unsigned int get_be24(ByteIOContext *s); +unsigned int get_be32(ByteIOContext *s); +uint64_t get_be64(ByteIOContext *s); + +uint64_t ff_get_v(ByteIOContext *bc); + +static inline int url_is_streamed(ByteIOContext *s) +{ + return s->is_streamed; +} + +/** + * Creates and initializes a ByteIOContext for accessing the + * resource referenced by the URLContext h. + * @note When the URLContext h has been opened in read+write mode, the + * ByteIOContext can be used only for writing. + * + * @param s Used to return the pointer to the created ByteIOContext. + * In case of failure the pointed to value is set to NULL. + * @return 0 in case of success, a negative value corresponding to an + * AVERROR code in case of failure + */ +int url_fdopen(ByteIOContext **s, URLContext *h); + +/** @warning must be called before any I/O */ +int url_setbufsize(ByteIOContext *s, int buf_size); +#if LIBAVFORMAT_VERSION_MAJOR < 53 +/** Reset the buffer for reading or writing. + * @note Will drop any data currently in the buffer without transmitting it. + * @param flags URL_RDONLY to set up the buffer for reading, or URL_WRONLY + * to set up the buffer for writing. */ +int url_resetbuf(ByteIOContext *s, int flags); +#endif + +/** + * Rewinds the ByteIOContext using the specified buffer containing the first buf_size bytes of the file. + * Used after probing to avoid seeking. + * Joins buf and s->buffer, taking any overlap into consideration. + * @note s->buffer must overlap with buf or they can't be joined and the function fails + * @note This function is NOT part of the public API + * + * @param s The read-only ByteIOContext to rewind + * @param buf The probe buffer containing the first buf_size bytes of the file + * @param buf_size The size of buf + * @return 0 in case of success, a negative value corresponding to an + * AVERROR code in case of failure + */ +int ff_rewind_with_probe_data(ByteIOContext *s, unsigned char *buf, int buf_size); + +/** + * Creates and initializes a ByteIOContext for accessing the + * resource indicated by url. + * @note When the resource indicated by url has been opened in + * read+write mode, the ByteIOContext can be used only for writing. + * + * @param s Used to return the pointer to the created ByteIOContext. + * In case of failure the pointed to value is set to NULL. + * @param flags flags which control how the resource indicated by url + * is to be opened + * @return 0 in case of success, a negative value corresponding to an + * AVERROR code in case of failure + */ +int url_fopen(ByteIOContext **s, const char *url, int flags); + +int url_fclose(ByteIOContext *s); +URLContext *url_fileno(ByteIOContext *s); + +/** + * Return the maximum packet size associated to packetized buffered file + * handle. If the file is not packetized (stream like http or file on + * disk), then 0 is returned. + * + * @param s buffered file handle + * @return maximum packet size in bytes + */ +int url_fget_max_packet_size(ByteIOContext *s); + +int url_open_buf(ByteIOContext **s, uint8_t *buf, int buf_size, int flags); + +/** return the written or read size */ +int url_close_buf(ByteIOContext *s); + +/** + * Open a write only memory stream. + * + * @param s new IO context + * @return zero if no error. + */ +int url_open_dyn_buf(ByteIOContext **s); + +/** + * Open a write only packetized memory stream with a maximum packet + * size of 'max_packet_size'. The stream is stored in a memory buffer + * with a big endian 4 byte header giving the packet size in bytes. + * + * @param s new IO context + * @param max_packet_size maximum packet size (must be > 0) + * @return zero if no error. + */ +int url_open_dyn_packet_buf(ByteIOContext **s, int max_packet_size); + +/** + * Return the written size and a pointer to the buffer. The buffer + * must be freed with av_free(). + * @param s IO context + * @param pbuffer pointer to a byte buffer + * @return the length of the byte buffer + */ +int url_close_dyn_buf(ByteIOContext *s, uint8_t **pbuffer); + +unsigned long ff_crc04C11DB7_update(unsigned long checksum, const uint8_t *buf, + unsigned int len); +unsigned long get_checksum(ByteIOContext *s); +void init_checksum(ByteIOContext *s, + unsigned long (*update_checksum)(unsigned long c, const uint8_t *p, unsigned int len), + unsigned long checksum); + +/* udp.c */ +int udp_set_remote_url(URLContext *h, const char *uri); +int udp_get_local_port(URLContext *h); +#if (LIBAVFORMAT_VERSION_MAJOR <= 52) +int udp_get_file_handle(URLContext *h); +#endif + +#endif /* AVFORMAT_AVIO_H */ diff --git a/extra_lib/include/ffmpeg_android/libavutil/attributes.h b/extra_lib/include/ffmpeg_android/libavutil/attributes.h new file mode 100644 index 0000000..1208bc0 --- /dev/null +++ b/extra_lib/include/ffmpeg_android/libavutil/attributes.h @@ -0,0 +1,113 @@ +/* + * copyright (c) 2006 Michael Niedermayer + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/** + * @file libavutil/attributes.h + * Macro definitions for various function/variable attributes + */ + +#ifndef AVUTIL_ATTRIBUTES_H +#define AVUTIL_ATTRIBUTES_H + +#ifdef __GNUC__ +# define AV_GCC_VERSION_AT_LEAST(x,y) (__GNUC__ > x || __GNUC__ == x && __GNUC_MINOR__ >= y) +#else +# define AV_GCC_VERSION_AT_LEAST(x,y) 0 +#endif + +#ifndef av_always_inline +#if AV_GCC_VERSION_AT_LEAST(3,1) +# define av_always_inline __attribute__((always_inline)) inline +#else +# define av_always_inline inline +#endif +#endif + +#ifndef av_noinline +#if AV_GCC_VERSION_AT_LEAST(3,1) +# define av_noinline __attribute__((noinline)) +#else +# define av_noinline +#endif +#endif + +#ifndef av_pure +#if AV_GCC_VERSION_AT_LEAST(3,1) +# define av_pure __attribute__((pure)) +#else +# define av_pure +#endif +#endif + +#ifndef av_const +#if AV_GCC_VERSION_AT_LEAST(2,6) +# define av_const __attribute__((const)) +#else +# define av_const +#endif +#endif + +#ifndef av_cold +#if (!defined(__ICC) || __ICC > 1110) && AV_GCC_VERSION_AT_LEAST(4,3) +# define av_cold __attribute__((cold)) +#else +# define av_cold +#endif +#endif + +#ifndef av_flatten +#if (!defined(__ICC) || __ICC > 1110) && AV_GCC_VERSION_AT_LEAST(4,1) +# define av_flatten __attribute__((flatten)) +#else +# define av_flatten +#endif +#endif + +#ifndef attribute_deprecated +#if AV_GCC_VERSION_AT_LEAST(3,1) +# define attribute_deprecated __attribute__((deprecated)) +#else +# define attribute_deprecated +#endif +#endif + +#ifndef av_unused +#if defined(__GNUC__) +# define av_unused __attribute__((unused)) +#else +# define av_unused +#endif +#endif + +#ifndef av_uninit +#if defined(__GNUC__) && !defined(__ICC) +# define av_uninit(x) x=x +#else +# define av_uninit(x) x +#endif +#endif + +#ifdef __GNUC__ +# define av_builtin_constant_p __builtin_constant_p +#else +# define av_builtin_constant_p(x) 0 +#endif + +#endif /* AVUTIL_ATTRIBUTES_H */ diff --git a/extra_lib/include/ffmpeg_android/libavutil/avconfig.h b/extra_lib/include/ffmpeg_android/libavutil/avconfig.h new file mode 100644 index 0000000..b028bb4 --- /dev/null +++ b/extra_lib/include/ffmpeg_android/libavutil/avconfig.h @@ -0,0 +1,5 @@ +/* Generated by ffconf */ +#ifndef AVUTIL_AVCONFIG_H +#define AVUTIL_AVCONFIG_H +#define AV_HAVE_BIGENDIAN 0 +#endif /* AVUTIL_AVCONFIG_H */ diff --git a/extra_lib/include/ffmpeg_android/libavutil/avutil.h b/extra_lib/include/ffmpeg_android/libavutil/avutil.h new file mode 100644 index 0000000..1523de6 --- /dev/null +++ b/extra_lib/include/ffmpeg_android/libavutil/avutil.h @@ -0,0 +1,89 @@ +/* + * copyright (c) 2006 Michael Niedermayer + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef AVUTIL_AVUTIL_H +#define AVUTIL_AVUTIL_H + +/** + * @file libavutil/avutil.h + * external API header + */ + + +#define AV_STRINGIFY(s) AV_TOSTRING(s) +#define AV_TOSTRING(s) #s + +#define AV_GLUE(a, b) a ## b +#define AV_JOIN(a, b) AV_GLUE(a, b) + +#define AV_PRAGMA(s) _Pragma(#s) + +#define AV_VERSION_INT(a, b, c) (a<<16 | b<<8 | c) +#define AV_VERSION_DOT(a, b, c) a ##.## b ##.## c +#define AV_VERSION(a, b, c) AV_VERSION_DOT(a, b, c) + +#define LIBAVUTIL_VERSION_MAJOR 50 +#define LIBAVUTIL_VERSION_MINOR 14 +#define LIBAVUTIL_VERSION_MICRO 0 + +#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ + LIBAVUTIL_VERSION_MINOR, \ + LIBAVUTIL_VERSION_MICRO) +#define LIBAVUTIL_VERSION AV_VERSION(LIBAVUTIL_VERSION_MAJOR, \ + LIBAVUTIL_VERSION_MINOR, \ + LIBAVUTIL_VERSION_MICRO) +#define LIBAVUTIL_BUILD LIBAVUTIL_VERSION_INT + +#define LIBAVUTIL_IDENT "Lavu" AV_STRINGIFY(LIBAVUTIL_VERSION) + +/** + * Returns the LIBAVUTIL_VERSION_INT constant. + */ +unsigned avutil_version(void); + +/** + * Returns the libavutil build-time configuration. + */ +const char *avutil_configuration(void); + +/** + * Returns the libavutil license. + */ +const char *avutil_license(void); + +enum AVMediaType { + AVMEDIA_TYPE_UNKNOWN = -1, + AVMEDIA_TYPE_VIDEO, + AVMEDIA_TYPE_AUDIO, + AVMEDIA_TYPE_DATA, + AVMEDIA_TYPE_SUBTITLE, + AVMEDIA_TYPE_ATTACHMENT, + AVMEDIA_TYPE_NB +}; + +#include "common.h" +#include "error.h" +#include "mathematics.h" +#include "rational.h" +#include "intfloat_readwrite.h" +#include "log.h" +#include "pixfmt.h" + +#endif /* AVUTIL_AVUTIL_H */ diff --git a/extra_lib/include/ffmpeg_android/libavutil/common.h b/extra_lib/include/ffmpeg_android/libavutil/common.h new file mode 100644 index 0000000..fae0b5b --- /dev/null +++ b/extra_lib/include/ffmpeg_android/libavutil/common.h @@ -0,0 +1,297 @@ +/* + * copyright (c) 2006 Michael Niedermayer + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/** + * @file libavutil/common.h + * common internal and external API header + */ + +#ifndef AVUTIL_COMMON_H +#define AVUTIL_COMMON_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include "attributes.h" + +//rounded division & shift +#define RSHIFT(a,b) ((a) > 0 ? ((a) + ((1<<(b))>>1))>>(b) : ((a) + ((1<<(b))>>1)-1)>>(b)) +/* assume b>0 */ +#define ROUNDED_DIV(a,b) (((a)>0 ? (a) + ((b)>>1) : (a) - ((b)>>1))/(b)) +#define FFABS(a) ((a) >= 0 ? (a) : (-(a))) +#define FFSIGN(a) ((a) > 0 ? 1 : -1) + +#define FFMAX(a,b) ((a) > (b) ? (a) : (b)) +#define FFMAX3(a,b,c) FFMAX(FFMAX(a,b),c) +#define FFMIN(a,b) ((a) > (b) ? (b) : (a)) +#define FFMIN3(a,b,c) FFMIN(FFMIN(a,b),c) + +#define FFSWAP(type,a,b) do{type SWAP_tmp= b; b= a; a= SWAP_tmp;}while(0) +#define FF_ARRAY_ELEMS(a) (sizeof(a) / sizeof((a)[0])) +#define FFALIGN(x, a) (((x)+(a)-1)&~((a)-1)) + +/* misc math functions */ +extern const uint8_t ff_log2_tab[256]; + +extern const uint8_t av_reverse[256]; + +static inline av_const int av_log2_c(unsigned int v) +{ + int n = 0; + if (v & 0xffff0000) { + v >>= 16; + n += 16; + } + if (v & 0xff00) { + v >>= 8; + n += 8; + } + n += ff_log2_tab[v]; + + return n; +} + +static inline av_const int av_log2_16bit_c(unsigned int v) +{ + int n = 0; + if (v & 0xff00) { + v >>= 8; + n += 8; + } + n += ff_log2_tab[v]; + + return n; +} + +#ifdef HAVE_AV_CONFIG_H +# include "config.h" +# include "intmath.h" +#endif + +#ifndef av_log2 +# define av_log2 av_log2_c +#endif +#ifndef av_log2_16bit +# define av_log2_16bit av_log2_16bit_c +#endif + +/** + * Clips a signed integer value into the amin-amax range. + * @param a value to clip + * @param amin minimum value of the clip range + * @param amax maximum value of the clip range + * @return clipped value + */ +static inline av_const int av_clip(int a, int amin, int amax) +{ + if (a < amin) return amin; + else if (a > amax) return amax; + else return a; +} + +/** + * Clips a signed integer value into the 0-255 range. + * @param a value to clip + * @return clipped value + */ +static inline av_const uint8_t av_clip_uint8(int a) +{ + if (a&(~255)) return (-a)>>31; + else return a; +} + +/** + * Clips a signed integer value into the 0-65535 range. + * @param a value to clip + * @return clipped value + */ +static inline av_const uint16_t av_clip_uint16(int a) +{ + if (a&(~65535)) return (-a)>>31; + else return a; +} + +/** + * Clips a signed integer value into the -32768,32767 range. + * @param a value to clip + * @return clipped value + */ +static inline av_const int16_t av_clip_int16(int a) +{ + if ((a+32768) & ~65535) return (a>>31) ^ 32767; + else return a; +} + +/** + * Clips a float value into the amin-amax range. + * @param a value to clip + * @param amin minimum value of the clip range + * @param amax maximum value of the clip range + * @return clipped value + */ +static inline av_const float av_clipf(float a, float amin, float amax) +{ + if (a < amin) return amin; + else if (a > amax) return amax; + else return a; +} + +/** Computes ceil(log2(x)). + * @param x value used to compute ceil(log2(x)) + * @return computed ceiling of log2(x) + */ +static inline av_const int av_ceil_log2(int x) +{ + return av_log2((x - 1) << 1); +} + +#define MKTAG(a,b,c,d) (a | (b << 8) | (c << 16) | (d << 24)) +#define MKBETAG(a,b,c,d) (d | (c << 8) | (b << 16) | (a << 24)) + +/*! + * \def GET_UTF8(val, GET_BYTE, ERROR) + * Converts a UTF-8 character (up to 4 bytes long) to its 32-bit UCS-4 encoded form + * \param val is the output and should be of type uint32_t. It holds the converted + * UCS-4 character and should be a left value. + * \param GET_BYTE gets UTF-8 encoded bytes from any proper source. It can be + * a function or a statement whose return value or evaluated value is of type + * uint8_t. It will be executed up to 4 times for values in the valid UTF-8 range, + * and up to 7 times in the general case. + * \param ERROR action that should be taken when an invalid UTF-8 byte is returned + * from GET_BYTE. It should be a statement that jumps out of the macro, + * like exit(), goto, return, break, or continue. + */ +#define GET_UTF8(val, GET_BYTE, ERROR)\ + val= GET_BYTE;\ + {\ + int ones= 7 - av_log2(val ^ 255);\ + if(ones==1)\ + ERROR\ + val&= 127>>ones;\ + while(--ones > 0){\ + int tmp= GET_BYTE - 128;\ + if(tmp>>6)\ + ERROR\ + val= (val<<6) + tmp;\ + }\ + } + +/*! + * \def GET_UTF16(val, GET_16BIT, ERROR) + * Converts a UTF-16 character (2 or 4 bytes) to its 32-bit UCS-4 encoded form + * \param val is the output and should be of type uint32_t. It holds the converted + * UCS-4 character and should be a left value. + * \param GET_16BIT gets two bytes of UTF-16 encoded data converted to native endianness. + * It can be a function or a statement whose return value or evaluated value is of type + * uint16_t. It will be executed up to 2 times. + * \param ERROR action that should be taken when an invalid UTF-16 surrogate is + * returned from GET_BYTE. It should be a statement that jumps out of the macro, + * like exit(), goto, return, break, or continue. + */ +#define GET_UTF16(val, GET_16BIT, ERROR)\ + val = GET_16BIT;\ + {\ + unsigned int hi = val - 0xD800;\ + if (hi < 0x800) {\ + val = GET_16BIT - 0xDC00;\ + if (val > 0x3FFU || hi > 0x3FFU)\ + ERROR\ + val += (hi<<10) + 0x10000;\ + }\ + }\ + +/*! + * \def PUT_UTF8(val, tmp, PUT_BYTE) + * Converts a 32-bit Unicode character to its UTF-8 encoded form (up to 4 bytes long). + * \param val is an input-only argument and should be of type uint32_t. It holds + * a UCS-4 encoded Unicode character that is to be converted to UTF-8. If + * val is given as a function it is executed only once. + * \param tmp is a temporary variable and should be of type uint8_t. It + * represents an intermediate value during conversion that is to be + * output by PUT_BYTE. + * \param PUT_BYTE writes the converted UTF-8 bytes to any proper destination. + * It could be a function or a statement, and uses tmp as the input byte. + * For example, PUT_BYTE could be "*output++ = tmp;" PUT_BYTE will be + * executed up to 4 times for values in the valid UTF-8 range and up to + * 7 times in the general case, depending on the length of the converted + * Unicode character. + */ +#define PUT_UTF8(val, tmp, PUT_BYTE)\ + {\ + int bytes, shift;\ + uint32_t in = val;\ + if (in < 0x80) {\ + tmp = in;\ + PUT_BYTE\ + } else {\ + bytes = (av_log2(in) + 4) / 5;\ + shift = (bytes - 1) * 6;\ + tmp = (256 - (256 >> bytes)) | (in >> shift);\ + PUT_BYTE\ + while (shift >= 6) {\ + shift -= 6;\ + tmp = 0x80 | ((in >> shift) & 0x3f);\ + PUT_BYTE\ + }\ + }\ + } + +/*! + * \def PUT_UTF16(val, tmp, PUT_16BIT) + * Converts a 32-bit Unicode character to its UTF-16 encoded form (2 or 4 bytes). + * \param val is an input-only argument and should be of type uint32_t. It holds + * a UCS-4 encoded Unicode character that is to be converted to UTF-16. If + * val is given as a function it is executed only once. + * \param tmp is a temporary variable and should be of type uint16_t. It + * represents an intermediate value during conversion that is to be + * output by PUT_16BIT. + * \param PUT_16BIT writes the converted UTF-16 data to any proper destination + * in desired endianness. It could be a function or a statement, and uses tmp + * as the input byte. For example, PUT_BYTE could be "*output++ = tmp;" + * PUT_BYTE will be executed 1 or 2 times depending on input character. + */ +#define PUT_UTF16(val, tmp, PUT_16BIT)\ + {\ + uint32_t in = val;\ + if (in < 0x10000) {\ + tmp = in;\ + PUT_16BIT\ + } else {\ + tmp = 0xD800 | ((in - 0x10000) >> 10);\ + PUT_16BIT\ + tmp = 0xDC00 | ((in - 0x10000) & 0x3FF);\ + PUT_16BIT\ + }\ + }\ + + + +#include "mem.h" + +#ifdef HAVE_AV_CONFIG_H +# include "internal.h" +#endif /* HAVE_AV_CONFIG_H */ + +#endif /* AVUTIL_COMMON_H */ diff --git a/extra_lib/include/ffmpeg_android/libavutil/error.h b/extra_lib/include/ffmpeg_android/libavutil/error.h new file mode 100644 index 0000000..c757981 --- /dev/null +++ b/extra_lib/include/ffmpeg_android/libavutil/error.h @@ -0,0 +1,70 @@ +/* + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/** + * @file libavutil/error.h + * error code definitions + */ + +#ifndef AVUTIL_ERROR_H +#define AVUTIL_ERROR_H + +#include +#include "avutil.h" + +/* error handling */ +#if EDOM > 0 +#define AVERROR(e) (-(e)) ///< Returns a negative error code from a POSIX error code, to return from library functions. +#define AVUNERROR(e) (-(e)) ///< Returns a POSIX error code from a library function error return value. +#else +/* Some platforms have E* and errno already negated. */ +#define AVERROR(e) (e) +#define AVUNERROR(e) (e) +#endif + +#if LIBAVUTIL_VERSION_MAJOR < 51 +#define AVERROR_INVALIDDATA AVERROR(EINVAL) ///< Invalid data found when processing input +#define AVERROR_IO AVERROR(EIO) ///< I/O error +#define AVERROR_NOENT AVERROR(ENOENT) ///< No such file or directory +#define AVERROR_NOFMT AVERROR(EILSEQ) ///< Unknown format +#define AVERROR_NOMEM AVERROR(ENOMEM) ///< Not enough memory +#define AVERROR_NUMEXPECTED AVERROR(EDOM) ///< Number syntax expected in filename +#define AVERROR_UNKNOWN AVERROR(EINVAL) ///< Unknown error +#endif + +#define AVERROR_EOF AVERROR(EPIPE) ///< End of file +#define AVERROR_NOTSUPP AVERROR(ENOSYS) ///< Operation not supported + +#define AVERROR_PATCHWELCOME (-MKTAG('P','A','W','E')) ///< Not yet implemented in FFmpeg, patches welcome + +#if LIBAVUTIL_VERSION_MAJOR > 50 +#define AVERROR_INVALIDDATA (-MKTAG('I','N','D','A')) ///< Invalid data found when processing input +#define AVERROR_NUMEXPECTED (-MKTAG('N','U','E','X')) ///< Number syntax expected in filename +#endif + +/** + * Puts a description of the AVERROR code errnum in errbuf. + * In case of failure the global variable errno is set to indicate the + * error. + * + * @param errbuf_size the size in bytes of errbuf + * @return 0 on success, a negative value otherwise + */ +int av_strerror(int errnum, char *errbuf, size_t errbuf_size); + +#endif /* AVUTIL_ERROR_H */ diff --git a/extra_lib/include/ffmpeg_android/libavutil/intfloat_readwrite.h b/extra_lib/include/ffmpeg_android/libavutil/intfloat_readwrite.h new file mode 100644 index 0000000..1b80fc6 --- /dev/null +++ b/extra_lib/include/ffmpeg_android/libavutil/intfloat_readwrite.h @@ -0,0 +1,40 @@ +/* + * copyright (c) 2005 Michael Niedermayer + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef AVUTIL_INTFLOAT_READWRITE_H +#define AVUTIL_INTFLOAT_READWRITE_H + +#include +#include "attributes.h" + +/* IEEE 80 bits extended float */ +typedef struct AVExtFloat { + uint8_t exponent[2]; + uint8_t mantissa[8]; +} AVExtFloat; + +double av_int2dbl(int64_t v) av_const; +float av_int2flt(int32_t v) av_const; +double av_ext2dbl(const AVExtFloat ext) av_const; +int64_t av_dbl2int(double d) av_const; +int32_t av_flt2int(float d) av_const; +AVExtFloat av_dbl2ext(double d) av_const; + +#endif /* AVUTIL_INTFLOAT_READWRITE_H */ diff --git a/extra_lib/include/ffmpeg_android/libavutil/log.h b/extra_lib/include/ffmpeg_android/libavutil/log.h new file mode 100644 index 0000000..b0a1493 --- /dev/null +++ b/extra_lib/include/ffmpeg_android/libavutil/log.h @@ -0,0 +1,115 @@ +/* + * copyright (c) 2006 Michael Niedermayer + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef AVUTIL_LOG_H +#define AVUTIL_LOG_H + +#include +#include "avutil.h" + +/** + * Describes the class of an AVClass context structure. That is an + * arbitrary struct of which the first field is a pointer to an + * AVClass struct (e.g. AVCodecContext, AVFormatContext etc.). + */ +typedef struct { + /** + * The name of the class; usually it is the same name as the + * context structure type to which the AVClass is associated. + */ + const char* class_name; + + /** + * A pointer to a function which returns the name of a context + * instance ctx associated with the class. + */ + const char* (*item_name)(void* ctx); + + /** + * a pointer to the first option specified in the class if any or NULL + * + * @see av_set_default_options() + */ + const struct AVOption *option; +} AVClass; + +/* av_log API */ + +#define AV_LOG_QUIET -8 + +/** + * Something went really wrong and we will crash now. + */ +#define AV_LOG_PANIC 0 + +/** + * Something went wrong and recovery is not possible. + * For example, no header was found for a format which depends + * on headers or an illegal combination of parameters is used. + */ +#define AV_LOG_FATAL 8 + +/** + * Something went wrong and cannot losslessly be recovered. + * However, not all future data is affected. + */ +#define AV_LOG_ERROR 16 + +/** + * Something somehow does not look correct. This may or may not + * lead to problems. An example would be the use of '-vstrict -2'. + */ +#define AV_LOG_WARNING 24 + +#define AV_LOG_INFO 32 +#define AV_LOG_VERBOSE 40 + +/** + * Stuff which is only useful for libav* developers. + */ +#define AV_LOG_DEBUG 48 + +/** + * Sends the specified message to the log if the level is less than or equal + * to the current av_log_level. By default, all logging messages are sent to + * stderr. This behavior can be altered by setting a different av_vlog callback + * function. + * + * @param avcl A pointer to an arbitrary struct of which the first field is a + * pointer to an AVClass struct. + * @param level The importance level of the message, lower values signifying + * higher importance. + * @param fmt The format string (printf-compatible) that specifies how + * subsequent arguments are converted to output. + * @see av_vlog + */ +#ifdef __GNUC__ +void av_log(void*, int level, const char *fmt, ...) __attribute__ ((__format__ (__printf__, 3, 4))); +#else +void av_log(void*, int level, const char *fmt, ...); +#endif + +void av_vlog(void*, int level, const char *fmt, va_list); +int av_log_get_level(void); +void av_log_set_level(int); +void av_log_set_callback(void (*)(void*, int, const char*, va_list)); +void av_log_default_callback(void* ptr, int level, const char* fmt, va_list vl); + +#endif /* AVUTIL_LOG_H */ diff --git a/extra_lib/include/ffmpeg_android/libavutil/mathematics.h b/extra_lib/include/ffmpeg_android/libavutil/mathematics.h new file mode 100644 index 0000000..e198aef --- /dev/null +++ b/extra_lib/include/ffmpeg_android/libavutil/mathematics.h @@ -0,0 +1,98 @@ +/* + * copyright (c) 2005 Michael Niedermayer + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef AVUTIL_MATHEMATICS_H +#define AVUTIL_MATHEMATICS_H + +#include +#include +#include "attributes.h" +#include "rational.h" + +#ifndef M_E +#define M_E 2.7182818284590452354 /* e */ +#endif +#ifndef M_LN2 +#define M_LN2 0.69314718055994530942 /* log_e 2 */ +#endif +#ifndef M_LN10 +#define M_LN10 2.30258509299404568402 /* log_e 10 */ +#endif +#ifndef M_LOG2_10 +#define M_LOG2_10 3.32192809488736234787 /* log_2 10 */ +#endif +#ifndef M_PI +#define M_PI 3.14159265358979323846 /* pi */ +#endif +#ifndef M_SQRT1_2 +#define M_SQRT1_2 0.70710678118654752440 /* 1/sqrt(2) */ +#endif +#ifndef M_SQRT2 +#define M_SQRT2 1.41421356237309504880 /* sqrt(2) */ +#endif +#ifndef NAN +#define NAN (0.0/0.0) +#endif +#ifndef INFINITY +#define INFINITY (1.0/0.0) +#endif + +enum AVRounding { + AV_ROUND_ZERO = 0, ///< Round toward zero. + AV_ROUND_INF = 1, ///< Round away from zero. + AV_ROUND_DOWN = 2, ///< Round toward -infinity. + AV_ROUND_UP = 3, ///< Round toward +infinity. + AV_ROUND_NEAR_INF = 5, ///< Round to nearest and halfway cases away from zero. +}; + +/** + * Returns the greatest common divisor of a and b. + * If both a and b are 0 or either or both are <0 then behavior is + * undefined. + */ +int64_t av_const av_gcd(int64_t a, int64_t b); + +/** + * Rescales a 64-bit integer with rounding to nearest. + * A simple a*b/c isn't possible as it can overflow. + */ +int64_t av_rescale(int64_t a, int64_t b, int64_t c) av_const; + +/** + * Rescales a 64-bit integer with specified rounding. + * A simple a*b/c isn't possible as it can overflow. + */ +int64_t av_rescale_rnd(int64_t a, int64_t b, int64_t c, enum AVRounding) av_const; + +/** + * Rescales a 64-bit integer by 2 rational numbers. + */ +int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq) av_const; + +/** + * Compares 2 timestamps each in its own timebases. + * The result of the function is undefined if one of the timestamps + * is outside the int64_t range when represented in the others timebase. + * @return -1 if ts_a is before ts_b, 1 if ts_a is after ts_b or 0 if they represent the same position + */ +int av_compare_ts(int64_t ts_a, AVRational tb_a, int64_t ts_b, AVRational tb_b); + + +#endif /* AVUTIL_MATHEMATICS_H */ diff --git a/extra_lib/include/ffmpeg_android/libavutil/mem.h b/extra_lib/include/ffmpeg_android/libavutil/mem.h new file mode 100644 index 0000000..fffbb87 --- /dev/null +++ b/extra_lib/include/ffmpeg_android/libavutil/mem.h @@ -0,0 +1,125 @@ +/* + * copyright (c) 2006 Michael Niedermayer + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/** + * @file libavutil/mem.h + * memory handling functions + */ + +#ifndef AVUTIL_MEM_H +#define AVUTIL_MEM_H + +#include "attributes.h" + +#if defined(__ICC) || defined(__SUNPRO_C) + #define DECLARE_ALIGNED(n,t,v) t __attribute__ ((aligned (n))) v + #define DECLARE_ASM_CONST(n,t,v) const t __attribute__ ((aligned (n))) v +#elif defined(__TI_COMPILER_VERSION__) + #define DECLARE_ALIGNED(n,t,v) \ + AV_PRAGMA(DATA_ALIGN(v,n)) \ + t __attribute__((aligned(n))) v + #define DECLARE_ASM_CONST(n,t,v) \ + AV_PRAGMA(DATA_ALIGN(v,n)) \ + static const t __attribute__((aligned(n))) v +#elif defined(__GNUC__) + #define DECLARE_ALIGNED(n,t,v) t __attribute__ ((aligned (n))) v + #define DECLARE_ASM_CONST(n,t,v) static const t attribute_used __attribute__ ((aligned (n))) v +#elif defined(_MSC_VER) + #define DECLARE_ALIGNED(n,t,v) __declspec(align(n)) t v + #define DECLARE_ASM_CONST(n,t,v) __declspec(align(n)) static const t v +#else + #define DECLARE_ALIGNED(n,t,v) t v + #define DECLARE_ASM_CONST(n,t,v) static const t v +#endif + +#if AV_GCC_VERSION_AT_LEAST(3,1) + #define av_malloc_attrib __attribute__((__malloc__)) +#else + #define av_malloc_attrib +#endif + +#if (!defined(__ICC) || __ICC > 1110) && AV_GCC_VERSION_AT_LEAST(4,3) + #define av_alloc_size(n) __attribute__((alloc_size(n))) +#else + #define av_alloc_size(n) +#endif + +/** + * Allocates a block of size bytes with alignment suitable for all + * memory accesses (including vectors if available on the CPU). + * @param size Size in bytes for the memory block to be allocated. + * @return Pointer to the allocated block, NULL if the block cannot + * be allocated. + * @see av_mallocz() + */ +void *av_malloc(unsigned int size) av_malloc_attrib av_alloc_size(1); + +/** + * Allocates or reallocates a block of memory. + * If ptr is NULL and size > 0, allocates a new block. If + * size is zero, frees the memory block pointed to by ptr. + * @param size Size in bytes for the memory block to be allocated or + * reallocated. + * @param ptr Pointer to a memory block already allocated with + * av_malloc(z)() or av_realloc() or NULL. + * @return Pointer to a newly reallocated block or NULL if the block + * cannot be reallocated or the function is used to free the memory block. + * @see av_fast_realloc() + */ +void *av_realloc(void *ptr, unsigned int size) av_alloc_size(2); + +/** + * Frees a memory block which has been allocated with av_malloc(z)() or + * av_realloc(). + * @param ptr Pointer to the memory block which should be freed. + * @note ptr = NULL is explicitly allowed. + * @note It is recommended that you use av_freep() instead. + * @see av_freep() + */ +void av_free(void *ptr); + +/** + * Allocates a block of size bytes with alignment suitable for all + * memory accesses (including vectors if available on the CPU) and + * zeroes all the bytes of the block. + * @param size Size in bytes for the memory block to be allocated. + * @return Pointer to the allocated block, NULL if it cannot be allocated. + * @see av_malloc() + */ +void *av_mallocz(unsigned int size) av_malloc_attrib av_alloc_size(1); + +/** + * Duplicates the string s. + * @param s string to be duplicated + * @return Pointer to a newly allocated string containing a + * copy of s or NULL if the string cannot be allocated. + */ +char *av_strdup(const char *s) av_malloc_attrib; + +/** + * Frees a memory block which has been allocated with av_malloc(z)() or + * av_realloc() and set the pointer pointing to it to NULL. + * @param ptr Pointer to the pointer to the memory block which should + * be freed. + * @see av_free() + */ +void av_freep(void *ptr); + +#endif /* AVUTIL_MEM_H */ diff --git a/extra_lib/include/ffmpeg_android/libavutil/pixfmt.h b/extra_lib/include/ffmpeg_android/libavutil/pixfmt.h new file mode 100644 index 0000000..9118d3d --- /dev/null +++ b/extra_lib/include/ffmpeg_android/libavutil/pixfmt.h @@ -0,0 +1,162 @@ +/* + * copyright (c) 2006 Michael Niedermayer + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef AVUTIL_PIXFMT_H +#define AVUTIL_PIXFMT_H + +/** + * @file libavutil/pixfmt.h + * pixel format definitions + * + * @warning This file has to be considered an internal but installed + * header, so it should not be directly included in your projects. + */ + +#include "libavutil/avconfig.h" + +/** + * Pixel format. Notes: + * + * PIX_FMT_RGB32 is handled in an endian-specific manner. An RGBA + * color is put together as: + * (A << 24) | (R << 16) | (G << 8) | B + * This is stored as BGRA on little-endian CPU architectures and ARGB on + * big-endian CPUs. + * + * When the pixel format is palettized RGB (PIX_FMT_PAL8), the palettized + * image data is stored in AVFrame.data[0]. The palette is transported in + * AVFrame.data[1], is 1024 bytes long (256 4-byte entries) and is + * formatted the same as in PIX_FMT_RGB32 described above (i.e., it is + * also endian-specific). Note also that the individual RGB palette + * components stored in AVFrame.data[1] should be in the range 0..255. + * This is important as many custom PAL8 video codecs that were designed + * to run on the IBM VGA graphics adapter use 6-bit palette components. + * + * For all the 8bit per pixel formats, an RGB32 palette is in data[1] like + * for pal8. This palette is filled in automatically by the function + * allocating the picture. + * + * Note, make sure that all newly added big endian formats have pix_fmt&1==1 + * and that all newly added little endian formats have pix_fmt&1==0 + * this allows simpler detection of big vs little endian. + */ +enum PixelFormat { + PIX_FMT_NONE= -1, + PIX_FMT_YUV420P, ///< planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples) + PIX_FMT_YUYV422, ///< packed YUV 4:2:2, 16bpp, Y0 Cb Y1 Cr + PIX_FMT_RGB24, ///< packed RGB 8:8:8, 24bpp, RGBRGB... + PIX_FMT_BGR24, ///< packed RGB 8:8:8, 24bpp, BGRBGR... + PIX_FMT_YUV422P, ///< planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples) + PIX_FMT_YUV444P, ///< planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples) + PIX_FMT_YUV410P, ///< planar YUV 4:1:0, 9bpp, (1 Cr & Cb sample per 4x4 Y samples) + PIX_FMT_YUV411P, ///< planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples) + PIX_FMT_GRAY8, ///< Y , 8bpp + PIX_FMT_MONOWHITE, ///< Y , 1bpp, 0 is white, 1 is black + PIX_FMT_MONOBLACK, ///< Y , 1bpp, 0 is black, 1 is white + PIX_FMT_PAL8, ///< 8 bit with PIX_FMT_RGB32 palette + PIX_FMT_YUVJ420P, ///< planar YUV 4:2:0, 12bpp, full scale (JPEG) + PIX_FMT_YUVJ422P, ///< planar YUV 4:2:2, 16bpp, full scale (JPEG) + PIX_FMT_YUVJ444P, ///< planar YUV 4:4:4, 24bpp, full scale (JPEG) + PIX_FMT_XVMC_MPEG2_MC,///< XVideo Motion Acceleration via common packet passing + PIX_FMT_XVMC_MPEG2_IDCT, + PIX_FMT_UYVY422, ///< packed YUV 4:2:2, 16bpp, Cb Y0 Cr Y1 + PIX_FMT_UYYVYY411, ///< packed YUV 4:1:1, 12bpp, Cb Y0 Y1 Cr Y2 Y3 + PIX_FMT_BGR8, ///< packed RGB 3:3:2, 8bpp, (msb)2B 3G 3R(lsb) + PIX_FMT_BGR4, ///< packed RGB 1:2:1, 4bpp, (msb)1B 2G 1R(lsb) + PIX_FMT_BGR4_BYTE, ///< packed RGB 1:2:1, 8bpp, (msb)1B 2G 1R(lsb) + PIX_FMT_RGB8, ///< packed RGB 3:3:2, 8bpp, (msb)2R 3G 3B(lsb) + PIX_FMT_RGB4, ///< packed RGB 1:2:1, 4bpp, (msb)1R 2G 1B(lsb) + PIX_FMT_RGB4_BYTE, ///< packed RGB 1:2:1, 8bpp, (msb)1R 2G 1B(lsb) + PIX_FMT_NV12, ///< planar YUV 4:2:0, 12bpp, 1 plane for Y and 1 for UV + PIX_FMT_NV21, ///< as above, but U and V bytes are swapped + + PIX_FMT_ARGB, ///< packed ARGB 8:8:8:8, 32bpp, ARGBARGB... + PIX_FMT_RGBA, ///< packed RGBA 8:8:8:8, 32bpp, RGBARGBA... + PIX_FMT_ABGR, ///< packed ABGR 8:8:8:8, 32bpp, ABGRABGR... + PIX_FMT_BGRA, ///< packed BGRA 8:8:8:8, 32bpp, BGRABGRA... + + PIX_FMT_GRAY16BE, ///< Y , 16bpp, big-endian + PIX_FMT_GRAY16LE, ///< Y , 16bpp, little-endian + PIX_FMT_YUV440P, ///< planar YUV 4:4:0 (1 Cr & Cb sample per 1x2 Y samples) + PIX_FMT_YUVJ440P, ///< planar YUV 4:4:0 full scale (JPEG) + PIX_FMT_YUVA420P, ///< planar YUV 4:2:0, 20bpp, (1 Cr & Cb sample per 2x2 Y & A samples) + PIX_FMT_VDPAU_H264,///< H.264 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers + PIX_FMT_VDPAU_MPEG1,///< MPEG-1 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers + PIX_FMT_VDPAU_MPEG2,///< MPEG-2 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers + PIX_FMT_VDPAU_WMV3,///< WMV3 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers + PIX_FMT_VDPAU_VC1, ///< VC-1 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers + PIX_FMT_RGB48BE, ///< packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, big-endian + PIX_FMT_RGB48LE, ///< packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, little-endian + + PIX_FMT_RGB565BE, ///< packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), big-endian + PIX_FMT_RGB565LE, ///< packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), little-endian + PIX_FMT_RGB555BE, ///< packed RGB 5:5:5, 16bpp, (msb)1A 5R 5G 5B(lsb), big-endian, most significant bit to 0 + PIX_FMT_RGB555LE, ///< packed RGB 5:5:5, 16bpp, (msb)1A 5R 5G 5B(lsb), little-endian, most significant bit to 0 + + PIX_FMT_BGR565BE, ///< packed BGR 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), big-endian + PIX_FMT_BGR565LE, ///< packed BGR 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), little-endian + PIX_FMT_BGR555BE, ///< packed BGR 5:5:5, 16bpp, (msb)1A 5B 5G 5R(lsb), big-endian, most significant bit to 1 + PIX_FMT_BGR555LE, ///< packed BGR 5:5:5, 16bpp, (msb)1A 5B 5G 5R(lsb), little-endian, most significant bit to 1 + + PIX_FMT_VAAPI_MOCO, ///< HW acceleration through VA API at motion compensation entry-point, Picture.data[3] contains a vaapi_render_state struct which contains macroblocks as well as various fields extracted from headers + PIX_FMT_VAAPI_IDCT, ///< HW acceleration through VA API at IDCT entry-point, Picture.data[3] contains a vaapi_render_state struct which contains fields extracted from headers + PIX_FMT_VAAPI_VLD, ///< HW decoding through VA API, Picture.data[3] contains a vaapi_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers + + PIX_FMT_YUV420P16LE, ///< planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian + PIX_FMT_YUV420P16BE, ///< planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian + PIX_FMT_YUV422P16LE, ///< planar YUV 4:2:2, 32bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian + PIX_FMT_YUV422P16BE, ///< planar YUV 4:2:2, 32bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian + PIX_FMT_YUV444P16LE, ///< planar YUV 4:4:4, 48bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian + PIX_FMT_YUV444P16BE, ///< planar YUV 4:4:4, 48bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian + PIX_FMT_VDPAU_MPEG4, ///< MPEG4 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers + PIX_FMT_DXVA2_VLD, ///< HW decoding through DXVA2, Picture.data[3] contains a LPDIRECT3DSURFACE9 pointer + + PIX_FMT_RGB444BE, ///< packed RGB 4:4:4, 16bpp, (msb)4A 4R 4G 4B(lsb), big-endian, most significant bits to 0 + PIX_FMT_RGB444LE, ///< packed RGB 4:4:4, 16bpp, (msb)4A 4R 4G 4B(lsb), little-endian, most significant bits to 0 + PIX_FMT_BGR444BE, ///< packed BGR 4:4:4, 16bpp, (msb)4A 4B 4G 4R(lsb), big-endian, most significant bits to 1 + PIX_FMT_BGR444LE, ///< packed BGR 4:4:4, 16bpp, (msb)4A 4B 4G 4R(lsb), little-endian, most significant bits to 1 + PIX_FMT_NB, ///< number of pixel formats, DO NOT USE THIS if you want to link with shared libav* because the number of formats might differ between versions +}; + +#if AV_HAVE_BIGENDIAN +# define PIX_FMT_NE(be, le) PIX_FMT_##be +#else +# define PIX_FMT_NE(be, le) PIX_FMT_##le +#endif + +#define PIX_FMT_RGB32 PIX_FMT_NE(ARGB, BGRA) +#define PIX_FMT_RGB32_1 PIX_FMT_NE(RGBA, ABGR) +#define PIX_FMT_BGR32 PIX_FMT_NE(ABGR, RGBA) +#define PIX_FMT_BGR32_1 PIX_FMT_NE(BGRA, ARGB) + +#define PIX_FMT_GRAY16 PIX_FMT_NE(GRAY16BE, GRAY16LE) +#define PIX_FMT_RGB48 PIX_FMT_NE(RGB48BE, RGB48LE) +#define PIX_FMT_RGB565 PIX_FMT_NE(RGB565BE, RGB565LE) +#define PIX_FMT_RGB555 PIX_FMT_NE(RGB555BE, RGB555LE) +#define PIX_FMT_RGB444 PIX_FMT_NE(RGB444BE, RGB444LE) +#define PIX_FMT_BGR565 PIX_FMT_NE(BGR565BE, BGR565LE) +#define PIX_FMT_BGR555 PIX_FMT_NE(BGR555BE, BGR555LE) +#define PIX_FMT_BGR444 PIX_FMT_NE(BGR444BE, BGR444LE) + +#define PIX_FMT_YUV420P16 PIX_FMT_NE(YUV420P16BE, YUV420P16LE) +#define PIX_FMT_YUV422P16 PIX_FMT_NE(YUV422P16BE, YUV422P16LE) +#define PIX_FMT_YUV444P16 PIX_FMT_NE(YUV444P16BE, YUV444P16LE) + +#endif /* AVUTIL_PIXFMT_H */ diff --git a/extra_lib/include/ffmpeg_android/libavutil/rational.h b/extra_lib/include/ffmpeg_android/libavutil/rational.h new file mode 100644 index 0000000..c5ecf2c --- /dev/null +++ b/extra_lib/include/ffmpeg_android/libavutil/rational.h @@ -0,0 +1,129 @@ +/* + * rational numbers + * Copyright (c) 2003 Michael Niedermayer + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/** + * @file libavutil/rational.h + * rational numbers + * @author Michael Niedermayer + */ + +#ifndef AVUTIL_RATIONAL_H +#define AVUTIL_RATIONAL_H + +#include +#include "attributes.h" + +/** + * rational number numerator/denominator + */ +typedef struct AVRational{ + int num; ///< numerator + int den; ///< denominator +} AVRational; + +/** + * Compares two rationals. + * @param a first rational + * @param b second rational + * @return 0 if a==b, 1 if a>b and -1 if a>63)|1; + else return 0; +} + +/** + * Converts rational to double. + * @param a rational to convert + * @return (double) a + */ +static inline double av_q2d(AVRational a){ + return a.num / (double) a.den; +} + +/** + * Reduces a fraction. + * This is useful for framerate calculations. + * @param dst_num destination numerator + * @param dst_den destination denominator + * @param num source numerator + * @param den source denominator + * @param max the maximum allowed for dst_num & dst_den + * @return 1 if exact, 0 otherwise + */ +int av_reduce(int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max); + +/** + * Multiplies two rationals. + * @param b first rational + * @param c second rational + * @return b*c + */ +AVRational av_mul_q(AVRational b, AVRational c) av_const; + +/** + * Divides one rational by another. + * @param b first rational + * @param c second rational + * @return b/c + */ +AVRational av_div_q(AVRational b, AVRational c) av_const; + +/** + * Adds two rationals. + * @param b first rational + * @param c second rational + * @return b+c + */ +AVRational av_add_q(AVRational b, AVRational c) av_const; + +/** + * Subtracts one rational from another. + * @param b first rational + * @param c second rational + * @return b-c + */ +AVRational av_sub_q(AVRational b, AVRational c) av_const; + +/** + * Converts a double precision floating point number to a rational. + * @param d double to convert + * @param max the maximum allowed numerator and denominator + * @return (AVRational) d + */ +AVRational av_d2q(double d, int max) av_const; + +/** + * @return 1 if q1 is nearer to q than q2, -1 if q2 is nearer + * than q1, 0 if they have the same distance. + */ +int av_nearer_q(AVRational q, AVRational q1, AVRational q2); + +/** + * Finds the nearest value in q_list to q. + * @param q_list an array of rationals terminated by {0, 0} + * @return the index of the nearest value found in the array + */ +int av_find_nearest_q_idx(AVRational q, const AVRational* q_list); + +#endif /* AVUTIL_RATIONAL_H */ diff --git a/extra_lib/include/ffmpeg_android/libswscale/swscale.h b/extra_lib/include/ffmpeg_android/libswscale/swscale.h new file mode 100644 index 0000000..1e7af3a --- /dev/null +++ b/extra_lib/include/ffmpeg_android/libswscale/swscale.h @@ -0,0 +1,330 @@ +/* + * Copyright (C) 2001-2003 Michael Niedermayer + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef SWSCALE_SWSCALE_H +#define SWSCALE_SWSCALE_H + +/** + * @file + * @brief + * external api for the swscale stuff + */ + +#include "libavutil/avutil.h" + +#define LIBSWSCALE_VERSION_MAJOR 0 +#define LIBSWSCALE_VERSION_MINOR 11 +#define LIBSWSCALE_VERSION_MICRO 0 + +#define LIBSWSCALE_VERSION_INT AV_VERSION_INT(LIBSWSCALE_VERSION_MAJOR, \ + LIBSWSCALE_VERSION_MINOR, \ + LIBSWSCALE_VERSION_MICRO) +#define LIBSWSCALE_VERSION AV_VERSION(LIBSWSCALE_VERSION_MAJOR, \ + LIBSWSCALE_VERSION_MINOR, \ + LIBSWSCALE_VERSION_MICRO) +#define LIBSWSCALE_BUILD LIBSWSCALE_VERSION_INT + +#define LIBSWSCALE_IDENT "SwS" AV_STRINGIFY(LIBSWSCALE_VERSION) + +/** + * Returns the LIBSWSCALE_VERSION_INT constant. + */ +unsigned swscale_version(void); + +/** + * Returns the libswscale build-time configuration. + */ +const char *swscale_configuration(void); + +/** + * Returns the libswscale license. + */ +const char *swscale_license(void); + +/* values for the flags, the stuff on the command line is different */ +#define SWS_FAST_BILINEAR 1 +#define SWS_BILINEAR 2 +#define SWS_BICUBIC 4 +#define SWS_X 8 +#define SWS_POINT 0x10 +#define SWS_AREA 0x20 +#define SWS_BICUBLIN 0x40 +#define SWS_GAUSS 0x80 +#define SWS_SINC 0x100 +#define SWS_LANCZOS 0x200 +#define SWS_SPLINE 0x400 + +#define SWS_SRC_V_CHR_DROP_MASK 0x30000 +#define SWS_SRC_V_CHR_DROP_SHIFT 16 + +#define SWS_PARAM_DEFAULT 123456 + +#define SWS_PRINT_INFO 0x1000 + +//the following 3 flags are not completely implemented +//internal chrominace subsampling info +#define SWS_FULL_CHR_H_INT 0x2000 +//input subsampling info +#define SWS_FULL_CHR_H_INP 0x4000 +#define SWS_DIRECT_BGR 0x8000 +#define SWS_ACCURATE_RND 0x40000 +#define SWS_BITEXACT 0x80000 + +#define SWS_CPU_CAPS_MMX 0x80000000 +#define SWS_CPU_CAPS_MMX2 0x20000000 +#define SWS_CPU_CAPS_3DNOW 0x40000000 +#define SWS_CPU_CAPS_ALTIVEC 0x10000000 +#define SWS_CPU_CAPS_BFIN 0x01000000 + +#define SWS_MAX_REDUCE_CUTOFF 0.002 + +#define SWS_CS_ITU709 1 +#define SWS_CS_FCC 4 +#define SWS_CS_ITU601 5 +#define SWS_CS_ITU624 5 +#define SWS_CS_SMPTE170M 5 +#define SWS_CS_SMPTE240M 7 +#define SWS_CS_DEFAULT 5 + +/** + * Returns a pointer to yuv<->rgb coefficients for the given colorspace + * suitable for sws_setColorspaceDetails(). + * + * @param colorspace One of the SWS_CS_* macros. If invalid, + * SWS_CS_DEFAULT is used. + */ +const int *sws_getCoefficients(int colorspace); + + +// when used for filters they must have an odd number of elements +// coeffs cannot be shared between vectors +typedef struct { + double *coeff; ///< pointer to the list of coefficients + int length; ///< number of coefficients in the vector +} SwsVector; + +// vectors can be shared +typedef struct { + SwsVector *lumH; + SwsVector *lumV; + SwsVector *chrH; + SwsVector *chrV; +} SwsFilter; + +struct SwsContext; + +/** + * Returns a positive value if pix_fmt is a supported input format, 0 + * otherwise. + */ +int sws_isSupportedInput(enum PixelFormat pix_fmt); + +/** + * Returns a positive value if pix_fmt is a supported output format, 0 + * otherwise. + */ +int sws_isSupportedOutput(enum PixelFormat pix_fmt); + +/** + * Frees the swscaler context swsContext. + * If swsContext is NULL, then does nothing. + */ +void sws_freeContext(struct SwsContext *swsContext); + +/** + * Allocates and returns a SwsContext. You need it to perform + * scaling/conversion operations using sws_scale(). + * + * @param srcW the width of the source image + * @param srcH the height of the source image + * @param srcFormat the source image format + * @param dstW the width of the destination image + * @param dstH the height of the destination image + * @param dstFormat the destination image format + * @param flags specify which algorithm and options to use for rescaling + * @return a pointer to an allocated context, or NULL in case of error + */ +struct SwsContext *sws_getContext(int srcW, int srcH, enum PixelFormat srcFormat, + int dstW, int dstH, enum PixelFormat dstFormat, + int flags, SwsFilter *srcFilter, + SwsFilter *dstFilter, const double *param); + +/** + * Scales the image slice in srcSlice and puts the resulting scaled + * slice in the image in dst. A slice is a sequence of consecutive + * rows in an image. + * + * Slices have to be provided in sequential order, either in + * top-bottom or bottom-top order. If slices are provided in + * non-sequential order the behavior of the function is undefined. + * + * @param context the scaling context previously created with + * sws_getContext() + * @param srcSlice the array containing the pointers to the planes of + * the source slice + * @param srcStride the array containing the strides for each plane of + * the source image + * @param srcSliceY the position in the source image of the slice to + * process, that is the number (counted starting from + * zero) in the image of the first row of the slice + * @param srcSliceH the height of the source slice, that is the number + * of rows in the slice + * @param dst the array containing the pointers to the planes of + * the destination image + * @param dstStride the array containing the strides for each plane of + * the destination image + * @return the height of the output slice + */ +int sws_scale(struct SwsContext *context, const uint8_t* const srcSlice[], const int srcStride[], + int srcSliceY, int srcSliceH, uint8_t* const dst[], const int dstStride[]); +#if LIBSWSCALE_VERSION_MAJOR < 1 +/** + * @deprecated Use sws_scale() instead. + */ +int sws_scale_ordered(struct SwsContext *context, const uint8_t* const src[], + int srcStride[], int srcSliceY, int srcSliceH, + uint8_t* dst[], int dstStride[]) attribute_deprecated; +#endif + +/** + * @param inv_table the yuv2rgb coefficients, normally ff_yuv2rgb_coeffs[x] + * @param fullRange if 1 then the luma range is 0..255 if 0 it is 16..235 + * @return -1 if not supported + */ +int sws_setColorspaceDetails(struct SwsContext *c, const int inv_table[4], + int srcRange, const int table[4], int dstRange, + int brightness, int contrast, int saturation); + +/** + * @return -1 if not supported + */ +int sws_getColorspaceDetails(struct SwsContext *c, int **inv_table, + int *srcRange, int **table, int *dstRange, + int *brightness, int *contrast, int *saturation); + +/** + * Allocates and returns an uninitialized vector with length coefficients. + */ +SwsVector *sws_allocVec(int length); + +/** + * Returns a normalized Gaussian curve used to filter stuff + * quality=3 is high quality, lower is lower quality. + */ +SwsVector *sws_getGaussianVec(double variance, double quality); + +/** + * Allocates and returns a vector with length coefficients, all + * with the same value c. + */ +SwsVector *sws_getConstVec(double c, int length); + +/** + * Allocates and returns a vector with just one coefficient, with + * value 1.0. + */ +SwsVector *sws_getIdentityVec(void); + +/** + * Scales all the coefficients of a by the scalar value. + */ +void sws_scaleVec(SwsVector *a, double scalar); + +/** + * Scales all the coefficients of a so that their sum equals height. + */ +void sws_normalizeVec(SwsVector *a, double height); +void sws_convVec(SwsVector *a, SwsVector *b); +void sws_addVec(SwsVector *a, SwsVector *b); +void sws_subVec(SwsVector *a, SwsVector *b); +void sws_shiftVec(SwsVector *a, int shift); + +/** + * Allocates and returns a clone of the vector a, that is a vector + * with the same coefficients as a. + */ +SwsVector *sws_cloneVec(SwsVector *a); + +#if LIBSWSCALE_VERSION_MAJOR < 1 +/** + * @deprecated Use sws_printVec2() instead. + */ +attribute_deprecated void sws_printVec(SwsVector *a); +#endif + +/** + * Prints with av_log() a textual representation of the vector a + * if log_level <= av_log_level. + */ +void sws_printVec2(SwsVector *a, AVClass *log_ctx, int log_level); + +void sws_freeVec(SwsVector *a); + +SwsFilter *sws_getDefaultFilter(float lumaGBlur, float chromaGBlur, + float lumaSharpen, float chromaSharpen, + float chromaHShift, float chromaVShift, + int verbose); +void sws_freeFilter(SwsFilter *filter); + +/** + * Checks if context can be reused, otherwise reallocates a new + * one. + * + * If context is NULL, just calls sws_getContext() to get a new + * context. Otherwise, checks if the parameters are the ones already + * saved in context. If that is the case, returns the current + * context. Otherwise, frees context and gets a new context with + * the new parameters. + * + * Be warned that srcFilter and dstFilter are not checked, they + * are assumed to remain the same. + */ +struct SwsContext *sws_getCachedContext(struct SwsContext *context, + int srcW, int srcH, enum PixelFormat srcFormat, + int dstW, int dstH, enum PixelFormat dstFormat, + int flags, SwsFilter *srcFilter, + SwsFilter *dstFilter, const double *param); + +/** + * Converts an 8bit paletted frame into a frame with a color depth of 32-bits. + * + * The output frame will have the same packed format as the palette. + * + * @param src source frame buffer + * @param dst destination frame buffer + * @param num_pixels number of pixels to convert + * @param palette array with [256] entries, which must match color arrangement (RGB or BGR) of src + */ +void sws_convertPalette8ToPacked32(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette); + +/** + * Converts an 8bit paletted frame into a frame with a color depth of 24 bits. + * + * With the palette format "ABCD", the destination frame ends up with the format "ABC". + * + * @param src source frame buffer + * @param dst destination frame buffer + * @param num_pixels number of pixels to convert + * @param palette array with [256] entries, which must match color arrangement (RGB or BGR) of src + */ +void sws_convertPalette8ToPacked24(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette); + + +#endif /* SWSCALE_SWSCALE_H */ diff --git a/extra_lib/include/jpeg/android/jconfig.h b/extra_lib/include/jpeg/android/jconfig.h deleted file mode 100644 index 15a9817..0000000 --- a/extra_lib/include/jpeg/android/jconfig.h +++ /dev/null @@ -1,156 +0,0 @@ -/* android jconfig.h */ -/* - * jconfig.doc - * - * Copyright (C) 1991-1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file documents the configuration options that are required to - * customize the JPEG software for a particular system. - * - * The actual configuration options for a particular installation are stored - * in jconfig.h. On many machines, jconfig.h can be generated automatically - * or copied from one of the "canned" jconfig files that we supply. But if - * you need to generate a jconfig.h file by hand, this file tells you how. - * - * DO NOT EDIT THIS FILE --- IT WON'T ACCOMPLISH ANYTHING. - * EDIT A COPY NAMED JCONFIG.H. - */ - - -/* - * These symbols indicate the properties of your machine or compiler. - * #define the symbol if yes, #undef it if no. - */ - -/* Does your compiler support function prototypes? - * (If not, you also need to use ansi2knr, see install.doc) - */ -#define HAVE_PROTOTYPES - -/* Does your compiler support the declaration "unsigned char" ? - * How about "unsigned short" ? - */ -#define HAVE_UNSIGNED_CHAR -#define HAVE_UNSIGNED_SHORT - -/* Define "void" as "char" if your compiler doesn't know about type void. - * NOTE: be sure to define void such that "void *" represents the most general - * pointer type, e.g., that returned by malloc(). - */ -/* #define void char */ - -/* Define "const" as empty if your compiler doesn't know the "const" keyword. - */ -/* #define const */ - -/* Define this if an ordinary "char" type is unsigned. - * If you're not sure, leaving it undefined will work at some cost in speed. - * If you defined HAVE_UNSIGNED_CHAR then the speed difference is minimal. - */ -#undef CHAR_IS_UNSIGNED - -/* Define this if your system has an ANSI-conforming file. - */ -#define HAVE_STDDEF_H - -/* Define this if your system has an ANSI-conforming file. - */ -#define HAVE_STDLIB_H - -/* Define this if your system does not have an ANSI/SysV , - * but does have a BSD-style . - */ -#undef NEED_BSD_STRINGS - -/* Define this if your system does not provide typedef size_t in any of the - * ANSI-standard places (stddef.h, stdlib.h, or stdio.h), but places it in - * instead. - */ -#undef NEED_SYS_TYPES_H - -/* For 80x86 machines, you need to define NEED_FAR_POINTERS, - * unless you are using a large-data memory model or 80386 flat-memory mode. - * On less brain-damaged CPUs this symbol must not be defined. - * (Defining this symbol causes large data structures to be referenced through - * "far" pointers and to be allocated with a special version of malloc.) - */ -#undef NEED_FAR_POINTERS - -/* Define this if your linker needs global names to be unique in less - * than the first 15 characters. - */ -#undef NEED_SHORT_EXTERNAL_NAMES - -/* Although a real ANSI C compiler can deal perfectly well with pointers to - * unspecified structures (see "incomplete types" in the spec), a few pre-ANSI - * and pseudo-ANSI compilers get confused. To keep one of these bozos happy, - * define INCOMPLETE_TYPES_BROKEN. This is not recommended unless you - * actually get "missing structure definition" warnings or errors while - * compiling the JPEG code. - */ -#undef INCOMPLETE_TYPES_BROKEN - - -/* - * The following options affect code selection within the JPEG library, - * but they don't need to be visible to applications using the library. - * To minimize application namespace pollution, the symbols won't be - * defined unless JPEG_INTERNALS has been defined. - */ - -#ifdef JPEG_INTERNALS - -/* Define this if your compiler implements ">>" on signed values as a logical - * (unsigned) shift; leave it undefined if ">>" is a signed (arithmetic) shift, - * which is the normal and rational definition. - */ -#undef RIGHT_SHIFT_IS_UNSIGNED - - -#endif /* JPEG_INTERNALS */ - - -/* - * The remaining options do not affect the JPEG library proper, - * but only the sample applications cjpeg/djpeg (see cjpeg.c, djpeg.c). - * Other applications can ignore these. - */ - -#ifdef JPEG_CJPEG_DJPEG - -/* These defines indicate which image (non-JPEG) file formats are allowed. */ - -#define BMP_SUPPORTED /* BMP image file format */ -#define GIF_SUPPORTED /* GIF image file format */ -#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ -#undef RLE_SUPPORTED /* Utah RLE image file format */ -#define TARGA_SUPPORTED /* Targa image file format */ - -/* Define this if you want to name both input and output files on the command - * line, rather than using stdout and optionally stdin. You MUST do this if - * your system can't cope with binary I/O to stdin/stdout. See comments at - * head of cjpeg.c or djpeg.c. - */ -#undef TWO_FILE_COMMANDLINE - -/* Define this if your system needs explicit cleanup of temporary files. - * This is crucial under MS-DOS, where the temporary "files" may be areas - * of extended memory; on most other systems it's not as important. - */ -#undef NEED_SIGNAL_CATCHER - -/* By default, we open image files with fopen(...,"rb") or fopen(...,"wb"). - * This is necessary on systems that distinguish text files from binary files, - * and is harmless on most systems that don't. If you have one of the rare - * systems that complains about the "b" spec, define this symbol. - */ -#undef DONT_USE_B_MODE - -/* Define this if you want percent-done progress reports from cjpeg/djpeg. - */ -#undef PROGRESS_REPORT - - -#endif /* JPEG_CJPEG_DJPEG */ diff --git a/extra_lib/include/jpeg/android/jmorecfg.h b/extra_lib/include/jpeg/android/jmorecfg.h deleted file mode 100644 index 236bbcb..0000000 --- a/extra_lib/include/jpeg/android/jmorecfg.h +++ /dev/null @@ -1,387 +0,0 @@ -/* - * jmorecfg.h - * - * Copyright (C) 1991-1997, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains additional configuration options that customize the - * JPEG software for special applications or support machine-dependent - * optimizations. Most users will not need to touch this file. - */ - -/* - * Define ANDROID_RGB to enable specific optimizations for Android - * JCS_RGBA_8888 support - * JCS_RGB_565 support - * - */ - -#define ANDROID_RGB - -#ifdef ANDROID_RGB -#define PACK_SHORT_565(r,g,b) ((((r)<<8)&0xf800)|(((g)<<3)&0x7E0)|((b)>>3)) -#define PACK_TWO_PIXELS(l,r) ((r<<16) | l) -#define PACK_NEED_ALIGNMENT(ptr) (((int)(ptr))&3) -#define WRITE_TWO_PIXELS(addr, pixels) do { \ - ((INT16*)(addr))[0] = (pixels); \ - ((INT16*)(addr))[1] = (pixels)>>16; \ - } while(0) -#define WRITE_TWO_ALIGNED_PIXELS(addr, pixels) ((*(INT32*)(addr)) = pixels) -#define DITHER_565_R(r, dither) ((r) + ((dither)&0xFF)) -#define DITHER_565_G(g, dither) ((g) + (((dither)&0xFF)>>1)) -#define DITHER_565_B(b, dither) ((b) + ((dither)&0xFF)) -#endif - -/* - * Define BITS_IN_JSAMPLE as either - * 8 for 8-bit sample values (the usual setting) - * 12 for 12-bit sample values - * Only 8 and 12 are legal data precisions for lossy JPEG according to the - * JPEG standard, and the IJG code does not support anything else! - * We do not support run-time selection of data precision, sorry. - */ - -#define BITS_IN_JSAMPLE 8 /* use 8 or 12 */ - - -/* - * Maximum number of components (color channels) allowed in JPEG image. - * To meet the letter of the JPEG spec, set this to 255. However, darn - * few applications need more than 4 channels (maybe 5 for CMYK + alpha - * mask). We recommend 10 as a reasonable compromise; use 4 if you are - * really short on memory. (Each allowed component costs a hundred or so - * bytes of storage, whether actually used in an image or not.) - */ - -#define MAX_COMPONENTS 10 /* maximum number of image components */ - - -/* - * Basic data types. - * You may need to change these if you have a machine with unusual data - * type sizes; for example, "char" not 8 bits, "short" not 16 bits, - * or "long" not 32 bits. We don't care whether "int" is 16 or 32 bits, - * but it had better be at least 16. - */ - -/* Representation of a single sample (pixel element value). - * We frequently allocate large arrays of these, so it's important to keep - * them small. But if you have memory to burn and access to char or short - * arrays is very slow on your hardware, you might want to change these. - */ - -#if BITS_IN_JSAMPLE == 8 -/* JSAMPLE should be the smallest type that will hold the values 0..255. - * You can use a signed char by having GETJSAMPLE mask it with 0xFF. - */ - -#ifdef HAVE_UNSIGNED_CHAR - -typedef unsigned char JSAMPLE; -#define GETJSAMPLE(value) ((int) (value)) - -#else /* not HAVE_UNSIGNED_CHAR */ - -typedef char JSAMPLE; -#ifdef CHAR_IS_UNSIGNED -#define GETJSAMPLE(value) ((int) (value)) -#else -#define GETJSAMPLE(value) ((int) (value) & 0xFF) -#endif /* CHAR_IS_UNSIGNED */ - -#endif /* HAVE_UNSIGNED_CHAR */ - -#define MAXJSAMPLE 255 -#define CENTERJSAMPLE 128 - -#endif /* BITS_IN_JSAMPLE == 8 */ - - -#if BITS_IN_JSAMPLE == 12 -/* JSAMPLE should be the smallest type that will hold the values 0..4095. - * On nearly all machines "short" will do nicely. - */ - -typedef short JSAMPLE; -#define GETJSAMPLE(value) ((int) (value)) - -#define MAXJSAMPLE 4095 -#define CENTERJSAMPLE 2048 - -#endif /* BITS_IN_JSAMPLE == 12 */ - - -/* Representation of a DCT frequency coefficient. - * This should be a signed value of at least 16 bits; "short" is usually OK. - * Again, we allocate large arrays of these, but you can change to int - * if you have memory to burn and "short" is really slow. - */ - -typedef short JCOEF; - - -/* Compressed datastreams are represented as arrays of JOCTET. - * These must be EXACTLY 8 bits wide, at least once they are written to - * external storage. Note that when using the stdio data source/destination - * managers, this is also the data type passed to fread/fwrite. - */ - -#ifdef HAVE_UNSIGNED_CHAR - -typedef unsigned char JOCTET; -#define GETJOCTET(value) (value) - -#else /* not HAVE_UNSIGNED_CHAR */ - -typedef char JOCTET; -#ifdef CHAR_IS_UNSIGNED -#define GETJOCTET(value) (value) -#else -#define GETJOCTET(value) ((value) & 0xFF) -#endif /* CHAR_IS_UNSIGNED */ - -#endif /* HAVE_UNSIGNED_CHAR */ - - -/* These typedefs are used for various table entries and so forth. - * They must be at least as wide as specified; but making them too big - * won't cost a huge amount of memory, so we don't provide special - * extraction code like we did for JSAMPLE. (In other words, these - * typedefs live at a different point on the speed/space tradeoff curve.) - */ - -/* UINT8 must hold at least the values 0..255. */ - -#ifdef HAVE_UNSIGNED_CHAR -typedef unsigned char UINT8; -#else /* not HAVE_UNSIGNED_CHAR */ -#ifdef CHAR_IS_UNSIGNED -typedef char UINT8; -#else /* not CHAR_IS_UNSIGNED */ -typedef short UINT8; -#endif /* CHAR_IS_UNSIGNED */ -#endif /* HAVE_UNSIGNED_CHAR */ - -/* UINT16 must hold at least the values 0..65535. */ - -#ifdef HAVE_UNSIGNED_SHORT -typedef unsigned short UINT16; -#else /* not HAVE_UNSIGNED_SHORT */ -typedef unsigned int UINT16; -#endif /* HAVE_UNSIGNED_SHORT */ - -/* INT16 must hold at least the values -32768..32767. */ - -#ifndef XMD_H /* X11/xmd.h correctly defines INT16 */ -typedef short INT16; -#endif - -/* INT32 must hold at least signed 32-bit values. */ - -#ifndef XMD_H /* X11/xmd.h correctly defines INT32 */ -typedef long INT32; -#endif - -/* Datatype used for image dimensions. The JPEG standard only supports - * images up to 64K*64K due to 16-bit fields in SOF markers. Therefore - * "unsigned int" is sufficient on all machines. However, if you need to - * handle larger images and you don't mind deviating from the spec, you - * can change this datatype. - */ - -typedef unsigned int JDIMENSION; - -#define JPEG_MAX_DIMENSION 65500L /* a tad under 64K to prevent overflows */ - - -/* These macros are used in all function definitions and extern declarations. - * You could modify them if you need to change function linkage conventions; - * in particular, you'll need to do that to make the library a Windows DLL. - * Another application is to make all functions global for use with debuggers - * or code profilers that require it. - */ - -/* a function called through method pointers: */ -#define METHODDEF(type) static type -/* a function used only in its module: */ -#define LOCAL(type) static type -/* a function referenced thru EXTERNs: */ -#define GLOBAL(type) type -/* a reference to a GLOBAL function: */ -#define EXTERN(type) extern type - - -/* This macro is used to declare a "method", that is, a function pointer. - * We want to supply prototype parameters if the compiler can cope. - * Note that the arglist parameter must be parenthesized! - * Again, you can customize this if you need special linkage keywords. - */ - -#ifdef HAVE_PROTOTYPES -#define JMETHOD(type,methodname,arglist) type (*methodname) arglist -#else -#define JMETHOD(type,methodname,arglist) type (*methodname) () -#endif - - -/* Here is the pseudo-keyword for declaring pointers that must be "far" - * on 80x86 machines. Most of the specialized coding for 80x86 is handled - * by just saying "FAR *" where such a pointer is needed. In a few places - * explicit coding is needed; see uses of the NEED_FAR_POINTERS symbol. - */ - -#ifdef NEED_FAR_POINTERS -#define FAR far -#else -#define FAR -#endif - - -/* - * On a few systems, type boolean and/or its values FALSE, TRUE may appear - * in standard header files. Or you may have conflicts with application- - * specific header files that you want to include together with these files. - * Defining HAVE_BOOLEAN before including jpeglib.h should make it work. - */ - -#ifndef HAVE_BOOLEAN -typedef int boolean; -#endif -#ifndef FALSE /* in case these macros already exist */ -#define FALSE 0 /* values of boolean */ -#endif -#ifndef TRUE -#define TRUE 1 -#endif - - -/* - * The remaining options affect code selection within the JPEG library, - * but they don't need to be visible to most applications using the library. - * To minimize application namespace pollution, the symbols won't be - * defined unless JPEG_INTERNALS or JPEG_INTERNAL_OPTIONS has been defined. - */ - -#ifdef JPEG_INTERNALS -#define JPEG_INTERNAL_OPTIONS -#endif - -#ifdef JPEG_INTERNAL_OPTIONS - - -/* - * These defines indicate whether to include various optional functions. - * Undefining some of these symbols will produce a smaller but less capable - * library. Note that you can leave certain source files out of the - * compilation/linking process if you've #undef'd the corresponding symbols. - * (You may HAVE to do that if your compiler doesn't like null source files.) - */ - -/* Arithmetic coding is unsupported for legal reasons. Complaints to IBM. */ - -/* Capability options common to encoder and decoder: */ - -#define DCT_ISLOW_SUPPORTED /* slow but accurate integer algorithm */ -#define DCT_IFAST_SUPPORTED /* faster, less accurate integer method */ -#define DCT_FLOAT_SUPPORTED /* floating-point: accurate, fast on fast HW */ - -/* Encoder capability options: */ - -#undef C_ARITH_CODING_SUPPORTED /* Arithmetic coding back end? */ -#define C_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */ -#define C_PROGRESSIVE_SUPPORTED /* Progressive JPEG? (Requires MULTISCAN)*/ -#define ENTROPY_OPT_SUPPORTED /* Optimization of entropy coding parms? */ -/* Note: if you selected 12-bit data precision, it is dangerous to turn off - * ENTROPY_OPT_SUPPORTED. The standard Huffman tables are only good for 8-bit - * precision, so jchuff.c normally uses entropy optimization to compute - * usable tables for higher precision. If you don't want to do optimization, - * you'll have to supply different default Huffman tables. - * The exact same statements apply for progressive JPEG: the default tables - * don't work for progressive mode. (This may get fixed, however.) - */ -#define INPUT_SMOOTHING_SUPPORTED /* Input image smoothing option? */ - -/* Decoder capability options: */ - -#undef D_ARITH_CODING_SUPPORTED /* Arithmetic coding back end? */ -#define D_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */ -#define D_PROGRESSIVE_SUPPORTED /* Progressive JPEG? (Requires MULTISCAN)*/ -#define SAVE_MARKERS_SUPPORTED /* jpeg_save_markers() needed? */ -#define BLOCK_SMOOTHING_SUPPORTED /* Block smoothing? (Progressive only) */ -#define IDCT_SCALING_SUPPORTED /* Output rescaling via IDCT? */ -#undef UPSAMPLE_SCALING_SUPPORTED /* Output rescaling at upsample stage? */ -#define UPSAMPLE_MERGING_SUPPORTED /* Fast path for sloppy upsampling? */ -#define QUANT_1PASS_SUPPORTED /* 1-pass color quantization? */ -#define QUANT_2PASS_SUPPORTED /* 2-pass color quantization? */ - -/* more capability options later, no doubt */ - - -/* - * Ordering of RGB data in scanlines passed to or from the application. - * If your application wants to deal with data in the order B,G,R, just - * change these macros. You can also deal with formats such as R,G,B,X - * (one extra byte per pixel) by changing RGB_PIXELSIZE. Note that changing - * the offsets will also change the order in which colormap data is organized. - * RESTRICTIONS: - * 1. The sample applications cjpeg,djpeg do NOT support modified RGB formats. - * 2. These macros only affect RGB<=>YCbCr color conversion, so they are not - * useful if you are using JPEG color spaces other than YCbCr or grayscale. - * 3. The color quantizer modules will not behave desirably if RGB_PIXELSIZE - * is not 3 (they don't understand about dummy color components!). So you - * can't use color quantization if you change that value. - */ - -#define RGB_RED 0 /* Offset of Red in an RGB scanline element */ -#define RGB_GREEN 1 /* Offset of Green */ -#define RGB_BLUE 2 /* Offset of Blue */ -#ifdef ANDROID_RGB -#define RGB_ALPHA 3 /* Offset of Alpha */ -#endif -#define RGB_PIXELSIZE 3 /* JSAMPLEs per RGB scanline element */ - -/* Definitions for speed-related optimizations. */ - - -/* If your compiler supports inline functions, define INLINE - * as the inline keyword; otherwise define it as empty. - */ - -#ifndef INLINE -#ifdef __GNUC__ /* for instance, GNU C knows about inline */ -#define INLINE __inline__ -#endif -#ifndef INLINE -#define INLINE /* default is to define it as empty */ -#endif -#endif - - -/* On some machines (notably 68000 series) "int" is 32 bits, but multiplying - * two 16-bit shorts is faster than multiplying two ints. Define MULTIPLIER - * as short on such a machine. MULTIPLIER must be at least 16 bits wide. - */ - -#ifndef MULTIPLIER -#define MULTIPLIER int /* type for fastest integer multiply */ -#endif - - -/* FAST_FLOAT should be either float or double, whichever is done faster - * by your compiler. (Note that this type is only used in the floating point - * DCT routines, so it only matters if you've defined DCT_FLOAT_SUPPORTED.) - * Typically, float is faster in ANSI C compilers, while double is faster in - * pre-ANSI compilers (because they insist on converting to double anyway). - * The code below therefore chooses float if we have ANSI-style prototypes. - */ - -#ifndef FAST_FLOAT -#ifdef HAVE_PROTOTYPES -#define FAST_FLOAT float -#else -#define FAST_FLOAT double -#endif -#endif - -#endif /* JPEG_INTERNAL_OPTIONS */ diff --git a/extra_lib/include/jpeg/android/jpeglib.h b/extra_lib/include/jpeg/android/jpeglib.h deleted file mode 100644 index 0f3a547..0000000 --- a/extra_lib/include/jpeg/android/jpeglib.h +++ /dev/null @@ -1,1100 +0,0 @@ -/* - * jpeglib.h - * - * Copyright (C) 1991-1998, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file defines the application interface for the JPEG library. - * Most applications using the library need only include this file, - * and perhaps jerror.h if they want to know the exact error codes. - */ - -#ifndef JPEGLIB_H -#define JPEGLIB_H - -/* - * First we include the configuration files that record how this - * installation of the JPEG library is set up. jconfig.h can be - * generated automatically for many systems. jmorecfg.h contains - * manual configuration options that most people need not worry about. - */ - -#ifndef JCONFIG_INCLUDED /* in case jinclude.h already did */ -#include "jconfig.h" /* widely used configuration options */ -#endif -#include "jmorecfg.h" /* seldom changed options */ - - -/* Version ID for the JPEG library. - * Might be useful for tests like "#if JPEG_LIB_VERSION >= 60". - */ - -#define JPEG_LIB_VERSION 62 /* Version 6b */ - - -/* Various constants determining the sizes of things. - * All of these are specified by the JPEG standard, so don't change them - * if you want to be compatible. - */ - -#define DCTSIZE 8 /* The basic DCT block is 8x8 samples */ -#define DCTSIZE2 64 /* DCTSIZE squared; # of elements in a block */ -#define NUM_QUANT_TBLS 4 /* Quantization tables are numbered 0..3 */ -#define NUM_HUFF_TBLS 4 /* Huffman tables are numbered 0..3 */ -#define NUM_ARITH_TBLS 16 /* Arith-coding tables are numbered 0..15 */ -#define MAX_COMPS_IN_SCAN 4 /* JPEG limit on # of components in one scan */ -#define MAX_SAMP_FACTOR 4 /* JPEG limit on sampling factors */ -/* Unfortunately, some bozo at Adobe saw no reason to be bound by the standard; - * the PostScript DCT filter can emit files with many more than 10 blocks/MCU. - * If you happen to run across such a file, you can up D_MAX_BLOCKS_IN_MCU - * to handle it. We even let you do this from the jconfig.h file. However, - * we strongly discourage changing C_MAX_BLOCKS_IN_MCU; just because Adobe - * sometimes emits noncompliant files doesn't mean you should too. - */ -#define C_MAX_BLOCKS_IN_MCU 10 /* compressor's limit on blocks per MCU */ -#ifndef D_MAX_BLOCKS_IN_MCU -#define D_MAX_BLOCKS_IN_MCU 10 /* decompressor's limit on blocks per MCU */ -#endif - - -/* Data structures for images (arrays of samples and of DCT coefficients). - * On 80x86 machines, the image arrays are too big for near pointers, - * but the pointer arrays can fit in near memory. - */ - -typedef JSAMPLE FAR *JSAMPROW; /* ptr to one image row of pixel samples. */ -typedef JSAMPROW *JSAMPARRAY; /* ptr to some rows (a 2-D sample array) */ -typedef JSAMPARRAY *JSAMPIMAGE; /* a 3-D sample array: top index is color */ - -typedef JCOEF JBLOCK[DCTSIZE2]; /* one block of coefficients */ -typedef JBLOCK FAR *JBLOCKROW; /* pointer to one row of coefficient blocks */ -typedef JBLOCKROW *JBLOCKARRAY; /* a 2-D array of coefficient blocks */ -typedef JBLOCKARRAY *JBLOCKIMAGE; /* a 3-D array of coefficient blocks */ - -typedef JCOEF FAR *JCOEFPTR; /* useful in a couple of places */ - - -/* Types for JPEG compression parameters and working tables. */ - - -/* DCT coefficient quantization tables. */ - -typedef struct { - /* This array gives the coefficient quantizers in natural array order - * (not the zigzag order in which they are stored in a JPEG DQT marker). - * CAUTION: IJG versions prior to v6a kept this array in zigzag order. - */ - UINT16 quantval[DCTSIZE2]; /* quantization step for each coefficient */ - /* This field is used only during compression. It's initialized FALSE when - * the table is created, and set TRUE when it's been output to the file. - * You could suppress output of a table by setting this to TRUE. - * (See jpeg_suppress_tables for an example.) - */ - boolean sent_table; /* TRUE when table has been output */ -} JQUANT_TBL; - - -/* Huffman coding tables. */ - -typedef struct { - /* These two fields directly represent the contents of a JPEG DHT marker */ - UINT8 bits[17]; /* bits[k] = # of symbols with codes of */ - /* length k bits; bits[0] is unused */ - UINT8 huffval[256]; /* The symbols, in order of incr code length */ - /* This field is used only during compression. It's initialized FALSE when - * the table is created, and set TRUE when it's been output to the file. - * You could suppress output of a table by setting this to TRUE. - * (See jpeg_suppress_tables for an example.) - */ - boolean sent_table; /* TRUE when table has been output */ -} JHUFF_TBL; - - -/* Basic info about one component (color channel). */ - -typedef struct { - /* These values are fixed over the whole image. */ - /* For compression, they must be supplied by parameter setup; */ - /* for decompression, they are read from the SOF marker. */ - int component_id; /* identifier for this component (0..255) */ - int component_index; /* its index in SOF or cinfo->comp_info[] */ - int h_samp_factor; /* horizontal sampling factor (1..4) */ - int v_samp_factor; /* vertical sampling factor (1..4) */ - int quant_tbl_no; /* quantization table selector (0..3) */ - /* These values may vary between scans. */ - /* For compression, they must be supplied by parameter setup; */ - /* for decompression, they are read from the SOS marker. */ - /* The decompressor output side may not use these variables. */ - int dc_tbl_no; /* DC entropy table selector (0..3) */ - int ac_tbl_no; /* AC entropy table selector (0..3) */ - - /* Remaining fields should be treated as private by applications. */ - - /* These values are computed during compression or decompression startup: */ - /* Component's size in DCT blocks. - * Any dummy blocks added to complete an MCU are not counted; therefore - * these values do not depend on whether a scan is interleaved or not. - */ - JDIMENSION width_in_blocks; - JDIMENSION height_in_blocks; - /* Size of a DCT block in samples. Always DCTSIZE for compression. - * For decompression this is the size of the output from one DCT block, - * reflecting any scaling we choose to apply during the IDCT step. - * Values of 1,2,4,8 are likely to be supported. Note that different - * components may receive different IDCT scalings. - */ - int DCT_scaled_size; - /* The downsampled dimensions are the component's actual, unpadded number - * of samples at the main buffer (preprocessing/compression interface), thus - * downsampled_width = ceil(image_width * Hi/Hmax) - * and similarly for height. For decompression, IDCT scaling is included, so - * downsampled_width = ceil(image_width * Hi/Hmax * DCT_scaled_size/DCTSIZE) - */ - JDIMENSION downsampled_width; /* actual width in samples */ - JDIMENSION downsampled_height; /* actual height in samples */ - /* This flag is used only for decompression. In cases where some of the - * components will be ignored (eg grayscale output from YCbCr image), - * we can skip most computations for the unused components. - */ - boolean component_needed; /* do we need the value of this component? */ - - /* These values are computed before starting a scan of the component. */ - /* The decompressor output side may not use these variables. */ - int MCU_width; /* number of blocks per MCU, horizontally */ - int MCU_height; /* number of blocks per MCU, vertically */ - int MCU_blocks; /* MCU_width * MCU_height */ - int MCU_sample_width; /* MCU width in samples, MCU_width*DCT_scaled_size */ - int last_col_width; /* # of non-dummy blocks across in last MCU */ - int last_row_height; /* # of non-dummy blocks down in last MCU */ - - /* Saved quantization table for component; NULL if none yet saved. - * See jdinput.c comments about the need for this information. - * This field is currently used only for decompression. - */ - JQUANT_TBL * quant_table; - - /* Private per-component storage for DCT or IDCT subsystem. */ - void * dct_table; -} jpeg_component_info; - - -/* The script for encoding a multiple-scan file is an array of these: */ - -typedef struct { - int comps_in_scan; /* number of components encoded in this scan */ - int component_index[MAX_COMPS_IN_SCAN]; /* their SOF/comp_info[] indexes */ - int Ss, Se; /* progressive JPEG spectral selection parms */ - int Ah, Al; /* progressive JPEG successive approx. parms */ -} jpeg_scan_info; - -/* The decompressor can save APPn and COM markers in a list of these: */ - -typedef struct jpeg_marker_struct FAR * jpeg_saved_marker_ptr; - -struct jpeg_marker_struct { - jpeg_saved_marker_ptr next; /* next in list, or NULL */ - UINT8 marker; /* marker code: JPEG_COM, or JPEG_APP0+n */ - unsigned int original_length; /* # bytes of data in the file */ - unsigned int data_length; /* # bytes of data saved at data[] */ - JOCTET FAR * data; /* the data contained in the marker */ - /* the marker length word is not counted in data_length or original_length */ -}; - -/* Known color spaces. */ - -typedef enum { - JCS_UNKNOWN, /* error/unspecified */ - JCS_GRAYSCALE, /* monochrome */ - JCS_RGB, /* red/green/blue */ - JCS_YCbCr, /* Y/Cb/Cr (also known as YUV) */ - JCS_CMYK, /* C/M/Y/K */ - JCS_YCCK, /* Y/Cb/Cr/K */ -#ifdef ANDROID_RGB - JCS_RGBA_8888, /* red/green/blue/alpha */ - JCS_RGB_565 /* red/green/blue in 565 format */ -#endif -} J_COLOR_SPACE; - -/* DCT/IDCT algorithm options. */ - -typedef enum { - JDCT_ISLOW, /* slow but accurate integer algorithm */ - JDCT_IFAST, /* faster, less accurate integer method */ - JDCT_FLOAT /* floating-point: accurate, fast on fast HW */ -} J_DCT_METHOD; - -#ifndef JDCT_DEFAULT /* may be overridden in jconfig.h */ -#define JDCT_DEFAULT JDCT_ISLOW -#endif -#ifndef JDCT_FASTEST /* may be overridden in jconfig.h */ -#define JDCT_FASTEST JDCT_IFAST -#endif - -/* Dithering options for decompression. */ - -typedef enum { - JDITHER_NONE, /* no dithering */ - JDITHER_ORDERED, /* simple ordered dither */ - JDITHER_FS /* Floyd-Steinberg error diffusion dither */ -} J_DITHER_MODE; - - -/* Common fields between JPEG compression and decompression master structs. */ - -#define jpeg_common_fields \ - struct jpeg_error_mgr * err; /* Error handler module */\ - struct jpeg_memory_mgr * mem; /* Memory manager module */\ - struct jpeg_progress_mgr * progress; /* Progress monitor, or NULL if none */\ - void * client_data; /* Available for use by application */\ - boolean is_decompressor; /* So common code can tell which is which */\ - int global_state /* For checking call sequence validity */ - -/* Routines that are to be used by both halves of the library are declared - * to receive a pointer to this structure. There are no actual instances of - * jpeg_common_struct, only of jpeg_compress_struct and jpeg_decompress_struct. - */ -struct jpeg_common_struct { - jpeg_common_fields; /* Fields common to both master struct types */ - /* Additional fields follow in an actual jpeg_compress_struct or - * jpeg_decompress_struct. All three structs must agree on these - * initial fields! (This would be a lot cleaner in C++.) - */ -}; - -typedef struct jpeg_common_struct * j_common_ptr; -typedef struct jpeg_compress_struct * j_compress_ptr; -typedef struct jpeg_decompress_struct * j_decompress_ptr; - - -/* Master record for a compression instance */ - -struct jpeg_compress_struct { - jpeg_common_fields; /* Fields shared with jpeg_decompress_struct */ - - /* Destination for compressed data */ - struct jpeg_destination_mgr * dest; - - /* Description of source image --- these fields must be filled in by - * outer application before starting compression. in_color_space must - * be correct before you can even call jpeg_set_defaults(). - */ - - JDIMENSION image_width; /* input image width */ - JDIMENSION image_height; /* input image height */ - int input_components; /* # of color components in input image */ - J_COLOR_SPACE in_color_space; /* colorspace of input image */ - - double input_gamma; /* image gamma of input image */ - - /* Compression parameters --- these fields must be set before calling - * jpeg_start_compress(). We recommend calling jpeg_set_defaults() to - * initialize everything to reasonable defaults, then changing anything - * the application specifically wants to change. That way you won't get - * burnt when new parameters are added. Also note that there are several - * helper routines to simplify changing parameters. - */ - - int data_precision; /* bits of precision in image data */ - - int num_components; /* # of color components in JPEG image */ - J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */ - - jpeg_component_info * comp_info; - /* comp_info[i] describes component that appears i'th in SOF */ - - JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS]; - /* ptrs to coefficient quantization tables, or NULL if not defined */ - - JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS]; - JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS]; - /* ptrs to Huffman coding tables, or NULL if not defined */ - - UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */ - UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */ - UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */ - - int num_scans; /* # of entries in scan_info array */ - const jpeg_scan_info * scan_info; /* script for multi-scan file, or NULL */ - /* The default value of scan_info is NULL, which causes a single-scan - * sequential JPEG file to be emitted. To create a multi-scan file, - * set num_scans and scan_info to point to an array of scan definitions. - */ - - boolean raw_data_in; /* TRUE=caller supplies downsampled data */ - boolean arith_code; /* TRUE=arithmetic coding, FALSE=Huffman */ - boolean optimize_coding; /* TRUE=optimize entropy encoding parms */ - boolean CCIR601_sampling; /* TRUE=first samples are cosited */ - int smoothing_factor; /* 1..100, or 0 for no input smoothing */ - J_DCT_METHOD dct_method; /* DCT algorithm selector */ - - /* The restart interval can be specified in absolute MCUs by setting - * restart_interval, or in MCU rows by setting restart_in_rows - * (in which case the correct restart_interval will be figured - * for each scan). - */ - unsigned int restart_interval; /* MCUs per restart, or 0 for no restart */ - int restart_in_rows; /* if > 0, MCU rows per restart interval */ - - /* Parameters controlling emission of special markers. */ - - boolean write_JFIF_header; /* should a JFIF marker be written? */ - UINT8 JFIF_major_version; /* What to write for the JFIF version number */ - UINT8 JFIF_minor_version; - /* These three values are not used by the JPEG code, merely copied */ - /* into the JFIF APP0 marker. density_unit can be 0 for unknown, */ - /* 1 for dots/inch, or 2 for dots/cm. Note that the pixel aspect */ - /* ratio is defined by X_density/Y_density even when density_unit=0. */ - UINT8 density_unit; /* JFIF code for pixel size units */ - UINT16 X_density; /* Horizontal pixel density */ - UINT16 Y_density; /* Vertical pixel density */ - boolean write_Adobe_marker; /* should an Adobe marker be written? */ - - /* State variable: index of next scanline to be written to - * jpeg_write_scanlines(). Application may use this to control its - * processing loop, e.g., "while (next_scanline < image_height)". - */ - - JDIMENSION next_scanline; /* 0 .. image_height-1 */ - - /* Remaining fields are known throughout compressor, but generally - * should not be touched by a surrounding application. - */ - - /* - * These fields are computed during compression startup - */ - boolean progressive_mode; /* TRUE if scan script uses progressive mode */ - int max_h_samp_factor; /* largest h_samp_factor */ - int max_v_samp_factor; /* largest v_samp_factor */ - - JDIMENSION total_iMCU_rows; /* # of iMCU rows to be input to coef ctlr */ - /* The coefficient controller receives data in units of MCU rows as defined - * for fully interleaved scans (whether the JPEG file is interleaved or not). - * There are v_samp_factor * DCTSIZE sample rows of each component in an - * "iMCU" (interleaved MCU) row. - */ - - /* - * These fields are valid during any one scan. - * They describe the components and MCUs actually appearing in the scan. - */ - int comps_in_scan; /* # of JPEG components in this scan */ - jpeg_component_info * cur_comp_info[MAX_COMPS_IN_SCAN]; - /* *cur_comp_info[i] describes component that appears i'th in SOS */ - - JDIMENSION MCUs_per_row; /* # of MCUs across the image */ - JDIMENSION MCU_rows_in_scan; /* # of MCU rows in the image */ - - int blocks_in_MCU; /* # of DCT blocks per MCU */ - int MCU_membership[C_MAX_BLOCKS_IN_MCU]; - /* MCU_membership[i] is index in cur_comp_info of component owning */ - /* i'th block in an MCU */ - - int Ss, Se, Ah, Al; /* progressive JPEG parameters for scan */ - - /* - * Links to compression subobjects (methods and private variables of modules) - */ - struct jpeg_comp_master * master; - struct jpeg_c_main_controller * main; - struct jpeg_c_prep_controller * prep; - struct jpeg_c_coef_controller * coef; - struct jpeg_marker_writer * marker; - struct jpeg_color_converter * cconvert; - struct jpeg_downsampler * downsample; - struct jpeg_forward_dct * fdct; - struct jpeg_entropy_encoder * entropy; - jpeg_scan_info * script_space; /* workspace for jpeg_simple_progression */ - int script_space_size; -}; - - -/* Master record for a decompression instance */ - -struct jpeg_decompress_struct { - jpeg_common_fields; /* Fields shared with jpeg_compress_struct */ - - /* Source of compressed data */ - struct jpeg_source_mgr * src; - - /* Basic description of image --- filled in by jpeg_read_header(). */ - /* Application may inspect these values to decide how to process image. */ - - JDIMENSION image_width; /* nominal image width (from SOF marker) */ - JDIMENSION image_height; /* nominal image height */ - int num_components; /* # of color components in JPEG image */ - J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */ - - /* Decompression processing parameters --- these fields must be set before - * calling jpeg_start_decompress(). Note that jpeg_read_header() initializes - * them to default values. - */ - - J_COLOR_SPACE out_color_space; /* colorspace for output */ - - unsigned int scale_num, scale_denom; /* fraction by which to scale image */ - - double output_gamma; /* image gamma wanted in output */ - - boolean buffered_image; /* TRUE=multiple output passes */ - boolean raw_data_out; /* TRUE=downsampled data wanted */ - - J_DCT_METHOD dct_method; /* IDCT algorithm selector */ - boolean do_fancy_upsampling; /* TRUE=apply fancy upsampling */ - boolean do_block_smoothing; /* TRUE=apply interblock smoothing */ - - boolean quantize_colors; /* TRUE=colormapped output wanted */ - /* the following are ignored if not quantize_colors: */ - J_DITHER_MODE dither_mode; /* type of color dithering to use */ - boolean two_pass_quantize; /* TRUE=use two-pass color quantization */ - int desired_number_of_colors; /* max # colors to use in created colormap */ - /* these are significant only in buffered-image mode: */ - boolean enable_1pass_quant; /* enable future use of 1-pass quantizer */ - boolean enable_external_quant;/* enable future use of external colormap */ - boolean enable_2pass_quant; /* enable future use of 2-pass quantizer */ - - /* Description of actual output image that will be returned to application. - * These fields are computed by jpeg_start_decompress(). - * You can also use jpeg_calc_output_dimensions() to determine these values - * in advance of calling jpeg_start_decompress(). - */ - - JDIMENSION output_width; /* scaled image width */ - JDIMENSION output_height; /* scaled image height */ - int out_color_components; /* # of color components in out_color_space */ - int output_components; /* # of color components returned */ - /* output_components is 1 (a colormap index) when quantizing colors; - * otherwise it equals out_color_components. - */ - int rec_outbuf_height; /* min recommended height of scanline buffer */ - /* If the buffer passed to jpeg_read_scanlines() is less than this many rows - * high, space and time will be wasted due to unnecessary data copying. - * Usually rec_outbuf_height will be 1 or 2, at most 4. - */ - - /* When quantizing colors, the output colormap is described by these fields. - * The application can supply a colormap by setting colormap non-NULL before - * calling jpeg_start_decompress; otherwise a colormap is created during - * jpeg_start_decompress or jpeg_start_output. - * The map has out_color_components rows and actual_number_of_colors columns. - */ - int actual_number_of_colors; /* number of entries in use */ - JSAMPARRAY colormap; /* The color map as a 2-D pixel array */ - - /* State variables: these variables indicate the progress of decompression. - * The application may examine these but must not modify them. - */ - - /* Row index of next scanline to be read from jpeg_read_scanlines(). - * Application may use this to control its processing loop, e.g., - * "while (output_scanline < output_height)". - */ - JDIMENSION output_scanline; /* 0 .. output_height-1 */ - - /* Current input scan number and number of iMCU rows completed in scan. - * These indicate the progress of the decompressor input side. - */ - int input_scan_number; /* Number of SOS markers seen so far */ - JDIMENSION input_iMCU_row; /* Number of iMCU rows completed */ - - /* The "output scan number" is the notional scan being displayed by the - * output side. The decompressor will not allow output scan/row number - * to get ahead of input scan/row, but it can fall arbitrarily far behind. - */ - int output_scan_number; /* Nominal scan number being displayed */ - JDIMENSION output_iMCU_row; /* Number of iMCU rows read */ - - /* Current progression status. coef_bits[c][i] indicates the precision - * with which component c's DCT coefficient i (in zigzag order) is known. - * It is -1 when no data has yet been received, otherwise it is the point - * transform (shift) value for the most recent scan of the coefficient - * (thus, 0 at completion of the progression). - * This pointer is NULL when reading a non-progressive file. - */ - int (*coef_bits)[DCTSIZE2]; /* -1 or current Al value for each coef */ - - /* Internal JPEG parameters --- the application usually need not look at - * these fields. Note that the decompressor output side may not use - * any parameters that can change between scans. - */ - - /* Quantization and Huffman tables are carried forward across input - * datastreams when processing abbreviated JPEG datastreams. - */ - - JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS]; - /* ptrs to coefficient quantization tables, or NULL if not defined */ - - JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS]; - JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS]; - /* ptrs to Huffman coding tables, or NULL if not defined */ - - /* These parameters are never carried across datastreams, since they - * are given in SOF/SOS markers or defined to be reset by SOI. - */ - - int data_precision; /* bits of precision in image data */ - - jpeg_component_info * comp_info; - /* comp_info[i] describes component that appears i'th in SOF */ - - boolean progressive_mode; /* TRUE if SOFn specifies progressive mode */ - boolean arith_code; /* TRUE=arithmetic coding, FALSE=Huffman */ - - UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */ - UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */ - UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */ - - unsigned int restart_interval; /* MCUs per restart interval, or 0 for no restart */ - - /* These fields record data obtained from optional markers recognized by - * the JPEG library. - */ - boolean saw_JFIF_marker; /* TRUE iff a JFIF APP0 marker was found */ - /* Data copied from JFIF marker; only valid if saw_JFIF_marker is TRUE: */ - UINT8 JFIF_major_version; /* JFIF version number */ - UINT8 JFIF_minor_version; - UINT8 density_unit; /* JFIF code for pixel size units */ - UINT16 X_density; /* Horizontal pixel density */ - UINT16 Y_density; /* Vertical pixel density */ - boolean saw_Adobe_marker; /* TRUE iff an Adobe APP14 marker was found */ - UINT8 Adobe_transform; /* Color transform code from Adobe marker */ - - boolean CCIR601_sampling; /* TRUE=first samples are cosited */ - - /* Aside from the specific data retained from APPn markers known to the - * library, the uninterpreted contents of any or all APPn and COM markers - * can be saved in a list for examination by the application. - */ - jpeg_saved_marker_ptr marker_list; /* Head of list of saved markers */ - - /* Remaining fields are known throughout decompressor, but generally - * should not be touched by a surrounding application. - */ - - /* - * These fields are computed during decompression startup - */ - int max_h_samp_factor; /* largest h_samp_factor */ - int max_v_samp_factor; /* largest v_samp_factor */ - - int min_DCT_scaled_size; /* smallest DCT_scaled_size of any component */ - - JDIMENSION total_iMCU_rows; /* # of iMCU rows in image */ - /* The coefficient controller's input and output progress is measured in - * units of "iMCU" (interleaved MCU) rows. These are the same as MCU rows - * in fully interleaved JPEG scans, but are used whether the scan is - * interleaved or not. We define an iMCU row as v_samp_factor DCT block - * rows of each component. Therefore, the IDCT output contains - * v_samp_factor*DCT_scaled_size sample rows of a component per iMCU row. - */ - - JSAMPLE * sample_range_limit; /* table for fast range-limiting */ - - /* - * These fields are valid during any one scan. - * They describe the components and MCUs actually appearing in the scan. - * Note that the decompressor output side must not use these fields. - */ - int comps_in_scan; /* # of JPEG components in this scan */ - jpeg_component_info * cur_comp_info[MAX_COMPS_IN_SCAN]; - /* *cur_comp_info[i] describes component that appears i'th in SOS */ - - JDIMENSION MCUs_per_row; /* # of MCUs across the image */ - JDIMENSION MCU_rows_in_scan; /* # of MCU rows in the image */ - - int blocks_in_MCU; /* # of DCT blocks per MCU */ - int MCU_membership[D_MAX_BLOCKS_IN_MCU]; - /* MCU_membership[i] is index in cur_comp_info of component owning */ - /* i'th block in an MCU */ - - int Ss, Se, Ah, Al; /* progressive JPEG parameters for scan */ - - /* This field is shared between entropy decoder and marker parser. - * It is either zero or the code of a JPEG marker that has been - * read from the data source, but has not yet been processed. - */ - int unread_marker; - - /* - * Links to decompression subobjects (methods, private variables of modules) - */ - struct jpeg_decomp_master * master; - struct jpeg_d_main_controller * main; - struct jpeg_d_coef_controller * coef; - struct jpeg_d_post_controller * post; - struct jpeg_input_controller * inputctl; - struct jpeg_marker_reader * marker; - struct jpeg_entropy_decoder * entropy; - struct jpeg_inverse_dct * idct; - struct jpeg_upsampler * upsample; - struct jpeg_color_deconverter * cconvert; - struct jpeg_color_quantizer * cquantize; -}; - - -/* "Object" declarations for JPEG modules that may be supplied or called - * directly by the surrounding application. - * As with all objects in the JPEG library, these structs only define the - * publicly visible methods and state variables of a module. Additional - * private fields may exist after the public ones. - */ - - -/* Error handler object */ - -struct jpeg_error_mgr { - /* Error exit handler: does not return to caller */ - JMETHOD(void, error_exit, (j_common_ptr cinfo)); - /* Conditionally emit a trace or warning message */ - JMETHOD(void, emit_message, (j_common_ptr cinfo, int msg_level)); - /* Routine that actually outputs a trace or error message */ - JMETHOD(void, output_message, (j_common_ptr cinfo)); - /* Format a message string for the most recent JPEG error or message */ - JMETHOD(void, format_message, (j_common_ptr cinfo, char * buffer)); -#define JMSG_LENGTH_MAX 200 /* recommended size of format_message buffer */ - /* Reset error state variables at start of a new image */ - JMETHOD(void, reset_error_mgr, (j_common_ptr cinfo)); - - /* The message ID code and any parameters are saved here. - * A message can have one string parameter or up to 8 int parameters. - */ - int msg_code; -#define JMSG_STR_PARM_MAX 80 - union { - int i[8]; - char s[JMSG_STR_PARM_MAX]; - } msg_parm; - - /* Standard state variables for error facility */ - - int trace_level; /* max msg_level that will be displayed */ - - /* For recoverable corrupt-data errors, we emit a warning message, - * but keep going unless emit_message chooses to abort. emit_message - * should count warnings in num_warnings. The surrounding application - * can check for bad data by seeing if num_warnings is nonzero at the - * end of processing. - */ - long num_warnings; /* number of corrupt-data warnings */ - - /* These fields point to the table(s) of error message strings. - * An application can change the table pointer to switch to a different - * message list (typically, to change the language in which errors are - * reported). Some applications may wish to add additional error codes - * that will be handled by the JPEG library error mechanism; the second - * table pointer is used for this purpose. - * - * First table includes all errors generated by JPEG library itself. - * Error code 0 is reserved for a "no such error string" message. - */ - const char * const * jpeg_message_table; /* Library errors */ - int last_jpeg_message; /* Table contains strings 0..last_jpeg_message */ - /* Second table can be added by application (see cjpeg/djpeg for example). - * It contains strings numbered first_addon_message..last_addon_message. - */ - const char * const * addon_message_table; /* Non-library errors */ - int first_addon_message; /* code for first string in addon table */ - int last_addon_message; /* code for last string in addon table */ -}; - - -/* Progress monitor object */ - -struct jpeg_progress_mgr { - JMETHOD(void, progress_monitor, (j_common_ptr cinfo)); - - long pass_counter; /* work units completed in this pass */ - long pass_limit; /* total number of work units in this pass */ - int completed_passes; /* passes completed so far */ - int total_passes; /* total number of passes expected */ -}; - - -/* Data destination object for compression */ - -struct jpeg_destination_mgr { - JOCTET * next_output_byte; /* => next byte to write in buffer */ - size_t free_in_buffer; /* # of byte spaces remaining in buffer */ - - JMETHOD(void, init_destination, (j_compress_ptr cinfo)); - JMETHOD(boolean, empty_output_buffer, (j_compress_ptr cinfo)); - JMETHOD(void, term_destination, (j_compress_ptr cinfo)); -}; - - -/* Data source object for decompression */ - -struct jpeg_source_mgr { - const JOCTET * next_input_byte; /* => next byte to read from buffer */ - size_t bytes_in_buffer; /* # of bytes remaining in buffer */ - - JMETHOD(void, init_source, (j_decompress_ptr cinfo)); - JMETHOD(boolean, fill_input_buffer, (j_decompress_ptr cinfo)); - JMETHOD(void, skip_input_data, (j_decompress_ptr cinfo, long num_bytes)); - JMETHOD(boolean, resync_to_restart, (j_decompress_ptr cinfo, int desired)); - JMETHOD(void, term_source, (j_decompress_ptr cinfo)); -}; - - -/* Memory manager object. - * Allocates "small" objects (a few K total), "large" objects (tens of K), - * and "really big" objects (virtual arrays with backing store if needed). - * The memory manager does not allow individual objects to be freed; rather, - * each created object is assigned to a pool, and whole pools can be freed - * at once. This is faster and more convenient than remembering exactly what - * to free, especially where malloc()/free() are not too speedy. - * NB: alloc routines never return NULL. They exit to error_exit if not - * successful. - */ - -#define JPOOL_PERMANENT 0 /* lasts until master record is destroyed */ -#define JPOOL_IMAGE 1 /* lasts until done with image/datastream */ -#define JPOOL_NUMPOOLS 2 - -typedef struct jvirt_sarray_control * jvirt_sarray_ptr; -typedef struct jvirt_barray_control * jvirt_barray_ptr; - - -struct jpeg_memory_mgr { - /* Method pointers */ - JMETHOD(void *, alloc_small, (j_common_ptr cinfo, int pool_id, - size_t sizeofobject)); - JMETHOD(void FAR *, alloc_large, (j_common_ptr cinfo, int pool_id, - size_t sizeofobject)); - JMETHOD(JSAMPARRAY, alloc_sarray, (j_common_ptr cinfo, int pool_id, - JDIMENSION samplesperrow, - JDIMENSION numrows)); - JMETHOD(JBLOCKARRAY, alloc_barray, (j_common_ptr cinfo, int pool_id, - JDIMENSION blocksperrow, - JDIMENSION numrows)); - JMETHOD(jvirt_sarray_ptr, request_virt_sarray, (j_common_ptr cinfo, - int pool_id, - boolean pre_zero, - JDIMENSION samplesperrow, - JDIMENSION numrows, - JDIMENSION maxaccess)); - JMETHOD(jvirt_barray_ptr, request_virt_barray, (j_common_ptr cinfo, - int pool_id, - boolean pre_zero, - JDIMENSION blocksperrow, - JDIMENSION numrows, - JDIMENSION maxaccess)); - JMETHOD(void, realize_virt_arrays, (j_common_ptr cinfo)); - JMETHOD(JSAMPARRAY, access_virt_sarray, (j_common_ptr cinfo, - jvirt_sarray_ptr ptr, - JDIMENSION start_row, - JDIMENSION num_rows, - boolean writable)); - JMETHOD(JBLOCKARRAY, access_virt_barray, (j_common_ptr cinfo, - jvirt_barray_ptr ptr, - JDIMENSION start_row, - JDIMENSION num_rows, - boolean writable)); - JMETHOD(void, free_pool, (j_common_ptr cinfo, int pool_id)); - JMETHOD(void, self_destruct, (j_common_ptr cinfo)); - - /* Limit on memory allocation for this JPEG object. (Note that this is - * merely advisory, not a guaranteed maximum; it only affects the space - * used for virtual-array buffers.) May be changed by outer application - * after creating the JPEG object. - */ - long max_memory_to_use; - - /* Maximum allocation request accepted by alloc_large. */ - long max_alloc_chunk; -}; - - -/* Routine signature for application-supplied marker processing methods. - * Need not pass marker code since it is stored in cinfo->unread_marker. - */ -typedef JMETHOD(boolean, jpeg_marker_parser_method, (j_decompress_ptr cinfo)); - - -/* Declarations for routines called by application. - * The JPP macro hides prototype parameters from compilers that can't cope. - * Note JPP requires double parentheses. - */ - -#ifdef HAVE_PROTOTYPES -#define JPP(arglist) arglist -#else -#define JPP(arglist) () -#endif - - -/* Short forms of external names for systems with brain-damaged linkers. - * We shorten external names to be unique in the first six letters, which - * is good enough for all known systems. - * (If your compiler itself needs names to be unique in less than 15 - * characters, you are out of luck. Get a better compiler.) - */ - -#ifdef NEED_SHORT_EXTERNAL_NAMES -#define jpeg_std_error jStdError -#define jpeg_CreateCompress jCreaCompress -#define jpeg_CreateDecompress jCreaDecompress -#define jpeg_destroy_compress jDestCompress -#define jpeg_destroy_decompress jDestDecompress -#define jpeg_stdio_dest jStdDest -#define jpeg_stdio_src jStdSrc -#define jpeg_set_defaults jSetDefaults -#define jpeg_set_colorspace jSetColorspace -#define jpeg_default_colorspace jDefColorspace -#define jpeg_set_quality jSetQuality -#define jpeg_set_linear_quality jSetLQuality -#define jpeg_add_quant_table jAddQuantTable -#define jpeg_quality_scaling jQualityScaling -#define jpeg_simple_progression jSimProgress -#define jpeg_suppress_tables jSuppressTables -#define jpeg_alloc_quant_table jAlcQTable -#define jpeg_alloc_huff_table jAlcHTable -#define jpeg_start_compress jStrtCompress -#define jpeg_write_scanlines jWrtScanlines -#define jpeg_finish_compress jFinCompress -#define jpeg_write_raw_data jWrtRawData -#define jpeg_write_marker jWrtMarker -#define jpeg_write_m_header jWrtMHeader -#define jpeg_write_m_byte jWrtMByte -#define jpeg_write_tables jWrtTables -#define jpeg_read_header jReadHeader -#define jpeg_start_decompress jStrtDecompress -#define jpeg_read_scanlines jReadScanlines -#define jpeg_finish_decompress jFinDecompress -#define jpeg_read_raw_data jReadRawData -#define jpeg_has_multiple_scans jHasMultScn -#define jpeg_start_output jStrtOutput -#define jpeg_finish_output jFinOutput -#define jpeg_input_complete jInComplete -#define jpeg_new_colormap jNewCMap -#define jpeg_consume_input jConsumeInput -#define jpeg_calc_output_dimensions jCalcDimensions -#define jpeg_save_markers jSaveMarkers -#define jpeg_set_marker_processor jSetMarker -#define jpeg_read_coefficients jReadCoefs -#define jpeg_write_coefficients jWrtCoefs -#define jpeg_copy_critical_parameters jCopyCrit -#define jpeg_abort_compress jAbrtCompress -#define jpeg_abort_decompress jAbrtDecompress -#define jpeg_abort jAbort -#define jpeg_destroy jDestroy -#define jpeg_resync_to_restart jResyncRestart -#endif /* NEED_SHORT_EXTERNAL_NAMES */ - - -/* Default error-management setup */ -EXTERN(struct jpeg_error_mgr *) jpeg_std_error - JPP((struct jpeg_error_mgr * err)); - -/* Initialization of JPEG compression objects. - * jpeg_create_compress() and jpeg_create_decompress() are the exported - * names that applications should call. These expand to calls on - * jpeg_CreateCompress and jpeg_CreateDecompress with additional information - * passed for version mismatch checking. - * NB: you must set up the error-manager BEFORE calling jpeg_create_xxx. - */ -#define jpeg_create_compress(cinfo) \ - jpeg_CreateCompress((cinfo), JPEG_LIB_VERSION, \ - (size_t) sizeof(struct jpeg_compress_struct)) -#define jpeg_create_decompress(cinfo) \ - jpeg_CreateDecompress((cinfo), JPEG_LIB_VERSION, \ - (size_t) sizeof(struct jpeg_decompress_struct)) -EXTERN(void) jpeg_CreateCompress JPP((j_compress_ptr cinfo, - int version, size_t structsize)); -EXTERN(void) jpeg_CreateDecompress JPP((j_decompress_ptr cinfo, - int version, size_t structsize)); -/* Destruction of JPEG compression objects */ -EXTERN(void) jpeg_destroy_compress JPP((j_compress_ptr cinfo)); -EXTERN(void) jpeg_destroy_decompress JPP((j_decompress_ptr cinfo)); - -/* Standard data source and destination managers: stdio streams. */ -/* Caller is responsible for opening the file before and closing after. */ -EXTERN(void) jpeg_stdio_dest JPP((j_compress_ptr cinfo, FILE * outfile)); -EXTERN(void) jpeg_stdio_src JPP((j_decompress_ptr cinfo, FILE * infile)); - -/* Default parameter setup for compression */ -EXTERN(void) jpeg_set_defaults JPP((j_compress_ptr cinfo)); -/* Compression parameter setup aids */ -EXTERN(void) jpeg_set_colorspace JPP((j_compress_ptr cinfo, - J_COLOR_SPACE colorspace)); -EXTERN(void) jpeg_default_colorspace JPP((j_compress_ptr cinfo)); -EXTERN(void) jpeg_set_quality JPP((j_compress_ptr cinfo, int quality, - boolean force_baseline)); -EXTERN(void) jpeg_set_linear_quality JPP((j_compress_ptr cinfo, - int scale_factor, - boolean force_baseline)); -EXTERN(void) jpeg_add_quant_table JPP((j_compress_ptr cinfo, int which_tbl, - const unsigned int *basic_table, - int scale_factor, - boolean force_baseline)); -EXTERN(int) jpeg_quality_scaling JPP((int quality)); -EXTERN(void) jpeg_simple_progression JPP((j_compress_ptr cinfo)); -EXTERN(void) jpeg_suppress_tables JPP((j_compress_ptr cinfo, - boolean suppress)); -EXTERN(JQUANT_TBL *) jpeg_alloc_quant_table JPP((j_common_ptr cinfo)); -EXTERN(JHUFF_TBL *) jpeg_alloc_huff_table JPP((j_common_ptr cinfo)); - -/* Main entry points for compression */ -EXTERN(void) jpeg_start_compress JPP((j_compress_ptr cinfo, - boolean write_all_tables)); -EXTERN(JDIMENSION) jpeg_write_scanlines JPP((j_compress_ptr cinfo, - JSAMPARRAY scanlines, - JDIMENSION num_lines)); -EXTERN(void) jpeg_finish_compress JPP((j_compress_ptr cinfo)); - -/* Replaces jpeg_write_scanlines when writing raw downsampled data. */ -EXTERN(JDIMENSION) jpeg_write_raw_data JPP((j_compress_ptr cinfo, - JSAMPIMAGE data, - JDIMENSION num_lines)); - -/* Write a special marker. See libjpeg.doc concerning safe usage. */ -EXTERN(void) jpeg_write_marker - JPP((j_compress_ptr cinfo, int marker, - const JOCTET * dataptr, unsigned int datalen)); -/* Same, but piecemeal. */ -EXTERN(void) jpeg_write_m_header - JPP((j_compress_ptr cinfo, int marker, unsigned int datalen)); -EXTERN(void) jpeg_write_m_byte - JPP((j_compress_ptr cinfo, int val)); - -/* Alternate compression function: just write an abbreviated table file */ -EXTERN(void) jpeg_write_tables JPP((j_compress_ptr cinfo)); - -/* Decompression startup: read start of JPEG datastream to see what's there */ -EXTERN(int) jpeg_read_header JPP((j_decompress_ptr cinfo, - boolean require_image)); -/* Return value is one of: */ -#define JPEG_SUSPENDED 0 /* Suspended due to lack of input data */ -#define JPEG_HEADER_OK 1 /* Found valid image datastream */ -#define JPEG_HEADER_TABLES_ONLY 2 /* Found valid table-specs-only datastream */ -/* If you pass require_image = TRUE (normal case), you need not check for - * a TABLES_ONLY return code; an abbreviated file will cause an error exit. - * JPEG_SUSPENDED is only possible if you use a data source module that can - * give a suspension return (the stdio source module doesn't). - */ - -/* Main entry points for decompression */ -EXTERN(boolean) jpeg_start_decompress JPP((j_decompress_ptr cinfo)); -EXTERN(JDIMENSION) jpeg_read_scanlines JPP((j_decompress_ptr cinfo, - JSAMPARRAY scanlines, - JDIMENSION max_lines)); -EXTERN(boolean) jpeg_finish_decompress JPP((j_decompress_ptr cinfo)); - -/* Replaces jpeg_read_scanlines when reading raw downsampled data. */ -EXTERN(JDIMENSION) jpeg_read_raw_data JPP((j_decompress_ptr cinfo, - JSAMPIMAGE data, - JDIMENSION max_lines)); - -/* Additional entry points for buffered-image mode. */ -EXTERN(boolean) jpeg_has_multiple_scans JPP((j_decompress_ptr cinfo)); -EXTERN(boolean) jpeg_start_output JPP((j_decompress_ptr cinfo, - int scan_number)); -EXTERN(boolean) jpeg_finish_output JPP((j_decompress_ptr cinfo)); -EXTERN(boolean) jpeg_input_complete JPP((j_decompress_ptr cinfo)); -EXTERN(void) jpeg_new_colormap JPP((j_decompress_ptr cinfo)); -EXTERN(int) jpeg_consume_input JPP((j_decompress_ptr cinfo)); -/* Return value is one of: */ -/* #define JPEG_SUSPENDED 0 Suspended due to lack of input data */ -#define JPEG_REACHED_SOS 1 /* Reached start of new scan */ -#define JPEG_REACHED_EOI 2 /* Reached end of image */ -#define JPEG_ROW_COMPLETED 3 /* Completed one iMCU row */ -#define JPEG_SCAN_COMPLETED 4 /* Completed last iMCU row of a scan */ - -/* Precalculate output dimensions for current decompression parameters. */ -EXTERN(void) jpeg_calc_output_dimensions JPP((j_decompress_ptr cinfo)); - -/* Control saving of COM and APPn markers into marker_list. */ -EXTERN(void) jpeg_save_markers - JPP((j_decompress_ptr cinfo, int marker_code, - unsigned int length_limit)); - -/* Install a special processing method for COM or APPn markers. */ -EXTERN(void) jpeg_set_marker_processor - JPP((j_decompress_ptr cinfo, int marker_code, - jpeg_marker_parser_method routine)); - -/* Read or write raw DCT coefficients --- useful for lossless transcoding. */ -EXTERN(jvirt_barray_ptr *) jpeg_read_coefficients JPP((j_decompress_ptr cinfo)); -EXTERN(void) jpeg_write_coefficients JPP((j_compress_ptr cinfo, - jvirt_barray_ptr * coef_arrays)); -EXTERN(void) jpeg_copy_critical_parameters JPP((j_decompress_ptr srcinfo, - j_compress_ptr dstinfo)); - -/* If you choose to abort compression or decompression before completing - * jpeg_finish_(de)compress, then you need to clean up to release memory, - * temporary files, etc. You can just call jpeg_destroy_(de)compress - * if you're done with the JPEG object, but if you want to clean it up and - * reuse it, call this: - */ -EXTERN(void) jpeg_abort_compress JPP((j_compress_ptr cinfo)); -EXTERN(void) jpeg_abort_decompress JPP((j_decompress_ptr cinfo)); - -/* Generic versions of jpeg_abort and jpeg_destroy that work on either - * flavor of JPEG object. These may be more convenient in some places. - */ -EXTERN(void) jpeg_abort JPP((j_common_ptr cinfo)); -EXTERN(void) jpeg_destroy JPP((j_common_ptr cinfo)); - -/* Default restart-marker-resync procedure for use by data source modules */ -EXTERN(boolean) jpeg_resync_to_restart JPP((j_decompress_ptr cinfo, - int desired)); - - -/* These marker codes are exported since applications and data source modules - * are likely to want to use them. - */ - -#define JPEG_RST0 0xD0 /* RST0 marker code */ -#define JPEG_EOI 0xD9 /* EOI marker code */ -#define JPEG_APP0 0xE0 /* APP0 marker code */ -#define JPEG_COM 0xFE /* COM marker code */ - - -/* If we have a brain-damaged compiler that emits warnings (or worse, errors) - * for structure definitions that are never filled in, keep it quiet by - * supplying dummy definitions for the various substructures. - */ - -#ifdef INCOMPLETE_TYPES_BROKEN -#ifndef JPEG_INTERNALS /* will be defined in jpegint.h */ -struct jvirt_sarray_control { long dummy; }; -struct jvirt_barray_control { long dummy; }; -struct jpeg_comp_master { long dummy; }; -struct jpeg_c_main_controller { long dummy; }; -struct jpeg_c_prep_controller { long dummy; }; -struct jpeg_c_coef_controller { long dummy; }; -struct jpeg_marker_writer { long dummy; }; -struct jpeg_color_converter { long dummy; }; -struct jpeg_downsampler { long dummy; }; -struct jpeg_forward_dct { long dummy; }; -struct jpeg_entropy_encoder { long dummy; }; -struct jpeg_decomp_master { long dummy; }; -struct jpeg_d_main_controller { long dummy; }; -struct jpeg_d_coef_controller { long dummy; }; -struct jpeg_d_post_controller { long dummy; }; -struct jpeg_input_controller { long dummy; }; -struct jpeg_marker_reader { long dummy; }; -struct jpeg_entropy_decoder { long dummy; }; -struct jpeg_inverse_dct { long dummy; }; -struct jpeg_upsampler { long dummy; }; -struct jpeg_color_deconverter { long dummy; }; -struct jpeg_color_quantizer { long dummy; }; -#endif /* JPEG_INTERNALS */ -#endif /* INCOMPLETE_TYPES_BROKEN */ - - -/* - * The JPEG library modules define JPEG_INTERNALS before including this file. - * The internal structure declarations are read only when that is true. - * Applications using the library should not include jpegint.h, but may wish - * to include jerror.h. - */ - -#ifdef JPEG_INTERNALS -#include "jpegint.h" /* fetch private declarations */ -#include "jerror.h" /* fetch error codes too */ -#endif - -#endif /* JPEGLIB_H */ diff --git a/extra_lib/include/jpeg/jconfig.h b/extra_lib/include/jpeg/jconfig.h index 7143622..1ca60d8 100644 --- a/extra_lib/include/jpeg/jconfig.h +++ b/extra_lib/include/jpeg/jconfig.h @@ -1,17 +1,29 @@ -/*jconfig.h for Microsoft Visual C++ and MinGW32 platform*/ +/* jconfig.h. Generated automatically by configure. */ /* jconfig.cfg --- source file edited by configure script */ /* see jconfig.doc for explanations */ -#define HAVE_PROTOTYPES -#define HAVE_UNSIGNED_CHAR -#define HAVE_UNSIGNED_SHORT -#ifdef __MINGW32__ +#ifdef _WIN32_WCE +#define HAVE_PROTOTYPES +#define HAVE_UNSIGNED_CHAR +#define HAVE_UNSIGNED_SHORT +#define HAVE_STDDEF_H +#define HAVE_STDLIB_H + +#ifndef __RPCNDR_H__ +typedef unsigned char boolean; +#endif +#define HAVE_BOOLEAN /* prevent jmorecfg.h from redefining it */ +#else +#undef HAVE_PROTOTYPES +#undef HAVE_UNSIGNED_CHAR +#undef HAVE_UNSIGNED_SHORT +#undef HAVE_STDDEF_H +#undef HAVE_STDLIB_H +#endif + #undef void #undef const -#endif #undef CHAR_IS_UNSIGNED -#define HAVE_STDDEF_H -#define HAVE_STDLIB_H #undef NEED_BSD_STRINGS #undef NEED_SYS_TYPES_H #undef NEED_FAR_POINTERS @@ -19,26 +31,18 @@ /* Define this if you get warnings about undefined structures. */ #undef INCOMPLETE_TYPES_BROKEN -#ifndef __MINGW32__ - -/* Define "boolean" as unsigned char, not int, per Windows custom */ -#ifndef __RPCNDR_H__ /* don't conflict if rpcndr.h already read */ -typedef unsigned char boolean; -#endif -#define HAVE_BOOLEAN /* prevent jmorecfg.h from redefining it */ -#endif - #ifdef JPEG_INTERNALS #undef RIGHT_SHIFT_IS_UNSIGNED - -#ifdef __MINGW32__ -#define INLINE __inline__ +#undef INLINE /* These are for configuring the JPEG memory manager. */ #undef DEFAULT_MAX_MEM #undef NO_MKTEMP -#endif + +#ifdef __MINGW32__ +#define INLINE __inline__ +#endif //__MINGW32__ #endif /* JPEG_INTERNALS */ diff --git a/extra_lib/include/jpeg/jmorecfg.h b/extra_lib/include/jpeg/jmorecfg.h index c7ed28a..96b501a 100644 --- a/extra_lib/include/jpeg/jmorecfg.h +++ b/extra_lib/include/jpeg/jmorecfg.h @@ -159,8 +159,8 @@ typedef short INT16; #ifndef XMD_H /* X11/xmd.h correctly defines INT32 */ #ifndef INT32 -//typedef long INT32; -#endif +typedef long INT32; +#endif #endif /* Datatype used for image dimensions. The JPEG standard only supports diff --git a/extra_lib/include/jpeg/jpeglib.h b/extra_lib/include/jpeg/jpeglib.h index 0f3a547..d1be8dd 100644 --- a/extra_lib/include/jpeg/jpeglib.h +++ b/extra_lib/include/jpeg/jpeglib.h @@ -128,9 +128,9 @@ typedef struct { /* The decompressor output side may not use these variables. */ int dc_tbl_no; /* DC entropy table selector (0..3) */ int ac_tbl_no; /* AC entropy table selector (0..3) */ - + /* Remaining fields should be treated as private by applications. */ - + /* These values are computed during compression or decompression startup: */ /* Component's size in DCT blocks. * Any dummy blocks added to complete an MCU are not counted; therefore @@ -209,11 +209,7 @@ typedef enum { JCS_RGB, /* red/green/blue */ JCS_YCbCr, /* Y/Cb/Cr (also known as YUV) */ JCS_CMYK, /* C/M/Y/K */ - JCS_YCCK, /* Y/Cb/Cr/K */ -#ifdef ANDROID_RGB - JCS_RGBA_8888, /* red/green/blue/alpha */ - JCS_RGB_565 /* red/green/blue in 565 format */ -#endif + JCS_YCCK /* Y/Cb/Cr/K */ } J_COLOR_SPACE; /* DCT/IDCT algorithm options. */ @@ -302,14 +298,14 @@ struct jpeg_compress_struct { jpeg_component_info * comp_info; /* comp_info[i] describes component that appears i'th in SOF */ - + JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS]; /* ptrs to coefficient quantization tables, or NULL if not defined */ - + JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS]; JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS]; /* ptrs to Huffman coding tables, or NULL if not defined */ - + UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */ UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */ UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */ @@ -349,7 +345,7 @@ struct jpeg_compress_struct { UINT16 X_density; /* Horizontal pixel density */ UINT16 Y_density; /* Vertical pixel density */ boolean write_Adobe_marker; /* should an Adobe marker be written? */ - + /* State variable: index of next scanline to be written to * jpeg_write_scanlines(). Application may use this to control its * processing loop, e.g., "while (next_scanline < image_height)". @@ -374,7 +370,7 @@ struct jpeg_compress_struct { * There are v_samp_factor * DCTSIZE sample rows of each component in an * "iMCU" (interleaved MCU) row. */ - + /* * These fields are valid during any one scan. * They describe the components and MCUs actually appearing in the scan. @@ -382,10 +378,10 @@ struct jpeg_compress_struct { int comps_in_scan; /* # of JPEG components in this scan */ jpeg_component_info * cur_comp_info[MAX_COMPS_IN_SCAN]; /* *cur_comp_info[i] describes component that appears i'th in SOS */ - + JDIMENSION MCUs_per_row; /* # of MCUs across the image */ JDIMENSION MCU_rows_in_scan; /* # of MCU rows in the image */ - + int blocks_in_MCU; /* # of DCT blocks per MCU */ int MCU_membership[C_MAX_BLOCKS_IN_MCU]; /* MCU_membership[i] is index in cur_comp_info of component owning */ @@ -656,7 +652,7 @@ struct jpeg_error_mgr { #define JMSG_LENGTH_MAX 200 /* recommended size of format_message buffer */ /* Reset error state variables at start of a new image */ JMETHOD(void, reset_error_mgr, (j_common_ptr cinfo)); - + /* The message ID code and any parameters are saved here. * A message can have one string parameter or up to 8 int parameters. */ @@ -666,11 +662,11 @@ struct jpeg_error_mgr { int i[8]; char s[JMSG_STR_PARM_MAX]; } msg_parm; - + /* Standard state variables for error facility */ - + int trace_level; /* max msg_level that will be displayed */ - + /* For recoverable corrupt-data errors, we emit a warning message, * but keep going unless emit_message chooses to abort. emit_message * should count warnings in num_warnings. The surrounding application @@ -828,7 +824,7 @@ typedef JMETHOD(boolean, jpeg_marker_parser_method, (j_decompress_ptr cinfo)); /* Short forms of external names for systems with brain-damaged linkers. * We shorten external names to be unique in the first six letters, which * is good enough for all known systems. - * (If your compiler itself needs names to be unique in less than 15 + * (If your compiler itself needs names to be unique in less than 15 * characters, you are out of luck. Get a better compiler.) */ diff --git a/extra_lib/include/openssl/asn1.h b/extra_lib/include/openssl/asn1.h new file mode 100644 index 0000000..59540e4 --- /dev/null +++ b/extra_lib/include/openssl/asn1.h @@ -0,0 +1,1402 @@ +/* crypto/asn1/asn1.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 AUTHOR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_ASN1_H +#define HEADER_ASN1_H + +#include +#include +#ifndef OPENSSL_NO_BIO +#include +#endif +#include +#include + +#include + +#include +#ifndef OPENSSL_NO_DEPRECATED +#include +#endif + +#ifdef OPENSSL_BUILD_SHLIBCRYPTO +# undef OPENSSL_EXTERN +# define OPENSSL_EXTERN OPENSSL_EXPORT +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#define V_ASN1_UNIVERSAL 0x00 +#define V_ASN1_APPLICATION 0x40 +#define V_ASN1_CONTEXT_SPECIFIC 0x80 +#define V_ASN1_PRIVATE 0xc0 + +#define V_ASN1_CONSTRUCTED 0x20 +#define V_ASN1_PRIMITIVE_TAG 0x1f +#define V_ASN1_PRIMATIVE_TAG 0x1f + +#define V_ASN1_APP_CHOOSE -2 /* let the recipient choose */ +#define V_ASN1_OTHER -3 /* used in ASN1_TYPE */ +#define V_ASN1_ANY -4 /* used in ASN1 template code */ + +#define V_ASN1_NEG 0x100 /* negative flag */ + +#define V_ASN1_UNDEF -1 +#define V_ASN1_EOC 0 +#define V_ASN1_BOOLEAN 1 /**/ +#define V_ASN1_INTEGER 2 +#define V_ASN1_NEG_INTEGER (2 | V_ASN1_NEG) +#define V_ASN1_BIT_STRING 3 +#define V_ASN1_OCTET_STRING 4 +#define V_ASN1_NULL 5 +#define V_ASN1_OBJECT 6 +#define V_ASN1_OBJECT_DESCRIPTOR 7 +#define V_ASN1_EXTERNAL 8 +#define V_ASN1_REAL 9 +#define V_ASN1_ENUMERATED 10 +#define V_ASN1_NEG_ENUMERATED (10 | V_ASN1_NEG) +#define V_ASN1_UTF8STRING 12 +#define V_ASN1_SEQUENCE 16 +#define V_ASN1_SET 17 +#define V_ASN1_NUMERICSTRING 18 /**/ +#define V_ASN1_PRINTABLESTRING 19 +#define V_ASN1_T61STRING 20 +#define V_ASN1_TELETEXSTRING 20 /* alias */ +#define V_ASN1_VIDEOTEXSTRING 21 /**/ +#define V_ASN1_IA5STRING 22 +#define V_ASN1_UTCTIME 23 +#define V_ASN1_GENERALIZEDTIME 24 /**/ +#define V_ASN1_GRAPHICSTRING 25 /**/ +#define V_ASN1_ISO64STRING 26 /**/ +#define V_ASN1_VISIBLESTRING 26 /* alias */ +#define V_ASN1_GENERALSTRING 27 /**/ +#define V_ASN1_UNIVERSALSTRING 28 /**/ +#define V_ASN1_BMPSTRING 30 + +/* For use with d2i_ASN1_type_bytes() */ +#define B_ASN1_NUMERICSTRING 0x0001 +#define B_ASN1_PRINTABLESTRING 0x0002 +#define B_ASN1_T61STRING 0x0004 +#define B_ASN1_TELETEXSTRING 0x0004 +#define B_ASN1_VIDEOTEXSTRING 0x0008 +#define B_ASN1_IA5STRING 0x0010 +#define B_ASN1_GRAPHICSTRING 0x0020 +#define B_ASN1_ISO64STRING 0x0040 +#define B_ASN1_VISIBLESTRING 0x0040 +#define B_ASN1_GENERALSTRING 0x0080 +#define B_ASN1_UNIVERSALSTRING 0x0100 +#define B_ASN1_OCTET_STRING 0x0200 +#define B_ASN1_BIT_STRING 0x0400 +#define B_ASN1_BMPSTRING 0x0800 +#define B_ASN1_UNKNOWN 0x1000 +#define B_ASN1_UTF8STRING 0x2000 +#define B_ASN1_UTCTIME 0x4000 +#define B_ASN1_GENERALIZEDTIME 0x8000 +#define B_ASN1_SEQUENCE 0x10000 + +/* For use with ASN1_mbstring_copy() */ +#define MBSTRING_FLAG 0x1000 +#define MBSTRING_UTF8 (MBSTRING_FLAG) +#define MBSTRING_ASC (MBSTRING_FLAG|1) +#define MBSTRING_BMP (MBSTRING_FLAG|2) +#define MBSTRING_UNIV (MBSTRING_FLAG|4) + +#define SMIME_OLDMIME 0x400 +#define SMIME_CRLFEOL 0x800 +#define SMIME_STREAM 0x1000 + +struct X509_algor_st; +DECLARE_STACK_OF(X509_ALGOR) + +#define DECLARE_ASN1_SET_OF(type) /* filled in by mkstack.pl */ +#define IMPLEMENT_ASN1_SET_OF(type) /* nothing, no longer needed */ + +/* We MUST make sure that, except for constness, asn1_ctx_st and + asn1_const_ctx are exactly the same. Fortunately, as soon as + the old ASN1 parsing macros are gone, we can throw this away + as well... */ +typedef struct asn1_ctx_st + { + unsigned char *p;/* work char pointer */ + int eos; /* end of sequence read for indefinite encoding */ + int error; /* error code to use when returning an error */ + int inf; /* constructed if 0x20, indefinite is 0x21 */ + int tag; /* tag from last 'get object' */ + int xclass; /* class from last 'get object' */ + long slen; /* length of last 'get object' */ + unsigned char *max; /* largest value of p allowed */ + unsigned char *q;/* temporary variable */ + unsigned char **pp;/* variable */ + int line; /* used in error processing */ + } ASN1_CTX; + +typedef struct asn1_const_ctx_st + { + const unsigned char *p;/* work char pointer */ + int eos; /* end of sequence read for indefinite encoding */ + int error; /* error code to use when returning an error */ + int inf; /* constructed if 0x20, indefinite is 0x21 */ + int tag; /* tag from last 'get object' */ + int xclass; /* class from last 'get object' */ + long slen; /* length of last 'get object' */ + const unsigned char *max; /* largest value of p allowed */ + const unsigned char *q;/* temporary variable */ + const unsigned char **pp;/* variable */ + int line; /* used in error processing */ + } ASN1_const_CTX; + +/* These are used internally in the ASN1_OBJECT to keep track of + * whether the names and data need to be free()ed */ +#define ASN1_OBJECT_FLAG_DYNAMIC 0x01 /* internal use */ +#define ASN1_OBJECT_FLAG_CRITICAL 0x02 /* critical x509v3 object id */ +#define ASN1_OBJECT_FLAG_DYNAMIC_STRINGS 0x04 /* internal use */ +#define ASN1_OBJECT_FLAG_DYNAMIC_DATA 0x08 /* internal use */ +typedef struct asn1_object_st + { + const char *sn,*ln; + int nid; + int length; + const unsigned char *data; /* data remains const after init */ + int flags; /* Should we free this one */ + } ASN1_OBJECT; + +#define ASN1_STRING_FLAG_BITS_LEFT 0x08 /* Set if 0x07 has bits left value */ +/* This indicates that the ASN1_STRING is not a real value but just a place + * holder for the location where indefinite length constructed data should + * be inserted in the memory buffer + */ +#define ASN1_STRING_FLAG_NDEF 0x010 + +/* This flag is used by the CMS code to indicate that a string is not + * complete and is a place holder for content when it had all been + * accessed. The flag will be reset when content has been written to it. + */ + +#define ASN1_STRING_FLAG_CONT 0x020 +/* This flag is used by ASN1 code to indicate an ASN1_STRING is an MSTRING + * type. + */ +#define ASN1_STRING_FLAG_MSTRING 0x040 +/* This is the base type that holds just about everything :-) */ +typedef struct asn1_string_st + { + int length; + int type; + unsigned char *data; + /* The value of the following field depends on the type being + * held. It is mostly being used for BIT_STRING so if the + * input data has a non-zero 'unused bits' value, it will be + * handled correctly */ + long flags; + } ASN1_STRING; + +/* ASN1_ENCODING structure: this is used to save the received + * encoding of an ASN1 type. This is useful to get round + * problems with invalid encodings which can break signatures. + */ + +typedef struct ASN1_ENCODING_st + { + unsigned char *enc; /* DER encoding */ + long len; /* Length of encoding */ + int modified; /* set to 1 if 'enc' is invalid */ + } ASN1_ENCODING; + +/* Used with ASN1 LONG type: if a long is set to this it is omitted */ +#define ASN1_LONG_UNDEF 0x7fffffffL + +#define STABLE_FLAGS_MALLOC 0x01 +#define STABLE_NO_MASK 0x02 +#define DIRSTRING_TYPE \ + (B_ASN1_PRINTABLESTRING|B_ASN1_T61STRING|B_ASN1_BMPSTRING|B_ASN1_UTF8STRING) +#define PKCS9STRING_TYPE (DIRSTRING_TYPE|B_ASN1_IA5STRING) + +typedef struct asn1_string_table_st { + int nid; + long minsize; + long maxsize; + unsigned long mask; + unsigned long flags; +} ASN1_STRING_TABLE; + +DECLARE_STACK_OF(ASN1_STRING_TABLE) + +/* size limits: this stuff is taken straight from RFC2459 */ + +#define ub_name 32768 +#define ub_common_name 64 +#define ub_locality_name 128 +#define ub_state_name 128 +#define ub_organization_name 64 +#define ub_organization_unit_name 64 +#define ub_title 64 +#define ub_email_address 128 + +/* Declarations for template structures: for full definitions + * see asn1t.h + */ +typedef struct ASN1_TEMPLATE_st ASN1_TEMPLATE; +typedef struct ASN1_ITEM_st ASN1_ITEM; +typedef struct ASN1_TLC_st ASN1_TLC; +/* This is just an opaque pointer */ +typedef struct ASN1_VALUE_st ASN1_VALUE; + +/* Declare ASN1 functions: the implement macro in in asn1t.h */ + +#define DECLARE_ASN1_FUNCTIONS(type) DECLARE_ASN1_FUNCTIONS_name(type, type) + +#define DECLARE_ASN1_ALLOC_FUNCTIONS(type) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, type) + +#define DECLARE_ASN1_FUNCTIONS_name(type, name) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS(type, name, name) + +#define DECLARE_ASN1_FUNCTIONS_fname(type, itname, name) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) + +#define DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) \ + type *d2i_##name(type **a, const unsigned char **in, long len); \ + int i2d_##name(type *a, unsigned char **out); \ + DECLARE_ASN1_ITEM(itname) + +#define DECLARE_ASN1_ENCODE_FUNCTIONS_const(type, name) \ + type *d2i_##name(type **a, const unsigned char **in, long len); \ + int i2d_##name(const type *a, unsigned char **out); \ + DECLARE_ASN1_ITEM(name) + +#define DECLARE_ASN1_NDEF_FUNCTION(name) \ + int i2d_##name##_NDEF(name *a, unsigned char **out); + +#define DECLARE_ASN1_FUNCTIONS_const(name) \ + DECLARE_ASN1_ALLOC_FUNCTIONS(name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_const(name, name) + +#define DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ + type *name##_new(void); \ + void name##_free(type *a); + +#define DECLARE_ASN1_PRINT_FUNCTION(stname) \ + DECLARE_ASN1_PRINT_FUNCTION_fname(stname, stname) + +#define DECLARE_ASN1_PRINT_FUNCTION_fname(stname, fname) \ + int fname##_print_ctx(BIO *out, stname *x, int indent, \ + const ASN1_PCTX *pctx); + +#define D2I_OF(type) type *(*)(type **,const unsigned char **,long) +#define I2D_OF(type) int (*)(type *,unsigned char **) +#define I2D_OF_const(type) int (*)(const type *,unsigned char **) + +#define CHECKED_D2I_OF(type, d2i) \ + ((d2i_of_void*) (1 ? d2i : ((D2I_OF(type))0))) +#define CHECKED_I2D_OF(type, i2d) \ + ((i2d_of_void*) (1 ? i2d : ((I2D_OF(type))0))) +#define CHECKED_NEW_OF(type, xnew) \ + ((void *(*)(void)) (1 ? xnew : ((type *(*)(void))0))) +#define CHECKED_PTR_OF(type, p) \ + ((void*) (1 ? p : (type*)0)) +#define CHECKED_PPTR_OF(type, p) \ + ((void**) (1 ? p : (type**)0)) + +#define TYPEDEF_D2I_OF(type) typedef type *d2i_of_##type(type **,const unsigned char **,long) +#define TYPEDEF_I2D_OF(type) typedef int i2d_of_##type(type *,unsigned char **) +#define TYPEDEF_D2I2D_OF(type) TYPEDEF_D2I_OF(type); TYPEDEF_I2D_OF(type) + +TYPEDEF_D2I2D_OF(void); + +/* The following macros and typedefs allow an ASN1_ITEM + * to be embedded in a structure and referenced. Since + * the ASN1_ITEM pointers need to be globally accessible + * (possibly from shared libraries) they may exist in + * different forms. On platforms that support it the + * ASN1_ITEM structure itself will be globally exported. + * Other platforms will export a function that returns + * an ASN1_ITEM pointer. + * + * To handle both cases transparently the macros below + * should be used instead of hard coding an ASN1_ITEM + * pointer in a structure. + * + * The structure will look like this: + * + * typedef struct SOMETHING_st { + * ... + * ASN1_ITEM_EXP *iptr; + * ... + * } SOMETHING; + * + * It would be initialised as e.g.: + * + * SOMETHING somevar = {...,ASN1_ITEM_ref(X509),...}; + * + * and the actual pointer extracted with: + * + * const ASN1_ITEM *it = ASN1_ITEM_ptr(somevar.iptr); + * + * Finally an ASN1_ITEM pointer can be extracted from an + * appropriate reference with: ASN1_ITEM_rptr(X509). This + * would be used when a function takes an ASN1_ITEM * argument. + * + */ + +#ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION + +/* ASN1_ITEM pointer exported type */ +typedef const ASN1_ITEM ASN1_ITEM_EXP; + +/* Macro to obtain ASN1_ITEM pointer from exported type */ +#define ASN1_ITEM_ptr(iptr) (iptr) + +/* Macro to include ASN1_ITEM pointer from base type */ +#define ASN1_ITEM_ref(iptr) (&(iptr##_it)) + +#define ASN1_ITEM_rptr(ref) (&(ref##_it)) + +#define DECLARE_ASN1_ITEM(name) \ + OPENSSL_EXTERN const ASN1_ITEM name##_it; + +#else + +/* Platforms that can't easily handle shared global variables are declared + * as functions returning ASN1_ITEM pointers. + */ + +/* ASN1_ITEM pointer exported type */ +typedef const ASN1_ITEM * ASN1_ITEM_EXP(void); + +/* Macro to obtain ASN1_ITEM pointer from exported type */ +#define ASN1_ITEM_ptr(iptr) (iptr()) + +/* Macro to include ASN1_ITEM pointer from base type */ +#define ASN1_ITEM_ref(iptr) (iptr##_it) + +#define ASN1_ITEM_rptr(ref) (ref##_it()) + +#define DECLARE_ASN1_ITEM(name) \ + const ASN1_ITEM * name##_it(void); + +#endif + +/* Parameters used by ASN1_STRING_print_ex() */ + +/* These determine which characters to escape: + * RFC2253 special characters, control characters and + * MSB set characters + */ + +#define ASN1_STRFLGS_ESC_2253 1 +#define ASN1_STRFLGS_ESC_CTRL 2 +#define ASN1_STRFLGS_ESC_MSB 4 + + +/* This flag determines how we do escaping: normally + * RC2253 backslash only, set this to use backslash and + * quote. + */ + +#define ASN1_STRFLGS_ESC_QUOTE 8 + + +/* These three flags are internal use only. */ + +/* Character is a valid PrintableString character */ +#define CHARTYPE_PRINTABLESTRING 0x10 +/* Character needs escaping if it is the first character */ +#define CHARTYPE_FIRST_ESC_2253 0x20 +/* Character needs escaping if it is the last character */ +#define CHARTYPE_LAST_ESC_2253 0x40 + +/* NB the internal flags are safely reused below by flags + * handled at the top level. + */ + +/* If this is set we convert all character strings + * to UTF8 first + */ + +#define ASN1_STRFLGS_UTF8_CONVERT 0x10 + +/* If this is set we don't attempt to interpret content: + * just assume all strings are 1 byte per character. This + * will produce some pretty odd looking output! + */ + +#define ASN1_STRFLGS_IGNORE_TYPE 0x20 + +/* If this is set we include the string type in the output */ +#define ASN1_STRFLGS_SHOW_TYPE 0x40 + +/* This determines which strings to display and which to + * 'dump' (hex dump of content octets or DER encoding). We can + * only dump non character strings or everything. If we + * don't dump 'unknown' they are interpreted as character + * strings with 1 octet per character and are subject to + * the usual escaping options. + */ + +#define ASN1_STRFLGS_DUMP_ALL 0x80 +#define ASN1_STRFLGS_DUMP_UNKNOWN 0x100 + +/* These determine what 'dumping' does, we can dump the + * content octets or the DER encoding: both use the + * RFC2253 #XXXXX notation. + */ + +#define ASN1_STRFLGS_DUMP_DER 0x200 + +/* All the string flags consistent with RFC2253, + * escaping control characters isn't essential in + * RFC2253 but it is advisable anyway. + */ + +#define ASN1_STRFLGS_RFC2253 (ASN1_STRFLGS_ESC_2253 | \ + ASN1_STRFLGS_ESC_CTRL | \ + ASN1_STRFLGS_ESC_MSB | \ + ASN1_STRFLGS_UTF8_CONVERT | \ + ASN1_STRFLGS_DUMP_UNKNOWN | \ + ASN1_STRFLGS_DUMP_DER) + +DECLARE_STACK_OF(ASN1_INTEGER) +DECLARE_ASN1_SET_OF(ASN1_INTEGER) + +DECLARE_STACK_OF(ASN1_GENERALSTRING) + +typedef struct asn1_type_st + { + int type; + union { + char *ptr; + ASN1_BOOLEAN boolean; + ASN1_STRING * asn1_string; + ASN1_OBJECT * object; + ASN1_INTEGER * integer; + ASN1_ENUMERATED * enumerated; + ASN1_BIT_STRING * bit_string; + ASN1_OCTET_STRING * octet_string; + ASN1_PRINTABLESTRING * printablestring; + ASN1_T61STRING * t61string; + ASN1_IA5STRING * ia5string; + ASN1_GENERALSTRING * generalstring; + ASN1_BMPSTRING * bmpstring; + ASN1_UNIVERSALSTRING * universalstring; + ASN1_UTCTIME * utctime; + ASN1_GENERALIZEDTIME * generalizedtime; + ASN1_VISIBLESTRING * visiblestring; + ASN1_UTF8STRING * utf8string; + /* set and sequence are left complete and still + * contain the set or sequence bytes */ + ASN1_STRING * set; + ASN1_STRING * sequence; + ASN1_VALUE * asn1_value; + } value; + } ASN1_TYPE; + +DECLARE_STACK_OF(ASN1_TYPE) +DECLARE_ASN1_SET_OF(ASN1_TYPE) + +typedef STACK_OF(ASN1_TYPE) ASN1_SEQUENCE_ANY; + +DECLARE_ASN1_ENCODE_FUNCTIONS_const(ASN1_SEQUENCE_ANY, ASN1_SEQUENCE_ANY) +DECLARE_ASN1_ENCODE_FUNCTIONS_const(ASN1_SEQUENCE_ANY, ASN1_SET_ANY) + +typedef struct NETSCAPE_X509_st + { + ASN1_OCTET_STRING *header; + X509 *cert; + } NETSCAPE_X509; + +/* This is used to contain a list of bit names */ +typedef struct BIT_STRING_BITNAME_st { + int bitnum; + const char *lname; + const char *sname; +} BIT_STRING_BITNAME; + + +#define M_ASN1_STRING_length(x) ((x)->length) +#define M_ASN1_STRING_length_set(x, n) ((x)->length = (n)) +#define M_ASN1_STRING_type(x) ((x)->type) +#define M_ASN1_STRING_data(x) ((x)->data) + +/* Macros for string operations */ +#define M_ASN1_BIT_STRING_new() (ASN1_BIT_STRING *)\ + ASN1_STRING_type_new(V_ASN1_BIT_STRING) +#define M_ASN1_BIT_STRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) +#define M_ASN1_BIT_STRING_dup(a) (ASN1_BIT_STRING *)\ + ASN1_STRING_dup((const ASN1_STRING *)a) +#define M_ASN1_BIT_STRING_cmp(a,b) ASN1_STRING_cmp(\ + (const ASN1_STRING *)a,(const ASN1_STRING *)b) +#define M_ASN1_BIT_STRING_set(a,b,c) ASN1_STRING_set((ASN1_STRING *)a,b,c) + +#define M_ASN1_INTEGER_new() (ASN1_INTEGER *)\ + ASN1_STRING_type_new(V_ASN1_INTEGER) +#define M_ASN1_INTEGER_free(a) ASN1_STRING_free((ASN1_STRING *)a) +#define M_ASN1_INTEGER_dup(a) (ASN1_INTEGER *)\ + ASN1_STRING_dup((const ASN1_STRING *)a) +#define M_ASN1_INTEGER_cmp(a,b) ASN1_STRING_cmp(\ + (const ASN1_STRING *)a,(const ASN1_STRING *)b) + +#define M_ASN1_ENUMERATED_new() (ASN1_ENUMERATED *)\ + ASN1_STRING_type_new(V_ASN1_ENUMERATED) +#define M_ASN1_ENUMERATED_free(a) ASN1_STRING_free((ASN1_STRING *)a) +#define M_ASN1_ENUMERATED_dup(a) (ASN1_ENUMERATED *)\ + ASN1_STRING_dup((const ASN1_STRING *)a) +#define M_ASN1_ENUMERATED_cmp(a,b) ASN1_STRING_cmp(\ + (const ASN1_STRING *)a,(const ASN1_STRING *)b) + +#define M_ASN1_OCTET_STRING_new() (ASN1_OCTET_STRING *)\ + ASN1_STRING_type_new(V_ASN1_OCTET_STRING) +#define M_ASN1_OCTET_STRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) +#define M_ASN1_OCTET_STRING_dup(a) (ASN1_OCTET_STRING *)\ + ASN1_STRING_dup((const ASN1_STRING *)a) +#define M_ASN1_OCTET_STRING_cmp(a,b) ASN1_STRING_cmp(\ + (const ASN1_STRING *)a,(const ASN1_STRING *)b) +#define M_ASN1_OCTET_STRING_set(a,b,c) ASN1_STRING_set((ASN1_STRING *)a,b,c) +#define M_ASN1_OCTET_STRING_print(a,b) ASN1_STRING_print(a,(ASN1_STRING *)b) +#define M_i2d_ASN1_OCTET_STRING(a,pp) \ + i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_OCTET_STRING,\ + V_ASN1_UNIVERSAL) + +#define B_ASN1_TIME \ + B_ASN1_UTCTIME | \ + B_ASN1_GENERALIZEDTIME + +#define B_ASN1_PRINTABLE \ + B_ASN1_NUMERICSTRING| \ + B_ASN1_PRINTABLESTRING| \ + B_ASN1_T61STRING| \ + B_ASN1_IA5STRING| \ + B_ASN1_BIT_STRING| \ + B_ASN1_UNIVERSALSTRING|\ + B_ASN1_BMPSTRING|\ + B_ASN1_UTF8STRING|\ + B_ASN1_SEQUENCE|\ + B_ASN1_UNKNOWN + +#define B_ASN1_DIRECTORYSTRING \ + B_ASN1_PRINTABLESTRING| \ + B_ASN1_TELETEXSTRING|\ + B_ASN1_BMPSTRING|\ + B_ASN1_UNIVERSALSTRING|\ + B_ASN1_UTF8STRING + +#define B_ASN1_DISPLAYTEXT \ + B_ASN1_IA5STRING| \ + B_ASN1_VISIBLESTRING| \ + B_ASN1_BMPSTRING|\ + B_ASN1_UTF8STRING + +#define M_ASN1_PRINTABLE_new() ASN1_STRING_type_new(V_ASN1_T61STRING) +#define M_ASN1_PRINTABLE_free(a) ASN1_STRING_free((ASN1_STRING *)a) +#define M_i2d_ASN1_PRINTABLE(a,pp) i2d_ASN1_bytes((ASN1_STRING *)a,\ + pp,a->type,V_ASN1_UNIVERSAL) +#define M_d2i_ASN1_PRINTABLE(a,pp,l) \ + d2i_ASN1_type_bytes((ASN1_STRING **)a,pp,l, \ + B_ASN1_PRINTABLE) + +#define M_DIRECTORYSTRING_new() ASN1_STRING_type_new(V_ASN1_PRINTABLESTRING) +#define M_DIRECTORYSTRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) +#define M_i2d_DIRECTORYSTRING(a,pp) i2d_ASN1_bytes((ASN1_STRING *)a,\ + pp,a->type,V_ASN1_UNIVERSAL) +#define M_d2i_DIRECTORYSTRING(a,pp,l) \ + d2i_ASN1_type_bytes((ASN1_STRING **)a,pp,l, \ + B_ASN1_DIRECTORYSTRING) + +#define M_DISPLAYTEXT_new() ASN1_STRING_type_new(V_ASN1_VISIBLESTRING) +#define M_DISPLAYTEXT_free(a) ASN1_STRING_free((ASN1_STRING *)a) +#define M_i2d_DISPLAYTEXT(a,pp) i2d_ASN1_bytes((ASN1_STRING *)a,\ + pp,a->type,V_ASN1_UNIVERSAL) +#define M_d2i_DISPLAYTEXT(a,pp,l) \ + d2i_ASN1_type_bytes((ASN1_STRING **)a,pp,l, \ + B_ASN1_DISPLAYTEXT) + +#define M_ASN1_PRINTABLESTRING_new() (ASN1_PRINTABLESTRING *)\ + ASN1_STRING_type_new(V_ASN1_PRINTABLESTRING) +#define M_ASN1_PRINTABLESTRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) +#define M_i2d_ASN1_PRINTABLESTRING(a,pp) \ + i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_PRINTABLESTRING,\ + V_ASN1_UNIVERSAL) +#define M_d2i_ASN1_PRINTABLESTRING(a,pp,l) \ + (ASN1_PRINTABLESTRING *)d2i_ASN1_type_bytes\ + ((ASN1_STRING **)a,pp,l,B_ASN1_PRINTABLESTRING) + +#define M_ASN1_T61STRING_new() (ASN1_T61STRING *)\ + ASN1_STRING_type_new(V_ASN1_T61STRING) +#define M_ASN1_T61STRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) +#define M_i2d_ASN1_T61STRING(a,pp) \ + i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_T61STRING,\ + V_ASN1_UNIVERSAL) +#define M_d2i_ASN1_T61STRING(a,pp,l) \ + (ASN1_T61STRING *)d2i_ASN1_type_bytes\ + ((ASN1_STRING **)a,pp,l,B_ASN1_T61STRING) + +#define M_ASN1_IA5STRING_new() (ASN1_IA5STRING *)\ + ASN1_STRING_type_new(V_ASN1_IA5STRING) +#define M_ASN1_IA5STRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) +#define M_ASN1_IA5STRING_dup(a) \ + (ASN1_IA5STRING *)ASN1_STRING_dup((const ASN1_STRING *)a) +#define M_i2d_ASN1_IA5STRING(a,pp) \ + i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_IA5STRING,\ + V_ASN1_UNIVERSAL) +#define M_d2i_ASN1_IA5STRING(a,pp,l) \ + (ASN1_IA5STRING *)d2i_ASN1_type_bytes((ASN1_STRING **)a,pp,l,\ + B_ASN1_IA5STRING) + +#define M_ASN1_UTCTIME_new() (ASN1_UTCTIME *)\ + ASN1_STRING_type_new(V_ASN1_UTCTIME) +#define M_ASN1_UTCTIME_free(a) ASN1_STRING_free((ASN1_STRING *)a) +#define M_ASN1_UTCTIME_dup(a) (ASN1_UTCTIME *)\ + ASN1_STRING_dup((const ASN1_STRING *)a) + +#define M_ASN1_GENERALIZEDTIME_new() (ASN1_GENERALIZEDTIME *)\ + ASN1_STRING_type_new(V_ASN1_GENERALIZEDTIME) +#define M_ASN1_GENERALIZEDTIME_free(a) ASN1_STRING_free((ASN1_STRING *)a) +#define M_ASN1_GENERALIZEDTIME_dup(a) (ASN1_GENERALIZEDTIME *)ASN1_STRING_dup(\ + (const ASN1_STRING *)a) + +#define M_ASN1_TIME_new() (ASN1_TIME *)\ + ASN1_STRING_type_new(V_ASN1_UTCTIME) +#define M_ASN1_TIME_free(a) ASN1_STRING_free((ASN1_STRING *)a) +#define M_ASN1_TIME_dup(a) (ASN1_TIME *)\ + ASN1_STRING_dup((const ASN1_STRING *)a) + +#define M_ASN1_GENERALSTRING_new() (ASN1_GENERALSTRING *)\ + ASN1_STRING_type_new(V_ASN1_GENERALSTRING) +#define M_ASN1_GENERALSTRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) +#define M_i2d_ASN1_GENERALSTRING(a,pp) \ + i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_GENERALSTRING,\ + V_ASN1_UNIVERSAL) +#define M_d2i_ASN1_GENERALSTRING(a,pp,l) \ + (ASN1_GENERALSTRING *)d2i_ASN1_type_bytes\ + ((ASN1_STRING **)a,pp,l,B_ASN1_GENERALSTRING) + +#define M_ASN1_UNIVERSALSTRING_new() (ASN1_UNIVERSALSTRING *)\ + ASN1_STRING_type_new(V_ASN1_UNIVERSALSTRING) +#define M_ASN1_UNIVERSALSTRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) +#define M_i2d_ASN1_UNIVERSALSTRING(a,pp) \ + i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_UNIVERSALSTRING,\ + V_ASN1_UNIVERSAL) +#define M_d2i_ASN1_UNIVERSALSTRING(a,pp,l) \ + (ASN1_UNIVERSALSTRING *)d2i_ASN1_type_bytes\ + ((ASN1_STRING **)a,pp,l,B_ASN1_UNIVERSALSTRING) + +#define M_ASN1_BMPSTRING_new() (ASN1_BMPSTRING *)\ + ASN1_STRING_type_new(V_ASN1_BMPSTRING) +#define M_ASN1_BMPSTRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) +#define M_i2d_ASN1_BMPSTRING(a,pp) \ + i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_BMPSTRING,\ + V_ASN1_UNIVERSAL) +#define M_d2i_ASN1_BMPSTRING(a,pp,l) \ + (ASN1_BMPSTRING *)d2i_ASN1_type_bytes\ + ((ASN1_STRING **)a,pp,l,B_ASN1_BMPSTRING) + +#define M_ASN1_VISIBLESTRING_new() (ASN1_VISIBLESTRING *)\ + ASN1_STRING_type_new(V_ASN1_VISIBLESTRING) +#define M_ASN1_VISIBLESTRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) +#define M_i2d_ASN1_VISIBLESTRING(a,pp) \ + i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_VISIBLESTRING,\ + V_ASN1_UNIVERSAL) +#define M_d2i_ASN1_VISIBLESTRING(a,pp,l) \ + (ASN1_VISIBLESTRING *)d2i_ASN1_type_bytes\ + ((ASN1_STRING **)a,pp,l,B_ASN1_VISIBLESTRING) + +#define M_ASN1_UTF8STRING_new() (ASN1_UTF8STRING *)\ + ASN1_STRING_type_new(V_ASN1_UTF8STRING) +#define M_ASN1_UTF8STRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) +#define M_i2d_ASN1_UTF8STRING(a,pp) \ + i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_UTF8STRING,\ + V_ASN1_UNIVERSAL) +#define M_d2i_ASN1_UTF8STRING(a,pp,l) \ + (ASN1_UTF8STRING *)d2i_ASN1_type_bytes\ + ((ASN1_STRING **)a,pp,l,B_ASN1_UTF8STRING) + + /* for the is_set parameter to i2d_ASN1_SET */ +#define IS_SEQUENCE 0 +#define IS_SET 1 + +DECLARE_ASN1_FUNCTIONS_fname(ASN1_TYPE, ASN1_ANY, ASN1_TYPE) + +int ASN1_TYPE_get(ASN1_TYPE *a); +void ASN1_TYPE_set(ASN1_TYPE *a, int type, void *value); +int ASN1_TYPE_set1(ASN1_TYPE *a, int type, const void *value); +int ASN1_TYPE_cmp(ASN1_TYPE *a, ASN1_TYPE *b); + +ASN1_OBJECT * ASN1_OBJECT_new(void ); +void ASN1_OBJECT_free(ASN1_OBJECT *a); +int i2d_ASN1_OBJECT(ASN1_OBJECT *a,unsigned char **pp); +ASN1_OBJECT * c2i_ASN1_OBJECT(ASN1_OBJECT **a,const unsigned char **pp, + long length); +ASN1_OBJECT * d2i_ASN1_OBJECT(ASN1_OBJECT **a,const unsigned char **pp, + long length); + +DECLARE_ASN1_ITEM(ASN1_OBJECT) + +DECLARE_STACK_OF(ASN1_OBJECT) +DECLARE_ASN1_SET_OF(ASN1_OBJECT) + +ASN1_STRING * ASN1_STRING_new(void); +void ASN1_STRING_free(ASN1_STRING *a); +int ASN1_STRING_copy(ASN1_STRING *dst, const ASN1_STRING *str); +ASN1_STRING * ASN1_STRING_dup(const ASN1_STRING *a); +ASN1_STRING * ASN1_STRING_type_new(int type ); +int ASN1_STRING_cmp(const ASN1_STRING *a, const ASN1_STRING *b); + /* Since this is used to store all sorts of things, via macros, for now, make + its data void * */ +int ASN1_STRING_set(ASN1_STRING *str, const void *data, int len); +void ASN1_STRING_set0(ASN1_STRING *str, void *data, int len); +int ASN1_STRING_length(const ASN1_STRING *x); +void ASN1_STRING_length_set(ASN1_STRING *x, int n); +int ASN1_STRING_type(ASN1_STRING *x); +unsigned char * ASN1_STRING_data(ASN1_STRING *x); + +DECLARE_ASN1_FUNCTIONS(ASN1_BIT_STRING) +int i2c_ASN1_BIT_STRING(ASN1_BIT_STRING *a,unsigned char **pp); +ASN1_BIT_STRING *c2i_ASN1_BIT_STRING(ASN1_BIT_STRING **a,const unsigned char **pp, + long length); +int ASN1_BIT_STRING_set(ASN1_BIT_STRING *a, unsigned char *d, + int length ); +int ASN1_BIT_STRING_set_bit(ASN1_BIT_STRING *a, int n, int value); +int ASN1_BIT_STRING_get_bit(ASN1_BIT_STRING *a, int n); +int ASN1_BIT_STRING_check(ASN1_BIT_STRING *a, + unsigned char *flags, int flags_len); + +#ifndef OPENSSL_NO_BIO +int ASN1_BIT_STRING_name_print(BIO *out, ASN1_BIT_STRING *bs, + BIT_STRING_BITNAME *tbl, int indent); +#endif +int ASN1_BIT_STRING_num_asc(char *name, BIT_STRING_BITNAME *tbl); +int ASN1_BIT_STRING_set_asc(ASN1_BIT_STRING *bs, char *name, int value, + BIT_STRING_BITNAME *tbl); + +int i2d_ASN1_BOOLEAN(int a,unsigned char **pp); +int d2i_ASN1_BOOLEAN(int *a,const unsigned char **pp,long length); + +DECLARE_ASN1_FUNCTIONS(ASN1_INTEGER) +int i2c_ASN1_INTEGER(ASN1_INTEGER *a,unsigned char **pp); +ASN1_INTEGER *c2i_ASN1_INTEGER(ASN1_INTEGER **a,const unsigned char **pp, + long length); +ASN1_INTEGER *d2i_ASN1_UINTEGER(ASN1_INTEGER **a,const unsigned char **pp, + long length); +ASN1_INTEGER * ASN1_INTEGER_dup(const ASN1_INTEGER *x); +int ASN1_INTEGER_cmp(const ASN1_INTEGER *x, const ASN1_INTEGER *y); + +DECLARE_ASN1_FUNCTIONS(ASN1_ENUMERATED) + +int ASN1_UTCTIME_check(ASN1_UTCTIME *a); +ASN1_UTCTIME *ASN1_UTCTIME_set(ASN1_UTCTIME *s,time_t t); +ASN1_UTCTIME *ASN1_UTCTIME_adj(ASN1_UTCTIME *s, time_t t, + int offset_day, long offset_sec); +int ASN1_UTCTIME_set_string(ASN1_UTCTIME *s, const char *str); +int ASN1_UTCTIME_cmp_time_t(const ASN1_UTCTIME *s, time_t t); +#if 0 +time_t ASN1_UTCTIME_get(const ASN1_UTCTIME *s); +#endif + +int ASN1_GENERALIZEDTIME_check(ASN1_GENERALIZEDTIME *a); +ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_set(ASN1_GENERALIZEDTIME *s,time_t t); +ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_adj(ASN1_GENERALIZEDTIME *s, + time_t t, int offset_day, long offset_sec); +int ASN1_GENERALIZEDTIME_set_string(ASN1_GENERALIZEDTIME *s, const char *str); + +DECLARE_ASN1_FUNCTIONS(ASN1_OCTET_STRING) +ASN1_OCTET_STRING * ASN1_OCTET_STRING_dup(const ASN1_OCTET_STRING *a); +int ASN1_OCTET_STRING_cmp(const ASN1_OCTET_STRING *a, const ASN1_OCTET_STRING *b); +int ASN1_OCTET_STRING_set(ASN1_OCTET_STRING *str, const unsigned char *data, int len); + +DECLARE_ASN1_FUNCTIONS(ASN1_VISIBLESTRING) +DECLARE_ASN1_FUNCTIONS(ASN1_UNIVERSALSTRING) +DECLARE_ASN1_FUNCTIONS(ASN1_UTF8STRING) +DECLARE_ASN1_FUNCTIONS(ASN1_NULL) +DECLARE_ASN1_FUNCTIONS(ASN1_BMPSTRING) + +int UTF8_getc(const unsigned char *str, int len, unsigned long *val); +int UTF8_putc(unsigned char *str, int len, unsigned long value); + +DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, ASN1_PRINTABLE) + +DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, DIRECTORYSTRING) +DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, DISPLAYTEXT) +DECLARE_ASN1_FUNCTIONS(ASN1_PRINTABLESTRING) +DECLARE_ASN1_FUNCTIONS(ASN1_T61STRING) +DECLARE_ASN1_FUNCTIONS(ASN1_IA5STRING) +DECLARE_ASN1_FUNCTIONS(ASN1_GENERALSTRING) +DECLARE_ASN1_FUNCTIONS(ASN1_UTCTIME) +DECLARE_ASN1_FUNCTIONS(ASN1_GENERALIZEDTIME) +DECLARE_ASN1_FUNCTIONS(ASN1_TIME) + +DECLARE_ASN1_ITEM(ASN1_OCTET_STRING_NDEF) + +ASN1_TIME *ASN1_TIME_set(ASN1_TIME *s,time_t t); +ASN1_TIME *ASN1_TIME_adj(ASN1_TIME *s,time_t t, + int offset_day, long offset_sec); +int ASN1_TIME_check(ASN1_TIME *t); +ASN1_GENERALIZEDTIME *ASN1_TIME_to_generalizedtime(ASN1_TIME *t, ASN1_GENERALIZEDTIME **out); +int ASN1_TIME_set_string(ASN1_TIME *s, const char *str); + +int i2d_ASN1_SET(STACK_OF(OPENSSL_BLOCK) *a, unsigned char **pp, + i2d_of_void *i2d, int ex_tag, int ex_class, + int is_set); +STACK_OF(OPENSSL_BLOCK) *d2i_ASN1_SET(STACK_OF(OPENSSL_BLOCK) **a, + const unsigned char **pp, + long length, d2i_of_void *d2i, + void (*free_func)(OPENSSL_BLOCK), int ex_tag, + int ex_class); + +#ifndef OPENSSL_NO_BIO +int i2a_ASN1_INTEGER(BIO *bp, ASN1_INTEGER *a); +int a2i_ASN1_INTEGER(BIO *bp,ASN1_INTEGER *bs,char *buf,int size); +int i2a_ASN1_ENUMERATED(BIO *bp, ASN1_ENUMERATED *a); +int a2i_ASN1_ENUMERATED(BIO *bp,ASN1_ENUMERATED *bs,char *buf,int size); +int i2a_ASN1_OBJECT(BIO *bp,ASN1_OBJECT *a); +int a2i_ASN1_STRING(BIO *bp,ASN1_STRING *bs,char *buf,int size); +int i2a_ASN1_STRING(BIO *bp, ASN1_STRING *a, int type); +#endif +int i2t_ASN1_OBJECT(char *buf,int buf_len,ASN1_OBJECT *a); + +int a2d_ASN1_OBJECT(unsigned char *out,int olen, const char *buf, int num); +ASN1_OBJECT *ASN1_OBJECT_create(int nid, unsigned char *data,int len, + const char *sn, const char *ln); + +int ASN1_INTEGER_set(ASN1_INTEGER *a, long v); +long ASN1_INTEGER_get(const ASN1_INTEGER *a); +ASN1_INTEGER *BN_to_ASN1_INTEGER(const BIGNUM *bn, ASN1_INTEGER *ai); +BIGNUM *ASN1_INTEGER_to_BN(const ASN1_INTEGER *ai,BIGNUM *bn); + +int ASN1_ENUMERATED_set(ASN1_ENUMERATED *a, long v); +long ASN1_ENUMERATED_get(ASN1_ENUMERATED *a); +ASN1_ENUMERATED *BN_to_ASN1_ENUMERATED(BIGNUM *bn, ASN1_ENUMERATED *ai); +BIGNUM *ASN1_ENUMERATED_to_BN(ASN1_ENUMERATED *ai,BIGNUM *bn); + +/* General */ +/* given a string, return the correct type, max is the maximum length */ +int ASN1_PRINTABLE_type(const unsigned char *s, int max); + +int i2d_ASN1_bytes(ASN1_STRING *a, unsigned char **pp, int tag, int xclass); +ASN1_STRING *d2i_ASN1_bytes(ASN1_STRING **a, const unsigned char **pp, + long length, int Ptag, int Pclass); +unsigned long ASN1_tag2bit(int tag); +/* type is one or more of the B_ASN1_ values. */ +ASN1_STRING *d2i_ASN1_type_bytes(ASN1_STRING **a,const unsigned char **pp, + long length,int type); + +/* PARSING */ +int asn1_Finish(ASN1_CTX *c); +int asn1_const_Finish(ASN1_const_CTX *c); + +/* SPECIALS */ +int ASN1_get_object(const unsigned char **pp, long *plength, int *ptag, + int *pclass, long omax); +int ASN1_check_infinite_end(unsigned char **p,long len); +int ASN1_const_check_infinite_end(const unsigned char **p,long len); +void ASN1_put_object(unsigned char **pp, int constructed, int length, + int tag, int xclass); +int ASN1_put_eoc(unsigned char **pp); +int ASN1_object_size(int constructed, int length, int tag); + +/* Used to implement other functions */ +void *ASN1_dup(i2d_of_void *i2d, d2i_of_void *d2i, void *x); + +#define ASN1_dup_of(type,i2d,d2i,x) \ + ((type*)ASN1_dup(CHECKED_I2D_OF(type, i2d), \ + CHECKED_D2I_OF(type, d2i), \ + CHECKED_PTR_OF(type, x))) + +#define ASN1_dup_of_const(type,i2d,d2i,x) \ + ((type*)ASN1_dup(CHECKED_I2D_OF(const type, i2d), \ + CHECKED_D2I_OF(type, d2i), \ + CHECKED_PTR_OF(const type, x))) + +void *ASN1_item_dup(const ASN1_ITEM *it, void *x); + +/* ASN1 alloc/free macros for when a type is only used internally */ + +#define M_ASN1_new_of(type) (type *)ASN1_item_new(ASN1_ITEM_rptr(type)) +#define M_ASN1_free_of(x, type) \ + ASN1_item_free(CHECKED_PTR_OF(type, x), ASN1_ITEM_rptr(type)) + +#ifndef OPENSSL_NO_FP_API +void *ASN1_d2i_fp(void *(*xnew)(void), d2i_of_void *d2i, FILE *in, void **x); + +#define ASN1_d2i_fp_of(type,xnew,d2i,in,x) \ + ((type*)ASN1_d2i_fp(CHECKED_NEW_OF(type, xnew), \ + CHECKED_D2I_OF(type, d2i), \ + in, \ + CHECKED_PPTR_OF(type, x))) + +void *ASN1_item_d2i_fp(const ASN1_ITEM *it, FILE *in, void *x); +int ASN1_i2d_fp(i2d_of_void *i2d,FILE *out,void *x); + +#define ASN1_i2d_fp_of(type,i2d,out,x) \ + (ASN1_i2d_fp(CHECKED_I2D_OF(type, i2d), \ + out, \ + CHECKED_PTR_OF(type, x))) + +#define ASN1_i2d_fp_of_const(type,i2d,out,x) \ + (ASN1_i2d_fp(CHECKED_I2D_OF(const type, i2d), \ + out, \ + CHECKED_PTR_OF(const type, x))) + +int ASN1_item_i2d_fp(const ASN1_ITEM *it, FILE *out, void *x); +int ASN1_STRING_print_ex_fp(FILE *fp, ASN1_STRING *str, unsigned long flags); +#endif + +int ASN1_STRING_to_UTF8(unsigned char **out, ASN1_STRING *in); + +#ifndef OPENSSL_NO_BIO +void *ASN1_d2i_bio(void *(*xnew)(void), d2i_of_void *d2i, BIO *in, void **x); + +#define ASN1_d2i_bio_of(type,xnew,d2i,in,x) \ + ((type*)ASN1_d2i_bio( CHECKED_NEW_OF(type, xnew), \ + CHECKED_D2I_OF(type, d2i), \ + in, \ + CHECKED_PPTR_OF(type, x))) + +void *ASN1_item_d2i_bio(const ASN1_ITEM *it, BIO *in, void *x); +int ASN1_i2d_bio(i2d_of_void *i2d,BIO *out, unsigned char *x); + +#define ASN1_i2d_bio_of(type,i2d,out,x) \ + (ASN1_i2d_bio(CHECKED_I2D_OF(type, i2d), \ + out, \ + CHECKED_PTR_OF(type, x))) + +#define ASN1_i2d_bio_of_const(type,i2d,out,x) \ + (ASN1_i2d_bio(CHECKED_I2D_OF(const type, i2d), \ + out, \ + CHECKED_PTR_OF(const type, x))) + +int ASN1_item_i2d_bio(const ASN1_ITEM *it, BIO *out, void *x); +int ASN1_UTCTIME_print(BIO *fp, const ASN1_UTCTIME *a); +int ASN1_GENERALIZEDTIME_print(BIO *fp, const ASN1_GENERALIZEDTIME *a); +int ASN1_TIME_print(BIO *fp, const ASN1_TIME *a); +int ASN1_STRING_print(BIO *bp, const ASN1_STRING *v); +int ASN1_STRING_print_ex(BIO *out, ASN1_STRING *str, unsigned long flags); +int ASN1_bn_print(BIO *bp, const char *number, const BIGNUM *num, + unsigned char *buf, int off); +int ASN1_parse(BIO *bp,const unsigned char *pp,long len,int indent); +int ASN1_parse_dump(BIO *bp,const unsigned char *pp,long len,int indent,int dump); +#endif +const char *ASN1_tag2str(int tag); + +/* Used to load and write netscape format cert */ + +DECLARE_ASN1_FUNCTIONS(NETSCAPE_X509) + +int ASN1_UNIVERSALSTRING_to_string(ASN1_UNIVERSALSTRING *s); + +int ASN1_TYPE_set_octetstring(ASN1_TYPE *a, + unsigned char *data, int len); +int ASN1_TYPE_get_octetstring(ASN1_TYPE *a, + unsigned char *data, int max_len); +int ASN1_TYPE_set_int_octetstring(ASN1_TYPE *a, long num, + unsigned char *data, int len); +int ASN1_TYPE_get_int_octetstring(ASN1_TYPE *a,long *num, + unsigned char *data, int max_len); + +STACK_OF(OPENSSL_BLOCK) *ASN1_seq_unpack(const unsigned char *buf, int len, + d2i_of_void *d2i, void (*free_func)(OPENSSL_BLOCK)); +unsigned char *ASN1_seq_pack(STACK_OF(OPENSSL_BLOCK) *safes, i2d_of_void *i2d, + unsigned char **buf, int *len ); +void *ASN1_unpack_string(ASN1_STRING *oct, d2i_of_void *d2i); +void *ASN1_item_unpack(ASN1_STRING *oct, const ASN1_ITEM *it); +ASN1_STRING *ASN1_pack_string(void *obj, i2d_of_void *i2d, + ASN1_OCTET_STRING **oct); + +#define ASN1_pack_string_of(type,obj,i2d,oct) \ + (ASN1_pack_string(CHECKED_PTR_OF(type, obj), \ + CHECKED_I2D_OF(type, i2d), \ + oct)) + +ASN1_STRING *ASN1_item_pack(void *obj, const ASN1_ITEM *it, ASN1_OCTET_STRING **oct); + +void ASN1_STRING_set_default_mask(unsigned long mask); +int ASN1_STRING_set_default_mask_asc(const char *p); +unsigned long ASN1_STRING_get_default_mask(void); +int ASN1_mbstring_copy(ASN1_STRING **out, const unsigned char *in, int len, + int inform, unsigned long mask); +int ASN1_mbstring_ncopy(ASN1_STRING **out, const unsigned char *in, int len, + int inform, unsigned long mask, + long minsize, long maxsize); + +ASN1_STRING *ASN1_STRING_set_by_NID(ASN1_STRING **out, + const unsigned char *in, int inlen, int inform, int nid); +ASN1_STRING_TABLE *ASN1_STRING_TABLE_get(int nid); +int ASN1_STRING_TABLE_add(int, long, long, unsigned long, unsigned long); +void ASN1_STRING_TABLE_cleanup(void); + +/* ASN1 template functions */ + +/* Old API compatible functions */ +ASN1_VALUE *ASN1_item_new(const ASN1_ITEM *it); +void ASN1_item_free(ASN1_VALUE *val, const ASN1_ITEM *it); +ASN1_VALUE * ASN1_item_d2i(ASN1_VALUE **val, const unsigned char **in, long len, const ASN1_ITEM *it); +int ASN1_item_i2d(ASN1_VALUE *val, unsigned char **out, const ASN1_ITEM *it); +int ASN1_item_ndef_i2d(ASN1_VALUE *val, unsigned char **out, const ASN1_ITEM *it); + +void ASN1_add_oid_module(void); + +ASN1_TYPE *ASN1_generate_nconf(char *str, CONF *nconf); +ASN1_TYPE *ASN1_generate_v3(char *str, X509V3_CTX *cnf); + +/* ASN1 Print flags */ + +/* Indicate missing OPTIONAL fields */ +#define ASN1_PCTX_FLAGS_SHOW_ABSENT 0x001 +/* Mark start and end of SEQUENCE */ +#define ASN1_PCTX_FLAGS_SHOW_SEQUENCE 0x002 +/* Mark start and end of SEQUENCE/SET OF */ +#define ASN1_PCTX_FLAGS_SHOW_SSOF 0x004 +/* Show the ASN1 type of primitives */ +#define ASN1_PCTX_FLAGS_SHOW_TYPE 0x008 +/* Don't show ASN1 type of ANY */ +#define ASN1_PCTX_FLAGS_NO_ANY_TYPE 0x010 +/* Don't show ASN1 type of MSTRINGs */ +#define ASN1_PCTX_FLAGS_NO_MSTRING_TYPE 0x020 +/* Don't show field names in SEQUENCE */ +#define ASN1_PCTX_FLAGS_NO_FIELD_NAME 0x040 +/* Show structure names of each SEQUENCE field */ +#define ASN1_PCTX_FLAGS_SHOW_FIELD_STRUCT_NAME 0x080 +/* Don't show structure name even at top level */ +#define ASN1_PCTX_FLAGS_NO_STRUCT_NAME 0x100 + +int ASN1_item_print(BIO *out, ASN1_VALUE *ifld, int indent, + const ASN1_ITEM *it, const ASN1_PCTX *pctx); +ASN1_PCTX *ASN1_PCTX_new(void); +void ASN1_PCTX_free(ASN1_PCTX *p); +unsigned long ASN1_PCTX_get_flags(ASN1_PCTX *p); +void ASN1_PCTX_set_flags(ASN1_PCTX *p, unsigned long flags); +unsigned long ASN1_PCTX_get_nm_flags(ASN1_PCTX *p); +void ASN1_PCTX_set_nm_flags(ASN1_PCTX *p, unsigned long flags); +unsigned long ASN1_PCTX_get_cert_flags(ASN1_PCTX *p); +void ASN1_PCTX_set_cert_flags(ASN1_PCTX *p, unsigned long flags); +unsigned long ASN1_PCTX_get_oid_flags(ASN1_PCTX *p); +void ASN1_PCTX_set_oid_flags(ASN1_PCTX *p, unsigned long flags); +unsigned long ASN1_PCTX_get_str_flags(ASN1_PCTX *p); +void ASN1_PCTX_set_str_flags(ASN1_PCTX *p, unsigned long flags); + +BIO_METHOD *BIO_f_asn1(void); + +BIO *BIO_new_NDEF(BIO *out, ASN1_VALUE *val, const ASN1_ITEM *it); + +int i2d_ASN1_bio_stream(BIO *out, ASN1_VALUE *val, BIO *in, int flags, + const ASN1_ITEM *it); +int PEM_write_bio_ASN1_stream(BIO *out, ASN1_VALUE *val, BIO *in, int flags, + const char *hdr, + const ASN1_ITEM *it); +int SMIME_write_ASN1(BIO *bio, ASN1_VALUE *val, BIO *data, int flags, + int ctype_nid, int econt_nid, + STACK_OF(X509_ALGOR) *mdalgs, + const ASN1_ITEM *it); +ASN1_VALUE *SMIME_read_ASN1(BIO *bio, BIO **bcont, const ASN1_ITEM *it); +int SMIME_crlf_copy(BIO *in, BIO *out, int flags); +int SMIME_text(BIO *in, BIO *out); + +/* BEGIN ERROR CODES */ +/* The following lines are auto generated by the script mkerr.pl. Any changes + * made after this point may be overwritten when the script is next run. + */ +void ERR_load_ASN1_strings(void); + +/* Error codes for the ASN1 functions. */ + +/* Function codes. */ +#define ASN1_F_A2D_ASN1_OBJECT 100 +#define ASN1_F_A2I_ASN1_ENUMERATED 101 +#define ASN1_F_A2I_ASN1_INTEGER 102 +#define ASN1_F_A2I_ASN1_STRING 103 +#define ASN1_F_APPEND_EXP 176 +#define ASN1_F_ASN1_BIT_STRING_SET_BIT 183 +#define ASN1_F_ASN1_CB 177 +#define ASN1_F_ASN1_CHECK_TLEN 104 +#define ASN1_F_ASN1_COLLATE_PRIMITIVE 105 +#define ASN1_F_ASN1_COLLECT 106 +#define ASN1_F_ASN1_D2I_EX_PRIMITIVE 108 +#define ASN1_F_ASN1_D2I_FP 109 +#define ASN1_F_ASN1_D2I_READ_BIO 107 +#define ASN1_F_ASN1_DIGEST 184 +#define ASN1_F_ASN1_DO_ADB 110 +#define ASN1_F_ASN1_DUP 111 +#define ASN1_F_ASN1_ENUMERATED_SET 112 +#define ASN1_F_ASN1_ENUMERATED_TO_BN 113 +#define ASN1_F_ASN1_EX_C2I 204 +#define ASN1_F_ASN1_FIND_END 190 +#define ASN1_F_ASN1_GENERALIZEDTIME_ADJ 216 +#define ASN1_F_ASN1_GENERALIZEDTIME_SET 185 +#define ASN1_F_ASN1_GENERATE_V3 178 +#define ASN1_F_ASN1_GET_OBJECT 114 +#define ASN1_F_ASN1_HEADER_NEW 115 +#define ASN1_F_ASN1_I2D_BIO 116 +#define ASN1_F_ASN1_I2D_FP 117 +#define ASN1_F_ASN1_INTEGER_SET 118 +#define ASN1_F_ASN1_INTEGER_TO_BN 119 +#define ASN1_F_ASN1_ITEM_D2I_FP 206 +#define ASN1_F_ASN1_ITEM_DUP 191 +#define ASN1_F_ASN1_ITEM_EX_COMBINE_NEW 121 +#define ASN1_F_ASN1_ITEM_EX_D2I 120 +#define ASN1_F_ASN1_ITEM_I2D_BIO 192 +#define ASN1_F_ASN1_ITEM_I2D_FP 193 +#define ASN1_F_ASN1_ITEM_PACK 198 +#define ASN1_F_ASN1_ITEM_SIGN 195 +#define ASN1_F_ASN1_ITEM_UNPACK 199 +#define ASN1_F_ASN1_ITEM_VERIFY 197 +#define ASN1_F_ASN1_MBSTRING_NCOPY 122 +#define ASN1_F_ASN1_OBJECT_NEW 123 +#define ASN1_F_ASN1_OUTPUT_DATA 214 +#define ASN1_F_ASN1_PACK_STRING 124 +#define ASN1_F_ASN1_PCTX_NEW 205 +#define ASN1_F_ASN1_PKCS5_PBE_SET 125 +#define ASN1_F_ASN1_SEQ_PACK 126 +#define ASN1_F_ASN1_SEQ_UNPACK 127 +#define ASN1_F_ASN1_SIGN 128 +#define ASN1_F_ASN1_STR2TYPE 179 +#define ASN1_F_ASN1_STRING_SET 186 +#define ASN1_F_ASN1_STRING_TABLE_ADD 129 +#define ASN1_F_ASN1_STRING_TYPE_NEW 130 +#define ASN1_F_ASN1_TEMPLATE_EX_D2I 132 +#define ASN1_F_ASN1_TEMPLATE_NEW 133 +#define ASN1_F_ASN1_TEMPLATE_NOEXP_D2I 131 +#define ASN1_F_ASN1_TIME_ADJ 217 +#define ASN1_F_ASN1_TIME_SET 175 +#define ASN1_F_ASN1_TYPE_GET_INT_OCTETSTRING 134 +#define ASN1_F_ASN1_TYPE_GET_OCTETSTRING 135 +#define ASN1_F_ASN1_UNPACK_STRING 136 +#define ASN1_F_ASN1_UTCTIME_ADJ 218 +#define ASN1_F_ASN1_UTCTIME_SET 187 +#define ASN1_F_ASN1_VERIFY 137 +#define ASN1_F_B64_READ_ASN1 209 +#define ASN1_F_B64_WRITE_ASN1 210 +#define ASN1_F_BIO_NEW_NDEF 208 +#define ASN1_F_BITSTR_CB 180 +#define ASN1_F_BN_TO_ASN1_ENUMERATED 138 +#define ASN1_F_BN_TO_ASN1_INTEGER 139 +#define ASN1_F_C2I_ASN1_BIT_STRING 189 +#define ASN1_F_C2I_ASN1_INTEGER 194 +#define ASN1_F_C2I_ASN1_OBJECT 196 +#define ASN1_F_COLLECT_DATA 140 +#define ASN1_F_D2I_ASN1_BIT_STRING 141 +#define ASN1_F_D2I_ASN1_BOOLEAN 142 +#define ASN1_F_D2I_ASN1_BYTES 143 +#define ASN1_F_D2I_ASN1_GENERALIZEDTIME 144 +#define ASN1_F_D2I_ASN1_HEADER 145 +#define ASN1_F_D2I_ASN1_INTEGER 146 +#define ASN1_F_D2I_ASN1_OBJECT 147 +#define ASN1_F_D2I_ASN1_SET 148 +#define ASN1_F_D2I_ASN1_TYPE_BYTES 149 +#define ASN1_F_D2I_ASN1_UINTEGER 150 +#define ASN1_F_D2I_ASN1_UTCTIME 151 +#define ASN1_F_D2I_AUTOPRIVATEKEY 207 +#define ASN1_F_D2I_NETSCAPE_RSA 152 +#define ASN1_F_D2I_NETSCAPE_RSA_2 153 +#define ASN1_F_D2I_PRIVATEKEY 154 +#define ASN1_F_D2I_PUBLICKEY 155 +#define ASN1_F_D2I_RSA_NET 200 +#define ASN1_F_D2I_RSA_NET_2 201 +#define ASN1_F_D2I_X509 156 +#define ASN1_F_D2I_X509_CINF 157 +#define ASN1_F_D2I_X509_PKEY 159 +#define ASN1_F_I2D_ASN1_BIO_STREAM 211 +#define ASN1_F_I2D_ASN1_SET 188 +#define ASN1_F_I2D_ASN1_TIME 160 +#define ASN1_F_I2D_DSA_PUBKEY 161 +#define ASN1_F_I2D_EC_PUBKEY 181 +#define ASN1_F_I2D_PRIVATEKEY 163 +#define ASN1_F_I2D_PUBLICKEY 164 +#define ASN1_F_I2D_RSA_NET 162 +#define ASN1_F_I2D_RSA_PUBKEY 165 +#define ASN1_F_LONG_C2I 166 +#define ASN1_F_OID_MODULE_INIT 174 +#define ASN1_F_PARSE_TAGGING 182 +#define ASN1_F_PKCS5_PBE2_SET_IV 167 +#define ASN1_F_PKCS5_PBE_SET 202 +#define ASN1_F_PKCS5_PBE_SET0_ALGOR 215 +#define ASN1_F_SMIME_READ_ASN1 212 +#define ASN1_F_SMIME_TEXT 213 +#define ASN1_F_X509_CINF_NEW 168 +#define ASN1_F_X509_CRL_ADD0_REVOKED 169 +#define ASN1_F_X509_INFO_NEW 170 +#define ASN1_F_X509_NAME_ENCODE 203 +#define ASN1_F_X509_NAME_EX_D2I 158 +#define ASN1_F_X509_NAME_EX_NEW 171 +#define ASN1_F_X509_NEW 172 +#define ASN1_F_X509_PKEY_NEW 173 + +/* Reason codes. */ +#define ASN1_R_ADDING_OBJECT 171 +#define ASN1_R_ASN1_PARSE_ERROR 203 +#define ASN1_R_ASN1_SIG_PARSE_ERROR 204 +#define ASN1_R_AUX_ERROR 100 +#define ASN1_R_BAD_CLASS 101 +#define ASN1_R_BAD_OBJECT_HEADER 102 +#define ASN1_R_BAD_PASSWORD_READ 103 +#define ASN1_R_BAD_TAG 104 +#define ASN1_R_BMPSTRING_IS_WRONG_LENGTH 214 +#define ASN1_R_BN_LIB 105 +#define ASN1_R_BOOLEAN_IS_WRONG_LENGTH 106 +#define ASN1_R_BUFFER_TOO_SMALL 107 +#define ASN1_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER 108 +#define ASN1_R_DATA_IS_WRONG 109 +#define ASN1_R_DECODE_ERROR 110 +#define ASN1_R_DECODING_ERROR 111 +#define ASN1_R_DEPTH_EXCEEDED 174 +#define ASN1_R_DIGEST_AND_KEY_TYPE_NOT_SUPPORTED 198 +#define ASN1_R_ENCODE_ERROR 112 +#define ASN1_R_ERROR_GETTING_TIME 173 +#define ASN1_R_ERROR_LOADING_SECTION 172 +#define ASN1_R_ERROR_PARSING_SET_ELEMENT 113 +#define ASN1_R_ERROR_SETTING_CIPHER_PARAMS 114 +#define ASN1_R_EXPECTING_AN_INTEGER 115 +#define ASN1_R_EXPECTING_AN_OBJECT 116 +#define ASN1_R_EXPECTING_A_BOOLEAN 117 +#define ASN1_R_EXPECTING_A_TIME 118 +#define ASN1_R_EXPLICIT_LENGTH_MISMATCH 119 +#define ASN1_R_EXPLICIT_TAG_NOT_CONSTRUCTED 120 +#define ASN1_R_FIELD_MISSING 121 +#define ASN1_R_FIRST_NUM_TOO_LARGE 122 +#define ASN1_R_HEADER_TOO_LONG 123 +#define ASN1_R_ILLEGAL_BITSTRING_FORMAT 175 +#define ASN1_R_ILLEGAL_BOOLEAN 176 +#define ASN1_R_ILLEGAL_CHARACTERS 124 +#define ASN1_R_ILLEGAL_FORMAT 177 +#define ASN1_R_ILLEGAL_HEX 178 +#define ASN1_R_ILLEGAL_IMPLICIT_TAG 179 +#define ASN1_R_ILLEGAL_INTEGER 180 +#define ASN1_R_ILLEGAL_NESTED_TAGGING 181 +#define ASN1_R_ILLEGAL_NULL 125 +#define ASN1_R_ILLEGAL_NULL_VALUE 182 +#define ASN1_R_ILLEGAL_OBJECT 183 +#define ASN1_R_ILLEGAL_OPTIONAL_ANY 126 +#define ASN1_R_ILLEGAL_OPTIONS_ON_ITEM_TEMPLATE 170 +#define ASN1_R_ILLEGAL_TAGGED_ANY 127 +#define ASN1_R_ILLEGAL_TIME_VALUE 184 +#define ASN1_R_INTEGER_NOT_ASCII_FORMAT 185 +#define ASN1_R_INTEGER_TOO_LARGE_FOR_LONG 128 +#define ASN1_R_INVALID_BMPSTRING_LENGTH 129 +#define ASN1_R_INVALID_DIGIT 130 +#define ASN1_R_INVALID_MIME_TYPE 205 +#define ASN1_R_INVALID_MODIFIER 186 +#define ASN1_R_INVALID_NUMBER 187 +#define ASN1_R_INVALID_OBJECT_ENCODING 216 +#define ASN1_R_INVALID_SEPARATOR 131 +#define ASN1_R_INVALID_TIME_FORMAT 132 +#define ASN1_R_INVALID_UNIVERSALSTRING_LENGTH 133 +#define ASN1_R_INVALID_UTF8STRING 134 +#define ASN1_R_IV_TOO_LARGE 135 +#define ASN1_R_LENGTH_ERROR 136 +#define ASN1_R_LIST_ERROR 188 +#define ASN1_R_MIME_NO_CONTENT_TYPE 206 +#define ASN1_R_MIME_PARSE_ERROR 207 +#define ASN1_R_MIME_SIG_PARSE_ERROR 208 +#define ASN1_R_MISSING_EOC 137 +#define ASN1_R_MISSING_SECOND_NUMBER 138 +#define ASN1_R_MISSING_VALUE 189 +#define ASN1_R_MSTRING_NOT_UNIVERSAL 139 +#define ASN1_R_MSTRING_WRONG_TAG 140 +#define ASN1_R_NESTED_ASN1_STRING 197 +#define ASN1_R_NON_HEX_CHARACTERS 141 +#define ASN1_R_NOT_ASCII_FORMAT 190 +#define ASN1_R_NOT_ENOUGH_DATA 142 +#define ASN1_R_NO_CONTENT_TYPE 209 +#define ASN1_R_NO_DEFAULT_DIGEST 201 +#define ASN1_R_NO_MATCHING_CHOICE_TYPE 143 +#define ASN1_R_NO_MULTIPART_BODY_FAILURE 210 +#define ASN1_R_NO_MULTIPART_BOUNDARY 211 +#define ASN1_R_NO_SIG_CONTENT_TYPE 212 +#define ASN1_R_NULL_IS_WRONG_LENGTH 144 +#define ASN1_R_OBJECT_NOT_ASCII_FORMAT 191 +#define ASN1_R_ODD_NUMBER_OF_CHARS 145 +#define ASN1_R_PRIVATE_KEY_HEADER_MISSING 146 +#define ASN1_R_SECOND_NUMBER_TOO_LARGE 147 +#define ASN1_R_SEQUENCE_LENGTH_MISMATCH 148 +#define ASN1_R_SEQUENCE_NOT_CONSTRUCTED 149 +#define ASN1_R_SEQUENCE_OR_SET_NEEDS_CONFIG 192 +#define ASN1_R_SHORT_LINE 150 +#define ASN1_R_SIG_INVALID_MIME_TYPE 213 +#define ASN1_R_STREAMING_NOT_SUPPORTED 202 +#define ASN1_R_STRING_TOO_LONG 151 +#define ASN1_R_STRING_TOO_SHORT 152 +#define ASN1_R_TAG_VALUE_TOO_HIGH 153 +#define ASN1_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD 154 +#define ASN1_R_TIME_NOT_ASCII_FORMAT 193 +#define ASN1_R_TOO_LONG 155 +#define ASN1_R_TYPE_NOT_CONSTRUCTED 156 +#define ASN1_R_UNABLE_TO_DECODE_RSA_KEY 157 +#define ASN1_R_UNABLE_TO_DECODE_RSA_PRIVATE_KEY 158 +#define ASN1_R_UNEXPECTED_EOC 159 +#define ASN1_R_UNIVERSALSTRING_IS_WRONG_LENGTH 215 +#define ASN1_R_UNKNOWN_FORMAT 160 +#define ASN1_R_UNKNOWN_MESSAGE_DIGEST_ALGORITHM 161 +#define ASN1_R_UNKNOWN_OBJECT_TYPE 162 +#define ASN1_R_UNKNOWN_PUBLIC_KEY_TYPE 163 +#define ASN1_R_UNKNOWN_SIGNATURE_ALGORITHM 199 +#define ASN1_R_UNKNOWN_TAG 194 +#define ASN1_R_UNKOWN_FORMAT 195 +#define ASN1_R_UNSUPPORTED_ANY_DEFINED_BY_TYPE 164 +#define ASN1_R_UNSUPPORTED_CIPHER 165 +#define ASN1_R_UNSUPPORTED_ENCRYPTION_ALGORITHM 166 +#define ASN1_R_UNSUPPORTED_PUBLIC_KEY_TYPE 167 +#define ASN1_R_UNSUPPORTED_TYPE 196 +#define ASN1_R_WRONG_PUBLIC_KEY_TYPE 200 +#define ASN1_R_WRONG_TAG 168 +#define ASN1_R_WRONG_TYPE 169 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/extra_lib/include/openssl/bio.h b/extra_lib/include/openssl/bio.h new file mode 100644 index 0000000..152802f --- /dev/null +++ b/extra_lib/include/openssl/bio.h @@ -0,0 +1,770 @@ +/* crypto/bio/bio.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 AUTHOR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_BIO_H +#define HEADER_BIO_H + +#include + +#ifndef OPENSSL_NO_FP_API +# include +#endif +#include + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* These are the 'types' of BIOs */ +#define BIO_TYPE_NONE 0 +#define BIO_TYPE_MEM (1|0x0400) +#define BIO_TYPE_FILE (2|0x0400) + +#define BIO_TYPE_FD (4|0x0400|0x0100) +#define BIO_TYPE_SOCKET (5|0x0400|0x0100) +#define BIO_TYPE_NULL (6|0x0400) +#define BIO_TYPE_SSL (7|0x0200) +#define BIO_TYPE_MD (8|0x0200) /* passive filter */ +#define BIO_TYPE_BUFFER (9|0x0200) /* filter */ +#define BIO_TYPE_CIPHER (10|0x0200) /* filter */ +#define BIO_TYPE_BASE64 (11|0x0200) /* filter */ +#define BIO_TYPE_CONNECT (12|0x0400|0x0100) /* socket - connect */ +#define BIO_TYPE_ACCEPT (13|0x0400|0x0100) /* socket for accept */ +#define BIO_TYPE_PROXY_CLIENT (14|0x0200) /* client proxy BIO */ +#define BIO_TYPE_PROXY_SERVER (15|0x0200) /* server proxy BIO */ +#define BIO_TYPE_NBIO_TEST (16|0x0200) /* server proxy BIO */ +#define BIO_TYPE_NULL_FILTER (17|0x0200) +#define BIO_TYPE_BER (18|0x0200) /* BER -> bin filter */ +#define BIO_TYPE_BIO (19|0x0400) /* (half a) BIO pair */ +#define BIO_TYPE_LINEBUFFER (20|0x0200) /* filter */ +#define BIO_TYPE_DGRAM (21|0x0400|0x0100) +#define BIO_TYPE_ASN1 (22|0x0200) /* filter */ +#define BIO_TYPE_COMP (23|0x0200) /* filter */ + +#define BIO_TYPE_DESCRIPTOR 0x0100 /* socket, fd, connect or accept */ +#define BIO_TYPE_FILTER 0x0200 +#define BIO_TYPE_SOURCE_SINK 0x0400 + +/* BIO_FILENAME_READ|BIO_CLOSE to open or close on free. + * BIO_set_fp(in,stdin,BIO_NOCLOSE); */ +#define BIO_NOCLOSE 0x00 +#define BIO_CLOSE 0x01 + +/* These are used in the following macros and are passed to + * BIO_ctrl() */ +#define BIO_CTRL_RESET 1 /* opt - rewind/zero etc */ +#define BIO_CTRL_EOF 2 /* opt - are we at the eof */ +#define BIO_CTRL_INFO 3 /* opt - extra tit-bits */ +#define BIO_CTRL_SET 4 /* man - set the 'IO' type */ +#define BIO_CTRL_GET 5 /* man - get the 'IO' type */ +#define BIO_CTRL_PUSH 6 /* opt - internal, used to signify change */ +#define BIO_CTRL_POP 7 /* opt - internal, used to signify change */ +#define BIO_CTRL_GET_CLOSE 8 /* man - set the 'close' on free */ +#define BIO_CTRL_SET_CLOSE 9 /* man - set the 'close' on free */ +#define BIO_CTRL_PENDING 10 /* opt - is their more data buffered */ +#define BIO_CTRL_FLUSH 11 /* opt - 'flush' buffered output */ +#define BIO_CTRL_DUP 12 /* man - extra stuff for 'duped' BIO */ +#define BIO_CTRL_WPENDING 13 /* opt - number of bytes still to write */ +/* callback is int cb(BIO *bio,state,ret); */ +#define BIO_CTRL_SET_CALLBACK 14 /* opt - set callback function */ +#define BIO_CTRL_GET_CALLBACK 15 /* opt - set callback function */ + +#define BIO_CTRL_SET_FILENAME 30 /* BIO_s_file special */ + +/* dgram BIO stuff */ +#define BIO_CTRL_DGRAM_CONNECT 31 /* BIO dgram special */ +#define BIO_CTRL_DGRAM_SET_CONNECTED 32 /* allow for an externally + * connected socket to be + * passed in */ +#define BIO_CTRL_DGRAM_SET_RECV_TIMEOUT 33 /* setsockopt, essentially */ +#define BIO_CTRL_DGRAM_GET_RECV_TIMEOUT 34 /* getsockopt, essentially */ +#define BIO_CTRL_DGRAM_SET_SEND_TIMEOUT 35 /* setsockopt, essentially */ +#define BIO_CTRL_DGRAM_GET_SEND_TIMEOUT 36 /* getsockopt, essentially */ + +#define BIO_CTRL_DGRAM_GET_RECV_TIMER_EXP 37 /* flag whether the last */ +#define BIO_CTRL_DGRAM_GET_SEND_TIMER_EXP 38 /* I/O operation tiemd out */ + +/* #ifdef IP_MTU_DISCOVER */ +#define BIO_CTRL_DGRAM_MTU_DISCOVER 39 /* set DF bit on egress packets */ +/* #endif */ + +#define BIO_CTRL_DGRAM_QUERY_MTU 40 /* as kernel for current MTU */ +#define BIO_CTRL_DGRAM_GET_MTU 41 /* get cached value for MTU */ +#define BIO_CTRL_DGRAM_SET_MTU 42 /* set cached value for + * MTU. want to use this + * if asking the kernel + * fails */ + +#define BIO_CTRL_DGRAM_MTU_EXCEEDED 43 /* check whether the MTU + * was exceed in the + * previous write + * operation */ + +#define BIO_CTRL_DGRAM_GET_PEER 46 +#define BIO_CTRL_DGRAM_SET_PEER 44 /* Destination for the data */ + +#define BIO_CTRL_DGRAM_SET_NEXT_TIMEOUT 45 /* Next DTLS handshake timeout to + * adjust socket timeouts */ + +/* modifiers */ +#define BIO_FP_READ 0x02 +#define BIO_FP_WRITE 0x04 +#define BIO_FP_APPEND 0x08 +#define BIO_FP_TEXT 0x10 + +#define BIO_FLAGS_READ 0x01 +#define BIO_FLAGS_WRITE 0x02 +#define BIO_FLAGS_IO_SPECIAL 0x04 +#define BIO_FLAGS_RWS (BIO_FLAGS_READ|BIO_FLAGS_WRITE|BIO_FLAGS_IO_SPECIAL) +#define BIO_FLAGS_SHOULD_RETRY 0x08 +#ifndef BIO_FLAGS_UPLINK +/* "UPLINK" flag denotes file descriptors provided by application. + It defaults to 0, as most platforms don't require UPLINK interface. */ +#define BIO_FLAGS_UPLINK 0 +#endif + +/* Used in BIO_gethostbyname() */ +#define BIO_GHBN_CTRL_HITS 1 +#define BIO_GHBN_CTRL_MISSES 2 +#define BIO_GHBN_CTRL_CACHE_SIZE 3 +#define BIO_GHBN_CTRL_GET_ENTRY 4 +#define BIO_GHBN_CTRL_FLUSH 5 + +/* Mostly used in the SSL BIO */ +/* Not used anymore + * #define BIO_FLAGS_PROTOCOL_DELAYED_READ 0x10 + * #define BIO_FLAGS_PROTOCOL_DELAYED_WRITE 0x20 + * #define BIO_FLAGS_PROTOCOL_STARTUP 0x40 + */ + +#define BIO_FLAGS_BASE64_NO_NL 0x100 + +/* This is used with memory BIOs: it means we shouldn't free up or change the + * data in any way. + */ +#define BIO_FLAGS_MEM_RDONLY 0x200 + +typedef struct bio_st BIO; + +void BIO_set_flags(BIO *b, int flags); +int BIO_test_flags(const BIO *b, int flags); +void BIO_clear_flags(BIO *b, int flags); + +#define BIO_get_flags(b) BIO_test_flags(b, ~(0x0)) +#define BIO_set_retry_special(b) \ + BIO_set_flags(b, (BIO_FLAGS_IO_SPECIAL|BIO_FLAGS_SHOULD_RETRY)) +#define BIO_set_retry_read(b) \ + BIO_set_flags(b, (BIO_FLAGS_READ|BIO_FLAGS_SHOULD_RETRY)) +#define BIO_set_retry_write(b) \ + BIO_set_flags(b, (BIO_FLAGS_WRITE|BIO_FLAGS_SHOULD_RETRY)) + +/* These are normally used internally in BIOs */ +#define BIO_clear_retry_flags(b) \ + BIO_clear_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY)) +#define BIO_get_retry_flags(b) \ + BIO_test_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY)) + +/* These should be used by the application to tell why we should retry */ +#define BIO_should_read(a) BIO_test_flags(a, BIO_FLAGS_READ) +#define BIO_should_write(a) BIO_test_flags(a, BIO_FLAGS_WRITE) +#define BIO_should_io_special(a) BIO_test_flags(a, BIO_FLAGS_IO_SPECIAL) +#define BIO_retry_type(a) BIO_test_flags(a, BIO_FLAGS_RWS) +#define BIO_should_retry(a) BIO_test_flags(a, BIO_FLAGS_SHOULD_RETRY) + +/* The next three are used in conjunction with the + * BIO_should_io_special() condition. After this returns true, + * BIO *BIO_get_retry_BIO(BIO *bio, int *reason); will walk the BIO + * stack and return the 'reason' for the special and the offending BIO. + * Given a BIO, BIO_get_retry_reason(bio) will return the code. */ +/* Returned from the SSL bio when the certificate retrieval code had an error */ +#define BIO_RR_SSL_X509_LOOKUP 0x01 +/* Returned from the connect BIO when a connect would have blocked */ +#define BIO_RR_CONNECT 0x02 +/* Returned from the accept BIO when an accept would have blocked */ +#define BIO_RR_ACCEPT 0x03 + +/* These are passed by the BIO callback */ +#define BIO_CB_FREE 0x01 +#define BIO_CB_READ 0x02 +#define BIO_CB_WRITE 0x03 +#define BIO_CB_PUTS 0x04 +#define BIO_CB_GETS 0x05 +#define BIO_CB_CTRL 0x06 + +/* The callback is called before and after the underling operation, + * The BIO_CB_RETURN flag indicates if it is after the call */ +#define BIO_CB_RETURN 0x80 +#define BIO_CB_return(a) ((a)|BIO_CB_RETURN)) +#define BIO_cb_pre(a) (!((a)&BIO_CB_RETURN)) +#define BIO_cb_post(a) ((a)&BIO_CB_RETURN) + +long (*BIO_get_callback(const BIO *b)) (struct bio_st *,int,const char *,int, long,long); +void BIO_set_callback(BIO *b, + long (*callback)(struct bio_st *,int,const char *,int, long,long)); +char *BIO_get_callback_arg(const BIO *b); +void BIO_set_callback_arg(BIO *b, char *arg); + +const char * BIO_method_name(const BIO *b); +int BIO_method_type(const BIO *b); + +typedef void bio_info_cb(struct bio_st *, int, const char *, int, long, long); + +typedef struct bio_method_st + { + int type; + const char *name; + int (*bwrite)(BIO *, const char *, int); + int (*bread)(BIO *, char *, int); + int (*bputs)(BIO *, const char *); + int (*bgets)(BIO *, char *, int); + long (*ctrl)(BIO *, int, long, void *); + int (*create)(BIO *); + int (*destroy)(BIO *); + long (*callback_ctrl)(BIO *, int, bio_info_cb *); + } BIO_METHOD; + +struct bio_st + { + BIO_METHOD *method; + /* bio, mode, argp, argi, argl, ret */ + long (*callback)(struct bio_st *,int,const char *,int, long,long); + char *cb_arg; /* first argument for the callback */ + + int init; + int shutdown; + int flags; /* extra storage */ + int retry_reason; + int num; + void *ptr; + struct bio_st *next_bio; /* used by filter BIOs */ + struct bio_st *prev_bio; /* used by filter BIOs */ + int references; + unsigned long num_read; + unsigned long num_write; + + CRYPTO_EX_DATA ex_data; + }; + +DECLARE_STACK_OF(BIO) + +typedef struct bio_f_buffer_ctx_struct + { + /* BIO *bio; */ /* this is now in the BIO struct */ + int ibuf_size; /* how big is the input buffer */ + int obuf_size; /* how big is the output buffer */ + + char *ibuf; /* the char array */ + int ibuf_len; /* how many bytes are in it */ + int ibuf_off; /* write/read offset */ + + char *obuf; /* the char array */ + int obuf_len; /* how many bytes are in it */ + int obuf_off; /* write/read offset */ + } BIO_F_BUFFER_CTX; + +/* Prefix and suffix callback in ASN1 BIO */ +typedef int asn1_ps_func(BIO *b, unsigned char **pbuf, int *plen, void *parg); + +/* connect BIO stuff */ +#define BIO_CONN_S_BEFORE 1 +#define BIO_CONN_S_GET_IP 2 +#define BIO_CONN_S_GET_PORT 3 +#define BIO_CONN_S_CREATE_SOCKET 4 +#define BIO_CONN_S_CONNECT 5 +#define BIO_CONN_S_OK 6 +#define BIO_CONN_S_BLOCKED_CONNECT 7 +#define BIO_CONN_S_NBIO 8 +/*#define BIO_CONN_get_param_hostname BIO_ctrl */ + +#define BIO_C_SET_CONNECT 100 +#define BIO_C_DO_STATE_MACHINE 101 +#define BIO_C_SET_NBIO 102 +#define BIO_C_SET_PROXY_PARAM 103 +#define BIO_C_SET_FD 104 +#define BIO_C_GET_FD 105 +#define BIO_C_SET_FILE_PTR 106 +#define BIO_C_GET_FILE_PTR 107 +#define BIO_C_SET_FILENAME 108 +#define BIO_C_SET_SSL 109 +#define BIO_C_GET_SSL 110 +#define BIO_C_SET_MD 111 +#define BIO_C_GET_MD 112 +#define BIO_C_GET_CIPHER_STATUS 113 +#define BIO_C_SET_BUF_MEM 114 +#define BIO_C_GET_BUF_MEM_PTR 115 +#define BIO_C_GET_BUFF_NUM_LINES 116 +#define BIO_C_SET_BUFF_SIZE 117 +#define BIO_C_SET_ACCEPT 118 +#define BIO_C_SSL_MODE 119 +#define BIO_C_GET_MD_CTX 120 +#define BIO_C_GET_PROXY_PARAM 121 +#define BIO_C_SET_BUFF_READ_DATA 122 /* data to read first */ +#define BIO_C_GET_CONNECT 123 +#define BIO_C_GET_ACCEPT 124 +#define BIO_C_SET_SSL_RENEGOTIATE_BYTES 125 +#define BIO_C_GET_SSL_NUM_RENEGOTIATES 126 +#define BIO_C_SET_SSL_RENEGOTIATE_TIMEOUT 127 +#define BIO_C_FILE_SEEK 128 +#define BIO_C_GET_CIPHER_CTX 129 +#define BIO_C_SET_BUF_MEM_EOF_RETURN 130/*return end of input value*/ +#define BIO_C_SET_BIND_MODE 131 +#define BIO_C_GET_BIND_MODE 132 +#define BIO_C_FILE_TELL 133 +#define BIO_C_GET_SOCKS 134 +#define BIO_C_SET_SOCKS 135 + +#define BIO_C_SET_WRITE_BUF_SIZE 136/* for BIO_s_bio */ +#define BIO_C_GET_WRITE_BUF_SIZE 137 +#define BIO_C_MAKE_BIO_PAIR 138 +#define BIO_C_DESTROY_BIO_PAIR 139 +#define BIO_C_GET_WRITE_GUARANTEE 140 +#define BIO_C_GET_READ_REQUEST 141 +#define BIO_C_SHUTDOWN_WR 142 +#define BIO_C_NREAD0 143 +#define BIO_C_NREAD 144 +#define BIO_C_NWRITE0 145 +#define BIO_C_NWRITE 146 +#define BIO_C_RESET_READ_REQUEST 147 +#define BIO_C_SET_MD_CTX 148 + +#define BIO_C_SET_PREFIX 149 +#define BIO_C_GET_PREFIX 150 +#define BIO_C_SET_SUFFIX 151 +#define BIO_C_GET_SUFFIX 152 + +#define BIO_C_SET_EX_ARG 153 +#define BIO_C_GET_EX_ARG 154 + +#define BIO_set_app_data(s,arg) BIO_set_ex_data(s,0,arg) +#define BIO_get_app_data(s) BIO_get_ex_data(s,0) + +/* BIO_s_connect() and BIO_s_socks4a_connect() */ +#define BIO_set_conn_hostname(b,name) BIO_ctrl(b,BIO_C_SET_CONNECT,0,(char *)name) +#define BIO_set_conn_port(b,port) BIO_ctrl(b,BIO_C_SET_CONNECT,1,(char *)port) +#define BIO_set_conn_ip(b,ip) BIO_ctrl(b,BIO_C_SET_CONNECT,2,(char *)ip) +#define BIO_set_conn_int_port(b,port) BIO_ctrl(b,BIO_C_SET_CONNECT,3,(char *)port) +#define BIO_get_conn_hostname(b) BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,0) +#define BIO_get_conn_port(b) BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,1) +#define BIO_get_conn_ip(b) BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,2) +#define BIO_get_conn_int_port(b) BIO_int_ctrl(b,BIO_C_GET_CONNECT,3,0) + + +#define BIO_set_nbio(b,n) BIO_ctrl(b,BIO_C_SET_NBIO,(n),NULL) + +/* BIO_s_accept_socket() */ +#define BIO_set_accept_port(b,name) BIO_ctrl(b,BIO_C_SET_ACCEPT,0,(char *)name) +#define BIO_get_accept_port(b) BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,0) +/* #define BIO_set_nbio(b,n) BIO_ctrl(b,BIO_C_SET_NBIO,(n),NULL) */ +#define BIO_set_nbio_accept(b,n) BIO_ctrl(b,BIO_C_SET_ACCEPT,1,(n)?(void *)"a":NULL) +#define BIO_set_accept_bios(b,bio) BIO_ctrl(b,BIO_C_SET_ACCEPT,2,(char *)bio) + +#define BIO_BIND_NORMAL 0 +#define BIO_BIND_REUSEADDR_IF_UNUSED 1 +#define BIO_BIND_REUSEADDR 2 +#define BIO_set_bind_mode(b,mode) BIO_ctrl(b,BIO_C_SET_BIND_MODE,mode,NULL) +#define BIO_get_bind_mode(b,mode) BIO_ctrl(b,BIO_C_GET_BIND_MODE,0,NULL) + +#define BIO_do_connect(b) BIO_do_handshake(b) +#define BIO_do_accept(b) BIO_do_handshake(b) +#define BIO_do_handshake(b) BIO_ctrl(b,BIO_C_DO_STATE_MACHINE,0,NULL) + +/* BIO_s_proxy_client() */ +#define BIO_set_url(b,url) BIO_ctrl(b,BIO_C_SET_PROXY_PARAM,0,(char *)(url)) +#define BIO_set_proxies(b,p) BIO_ctrl(b,BIO_C_SET_PROXY_PARAM,1,(char *)(p)) +/* BIO_set_nbio(b,n) */ +#define BIO_set_filter_bio(b,s) BIO_ctrl(b,BIO_C_SET_PROXY_PARAM,2,(char *)(s)) +/* BIO *BIO_get_filter_bio(BIO *bio); */ +#define BIO_set_proxy_cb(b,cb) BIO_callback_ctrl(b,BIO_C_SET_PROXY_PARAM,3,(void *(*cb)())) +#define BIO_set_proxy_header(b,sk) BIO_ctrl(b,BIO_C_SET_PROXY_PARAM,4,(char *)sk) +#define BIO_set_no_connect_return(b,bool) BIO_int_ctrl(b,BIO_C_SET_PROXY_PARAM,5,bool) + +#define BIO_get_proxy_header(b,skp) BIO_ctrl(b,BIO_C_GET_PROXY_PARAM,0,(char *)skp) +#define BIO_get_proxies(b,pxy_p) BIO_ctrl(b,BIO_C_GET_PROXY_PARAM,1,(char *)(pxy_p)) +#define BIO_get_url(b,url) BIO_ctrl(b,BIO_C_GET_PROXY_PARAM,2,(char *)(url)) +#define BIO_get_no_connect_return(b) BIO_ctrl(b,BIO_C_GET_PROXY_PARAM,5,NULL) + +#define BIO_set_fd(b,fd,c) BIO_int_ctrl(b,BIO_C_SET_FD,c,fd) +#define BIO_get_fd(b,c) BIO_ctrl(b,BIO_C_GET_FD,0,(char *)c) + +#define BIO_set_fp(b,fp,c) BIO_ctrl(b,BIO_C_SET_FILE_PTR,c,(char *)fp) +#define BIO_get_fp(b,fpp) BIO_ctrl(b,BIO_C_GET_FILE_PTR,0,(char *)fpp) + +#define BIO_seek(b,ofs) (int)BIO_ctrl(b,BIO_C_FILE_SEEK,ofs,NULL) +#define BIO_tell(b) (int)BIO_ctrl(b,BIO_C_FILE_TELL,0,NULL) + +/* name is cast to lose const, but might be better to route through a function + so we can do it safely */ +#ifdef CONST_STRICT +/* If you are wondering why this isn't defined, its because CONST_STRICT is + * purely a compile-time kludge to allow const to be checked. + */ +int BIO_read_filename(BIO *b,const char *name); +#else +#define BIO_read_filename(b,name) BIO_ctrl(b,BIO_C_SET_FILENAME, \ + BIO_CLOSE|BIO_FP_READ,(char *)name) +#endif +#define BIO_write_filename(b,name) BIO_ctrl(b,BIO_C_SET_FILENAME, \ + BIO_CLOSE|BIO_FP_WRITE,name) +#define BIO_append_filename(b,name) BIO_ctrl(b,BIO_C_SET_FILENAME, \ + BIO_CLOSE|BIO_FP_APPEND,name) +#define BIO_rw_filename(b,name) BIO_ctrl(b,BIO_C_SET_FILENAME, \ + BIO_CLOSE|BIO_FP_READ|BIO_FP_WRITE,name) + +/* WARNING WARNING, this ups the reference count on the read bio of the + * SSL structure. This is because the ssl read BIO is now pointed to by + * the next_bio field in the bio. So when you free the BIO, make sure + * you are doing a BIO_free_all() to catch the underlying BIO. */ +#define BIO_set_ssl(b,ssl,c) BIO_ctrl(b,BIO_C_SET_SSL,c,(char *)ssl) +#define BIO_get_ssl(b,sslp) BIO_ctrl(b,BIO_C_GET_SSL,0,(char *)sslp) +#define BIO_set_ssl_mode(b,client) BIO_ctrl(b,BIO_C_SSL_MODE,client,NULL) +#define BIO_set_ssl_renegotiate_bytes(b,num) \ + BIO_ctrl(b,BIO_C_SET_SSL_RENEGOTIATE_BYTES,num,NULL); +#define BIO_get_num_renegotiates(b) \ + BIO_ctrl(b,BIO_C_GET_SSL_NUM_RENEGOTIATES,0,NULL); +#define BIO_set_ssl_renegotiate_timeout(b,seconds) \ + BIO_ctrl(b,BIO_C_SET_SSL_RENEGOTIATE_TIMEOUT,seconds,NULL); + +/* defined in evp.h */ +/* #define BIO_set_md(b,md) BIO_ctrl(b,BIO_C_SET_MD,1,(char *)md) */ + +#define BIO_get_mem_data(b,pp) BIO_ctrl(b,BIO_CTRL_INFO,0,(char *)pp) +#define BIO_set_mem_buf(b,bm,c) BIO_ctrl(b,BIO_C_SET_BUF_MEM,c,(char *)bm) +#define BIO_get_mem_ptr(b,pp) BIO_ctrl(b,BIO_C_GET_BUF_MEM_PTR,0,(char *)pp) +#define BIO_set_mem_eof_return(b,v) \ + BIO_ctrl(b,BIO_C_SET_BUF_MEM_EOF_RETURN,v,NULL) + +/* For the BIO_f_buffer() type */ +#define BIO_get_buffer_num_lines(b) BIO_ctrl(b,BIO_C_GET_BUFF_NUM_LINES,0,NULL) +#define BIO_set_buffer_size(b,size) BIO_ctrl(b,BIO_C_SET_BUFF_SIZE,size,NULL) +#define BIO_set_read_buffer_size(b,size) BIO_int_ctrl(b,BIO_C_SET_BUFF_SIZE,size,0) +#define BIO_set_write_buffer_size(b,size) BIO_int_ctrl(b,BIO_C_SET_BUFF_SIZE,size,1) +#define BIO_set_buffer_read_data(b,buf,num) BIO_ctrl(b,BIO_C_SET_BUFF_READ_DATA,num,buf) + +/* Don't use the next one unless you know what you are doing :-) */ +#define BIO_dup_state(b,ret) BIO_ctrl(b,BIO_CTRL_DUP,0,(char *)(ret)) + +#define BIO_reset(b) (int)BIO_ctrl(b,BIO_CTRL_RESET,0,NULL) +#define BIO_eof(b) (int)BIO_ctrl(b,BIO_CTRL_EOF,0,NULL) +#define BIO_set_close(b,c) (int)BIO_ctrl(b,BIO_CTRL_SET_CLOSE,(c),NULL) +#define BIO_get_close(b) (int)BIO_ctrl(b,BIO_CTRL_GET_CLOSE,0,NULL) +#define BIO_pending(b) (int)BIO_ctrl(b,BIO_CTRL_PENDING,0,NULL) +#define BIO_wpending(b) (int)BIO_ctrl(b,BIO_CTRL_WPENDING,0,NULL) +/* ...pending macros have inappropriate return type */ +size_t BIO_ctrl_pending(BIO *b); +size_t BIO_ctrl_wpending(BIO *b); +#define BIO_flush(b) (int)BIO_ctrl(b,BIO_CTRL_FLUSH,0,NULL) +#define BIO_get_info_callback(b,cbp) (int)BIO_ctrl(b,BIO_CTRL_GET_CALLBACK,0, \ + cbp) +#define BIO_set_info_callback(b,cb) (int)BIO_callback_ctrl(b,BIO_CTRL_SET_CALLBACK,cb) + +/* For the BIO_f_buffer() type */ +#define BIO_buffer_get_num_lines(b) BIO_ctrl(b,BIO_CTRL_GET,0,NULL) + +/* For BIO_s_bio() */ +#define BIO_set_write_buf_size(b,size) (int)BIO_ctrl(b,BIO_C_SET_WRITE_BUF_SIZE,size,NULL) +#define BIO_get_write_buf_size(b,size) (size_t)BIO_ctrl(b,BIO_C_GET_WRITE_BUF_SIZE,size,NULL) +#define BIO_make_bio_pair(b1,b2) (int)BIO_ctrl(b1,BIO_C_MAKE_BIO_PAIR,0,b2) +#define BIO_destroy_bio_pair(b) (int)BIO_ctrl(b,BIO_C_DESTROY_BIO_PAIR,0,NULL) +#define BIO_shutdown_wr(b) (int)BIO_ctrl(b, BIO_C_SHUTDOWN_WR, 0, NULL) +/* macros with inappropriate type -- but ...pending macros use int too: */ +#define BIO_get_write_guarantee(b) (int)BIO_ctrl(b,BIO_C_GET_WRITE_GUARANTEE,0,NULL) +#define BIO_get_read_request(b) (int)BIO_ctrl(b,BIO_C_GET_READ_REQUEST,0,NULL) +size_t BIO_ctrl_get_write_guarantee(BIO *b); +size_t BIO_ctrl_get_read_request(BIO *b); +int BIO_ctrl_reset_read_request(BIO *b); + +/* ctrl macros for dgram */ +#define BIO_ctrl_dgram_connect(b,peer) \ + (int)BIO_ctrl(b,BIO_CTRL_DGRAM_CONNECT,0, (char *)peer) +#define BIO_ctrl_set_connected(b, state, peer) \ + (int)BIO_ctrl(b, BIO_CTRL_DGRAM_SET_CONNECTED, state, (char *)peer) +#define BIO_dgram_recv_timedout(b) \ + (int)BIO_ctrl(b, BIO_CTRL_DGRAM_GET_RECV_TIMER_EXP, 0, NULL) +#define BIO_dgram_send_timedout(b) \ + (int)BIO_ctrl(b, BIO_CTRL_DGRAM_GET_SEND_TIMER_EXP, 0, NULL) +#define BIO_dgram_get_peer(b,peer) \ + (int)BIO_ctrl(b, BIO_CTRL_DGRAM_GET_PEER, 0, (char *)peer) +#define BIO_dgram_set_peer(b,peer) \ + (int)BIO_ctrl(b, BIO_CTRL_DGRAM_SET_PEER, 0, (char *)peer) + +/* These two aren't currently implemented */ +/* int BIO_get_ex_num(BIO *bio); */ +/* void BIO_set_ex_free_func(BIO *bio,int idx,void (*cb)()); */ +int BIO_set_ex_data(BIO *bio,int idx,void *data); +void *BIO_get_ex_data(BIO *bio,int idx); +int BIO_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, + CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); +unsigned long BIO_number_read(BIO *bio); +unsigned long BIO_number_written(BIO *bio); + +/* For BIO_f_asn1() */ +int BIO_asn1_set_prefix(BIO *b, asn1_ps_func *prefix, + asn1_ps_func *prefix_free); +int BIO_asn1_get_prefix(BIO *b, asn1_ps_func **pprefix, + asn1_ps_func **pprefix_free); +int BIO_asn1_set_suffix(BIO *b, asn1_ps_func *suffix, + asn1_ps_func *suffix_free); +int BIO_asn1_get_suffix(BIO *b, asn1_ps_func **psuffix, + asn1_ps_func **psuffix_free); + +# ifndef OPENSSL_NO_FP_API +BIO_METHOD *BIO_s_file(void ); +BIO *BIO_new_file(const char *filename, const char *mode); +BIO *BIO_new_fp(FILE *stream, int close_flag); +# define BIO_s_file_internal BIO_s_file +# endif +BIO * BIO_new(BIO_METHOD *type); +int BIO_set(BIO *a,BIO_METHOD *type); +int BIO_free(BIO *a); +void BIO_vfree(BIO *a); +int BIO_read(BIO *b, void *data, int len); +int BIO_gets(BIO *bp,char *buf, int size); +int BIO_write(BIO *b, const void *data, int len); +int BIO_puts(BIO *bp,const char *buf); +int BIO_indent(BIO *b,int indent,int max); +long BIO_ctrl(BIO *bp,int cmd,long larg,void *parg); +long BIO_callback_ctrl(BIO *b, int cmd, void (*fp)(struct bio_st *, int, const char *, int, long, long)); +char * BIO_ptr_ctrl(BIO *bp,int cmd,long larg); +long BIO_int_ctrl(BIO *bp,int cmd,long larg,int iarg); +BIO * BIO_push(BIO *b,BIO *append); +BIO * BIO_pop(BIO *b); +void BIO_free_all(BIO *a); +BIO * BIO_find_type(BIO *b,int bio_type); +BIO * BIO_next(BIO *b); +BIO * BIO_get_retry_BIO(BIO *bio, int *reason); +int BIO_get_retry_reason(BIO *bio); +BIO * BIO_dup_chain(BIO *in); + +int BIO_nread0(BIO *bio, char **buf); +int BIO_nread(BIO *bio, char **buf, int num); +int BIO_nwrite0(BIO *bio, char **buf); +int BIO_nwrite(BIO *bio, char **buf, int num); + +long BIO_debug_callback(BIO *bio,int cmd,const char *argp,int argi, + long argl,long ret); + +BIO_METHOD *BIO_s_mem(void); +BIO *BIO_new_mem_buf(void *buf, int len); +BIO_METHOD *BIO_s_socket(void); +BIO_METHOD *BIO_s_connect(void); +BIO_METHOD *BIO_s_accept(void); +BIO_METHOD *BIO_s_fd(void); +#ifndef OPENSSL_SYS_OS2 +BIO_METHOD *BIO_s_log(void); +#endif +BIO_METHOD *BIO_s_bio(void); +BIO_METHOD *BIO_s_null(void); +BIO_METHOD *BIO_f_null(void); +BIO_METHOD *BIO_f_buffer(void); +#ifdef OPENSSL_SYS_VMS +BIO_METHOD *BIO_f_linebuffer(void); +#endif +BIO_METHOD *BIO_f_nbio_test(void); +#ifndef OPENSSL_NO_DGRAM +BIO_METHOD *BIO_s_datagram(void); +#endif + +/* BIO_METHOD *BIO_f_ber(void); */ + +int BIO_sock_should_retry(int i); +int BIO_sock_non_fatal_error(int error); +int BIO_dgram_non_fatal_error(int error); + +int BIO_fd_should_retry(int i); +int BIO_fd_non_fatal_error(int error); +int BIO_dump_cb(int (*cb)(const void *data, size_t len, void *u), + void *u, const char *s, int len); +int BIO_dump_indent_cb(int (*cb)(const void *data, size_t len, void *u), + void *u, const char *s, int len, int indent); +int BIO_dump(BIO *b,const char *bytes,int len); +int BIO_dump_indent(BIO *b,const char *bytes,int len,int indent); +#ifndef OPENSSL_NO_FP_API +int BIO_dump_fp(FILE *fp, const char *s, int len); +int BIO_dump_indent_fp(FILE *fp, const char *s, int len, int indent); +#endif +struct hostent *BIO_gethostbyname(const char *name); +/* We might want a thread-safe interface too: + * struct hostent *BIO_gethostbyname_r(const char *name, + * struct hostent *result, void *buffer, size_t buflen); + * or something similar (caller allocates a struct hostent, + * pointed to by "result", and additional buffer space for the various + * substructures; if the buffer does not suffice, NULL is returned + * and an appropriate error code is set). + */ +int BIO_sock_error(int sock); +int BIO_socket_ioctl(int fd, long type, void *arg); +int BIO_socket_nbio(int fd,int mode); +int BIO_get_port(const char *str, unsigned short *port_ptr); +int BIO_get_host_ip(const char *str, unsigned char *ip); +int BIO_get_accept_socket(char *host_port,int mode); +int BIO_accept(int sock,char **ip_port); +int BIO_sock_init(void ); +void BIO_sock_cleanup(void); +int BIO_set_tcp_ndelay(int sock,int turn_on); + +BIO *BIO_new_socket(int sock, int close_flag); +BIO *BIO_new_dgram(int fd, int close_flag); +BIO *BIO_new_fd(int fd, int close_flag); +BIO *BIO_new_connect(char *host_port); +BIO *BIO_new_accept(char *host_port); + +int BIO_new_bio_pair(BIO **bio1, size_t writebuf1, + BIO **bio2, size_t writebuf2); +/* If successful, returns 1 and in *bio1, *bio2 two BIO pair endpoints. + * Otherwise returns 0 and sets *bio1 and *bio2 to NULL. + * Size 0 uses default value. + */ + +void BIO_copy_next_retry(BIO *b); + +/*long BIO_ghbn_ctrl(int cmd,int iarg,char *parg);*/ + +#ifdef __GNUC__ +# define __bio_h__attr__ __attribute__ +#else +# define __bio_h__attr__(x) +#endif +int BIO_printf(BIO *bio, const char *format, ...) + __bio_h__attr__((__format__(__printf__,2,3))); +int BIO_vprintf(BIO *bio, const char *format, va_list args) + __bio_h__attr__((__format__(__printf__,2,0))); +int BIO_snprintf(char *buf, size_t n, const char *format, ...) + __bio_h__attr__((__format__(__printf__,3,4))); +int BIO_vsnprintf(char *buf, size_t n, const char *format, va_list args) + __bio_h__attr__((__format__(__printf__,3,0))); +#undef __bio_h__attr__ + +/* BEGIN ERROR CODES */ +/* The following lines are auto generated by the script mkerr.pl. Any changes + * made after this point may be overwritten when the script is next run. + */ +void ERR_load_BIO_strings(void); + +/* Error codes for the BIO functions. */ + +/* Function codes. */ +#define BIO_F_ACPT_STATE 100 +#define BIO_F_BIO_ACCEPT 101 +#define BIO_F_BIO_BER_GET_HEADER 102 +#define BIO_F_BIO_CALLBACK_CTRL 131 +#define BIO_F_BIO_CTRL 103 +#define BIO_F_BIO_GETHOSTBYNAME 120 +#define BIO_F_BIO_GETS 104 +#define BIO_F_BIO_GET_ACCEPT_SOCKET 105 +#define BIO_F_BIO_GET_HOST_IP 106 +#define BIO_F_BIO_GET_PORT 107 +#define BIO_F_BIO_MAKE_PAIR 121 +#define BIO_F_BIO_NEW 108 +#define BIO_F_BIO_NEW_FILE 109 +#define BIO_F_BIO_NEW_MEM_BUF 126 +#define BIO_F_BIO_NREAD 123 +#define BIO_F_BIO_NREAD0 124 +#define BIO_F_BIO_NWRITE 125 +#define BIO_F_BIO_NWRITE0 122 +#define BIO_F_BIO_PUTS 110 +#define BIO_F_BIO_READ 111 +#define BIO_F_BIO_SOCK_INIT 112 +#define BIO_F_BIO_WRITE 113 +#define BIO_F_BUFFER_CTRL 114 +#define BIO_F_CONN_CTRL 127 +#define BIO_F_CONN_STATE 115 +#define BIO_F_FILE_CTRL 116 +#define BIO_F_FILE_READ 130 +#define BIO_F_LINEBUFFER_CTRL 129 +#define BIO_F_MEM_READ 128 +#define BIO_F_MEM_WRITE 117 +#define BIO_F_SSL_NEW 118 +#define BIO_F_WSASTARTUP 119 + +/* Reason codes. */ +#define BIO_R_ACCEPT_ERROR 100 +#define BIO_R_BAD_FOPEN_MODE 101 +#define BIO_R_BAD_HOSTNAME_LOOKUP 102 +#define BIO_R_BROKEN_PIPE 124 +#define BIO_R_CONNECT_ERROR 103 +#define BIO_R_EOF_ON_MEMORY_BIO 127 +#define BIO_R_ERROR_SETTING_NBIO 104 +#define BIO_R_ERROR_SETTING_NBIO_ON_ACCEPTED_SOCKET 105 +#define BIO_R_ERROR_SETTING_NBIO_ON_ACCEPT_SOCKET 106 +#define BIO_R_GETHOSTBYNAME_ADDR_IS_NOT_AF_INET 107 +#define BIO_R_INVALID_ARGUMENT 125 +#define BIO_R_INVALID_IP_ADDRESS 108 +#define BIO_R_IN_USE 123 +#define BIO_R_KEEPALIVE 109 +#define BIO_R_NBIO_CONNECT_ERROR 110 +#define BIO_R_NO_ACCEPT_PORT_SPECIFIED 111 +#define BIO_R_NO_HOSTNAME_SPECIFIED 112 +#define BIO_R_NO_PORT_DEFINED 113 +#define BIO_R_NO_PORT_SPECIFIED 114 +#define BIO_R_NO_SUCH_FILE 128 +#define BIO_R_NULL_PARAMETER 115 +#define BIO_R_TAG_MISMATCH 116 +#define BIO_R_UNABLE_TO_BIND_SOCKET 117 +#define BIO_R_UNABLE_TO_CREATE_SOCKET 118 +#define BIO_R_UNABLE_TO_LISTEN_SOCKET 119 +#define BIO_R_UNINITIALIZED 120 +#define BIO_R_UNSUPPORTED_METHOD 121 +#define BIO_R_WRITE_TO_READ_ONLY_BIO 126 +#define BIO_R_WSASTARTUP 122 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/extra_lib/include/openssl/bn.h b/extra_lib/include/openssl/bn.h new file mode 100644 index 0000000..e484b7f --- /dev/null +++ b/extra_lib/include/openssl/bn.h @@ -0,0 +1,858 @@ +/* crypto/bn/bn.h */ +/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 AUTHOR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ +/* ==================================================================== + * Copyright (c) 1998-2006 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED 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 OpenSSL PROJECT OR + * ITS 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. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ +/* ==================================================================== + * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. + * + * Portions of the attached software ("Contribution") are developed by + * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project. + * + * The Contribution is licensed pursuant to the Eric Young open source + * license provided above. + * + * The binary polynomial arithmetic software is originally written by + * Sheueling Chang Shantz and Douglas Stebila of Sun Microsystems Laboratories. + * + */ + +#ifndef HEADER_BN_H +#define HEADER_BN_H + +#include +#ifndef OPENSSL_NO_FP_API +#include /* FILE */ +#endif +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* These preprocessor symbols control various aspects of the bignum headers and + * library code. They're not defined by any "normal" configuration, as they are + * intended for development and testing purposes. NB: defining all three can be + * useful for debugging application code as well as openssl itself. + * + * BN_DEBUG - turn on various debugging alterations to the bignum code + * BN_DEBUG_RAND - uses random poisoning of unused words to trip up + * mismanagement of bignum internals. You must also define BN_DEBUG. + */ +/* #define BN_DEBUG */ +/* #define BN_DEBUG_RAND */ + +#ifndef OPENSSL_SMALL_FOOTPRINT +#define BN_MUL_COMBA +#define BN_SQR_COMBA +#define BN_RECURSION +#endif + +/* This next option uses the C libraries (2 word)/(1 word) function. + * If it is not defined, I use my C version (which is slower). + * The reason for this flag is that when the particular C compiler + * library routine is used, and the library is linked with a different + * compiler, the library is missing. This mostly happens when the + * library is built with gcc and then linked using normal cc. This would + * be a common occurrence because gcc normally produces code that is + * 2 times faster than system compilers for the big number stuff. + * For machines with only one compiler (or shared libraries), this should + * be on. Again this in only really a problem on machines + * using "long long's", are 32bit, and are not using my assembler code. */ +#if defined(OPENSSL_SYS_MSDOS) || defined(OPENSSL_SYS_WINDOWS) || \ + defined(OPENSSL_SYS_WIN32) || defined(linux) +# ifndef BN_DIV2W +# define BN_DIV2W +# endif +#endif + +/* assuming long is 64bit - this is the DEC Alpha + * unsigned long long is only 64 bits :-(, don't define + * BN_LLONG for the DEC Alpha */ +#ifdef SIXTY_FOUR_BIT_LONG +#define BN_ULLONG unsigned long long +#define BN_ULONG unsigned long +#define BN_LONG long +#define BN_BITS 128 +#define BN_BYTES 8 +#define BN_BITS2 64 +#define BN_BITS4 32 +#define BN_MASK (0xffffffffffffffffffffffffffffffffLL) +#define BN_MASK2 (0xffffffffffffffffL) +#define BN_MASK2l (0xffffffffL) +#define BN_MASK2h (0xffffffff00000000L) +#define BN_MASK2h1 (0xffffffff80000000L) +#define BN_TBIT (0x8000000000000000L) +#define BN_DEC_CONV (10000000000000000000UL) +#define BN_DEC_FMT1 "%lu" +#define BN_DEC_FMT2 "%019lu" +#define BN_DEC_NUM 19 +#define BN_HEX_FMT1 "%lX" +#define BN_HEX_FMT2 "%016lX" +#endif + +/* This is where the long long data type is 64 bits, but long is 32. + * For machines where there are 64bit registers, this is the mode to use. + * IRIX, on R4000 and above should use this mode, along with the relevant + * assembler code :-). Do NOT define BN_LLONG. + */ +#ifdef SIXTY_FOUR_BIT +#undef BN_LLONG +#undef BN_ULLONG +#define BN_ULONG unsigned long long +#define BN_LONG long long +#define BN_BITS 128 +#define BN_BYTES 8 +#define BN_BITS2 64 +#define BN_BITS4 32 +#define BN_MASK2 (0xffffffffffffffffLL) +#define BN_MASK2l (0xffffffffL) +#define BN_MASK2h (0xffffffff00000000LL) +#define BN_MASK2h1 (0xffffffff80000000LL) +#define BN_TBIT (0x8000000000000000LL) +#define BN_DEC_CONV (10000000000000000000ULL) +#define BN_DEC_FMT1 "%llu" +#define BN_DEC_FMT2 "%019llu" +#define BN_DEC_NUM 19 +#define BN_HEX_FMT1 "%llX" +#define BN_HEX_FMT2 "%016llX" +#endif + +#ifdef THIRTY_TWO_BIT +#ifdef BN_LLONG +# if defined(_WIN32) && !defined(__GNUC__) +# define BN_ULLONG unsigned __int64 +# define BN_MASK (0xffffffffffffffffI64) +# else +# define BN_ULLONG unsigned long long +# define BN_MASK (0xffffffffffffffffLL) +# endif +#endif +#define BN_ULONG unsigned int +#define BN_LONG int +#define BN_BITS 64 +#define BN_BYTES 4 +#define BN_BITS2 32 +#define BN_BITS4 16 +#define BN_MASK2 (0xffffffffL) +#define BN_MASK2l (0xffff) +#define BN_MASK2h1 (0xffff8000L) +#define BN_MASK2h (0xffff0000L) +#define BN_TBIT (0x80000000L) +#define BN_DEC_CONV (1000000000L) +#define BN_DEC_FMT1 "%u" +#define BN_DEC_FMT2 "%09u" +#define BN_DEC_NUM 9 +#define BN_HEX_FMT1 "%X" +#define BN_HEX_FMT2 "%08X" +#endif + +#define BN_DEFAULT_BITS 1280 + +#define BN_FLG_MALLOCED 0x01 +#define BN_FLG_STATIC_DATA 0x02 +#define BN_FLG_CONSTTIME 0x04 /* avoid leaking exponent information through timing, + * BN_mod_exp_mont() will call BN_mod_exp_mont_consttime, + * BN_div() will call BN_div_no_branch, + * BN_mod_inverse() will call BN_mod_inverse_no_branch. + */ + +#ifndef OPENSSL_NO_DEPRECATED +#define BN_FLG_EXP_CONSTTIME BN_FLG_CONSTTIME /* deprecated name for the flag */ + /* avoid leaking exponent information through timings + * (BN_mod_exp_mont() will call BN_mod_exp_mont_consttime) */ +#endif + +#ifndef OPENSSL_NO_DEPRECATED +#define BN_FLG_FREE 0x8000 /* used for debuging */ +#endif +#define BN_set_flags(b,n) ((b)->flags|=(n)) +#define BN_get_flags(b,n) ((b)->flags&(n)) + +/* get a clone of a BIGNUM with changed flags, for *temporary* use only + * (the two BIGNUMs cannot not be used in parallel!) */ +#define BN_with_flags(dest,b,n) ((dest)->d=(b)->d, \ + (dest)->top=(b)->top, \ + (dest)->dmax=(b)->dmax, \ + (dest)->neg=(b)->neg, \ + (dest)->flags=(((dest)->flags & BN_FLG_MALLOCED) \ + | ((b)->flags & ~BN_FLG_MALLOCED) \ + | BN_FLG_STATIC_DATA \ + | (n))) + +/* Already declared in ossl_typ.h */ +#if 0 +typedef struct bignum_st BIGNUM; +/* Used for temp variables (declaration hidden in bn_lcl.h) */ +typedef struct bignum_ctx BN_CTX; +typedef struct bn_blinding_st BN_BLINDING; +typedef struct bn_mont_ctx_st BN_MONT_CTX; +typedef struct bn_recp_ctx_st BN_RECP_CTX; +typedef struct bn_gencb_st BN_GENCB; +#endif + +struct bignum_st + { + BN_ULONG *d; /* Pointer to an array of 'BN_BITS2' bit chunks. */ + int top; /* Index of last used d +1. */ + /* The next are internal book keeping for bn_expand. */ + int dmax; /* Size of the d array. */ + int neg; /* one if the number is negative */ + int flags; + }; + +/* Used for montgomery multiplication */ +struct bn_mont_ctx_st + { + int ri; /* number of bits in R */ + BIGNUM RR; /* used to convert to montgomery form */ + BIGNUM N; /* The modulus */ + BIGNUM Ni; /* R*(1/R mod N) - N*Ni = 1 + * (Ni is only stored for bignum algorithm) */ + BN_ULONG n0[2];/* least significant word(s) of Ni; + (type changed with 0.9.9, was "BN_ULONG n0;" before) */ + int flags; + }; + +/* Used for reciprocal division/mod functions + * It cannot be shared between threads + */ +struct bn_recp_ctx_st + { + BIGNUM N; /* the divisor */ + BIGNUM Nr; /* the reciprocal */ + int num_bits; + int shift; + int flags; + }; + +/* Used for slow "generation" functions. */ +struct bn_gencb_st + { + unsigned int ver; /* To handle binary (in)compatibility */ + void *arg; /* callback-specific data */ + union + { + /* if(ver==1) - handles old style callbacks */ + void (*cb_1)(int, int, void *); + /* if(ver==2) - new callback style */ + int (*cb_2)(int, int, BN_GENCB *); + } cb; + }; +/* Wrapper function to make using BN_GENCB easier, */ +int BN_GENCB_call(BN_GENCB *cb, int a, int b); +/* Macro to populate a BN_GENCB structure with an "old"-style callback */ +#define BN_GENCB_set_old(gencb, callback, cb_arg) { \ + BN_GENCB *tmp_gencb = (gencb); \ + tmp_gencb->ver = 1; \ + tmp_gencb->arg = (cb_arg); \ + tmp_gencb->cb.cb_1 = (callback); } +/* Macro to populate a BN_GENCB structure with a "new"-style callback */ +#define BN_GENCB_set(gencb, callback, cb_arg) { \ + BN_GENCB *tmp_gencb = (gencb); \ + tmp_gencb->ver = 2; \ + tmp_gencb->arg = (cb_arg); \ + tmp_gencb->cb.cb_2 = (callback); } + +#define BN_prime_checks 0 /* default: select number of iterations + based on the size of the number */ + +/* number of Miller-Rabin iterations for an error rate of less than 2^-80 + * for random 'b'-bit input, b >= 100 (taken from table 4.4 in the Handbook + * of Applied Cryptography [Menezes, van Oorschot, Vanstone; CRC Press 1996]; + * original paper: Damgaard, Landrock, Pomerance: Average case error estimates + * for the strong probable prime test. -- Math. Comp. 61 (1993) 177-194) */ +#define BN_prime_checks_for_size(b) ((b) >= 1300 ? 2 : \ + (b) >= 850 ? 3 : \ + (b) >= 650 ? 4 : \ + (b) >= 550 ? 5 : \ + (b) >= 450 ? 6 : \ + (b) >= 400 ? 7 : \ + (b) >= 350 ? 8 : \ + (b) >= 300 ? 9 : \ + (b) >= 250 ? 12 : \ + (b) >= 200 ? 15 : \ + (b) >= 150 ? 18 : \ + /* b >= 100 */ 27) + +#define BN_num_bytes(a) ((BN_num_bits(a)+7)/8) + +/* Note that BN_abs_is_word didn't work reliably for w == 0 until 0.9.8 */ +#define BN_abs_is_word(a,w) ((((a)->top == 1) && ((a)->d[0] == (BN_ULONG)(w))) || \ + (((w) == 0) && ((a)->top == 0))) +#define BN_is_zero(a) ((a)->top == 0) +#define BN_is_one(a) (BN_abs_is_word((a),1) && !(a)->neg) +#define BN_is_word(a,w) (BN_abs_is_word((a),(w)) && (!(w) || !(a)->neg)) +#define BN_is_odd(a) (((a)->top > 0) && ((a)->d[0] & 1)) + +#define BN_one(a) (BN_set_word((a),1)) +#define BN_zero_ex(a) \ + do { \ + BIGNUM *_tmp_bn = (a); \ + _tmp_bn->top = 0; \ + _tmp_bn->neg = 0; \ + } while(0) +#ifdef OPENSSL_NO_DEPRECATED +#define BN_zero(a) BN_zero_ex(a) +#else +#define BN_zero(a) (BN_set_word((a),0)) +#endif + +const BIGNUM *BN_value_one(void); +char * BN_options(void); +BN_CTX *BN_CTX_new(void); +#ifndef OPENSSL_NO_DEPRECATED +void BN_CTX_init(BN_CTX *c); +#endif +void BN_CTX_free(BN_CTX *c); +void BN_CTX_start(BN_CTX *ctx); +BIGNUM *BN_CTX_get(BN_CTX *ctx); +void BN_CTX_end(BN_CTX *ctx); +int BN_rand(BIGNUM *rnd, int bits, int top,int bottom); +int BN_pseudo_rand(BIGNUM *rnd, int bits, int top,int bottom); +int BN_rand_range(BIGNUM *rnd, const BIGNUM *range); +int BN_pseudo_rand_range(BIGNUM *rnd, const BIGNUM *range); +int BN_num_bits(const BIGNUM *a); +int BN_num_bits_word(BN_ULONG); +BIGNUM *BN_new(void); +void BN_init(BIGNUM *); +void BN_clear_free(BIGNUM *a); +BIGNUM *BN_copy(BIGNUM *a, const BIGNUM *b); +void BN_swap(BIGNUM *a, BIGNUM *b); +BIGNUM *BN_bin2bn(const unsigned char *s,int len,BIGNUM *ret); +int BN_bn2bin(const BIGNUM *a, unsigned char *to); +BIGNUM *BN_mpi2bn(const unsigned char *s,int len,BIGNUM *ret); +int BN_bn2mpi(const BIGNUM *a, unsigned char *to); +int BN_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); +int BN_usub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); +int BN_uadd(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); +int BN_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); +int BN_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); +int BN_sqr(BIGNUM *r, const BIGNUM *a,BN_CTX *ctx); +/** BN_set_negative sets sign of a BIGNUM + * \param b pointer to the BIGNUM object + * \param n 0 if the BIGNUM b should be positive and a value != 0 otherwise + */ +void BN_set_negative(BIGNUM *b, int n); +/** BN_is_negative returns 1 if the BIGNUM is negative + * \param a pointer to the BIGNUM object + * \return 1 if a < 0 and 0 otherwise + */ +#define BN_is_negative(a) ((a)->neg != 0) + +int BN_div(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m, const BIGNUM *d, + BN_CTX *ctx); +#define BN_mod(rem,m,d,ctx) BN_div(NULL,(rem),(m),(d),(ctx)) +int BN_nnmod(BIGNUM *r, const BIGNUM *m, const BIGNUM *d, BN_CTX *ctx); +int BN_mod_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m, BN_CTX *ctx); +int BN_mod_add_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m); +int BN_mod_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m, BN_CTX *ctx); +int BN_mod_sub_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m); +int BN_mod_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, + const BIGNUM *m, BN_CTX *ctx); +int BN_mod_sqr(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx); +int BN_mod_lshift1(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx); +int BN_mod_lshift1_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *m); +int BN_mod_lshift(BIGNUM *r, const BIGNUM *a, int n, const BIGNUM *m, BN_CTX *ctx); +int BN_mod_lshift_quick(BIGNUM *r, const BIGNUM *a, int n, const BIGNUM *m); + +BN_ULONG BN_mod_word(const BIGNUM *a, BN_ULONG w); +BN_ULONG BN_div_word(BIGNUM *a, BN_ULONG w); +int BN_mul_word(BIGNUM *a, BN_ULONG w); +int BN_add_word(BIGNUM *a, BN_ULONG w); +int BN_sub_word(BIGNUM *a, BN_ULONG w); +int BN_set_word(BIGNUM *a, BN_ULONG w); +BN_ULONG BN_get_word(const BIGNUM *a); + +int BN_cmp(const BIGNUM *a, const BIGNUM *b); +void BN_free(BIGNUM *a); +int BN_is_bit_set(const BIGNUM *a, int n); +int BN_lshift(BIGNUM *r, const BIGNUM *a, int n); +int BN_lshift1(BIGNUM *r, const BIGNUM *a); +int BN_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,BN_CTX *ctx); + +int BN_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, + const BIGNUM *m,BN_CTX *ctx); +int BN_mod_exp_mont(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, + const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); +int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p, + const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *in_mont); +int BN_mod_exp_mont_word(BIGNUM *r, BN_ULONG a, const BIGNUM *p, + const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); +int BN_mod_exp2_mont(BIGNUM *r, const BIGNUM *a1, const BIGNUM *p1, + const BIGNUM *a2, const BIGNUM *p2,const BIGNUM *m, + BN_CTX *ctx,BN_MONT_CTX *m_ctx); +int BN_mod_exp_simple(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, + const BIGNUM *m,BN_CTX *ctx); + +int BN_mask_bits(BIGNUM *a,int n); +#ifndef OPENSSL_NO_FP_API +int BN_print_fp(FILE *fp, const BIGNUM *a); +#endif +#ifdef HEADER_BIO_H +int BN_print(BIO *fp, const BIGNUM *a); +#else +int BN_print(void *fp, const BIGNUM *a); +#endif +int BN_reciprocal(BIGNUM *r, const BIGNUM *m, int len, BN_CTX *ctx); +int BN_rshift(BIGNUM *r, const BIGNUM *a, int n); +int BN_rshift1(BIGNUM *r, const BIGNUM *a); +void BN_clear(BIGNUM *a); +BIGNUM *BN_dup(const BIGNUM *a); +int BN_ucmp(const BIGNUM *a, const BIGNUM *b); +int BN_set_bit(BIGNUM *a, int n); +int BN_clear_bit(BIGNUM *a, int n); +char * BN_bn2hex(const BIGNUM *a); +char * BN_bn2dec(const BIGNUM *a); +int BN_hex2bn(BIGNUM **a, const char *str); +int BN_dec2bn(BIGNUM **a, const char *str); +int BN_asc2bn(BIGNUM **a, const char *str); +int BN_gcd(BIGNUM *r,const BIGNUM *a,const BIGNUM *b,BN_CTX *ctx); +int BN_kronecker(const BIGNUM *a,const BIGNUM *b,BN_CTX *ctx); /* returns -2 for error */ +BIGNUM *BN_mod_inverse(BIGNUM *ret, + const BIGNUM *a, const BIGNUM *n,BN_CTX *ctx); +BIGNUM *BN_mod_sqrt(BIGNUM *ret, + const BIGNUM *a, const BIGNUM *n,BN_CTX *ctx); + +/* Deprecated versions */ +#ifndef OPENSSL_NO_DEPRECATED +BIGNUM *BN_generate_prime(BIGNUM *ret,int bits,int safe, + const BIGNUM *add, const BIGNUM *rem, + void (*callback)(int,int,void *),void *cb_arg); +int BN_is_prime(const BIGNUM *p,int nchecks, + void (*callback)(int,int,void *), + BN_CTX *ctx,void *cb_arg); +int BN_is_prime_fasttest(const BIGNUM *p,int nchecks, + void (*callback)(int,int,void *),BN_CTX *ctx,void *cb_arg, + int do_trial_division); +#endif /* !defined(OPENSSL_NO_DEPRECATED) */ + +/* Newer versions */ +int BN_generate_prime_ex(BIGNUM *ret,int bits,int safe, const BIGNUM *add, + const BIGNUM *rem, BN_GENCB *cb); +int BN_is_prime_ex(const BIGNUM *p,int nchecks, BN_CTX *ctx, BN_GENCB *cb); +int BN_is_prime_fasttest_ex(const BIGNUM *p,int nchecks, BN_CTX *ctx, + int do_trial_division, BN_GENCB *cb); + +BN_MONT_CTX *BN_MONT_CTX_new(void ); +void BN_MONT_CTX_init(BN_MONT_CTX *ctx); +int BN_mod_mul_montgomery(BIGNUM *r,const BIGNUM *a,const BIGNUM *b, + BN_MONT_CTX *mont, BN_CTX *ctx); +#define BN_to_montgomery(r,a,mont,ctx) BN_mod_mul_montgomery(\ + (r),(a),&((mont)->RR),(mont),(ctx)) +int BN_from_montgomery(BIGNUM *r,const BIGNUM *a, + BN_MONT_CTX *mont, BN_CTX *ctx); +void BN_MONT_CTX_free(BN_MONT_CTX *mont); +int BN_MONT_CTX_set(BN_MONT_CTX *mont,const BIGNUM *mod,BN_CTX *ctx); +BN_MONT_CTX *BN_MONT_CTX_copy(BN_MONT_CTX *to,BN_MONT_CTX *from); +BN_MONT_CTX *BN_MONT_CTX_set_locked(BN_MONT_CTX **pmont, int lock, + const BIGNUM *mod, BN_CTX *ctx); + +/* BN_BLINDING flags */ +#define BN_BLINDING_NO_UPDATE 0x00000001 +#define BN_BLINDING_NO_RECREATE 0x00000002 + +BN_BLINDING *BN_BLINDING_new(const BIGNUM *A, const BIGNUM *Ai, BIGNUM *mod); +void BN_BLINDING_free(BN_BLINDING *b); +int BN_BLINDING_update(BN_BLINDING *b,BN_CTX *ctx); +int BN_BLINDING_convert(BIGNUM *n, BN_BLINDING *b, BN_CTX *ctx); +int BN_BLINDING_invert(BIGNUM *n, BN_BLINDING *b, BN_CTX *ctx); +int BN_BLINDING_convert_ex(BIGNUM *n, BIGNUM *r, BN_BLINDING *b, BN_CTX *); +int BN_BLINDING_invert_ex(BIGNUM *n, const BIGNUM *r, BN_BLINDING *b, BN_CTX *); +#ifndef OPENSSL_NO_DEPRECATED +unsigned long BN_BLINDING_get_thread_id(const BN_BLINDING *); +void BN_BLINDING_set_thread_id(BN_BLINDING *, unsigned long); +#endif +CRYPTO_THREADID *BN_BLINDING_thread_id(BN_BLINDING *); +unsigned long BN_BLINDING_get_flags(const BN_BLINDING *); +void BN_BLINDING_set_flags(BN_BLINDING *, unsigned long); +BN_BLINDING *BN_BLINDING_create_param(BN_BLINDING *b, + const BIGNUM *e, BIGNUM *m, BN_CTX *ctx, + int (*bn_mod_exp)(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, + const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx), + BN_MONT_CTX *m_ctx); + +#ifndef OPENSSL_NO_DEPRECATED +void BN_set_params(int mul,int high,int low,int mont); +int BN_get_params(int which); /* 0, mul, 1 high, 2 low, 3 mont */ +#endif + +void BN_RECP_CTX_init(BN_RECP_CTX *recp); +BN_RECP_CTX *BN_RECP_CTX_new(void); +void BN_RECP_CTX_free(BN_RECP_CTX *recp); +int BN_RECP_CTX_set(BN_RECP_CTX *recp,const BIGNUM *rdiv,BN_CTX *ctx); +int BN_mod_mul_reciprocal(BIGNUM *r, const BIGNUM *x, const BIGNUM *y, + BN_RECP_CTX *recp,BN_CTX *ctx); +int BN_mod_exp_recp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, + const BIGNUM *m, BN_CTX *ctx); +int BN_div_recp(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m, + BN_RECP_CTX *recp, BN_CTX *ctx); + +/* Functions for arithmetic over binary polynomials represented by BIGNUMs. + * + * The BIGNUM::neg property of BIGNUMs representing binary polynomials is + * ignored. + * + * Note that input arguments are not const so that their bit arrays can + * be expanded to the appropriate size if needed. + */ + +int BN_GF2m_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); /*r = a + b*/ +#define BN_GF2m_sub(r, a, b) BN_GF2m_add(r, a, b) +int BN_GF2m_mod(BIGNUM *r, const BIGNUM *a, const BIGNUM *p); /*r=a mod p*/ +int BN_GF2m_mod_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, + const BIGNUM *p, BN_CTX *ctx); /* r = (a * b) mod p */ +int BN_GF2m_mod_sqr(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, + BN_CTX *ctx); /* r = (a * a) mod p */ +int BN_GF2m_mod_inv(BIGNUM *r, const BIGNUM *b, const BIGNUM *p, + BN_CTX *ctx); /* r = (1 / b) mod p */ +int BN_GF2m_mod_div(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, + const BIGNUM *p, BN_CTX *ctx); /* r = (a / b) mod p */ +int BN_GF2m_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, + const BIGNUM *p, BN_CTX *ctx); /* r = (a ^ b) mod p */ +int BN_GF2m_mod_sqrt(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, + BN_CTX *ctx); /* r = sqrt(a) mod p */ +int BN_GF2m_mod_solve_quad(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, + BN_CTX *ctx); /* r^2 + r = a mod p */ +#define BN_GF2m_cmp(a, b) BN_ucmp((a), (b)) +/* Some functions allow for representation of the irreducible polynomials + * as an unsigned int[], say p. The irreducible f(t) is then of the form: + * t^p[0] + t^p[1] + ... + t^p[k] + * where m = p[0] > p[1] > ... > p[k] = 0. + */ +int BN_GF2m_mod_arr(BIGNUM *r, const BIGNUM *a, const int p[]); + /* r = a mod p */ +int BN_GF2m_mod_mul_arr(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, + const int p[], BN_CTX *ctx); /* r = (a * b) mod p */ +int BN_GF2m_mod_sqr_arr(BIGNUM *r, const BIGNUM *a, const int p[], + BN_CTX *ctx); /* r = (a * a) mod p */ +int BN_GF2m_mod_inv_arr(BIGNUM *r, const BIGNUM *b, const int p[], + BN_CTX *ctx); /* r = (1 / b) mod p */ +int BN_GF2m_mod_div_arr(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, + const int p[], BN_CTX *ctx); /* r = (a / b) mod p */ +int BN_GF2m_mod_exp_arr(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, + const int p[], BN_CTX *ctx); /* r = (a ^ b) mod p */ +int BN_GF2m_mod_sqrt_arr(BIGNUM *r, const BIGNUM *a, + const int p[], BN_CTX *ctx); /* r = sqrt(a) mod p */ +int BN_GF2m_mod_solve_quad_arr(BIGNUM *r, const BIGNUM *a, + const int p[], BN_CTX *ctx); /* r^2 + r = a mod p */ +int BN_GF2m_poly2arr(const BIGNUM *a, int p[], int max); +int BN_GF2m_arr2poly(const int p[], BIGNUM *a); + +/* faster mod functions for the 'NIST primes' + * 0 <= a < p^2 */ +int BN_nist_mod_192(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); +int BN_nist_mod_224(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); +int BN_nist_mod_256(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); +int BN_nist_mod_384(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); +int BN_nist_mod_521(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); + +const BIGNUM *BN_get0_nist_prime_192(void); +const BIGNUM *BN_get0_nist_prime_224(void); +const BIGNUM *BN_get0_nist_prime_256(void); +const BIGNUM *BN_get0_nist_prime_384(void); +const BIGNUM *BN_get0_nist_prime_521(void); + +/* library internal functions */ + +#define bn_expand(a,bits) ((((((bits+BN_BITS2-1))/BN_BITS2)) <= (a)->dmax)?\ + (a):bn_expand2((a),(bits+BN_BITS2-1)/BN_BITS2)) +#define bn_wexpand(a,words) (((words) <= (a)->dmax)?(a):bn_expand2((a),(words))) +BIGNUM *bn_expand2(BIGNUM *a, int words); +#ifndef OPENSSL_NO_DEPRECATED +BIGNUM *bn_dup_expand(const BIGNUM *a, int words); /* unused */ +#endif + +/* Bignum consistency macros + * There is one "API" macro, bn_fix_top(), for stripping leading zeroes from + * bignum data after direct manipulations on the data. There is also an + * "internal" macro, bn_check_top(), for verifying that there are no leading + * zeroes. Unfortunately, some auditing is required due to the fact that + * bn_fix_top() has become an overabused duct-tape because bignum data is + * occasionally passed around in an inconsistent state. So the following + * changes have been made to sort this out; + * - bn_fix_top()s implementation has been moved to bn_correct_top() + * - if BN_DEBUG isn't defined, bn_fix_top() maps to bn_correct_top(), and + * bn_check_top() is as before. + * - if BN_DEBUG *is* defined; + * - bn_check_top() tries to pollute unused words even if the bignum 'top' is + * consistent. (ed: only if BN_DEBUG_RAND is defined) + * - bn_fix_top() maps to bn_check_top() rather than "fixing" anything. + * The idea is to have debug builds flag up inconsistent bignums when they + * occur. If that occurs in a bn_fix_top(), we examine the code in question; if + * the use of bn_fix_top() was appropriate (ie. it follows directly after code + * that manipulates the bignum) it is converted to bn_correct_top(), and if it + * was not appropriate, we convert it permanently to bn_check_top() and track + * down the cause of the bug. Eventually, no internal code should be using the + * bn_fix_top() macro. External applications and libraries should try this with + * their own code too, both in terms of building against the openssl headers + * with BN_DEBUG defined *and* linking with a version of OpenSSL built with it + * defined. This not only improves external code, it provides more test + * coverage for openssl's own code. + */ + +#ifdef BN_DEBUG + +/* We only need assert() when debugging */ +#include + +#ifdef BN_DEBUG_RAND +/* To avoid "make update" cvs wars due to BN_DEBUG, use some tricks */ +#ifndef RAND_pseudo_bytes +int RAND_pseudo_bytes(unsigned char *buf,int num); +#define BN_DEBUG_TRIX +#endif +#define bn_pollute(a) \ + do { \ + const BIGNUM *_bnum1 = (a); \ + if(_bnum1->top < _bnum1->dmax) { \ + unsigned char _tmp_char; \ + /* We cast away const without the compiler knowing, any \ + * *genuinely* constant variables that aren't mutable \ + * wouldn't be constructed with top!=dmax. */ \ + BN_ULONG *_not_const; \ + memcpy(&_not_const, &_bnum1->d, sizeof(BN_ULONG*)); \ + RAND_pseudo_bytes(&_tmp_char, 1); \ + memset((unsigned char *)(_not_const + _bnum1->top), _tmp_char, \ + (_bnum1->dmax - _bnum1->top) * sizeof(BN_ULONG)); \ + } \ + } while(0) +#ifdef BN_DEBUG_TRIX +#undef RAND_pseudo_bytes +#endif +#else +#define bn_pollute(a) +#endif +#define bn_check_top(a) \ + do { \ + const BIGNUM *_bnum2 = (a); \ + if (_bnum2 != NULL) { \ + assert((_bnum2->top == 0) || \ + (_bnum2->d[_bnum2->top - 1] != 0)); \ + bn_pollute(_bnum2); \ + } \ + } while(0) + +#define bn_fix_top(a) bn_check_top(a) + +#else /* !BN_DEBUG */ + +#define bn_pollute(a) +#define bn_check_top(a) +#define bn_fix_top(a) bn_correct_top(a) + +#endif + +#define bn_correct_top(a) \ + { \ + BN_ULONG *ftl; \ + int tmp_top = (a)->top; \ + if (tmp_top > 0) \ + { \ + for (ftl= &((a)->d[tmp_top-1]); tmp_top > 0; tmp_top--) \ + if (*(ftl--)) break; \ + (a)->top = tmp_top; \ + } \ + bn_pollute(a); \ + } + +BN_ULONG bn_mul_add_words(BN_ULONG *rp, const BN_ULONG *ap, int num, BN_ULONG w); +BN_ULONG bn_mul_words(BN_ULONG *rp, const BN_ULONG *ap, int num, BN_ULONG w); +void bn_sqr_words(BN_ULONG *rp, const BN_ULONG *ap, int num); +BN_ULONG bn_div_words(BN_ULONG h, BN_ULONG l, BN_ULONG d); +BN_ULONG bn_add_words(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp,int num); +BN_ULONG bn_sub_words(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp,int num); + +/* Primes from RFC 2409 */ +BIGNUM *get_rfc2409_prime_768(BIGNUM *bn); +BIGNUM *get_rfc2409_prime_1024(BIGNUM *bn); + +/* Primes from RFC 3526 */ +BIGNUM *get_rfc3526_prime_1536(BIGNUM *bn); +BIGNUM *get_rfc3526_prime_2048(BIGNUM *bn); +BIGNUM *get_rfc3526_prime_3072(BIGNUM *bn); +BIGNUM *get_rfc3526_prime_4096(BIGNUM *bn); +BIGNUM *get_rfc3526_prime_6144(BIGNUM *bn); +BIGNUM *get_rfc3526_prime_8192(BIGNUM *bn); + +int BN_bntest_rand(BIGNUM *rnd, int bits, int top,int bottom); + +/* BEGIN ERROR CODES */ +/* The following lines are auto generated by the script mkerr.pl. Any changes + * made after this point may be overwritten when the script is next run. + */ +void ERR_load_BN_strings(void); + +/* Error codes for the BN functions. */ + +/* Function codes. */ +#define BN_F_BNRAND 127 +#define BN_F_BN_BLINDING_CONVERT_EX 100 +#define BN_F_BN_BLINDING_CREATE_PARAM 128 +#define BN_F_BN_BLINDING_INVERT_EX 101 +#define BN_F_BN_BLINDING_NEW 102 +#define BN_F_BN_BLINDING_UPDATE 103 +#define BN_F_BN_BN2DEC 104 +#define BN_F_BN_BN2HEX 105 +#define BN_F_BN_CTX_GET 116 +#define BN_F_BN_CTX_NEW 106 +#define BN_F_BN_CTX_START 129 +#define BN_F_BN_DIV 107 +#define BN_F_BN_DIV_NO_BRANCH 138 +#define BN_F_BN_DIV_RECP 130 +#define BN_F_BN_EXP 123 +#define BN_F_BN_EXPAND2 108 +#define BN_F_BN_EXPAND_INTERNAL 120 +#define BN_F_BN_GF2M_MOD 131 +#define BN_F_BN_GF2M_MOD_EXP 132 +#define BN_F_BN_GF2M_MOD_MUL 133 +#define BN_F_BN_GF2M_MOD_SOLVE_QUAD 134 +#define BN_F_BN_GF2M_MOD_SOLVE_QUAD_ARR 135 +#define BN_F_BN_GF2M_MOD_SQR 136 +#define BN_F_BN_GF2M_MOD_SQRT 137 +#define BN_F_BN_MOD_EXP2_MONT 118 +#define BN_F_BN_MOD_EXP_MONT 109 +#define BN_F_BN_MOD_EXP_MONT_CONSTTIME 124 +#define BN_F_BN_MOD_EXP_MONT_WORD 117 +#define BN_F_BN_MOD_EXP_RECP 125 +#define BN_F_BN_MOD_EXP_SIMPLE 126 +#define BN_F_BN_MOD_INVERSE 110 +#define BN_F_BN_MOD_INVERSE_NO_BRANCH 139 +#define BN_F_BN_MOD_LSHIFT_QUICK 119 +#define BN_F_BN_MOD_MUL_RECIPROCAL 111 +#define BN_F_BN_MOD_SQRT 121 +#define BN_F_BN_MPI2BN 112 +#define BN_F_BN_NEW 113 +#define BN_F_BN_RAND 114 +#define BN_F_BN_RAND_RANGE 122 +#define BN_F_BN_USUB 115 + +/* Reason codes. */ +#define BN_R_ARG2_LT_ARG3 100 +#define BN_R_BAD_RECIPROCAL 101 +#define BN_R_BIGNUM_TOO_LONG 114 +#define BN_R_CALLED_WITH_EVEN_MODULUS 102 +#define BN_R_DIV_BY_ZERO 103 +#define BN_R_ENCODING_ERROR 104 +#define BN_R_EXPAND_ON_STATIC_BIGNUM_DATA 105 +#define BN_R_INPUT_NOT_REDUCED 110 +#define BN_R_INVALID_LENGTH 106 +#define BN_R_INVALID_RANGE 115 +#define BN_R_NOT_A_SQUARE 111 +#define BN_R_NOT_INITIALIZED 107 +#define BN_R_NO_INVERSE 108 +#define BN_R_NO_SOLUTION 116 +#define BN_R_P_IS_NOT_PRIME 112 +#define BN_R_TOO_MANY_ITERATIONS 113 +#define BN_R_TOO_MANY_TEMPORARY_VARIABLES 109 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/extra_lib/include/openssl/buffer.h b/extra_lib/include/openssl/buffer.h new file mode 100644 index 0000000..178e418 --- /dev/null +++ b/extra_lib/include/openssl/buffer.h @@ -0,0 +1,119 @@ +/* crypto/buffer/buffer.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 AUTHOR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_BUFFER_H +#define HEADER_BUFFER_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#if !defined(NO_SYS_TYPES_H) +#include +#endif + +/* Already declared in ossl_typ.h */ +/* typedef struct buf_mem_st BUF_MEM; */ + +struct buf_mem_st + { + size_t length; /* current number of bytes */ + char *data; + size_t max; /* size of buffer */ + }; + +BUF_MEM *BUF_MEM_new(void); +void BUF_MEM_free(BUF_MEM *a); +int BUF_MEM_grow(BUF_MEM *str, size_t len); +int BUF_MEM_grow_clean(BUF_MEM *str, size_t len); +char * BUF_strdup(const char *str); +char * BUF_strndup(const char *str, size_t siz); +void * BUF_memdup(const void *data, size_t siz); +void BUF_reverse(unsigned char *out, unsigned char *in, size_t siz); + +/* safe string functions */ +size_t BUF_strlcpy(char *dst,const char *src,size_t siz); +size_t BUF_strlcat(char *dst,const char *src,size_t siz); + + +/* BEGIN ERROR CODES */ +/* The following lines are auto generated by the script mkerr.pl. Any changes + * made after this point may be overwritten when the script is next run. + */ +void ERR_load_BUF_strings(void); + +/* Error codes for the BUF functions. */ + +/* Function codes. */ +#define BUF_F_BUF_MEMDUP 103 +#define BUF_F_BUF_MEM_GROW 100 +#define BUF_F_BUF_MEM_GROW_CLEAN 105 +#define BUF_F_BUF_MEM_NEW 101 +#define BUF_F_BUF_STRDUP 102 +#define BUF_F_BUF_STRNDUP 104 + +/* Reason codes. */ + +#ifdef __cplusplus +} +#endif +#endif diff --git a/extra_lib/include/openssl/comp.h b/extra_lib/include/openssl/comp.h new file mode 100644 index 0000000..4b405c7 --- /dev/null +++ b/extra_lib/include/openssl/comp.h @@ -0,0 +1,80 @@ + +#ifndef HEADER_COMP_H +#define HEADER_COMP_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct comp_ctx_st COMP_CTX; + +typedef struct comp_method_st + { + int type; /* NID for compression library */ + const char *name; /* A text string to identify the library */ + int (*init)(COMP_CTX *ctx); + void (*finish)(COMP_CTX *ctx); + int (*compress)(COMP_CTX *ctx, + unsigned char *out, unsigned int olen, + unsigned char *in, unsigned int ilen); + int (*expand)(COMP_CTX *ctx, + unsigned char *out, unsigned int olen, + unsigned char *in, unsigned int ilen); + /* The following two do NOTHING, but are kept for backward compatibility */ + long (*ctrl)(void); + long (*callback_ctrl)(void); + } COMP_METHOD; + +struct comp_ctx_st + { + COMP_METHOD *meth; + unsigned long compress_in; + unsigned long compress_out; + unsigned long expand_in; + unsigned long expand_out; + + CRYPTO_EX_DATA ex_data; + }; + + +COMP_CTX *COMP_CTX_new(COMP_METHOD *meth); +void COMP_CTX_free(COMP_CTX *ctx); +int COMP_compress_block(COMP_CTX *ctx, unsigned char *out, int olen, + unsigned char *in, int ilen); +int COMP_expand_block(COMP_CTX *ctx, unsigned char *out, int olen, + unsigned char *in, int ilen); +COMP_METHOD *COMP_rle(void ); +COMP_METHOD *COMP_zlib(void ); +void COMP_zlib_cleanup(void); + +#ifdef HEADER_BIO_H +#ifdef ZLIB +BIO_METHOD *BIO_f_zlib(void); +#endif +#endif + +/* BEGIN ERROR CODES */ +/* The following lines are auto generated by the script mkerr.pl. Any changes + * made after this point may be overwritten when the script is next run. + */ +void ERR_load_COMP_strings(void); + +/* Error codes for the COMP functions. */ + +/* Function codes. */ +#define COMP_F_BIO_ZLIB_FLUSH 99 +#define COMP_F_BIO_ZLIB_NEW 100 +#define COMP_F_BIO_ZLIB_READ 101 +#define COMP_F_BIO_ZLIB_WRITE 102 + +/* Reason codes. */ +#define COMP_R_ZLIB_DEFLATE_ERROR 99 +#define COMP_R_ZLIB_INFLATE_ERROR 100 +#define COMP_R_ZLIB_NOT_SUPPORTED 101 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/extra_lib/include/openssl/conf.h b/extra_lib/include/openssl/conf.h new file mode 100644 index 0000000..c219997 --- /dev/null +++ b/extra_lib/include/openssl/conf.h @@ -0,0 +1,263 @@ +/* crypto/conf/conf.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 AUTHOR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_CONF_H +#define HEADER_CONF_H + +#include +#include +#include +#include +#include + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct + { + char *section; + char *name; + char *value; + } CONF_VALUE; + +DECLARE_STACK_OF(CONF_VALUE) +DECLARE_LHASH_OF(CONF_VALUE); + +struct conf_st; +struct conf_method_st; +typedef struct conf_method_st CONF_METHOD; + +struct conf_method_st + { + const char *name; + CONF *(*create)(CONF_METHOD *meth); + int (*init)(CONF *conf); + int (*destroy)(CONF *conf); + int (*destroy_data)(CONF *conf); + int (*load_bio)(CONF *conf, BIO *bp, long *eline); + int (*dump)(const CONF *conf, BIO *bp); + int (*is_number)(const CONF *conf, char c); + int (*to_int)(const CONF *conf, char c); + int (*load)(CONF *conf, const char *name, long *eline); + }; + +/* Module definitions */ + +typedef struct conf_imodule_st CONF_IMODULE; +typedef struct conf_module_st CONF_MODULE; + +DECLARE_STACK_OF(CONF_MODULE) +DECLARE_STACK_OF(CONF_IMODULE) + +/* DSO module function typedefs */ +typedef int conf_init_func(CONF_IMODULE *md, const CONF *cnf); +typedef void conf_finish_func(CONF_IMODULE *md); + +#define CONF_MFLAGS_IGNORE_ERRORS 0x1 +#define CONF_MFLAGS_IGNORE_RETURN_CODES 0x2 +#define CONF_MFLAGS_SILENT 0x4 +#define CONF_MFLAGS_NO_DSO 0x8 +#define CONF_MFLAGS_IGNORE_MISSING_FILE 0x10 +#define CONF_MFLAGS_DEFAULT_SECTION 0x20 + +int CONF_set_default_method(CONF_METHOD *meth); +void CONF_set_nconf(CONF *conf,LHASH_OF(CONF_VALUE) *hash); +LHASH_OF(CONF_VALUE) *CONF_load(LHASH_OF(CONF_VALUE) *conf,const char *file, + long *eline); +#ifndef OPENSSL_NO_FP_API +LHASH_OF(CONF_VALUE) *CONF_load_fp(LHASH_OF(CONF_VALUE) *conf, FILE *fp, + long *eline); +#endif +LHASH_OF(CONF_VALUE) *CONF_load_bio(LHASH_OF(CONF_VALUE) *conf, BIO *bp,long *eline); +STACK_OF(CONF_VALUE) *CONF_get_section(LHASH_OF(CONF_VALUE) *conf, + const char *section); +char *CONF_get_string(LHASH_OF(CONF_VALUE) *conf,const char *group, + const char *name); +long CONF_get_number(LHASH_OF(CONF_VALUE) *conf,const char *group, + const char *name); +void CONF_free(LHASH_OF(CONF_VALUE) *conf); +int CONF_dump_fp(LHASH_OF(CONF_VALUE) *conf, FILE *out); +int CONF_dump_bio(LHASH_OF(CONF_VALUE) *conf, BIO *out); + +void OPENSSL_config(const char *config_name); +void OPENSSL_no_config(void); + +/* New conf code. The semantics are different from the functions above. + If that wasn't the case, the above functions would have been replaced */ + +struct conf_st + { + CONF_METHOD *meth; + void *meth_data; + LHASH_OF(CONF_VALUE) *data; + }; + +CONF *NCONF_new(CONF_METHOD *meth); +CONF_METHOD *NCONF_default(void); +CONF_METHOD *NCONF_WIN32(void); +#if 0 /* Just to give you an idea of what I have in mind */ +CONF_METHOD *NCONF_XML(void); +#endif +void NCONF_free(CONF *conf); +void NCONF_free_data(CONF *conf); + +int NCONF_load(CONF *conf,const char *file,long *eline); +#ifndef OPENSSL_NO_FP_API +int NCONF_load_fp(CONF *conf, FILE *fp,long *eline); +#endif +int NCONF_load_bio(CONF *conf, BIO *bp,long *eline); +STACK_OF(CONF_VALUE) *NCONF_get_section(const CONF *conf,const char *section); +char *NCONF_get_string(const CONF *conf,const char *group,const char *name); +int NCONF_get_number_e(const CONF *conf,const char *group,const char *name, + long *result); +int NCONF_dump_fp(const CONF *conf, FILE *out); +int NCONF_dump_bio(const CONF *conf, BIO *out); + +#if 0 /* The following function has no error checking, + and should therefore be avoided */ +long NCONF_get_number(CONF *conf,char *group,char *name); +#else +#define NCONF_get_number(c,g,n,r) NCONF_get_number_e(c,g,n,r) +#endif + +/* Module functions */ + +int CONF_modules_load(const CONF *cnf, const char *appname, + unsigned long flags); +int CONF_modules_load_file(const char *filename, const char *appname, + unsigned long flags); +void CONF_modules_unload(int all); +void CONF_modules_finish(void); +void CONF_modules_free(void); +int CONF_module_add(const char *name, conf_init_func *ifunc, + conf_finish_func *ffunc); + +const char *CONF_imodule_get_name(const CONF_IMODULE *md); +const char *CONF_imodule_get_value(const CONF_IMODULE *md); +void *CONF_imodule_get_usr_data(const CONF_IMODULE *md); +void CONF_imodule_set_usr_data(CONF_IMODULE *md, void *usr_data); +CONF_MODULE *CONF_imodule_get_module(const CONF_IMODULE *md); +unsigned long CONF_imodule_get_flags(const CONF_IMODULE *md); +void CONF_imodule_set_flags(CONF_IMODULE *md, unsigned long flags); +void *CONF_module_get_usr_data(CONF_MODULE *pmod); +void CONF_module_set_usr_data(CONF_MODULE *pmod, void *usr_data); + +char *CONF_get1_default_config_file(void); + +int CONF_parse_list(const char *list, int sep, int nospc, + int (*list_cb)(const char *elem, int len, void *usr), void *arg); + +void OPENSSL_load_builtin_modules(void); + +/* BEGIN ERROR CODES */ +/* The following lines are auto generated by the script mkerr.pl. Any changes + * made after this point may be overwritten when the script is next run. + */ +void ERR_load_CONF_strings(void); + +/* Error codes for the CONF functions. */ + +/* Function codes. */ +#define CONF_F_CONF_DUMP_FP 104 +#define CONF_F_CONF_LOAD 100 +#define CONF_F_CONF_LOAD_BIO 102 +#define CONF_F_CONF_LOAD_FP 103 +#define CONF_F_CONF_MODULES_LOAD 116 +#define CONF_F_CONF_PARSE_LIST 119 +#define CONF_F_DEF_LOAD 120 +#define CONF_F_DEF_LOAD_BIO 121 +#define CONF_F_MODULE_INIT 115 +#define CONF_F_MODULE_LOAD_DSO 117 +#define CONF_F_MODULE_RUN 118 +#define CONF_F_NCONF_DUMP_BIO 105 +#define CONF_F_NCONF_DUMP_FP 106 +#define CONF_F_NCONF_GET_NUMBER 107 +#define CONF_F_NCONF_GET_NUMBER_E 112 +#define CONF_F_NCONF_GET_SECTION 108 +#define CONF_F_NCONF_GET_STRING 109 +#define CONF_F_NCONF_LOAD 113 +#define CONF_F_NCONF_LOAD_BIO 110 +#define CONF_F_NCONF_LOAD_FP 114 +#define CONF_F_NCONF_NEW 111 +#define CONF_F_STR_COPY 101 + +/* Reason codes. */ +#define CONF_R_ERROR_LOADING_DSO 110 +#define CONF_R_LIST_CANNOT_BE_NULL 115 +#define CONF_R_MISSING_CLOSE_SQUARE_BRACKET 100 +#define CONF_R_MISSING_EQUAL_SIGN 101 +#define CONF_R_MISSING_FINISH_FUNCTION 111 +#define CONF_R_MISSING_INIT_FUNCTION 112 +#define CONF_R_MODULE_INITIALIZATION_ERROR 109 +#define CONF_R_NO_CLOSE_BRACE 102 +#define CONF_R_NO_CONF 105 +#define CONF_R_NO_CONF_OR_ENVIRONMENT_VARIABLE 106 +#define CONF_R_NO_SECTION 107 +#define CONF_R_NO_SUCH_FILE 114 +#define CONF_R_NO_VALUE 108 +#define CONF_R_UNABLE_TO_CREATE_NEW_SECTION 103 +#define CONF_R_UNKNOWN_MODULE_NAME 113 +#define CONF_R_VARIABLE_HAS_NO_VALUE 104 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/extra_lib/include/openssl/crypto.h b/extra_lib/include/openssl/crypto.h new file mode 100644 index 0000000..b0360ce --- /dev/null +++ b/extra_lib/include/openssl/crypto.h @@ -0,0 +1,575 @@ +/* crypto/crypto.h */ +/* ==================================================================== + * Copyright (c) 1998-2006 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED 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 OpenSSL PROJECT OR + * ITS 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. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 AUTHOR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ +/* ==================================================================== + * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. + * ECDH support in OpenSSL originally developed by + * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project. + */ + +#ifndef HEADER_CRYPTO_H +#define HEADER_CRYPTO_H + +#include + +#include + +#ifndef OPENSSL_NO_FP_API +#include +#endif + +#include +#include +#include +#include + +#ifdef CHARSET_EBCDIC +#include +#endif + +/* Resolve problems on some operating systems with symbol names that clash + one way or another */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Backward compatibility to SSLeay */ +/* This is more to be used to check the correct DLL is being used + * in the MS world. */ +#define SSLEAY_VERSION_NUMBER OPENSSL_VERSION_NUMBER +#define SSLEAY_VERSION 0 +/* #define SSLEAY_OPTIONS 1 no longer supported */ +#define SSLEAY_CFLAGS 2 +#define SSLEAY_BUILT_ON 3 +#define SSLEAY_PLATFORM 4 +#define SSLEAY_DIR 5 + +/* Already declared in ossl_typ.h */ +#if 0 +typedef struct crypto_ex_data_st CRYPTO_EX_DATA; +/* Called when a new object is created */ +typedef int CRYPTO_EX_new(void *parent, void *ptr, CRYPTO_EX_DATA *ad, + int idx, long argl, void *argp); +/* Called when an object is free()ed */ +typedef void CRYPTO_EX_free(void *parent, void *ptr, CRYPTO_EX_DATA *ad, + int idx, long argl, void *argp); +/* Called when we need to dup an object */ +typedef int CRYPTO_EX_dup(CRYPTO_EX_DATA *to, CRYPTO_EX_DATA *from, void *from_d, + int idx, long argl, void *argp); +#endif + +/* A generic structure to pass assorted data in a expandable way */ +typedef struct openssl_item_st + { + int code; + void *value; /* Not used for flag attributes */ + size_t value_size; /* Max size of value for output, length for input */ + size_t *value_length; /* Returned length of value for output */ + } OPENSSL_ITEM; + + +/* When changing the CRYPTO_LOCK_* list, be sure to maintin the text lock + * names in cryptlib.c + */ + +#define CRYPTO_LOCK_ERR 1 +#define CRYPTO_LOCK_EX_DATA 2 +#define CRYPTO_LOCK_X509 3 +#define CRYPTO_LOCK_X509_INFO 4 +#define CRYPTO_LOCK_X509_PKEY 5 +#define CRYPTO_LOCK_X509_CRL 6 +#define CRYPTO_LOCK_X509_REQ 7 +#define CRYPTO_LOCK_DSA 8 +#define CRYPTO_LOCK_RSA 9 +#define CRYPTO_LOCK_EVP_PKEY 10 +#define CRYPTO_LOCK_X509_STORE 11 +#define CRYPTO_LOCK_SSL_CTX 12 +#define CRYPTO_LOCK_SSL_CERT 13 +#define CRYPTO_LOCK_SSL_SESSION 14 +#define CRYPTO_LOCK_SSL_SESS_CERT 15 +#define CRYPTO_LOCK_SSL 16 +#define CRYPTO_LOCK_SSL_METHOD 17 +#define CRYPTO_LOCK_RAND 18 +#define CRYPTO_LOCK_RAND2 19 +#define CRYPTO_LOCK_MALLOC 20 +#define CRYPTO_LOCK_BIO 21 +#define CRYPTO_LOCK_GETHOSTBYNAME 22 +#define CRYPTO_LOCK_GETSERVBYNAME 23 +#define CRYPTO_LOCK_READDIR 24 +#define CRYPTO_LOCK_RSA_BLINDING 25 +#define CRYPTO_LOCK_DH 26 +#define CRYPTO_LOCK_MALLOC2 27 +#define CRYPTO_LOCK_DSO 28 +#define CRYPTO_LOCK_DYNLOCK 29 +#define CRYPTO_LOCK_ENGINE 30 +#define CRYPTO_LOCK_UI 31 +#define CRYPTO_LOCK_ECDSA 32 +#define CRYPTO_LOCK_EC 33 +#define CRYPTO_LOCK_ECDH 34 +#define CRYPTO_LOCK_BN 35 +#define CRYPTO_LOCK_EC_PRE_COMP 36 +#define CRYPTO_LOCK_STORE 37 +#define CRYPTO_LOCK_COMP 38 +#define CRYPTO_LOCK_FIPS 39 +#define CRYPTO_LOCK_FIPS2 40 +#define CRYPTO_NUM_LOCKS 41 + +#define CRYPTO_LOCK 1 +#define CRYPTO_UNLOCK 2 +#define CRYPTO_READ 4 +#define CRYPTO_WRITE 8 + +#ifndef OPENSSL_NO_LOCKING +#ifndef CRYPTO_w_lock +#define CRYPTO_w_lock(type) \ + CRYPTO_lock(CRYPTO_LOCK|CRYPTO_WRITE,type,__FILE__,__LINE__) +#define CRYPTO_w_unlock(type) \ + CRYPTO_lock(CRYPTO_UNLOCK|CRYPTO_WRITE,type,__FILE__,__LINE__) +#define CRYPTO_r_lock(type) \ + CRYPTO_lock(CRYPTO_LOCK|CRYPTO_READ,type,__FILE__,__LINE__) +#define CRYPTO_r_unlock(type) \ + CRYPTO_lock(CRYPTO_UNLOCK|CRYPTO_READ,type,__FILE__,__LINE__) +#define CRYPTO_add(addr,amount,type) \ + CRYPTO_add_lock(addr,amount,type,__FILE__,__LINE__) +#endif +#else +#define CRYPTO_w_lock(a) +#define CRYPTO_w_unlock(a) +#define CRYPTO_r_lock(a) +#define CRYPTO_r_unlock(a) +#define CRYPTO_add(a,b,c) ((*(a))+=(b)) +#endif + +/* Some applications as well as some parts of OpenSSL need to allocate + and deallocate locks in a dynamic fashion. The following typedef + makes this possible in a type-safe manner. */ +/* struct CRYPTO_dynlock_value has to be defined by the application. */ +typedef struct + { + int references; + struct CRYPTO_dynlock_value *data; + } CRYPTO_dynlock; + + +/* The following can be used to detect memory leaks in the SSLeay library. + * It used, it turns on malloc checking */ + +#define CRYPTO_MEM_CHECK_OFF 0x0 /* an enume */ +#define CRYPTO_MEM_CHECK_ON 0x1 /* a bit */ +#define CRYPTO_MEM_CHECK_ENABLE 0x2 /* a bit */ +#define CRYPTO_MEM_CHECK_DISABLE 0x3 /* an enume */ + +/* The following are bit values to turn on or off options connected to the + * malloc checking functionality */ + +/* Adds time to the memory checking information */ +#define V_CRYPTO_MDEBUG_TIME 0x1 /* a bit */ +/* Adds thread number to the memory checking information */ +#define V_CRYPTO_MDEBUG_THREAD 0x2 /* a bit */ + +#define V_CRYPTO_MDEBUG_ALL (V_CRYPTO_MDEBUG_TIME | V_CRYPTO_MDEBUG_THREAD) + + +/* predec of the BIO type */ +typedef struct bio_st BIO_dummy; + +struct crypto_ex_data_st + { + STACK_OF(void) *sk; + int dummy; /* gcc is screwing up this data structure :-( */ + }; +DECLARE_STACK_OF(void) + +/* This stuff is basically class callback functions + * The current classes are SSL_CTX, SSL, SSL_SESSION, and a few more */ + +typedef struct crypto_ex_data_func_st + { + long argl; /* Arbitary long */ + void *argp; /* Arbitary void * */ + CRYPTO_EX_new *new_func; + CRYPTO_EX_free *free_func; + CRYPTO_EX_dup *dup_func; + } CRYPTO_EX_DATA_FUNCS; + +DECLARE_STACK_OF(CRYPTO_EX_DATA_FUNCS) + +/* Per class, we have a STACK of CRYPTO_EX_DATA_FUNCS for each CRYPTO_EX_DATA + * entry. + */ + +#define CRYPTO_EX_INDEX_BIO 0 +#define CRYPTO_EX_INDEX_SSL 1 +#define CRYPTO_EX_INDEX_SSL_CTX 2 +#define CRYPTO_EX_INDEX_SSL_SESSION 3 +#define CRYPTO_EX_INDEX_X509_STORE 4 +#define CRYPTO_EX_INDEX_X509_STORE_CTX 5 +#define CRYPTO_EX_INDEX_RSA 6 +#define CRYPTO_EX_INDEX_DSA 7 +#define CRYPTO_EX_INDEX_DH 8 +#define CRYPTO_EX_INDEX_ENGINE 9 +#define CRYPTO_EX_INDEX_X509 10 +#define CRYPTO_EX_INDEX_UI 11 +#define CRYPTO_EX_INDEX_ECDSA 12 +#define CRYPTO_EX_INDEX_ECDH 13 +#define CRYPTO_EX_INDEX_COMP 14 +#define CRYPTO_EX_INDEX_STORE 15 + +/* Dynamically assigned indexes start from this value (don't use directly, use + * via CRYPTO_ex_data_new_class). */ +#define CRYPTO_EX_INDEX_USER 100 + + +/* This is the default callbacks, but we can have others as well: + * this is needed in Win32 where the application malloc and the + * library malloc may not be the same. + */ +#define CRYPTO_malloc_init() CRYPTO_set_mem_functions(\ + malloc, realloc, free) + +#if defined CRYPTO_MDEBUG_ALL || defined CRYPTO_MDEBUG_TIME || defined CRYPTO_MDEBUG_THREAD +# ifndef CRYPTO_MDEBUG /* avoid duplicate #define */ +# define CRYPTO_MDEBUG +# endif +#endif + +/* Set standard debugging functions (not done by default + * unless CRYPTO_MDEBUG is defined) */ +#define CRYPTO_malloc_debug_init() do {\ + CRYPTO_set_mem_debug_functions(\ + CRYPTO_dbg_malloc,\ + CRYPTO_dbg_realloc,\ + CRYPTO_dbg_free,\ + CRYPTO_dbg_set_options,\ + CRYPTO_dbg_get_options);\ + } while(0) + +int CRYPTO_mem_ctrl(int mode); +int CRYPTO_is_mem_check_on(void); + +/* for applications */ +#define MemCheck_start() CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON) +#define MemCheck_stop() CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_OFF) + +/* for library-internal use */ +#define MemCheck_on() CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ENABLE) +#define MemCheck_off() CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_DISABLE) +#define is_MemCheck_on() CRYPTO_is_mem_check_on() + +#define OPENSSL_malloc(num) CRYPTO_malloc((int)num,__FILE__,__LINE__) +#define OPENSSL_strdup(str) CRYPTO_strdup((str),__FILE__,__LINE__) +#define OPENSSL_realloc(addr,num) \ + CRYPTO_realloc((char *)addr,(int)num,__FILE__,__LINE__) +#define OPENSSL_realloc_clean(addr,old_num,num) \ + CRYPTO_realloc_clean(addr,old_num,num,__FILE__,__LINE__) +#define OPENSSL_remalloc(addr,num) \ + CRYPTO_remalloc((char **)addr,(int)num,__FILE__,__LINE__) +#define OPENSSL_freeFunc CRYPTO_free +#define OPENSSL_free(addr) CRYPTO_free(addr) + +#define OPENSSL_malloc_locked(num) \ + CRYPTO_malloc_locked((int)num,__FILE__,__LINE__) +#define OPENSSL_free_locked(addr) CRYPTO_free_locked(addr) + + +const char *SSLeay_version(int type); +unsigned long SSLeay(void); + +int OPENSSL_issetugid(void); + +/* An opaque type representing an implementation of "ex_data" support */ +typedef struct st_CRYPTO_EX_DATA_IMPL CRYPTO_EX_DATA_IMPL; +/* Return an opaque pointer to the current "ex_data" implementation */ +const CRYPTO_EX_DATA_IMPL *CRYPTO_get_ex_data_implementation(void); +/* Sets the "ex_data" implementation to be used (if it's not too late) */ +int CRYPTO_set_ex_data_implementation(const CRYPTO_EX_DATA_IMPL *i); +/* Get a new "ex_data" class, and return the corresponding "class_index" */ +int CRYPTO_ex_data_new_class(void); +/* Within a given class, get/register a new index */ +int CRYPTO_get_ex_new_index(int class_index, long argl, void *argp, + CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, + CRYPTO_EX_free *free_func); +/* Initialise/duplicate/free CRYPTO_EX_DATA variables corresponding to a given + * class (invokes whatever per-class callbacks are applicable) */ +int CRYPTO_new_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad); +int CRYPTO_dup_ex_data(int class_index, CRYPTO_EX_DATA *to, + CRYPTO_EX_DATA *from); +void CRYPTO_free_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad); +/* Get/set data in a CRYPTO_EX_DATA variable corresponding to a particular index + * (relative to the class type involved) */ +int CRYPTO_set_ex_data(CRYPTO_EX_DATA *ad, int idx, void *val); +void *CRYPTO_get_ex_data(const CRYPTO_EX_DATA *ad,int idx); +/* This function cleans up all "ex_data" state. It mustn't be called under + * potential race-conditions. */ +void CRYPTO_cleanup_all_ex_data(void); + +int CRYPTO_get_new_lockid(char *name); + +int CRYPTO_num_locks(void); /* return CRYPTO_NUM_LOCKS (shared libs!) */ +void CRYPTO_lock(int mode, int type,const char *file,int line); +void CRYPTO_set_locking_callback(void (*func)(int mode,int type, + const char *file,int line)); +void (*CRYPTO_get_locking_callback(void))(int mode,int type,const char *file, + int line); +void CRYPTO_set_add_lock_callback(int (*func)(int *num,int mount,int type, + const char *file, int line)); +int (*CRYPTO_get_add_lock_callback(void))(int *num,int mount,int type, + const char *file,int line); + +/* Don't use this structure directly. */ +typedef struct crypto_threadid_st + { + void *ptr; + unsigned long val; + } CRYPTO_THREADID; +/* Only use CRYPTO_THREADID_set_[numeric|pointer]() within callbacks */ +void CRYPTO_THREADID_set_numeric(CRYPTO_THREADID *id, unsigned long val); +void CRYPTO_THREADID_set_pointer(CRYPTO_THREADID *id, void *ptr); +int CRYPTO_THREADID_set_callback(void (*threadid_func)(CRYPTO_THREADID *)); +void (*CRYPTO_THREADID_get_callback(void))(CRYPTO_THREADID *); +void CRYPTO_THREADID_current(CRYPTO_THREADID *id); +int CRYPTO_THREADID_cmp(const CRYPTO_THREADID *a, const CRYPTO_THREADID *b); +void CRYPTO_THREADID_cpy(CRYPTO_THREADID *dest, const CRYPTO_THREADID *src); +unsigned long CRYPTO_THREADID_hash(const CRYPTO_THREADID *id); +#ifndef OPENSSL_NO_DEPRECATED +void CRYPTO_set_id_callback(unsigned long (*func)(void)); +unsigned long (*CRYPTO_get_id_callback(void))(void); +unsigned long CRYPTO_thread_id(void); +#endif + +const char *CRYPTO_get_lock_name(int type); +int CRYPTO_add_lock(int *pointer,int amount,int type, const char *file, + int line); + +int CRYPTO_get_new_dynlockid(void); +void CRYPTO_destroy_dynlockid(int i); +struct CRYPTO_dynlock_value *CRYPTO_get_dynlock_value(int i); +void CRYPTO_set_dynlock_create_callback(struct CRYPTO_dynlock_value *(*dyn_create_function)(const char *file, int line)); +void CRYPTO_set_dynlock_lock_callback(void (*dyn_lock_function)(int mode, struct CRYPTO_dynlock_value *l, const char *file, int line)); +void CRYPTO_set_dynlock_destroy_callback(void (*dyn_destroy_function)(struct CRYPTO_dynlock_value *l, const char *file, int line)); +struct CRYPTO_dynlock_value *(*CRYPTO_get_dynlock_create_callback(void))(const char *file,int line); +void (*CRYPTO_get_dynlock_lock_callback(void))(int mode, struct CRYPTO_dynlock_value *l, const char *file,int line); +void (*CRYPTO_get_dynlock_destroy_callback(void))(struct CRYPTO_dynlock_value *l, const char *file,int line); + +/* CRYPTO_set_mem_functions includes CRYPTO_set_locked_mem_functions -- + * call the latter last if you need different functions */ +int CRYPTO_set_mem_functions(void *(*m)(size_t),void *(*r)(void *,size_t), void (*f)(void *)); +int CRYPTO_set_locked_mem_functions(void *(*m)(size_t), void (*free_func)(void *)); +int CRYPTO_set_mem_ex_functions(void *(*m)(size_t,const char *,int), + void *(*r)(void *,size_t,const char *,int), + void (*f)(void *)); +int CRYPTO_set_locked_mem_ex_functions(void *(*m)(size_t,const char *,int), + void (*free_func)(void *)); +int CRYPTO_set_mem_debug_functions(void (*m)(void *,int,const char *,int,int), + void (*r)(void *,void *,int,const char *,int,int), + void (*f)(void *,int), + void (*so)(long), + long (*go)(void)); +void CRYPTO_get_mem_functions(void *(**m)(size_t),void *(**r)(void *, size_t), void (**f)(void *)); +void CRYPTO_get_locked_mem_functions(void *(**m)(size_t), void (**f)(void *)); +void CRYPTO_get_mem_ex_functions(void *(**m)(size_t,const char *,int), + void *(**r)(void *, size_t,const char *,int), + void (**f)(void *)); +void CRYPTO_get_locked_mem_ex_functions(void *(**m)(size_t,const char *,int), + void (**f)(void *)); +void CRYPTO_get_mem_debug_functions(void (**m)(void *,int,const char *,int,int), + void (**r)(void *,void *,int,const char *,int,int), + void (**f)(void *,int), + void (**so)(long), + long (**go)(void)); + +void *CRYPTO_malloc_locked(int num, const char *file, int line); +void CRYPTO_free_locked(void *); +void *CRYPTO_malloc(int num, const char *file, int line); +char *CRYPTO_strdup(const char *str, const char *file, int line); +void CRYPTO_free(void *); +void *CRYPTO_realloc(void *addr,int num, const char *file, int line); +void *CRYPTO_realloc_clean(void *addr,int old_num,int num,const char *file, + int line); +void *CRYPTO_remalloc(void *addr,int num, const char *file, int line); + +void OPENSSL_cleanse(void *ptr, size_t len); + +void CRYPTO_set_mem_debug_options(long bits); +long CRYPTO_get_mem_debug_options(void); + +#define CRYPTO_push_info(info) \ + CRYPTO_push_info_(info, __FILE__, __LINE__); +int CRYPTO_push_info_(const char *info, const char *file, int line); +int CRYPTO_pop_info(void); +int CRYPTO_remove_all_info(void); + + +/* Default debugging functions (enabled by CRYPTO_malloc_debug_init() macro; + * used as default in CRYPTO_MDEBUG compilations): */ +/* The last argument has the following significance: + * + * 0: called before the actual memory allocation has taken place + * 1: called after the actual memory allocation has taken place + */ +void CRYPTO_dbg_malloc(void *addr,int num,const char *file,int line,int before_p); +void CRYPTO_dbg_realloc(void *addr1,void *addr2,int num,const char *file,int line,int before_p); +void CRYPTO_dbg_free(void *addr,int before_p); +/* Tell the debugging code about options. By default, the following values + * apply: + * + * 0: Clear all options. + * V_CRYPTO_MDEBUG_TIME (1): Set the "Show Time" option. + * V_CRYPTO_MDEBUG_THREAD (2): Set the "Show Thread Number" option. + * V_CRYPTO_MDEBUG_ALL (3): 1 + 2 + */ +void CRYPTO_dbg_set_options(long bits); +long CRYPTO_dbg_get_options(void); + + +#ifndef OPENSSL_NO_FP_API +void CRYPTO_mem_leaks_fp(FILE *); +#endif +void CRYPTO_mem_leaks(struct bio_st *bio); +/* unsigned long order, char *file, int line, int num_bytes, char *addr */ +typedef void *CRYPTO_MEM_LEAK_CB(unsigned long, const char *, int, int, void *); +void CRYPTO_mem_leaks_cb(CRYPTO_MEM_LEAK_CB *cb); + +/* die if we have to */ +void OpenSSLDie(const char *file,int line,const char *assertion); +#define OPENSSL_assert(e) (void)((e) ? 0 : (OpenSSLDie(__FILE__, __LINE__, #e),1)) + +unsigned long *OPENSSL_ia32cap_loc(void); +#define OPENSSL_ia32cap (*(OPENSSL_ia32cap_loc())) +int OPENSSL_isservice(void); + +/* BEGIN ERROR CODES */ +/* The following lines are auto generated by the script mkerr.pl. Any changes + * made after this point may be overwritten when the script is next run. + */ +void ERR_load_CRYPTO_strings(void); + +/* Error codes for the CRYPTO functions. */ + +/* Function codes. */ +#define CRYPTO_F_CRYPTO_GET_EX_NEW_INDEX 100 +#define CRYPTO_F_CRYPTO_GET_NEW_DYNLOCKID 103 +#define CRYPTO_F_CRYPTO_GET_NEW_LOCKID 101 +#define CRYPTO_F_CRYPTO_SET_EX_DATA 102 +#define CRYPTO_F_DEF_ADD_INDEX 104 +#define CRYPTO_F_DEF_GET_CLASS 105 +#define CRYPTO_F_INT_DUP_EX_DATA 106 +#define CRYPTO_F_INT_FREE_EX_DATA 107 +#define CRYPTO_F_INT_NEW_EX_DATA 108 + +/* Reason codes. */ +#define CRYPTO_R_NO_DYNLOCK_CREATE_CALLBACK 100 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/extra_lib/include/openssl/dh.h b/extra_lib/include/openssl/dh.h new file mode 100644 index 0000000..849309a --- /dev/null +++ b/extra_lib/include/openssl/dh.h @@ -0,0 +1,260 @@ +/* crypto/dh/dh.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 AUTHOR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_DH_H +#define HEADER_DH_H + +#include + +#ifdef OPENSSL_NO_DH +#error DH is disabled. +#endif + +#ifndef OPENSSL_NO_BIO +#include +#endif +#include +#ifndef OPENSSL_NO_DEPRECATED +#include +#endif + +#ifndef OPENSSL_DH_MAX_MODULUS_BITS +# define OPENSSL_DH_MAX_MODULUS_BITS 10000 +#endif + +#define DH_FLAG_CACHE_MONT_P 0x01 +#define DH_FLAG_NO_EXP_CONSTTIME 0x02 /* new with 0.9.7h; the built-in DH + * implementation now uses constant time + * modular exponentiation for secret exponents + * by default. This flag causes the + * faster variable sliding window method to + * be used for all exponents. + */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* Already defined in ossl_typ.h */ +/* typedef struct dh_st DH; */ +/* typedef struct dh_method DH_METHOD; */ + +struct dh_method + { + const char *name; + /* Methods here */ + int (*generate_key)(DH *dh); + int (*compute_key)(unsigned char *key,const BIGNUM *pub_key,DH *dh); + int (*bn_mod_exp)(const DH *dh, BIGNUM *r, const BIGNUM *a, + const BIGNUM *p, const BIGNUM *m, BN_CTX *ctx, + BN_MONT_CTX *m_ctx); /* Can be null */ + + int (*init)(DH *dh); + int (*finish)(DH *dh); + int flags; + char *app_data; + /* If this is non-NULL, it will be used to generate parameters */ + int (*generate_params)(DH *dh, int prime_len, int generator, BN_GENCB *cb); + }; + +struct dh_st + { + /* This first argument is used to pick up errors when + * a DH is passed instead of a EVP_PKEY */ + int pad; + int version; + BIGNUM *p; + BIGNUM *g; + long length; /* optional */ + BIGNUM *pub_key; /* g^x */ + BIGNUM *priv_key; /* x */ + + int flags; + BN_MONT_CTX *method_mont_p; + /* Place holders if we want to do X9.42 DH */ + BIGNUM *q; + BIGNUM *j; + unsigned char *seed; + int seedlen; + BIGNUM *counter; + + int references; + CRYPTO_EX_DATA ex_data; + const DH_METHOD *meth; + ENGINE *engine; + }; + +#define DH_GENERATOR_2 2 +/* #define DH_GENERATOR_3 3 */ +#define DH_GENERATOR_5 5 + +/* DH_check error codes */ +#define DH_CHECK_P_NOT_PRIME 0x01 +#define DH_CHECK_P_NOT_SAFE_PRIME 0x02 +#define DH_UNABLE_TO_CHECK_GENERATOR 0x04 +#define DH_NOT_SUITABLE_GENERATOR 0x08 + +/* DH_check_pub_key error codes */ +#define DH_CHECK_PUBKEY_TOO_SMALL 0x01 +#define DH_CHECK_PUBKEY_TOO_LARGE 0x02 + +/* primes p where (p-1)/2 is prime too are called "safe"; we define + this for backward compatibility: */ +#define DH_CHECK_P_NOT_STRONG_PRIME DH_CHECK_P_NOT_SAFE_PRIME + +#define d2i_DHparams_fp(fp,x) (DH *)ASN1_d2i_fp((char *(*)())DH_new, \ + (char *(*)())d2i_DHparams,(fp),(unsigned char **)(x)) +#define i2d_DHparams_fp(fp,x) ASN1_i2d_fp(i2d_DHparams,(fp), \ + (unsigned char *)(x)) +#define d2i_DHparams_bio(bp,x) ASN1_d2i_bio_of(DH,DH_new,d2i_DHparams,bp,x) +#define i2d_DHparams_bio(bp,x) ASN1_i2d_bio_of_const(DH,i2d_DHparams,bp,x) + +DH *DHparams_dup(DH *); + +const DH_METHOD *DH_OpenSSL(void); + +void DH_set_default_method(const DH_METHOD *meth); +const DH_METHOD *DH_get_default_method(void); +int DH_set_method(DH *dh, const DH_METHOD *meth); +DH *DH_new_method(ENGINE *engine); + +DH * DH_new(void); +void DH_free(DH *dh); +int DH_up_ref(DH *dh); +int DH_size(const DH *dh); +int DH_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, + CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); +int DH_set_ex_data(DH *d, int idx, void *arg); +void *DH_get_ex_data(DH *d, int idx); + +/* Deprecated version */ +#ifndef OPENSSL_NO_DEPRECATED +DH * DH_generate_parameters(int prime_len,int generator, + void (*callback)(int,int,void *),void *cb_arg); +#endif /* !defined(OPENSSL_NO_DEPRECATED) */ + +/* New version */ +int DH_generate_parameters_ex(DH *dh, int prime_len,int generator, BN_GENCB *cb); + +int DH_check(const DH *dh,int *codes); +int DH_check_pub_key(const DH *dh,const BIGNUM *pub_key, int *codes); +int DH_generate_key(DH *dh); +int DH_compute_key(unsigned char *key,const BIGNUM *pub_key,DH *dh); +DH * d2i_DHparams(DH **a,const unsigned char **pp, long length); +int i2d_DHparams(const DH *a,unsigned char **pp); +#ifndef OPENSSL_NO_FP_API +int DHparams_print_fp(FILE *fp, const DH *x); +#endif +#ifndef OPENSSL_NO_BIO +int DHparams_print(BIO *bp, const DH *x); +#else +int DHparams_print(char *bp, const DH *x); +#endif + +#define EVP_PKEY_CTX_set_dh_paramgen_prime_len(ctx, len) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \ + EVP_PKEY_CTRL_DH_PARAMGEN_PRIME_LEN, len, NULL) + +#define EVP_PKEY_CTX_set_dh_paramgen_generator(ctx, gen) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \ + EVP_PKEY_CTRL_DH_PARAMGEN_GENERATOR, gen, NULL) + +#define EVP_PKEY_CTRL_DH_PARAMGEN_PRIME_LEN (EVP_PKEY_ALG_CTRL + 1) +#define EVP_PKEY_CTRL_DH_PARAMGEN_GENERATOR (EVP_PKEY_ALG_CTRL + 2) + + +/* BEGIN ERROR CODES */ +/* The following lines are auto generated by the script mkerr.pl. Any changes + * made after this point may be overwritten when the script is next run. + */ +void ERR_load_DH_strings(void); + +/* Error codes for the DH functions. */ + +/* Function codes. */ +#define DH_F_COMPUTE_KEY 102 +#define DH_F_DHPARAMS_PRINT_FP 101 +#define DH_F_DH_BUILTIN_GENPARAMS 106 +#define DH_F_DH_NEW_METHOD 105 +#define DH_F_DH_PARAM_DECODE 107 +#define DH_F_DH_PRIV_DECODE 110 +#define DH_F_DH_PRIV_ENCODE 111 +#define DH_F_DH_PUB_DECODE 108 +#define DH_F_DH_PUB_ENCODE 109 +#define DH_F_DO_DH_PRINT 100 +#define DH_F_GENERATE_KEY 103 +#define DH_F_GENERATE_PARAMETERS 104 +#define DH_F_PKEY_DH_DERIVE 112 +#define DH_F_PKEY_DH_KEYGEN 113 + +/* Reason codes. */ +#define DH_R_BAD_GENERATOR 101 +#define DH_R_BN_DECODE_ERROR 109 +#define DH_R_BN_ERROR 106 +#define DH_R_DECODE_ERROR 104 +#define DH_R_INVALID_PUBKEY 102 +#define DH_R_KEYS_NOT_SET 108 +#define DH_R_MODULUS_TOO_LARGE 103 +#define DH_R_NO_PARAMETERS_SET 107 +#define DH_R_NO_PRIVATE_VALUE 100 +#define DH_R_PARAMETER_ENCODING_ERROR 105 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/extra_lib/include/openssl/dsa.h b/extra_lib/include/openssl/dsa.h new file mode 100644 index 0000000..ac50a5c --- /dev/null +++ b/extra_lib/include/openssl/dsa.h @@ -0,0 +1,307 @@ +/* crypto/dsa/dsa.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 AUTHOR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +/* + * The DSS routines are based on patches supplied by + * Steven Schoch . He basically did the + * work and I have just tweaked them a little to fit into my + * stylistic vision for SSLeay :-) */ + +#ifndef HEADER_DSA_H +#define HEADER_DSA_H + +#include + +#ifdef OPENSSL_NO_DSA +#error DSA is disabled. +#endif + +#ifndef OPENSSL_NO_BIO +#include +#endif +#include +#include + +#ifndef OPENSSL_NO_DEPRECATED +#include +#ifndef OPENSSL_NO_DH +# include +#endif +#endif + +#ifndef OPENSSL_DSA_MAX_MODULUS_BITS +# define OPENSSL_DSA_MAX_MODULUS_BITS 10000 +#endif + +#define DSA_FLAG_CACHE_MONT_P 0x01 +#define DSA_FLAG_NO_EXP_CONSTTIME 0x02 /* new with 0.9.7h; the built-in DSA + * implementation now uses constant time + * modular exponentiation for secret exponents + * by default. This flag causes the + * faster variable sliding window method to + * be used for all exponents. + */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* Already defined in ossl_typ.h */ +/* typedef struct dsa_st DSA; */ +/* typedef struct dsa_method DSA_METHOD; */ + +typedef struct DSA_SIG_st + { + BIGNUM *r; + BIGNUM *s; + } DSA_SIG; + +struct dsa_method + { + const char *name; + DSA_SIG * (*dsa_do_sign)(const unsigned char *dgst, int dlen, DSA *dsa); + int (*dsa_sign_setup)(DSA *dsa, BN_CTX *ctx_in, BIGNUM **kinvp, + BIGNUM **rp); + int (*dsa_do_verify)(const unsigned char *dgst, int dgst_len, + DSA_SIG *sig, DSA *dsa); + int (*dsa_mod_exp)(DSA *dsa, BIGNUM *rr, BIGNUM *a1, BIGNUM *p1, + BIGNUM *a2, BIGNUM *p2, BIGNUM *m, BN_CTX *ctx, + BN_MONT_CTX *in_mont); + int (*bn_mod_exp)(DSA *dsa, BIGNUM *r, BIGNUM *a, const BIGNUM *p, + const BIGNUM *m, BN_CTX *ctx, + BN_MONT_CTX *m_ctx); /* Can be null */ + int (*init)(DSA *dsa); + int (*finish)(DSA *dsa); + int flags; + char *app_data; + /* If this is non-NULL, it is used to generate DSA parameters */ + int (*dsa_paramgen)(DSA *dsa, int bits, + const unsigned char *seed, int seed_len, + int *counter_ret, unsigned long *h_ret, + BN_GENCB *cb); + /* If this is non-NULL, it is used to generate DSA keys */ + int (*dsa_keygen)(DSA *dsa); + }; + +struct dsa_st + { + /* This first variable is used to pick up errors where + * a DSA is passed instead of of a EVP_PKEY */ + int pad; + long version; + int write_params; + BIGNUM *p; + BIGNUM *q; /* == 20 */ + BIGNUM *g; + + BIGNUM *pub_key; /* y public key */ + BIGNUM *priv_key; /* x private key */ + + BIGNUM *kinv; /* Signing pre-calc */ + BIGNUM *r; /* Signing pre-calc */ + + int flags; + /* Normally used to cache montgomery values */ + BN_MONT_CTX *method_mont_p; + int references; + CRYPTO_EX_DATA ex_data; + const DSA_METHOD *meth; + /* functional reference if 'meth' is ENGINE-provided */ + ENGINE *engine; + }; + +#define d2i_DSAparams_fp(fp,x) (DSA *)ASN1_d2i_fp((char *(*)())DSA_new, \ + (char *(*)())d2i_DSAparams,(fp),(unsigned char **)(x)) +#define i2d_DSAparams_fp(fp,x) ASN1_i2d_fp(i2d_DSAparams,(fp), \ + (unsigned char *)(x)) +#define d2i_DSAparams_bio(bp,x) ASN1_d2i_bio_of(DSA,DSA_new,d2i_DSAparams,bp,x) +#define i2d_DSAparams_bio(bp,x) ASN1_i2d_bio_of_const(DSA,i2d_DSAparams,bp,x) + + +DSA *DSAparams_dup(DSA *x); +DSA_SIG * DSA_SIG_new(void); +void DSA_SIG_free(DSA_SIG *a); +int i2d_DSA_SIG(const DSA_SIG *a, unsigned char **pp); +DSA_SIG * d2i_DSA_SIG(DSA_SIG **v, const unsigned char **pp, long length); + +DSA_SIG * DSA_do_sign(const unsigned char *dgst,int dlen,DSA *dsa); +int DSA_do_verify(const unsigned char *dgst,int dgst_len, + DSA_SIG *sig,DSA *dsa); + +const DSA_METHOD *DSA_OpenSSL(void); + +void DSA_set_default_method(const DSA_METHOD *); +const DSA_METHOD *DSA_get_default_method(void); +int DSA_set_method(DSA *dsa, const DSA_METHOD *); + +DSA * DSA_new(void); +DSA * DSA_new_method(ENGINE *engine); +void DSA_free (DSA *r); +/* "up" the DSA object's reference count */ +int DSA_up_ref(DSA *r); +int DSA_size(const DSA *); + /* next 4 return -1 on error */ +int DSA_sign_setup( DSA *dsa,BN_CTX *ctx_in,BIGNUM **kinvp,BIGNUM **rp); +int DSA_sign(int type,const unsigned char *dgst,int dlen, + unsigned char *sig, unsigned int *siglen, DSA *dsa); +int DSA_verify(int type,const unsigned char *dgst,int dgst_len, + const unsigned char *sigbuf, int siglen, DSA *dsa); +int DSA_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, + CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); +int DSA_set_ex_data(DSA *d, int idx, void *arg); +void *DSA_get_ex_data(DSA *d, int idx); + +DSA * d2i_DSAPublicKey(DSA **a, const unsigned char **pp, long length); +DSA * d2i_DSAPrivateKey(DSA **a, const unsigned char **pp, long length); +DSA * d2i_DSAparams(DSA **a, const unsigned char **pp, long length); + +/* Deprecated version */ +#ifndef OPENSSL_NO_DEPRECATED +DSA * DSA_generate_parameters(int bits, + unsigned char *seed,int seed_len, + int *counter_ret, unsigned long *h_ret,void + (*callback)(int, int, void *),void *cb_arg); +#endif /* !defined(OPENSSL_NO_DEPRECATED) */ + +/* New version */ +int DSA_generate_parameters_ex(DSA *dsa, int bits, + const unsigned char *seed,int seed_len, + int *counter_ret, unsigned long *h_ret, BN_GENCB *cb); + +int DSA_generate_key(DSA *a); +int i2d_DSAPublicKey(const DSA *a, unsigned char **pp); +int i2d_DSAPrivateKey(const DSA *a, unsigned char **pp); +int i2d_DSAparams(const DSA *a,unsigned char **pp); + +#ifndef OPENSSL_NO_BIO +int DSAparams_print(BIO *bp, const DSA *x); +int DSA_print(BIO *bp, const DSA *x, int off); +#endif +#ifndef OPENSSL_NO_FP_API +int DSAparams_print_fp(FILE *fp, const DSA *x); +int DSA_print_fp(FILE *bp, const DSA *x, int off); +#endif + +#define DSS_prime_checks 50 +/* Primality test according to FIPS PUB 186[-1], Appendix 2.1: + * 50 rounds of Rabin-Miller */ +#define DSA_is_prime(n, callback, cb_arg) \ + BN_is_prime(n, DSS_prime_checks, callback, NULL, cb_arg) + +#ifndef OPENSSL_NO_DH +/* Convert DSA structure (key or just parameters) into DH structure + * (be careful to avoid small subgroup attacks when using this!) */ +DH *DSA_dup_DH(const DSA *r); +#endif + +#define EVP_PKEY_CTX_set_dsa_paramgen_bits(ctx, nbits) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DSA, EVP_PKEY_OP_PARAMGEN, \ + EVP_PKEY_CTRL_DSA_PARAMGEN_BITS, nbits, NULL) + +#define EVP_PKEY_CTRL_DSA_PARAMGEN_BITS (EVP_PKEY_ALG_CTRL + 1) +#define EVP_PKEY_CTRL_DSA_PARAMGEN_Q_BITS (EVP_PKEY_ALG_CTRL + 2) +#define EVP_PKEY_CTRL_DSA_PARAMGEN_MD (EVP_PKEY_ALG_CTRL + 3) + +/* BEGIN ERROR CODES */ +/* The following lines are auto generated by the script mkerr.pl. Any changes + * made after this point may be overwritten when the script is next run. + */ +void ERR_load_DSA_strings(void); + +/* Error codes for the DSA functions. */ + +/* Function codes. */ +#define DSA_F_D2I_DSA_SIG 110 +#define DSA_F_DO_DSA_PRINT 104 +#define DSA_F_DSAPARAMS_PRINT 100 +#define DSA_F_DSAPARAMS_PRINT_FP 101 +#define DSA_F_DSA_DO_SIGN 112 +#define DSA_F_DSA_DO_VERIFY 113 +#define DSA_F_DSA_NEW_METHOD 103 +#define DSA_F_DSA_PARAM_DECODE 119 +#define DSA_F_DSA_PRINT_FP 105 +#define DSA_F_DSA_PRIV_DECODE 115 +#define DSA_F_DSA_PRIV_ENCODE 116 +#define DSA_F_DSA_PUB_DECODE 117 +#define DSA_F_DSA_PUB_ENCODE 118 +#define DSA_F_DSA_SIGN 106 +#define DSA_F_DSA_SIGN_SETUP 107 +#define DSA_F_DSA_SIG_NEW 109 +#define DSA_F_DSA_VERIFY 108 +#define DSA_F_I2D_DSA_SIG 111 +#define DSA_F_OLD_DSA_PRIV_DECODE 122 +#define DSA_F_PKEY_DSA_CTRL 120 +#define DSA_F_PKEY_DSA_KEYGEN 121 +#define DSA_F_SIG_CB 114 + +/* Reason codes. */ +#define DSA_R_BAD_Q_VALUE 102 +#define DSA_R_BN_DECODE_ERROR 108 +#define DSA_R_BN_ERROR 109 +#define DSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE 100 +#define DSA_R_DECODE_ERROR 104 +#define DSA_R_INVALID_DIGEST_TYPE 106 +#define DSA_R_MISSING_PARAMETERS 101 +#define DSA_R_MODULUS_TOO_LARGE 103 +#define DSA_R_NO_PARAMETERS_SET 107 +#define DSA_R_PARAMETER_ENCODING_ERROR 105 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/extra_lib/include/openssl/dtls1.h b/extra_lib/include/openssl/dtls1.h new file mode 100644 index 0000000..2900d1d --- /dev/null +++ b/extra_lib/include/openssl/dtls1.h @@ -0,0 +1,267 @@ +/* ssl/dtls1.h */ +/* + * DTLS implementation written by Nagendra Modadugu + * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. + */ +/* ==================================================================== + * Copyright (c) 1999-2005 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@OpenSSL.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED 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 OpenSSL PROJECT OR + * ITS 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. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ + +#ifndef HEADER_DTLS1_H +#define HEADER_DTLS1_H + +#include +#include +#ifdef OPENSSL_SYS_VMS +#include +#include +#endif +#ifdef OPENSSL_SYS_WIN32 +/* Needed for struct timeval */ +#include +#elif defined(OPENSSL_SYS_NETWARE) && !defined(_WINSOCK2API_) +#include +#else +#include +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#define DTLS1_VERSION 0xFEFF +#define DTLS1_BAD_VER 0x0100 + +#if 0 +/* this alert description is not specified anywhere... */ +#define DTLS1_AD_MISSING_HANDSHAKE_MESSAGE 110 +#endif + +/* lengths of messages */ +#define DTLS1_COOKIE_LENGTH 256 + +#define DTLS1_RT_HEADER_LENGTH 13 + +#define DTLS1_HM_HEADER_LENGTH 12 + +#define DTLS1_HM_BAD_FRAGMENT -2 +#define DTLS1_HM_FRAGMENT_RETRY -3 + +#define DTLS1_CCS_HEADER_LENGTH 1 + +#ifdef DTLS1_AD_MISSING_HANDSHAKE_MESSAGE +#define DTLS1_AL_HEADER_LENGTH 7 +#else +#define DTLS1_AL_HEADER_LENGTH 2 +#endif + + +typedef struct dtls1_bitmap_st + { + unsigned long map; /* track 32 packets on 32-bit systems + and 64 - on 64-bit systems */ + unsigned char max_seq_num[8]; /* max record number seen so far, + 64-bit value in big-endian + encoding */ + } DTLS1_BITMAP; + +struct dtls1_retransmit_state + { + EVP_CIPHER_CTX *enc_write_ctx; /* cryptographic state */ + EVP_MD_CTX *write_hash; /* used for mac generation */ +#ifndef OPENSSL_NO_COMP + COMP_CTX *compress; /* compression */ +#else + char *compress; +#endif + SSL_SESSION *session; + unsigned short epoch; + }; + +struct hm_header_st + { + unsigned char type; + unsigned long msg_len; + unsigned short seq; + unsigned long frag_off; + unsigned long frag_len; + unsigned int is_ccs; + struct dtls1_retransmit_state saved_retransmit_state; + }; + +struct ccs_header_st + { + unsigned char type; + unsigned short seq; + }; + +struct dtls1_timeout_st + { + /* Number of read timeouts so far */ + unsigned int read_timeouts; + + /* Number of write timeouts so far */ + unsigned int write_timeouts; + + /* Number of alerts received so far */ + unsigned int num_alerts; + }; + +typedef struct record_pqueue_st + { + unsigned short epoch; + pqueue q; + } record_pqueue; + +typedef struct hm_fragment_st + { + struct hm_header_st msg_header; + unsigned char *fragment; + unsigned char *reassembly; + } hm_fragment; + +typedef struct dtls1_state_st + { + unsigned int send_cookie; + unsigned char cookie[DTLS1_COOKIE_LENGTH]; + unsigned char rcvd_cookie[DTLS1_COOKIE_LENGTH]; + unsigned int cookie_len; + + /* + * The current data and handshake epoch. This is initially + * undefined, and starts at zero once the initial handshake is + * completed + */ + unsigned short r_epoch; + unsigned short w_epoch; + + /* records being received in the current epoch */ + DTLS1_BITMAP bitmap; + + /* renegotiation starts a new set of sequence numbers */ + DTLS1_BITMAP next_bitmap; + + /* handshake message numbers */ + unsigned short handshake_write_seq; + unsigned short next_handshake_write_seq; + + unsigned short handshake_read_seq; + + /* save last sequence number for retransmissions */ + unsigned char last_write_sequence[8]; + + /* Received handshake records (processed and unprocessed) */ + record_pqueue unprocessed_rcds; + record_pqueue processed_rcds; + + /* Buffered handshake messages */ + pqueue buffered_messages; + + /* Buffered (sent) handshake records */ + pqueue sent_messages; + + /* Buffered application records. + * Only for records between CCS and Finished + * to prevent either protocol violation or + * unnecessary message loss. + */ + record_pqueue buffered_app_data; + + /* Is set when listening for new connections with dtls1_listen() */ + unsigned int listen; + + unsigned int mtu; /* max DTLS packet size */ + + struct hm_header_st w_msg_hdr; + struct hm_header_st r_msg_hdr; + + struct dtls1_timeout_st timeout; + + /* Indicates when the last handshake msg sent will timeout */ + struct timeval next_timeout; + + /* Timeout duration */ + unsigned short timeout_duration; + + /* storage for Alert/Handshake protocol data received but not + * yet processed by ssl3_read_bytes: */ + unsigned char alert_fragment[DTLS1_AL_HEADER_LENGTH]; + unsigned int alert_fragment_len; + unsigned char handshake_fragment[DTLS1_HM_HEADER_LENGTH]; + unsigned int handshake_fragment_len; + + unsigned int retransmitting; + unsigned int change_cipher_spec_ok; + + } DTLS1_STATE; + +typedef struct dtls1_record_data_st + { + unsigned char *packet; + unsigned int packet_length; + SSL3_BUFFER rbuf; + SSL3_RECORD rrec; + } DTLS1_RECORD_DATA; + + +/* Timeout multipliers (timeout slice is defined in apps/timeouts.h */ +#define DTLS1_TMO_READ_COUNT 2 +#define DTLS1_TMO_WRITE_COUNT 2 + +#define DTLS1_TMO_ALERT_COUNT 12 + +#ifdef __cplusplus +} +#endif +#endif + diff --git a/extra_lib/include/openssl/e_os2.h b/extra_lib/include/openssl/e_os2.h new file mode 100644 index 0000000..4c785c6 --- /dev/null +++ b/extra_lib/include/openssl/e_os2.h @@ -0,0 +1,289 @@ +/* e_os2.h */ +/* ==================================================================== + * Copyright (c) 1998-2000 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED 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 OpenSSL PROJECT OR + * ITS 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. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ + +#include + +#ifndef HEADER_E_OS2_H +#define HEADER_E_OS2_H + +#ifdef __cplusplus +extern "C" { +#endif + +/****************************************************************************** + * Detect operating systems. This probably needs completing. + * The result is that at least one OPENSSL_SYS_os macro should be defined. + * However, if none is defined, Unix is assumed. + **/ + +#define OPENSSL_SYS_UNIX + +/* ----------------------- Macintosh, before MacOS X ----------------------- */ +#if defined(__MWERKS__) && defined(macintosh) || defined(OPENSSL_SYSNAME_MAC) +# undef OPENSSL_SYS_UNIX +# define OPENSSL_SYS_MACINTOSH_CLASSIC +#endif + +/* ----------------------- NetWare ----------------------------------------- */ +#if defined(NETWARE) || defined(OPENSSL_SYSNAME_NETWARE) +# undef OPENSSL_SYS_UNIX +# define OPENSSL_SYS_NETWARE +#endif + +/* ---------------------- Microsoft operating systems ---------------------- */ + +/* Note that MSDOS actually denotes 32-bit environments running on top of + MS-DOS, such as DJGPP one. */ +#if defined(OPENSSL_SYSNAME_MSDOS) +# undef OPENSSL_SYS_UNIX +# define OPENSSL_SYS_MSDOS +#endif + +/* For 32 bit environment, there seems to be the CygWin environment and then + all the others that try to do the same thing Microsoft does... */ +#if defined(OPENSSL_SYSNAME_UWIN) +# undef OPENSSL_SYS_UNIX +# define OPENSSL_SYS_WIN32_UWIN +#else +# if defined(__CYGWIN32__) || defined(OPENSSL_SYSNAME_CYGWIN32) +# undef OPENSSL_SYS_UNIX +# define OPENSSL_SYS_WIN32_CYGWIN +# else +# if defined(_WIN32) || defined(OPENSSL_SYSNAME_WIN32) +# undef OPENSSL_SYS_UNIX +# define OPENSSL_SYS_WIN32 +# endif +# if defined(OPENSSL_SYSNAME_WINNT) +# undef OPENSSL_SYS_UNIX +# define OPENSSL_SYS_WINNT +# endif +# if defined(OPENSSL_SYSNAME_WINCE) +# undef OPENSSL_SYS_UNIX +# define OPENSSL_SYS_WINCE +# endif +# endif +#endif + +/* Anything that tries to look like Microsoft is "Windows" */ +#if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_WINNT) || defined(OPENSSL_SYS_WINCE) +# undef OPENSSL_SYS_UNIX +# define OPENSSL_SYS_WINDOWS +# ifndef OPENSSL_SYS_MSDOS +# define OPENSSL_SYS_MSDOS +# endif +#endif + +/* DLL settings. This part is a bit tough, because it's up to the application + implementor how he or she will link the application, so it requires some + macro to be used. */ +#ifdef OPENSSL_SYS_WINDOWS +# ifndef OPENSSL_OPT_WINDLL +# if defined(_WINDLL) /* This is used when building OpenSSL to indicate that + DLL linkage should be used */ +# define OPENSSL_OPT_WINDLL +# endif +# endif +#endif + +/* -------------------------------- OpenVMS -------------------------------- */ +#if defined(__VMS) || defined(VMS) || defined(OPENSSL_SYSNAME_VMS) +# undef OPENSSL_SYS_UNIX +# define OPENSSL_SYS_VMS +# if defined(__DECC) +# define OPENSSL_SYS_VMS_DECC +# elif defined(__DECCXX) +# define OPENSSL_SYS_VMS_DECC +# define OPENSSL_SYS_VMS_DECCXX +# else +# define OPENSSL_SYS_VMS_NODECC +# endif +#endif + +/* --------------------------------- OS/2 ---------------------------------- */ +#if defined(__EMX__) || defined(__OS2__) +# undef OPENSSL_SYS_UNIX +# define OPENSSL_SYS_OS2 +#endif + +/* --------------------------------- Unix ---------------------------------- */ +#ifdef OPENSSL_SYS_UNIX +# if defined(linux) || defined(__linux__) || defined(OPENSSL_SYSNAME_LINUX) +# define OPENSSL_SYS_LINUX +# endif +# ifdef OPENSSL_SYSNAME_MPE +# define OPENSSL_SYS_MPE +# endif +# ifdef OPENSSL_SYSNAME_SNI +# define OPENSSL_SYS_SNI +# endif +# ifdef OPENSSL_SYSNAME_ULTRASPARC +# define OPENSSL_SYS_ULTRASPARC +# endif +# ifdef OPENSSL_SYSNAME_NEWS4 +# define OPENSSL_SYS_NEWS4 +# endif +# ifdef OPENSSL_SYSNAME_MACOSX +# define OPENSSL_SYS_MACOSX +# endif +# ifdef OPENSSL_SYSNAME_MACOSX_RHAPSODY +# define OPENSSL_SYS_MACOSX_RHAPSODY +# define OPENSSL_SYS_MACOSX +# endif +# ifdef OPENSSL_SYSNAME_SUNOS +# define OPENSSL_SYS_SUNOS +#endif +# if defined(_CRAY) || defined(OPENSSL_SYSNAME_CRAY) +# define OPENSSL_SYS_CRAY +# endif +# if defined(_AIX) || defined(OPENSSL_SYSNAME_AIX) +# define OPENSSL_SYS_AIX +# endif +#endif + +/* --------------------------------- VOS ----------------------------------- */ +#ifdef OPENSSL_SYSNAME_VOS +# define OPENSSL_SYS_VOS +#endif + +/* ------------------------------- VxWorks --------------------------------- */ +#ifdef OPENSSL_SYSNAME_VXWORKS +# define OPENSSL_SYS_VXWORKS +#endif + +/* --------------------------------- BeOS ---------------------------------- */ +#if defined(__BEOS__) +# define OPENSSL_SYS_BEOS +# include +# if defined(BONE_VERSION) +# define OPENSSL_SYS_BEOS_BONE +# else +# define OPENSSL_SYS_BEOS_R5 +# endif +#endif + +/** + * That's it for OS-specific stuff + *****************************************************************************/ + + +/* Specials for I/O an exit */ +#ifdef OPENSSL_SYS_MSDOS +# define OPENSSL_UNISTD_IO +# define OPENSSL_DECLARE_EXIT extern void exit(int); +#else +# define OPENSSL_UNISTD_IO OPENSSL_UNISTD +# define OPENSSL_DECLARE_EXIT /* declared in unistd.h */ +#endif + +/* Definitions of OPENSSL_GLOBAL and OPENSSL_EXTERN, to define and declare + certain global symbols that, with some compilers under VMS, have to be + defined and declared explicitely with globaldef and globalref. + Definitions of OPENSSL_EXPORT and OPENSSL_IMPORT, to define and declare + DLL exports and imports for compilers under Win32. These are a little + more complicated to use. Basically, for any library that exports some + global variables, the following code must be present in the header file + that declares them, before OPENSSL_EXTERN is used: + + #ifdef SOME_BUILD_FLAG_MACRO + # undef OPENSSL_EXTERN + # define OPENSSL_EXTERN OPENSSL_EXPORT + #endif + + The default is to have OPENSSL_EXPORT, OPENSSL_IMPORT and OPENSSL_GLOBAL + have some generally sensible values, and for OPENSSL_EXTERN to have the + value OPENSSL_IMPORT. +*/ + +#if defined(OPENSSL_SYS_VMS_NODECC) +# define OPENSSL_EXPORT globalref +# define OPENSSL_IMPORT globalref +# define OPENSSL_GLOBAL globaldef +#elif defined(OPENSSL_SYS_WINDOWS) && defined(OPENSSL_OPT_WINDLL) +# define OPENSSL_EXPORT extern __declspec(dllexport) +# define OPENSSL_IMPORT extern __declspec(dllimport) +# define OPENSSL_GLOBAL +#else +# define OPENSSL_EXPORT extern +# define OPENSSL_IMPORT extern +# define OPENSSL_GLOBAL +#endif +#define OPENSSL_EXTERN OPENSSL_IMPORT + +/* Macros to allow global variables to be reached through function calls when + required (if a shared library version requires it, for example. + The way it's done allows definitions like this: + + // in foobar.c + OPENSSL_IMPLEMENT_GLOBAL(int,foobar,0) + // in foobar.h + OPENSSL_DECLARE_GLOBAL(int,foobar); + #define foobar OPENSSL_GLOBAL_REF(foobar) +*/ +#ifdef OPENSSL_EXPORT_VAR_AS_FUNCTION +# define OPENSSL_IMPLEMENT_GLOBAL(type,name,value) \ + type *_shadow_##name(void) \ + { static type _hide_##name=value; return &_hide_##name; } +# define OPENSSL_DECLARE_GLOBAL(type,name) type *_shadow_##name(void) +# define OPENSSL_GLOBAL_REF(name) (*(_shadow_##name())) +#else +# define OPENSSL_IMPLEMENT_GLOBAL(type,name,value) OPENSSL_GLOBAL type _shadow_##name=value; +# define OPENSSL_DECLARE_GLOBAL(type,name) OPENSSL_EXPORT type _shadow_##name +# define OPENSSL_GLOBAL_REF(name) _shadow_##name +#endif + +#ifdef __cplusplus +} +#endif +#endif diff --git a/extra_lib/include/openssl/ec.h b/extra_lib/include/openssl/ec.h new file mode 100644 index 0000000..ee70781 --- /dev/null +++ b/extra_lib/include/openssl/ec.h @@ -0,0 +1,1100 @@ +/* crypto/ec/ec.h */ +/* + * Originally written by Bodo Moeller for the OpenSSL project. + */ +/** + * \file crypto/ec/ec.h Include file for the OpenSSL EC functions + * \author Originally written by Bodo Moeller for the OpenSSL project + */ +/* ==================================================================== + * Copyright (c) 1998-2005 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED 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 OpenSSL PROJECT OR + * ITS 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. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ +/* ==================================================================== + * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. + * + * Portions of the attached software ("Contribution") are developed by + * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project. + * + * The Contribution is licensed pursuant to the OpenSSL open source + * license provided above. + * + * The elliptic curve binary polynomial software is originally written by + * Sheueling Chang Shantz and Douglas Stebila of Sun Microsystems Laboratories. + * + */ + +#ifndef HEADER_EC_H +#define HEADER_EC_H + +#include + +#ifdef OPENSSL_NO_EC +#error EC is disabled. +#endif + +#include +#include +#ifndef OPENSSL_NO_DEPRECATED +#include +#endif + +#ifdef __cplusplus +extern "C" { +#elif defined(__SUNPRO_C) +# if __SUNPRO_C >= 0x520 +# pragma error_messages (off,E_ARRAY_OF_INCOMPLETE_NONAME,E_ARRAY_OF_INCOMPLETE) +# endif +#endif + + +#ifndef OPENSSL_ECC_MAX_FIELD_BITS +# define OPENSSL_ECC_MAX_FIELD_BITS 661 +#endif + +/** Enum for the point conversion form as defined in X9.62 (ECDSA) + * for the encoding of a elliptic curve point (x,y) */ +typedef enum { + /** the point is encoded as z||x, where the octet z specifies + * which solution of the quadratic equation y is */ + POINT_CONVERSION_COMPRESSED = 2, + /** the point is encoded as z||x||y, where z is the octet 0x02 */ + POINT_CONVERSION_UNCOMPRESSED = 4, + /** the point is encoded as z||x||y, where the octet z specifies + * which solution of the quadratic equation y is */ + POINT_CONVERSION_HYBRID = 6 +} point_conversion_form_t; + + +typedef struct ec_method_st EC_METHOD; + +typedef struct ec_group_st + /* + EC_METHOD *meth; + -- field definition + -- curve coefficients + -- optional generator with associated information (order, cofactor) + -- optional extra data (precomputed table for fast computation of multiples of generator) + -- ASN1 stuff + */ + EC_GROUP; + +typedef struct ec_point_st EC_POINT; + + +/********************************************************************/ +/* EC_METHODs for curves over GF(p) */ +/********************************************************************/ + +/** Returns the basic GFp ec methods which provides the basis for the + * optimized methods. + * \return EC_METHOD object + */ +const EC_METHOD *EC_GFp_simple_method(void); + +/** Returns GFp methods using montgomery multiplication. + * \return EC_METHOD object + */ +const EC_METHOD *EC_GFp_mont_method(void); + +/** Returns GFp methods using optimized methods for NIST recommended curves + * \return EC_METHOD object + */ +const EC_METHOD *EC_GFp_nist_method(void); + + +/********************************************************************/ +/* EC_METHOD for curves over GF(2^m) */ +/********************************************************************/ + +/** Returns the basic GF2m ec method + * \return EC_METHOD object + */ +const EC_METHOD *EC_GF2m_simple_method(void); + + +/********************************************************************/ +/* EC_GROUP functions */ +/********************************************************************/ + +/** Creates a new EC_GROUP object + * \param meth EC_METHOD to use + * \return newly created EC_GROUP object or NULL in case of an error. + */ +EC_GROUP *EC_GROUP_new(const EC_METHOD *meth); + +/** Frees a EC_GROUP object + * \param group EC_GROUP object to be freed. + */ +void EC_GROUP_free(EC_GROUP *group); + +/** Clears and frees a EC_GROUP object + * \param group EC_GROUP object to be cleared and freed. + */ +void EC_GROUP_clear_free(EC_GROUP *group); + +/** Copies EC_GROUP objects. Note: both EC_GROUPs must use the same EC_METHOD. + * \param dst destination EC_GROUP object + * \param src source EC_GROUP object + * \return 1 on success and 0 if an error occurred. + */ +int EC_GROUP_copy(EC_GROUP *dst, const EC_GROUP *src); + +/** Creates a new EC_GROUP object and copies the copies the content + * form src to the newly created EC_KEY object + * \param src source EC_GROUP object + * \return newly created EC_GROUP object or NULL in case of an error. + */ +EC_GROUP *EC_GROUP_dup(const EC_GROUP *src); + +/** Returns the EC_METHOD of the EC_GROUP object. + * \param group EC_GROUP object + * \return EC_METHOD used in this EC_GROUP object. + */ +const EC_METHOD *EC_GROUP_method_of(const EC_GROUP *group); + +/** Returns the field type of the EC_METHOD. + * \param meth EC_METHOD object + * \return NID of the underlying field type OID. + */ +int EC_METHOD_get_field_type(const EC_METHOD *meth); + +/** Sets the generator and it's order/cofactor of a EC_GROUP object. + * \param group EC_GROUP object + * \param generator EC_POINT object with the generator. + * \param order the order of the group generated by the generator. + * \param cofactor the index of the sub-group generated by the generator + * in the group of all points on the elliptic curve. + * \return 1 on success and 0 if an error occured + */ +int EC_GROUP_set_generator(EC_GROUP *group, const EC_POINT *generator, const BIGNUM *order, const BIGNUM *cofactor); + +/** Returns the generator of a EC_GROUP object. + * \param group EC_GROUP object + * \return the currently used generator (possibly NULL). + */ +const EC_POINT *EC_GROUP_get0_generator(const EC_GROUP *group); + +/** Gets the order of a EC_GROUP + * \param group EC_GROUP object + * \param order BIGNUM to which the order is copied + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occured + */ +int EC_GROUP_get_order(const EC_GROUP *group, BIGNUM *order, BN_CTX *ctx); + +/** Gets the cofactor of a EC_GROUP + * \param group EC_GROUP object + * \param cofactor BIGNUM to which the cofactor is copied + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occured + */ +int EC_GROUP_get_cofactor(const EC_GROUP *group, BIGNUM *cofactor, BN_CTX *ctx); + +/** Sets the name of a EC_GROUP object + * \param group EC_GROUP object + * \param nid NID of the curve name OID + */ +void EC_GROUP_set_curve_name(EC_GROUP *group, int nid); + +/** Returns the curve name of a EC_GROUP object + * \param group EC_GROUP object + * \return NID of the curve name OID or 0 if not set. + */ +int EC_GROUP_get_curve_name(const EC_GROUP *group); + +void EC_GROUP_set_asn1_flag(EC_GROUP *group, int flag); +int EC_GROUP_get_asn1_flag(const EC_GROUP *group); + +void EC_GROUP_set_point_conversion_form(EC_GROUP *, point_conversion_form_t); +point_conversion_form_t EC_GROUP_get_point_conversion_form(const EC_GROUP *); + +unsigned char *EC_GROUP_get0_seed(const EC_GROUP *); +size_t EC_GROUP_get_seed_len(const EC_GROUP *); +size_t EC_GROUP_set_seed(EC_GROUP *, const unsigned char *, size_t len); + +/** Sets the parameter of a ec over GFp defined by y^2 = x^3 + a*x + b + * \param group EC_GROUP object + * \param p BIGNUM with the prime number + * \param a BIGNUM with parameter a of the equation + * \param b BIGNUM with parameter b of the equation + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occured + */ +int EC_GROUP_set_curve_GFp(EC_GROUP *group, const BIGNUM *p, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); + +/** Gets the parameter of the ec over GFp defined by y^2 = x^3 + a*x + b + * \param group EC_GROUP object + * \param p BIGNUM for the prime number + * \param a BIGNUM for parameter a of the equation + * \param b BIGNUM for parameter b of the equation + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occured + */ +int EC_GROUP_get_curve_GFp(const EC_GROUP *group, BIGNUM *p, BIGNUM *a, BIGNUM *b, BN_CTX *ctx); + +/** Sets the parameter of a ec over GF2m defined by y^2 + x*y = x^3 + a*x^2 + b + * \param group EC_GROUP object + * \param p BIGNUM with the polynomial defining the underlying field + * \param a BIGNUM with parameter a of the equation + * \param b BIGNUM with parameter b of the equation + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occured + */ +int EC_GROUP_set_curve_GF2m(EC_GROUP *group, const BIGNUM *p, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); + +/** Gets the parameter of the ec over GF2m defined by y^2 + x*y = x^3 + a*x^2 + b + * \param group EC_GROUP object + * \param p BIGNUM for the polynomial defining the underlying field + * \param a BIGNUM for parameter a of the equation + * \param b BIGNUM for parameter b of the equation + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occured + */ +int EC_GROUP_get_curve_GF2m(const EC_GROUP *group, BIGNUM *p, BIGNUM *a, BIGNUM *b, BN_CTX *ctx); + +/** Returns the number of bits needed to represent a field element + * \param group EC_GROUP object + * \return number of bits needed to represent a field element + */ +int EC_GROUP_get_degree(const EC_GROUP *group); + +/** Checks whether the parameter in the EC_GROUP define a valid ec group + * \param group EC_GROUP object + * \param ctx BN_CTX object (optional) + * \return 1 if group is a valid ec group and 0 otherwise + */ +int EC_GROUP_check(const EC_GROUP *group, BN_CTX *ctx); + +/** Checks whether the discriminant of the elliptic curve is zero or not + * \param group EC_GROUP object + * \param ctx BN_CTX object (optional) + * \return 1 if the discriminant is not zero and 0 otherwise + */ +int EC_GROUP_check_discriminant(const EC_GROUP *group, BN_CTX *ctx); + +/** Compares two EC_GROUP objects + * \param a first EC_GROUP object + * \param b second EC_GROUP object + * \param ctx BN_CTX object (optional) + * \return 0 if both groups are equal and 1 otherwise + */ +int EC_GROUP_cmp(const EC_GROUP *a, const EC_GROUP *b, BN_CTX *ctx); + +/* EC_GROUP_new_GF*() calls EC_GROUP_new() and EC_GROUP_set_GF*() + * after choosing an appropriate EC_METHOD */ + +/** Creates a new EC_GROUP object with the specified parameters defined + * over GFp (defined by the equation y^2 = x^3 + a*x + b) + * \param p BIGNUM with the prime number + * \param a BIGNUM with the parameter a of the equation + * \param b BIGNUM with the parameter b of the equation + * \param ctx BN_CTX object (optional) + * \return newly created EC_GROUP object with the specified parameters + */ +EC_GROUP *EC_GROUP_new_curve_GFp(const BIGNUM *p, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); + +/** Creates a new EC_GROUP object with the specified parameters defined + * over GF2m (defined by the equation y^2 + x*y = x^3 + a*x^2 + b) + * \param p BIGNUM with the polynomial defining the underlying field + * \param a BIGNUM with the parameter a of the equation + * \param b BIGNUM with the parameter b of the equation + * \param ctx BN_CTX object (optional) + * \return newly created EC_GROUP object with the specified parameters + */ +EC_GROUP *EC_GROUP_new_curve_GF2m(const BIGNUM *p, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); + +/** Creates a EC_GROUP object with a curve specified by a NID + * \param nid NID of the OID of the curve name + * \return newly created EC_GROUP object with specified curve or NULL + * if an error occurred + */ +EC_GROUP *EC_GROUP_new_by_curve_name(int nid); + + +/********************************************************************/ +/* handling of internal curves */ +/********************************************************************/ + +typedef struct { + int nid; + const char *comment; + } EC_builtin_curve; + +/* EC_builtin_curves(EC_builtin_curve *r, size_t size) returns number + * of all available curves or zero if a error occurred. + * In case r ist not zero nitems EC_builtin_curve structures + * are filled with the data of the first nitems internal groups */ +size_t EC_get_builtin_curves(EC_builtin_curve *r, size_t nitems); + + +/********************************************************************/ +/* EC_POINT functions */ +/********************************************************************/ + +/** Creates a new EC_POINT object for the specified EC_GROUP + * \param group EC_GROUP the underlying EC_GROUP object + * \return newly created EC_POINT object or NULL if an error occurred + */ +EC_POINT *EC_POINT_new(const EC_GROUP *group); + +/** Frees a EC_POINT object + * \param point EC_POINT object to be freed + */ +void EC_POINT_free(EC_POINT *point); + +/** Clears and frees a EC_POINT object + * \param point EC_POINT object to be cleared and freed + */ +void EC_POINT_clear_free(EC_POINT *point); + +/** Copies EC_POINT object + * \param dst destination EC_POINT object + * \param src source EC_POINT object + * \return 1 on success and 0 if an error occured + */ +int EC_POINT_copy(EC_POINT *dst, const EC_POINT *src); + +/** Creates a new EC_POINT object and copies the content of the supplied + * EC_POINT + * \param src source EC_POINT object + * \param group underlying the EC_GROUP object + * \return newly created EC_POINT object or NULL if an error occurred + */ +EC_POINT *EC_POINT_dup(const EC_POINT *src, const EC_GROUP *group); + +/** Returns the EC_METHOD used in EC_POINT object + * \param point EC_POINT object + * \return the EC_METHOD used + */ +const EC_METHOD *EC_POINT_method_of(const EC_POINT *point); + +/** Sets a point to infinity (neutral element) + * \param group underlying EC_GROUP object + * \param point EC_POINT to set to infinity + * \return 1 on success and 0 if an error occured + */ +int EC_POINT_set_to_infinity(const EC_GROUP *group, EC_POINT *point); + +/** Sets the jacobian projective coordinates of a EC_POINT over GFp + * \param group underlying EC_GROUP object + * \param p EC_POINT object + * \param x BIGNUM with the x-coordinate + * \param y BIGNUM with the y-coordinate + * \param z BIGNUM with the z-coordinate + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occured + */ +int EC_POINT_set_Jprojective_coordinates_GFp(const EC_GROUP *group, EC_POINT *p, + const BIGNUM *x, const BIGNUM *y, const BIGNUM *z, BN_CTX *ctx); + +/** Gets the jacobian projective coordinates of a EC_POINT over GFp + * \param group underlying EC_GROUP object + * \param p EC_POINT object + * \param x BIGNUM for the x-coordinate + * \param y BIGNUM for the y-coordinate + * \param z BIGNUM for the z-coordinate + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occured + */ +int EC_POINT_get_Jprojective_coordinates_GFp(const EC_GROUP *group, + const EC_POINT *p, BIGNUM *x, BIGNUM *y, BIGNUM *z, BN_CTX *ctx); + +/** Sets the affine coordinates of a EC_POINT over GFp + * \param group underlying EC_GROUP object + * \param p EC_POINT object + * \param x BIGNUM with the x-coordinate + * \param y BIGNUM with the y-coordinate + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occured + */ +int EC_POINT_set_affine_coordinates_GFp(const EC_GROUP *group, EC_POINT *p, + const BIGNUM *x, const BIGNUM *y, BN_CTX *ctx); + +/** Gets the affine coordinates of a EC_POINT over GFp + * \param group underlying EC_GROUP object + * \param p EC_POINT object + * \param x BIGNUM for the x-coordinate + * \param y BIGNUM for the y-coordinate + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occured + */ +int EC_POINT_get_affine_coordinates_GFp(const EC_GROUP *group, + const EC_POINT *p, BIGNUM *x, BIGNUM *y, BN_CTX *ctx); + +/** Sets the x9.62 compressed coordinates of a EC_POINT over GFp + * \param group underlying EC_GROUP object + * \param p EC_POINT object + * \param x BIGNUM with x-coordinate + * \param y_bit integer with the y-Bit (either 0 or 1) + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occured + */ +int EC_POINT_set_compressed_coordinates_GFp(const EC_GROUP *group, EC_POINT *p, + const BIGNUM *x, int y_bit, BN_CTX *ctx); + +/** Sets the affine coordinates of a EC_POINT over GF2m + * \param group underlying EC_GROUP object + * \param p EC_POINT object + * \param x BIGNUM with the x-coordinate + * \param y BIGNUM with the y-coordinate + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occured + */ +int EC_POINT_set_affine_coordinates_GF2m(const EC_GROUP *group, EC_POINT *p, + const BIGNUM *x, const BIGNUM *y, BN_CTX *ctx); + +/** Gets the affine coordinates of a EC_POINT over GF2m + * \param group underlying EC_GROUP object + * \param p EC_POINT object + * \param x BIGNUM for the x-coordinate + * \param y BIGNUM for the y-coordinate + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occured + */ +int EC_POINT_get_affine_coordinates_GF2m(const EC_GROUP *group, + const EC_POINT *p, BIGNUM *x, BIGNUM *y, BN_CTX *ctx); + +/** Sets the x9.62 compressed coordinates of a EC_POINT over GF2m + * \param group underlying EC_GROUP object + * \param p EC_POINT object + * \param x BIGNUM with x-coordinate + * \param y_bit integer with the y-Bit (either 0 or 1) + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occured + */ +int EC_POINT_set_compressed_coordinates_GF2m(const EC_GROUP *group, EC_POINT *p, + const BIGNUM *x, int y_bit, BN_CTX *ctx); + +/** Encodes a EC_POINT object to a octet string + * \param group underlying EC_GROUP object + * \param p EC_POINT object + * \param form point conversion form + * \param buf memory buffer for the result. If NULL the function returns + * required buffer size. + * \param len length of the memory buffer + * \param ctx BN_CTX object (optional) + * \return the length of the encoded octet string or 0 if an error occurred + */ +size_t EC_POINT_point2oct(const EC_GROUP *group, const EC_POINT *p, + point_conversion_form_t form, + unsigned char *buf, size_t len, BN_CTX *ctx); + +/** Decodes a EC_POINT from a octet string + * \param group underlying EC_GROUP object + * \param p EC_POINT object + * \param buf memory buffer with the encoded ec point + * \param len length of the encoded ec point + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occured + */ +int EC_POINT_oct2point(const EC_GROUP *group, EC_POINT *p, + const unsigned char *buf, size_t len, BN_CTX *ctx); + +/* other interfaces to point2oct/oct2point: */ +BIGNUM *EC_POINT_point2bn(const EC_GROUP *, const EC_POINT *, + point_conversion_form_t form, BIGNUM *, BN_CTX *); +EC_POINT *EC_POINT_bn2point(const EC_GROUP *, const BIGNUM *, + EC_POINT *, BN_CTX *); +char *EC_POINT_point2hex(const EC_GROUP *, const EC_POINT *, + point_conversion_form_t form, BN_CTX *); +EC_POINT *EC_POINT_hex2point(const EC_GROUP *, const char *, + EC_POINT *, BN_CTX *); + + +/********************************************************************/ +/* functions for doing EC_POINT arithmetic */ +/********************************************************************/ + +/** Computes the sum of two EC_POINT + * \param group underlying EC_GROUP object + * \param r EC_POINT object for the result (r = a + b) + * \param a EC_POINT object with the first summand + * \param b EC_POINT object with the second summand + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occured + */ +int EC_POINT_add(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a, const EC_POINT *b, BN_CTX *ctx); + +/** Computes the double of a EC_POINT + * \param group underlying EC_GROUP object + * \param r EC_POINT object for the result (r = 2 * a) + * \param a EC_POINT object + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occured + */ +int EC_POINT_dbl(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a, BN_CTX *ctx); + +/** Computes the inverse of a EC_POINT + * \param group underlying EC_GROUP object + * \param a EC_POINT object to be inverted (it's used for the result as well) + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occured + */ +int EC_POINT_invert(const EC_GROUP *group, EC_POINT *a, BN_CTX *ctx); + +/** Checks whether the point is the neutral element of the group + * \param group the underlying EC_GROUP object + * \param p EC_POINT object + * \return 1 if the point is the neutral element and 0 otherwise + */ +int EC_POINT_is_at_infinity(const EC_GROUP *group, const EC_POINT *p); + +/** Checks whether the point is on the curve + * \param group underlying EC_GROUP object + * \param point EC_POINT object to check + * \param ctx BN_CTX object (optional) + * \return 1 if point if on the curve and 0 otherwise + */ +int EC_POINT_is_on_curve(const EC_GROUP *group, const EC_POINT *point, BN_CTX *ctx); + +/** Compares two EC_POINTs + * \param group underlying EC_GROUP object + * \param a first EC_POINT object + * \param b second EC_POINT object + * \param ctx BN_CTX object (optional) + * \return 0 if both points are equal and a value != 0 otherwise + */ +int EC_POINT_cmp(const EC_GROUP *group, const EC_POINT *a, const EC_POINT *b, BN_CTX *ctx); + +int EC_POINT_make_affine(const EC_GROUP *, EC_POINT *, BN_CTX *); +int EC_POINTs_make_affine(const EC_GROUP *, size_t num, EC_POINT *[], BN_CTX *); + +/** Computes r = generator * n sum_{i=0}^num p[i] * m[i] + * \param group underlying EC_GROUP object + * \param r EC_POINT object for the result + * \param n BIGNUM with the multiplier for the group generator (optional) + * \param num number futher summands + * \param p array of size num of EC_POINT objects + * \param m array of size num of BIGNUM objects + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occured + */ +int EC_POINTs_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, size_t num, const EC_POINT *p[], const BIGNUM *m[], BN_CTX *ctx); + +/** Computes r = generator * n + q * m + * \param group underlying EC_GROUP object + * \param r EC_POINT object for the result + * \param n BIGNUM with the multiplier for the group generator (optional) + * \param q EC_POINT object with the first factor of the second summand + * \param m BIGNUM with the second factor of the second summand + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occured + */ +int EC_POINT_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx); + +/** Stores multiples of generator for faster point multiplication + * \param group EC_GROUP object + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occured + */ +int EC_GROUP_precompute_mult(EC_GROUP *group, BN_CTX *ctx); + +/** Reports whether a precomputation has been done + * \param group EC_GROUP object + * \return 1 if a pre-computation has been done and 0 otherwise + */ +int EC_GROUP_have_precompute_mult(const EC_GROUP *group); + + +/********************************************************************/ +/* ASN1 stuff */ +/********************************************************************/ + +/* EC_GROUP_get_basis_type() returns the NID of the basis type + * used to represent the field elements */ +int EC_GROUP_get_basis_type(const EC_GROUP *); +int EC_GROUP_get_trinomial_basis(const EC_GROUP *, unsigned int *k); +int EC_GROUP_get_pentanomial_basis(const EC_GROUP *, unsigned int *k1, + unsigned int *k2, unsigned int *k3); + +#define OPENSSL_EC_NAMED_CURVE 0x001 + +typedef struct ecpk_parameters_st ECPKPARAMETERS; + +EC_GROUP *d2i_ECPKParameters(EC_GROUP **, const unsigned char **in, long len); +int i2d_ECPKParameters(const EC_GROUP *, unsigned char **out); + +#define d2i_ECPKParameters_bio(bp,x) ASN1_d2i_bio_of(EC_GROUP,NULL,d2i_ECPKParameters,bp,x) +#define i2d_ECPKParameters_bio(bp,x) ASN1_i2d_bio_of_const(EC_GROUP,i2d_ECPKParameters,bp,x) +#define d2i_ECPKParameters_fp(fp,x) (EC_GROUP *)ASN1_d2i_fp(NULL, \ + (char *(*)())d2i_ECPKParameters,(fp),(unsigned char **)(x)) +#define i2d_ECPKParameters_fp(fp,x) ASN1_i2d_fp(i2d_ECPKParameters,(fp), \ + (unsigned char *)(x)) + +#ifndef OPENSSL_NO_BIO +int ECPKParameters_print(BIO *bp, const EC_GROUP *x, int off); +#endif +#ifndef OPENSSL_NO_FP_API +int ECPKParameters_print_fp(FILE *fp, const EC_GROUP *x, int off); +#endif + + +/********************************************************************/ +/* EC_KEY functions */ +/********************************************************************/ + +typedef struct ec_key_st EC_KEY; + +/* some values for the encoding_flag */ +#define EC_PKEY_NO_PARAMETERS 0x001 +#define EC_PKEY_NO_PUBKEY 0x002 + +/** Creates a new EC_KEY object. + * \return EC_KEY object or NULL if an error occurred. + */ +EC_KEY *EC_KEY_new(void); + +/** Creates a new EC_KEY object using a named curve as underlying + * EC_GROUP object. + * \param nid NID of the named curve. + * \return EC_KEY object or NULL if an error occurred. + */ +EC_KEY *EC_KEY_new_by_curve_name(int nid); + +/** Frees a EC_KEY object. + * \param key EC_KEY object to be freed. + */ +void EC_KEY_free(EC_KEY *key); + +/** Copies a EC_KEY object. + * \param dst destination EC_KEY object + * \param src src EC_KEY object + * \return dst or NULL if an error occurred. + */ +EC_KEY *EC_KEY_copy(EC_KEY *dst, const EC_KEY *src); + +/** Creates a new EC_KEY object and copies the content from src to it. + * \param src the source EC_KEY object + * \return newly created EC_KEY object or NULL if an error occurred. + */ +EC_KEY *EC_KEY_dup(const EC_KEY *src); + +/** Increases the internal reference count of a EC_KEY object. + * \param key EC_KEY object + * \return 1 on success and 0 if an error occurred. + */ +int EC_KEY_up_ref(EC_KEY *key); + +/** Returns the EC_GROUP object of a EC_KEY object + * \param key EC_KEY object + * \return the EC_GROUP object (possibly NULL). + */ +const EC_GROUP *EC_KEY_get0_group(const EC_KEY *key); + +/** Sets the EC_GROUP of a EC_KEY object. + * \param key EC_KEY object + * \param group EC_GROUP to use in the EC_KEY object (note: the EC_KEY + * object will use an own copy of the EC_GROUP). + * \return 1 on success and 0 if an error occurred. + */ +int EC_KEY_set_group(EC_KEY *key, const EC_GROUP *group); + +/** Returns the private key of a EC_KEY object. + * \param key EC_KEY object + * \return a BIGNUM with the private key (possibly NULL). + */ +const BIGNUM *EC_KEY_get0_private_key(const EC_KEY *key); + +/** Sets the private key of a EC_KEY object. + * \param key EC_KEY object + * \param prv BIGNUM with the private key (note: the EC_KEY object + * will use an own copy of the BIGNUM). + * \return 1 on success and 0 if an error occurred. + */ +int EC_KEY_set_private_key(EC_KEY *key, const BIGNUM *prv); + +/** Returns the public key of a EC_KEY object. + * \param key the EC_KEY object + * \return a EC_POINT object with the public key (possibly NULL) + */ +const EC_POINT *EC_KEY_get0_public_key(const EC_KEY *key); + +/** Sets the public key of a EC_KEY object. + * \param key EC_KEY object + * \param pub EC_POINT object with the public key (note: the EC_KEY object + * will use an own copy of the EC_POINT object). + * \return 1 on success and 0 if an error occurred. + */ +int EC_KEY_set_public_key(EC_KEY *key, const EC_POINT *pub); + +unsigned EC_KEY_get_enc_flags(const EC_KEY *key); +void EC_KEY_set_enc_flags(EC_KEY *, unsigned int); +point_conversion_form_t EC_KEY_get_conv_form(const EC_KEY *); +void EC_KEY_set_conv_form(EC_KEY *, point_conversion_form_t); +/* functions to set/get method specific data */ +void *EC_KEY_get_key_method_data(EC_KEY *, + void *(*dup_func)(void *), void (*free_func)(void *), void (*clear_free_func)(void *)); +void EC_KEY_insert_key_method_data(EC_KEY *, void *data, + void *(*dup_func)(void *), void (*free_func)(void *), void (*clear_free_func)(void *)); +/* wrapper functions for the underlying EC_GROUP object */ +void EC_KEY_set_asn1_flag(EC_KEY *, int); + +/** Creates a table of pre-computed multiples of the generator to + * accelerate further EC_KEY operations. + * \param key EC_KEY object + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred. + */ +int EC_KEY_precompute_mult(EC_KEY *key, BN_CTX *ctx); + +/** Creates a new ec private (and optional a new public) key. + * \param key EC_KEY object + * \return 1 on success and 0 if an error occurred. + */ +int EC_KEY_generate_key(EC_KEY *key); + +/** Verifies that a private and/or public key is valid. + * \param key the EC_KEY object + * \return 1 on success and 0 otherwise. + */ +int EC_KEY_check_key(const EC_KEY *key); + + +/********************************************************************/ +/* de- and encoding functions for SEC1 ECPrivateKey */ +/********************************************************************/ + +/** Decodes a private key from a memory buffer. + * \param key a pointer to a EC_KEY object which should be used (or NULL) + * \param in pointer to memory with the DER encoded private key + * \param len length of the DER encoded private key + * \return the decoded private key or NULL if an error occurred. + */ +EC_KEY *d2i_ECPrivateKey(EC_KEY **key, const unsigned char **in, long len); + +/** Encodes a private key object and stores the result in a buffer. + * \param key the EC_KEY object to encode + * \param out the buffer for the result (if NULL the function returns number + * of bytes needed). + * \return 1 on success and 0 if an error occurred. + */ +int i2d_ECPrivateKey(EC_KEY *key, unsigned char **out); + + +/********************************************************************/ +/* de- and encoding functions for EC parameters */ +/********************************************************************/ + +/** Decodes ec parameter from a memory buffer. + * \param key a pointer to a EC_KEY object which should be used (or NULL) + * \param in pointer to memory with the DER encoded ec parameters + * \param len length of the DER encoded ec parameters + * \return a EC_KEY object with the decoded parameters or NULL if an error + * occurred. + */ +EC_KEY *d2i_ECParameters(EC_KEY **key, const unsigned char **in, long len); + +/** Encodes ec parameter and stores the result in a buffer. + * \param key the EC_KEY object with ec paramters to encode + * \param out the buffer for the result (if NULL the function returns number + * of bytes needed). + * \return 1 on success and 0 if an error occurred. + */ +int i2d_ECParameters(EC_KEY *key, unsigned char **out); + + +/********************************************************************/ +/* de- and encoding functions for EC public key */ +/* (octet string, not DER -- hence 'o2i' and 'i2o') */ +/********************************************************************/ + +/** Decodes a ec public key from a octet string. + * \param key a pointer to a EC_KEY object which should be used + * \param in memory buffer with the encoded public key + * \param len length of the encoded public key + * \return EC_KEY object with decoded public key or NULL if an error + * occurred. + */ +EC_KEY *o2i_ECPublicKey(EC_KEY **key, const unsigned char **in, long len); + +/** Encodes a ec public key in an octet string. + * \param key the EC_KEY object with the public key + * \param out the buffer for the result (if NULL the function returns number + * of bytes needed). + * \return 1 on success and 0 if an error occurred + */ +int i2o_ECPublicKey(EC_KEY *key, unsigned char **out); + +#ifndef OPENSSL_NO_BIO +/** Prints out the ec parameters on human readable form. + * \param bp BIO object to which the information is printed + * \param key EC_KEY object + * \return 1 on success and 0 if an error occurred + */ +int ECParameters_print(BIO *bp, const EC_KEY *key); + +/** Prints out the contents of a EC_KEY object + * \param bp BIO object to which the information is printed + * \param key EC_KEY object + * \param off line offset + * \return 1 on success and 0 if an error occurred + */ +int EC_KEY_print(BIO *bp, const EC_KEY *key, int off); + +#endif +#ifndef OPENSSL_NO_FP_API +/** Prints out the ec parameters on human readable form. + * \param fp file descriptor to which the information is printed + * \param key EC_KEY object + * \return 1 on success and 0 if an error occurred + */ +int ECParameters_print_fp(FILE *fp, const EC_KEY *key); + +/** Prints out the contents of a EC_KEY object + * \param fp file descriptor to which the information is printed + * \param key EC_KEY object + * \param off line offset + * \return 1 on success and 0 if an error occurred + */ +int EC_KEY_print_fp(FILE *fp, const EC_KEY *key, int off); + +#endif + +#define ECParameters_dup(x) ASN1_dup_of(EC_KEY,i2d_ECParameters,d2i_ECParameters,x) + +#ifndef __cplusplus +#if defined(__SUNPRO_C) +# if __SUNPRO_C >= 0x520 +# pragma error_messages (default,E_ARRAY_OF_INCOMPLETE_NONAME,E_ARRAY_OF_INCOMPLETE) +# endif +# endif +#endif + +#define EVP_PKEY_CTX_set_ec_paramgen_curve_nid(ctx, nid) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, EVP_PKEY_OP_PARAMGEN, \ + EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID, nid, NULL) + + +#define EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID (EVP_PKEY_ALG_CTRL + 1) + +/* BEGIN ERROR CODES */ +/* The following lines are auto generated by the script mkerr.pl. Any changes + * made after this point may be overwritten when the script is next run. + */ +void ERR_load_EC_strings(void); + +/* Error codes for the EC functions. */ + +/* Function codes. */ +#define EC_F_COMPUTE_WNAF 143 +#define EC_F_D2I_ECPARAMETERS 144 +#define EC_F_D2I_ECPKPARAMETERS 145 +#define EC_F_D2I_ECPRIVATEKEY 146 +#define EC_F_DO_EC_KEY_PRINT 221 +#define EC_F_ECKEY_PARAM2TYPE 223 +#define EC_F_ECKEY_PARAM_DECODE 212 +#define EC_F_ECKEY_PRIV_DECODE 213 +#define EC_F_ECKEY_PRIV_ENCODE 214 +#define EC_F_ECKEY_PUB_DECODE 215 +#define EC_F_ECKEY_PUB_ENCODE 216 +#define EC_F_ECKEY_TYPE2PARAM 220 +#define EC_F_ECPARAMETERS_PRINT 147 +#define EC_F_ECPARAMETERS_PRINT_FP 148 +#define EC_F_ECPKPARAMETERS_PRINT 149 +#define EC_F_ECPKPARAMETERS_PRINT_FP 150 +#define EC_F_ECP_NIST_MOD_192 203 +#define EC_F_ECP_NIST_MOD_224 204 +#define EC_F_ECP_NIST_MOD_256 205 +#define EC_F_ECP_NIST_MOD_521 206 +#define EC_F_EC_ASN1_GROUP2CURVE 153 +#define EC_F_EC_ASN1_GROUP2FIELDID 154 +#define EC_F_EC_ASN1_GROUP2PARAMETERS 155 +#define EC_F_EC_ASN1_GROUP2PKPARAMETERS 156 +#define EC_F_EC_ASN1_PARAMETERS2GROUP 157 +#define EC_F_EC_ASN1_PKPARAMETERS2GROUP 158 +#define EC_F_EC_EX_DATA_SET_DATA 211 +#define EC_F_EC_GF2M_MONTGOMERY_POINT_MULTIPLY 208 +#define EC_F_EC_GF2M_SIMPLE_GROUP_CHECK_DISCRIMINANT 159 +#define EC_F_EC_GF2M_SIMPLE_GROUP_SET_CURVE 195 +#define EC_F_EC_GF2M_SIMPLE_OCT2POINT 160 +#define EC_F_EC_GF2M_SIMPLE_POINT2OCT 161 +#define EC_F_EC_GF2M_SIMPLE_POINT_GET_AFFINE_COORDINATES 162 +#define EC_F_EC_GF2M_SIMPLE_POINT_SET_AFFINE_COORDINATES 163 +#define EC_F_EC_GF2M_SIMPLE_SET_COMPRESSED_COORDINATES 164 +#define EC_F_EC_GFP_MONT_FIELD_DECODE 133 +#define EC_F_EC_GFP_MONT_FIELD_ENCODE 134 +#define EC_F_EC_GFP_MONT_FIELD_MUL 131 +#define EC_F_EC_GFP_MONT_FIELD_SET_TO_ONE 209 +#define EC_F_EC_GFP_MONT_FIELD_SQR 132 +#define EC_F_EC_GFP_MONT_GROUP_SET_CURVE 189 +#define EC_F_EC_GFP_MONT_GROUP_SET_CURVE_GFP 135 +#define EC_F_EC_GFP_NIST_FIELD_MUL 200 +#define EC_F_EC_GFP_NIST_FIELD_SQR 201 +#define EC_F_EC_GFP_NIST_GROUP_SET_CURVE 202 +#define EC_F_EC_GFP_SIMPLE_GROUP_CHECK_DISCRIMINANT 165 +#define EC_F_EC_GFP_SIMPLE_GROUP_SET_CURVE 166 +#define EC_F_EC_GFP_SIMPLE_GROUP_SET_CURVE_GFP 100 +#define EC_F_EC_GFP_SIMPLE_GROUP_SET_GENERATOR 101 +#define EC_F_EC_GFP_SIMPLE_MAKE_AFFINE 102 +#define EC_F_EC_GFP_SIMPLE_OCT2POINT 103 +#define EC_F_EC_GFP_SIMPLE_POINT2OCT 104 +#define EC_F_EC_GFP_SIMPLE_POINTS_MAKE_AFFINE 137 +#define EC_F_EC_GFP_SIMPLE_POINT_GET_AFFINE_COORDINATES 167 +#define EC_F_EC_GFP_SIMPLE_POINT_GET_AFFINE_COORDINATES_GFP 105 +#define EC_F_EC_GFP_SIMPLE_POINT_SET_AFFINE_COORDINATES 168 +#define EC_F_EC_GFP_SIMPLE_POINT_SET_AFFINE_COORDINATES_GFP 128 +#define EC_F_EC_GFP_SIMPLE_SET_COMPRESSED_COORDINATES 169 +#define EC_F_EC_GFP_SIMPLE_SET_COMPRESSED_COORDINATES_GFP 129 +#define EC_F_EC_GROUP_CHECK 170 +#define EC_F_EC_GROUP_CHECK_DISCRIMINANT 171 +#define EC_F_EC_GROUP_COPY 106 +#define EC_F_EC_GROUP_GET0_GENERATOR 139 +#define EC_F_EC_GROUP_GET_COFACTOR 140 +#define EC_F_EC_GROUP_GET_CURVE_GF2M 172 +#define EC_F_EC_GROUP_GET_CURVE_GFP 130 +#define EC_F_EC_GROUP_GET_DEGREE 173 +#define EC_F_EC_GROUP_GET_ORDER 141 +#define EC_F_EC_GROUP_GET_PENTANOMIAL_BASIS 193 +#define EC_F_EC_GROUP_GET_TRINOMIAL_BASIS 194 +#define EC_F_EC_GROUP_NEW 108 +#define EC_F_EC_GROUP_NEW_BY_CURVE_NAME 174 +#define EC_F_EC_GROUP_NEW_FROM_DATA 175 +#define EC_F_EC_GROUP_PRECOMPUTE_MULT 142 +#define EC_F_EC_GROUP_SET_CURVE_GF2M 176 +#define EC_F_EC_GROUP_SET_CURVE_GFP 109 +#define EC_F_EC_GROUP_SET_EXTRA_DATA 110 +#define EC_F_EC_GROUP_SET_GENERATOR 111 +#define EC_F_EC_KEY_CHECK_KEY 177 +#define EC_F_EC_KEY_COPY 178 +#define EC_F_EC_KEY_GENERATE_KEY 179 +#define EC_F_EC_KEY_NEW 182 +#define EC_F_EC_KEY_PRINT 180 +#define EC_F_EC_KEY_PRINT_FP 181 +#define EC_F_EC_POINTS_MAKE_AFFINE 136 +#define EC_F_EC_POINT_ADD 112 +#define EC_F_EC_POINT_CMP 113 +#define EC_F_EC_POINT_COPY 114 +#define EC_F_EC_POINT_DBL 115 +#define EC_F_EC_POINT_GET_AFFINE_COORDINATES_GF2M 183 +#define EC_F_EC_POINT_GET_AFFINE_COORDINATES_GFP 116 +#define EC_F_EC_POINT_GET_JPROJECTIVE_COORDINATES_GFP 117 +#define EC_F_EC_POINT_INVERT 210 +#define EC_F_EC_POINT_IS_AT_INFINITY 118 +#define EC_F_EC_POINT_IS_ON_CURVE 119 +#define EC_F_EC_POINT_MAKE_AFFINE 120 +#define EC_F_EC_POINT_MUL 184 +#define EC_F_EC_POINT_NEW 121 +#define EC_F_EC_POINT_OCT2POINT 122 +#define EC_F_EC_POINT_POINT2OCT 123 +#define EC_F_EC_POINT_SET_AFFINE_COORDINATES_GF2M 185 +#define EC_F_EC_POINT_SET_AFFINE_COORDINATES_GFP 124 +#define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GF2M 186 +#define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GFP 125 +#define EC_F_EC_POINT_SET_JPROJECTIVE_COORDINATES_GFP 126 +#define EC_F_EC_POINT_SET_TO_INFINITY 127 +#define EC_F_EC_PRE_COMP_DUP 207 +#define EC_F_EC_PRE_COMP_NEW 196 +#define EC_F_EC_WNAF_MUL 187 +#define EC_F_EC_WNAF_PRECOMPUTE_MULT 188 +#define EC_F_I2D_ECPARAMETERS 190 +#define EC_F_I2D_ECPKPARAMETERS 191 +#define EC_F_I2D_ECPRIVATEKEY 192 +#define EC_F_I2O_ECPUBLICKEY 151 +#define EC_F_O2I_ECPUBLICKEY 152 +#define EC_F_OLD_EC_PRIV_DECODE 222 +#define EC_F_PKEY_EC_CTRL 197 +#define EC_F_PKEY_EC_CTRL_STR 198 +#define EC_F_PKEY_EC_DERIVE 217 +#define EC_F_PKEY_EC_KEYGEN 199 +#define EC_F_PKEY_EC_PARAMGEN 219 +#define EC_F_PKEY_EC_SIGN 218 + +/* Reason codes. */ +#define EC_R_ASN1_ERROR 115 +#define EC_R_ASN1_UNKNOWN_FIELD 116 +#define EC_R_BUFFER_TOO_SMALL 100 +#define EC_R_D2I_ECPKPARAMETERS_FAILURE 117 +#define EC_R_DECODE_ERROR 142 +#define EC_R_DISCRIMINANT_IS_ZERO 118 +#define EC_R_EC_GROUP_NEW_BY_NAME_FAILURE 119 +#define EC_R_FIELD_TOO_LARGE 143 +#define EC_R_GROUP2PKPARAMETERS_FAILURE 120 +#define EC_R_I2D_ECPKPARAMETERS_FAILURE 121 +#define EC_R_INCOMPATIBLE_OBJECTS 101 +#define EC_R_INVALID_ARGUMENT 112 +#define EC_R_INVALID_COMPRESSED_POINT 110 +#define EC_R_INVALID_COMPRESSION_BIT 109 +#define EC_R_INVALID_CURVE 141 +#define EC_R_INVALID_DIGEST_TYPE 138 +#define EC_R_INVALID_ENCODING 102 +#define EC_R_INVALID_FIELD 103 +#define EC_R_INVALID_FORM 104 +#define EC_R_INVALID_GROUP_ORDER 122 +#define EC_R_INVALID_PENTANOMIAL_BASIS 132 +#define EC_R_INVALID_PRIVATE_KEY 123 +#define EC_R_INVALID_TRINOMIAL_BASIS 137 +#define EC_R_KEYS_NOT_SET 140 +#define EC_R_MISSING_PARAMETERS 124 +#define EC_R_MISSING_PRIVATE_KEY 125 +#define EC_R_NOT_A_NIST_PRIME 135 +#define EC_R_NOT_A_SUPPORTED_NIST_PRIME 136 +#define EC_R_NOT_IMPLEMENTED 126 +#define EC_R_NOT_INITIALIZED 111 +#define EC_R_NO_FIELD_MOD 133 +#define EC_R_NO_PARAMETERS_SET 139 +#define EC_R_PASSED_NULL_PARAMETER 134 +#define EC_R_PKPARAMETERS2GROUP_FAILURE 127 +#define EC_R_POINT_AT_INFINITY 106 +#define EC_R_POINT_IS_NOT_ON_CURVE 107 +#define EC_R_SLOT_FULL 108 +#define EC_R_UNDEFINED_GENERATOR 113 +#define EC_R_UNDEFINED_ORDER 128 +#define EC_R_UNKNOWN_GROUP 129 +#define EC_R_UNKNOWN_ORDER 114 +#define EC_R_UNSUPPORTED_FIELD 131 +#define EC_R_WRONG_ORDER 130 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/extra_lib/include/openssl/ecdh.h b/extra_lib/include/openssl/ecdh.h new file mode 100644 index 0000000..b4b58ee --- /dev/null +++ b/extra_lib/include/openssl/ecdh.h @@ -0,0 +1,123 @@ +/* crypto/ecdh/ecdh.h */ +/* ==================================================================== + * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. + * + * The Elliptic Curve Public-Key Crypto Library (ECC Code) included + * herein is developed by SUN MICROSYSTEMS, INC., and is contributed + * to the OpenSSL project. + * + * The ECC Code is licensed pursuant to the OpenSSL open source + * license provided below. + * + * The ECDH software is originally written by Douglas Stebila of + * Sun Microsystems Laboratories. + * + */ +/* ==================================================================== + * Copyright (c) 2000-2002 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * licensing@OpenSSL.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED 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 OpenSSL PROJECT OR + * ITS 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. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ +#ifndef HEADER_ECDH_H +#define HEADER_ECDH_H + +#include + +#ifdef OPENSSL_NO_ECDH +#error ECDH is disabled. +#endif + +#include +#include +#ifndef OPENSSL_NO_DEPRECATED +#include +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +const ECDH_METHOD *ECDH_OpenSSL(void); + +void ECDH_set_default_method(const ECDH_METHOD *); +const ECDH_METHOD *ECDH_get_default_method(void); +int ECDH_set_method(EC_KEY *, const ECDH_METHOD *); + +int ECDH_compute_key(void *out, size_t outlen, const EC_POINT *pub_key, EC_KEY *ecdh, + void *(*KDF)(const void *in, size_t inlen, void *out, size_t *outlen)); + +int ECDH_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new + *new_func, CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); +int ECDH_set_ex_data(EC_KEY *d, int idx, void *arg); +void *ECDH_get_ex_data(EC_KEY *d, int idx); + + +/* BEGIN ERROR CODES */ +/* The following lines are auto generated by the script mkerr.pl. Any changes + * made after this point may be overwritten when the script is next run. + */ +void ERR_load_ECDH_strings(void); + +/* Error codes for the ECDH functions. */ + +/* Function codes. */ +#define ECDH_F_ECDH_COMPUTE_KEY 100 +#define ECDH_F_ECDH_DATA_NEW_METHOD 101 + +/* Reason codes. */ +#define ECDH_R_KDF_FAILED 102 +#define ECDH_R_NO_PRIVATE_VALUE 100 +#define ECDH_R_POINT_ARITHMETIC_FAILURE 101 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/extra_lib/include/openssl/ecdsa.h b/extra_lib/include/openssl/ecdsa.h new file mode 100644 index 0000000..e61c539 --- /dev/null +++ b/extra_lib/include/openssl/ecdsa.h @@ -0,0 +1,258 @@ +/* crypto/ecdsa/ecdsa.h */ +/** + * \file crypto/ecdsa/ecdsa.h Include file for the OpenSSL ECDSA functions + * \author Written by Nils Larsch for the OpenSSL project + */ +/* ==================================================================== + * Copyright (c) 2000-2005 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * licensing@OpenSSL.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED 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 OpenSSL PROJECT OR + * ITS 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. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ +#ifndef HEADER_ECDSA_H +#define HEADER_ECDSA_H + +#include + +#ifdef OPENSSL_NO_ECDSA +#error ECDSA is disabled. +#endif + +#include +#include +#ifndef OPENSSL_NO_DEPRECATED +#include +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct ECDSA_SIG_st + { + BIGNUM *r; + BIGNUM *s; + } ECDSA_SIG; + +/** Allocates and initialize a ECDSA_SIG structure + * \return pointer to a ECDSA_SIG structure or NULL if an error occurred + */ +ECDSA_SIG *ECDSA_SIG_new(void); + +/** frees a ECDSA_SIG structure + * \param sig pointer to the ECDSA_SIG structure + */ +void ECDSA_SIG_free(ECDSA_SIG *sig); + +/** DER encode content of ECDSA_SIG object (note: this function modifies *pp + * (*pp += length of the DER encoded signature)). + * \param sig pointer to the ECDSA_SIG object + * \param pp pointer to a unsigned char pointer for the output or NULL + * \return the length of the DER encoded ECDSA_SIG object or 0 + */ +int i2d_ECDSA_SIG(const ECDSA_SIG *sig, unsigned char **pp); + +/** Decodes a DER encoded ECDSA signature (note: this function changes *pp + * (*pp += len)). + * \param sig pointer to ECDSA_SIG pointer (may be NULL) + * \param pp memory buffer with the DER encoded signature + * \param len length of the buffer + * \return pointer to the decoded ECDSA_SIG structure (or NULL) + */ +ECDSA_SIG *d2i_ECDSA_SIG(ECDSA_SIG **sig, const unsigned char **pp, long len); + +/** Computes the ECDSA signature of the given hash value using + * the supplied private key and returns the created signature. + * \param dgst pointer to the hash value + * \param dgst_len length of the hash value + * \param eckey EC_KEY object containing a private EC key + * \return pointer to a ECDSA_SIG structure or NULL if an error occurred + */ +ECDSA_SIG *ECDSA_do_sign(const unsigned char *dgst,int dgst_len,EC_KEY *eckey); + +/** Computes ECDSA signature of a given hash value using the supplied + * private key (note: sig must point to ECDSA_size(eckey) bytes of memory). + * \param dgst pointer to the hash value to sign + * \param dgstlen length of the hash value + * \param kinv BIGNUM with a pre-computed inverse k (optional) + * \param rp BIGNUM with a pre-computed rp value (optioanl), + * see ECDSA_sign_setup + * \param eckey EC_KEY object containing a private EC key + * \return pointer to a ECDSA_SIG structure or NULL if an error occurred + */ +ECDSA_SIG *ECDSA_do_sign_ex(const unsigned char *dgst, int dgstlen, + const BIGNUM *kinv, const BIGNUM *rp, EC_KEY *eckey); + +/** Verifies that the supplied signature is a valid ECDSA + * signature of the supplied hash value using the supplied public key. + * \param dgst pointer to the hash value + * \param dgst_len length of the hash value + * \param sig ECDSA_SIG structure + * \param eckey EC_KEY object containing a public EC key + * \return 1 if the signature is valid, 0 if the signature is invalid + * and -1 on error + */ +int ECDSA_do_verify(const unsigned char *dgst, int dgst_len, + const ECDSA_SIG *sig, EC_KEY* eckey); + +const ECDSA_METHOD *ECDSA_OpenSSL(void); + +/** Sets the default ECDSA method + * \param meth new default ECDSA_METHOD + */ +void ECDSA_set_default_method(const ECDSA_METHOD *meth); + +/** Returns the default ECDSA method + * \return pointer to ECDSA_METHOD structure containing the default method + */ +const ECDSA_METHOD *ECDSA_get_default_method(void); + +/** Sets method to be used for the ECDSA operations + * \param eckey EC_KEY object + * \param meth new method + * \return 1 on success and 0 otherwise + */ +int ECDSA_set_method(EC_KEY *eckey, const ECDSA_METHOD *meth); + +/** Returns the maximum length of the DER encoded signature + * \param eckey EC_KEY object + * \return numbers of bytes required for the DER encoded signature + */ +int ECDSA_size(const EC_KEY *eckey); + +/** Precompute parts of the signing operation + * \param eckey EC_KEY object containing a private EC key + * \param ctx BN_CTX object (optional) + * \param kinv BIGNUM pointer for the inverse of k + * \param rp BIGNUM pointer for x coordinate of k * generator + * \return 1 on success and 0 otherwise + */ +int ECDSA_sign_setup(EC_KEY *eckey, BN_CTX *ctx, BIGNUM **kinv, + BIGNUM **rp); + +/** Computes ECDSA signature of a given hash value using the supplied + * private key (note: sig must point to ECDSA_size(eckey) bytes of memory). + * \param type this parameter is ignored + * \param dgst pointer to the hash value to sign + * \param dgstlen length of the hash value + * \param sig memory for the DER encoded created signature + * \param siglen pointer to the length of the returned signature + * \param eckey EC_KEY object containing a private EC key + * \return 1 on success and 0 otherwise + */ +int ECDSA_sign(int type, const unsigned char *dgst, int dgstlen, + unsigned char *sig, unsigned int *siglen, EC_KEY *eckey); + + +/** Computes ECDSA signature of a given hash value using the supplied + * private key (note: sig must point to ECDSA_size(eckey) bytes of memory). + * \param type this parameter is ignored + * \param dgst pointer to the hash value to sign + * \param dgstlen length of the hash value + * \param sig buffer to hold the DER encoded signature + * \param siglen pointer to the length of the returned signature + * \param kinv BIGNUM with a pre-computed inverse k (optional) + * \param rp BIGNUM with a pre-computed rp value (optioanl), + * see ECDSA_sign_setup + * \param eckey EC_KEY object containing a private EC key + * \return 1 on success and 0 otherwise + */ +int ECDSA_sign_ex(int type, const unsigned char *dgst, int dgstlen, + unsigned char *sig, unsigned int *siglen, const BIGNUM *kinv, + const BIGNUM *rp, EC_KEY *eckey); + +/** Verifies that the given signature is valid ECDSA signature + * of the supplied hash value using the specified public key. + * \param type this parameter is ignored + * \param dgst pointer to the hash value + * \param dgstlen length of the hash value + * \param sig pointer to the DER encoded signature + * \param siglen length of the DER encoded signature + * \param eckey EC_KEY object containing a public EC key + * \return 1 if the signature is valid, 0 if the signature is invalid + * and -1 on error + */ +int ECDSA_verify(int type, const unsigned char *dgst, int dgstlen, + const unsigned char *sig, int siglen, EC_KEY *eckey); + +/* the standard ex_data functions */ +int ECDSA_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new + *new_func, CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); +int ECDSA_set_ex_data(EC_KEY *d, int idx, void *arg); +void *ECDSA_get_ex_data(EC_KEY *d, int idx); + + +/* BEGIN ERROR CODES */ +/* The following lines are auto generated by the script mkerr.pl. Any changes + * made after this point may be overwritten when the script is next run. + */ +void ERR_load_ECDSA_strings(void); + +/* Error codes for the ECDSA functions. */ + +/* Function codes. */ +#define ECDSA_F_ECDSA_DATA_NEW_METHOD 100 +#define ECDSA_F_ECDSA_DO_SIGN 101 +#define ECDSA_F_ECDSA_DO_VERIFY 102 +#define ECDSA_F_ECDSA_SIGN_SETUP 103 + +/* Reason codes. */ +#define ECDSA_R_BAD_SIGNATURE 100 +#define ECDSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE 101 +#define ECDSA_R_ERR_EC_LIB 102 +#define ECDSA_R_MISSING_PARAMETERS 103 +#define ECDSA_R_NEED_NEW_SETUP_VALUES 106 +#define ECDSA_R_RANDOM_NUMBER_GENERATION_FAILED 104 +#define ECDSA_R_SIGNATURE_MALLOC_FAILED 105 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/extra_lib/include/openssl/err.h b/extra_lib/include/openssl/err.h new file mode 100644 index 0000000..b9f8c16 --- /dev/null +++ b/extra_lib/include/openssl/err.h @@ -0,0 +1,385 @@ +/* crypto/err/err.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 AUTHOR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ +/* ==================================================================== + * Copyright (c) 1998-2006 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED 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 OpenSSL PROJECT OR + * ITS 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. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ + +#ifndef HEADER_ERR_H +#define HEADER_ERR_H + +#include + +#ifndef OPENSSL_NO_FP_API +#include +#include +#endif + +#include +#ifndef OPENSSL_NO_BIO +#include +#endif +#ifndef OPENSSL_NO_LHASH +#include +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef OPENSSL_NO_ERR +#define ERR_PUT_error(a,b,c,d,e) ERR_put_error(a,b,c,d,e) +#else +#define ERR_PUT_error(a,b,c,d,e) ERR_put_error(a,b,c,NULL,0) +#endif + +#include + +#define ERR_TXT_MALLOCED 0x01 +#define ERR_TXT_STRING 0x02 + +#define ERR_FLAG_MARK 0x01 + +#define ERR_NUM_ERRORS 16 +typedef struct err_state_st + { + CRYPTO_THREADID tid; + int err_flags[ERR_NUM_ERRORS]; + unsigned long err_buffer[ERR_NUM_ERRORS]; + char *err_data[ERR_NUM_ERRORS]; + int err_data_flags[ERR_NUM_ERRORS]; + const char *err_file[ERR_NUM_ERRORS]; + int err_line[ERR_NUM_ERRORS]; + int top,bottom; + } ERR_STATE; + +/* library */ +#define ERR_LIB_NONE 1 +#define ERR_LIB_SYS 2 +#define ERR_LIB_BN 3 +#define ERR_LIB_RSA 4 +#define ERR_LIB_DH 5 +#define ERR_LIB_EVP 6 +#define ERR_LIB_BUF 7 +#define ERR_LIB_OBJ 8 +#define ERR_LIB_PEM 9 +#define ERR_LIB_DSA 10 +#define ERR_LIB_X509 11 +/* #define ERR_LIB_METH 12 */ +#define ERR_LIB_ASN1 13 +#define ERR_LIB_CONF 14 +#define ERR_LIB_CRYPTO 15 +#define ERR_LIB_EC 16 +#define ERR_LIB_SSL 20 +/* #define ERR_LIB_SSL23 21 */ +/* #define ERR_LIB_SSL2 22 */ +/* #define ERR_LIB_SSL3 23 */ +/* #define ERR_LIB_RSAREF 30 */ +/* #define ERR_LIB_PROXY 31 */ +#define ERR_LIB_BIO 32 +#define ERR_LIB_PKCS7 33 +#define ERR_LIB_X509V3 34 +#define ERR_LIB_PKCS12 35 +#define ERR_LIB_RAND 36 +#define ERR_LIB_DSO 37 +#define ERR_LIB_ENGINE 38 +#define ERR_LIB_OCSP 39 +#define ERR_LIB_UI 40 +#define ERR_LIB_COMP 41 +#define ERR_LIB_ECDSA 42 +#define ERR_LIB_ECDH 43 +#define ERR_LIB_STORE 44 +#define ERR_LIB_FIPS 45 +#define ERR_LIB_CMS 46 +#define ERR_LIB_TS 47 +#define ERR_LIB_HMAC 48 +#define ERR_LIB_JPAKE 49 + +#define ERR_LIB_USER 128 + +#define SYSerr(f,r) ERR_PUT_error(ERR_LIB_SYS,(f),(r),__FILE__,__LINE__) +#define BNerr(f,r) ERR_PUT_error(ERR_LIB_BN,(f),(r),__FILE__,__LINE__) +#define RSAerr(f,r) ERR_PUT_error(ERR_LIB_RSA,(f),(r),__FILE__,__LINE__) +#define DHerr(f,r) ERR_PUT_error(ERR_LIB_DH,(f),(r),__FILE__,__LINE__) +#define EVPerr(f,r) ERR_PUT_error(ERR_LIB_EVP,(f),(r),__FILE__,__LINE__) +#define BUFerr(f,r) ERR_PUT_error(ERR_LIB_BUF,(f),(r),__FILE__,__LINE__) +#define OBJerr(f,r) ERR_PUT_error(ERR_LIB_OBJ,(f),(r),__FILE__,__LINE__) +#define PEMerr(f,r) ERR_PUT_error(ERR_LIB_PEM,(f),(r),__FILE__,__LINE__) +#define DSAerr(f,r) ERR_PUT_error(ERR_LIB_DSA,(f),(r),__FILE__,__LINE__) +#define X509err(f,r) ERR_PUT_error(ERR_LIB_X509,(f),(r),__FILE__,__LINE__) +#define ASN1err(f,r) ERR_PUT_error(ERR_LIB_ASN1,(f),(r),__FILE__,__LINE__) +#define CONFerr(f,r) ERR_PUT_error(ERR_LIB_CONF,(f),(r),__FILE__,__LINE__) +#define CRYPTOerr(f,r) ERR_PUT_error(ERR_LIB_CRYPTO,(f),(r),__FILE__,__LINE__) +#define ECerr(f,r) ERR_PUT_error(ERR_LIB_EC,(f),(r),__FILE__,__LINE__) +#define SSLerr(f,r) ERR_PUT_error(ERR_LIB_SSL,(f),(r),__FILE__,__LINE__) +#define BIOerr(f,r) ERR_PUT_error(ERR_LIB_BIO,(f),(r),__FILE__,__LINE__) +#define PKCS7err(f,r) ERR_PUT_error(ERR_LIB_PKCS7,(f),(r),__FILE__,__LINE__) +#define X509V3err(f,r) ERR_PUT_error(ERR_LIB_X509V3,(f),(r),__FILE__,__LINE__) +#define PKCS12err(f,r) ERR_PUT_error(ERR_LIB_PKCS12,(f),(r),__FILE__,__LINE__) +#define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),__FILE__,__LINE__) +#define DSOerr(f,r) ERR_PUT_error(ERR_LIB_DSO,(f),(r),__FILE__,__LINE__) +#define ENGINEerr(f,r) ERR_PUT_error(ERR_LIB_ENGINE,(f),(r),__FILE__,__LINE__) +#define OCSPerr(f,r) ERR_PUT_error(ERR_LIB_OCSP,(f),(r),__FILE__,__LINE__) +#define UIerr(f,r) ERR_PUT_error(ERR_LIB_UI,(f),(r),__FILE__,__LINE__) +#define COMPerr(f,r) ERR_PUT_error(ERR_LIB_COMP,(f),(r),__FILE__,__LINE__) +#define ECDSAerr(f,r) ERR_PUT_error(ERR_LIB_ECDSA,(f),(r),__FILE__,__LINE__) +#define ECDHerr(f,r) ERR_PUT_error(ERR_LIB_ECDH,(f),(r),__FILE__,__LINE__) +#define STOREerr(f,r) ERR_PUT_error(ERR_LIB_STORE,(f),(r),__FILE__,__LINE__) +#define FIPSerr(f,r) ERR_PUT_error(ERR_LIB_FIPS,(f),(r),__FILE__,__LINE__) +#define CMSerr(f,r) ERR_PUT_error(ERR_LIB_CMS,(f),(r),__FILE__,__LINE__) +#define TSerr(f,r) ERR_PUT_error(ERR_LIB_TS,(f),(r),__FILE__,__LINE__) +#define HMACerr(f,r) ERR_PUT_error(ERR_LIB_HMAC,(f),(r),__FILE__,__LINE__) +#define JPAKEerr(f,r) ERR_PUT_error(ERR_LIB_JPAKE,(f),(r),__FILE__,__LINE__) + +/* Borland C seems too stupid to be able to shift and do longs in + * the pre-processor :-( */ +#define ERR_PACK(l,f,r) (((((unsigned long)l)&0xffL)*0x1000000)| \ + ((((unsigned long)f)&0xfffL)*0x1000)| \ + ((((unsigned long)r)&0xfffL))) +#define ERR_GET_LIB(l) (int)((((unsigned long)l)>>24L)&0xffL) +#define ERR_GET_FUNC(l) (int)((((unsigned long)l)>>12L)&0xfffL) +#define ERR_GET_REASON(l) (int)((l)&0xfffL) +#define ERR_FATAL_ERROR(l) (int)((l)&ERR_R_FATAL) + + +/* OS functions */ +#define SYS_F_FOPEN 1 +#define SYS_F_CONNECT 2 +#define SYS_F_GETSERVBYNAME 3 +#define SYS_F_SOCKET 4 +#define SYS_F_IOCTLSOCKET 5 +#define SYS_F_BIND 6 +#define SYS_F_LISTEN 7 +#define SYS_F_ACCEPT 8 +#define SYS_F_WSASTARTUP 9 /* Winsock stuff */ +#define SYS_F_OPENDIR 10 +#define SYS_F_FREAD 11 + + +/* reasons */ +#define ERR_R_SYS_LIB ERR_LIB_SYS /* 2 */ +#define ERR_R_BN_LIB ERR_LIB_BN /* 3 */ +#define ERR_R_RSA_LIB ERR_LIB_RSA /* 4 */ +#define ERR_R_DH_LIB ERR_LIB_DH /* 5 */ +#define ERR_R_EVP_LIB ERR_LIB_EVP /* 6 */ +#define ERR_R_BUF_LIB ERR_LIB_BUF /* 7 */ +#define ERR_R_OBJ_LIB ERR_LIB_OBJ /* 8 */ +#define ERR_R_PEM_LIB ERR_LIB_PEM /* 9 */ +#define ERR_R_DSA_LIB ERR_LIB_DSA /* 10 */ +#define ERR_R_X509_LIB ERR_LIB_X509 /* 11 */ +#define ERR_R_ASN1_LIB ERR_LIB_ASN1 /* 13 */ +#define ERR_R_CONF_LIB ERR_LIB_CONF /* 14 */ +#define ERR_R_CRYPTO_LIB ERR_LIB_CRYPTO /* 15 */ +#define ERR_R_EC_LIB ERR_LIB_EC /* 16 */ +#define ERR_R_SSL_LIB ERR_LIB_SSL /* 20 */ +#define ERR_R_BIO_LIB ERR_LIB_BIO /* 32 */ +#define ERR_R_PKCS7_LIB ERR_LIB_PKCS7 /* 33 */ +#define ERR_R_X509V3_LIB ERR_LIB_X509V3 /* 34 */ +#define ERR_R_PKCS12_LIB ERR_LIB_PKCS12 /* 35 */ +#define ERR_R_RAND_LIB ERR_LIB_RAND /* 36 */ +#define ERR_R_DSO_LIB ERR_LIB_DSO /* 37 */ +#define ERR_R_ENGINE_LIB ERR_LIB_ENGINE /* 38 */ +#define ERR_R_OCSP_LIB ERR_LIB_OCSP /* 39 */ +#define ERR_R_UI_LIB ERR_LIB_UI /* 40 */ +#define ERR_R_COMP_LIB ERR_LIB_COMP /* 41 */ +#define ERR_R_ECDSA_LIB ERR_LIB_ECDSA /* 42 */ +#define ERR_R_ECDH_LIB ERR_LIB_ECDH /* 43 */ +#define ERR_R_STORE_LIB ERR_LIB_STORE /* 44 */ +#define ERR_R_TS_LIB ERR_LIB_TS /* 45 */ + +#define ERR_R_NESTED_ASN1_ERROR 58 +#define ERR_R_BAD_ASN1_OBJECT_HEADER 59 +#define ERR_R_BAD_GET_ASN1_OBJECT_CALL 60 +#define ERR_R_EXPECTING_AN_ASN1_SEQUENCE 61 +#define ERR_R_ASN1_LENGTH_MISMATCH 62 +#define ERR_R_MISSING_ASN1_EOS 63 + +/* fatal error */ +#define ERR_R_FATAL 64 +#define ERR_R_MALLOC_FAILURE (1|ERR_R_FATAL) +#define ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED (2|ERR_R_FATAL) +#define ERR_R_PASSED_NULL_PARAMETER (3|ERR_R_FATAL) +#define ERR_R_INTERNAL_ERROR (4|ERR_R_FATAL) +#define ERR_R_DISABLED (5|ERR_R_FATAL) + +/* 99 is the maximum possible ERR_R_... code, higher values + * are reserved for the individual libraries */ + + +typedef struct ERR_string_data_st + { + unsigned long error; + const char *string; + } ERR_STRING_DATA; + +void ERR_put_error(int lib, int func,int reason,const char *file,int line); +void ERR_set_error_data(char *data,int flags); + +unsigned long ERR_get_error(void); +unsigned long ERR_get_error_line(const char **file,int *line); +unsigned long ERR_get_error_line_data(const char **file,int *line, + const char **data, int *flags); +unsigned long ERR_peek_error(void); +unsigned long ERR_peek_error_line(const char **file,int *line); +unsigned long ERR_peek_error_line_data(const char **file,int *line, + const char **data,int *flags); +unsigned long ERR_peek_last_error(void); +unsigned long ERR_peek_last_error_line(const char **file,int *line); +unsigned long ERR_peek_last_error_line_data(const char **file,int *line, + const char **data,int *flags); +void ERR_clear_error(void ); +char *ERR_error_string(unsigned long e,char *buf); +void ERR_error_string_n(unsigned long e, char *buf, size_t len); +const char *ERR_lib_error_string(unsigned long e); +const char *ERR_func_error_string(unsigned long e); +const char *ERR_reason_error_string(unsigned long e); +void ERR_print_errors_cb(int (*cb)(const char *str, size_t len, void *u), + void *u); +#ifndef OPENSSL_NO_FP_API +void ERR_print_errors_fp(FILE *fp); +#endif +#ifndef OPENSSL_NO_BIO +void ERR_print_errors(BIO *bp); +void ERR_add_error_data(int num, ...); +#endif +void ERR_load_strings(int lib,ERR_STRING_DATA str[]); +void ERR_unload_strings(int lib,ERR_STRING_DATA str[]); +void ERR_load_ERR_strings(void); +void ERR_load_crypto_strings(void); +void ERR_free_strings(void); + +void ERR_remove_thread_state(const CRYPTO_THREADID *tid); +#ifndef OPENSSL_NO_DEPRECATED +void ERR_remove_state(unsigned long pid); /* if zero we look it up */ +#endif +ERR_STATE *ERR_get_state(void); + +#ifndef OPENSSL_NO_LHASH +LHASH_OF(ERR_STRING_DATA) *ERR_get_string_table(void); +LHASH_OF(ERR_STATE) *ERR_get_err_state_table(void); +void ERR_release_err_state_table(LHASH_OF(ERR_STATE) **hash); +#endif + +int ERR_get_next_error_library(void); + +int ERR_set_mark(void); +int ERR_pop_to_mark(void); + +/* Already defined in ossl_typ.h */ +/* typedef struct st_ERR_FNS ERR_FNS; */ +/* An application can use this function and provide the return value to loaded + * modules that should use the application's ERR state/functionality */ +const ERR_FNS *ERR_get_implementation(void); +/* A loaded module should call this function prior to any ERR operations using + * the application's "ERR_FNS". */ +int ERR_set_implementation(const ERR_FNS *fns); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/extra_lib/include/openssl/evp.h b/extra_lib/include/openssl/evp.h new file mode 100644 index 0000000..9f9795e --- /dev/null +++ b/extra_lib/include/openssl/evp.h @@ -0,0 +1,1324 @@ +/* crypto/evp/evp.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 AUTHOR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_ENVELOPE_H +#define HEADER_ENVELOPE_H + +#ifdef OPENSSL_ALGORITHM_DEFINES +# include +#else +# define OPENSSL_ALGORITHM_DEFINES +# include +# undef OPENSSL_ALGORITHM_DEFINES +#endif + +#include + +#include + +#ifndef OPENSSL_NO_BIO +#include +#endif + +/* +#define EVP_RC2_KEY_SIZE 16 +#define EVP_RC4_KEY_SIZE 16 +#define EVP_BLOWFISH_KEY_SIZE 16 +#define EVP_CAST5_KEY_SIZE 16 +#define EVP_RC5_32_12_16_KEY_SIZE 16 +*/ +#define EVP_MAX_MD_SIZE 64 /* longest known is SHA512 */ +#define EVP_MAX_KEY_LENGTH 32 +#define EVP_MAX_IV_LENGTH 16 +#define EVP_MAX_BLOCK_LENGTH 32 + +#define PKCS5_SALT_LEN 8 +/* Default PKCS#5 iteration count */ +#define PKCS5_DEFAULT_ITER 2048 + +#include + +#define EVP_PK_RSA 0x0001 +#define EVP_PK_DSA 0x0002 +#define EVP_PK_DH 0x0004 +#define EVP_PK_EC 0x0008 +#define EVP_PKT_SIGN 0x0010 +#define EVP_PKT_ENC 0x0020 +#define EVP_PKT_EXCH 0x0040 +#define EVP_PKS_RSA 0x0100 +#define EVP_PKS_DSA 0x0200 +#define EVP_PKS_EC 0x0400 +#define EVP_PKT_EXP 0x1000 /* <= 512 bit key */ + +#define EVP_PKEY_NONE NID_undef +#define EVP_PKEY_RSA NID_rsaEncryption +#define EVP_PKEY_RSA2 NID_rsa +#define EVP_PKEY_DSA NID_dsa +#define EVP_PKEY_DSA1 NID_dsa_2 +#define EVP_PKEY_DSA2 NID_dsaWithSHA +#define EVP_PKEY_DSA3 NID_dsaWithSHA1 +#define EVP_PKEY_DSA4 NID_dsaWithSHA1_2 +#define EVP_PKEY_DH NID_dhKeyAgreement +#define EVP_PKEY_EC NID_X9_62_id_ecPublicKey +#define EVP_PKEY_HMAC NID_hmac + +#ifdef __cplusplus +extern "C" { +#endif + +/* Type needs to be a bit field + * Sub-type needs to be for variations on the method, as in, can it do + * arbitrary encryption.... */ +struct evp_pkey_st + { + int type; + int save_type; + int references; + const EVP_PKEY_ASN1_METHOD *ameth; + ENGINE *engine; + union { + char *ptr; +#ifndef OPENSSL_NO_RSA + struct rsa_st *rsa; /* RSA */ +#endif +#ifndef OPENSSL_NO_DSA + struct dsa_st *dsa; /* DSA */ +#endif +#ifndef OPENSSL_NO_DH + struct dh_st *dh; /* DH */ +#endif +#ifndef OPENSSL_NO_EC + struct ec_key_st *ec; /* ECC */ +#endif + } pkey; + int save_parameters; + STACK_OF(X509_ATTRIBUTE) *attributes; /* [ 0 ] */ + } /* EVP_PKEY */; + +#define EVP_PKEY_MO_SIGN 0x0001 +#define EVP_PKEY_MO_VERIFY 0x0002 +#define EVP_PKEY_MO_ENCRYPT 0x0004 +#define EVP_PKEY_MO_DECRYPT 0x0008 + +#ifndef EVP_MD +struct env_md_st + { + int type; + int pkey_type; + int md_size; + unsigned long flags; + int (*init)(EVP_MD_CTX *ctx); + int (*update)(EVP_MD_CTX *ctx,const void *data,size_t count); + int (*final)(EVP_MD_CTX *ctx,unsigned char *md); + int (*copy)(EVP_MD_CTX *to,const EVP_MD_CTX *from); + int (*cleanup)(EVP_MD_CTX *ctx); + + /* FIXME: prototype these some day */ + int (*sign)(int type, const unsigned char *m, unsigned int m_length, + unsigned char *sigret, unsigned int *siglen, void *key); + int (*verify)(int type, const unsigned char *m, unsigned int m_length, + const unsigned char *sigbuf, unsigned int siglen, + void *key); + int required_pkey_type[5]; /*EVP_PKEY_xxx */ + int block_size; + int ctx_size; /* how big does the ctx->md_data need to be */ + /* control function */ + int (*md_ctrl)(EVP_MD_CTX *ctx, int cmd, int p1, void *p2); + } /* EVP_MD */; + +typedef int evp_sign_method(int type,const unsigned char *m, + unsigned int m_length,unsigned char *sigret, + unsigned int *siglen, void *key); +typedef int evp_verify_method(int type,const unsigned char *m, + unsigned int m_length,const unsigned char *sigbuf, + unsigned int siglen, void *key); + +#define EVP_MD_FLAG_ONESHOT 0x0001 /* digest can only handle a single + * block */ + +#define EVP_MD_FLAG_PKEY_DIGEST 0x0002 /* digest is a "clone" digest used + * which is a copy of an existing + * one for a specific public key type. + * EVP_dss1() etc */ + +/* Digest uses EVP_PKEY_METHOD for signing instead of MD specific signing */ + +#define EVP_MD_FLAG_PKEY_METHOD_SIGNATURE 0x0004 + +/* DigestAlgorithmIdentifier flags... */ + +#define EVP_MD_FLAG_DIGALGID_MASK 0x0018 + +/* NULL or absent parameter accepted. Use NULL */ + +#define EVP_MD_FLAG_DIGALGID_NULL 0x0000 + +/* NULL or absent parameter accepted. Use NULL for PKCS#1 otherwise absent */ + +#define EVP_MD_FLAG_DIGALGID_ABSENT 0x0008 + +/* Custom handling via ctrl */ + +#define EVP_MD_FLAG_DIGALGID_CUSTOM 0x0018 + +/* Digest ctrls */ + +#define EVP_MD_CTRL_DIGALGID 0x1 +#define EVP_MD_CTRL_MICALG 0x2 + +/* Minimum Algorithm specific ctrl value */ + +#define EVP_MD_CTRL_ALG_CTRL 0x1000 + +#define EVP_PKEY_NULL_method NULL,NULL,{0,0,0,0} + +#ifndef OPENSSL_NO_DSA +#define EVP_PKEY_DSA_method (evp_sign_method *)DSA_sign, \ + (evp_verify_method *)DSA_verify, \ + {EVP_PKEY_DSA,EVP_PKEY_DSA2,EVP_PKEY_DSA3, \ + EVP_PKEY_DSA4,0} +#else +#define EVP_PKEY_DSA_method EVP_PKEY_NULL_method +#endif + +#ifndef OPENSSL_NO_ECDSA +#define EVP_PKEY_ECDSA_method (evp_sign_method *)ECDSA_sign, \ + (evp_verify_method *)ECDSA_verify, \ + {EVP_PKEY_EC,0,0,0} +#else +#define EVP_PKEY_ECDSA_method EVP_PKEY_NULL_method +#endif + +#ifndef OPENSSL_NO_RSA +#define EVP_PKEY_RSA_method (evp_sign_method *)RSA_sign, \ + (evp_verify_method *)RSA_verify, \ + {EVP_PKEY_RSA,EVP_PKEY_RSA2,0,0} +#define EVP_PKEY_RSA_ASN1_OCTET_STRING_method \ + (evp_sign_method *)RSA_sign_ASN1_OCTET_STRING, \ + (evp_verify_method *)RSA_verify_ASN1_OCTET_STRING, \ + {EVP_PKEY_RSA,EVP_PKEY_RSA2,0,0} +#else +#define EVP_PKEY_RSA_method EVP_PKEY_NULL_method +#define EVP_PKEY_RSA_ASN1_OCTET_STRING_method EVP_PKEY_NULL_method +#endif + +#endif /* !EVP_MD */ + +struct env_md_ctx_st + { + const EVP_MD *digest; + ENGINE *engine; /* functional reference if 'digest' is ENGINE-provided */ + unsigned long flags; + void *md_data; + /* Public key context for sign/verify */ + EVP_PKEY_CTX *pctx; + /* Update function: usually copied from EVP_MD */ + int (*update)(EVP_MD_CTX *ctx,const void *data,size_t count); + } /* EVP_MD_CTX */; + +/* values for EVP_MD_CTX flags */ + +#define EVP_MD_CTX_FLAG_ONESHOT 0x0001 /* digest update will be called + * once only */ +#define EVP_MD_CTX_FLAG_CLEANED 0x0002 /* context has already been + * cleaned */ +#define EVP_MD_CTX_FLAG_REUSE 0x0004 /* Don't free up ctx->md_data + * in EVP_MD_CTX_cleanup */ +/* FIPS and pad options are ignored in 1.0.0, definitions are here + * so we don't accidentally reuse the values for other purposes. + */ + +#define EVP_MD_CTX_FLAG_NON_FIPS_ALLOW 0x0008 /* Allow use of non FIPS digest + * in FIPS mode */ + +/* The following PAD options are also currently ignored in 1.0.0, digest + * parameters are handled through EVP_DigestSign*() and EVP_DigestVerify*() + * instead. + */ +#define EVP_MD_CTX_FLAG_PAD_MASK 0xF0 /* RSA mode to use */ +#define EVP_MD_CTX_FLAG_PAD_PKCS1 0x00 /* PKCS#1 v1.5 mode */ +#define EVP_MD_CTX_FLAG_PAD_X931 0x10 /* X9.31 mode */ +#define EVP_MD_CTX_FLAG_PAD_PSS 0x20 /* PSS mode */ + +#define EVP_MD_CTX_FLAG_NO_INIT 0x0100 /* Don't initialize md_data */ + +struct evp_cipher_st + { + int nid; + int block_size; + int key_len; /* Default value for variable length ciphers */ + int iv_len; + unsigned long flags; /* Various flags */ + int (*init)(EVP_CIPHER_CTX *ctx, const unsigned char *key, + const unsigned char *iv, int enc); /* init key */ + int (*do_cipher)(EVP_CIPHER_CTX *ctx, unsigned char *out, + const unsigned char *in, size_t inl);/* encrypt/decrypt data */ + int (*cleanup)(EVP_CIPHER_CTX *); /* cleanup ctx */ + int ctx_size; /* how big ctx->cipher_data needs to be */ + int (*set_asn1_parameters)(EVP_CIPHER_CTX *, ASN1_TYPE *); /* Populate a ASN1_TYPE with parameters */ + int (*get_asn1_parameters)(EVP_CIPHER_CTX *, ASN1_TYPE *); /* Get parameters from a ASN1_TYPE */ + int (*ctrl)(EVP_CIPHER_CTX *, int type, int arg, void *ptr); /* Miscellaneous operations */ + void *app_data; /* Application data */ + } /* EVP_CIPHER */; + +/* Values for cipher flags */ + +/* Modes for ciphers */ + +#define EVP_CIPH_STREAM_CIPHER 0x0 +#define EVP_CIPH_ECB_MODE 0x1 +#define EVP_CIPH_CBC_MODE 0x2 +#define EVP_CIPH_CFB_MODE 0x3 +#define EVP_CIPH_OFB_MODE 0x4 +#define EVP_CIPH_MODE 0xF0007 +/* Set if variable length cipher */ +#define EVP_CIPH_VARIABLE_LENGTH 0x8 +/* Set if the iv handling should be done by the cipher itself */ +#define EVP_CIPH_CUSTOM_IV 0x10 +/* Set if the cipher's init() function should be called if key is NULL */ +#define EVP_CIPH_ALWAYS_CALL_INIT 0x20 +/* Call ctrl() to init cipher parameters */ +#define EVP_CIPH_CTRL_INIT 0x40 +/* Don't use standard key length function */ +#define EVP_CIPH_CUSTOM_KEY_LENGTH 0x80 +/* Don't use standard block padding */ +#define EVP_CIPH_NO_PADDING 0x100 +/* cipher handles random key generation */ +#define EVP_CIPH_RAND_KEY 0x200 +/* cipher has its own additional copying logic */ +#define EVP_CIPH_CUSTOM_COPY 0x400 +/* Allow use default ASN1 get/set iv */ +#define EVP_CIPH_FLAG_DEFAULT_ASN1 0x1000 +/* Buffer length in bits not bytes: CFB1 mode only */ +#define EVP_CIPH_FLAG_LENGTH_BITS 0x2000 + +/* ctrl() values */ + +#define EVP_CTRL_INIT 0x0 +#define EVP_CTRL_SET_KEY_LENGTH 0x1 +#define EVP_CTRL_GET_RC2_KEY_BITS 0x2 +#define EVP_CTRL_SET_RC2_KEY_BITS 0x3 +#define EVP_CTRL_GET_RC5_ROUNDS 0x4 +#define EVP_CTRL_SET_RC5_ROUNDS 0x5 +#define EVP_CTRL_RAND_KEY 0x6 +#define EVP_CTRL_PBE_PRF_NID 0x7 +#define EVP_CTRL_COPY 0x8 + +typedef struct evp_cipher_info_st + { + const EVP_CIPHER *cipher; + unsigned char iv[EVP_MAX_IV_LENGTH]; + } EVP_CIPHER_INFO; + +struct evp_cipher_ctx_st + { + const EVP_CIPHER *cipher; + ENGINE *engine; /* functional reference if 'cipher' is ENGINE-provided */ + int encrypt; /* encrypt or decrypt */ + int buf_len; /* number we have left */ + + unsigned char oiv[EVP_MAX_IV_LENGTH]; /* original iv */ + unsigned char iv[EVP_MAX_IV_LENGTH]; /* working iv */ + unsigned char buf[EVP_MAX_BLOCK_LENGTH];/* saved partial block */ + int num; /* used by cfb/ofb mode */ + + void *app_data; /* application stuff */ + int key_len; /* May change for variable length cipher */ + unsigned long flags; /* Various flags */ + void *cipher_data; /* per EVP data */ + int final_used; + int block_mask; + unsigned char final[EVP_MAX_BLOCK_LENGTH];/* possible final block */ + } /* EVP_CIPHER_CTX */; + +typedef struct evp_Encode_Ctx_st + { + int num; /* number saved in a partial encode/decode */ + int length; /* The length is either the output line length + * (in input bytes) or the shortest input line + * length that is ok. Once decoding begins, + * the length is adjusted up each time a longer + * line is decoded */ + unsigned char enc_data[80]; /* data to encode */ + int line_num; /* number read on current line */ + int expect_nl; + } EVP_ENCODE_CTX; + +/* Password based encryption function */ +typedef int (EVP_PBE_KEYGEN)(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, + ASN1_TYPE *param, const EVP_CIPHER *cipher, + const EVP_MD *md, int en_de); + +#ifndef OPENSSL_NO_RSA +#define EVP_PKEY_assign_RSA(pkey,rsa) EVP_PKEY_assign((pkey),EVP_PKEY_RSA,\ + (char *)(rsa)) +#endif + +#ifndef OPENSSL_NO_DSA +#define EVP_PKEY_assign_DSA(pkey,dsa) EVP_PKEY_assign((pkey),EVP_PKEY_DSA,\ + (char *)(dsa)) +#endif + +#ifndef OPENSSL_NO_DH +#define EVP_PKEY_assign_DH(pkey,dh) EVP_PKEY_assign((pkey),EVP_PKEY_DH,\ + (char *)(dh)) +#endif + +#ifndef OPENSSL_NO_EC +#define EVP_PKEY_assign_EC_KEY(pkey,eckey) EVP_PKEY_assign((pkey),EVP_PKEY_EC,\ + (char *)(eckey)) +#endif + +/* Add some extra combinations */ +#define EVP_get_digestbynid(a) EVP_get_digestbyname(OBJ_nid2sn(a)) +#define EVP_get_digestbyobj(a) EVP_get_digestbynid(OBJ_obj2nid(a)) +#define EVP_get_cipherbynid(a) EVP_get_cipherbyname(OBJ_nid2sn(a)) +#define EVP_get_cipherbyobj(a) EVP_get_cipherbynid(OBJ_obj2nid(a)) + +int EVP_MD_type(const EVP_MD *md); +#define EVP_MD_nid(e) EVP_MD_type(e) +#define EVP_MD_name(e) OBJ_nid2sn(EVP_MD_nid(e)) +int EVP_MD_pkey_type(const EVP_MD *md); +int EVP_MD_size(const EVP_MD *md); +int EVP_MD_block_size(const EVP_MD *md); +unsigned long EVP_MD_flags(const EVP_MD *md); + +const EVP_MD *EVP_MD_CTX_md(const EVP_MD_CTX *ctx); +#define EVP_MD_CTX_size(e) EVP_MD_size(EVP_MD_CTX_md(e)) +#define EVP_MD_CTX_block_size(e) EVP_MD_block_size(EVP_MD_CTX_md(e)) +#define EVP_MD_CTX_type(e) EVP_MD_type(EVP_MD_CTX_md(e)) + +int EVP_CIPHER_nid(const EVP_CIPHER *cipher); +#define EVP_CIPHER_name(e) OBJ_nid2sn(EVP_CIPHER_nid(e)) +int EVP_CIPHER_block_size(const EVP_CIPHER *cipher); +int EVP_CIPHER_key_length(const EVP_CIPHER *cipher); +int EVP_CIPHER_iv_length(const EVP_CIPHER *cipher); +unsigned long EVP_CIPHER_flags(const EVP_CIPHER *cipher); +#define EVP_CIPHER_mode(e) (EVP_CIPHER_flags(e) & EVP_CIPH_MODE) + +const EVP_CIPHER * EVP_CIPHER_CTX_cipher(const EVP_CIPHER_CTX *ctx); +int EVP_CIPHER_CTX_nid(const EVP_CIPHER_CTX *ctx); +int EVP_CIPHER_CTX_block_size(const EVP_CIPHER_CTX *ctx); +int EVP_CIPHER_CTX_key_length(const EVP_CIPHER_CTX *ctx); +int EVP_CIPHER_CTX_iv_length(const EVP_CIPHER_CTX *ctx); +int EVP_CIPHER_CTX_copy(EVP_CIPHER_CTX *out, const EVP_CIPHER_CTX *in); +void * EVP_CIPHER_CTX_get_app_data(const EVP_CIPHER_CTX *ctx); +void EVP_CIPHER_CTX_set_app_data(EVP_CIPHER_CTX *ctx, void *data); +#define EVP_CIPHER_CTX_type(c) EVP_CIPHER_type(EVP_CIPHER_CTX_cipher(c)) +unsigned long EVP_CIPHER_CTX_flags(const EVP_CIPHER_CTX *ctx); +#define EVP_CIPHER_CTX_mode(e) (EVP_CIPHER_CTX_flags(e) & EVP_CIPH_MODE) + +#define EVP_ENCODE_LENGTH(l) (((l+2)/3*4)+(l/48+1)*2+80) +#define EVP_DECODE_LENGTH(l) ((l+3)/4*3+80) + +#define EVP_SignInit_ex(a,b,c) EVP_DigestInit_ex(a,b,c) +#define EVP_SignInit(a,b) EVP_DigestInit(a,b) +#define EVP_SignUpdate(a,b,c) EVP_DigestUpdate(a,b,c) +#define EVP_VerifyInit_ex(a,b,c) EVP_DigestInit_ex(a,b,c) +#define EVP_VerifyInit(a,b) EVP_DigestInit(a,b) +#define EVP_VerifyUpdate(a,b,c) EVP_DigestUpdate(a,b,c) +#define EVP_OpenUpdate(a,b,c,d,e) EVP_DecryptUpdate(a,b,c,d,e) +#define EVP_SealUpdate(a,b,c,d,e) EVP_EncryptUpdate(a,b,c,d,e) +#define EVP_DigestSignUpdate(a,b,c) EVP_DigestUpdate(a,b,c) +#define EVP_DigestVerifyUpdate(a,b,c) EVP_DigestUpdate(a,b,c) + +#ifdef CONST_STRICT +void BIO_set_md(BIO *,const EVP_MD *md); +#else +# define BIO_set_md(b,md) BIO_ctrl(b,BIO_C_SET_MD,0,(char *)md) +#endif +#define BIO_get_md(b,mdp) BIO_ctrl(b,BIO_C_GET_MD,0,(char *)mdp) +#define BIO_get_md_ctx(b,mdcp) BIO_ctrl(b,BIO_C_GET_MD_CTX,0,(char *)mdcp) +#define BIO_set_md_ctx(b,mdcp) BIO_ctrl(b,BIO_C_SET_MD_CTX,0,(char *)mdcp) +#define BIO_get_cipher_status(b) BIO_ctrl(b,BIO_C_GET_CIPHER_STATUS,0,NULL) +#define BIO_get_cipher_ctx(b,c_pp) BIO_ctrl(b,BIO_C_GET_CIPHER_CTX,0,(char *)c_pp) + +int EVP_Cipher(EVP_CIPHER_CTX *c, + unsigned char *out, + const unsigned char *in, + unsigned int inl); + +#define EVP_add_cipher_alias(n,alias) \ + OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n)) +#define EVP_add_digest_alias(n,alias) \ + OBJ_NAME_add((alias),OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS,(n)) +#define EVP_delete_cipher_alias(alias) \ + OBJ_NAME_remove(alias,OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS); +#define EVP_delete_digest_alias(alias) \ + OBJ_NAME_remove(alias,OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS); + +void EVP_MD_CTX_init(EVP_MD_CTX *ctx); +int EVP_MD_CTX_cleanup(EVP_MD_CTX *ctx); +EVP_MD_CTX *EVP_MD_CTX_create(void); +void EVP_MD_CTX_destroy(EVP_MD_CTX *ctx); +int EVP_MD_CTX_copy_ex(EVP_MD_CTX *out,const EVP_MD_CTX *in); +void EVP_MD_CTX_set_flags(EVP_MD_CTX *ctx, int flags); +void EVP_MD_CTX_clear_flags(EVP_MD_CTX *ctx, int flags); +int EVP_MD_CTX_test_flags(const EVP_MD_CTX *ctx,int flags); +int EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl); +int EVP_DigestUpdate(EVP_MD_CTX *ctx,const void *d, + size_t cnt); +int EVP_DigestFinal_ex(EVP_MD_CTX *ctx,unsigned char *md,unsigned int *s); +int EVP_Digest(const void *data, size_t count, + unsigned char *md, unsigned int *size, const EVP_MD *type, ENGINE *impl); + +int EVP_MD_CTX_copy(EVP_MD_CTX *out,const EVP_MD_CTX *in); +int EVP_DigestInit(EVP_MD_CTX *ctx, const EVP_MD *type); +int EVP_DigestFinal(EVP_MD_CTX *ctx,unsigned char *md,unsigned int *s); + +int EVP_read_pw_string(char *buf,int length,const char *prompt,int verify); +int EVP_read_pw_string_min(char *buf,int minlen,int maxlen,const char *prompt,int verify); +void EVP_set_pw_prompt(const char *prompt); +char * EVP_get_pw_prompt(void); + +int EVP_BytesToKey(const EVP_CIPHER *type,const EVP_MD *md, + const unsigned char *salt, const unsigned char *data, + int datal, int count, unsigned char *key,unsigned char *iv); + +void EVP_CIPHER_CTX_set_flags(EVP_CIPHER_CTX *ctx, int flags); +void EVP_CIPHER_CTX_clear_flags(EVP_CIPHER_CTX *ctx, int flags); +int EVP_CIPHER_CTX_test_flags(const EVP_CIPHER_CTX *ctx,int flags); + +int EVP_EncryptInit(EVP_CIPHER_CTX *ctx,const EVP_CIPHER *cipher, + const unsigned char *key, const unsigned char *iv); +int EVP_EncryptInit_ex(EVP_CIPHER_CTX *ctx,const EVP_CIPHER *cipher, ENGINE *impl, + const unsigned char *key, const unsigned char *iv); +int EVP_EncryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, + int *outl, const unsigned char *in, int inl); +int EVP_EncryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); +int EVP_EncryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); + +int EVP_DecryptInit(EVP_CIPHER_CTX *ctx,const EVP_CIPHER *cipher, + const unsigned char *key, const unsigned char *iv); +int EVP_DecryptInit_ex(EVP_CIPHER_CTX *ctx,const EVP_CIPHER *cipher, ENGINE *impl, + const unsigned char *key, const unsigned char *iv); +int EVP_DecryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, + int *outl, const unsigned char *in, int inl); +int EVP_DecryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl); +int EVP_DecryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl); + +int EVP_CipherInit(EVP_CIPHER_CTX *ctx,const EVP_CIPHER *cipher, + const unsigned char *key,const unsigned char *iv, + int enc); +int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx,const EVP_CIPHER *cipher, ENGINE *impl, + const unsigned char *key,const unsigned char *iv, + int enc); +int EVP_CipherUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, + int *outl, const unsigned char *in, int inl); +int EVP_CipherFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl); +int EVP_CipherFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl); + +int EVP_SignFinal(EVP_MD_CTX *ctx,unsigned char *md,unsigned int *s, + EVP_PKEY *pkey); + +int EVP_VerifyFinal(EVP_MD_CTX *ctx,const unsigned char *sigbuf, + unsigned int siglen,EVP_PKEY *pkey); + +int EVP_DigestSignInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, + const EVP_MD *type, ENGINE *e, EVP_PKEY *pkey); +int EVP_DigestSignFinal(EVP_MD_CTX *ctx, + unsigned char *sigret, size_t *siglen); + +int EVP_DigestVerifyInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, + const EVP_MD *type, ENGINE *e, EVP_PKEY *pkey); +int EVP_DigestVerifyFinal(EVP_MD_CTX *ctx, + unsigned char *sig, size_t siglen); + +int EVP_OpenInit(EVP_CIPHER_CTX *ctx,const EVP_CIPHER *type, + const unsigned char *ek, int ekl, const unsigned char *iv, + EVP_PKEY *priv); +int EVP_OpenFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); + +int EVP_SealInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, + unsigned char **ek, int *ekl, unsigned char *iv, + EVP_PKEY **pubk, int npubk); +int EVP_SealFinal(EVP_CIPHER_CTX *ctx,unsigned char *out,int *outl); + +void EVP_EncodeInit(EVP_ENCODE_CTX *ctx); +void EVP_EncodeUpdate(EVP_ENCODE_CTX *ctx,unsigned char *out,int *outl, + const unsigned char *in,int inl); +void EVP_EncodeFinal(EVP_ENCODE_CTX *ctx,unsigned char *out,int *outl); +int EVP_EncodeBlock(unsigned char *t, const unsigned char *f, int n); + +void EVP_DecodeInit(EVP_ENCODE_CTX *ctx); +int EVP_DecodeUpdate(EVP_ENCODE_CTX *ctx,unsigned char *out,int *outl, + const unsigned char *in, int inl); +int EVP_DecodeFinal(EVP_ENCODE_CTX *ctx, unsigned + char *out, int *outl); +int EVP_DecodeBlock(unsigned char *t, const unsigned char *f, int n); + +void EVP_CIPHER_CTX_init(EVP_CIPHER_CTX *a); +int EVP_CIPHER_CTX_cleanup(EVP_CIPHER_CTX *a); +EVP_CIPHER_CTX *EVP_CIPHER_CTX_new(void); +void EVP_CIPHER_CTX_free(EVP_CIPHER_CTX *a); +int EVP_CIPHER_CTX_set_key_length(EVP_CIPHER_CTX *x, int keylen); +int EVP_CIPHER_CTX_set_padding(EVP_CIPHER_CTX *c, int pad); +int EVP_CIPHER_CTX_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr); +int EVP_CIPHER_CTX_rand_key(EVP_CIPHER_CTX *ctx, unsigned char *key); + +#ifndef OPENSSL_NO_BIO +BIO_METHOD *BIO_f_md(void); +BIO_METHOD *BIO_f_base64(void); +BIO_METHOD *BIO_f_cipher(void); +BIO_METHOD *BIO_f_reliable(void); +void BIO_set_cipher(BIO *b,const EVP_CIPHER *c,const unsigned char *k, + const unsigned char *i, int enc); +#endif + +const EVP_MD *EVP_md_null(void); +#ifndef OPENSSL_NO_MD2 +const EVP_MD *EVP_md2(void); +#endif +#ifndef OPENSSL_NO_MD4 +const EVP_MD *EVP_md4(void); +#endif +#ifndef OPENSSL_NO_MD5 +const EVP_MD *EVP_md5(void); +#endif +#ifndef OPENSSL_NO_SHA +const EVP_MD *EVP_sha(void); +const EVP_MD *EVP_sha1(void); +const EVP_MD *EVP_dss(void); +const EVP_MD *EVP_dss1(void); +const EVP_MD *EVP_ecdsa(void); +#endif +#ifndef OPENSSL_NO_SHA256 +const EVP_MD *EVP_sha224(void); +const EVP_MD *EVP_sha256(void); +#endif +#ifndef OPENSSL_NO_SHA512 +const EVP_MD *EVP_sha384(void); +const EVP_MD *EVP_sha512(void); +#endif +#ifndef OPENSSL_NO_MDC2 +const EVP_MD *EVP_mdc2(void); +#endif +#ifndef OPENSSL_NO_RIPEMD +const EVP_MD *EVP_ripemd160(void); +#endif +#ifndef OPENSSL_NO_WHIRLPOOL +const EVP_MD *EVP_whirlpool(void); +#endif +const EVP_CIPHER *EVP_enc_null(void); /* does nothing :-) */ +#ifndef OPENSSL_NO_DES +const EVP_CIPHER *EVP_des_ecb(void); +const EVP_CIPHER *EVP_des_ede(void); +const EVP_CIPHER *EVP_des_ede3(void); +const EVP_CIPHER *EVP_des_ede_ecb(void); +const EVP_CIPHER *EVP_des_ede3_ecb(void); +const EVP_CIPHER *EVP_des_cfb64(void); +# define EVP_des_cfb EVP_des_cfb64 +const EVP_CIPHER *EVP_des_cfb1(void); +const EVP_CIPHER *EVP_des_cfb8(void); +const EVP_CIPHER *EVP_des_ede_cfb64(void); +# define EVP_des_ede_cfb EVP_des_ede_cfb64 +#if 0 +const EVP_CIPHER *EVP_des_ede_cfb1(void); +const EVP_CIPHER *EVP_des_ede_cfb8(void); +#endif +const EVP_CIPHER *EVP_des_ede3_cfb64(void); +# define EVP_des_ede3_cfb EVP_des_ede3_cfb64 +const EVP_CIPHER *EVP_des_ede3_cfb1(void); +const EVP_CIPHER *EVP_des_ede3_cfb8(void); +const EVP_CIPHER *EVP_des_ofb(void); +const EVP_CIPHER *EVP_des_ede_ofb(void); +const EVP_CIPHER *EVP_des_ede3_ofb(void); +const EVP_CIPHER *EVP_des_cbc(void); +const EVP_CIPHER *EVP_des_ede_cbc(void); +const EVP_CIPHER *EVP_des_ede3_cbc(void); +const EVP_CIPHER *EVP_desx_cbc(void); +/* This should now be supported through the dev_crypto ENGINE. But also, why are + * rc4 and md5 declarations made here inside a "NO_DES" precompiler branch? */ +#if 0 +# ifdef OPENSSL_OPENBSD_DEV_CRYPTO +const EVP_CIPHER *EVP_dev_crypto_des_ede3_cbc(void); +const EVP_CIPHER *EVP_dev_crypto_rc4(void); +const EVP_MD *EVP_dev_crypto_md5(void); +# endif +#endif +#endif +#ifndef OPENSSL_NO_RC4 +const EVP_CIPHER *EVP_rc4(void); +const EVP_CIPHER *EVP_rc4_40(void); +#endif +#ifndef OPENSSL_NO_IDEA +const EVP_CIPHER *EVP_idea_ecb(void); +const EVP_CIPHER *EVP_idea_cfb64(void); +# define EVP_idea_cfb EVP_idea_cfb64 +const EVP_CIPHER *EVP_idea_ofb(void); +const EVP_CIPHER *EVP_idea_cbc(void); +#endif +#ifndef OPENSSL_NO_RC2 +const EVP_CIPHER *EVP_rc2_ecb(void); +const EVP_CIPHER *EVP_rc2_cbc(void); +const EVP_CIPHER *EVP_rc2_40_cbc(void); +const EVP_CIPHER *EVP_rc2_64_cbc(void); +const EVP_CIPHER *EVP_rc2_cfb64(void); +# define EVP_rc2_cfb EVP_rc2_cfb64 +const EVP_CIPHER *EVP_rc2_ofb(void); +#endif +#ifndef OPENSSL_NO_BF +const EVP_CIPHER *EVP_bf_ecb(void); +const EVP_CIPHER *EVP_bf_cbc(void); +const EVP_CIPHER *EVP_bf_cfb64(void); +# define EVP_bf_cfb EVP_bf_cfb64 +const EVP_CIPHER *EVP_bf_ofb(void); +#endif +#ifndef OPENSSL_NO_CAST +const EVP_CIPHER *EVP_cast5_ecb(void); +const EVP_CIPHER *EVP_cast5_cbc(void); +const EVP_CIPHER *EVP_cast5_cfb64(void); +# define EVP_cast5_cfb EVP_cast5_cfb64 +const EVP_CIPHER *EVP_cast5_ofb(void); +#endif +#ifndef OPENSSL_NO_RC5 +const EVP_CIPHER *EVP_rc5_32_12_16_cbc(void); +const EVP_CIPHER *EVP_rc5_32_12_16_ecb(void); +const EVP_CIPHER *EVP_rc5_32_12_16_cfb64(void); +# define EVP_rc5_32_12_16_cfb EVP_rc5_32_12_16_cfb64 +const EVP_CIPHER *EVP_rc5_32_12_16_ofb(void); +#endif +#ifndef OPENSSL_NO_AES +const EVP_CIPHER *EVP_aes_128_ecb(void); +const EVP_CIPHER *EVP_aes_128_cbc(void); +const EVP_CIPHER *EVP_aes_128_cfb1(void); +const EVP_CIPHER *EVP_aes_128_cfb8(void); +const EVP_CIPHER *EVP_aes_128_cfb128(void); +# define EVP_aes_128_cfb EVP_aes_128_cfb128 +const EVP_CIPHER *EVP_aes_128_ofb(void); +#if 0 +const EVP_CIPHER *EVP_aes_128_ctr(void); +#endif +const EVP_CIPHER *EVP_aes_192_ecb(void); +const EVP_CIPHER *EVP_aes_192_cbc(void); +const EVP_CIPHER *EVP_aes_192_cfb1(void); +const EVP_CIPHER *EVP_aes_192_cfb8(void); +const EVP_CIPHER *EVP_aes_192_cfb128(void); +# define EVP_aes_192_cfb EVP_aes_192_cfb128 +const EVP_CIPHER *EVP_aes_192_ofb(void); +#if 0 +const EVP_CIPHER *EVP_aes_192_ctr(void); +#endif +const EVP_CIPHER *EVP_aes_256_ecb(void); +const EVP_CIPHER *EVP_aes_256_cbc(void); +const EVP_CIPHER *EVP_aes_256_cfb1(void); +const EVP_CIPHER *EVP_aes_256_cfb8(void); +const EVP_CIPHER *EVP_aes_256_cfb128(void); +# define EVP_aes_256_cfb EVP_aes_256_cfb128 +const EVP_CIPHER *EVP_aes_256_ofb(void); +#if 0 +const EVP_CIPHER *EVP_aes_256_ctr(void); +#endif +#endif +#ifndef OPENSSL_NO_CAMELLIA +const EVP_CIPHER *EVP_camellia_128_ecb(void); +const EVP_CIPHER *EVP_camellia_128_cbc(void); +const EVP_CIPHER *EVP_camellia_128_cfb1(void); +const EVP_CIPHER *EVP_camellia_128_cfb8(void); +const EVP_CIPHER *EVP_camellia_128_cfb128(void); +# define EVP_camellia_128_cfb EVP_camellia_128_cfb128 +const EVP_CIPHER *EVP_camellia_128_ofb(void); +const EVP_CIPHER *EVP_camellia_192_ecb(void); +const EVP_CIPHER *EVP_camellia_192_cbc(void); +const EVP_CIPHER *EVP_camellia_192_cfb1(void); +const EVP_CIPHER *EVP_camellia_192_cfb8(void); +const EVP_CIPHER *EVP_camellia_192_cfb128(void); +# define EVP_camellia_192_cfb EVP_camellia_192_cfb128 +const EVP_CIPHER *EVP_camellia_192_ofb(void); +const EVP_CIPHER *EVP_camellia_256_ecb(void); +const EVP_CIPHER *EVP_camellia_256_cbc(void); +const EVP_CIPHER *EVP_camellia_256_cfb1(void); +const EVP_CIPHER *EVP_camellia_256_cfb8(void); +const EVP_CIPHER *EVP_camellia_256_cfb128(void); +# define EVP_camellia_256_cfb EVP_camellia_256_cfb128 +const EVP_CIPHER *EVP_camellia_256_ofb(void); +#endif + +#ifndef OPENSSL_NO_SEED +const EVP_CIPHER *EVP_seed_ecb(void); +const EVP_CIPHER *EVP_seed_cbc(void); +const EVP_CIPHER *EVP_seed_cfb128(void); +# define EVP_seed_cfb EVP_seed_cfb128 +const EVP_CIPHER *EVP_seed_ofb(void); +#endif + +void OPENSSL_add_all_algorithms_noconf(void); +void OPENSSL_add_all_algorithms_conf(void); + +#ifdef OPENSSL_LOAD_CONF +#define OpenSSL_add_all_algorithms() \ + OPENSSL_add_all_algorithms_conf() +#else +#define OpenSSL_add_all_algorithms() \ + OPENSSL_add_all_algorithms_noconf() +#endif + +void OpenSSL_add_all_ciphers(void); +void OpenSSL_add_all_digests(void); +#define SSLeay_add_all_algorithms() OpenSSL_add_all_algorithms() +#define SSLeay_add_all_ciphers() OpenSSL_add_all_ciphers() +#define SSLeay_add_all_digests() OpenSSL_add_all_digests() + +int EVP_add_cipher(const EVP_CIPHER *cipher); +int EVP_add_digest(const EVP_MD *digest); + +const EVP_CIPHER *EVP_get_cipherbyname(const char *name); +const EVP_MD *EVP_get_digestbyname(const char *name); +void EVP_cleanup(void); + +void EVP_CIPHER_do_all(void (*fn)(const EVP_CIPHER *ciph, + const char *from, const char *to, void *x), void *arg); +void EVP_CIPHER_do_all_sorted(void (*fn)(const EVP_CIPHER *ciph, + const char *from, const char *to, void *x), void *arg); + +void EVP_MD_do_all(void (*fn)(const EVP_MD *ciph, + const char *from, const char *to, void *x), void *arg); +void EVP_MD_do_all_sorted(void (*fn)(const EVP_MD *ciph, + const char *from, const char *to, void *x), void *arg); + +int EVP_PKEY_decrypt_old(unsigned char *dec_key, + const unsigned char *enc_key,int enc_key_len, + EVP_PKEY *private_key); +int EVP_PKEY_encrypt_old(unsigned char *enc_key, + const unsigned char *key,int key_len, + EVP_PKEY *pub_key); +int EVP_PKEY_type(int type); +int EVP_PKEY_id(const EVP_PKEY *pkey); +int EVP_PKEY_base_id(const EVP_PKEY *pkey); +int EVP_PKEY_bits(EVP_PKEY *pkey); +int EVP_PKEY_size(EVP_PKEY *pkey); +int EVP_PKEY_set_type(EVP_PKEY *pkey,int type); +int EVP_PKEY_set_type_str(EVP_PKEY *pkey, const char *str, int len); +int EVP_PKEY_assign(EVP_PKEY *pkey,int type,void *key); +void * EVP_PKEY_get0(EVP_PKEY *pkey); + +#ifndef OPENSSL_NO_RSA +struct rsa_st; +int EVP_PKEY_set1_RSA(EVP_PKEY *pkey,struct rsa_st *key); +struct rsa_st *EVP_PKEY_get1_RSA(EVP_PKEY *pkey); +#endif +#ifndef OPENSSL_NO_DSA +struct dsa_st; +int EVP_PKEY_set1_DSA(EVP_PKEY *pkey,struct dsa_st *key); +struct dsa_st *EVP_PKEY_get1_DSA(EVP_PKEY *pkey); +#endif +#ifndef OPENSSL_NO_DH +struct dh_st; +int EVP_PKEY_set1_DH(EVP_PKEY *pkey,struct dh_st *key); +struct dh_st *EVP_PKEY_get1_DH(EVP_PKEY *pkey); +#endif +#ifndef OPENSSL_NO_EC +struct ec_key_st; +int EVP_PKEY_set1_EC_KEY(EVP_PKEY *pkey,struct ec_key_st *key); +struct ec_key_st *EVP_PKEY_get1_EC_KEY(EVP_PKEY *pkey); +#endif + +EVP_PKEY * EVP_PKEY_new(void); +void EVP_PKEY_free(EVP_PKEY *pkey); + +EVP_PKEY * d2i_PublicKey(int type,EVP_PKEY **a, const unsigned char **pp, + long length); +int i2d_PublicKey(EVP_PKEY *a, unsigned char **pp); + +EVP_PKEY * d2i_PrivateKey(int type,EVP_PKEY **a, const unsigned char **pp, + long length); +EVP_PKEY * d2i_AutoPrivateKey(EVP_PKEY **a, const unsigned char **pp, + long length); +int i2d_PrivateKey(EVP_PKEY *a, unsigned char **pp); + +int EVP_PKEY_copy_parameters(EVP_PKEY *to, const EVP_PKEY *from); +int EVP_PKEY_missing_parameters(const EVP_PKEY *pkey); +int EVP_PKEY_save_parameters(EVP_PKEY *pkey,int mode); +int EVP_PKEY_cmp_parameters(const EVP_PKEY *a, const EVP_PKEY *b); + +int EVP_PKEY_cmp(const EVP_PKEY *a, const EVP_PKEY *b); + +int EVP_PKEY_print_public(BIO *out, const EVP_PKEY *pkey, + int indent, ASN1_PCTX *pctx); +int EVP_PKEY_print_private(BIO *out, const EVP_PKEY *pkey, + int indent, ASN1_PCTX *pctx); +int EVP_PKEY_print_params(BIO *out, const EVP_PKEY *pkey, + int indent, ASN1_PCTX *pctx); + +int EVP_PKEY_get_default_digest_nid(EVP_PKEY *pkey, int *pnid); + +int EVP_CIPHER_type(const EVP_CIPHER *ctx); + +/* calls methods */ +int EVP_CIPHER_param_to_asn1(EVP_CIPHER_CTX *c, ASN1_TYPE *type); +int EVP_CIPHER_asn1_to_param(EVP_CIPHER_CTX *c, ASN1_TYPE *type); + +/* These are used by EVP_CIPHER methods */ +int EVP_CIPHER_set_asn1_iv(EVP_CIPHER_CTX *c,ASN1_TYPE *type); +int EVP_CIPHER_get_asn1_iv(EVP_CIPHER_CTX *c,ASN1_TYPE *type); + +/* PKCS5 password based encryption */ +int PKCS5_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, + ASN1_TYPE *param, const EVP_CIPHER *cipher, const EVP_MD *md, + int en_de); +int PKCS5_PBKDF2_HMAC_SHA1(const char *pass, int passlen, + const unsigned char *salt, int saltlen, int iter, + int keylen, unsigned char *out); +int PKCS5_PBKDF2_HMAC(const char *pass, int passlen, + const unsigned char *salt, int saltlen, int iter, + const EVP_MD *digest, + int keylen, unsigned char *out); +int PKCS5_v2_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, + ASN1_TYPE *param, const EVP_CIPHER *cipher, const EVP_MD *md, + int en_de); + +void PKCS5_PBE_add(void); + +int EVP_PBE_CipherInit (ASN1_OBJECT *pbe_obj, const char *pass, int passlen, + ASN1_TYPE *param, EVP_CIPHER_CTX *ctx, int en_de); + +/* PBE type */ + +/* Can appear as the outermost AlgorithmIdentifier */ +#define EVP_PBE_TYPE_OUTER 0x0 +/* Is an PRF type OID */ +#define EVP_PBE_TYPE_PRF 0x1 + +int EVP_PBE_alg_add_type(int pbe_type, int pbe_nid, int cipher_nid, int md_nid, + EVP_PBE_KEYGEN *keygen); +int EVP_PBE_alg_add(int nid, const EVP_CIPHER *cipher, const EVP_MD *md, + EVP_PBE_KEYGEN *keygen); +int EVP_PBE_find(int type, int pbe_nid, + int *pcnid, int *pmnid, EVP_PBE_KEYGEN **pkeygen); +void EVP_PBE_cleanup(void); + +#define ASN1_PKEY_ALIAS 0x1 +#define ASN1_PKEY_DYNAMIC 0x2 +#define ASN1_PKEY_SIGPARAM_NULL 0x4 + +#define ASN1_PKEY_CTRL_PKCS7_SIGN 0x1 +#define ASN1_PKEY_CTRL_PKCS7_ENCRYPT 0x2 +#define ASN1_PKEY_CTRL_DEFAULT_MD_NID 0x3 +#define ASN1_PKEY_CTRL_CMS_SIGN 0x5 +#define ASN1_PKEY_CTRL_CMS_ENVELOPE 0x7 + +int EVP_PKEY_asn1_get_count(void); +const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_get0(int idx); +const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find(ENGINE **pe, int type); +const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find_str(ENGINE **pe, + const char *str, int len); +int EVP_PKEY_asn1_add0(const EVP_PKEY_ASN1_METHOD *ameth); +int EVP_PKEY_asn1_add_alias(int to, int from); +int EVP_PKEY_asn1_get0_info(int *ppkey_id, int *pkey_base_id, int *ppkey_flags, + const char **pinfo, const char **ppem_str, + const EVP_PKEY_ASN1_METHOD *ameth); + +const EVP_PKEY_ASN1_METHOD* EVP_PKEY_get0_asn1(EVP_PKEY *pkey); +EVP_PKEY_ASN1_METHOD* EVP_PKEY_asn1_new(int id, int flags, + const char *pem_str, const char *info); +void EVP_PKEY_asn1_copy(EVP_PKEY_ASN1_METHOD *dst, + const EVP_PKEY_ASN1_METHOD *src); +void EVP_PKEY_asn1_free(EVP_PKEY_ASN1_METHOD *ameth); +void EVP_PKEY_asn1_set_public(EVP_PKEY_ASN1_METHOD *ameth, + int (*pub_decode)(EVP_PKEY *pk, X509_PUBKEY *pub), + int (*pub_encode)(X509_PUBKEY *pub, const EVP_PKEY *pk), + int (*pub_cmp)(const EVP_PKEY *a, const EVP_PKEY *b), + int (*pub_print)(BIO *out, const EVP_PKEY *pkey, int indent, + ASN1_PCTX *pctx), + int (*pkey_size)(const EVP_PKEY *pk), + int (*pkey_bits)(const EVP_PKEY *pk)); +void EVP_PKEY_asn1_set_private(EVP_PKEY_ASN1_METHOD *ameth, + int (*priv_decode)(EVP_PKEY *pk, PKCS8_PRIV_KEY_INFO *p8inf), + int (*priv_encode)(PKCS8_PRIV_KEY_INFO *p8, const EVP_PKEY *pk), + int (*priv_print)(BIO *out, const EVP_PKEY *pkey, int indent, + ASN1_PCTX *pctx)); +void EVP_PKEY_asn1_set_param(EVP_PKEY_ASN1_METHOD *ameth, + int (*param_decode)(EVP_PKEY *pkey, + const unsigned char **pder, int derlen), + int (*param_encode)(const EVP_PKEY *pkey, unsigned char **pder), + int (*param_missing)(const EVP_PKEY *pk), + int (*param_copy)(EVP_PKEY *to, const EVP_PKEY *from), + int (*param_cmp)(const EVP_PKEY *a, const EVP_PKEY *b), + int (*param_print)(BIO *out, const EVP_PKEY *pkey, int indent, + ASN1_PCTX *pctx)); + +void EVP_PKEY_asn1_set_free(EVP_PKEY_ASN1_METHOD *ameth, + void (*pkey_free)(EVP_PKEY *pkey)); +void EVP_PKEY_asn1_set_ctrl(EVP_PKEY_ASN1_METHOD *ameth, + int (*pkey_ctrl)(EVP_PKEY *pkey, int op, + long arg1, void *arg2)); + + +#define EVP_PKEY_OP_UNDEFINED 0 +#define EVP_PKEY_OP_PARAMGEN (1<<1) +#define EVP_PKEY_OP_KEYGEN (1<<2) +#define EVP_PKEY_OP_SIGN (1<<3) +#define EVP_PKEY_OP_VERIFY (1<<4) +#define EVP_PKEY_OP_VERIFYRECOVER (1<<5) +#define EVP_PKEY_OP_SIGNCTX (1<<6) +#define EVP_PKEY_OP_VERIFYCTX (1<<7) +#define EVP_PKEY_OP_ENCRYPT (1<<8) +#define EVP_PKEY_OP_DECRYPT (1<<9) +#define EVP_PKEY_OP_DERIVE (1<<10) + +#define EVP_PKEY_OP_TYPE_SIG \ + (EVP_PKEY_OP_SIGN | EVP_PKEY_OP_VERIFY | EVP_PKEY_OP_VERIFYRECOVER \ + | EVP_PKEY_OP_SIGNCTX | EVP_PKEY_OP_VERIFYCTX) + +#define EVP_PKEY_OP_TYPE_CRYPT \ + (EVP_PKEY_OP_ENCRYPT | EVP_PKEY_OP_DECRYPT) + +#define EVP_PKEY_OP_TYPE_NOGEN \ + (EVP_PKEY_OP_SIG | EVP_PKEY_OP_CRYPT | EVP_PKEY_OP_DERIVE) + +#define EVP_PKEY_OP_TYPE_GEN \ + (EVP_PKEY_OP_PARAMGEN | EVP_PKEY_OP_KEYGEN) + +#define EVP_PKEY_CTX_set_signature_md(ctx, md) \ + EVP_PKEY_CTX_ctrl(ctx, -1, EVP_PKEY_OP_TYPE_SIG, \ + EVP_PKEY_CTRL_MD, 0, (void *)md) + +#define EVP_PKEY_CTRL_MD 1 +#define EVP_PKEY_CTRL_PEER_KEY 2 + +#define EVP_PKEY_CTRL_PKCS7_ENCRYPT 3 +#define EVP_PKEY_CTRL_PKCS7_DECRYPT 4 + +#define EVP_PKEY_CTRL_PKCS7_SIGN 5 + +#define EVP_PKEY_CTRL_SET_MAC_KEY 6 + +#define EVP_PKEY_CTRL_DIGESTINIT 7 + +/* Used by GOST key encryption in TLS */ +#define EVP_PKEY_CTRL_SET_IV 8 + +#define EVP_PKEY_CTRL_CMS_ENCRYPT 9 +#define EVP_PKEY_CTRL_CMS_DECRYPT 10 +#define EVP_PKEY_CTRL_CMS_SIGN 11 + +#define EVP_PKEY_ALG_CTRL 0x1000 + + +#define EVP_PKEY_FLAG_AUTOARGLEN 2 + +const EVP_PKEY_METHOD *EVP_PKEY_meth_find(int type); +EVP_PKEY_METHOD* EVP_PKEY_meth_new(int id, int flags); +void EVP_PKEY_meth_free(EVP_PKEY_METHOD *pmeth); +int EVP_PKEY_meth_add0(const EVP_PKEY_METHOD *pmeth); + +EVP_PKEY_CTX *EVP_PKEY_CTX_new(EVP_PKEY *pkey, ENGINE *e); +EVP_PKEY_CTX *EVP_PKEY_CTX_new_id(int id, ENGINE *e); +EVP_PKEY_CTX *EVP_PKEY_CTX_dup(EVP_PKEY_CTX *ctx); +void EVP_PKEY_CTX_free(EVP_PKEY_CTX *ctx); + +int EVP_PKEY_CTX_ctrl(EVP_PKEY_CTX *ctx, int keytype, int optype, + int cmd, int p1, void *p2); +int EVP_PKEY_CTX_ctrl_str(EVP_PKEY_CTX *ctx, const char *type, + const char *value); + +int EVP_PKEY_CTX_get_operation(EVP_PKEY_CTX *ctx); +void EVP_PKEY_CTX_set0_keygen_info(EVP_PKEY_CTX *ctx, int *dat, int datlen); + +EVP_PKEY *EVP_PKEY_new_mac_key(int type, ENGINE *e, + unsigned char *key, int keylen); + +void EVP_PKEY_CTX_set_data(EVP_PKEY_CTX *ctx, void *data); +void *EVP_PKEY_CTX_get_data(EVP_PKEY_CTX *ctx); +EVP_PKEY *EVP_PKEY_CTX_get0_pkey(EVP_PKEY_CTX *ctx); + +EVP_PKEY *EVP_PKEY_CTX_get0_peerkey(EVP_PKEY_CTX *ctx); + +void EVP_PKEY_CTX_set_app_data(EVP_PKEY_CTX *ctx, void *data); +void *EVP_PKEY_CTX_get_app_data(EVP_PKEY_CTX *ctx); + +int EVP_PKEY_sign_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_sign(EVP_PKEY_CTX *ctx, + unsigned char *sig, size_t *siglen, + const unsigned char *tbs, size_t tbslen); +int EVP_PKEY_verify_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_verify(EVP_PKEY_CTX *ctx, + const unsigned char *sig, size_t siglen, + const unsigned char *tbs, size_t tbslen); +int EVP_PKEY_verify_recover_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_verify_recover(EVP_PKEY_CTX *ctx, + unsigned char *rout, size_t *routlen, + const unsigned char *sig, size_t siglen); +int EVP_PKEY_encrypt_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_encrypt(EVP_PKEY_CTX *ctx, + unsigned char *out, size_t *outlen, + const unsigned char *in, size_t inlen); +int EVP_PKEY_decrypt_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_decrypt(EVP_PKEY_CTX *ctx, + unsigned char *out, size_t *outlen, + const unsigned char *in, size_t inlen); + +int EVP_PKEY_derive_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_derive_set_peer(EVP_PKEY_CTX *ctx, EVP_PKEY *peer); +int EVP_PKEY_derive(EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen); + +typedef int EVP_PKEY_gen_cb(EVP_PKEY_CTX *ctx); + +int EVP_PKEY_paramgen_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_paramgen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey); +int EVP_PKEY_keygen_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey); + +void EVP_PKEY_CTX_set_cb(EVP_PKEY_CTX *ctx, EVP_PKEY_gen_cb *cb); +EVP_PKEY_gen_cb *EVP_PKEY_CTX_get_cb(EVP_PKEY_CTX *ctx); + +int EVP_PKEY_CTX_get_keygen_info(EVP_PKEY_CTX *ctx, int idx); + +void EVP_PKEY_meth_set_init(EVP_PKEY_METHOD *pmeth, + int (*init)(EVP_PKEY_CTX *ctx)); + +void EVP_PKEY_meth_set_copy(EVP_PKEY_METHOD *pmeth, + int (*copy)(EVP_PKEY_CTX *dst, EVP_PKEY_CTX *src)); + +void EVP_PKEY_meth_set_cleanup(EVP_PKEY_METHOD *pmeth, + void (*cleanup)(EVP_PKEY_CTX *ctx)); + +void EVP_PKEY_meth_set_paramgen(EVP_PKEY_METHOD *pmeth, + int (*paramgen_init)(EVP_PKEY_CTX *ctx), + int (*paramgen)(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey)); + +void EVP_PKEY_meth_set_keygen(EVP_PKEY_METHOD *pmeth, + int (*keygen_init)(EVP_PKEY_CTX *ctx), + int (*keygen)(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey)); + +void EVP_PKEY_meth_set_sign(EVP_PKEY_METHOD *pmeth, + int (*sign_init)(EVP_PKEY_CTX *ctx), + int (*sign)(EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen, + const unsigned char *tbs, size_t tbslen)); + +void EVP_PKEY_meth_set_verify(EVP_PKEY_METHOD *pmeth, + int (*verify_init)(EVP_PKEY_CTX *ctx), + int (*verify)(EVP_PKEY_CTX *ctx, const unsigned char *sig, size_t siglen, + const unsigned char *tbs, size_t tbslen)); + +void EVP_PKEY_meth_set_verify_recover(EVP_PKEY_METHOD *pmeth, + int (*verify_recover_init)(EVP_PKEY_CTX *ctx), + int (*verify_recover)(EVP_PKEY_CTX *ctx, + unsigned char *sig, size_t *siglen, + const unsigned char *tbs, size_t tbslen)); + +void EVP_PKEY_meth_set_signctx(EVP_PKEY_METHOD *pmeth, + int (*signctx_init)(EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx), + int (*signctx)(EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen, + EVP_MD_CTX *mctx)); + +void EVP_PKEY_meth_set_verifyctx(EVP_PKEY_METHOD *pmeth, + int (*verifyctx_init)(EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx), + int (*verifyctx)(EVP_PKEY_CTX *ctx, const unsigned char *sig,int siglen, + EVP_MD_CTX *mctx)); + +void EVP_PKEY_meth_set_encrypt(EVP_PKEY_METHOD *pmeth, + int (*encrypt_init)(EVP_PKEY_CTX *ctx), + int (*encryptfn)(EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen, + const unsigned char *in, size_t inlen)); + +void EVP_PKEY_meth_set_decrypt(EVP_PKEY_METHOD *pmeth, + int (*decrypt_init)(EVP_PKEY_CTX *ctx), + int (*decrypt)(EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen, + const unsigned char *in, size_t inlen)); + +void EVP_PKEY_meth_set_derive(EVP_PKEY_METHOD *pmeth, + int (*derive_init)(EVP_PKEY_CTX *ctx), + int (*derive)(EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen)); + +void EVP_PKEY_meth_set_ctrl(EVP_PKEY_METHOD *pmeth, + int (*ctrl)(EVP_PKEY_CTX *ctx, int type, int p1, void *p2), + int (*ctrl_str)(EVP_PKEY_CTX *ctx, + const char *type, const char *value)); + +/* BEGIN ERROR CODES */ +/* The following lines are auto generated by the script mkerr.pl. Any changes + * made after this point may be overwritten when the script is next run. + */ +void ERR_load_EVP_strings(void); + +/* Error codes for the EVP functions. */ + +/* Function codes. */ +#define EVP_F_AES_INIT_KEY 133 +#define EVP_F_CAMELLIA_INIT_KEY 159 +#define EVP_F_D2I_PKEY 100 +#define EVP_F_DO_SIGVER_INIT 161 +#define EVP_F_DSAPKEY2PKCS8 134 +#define EVP_F_DSA_PKEY2PKCS8 135 +#define EVP_F_ECDSA_PKEY2PKCS8 129 +#define EVP_F_ECKEY_PKEY2PKCS8 132 +#define EVP_F_EVP_CIPHERINIT_EX 123 +#define EVP_F_EVP_CIPHER_CTX_COPY 163 +#define EVP_F_EVP_CIPHER_CTX_CTRL 124 +#define EVP_F_EVP_CIPHER_CTX_SET_KEY_LENGTH 122 +#define EVP_F_EVP_DECRYPTFINAL_EX 101 +#define EVP_F_EVP_DIGESTINIT_EX 128 +#define EVP_F_EVP_ENCRYPTFINAL_EX 127 +#define EVP_F_EVP_MD_CTX_COPY_EX 110 +#define EVP_F_EVP_MD_SIZE 162 +#define EVP_F_EVP_OPENINIT 102 +#define EVP_F_EVP_PBE_ALG_ADD 115 +#define EVP_F_EVP_PBE_ALG_ADD_TYPE 160 +#define EVP_F_EVP_PBE_CIPHERINIT 116 +#define EVP_F_EVP_PKCS82PKEY 111 +#define EVP_F_EVP_PKCS82PKEY_BROKEN 136 +#define EVP_F_EVP_PKEY2PKCS8_BROKEN 113 +#define EVP_F_EVP_PKEY_COPY_PARAMETERS 103 +#define EVP_F_EVP_PKEY_CTX_CTRL 137 +#define EVP_F_EVP_PKEY_CTX_CTRL_STR 150 +#define EVP_F_EVP_PKEY_CTX_DUP 156 +#define EVP_F_EVP_PKEY_DECRYPT 104 +#define EVP_F_EVP_PKEY_DECRYPT_INIT 138 +#define EVP_F_EVP_PKEY_DECRYPT_OLD 151 +#define EVP_F_EVP_PKEY_DERIVE 153 +#define EVP_F_EVP_PKEY_DERIVE_INIT 154 +#define EVP_F_EVP_PKEY_DERIVE_SET_PEER 155 +#define EVP_F_EVP_PKEY_ENCRYPT 105 +#define EVP_F_EVP_PKEY_ENCRYPT_INIT 139 +#define EVP_F_EVP_PKEY_ENCRYPT_OLD 152 +#define EVP_F_EVP_PKEY_GET1_DH 119 +#define EVP_F_EVP_PKEY_GET1_DSA 120 +#define EVP_F_EVP_PKEY_GET1_ECDSA 130 +#define EVP_F_EVP_PKEY_GET1_EC_KEY 131 +#define EVP_F_EVP_PKEY_GET1_RSA 121 +#define EVP_F_EVP_PKEY_KEYGEN 146 +#define EVP_F_EVP_PKEY_KEYGEN_INIT 147 +#define EVP_F_EVP_PKEY_NEW 106 +#define EVP_F_EVP_PKEY_PARAMGEN 148 +#define EVP_F_EVP_PKEY_PARAMGEN_INIT 149 +#define EVP_F_EVP_PKEY_SIGN 140 +#define EVP_F_EVP_PKEY_SIGN_INIT 141 +#define EVP_F_EVP_PKEY_VERIFY 142 +#define EVP_F_EVP_PKEY_VERIFY_INIT 143 +#define EVP_F_EVP_PKEY_VERIFY_RECOVER 144 +#define EVP_F_EVP_PKEY_VERIFY_RECOVER_INIT 145 +#define EVP_F_EVP_RIJNDAEL 126 +#define EVP_F_EVP_SIGNFINAL 107 +#define EVP_F_EVP_VERIFYFINAL 108 +#define EVP_F_INT_CTX_NEW 157 +#define EVP_F_PKCS5_PBE_KEYIVGEN 117 +#define EVP_F_PKCS5_V2_PBE_KEYIVGEN 118 +#define EVP_F_PKCS8_SET_BROKEN 112 +#define EVP_F_PKEY_SET_TYPE 158 +#define EVP_F_RC2_MAGIC_TO_METH 109 +#define EVP_F_RC5_CTRL 125 + +/* Reason codes. */ +#define EVP_R_AES_KEY_SETUP_FAILED 143 +#define EVP_R_ASN1_LIB 140 +#define EVP_R_BAD_BLOCK_LENGTH 136 +#define EVP_R_BAD_DECRYPT 100 +#define EVP_R_BAD_KEY_LENGTH 137 +#define EVP_R_BN_DECODE_ERROR 112 +#define EVP_R_BN_PUBKEY_ERROR 113 +#define EVP_R_BUFFER_TOO_SMALL 155 +#define EVP_R_CAMELLIA_KEY_SETUP_FAILED 157 +#define EVP_R_CIPHER_PARAMETER_ERROR 122 +#define EVP_R_COMMAND_NOT_SUPPORTED 147 +#define EVP_R_CTRL_NOT_IMPLEMENTED 132 +#define EVP_R_CTRL_OPERATION_NOT_IMPLEMENTED 133 +#define EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH 138 +#define EVP_R_DECODE_ERROR 114 +#define EVP_R_DIFFERENT_KEY_TYPES 101 +#define EVP_R_DIFFERENT_PARAMETERS 153 +#define EVP_R_ENCODE_ERROR 115 +#define EVP_R_EVP_PBE_CIPHERINIT_ERROR 119 +#define EVP_R_EXPECTING_AN_RSA_KEY 127 +#define EVP_R_EXPECTING_A_DH_KEY 128 +#define EVP_R_EXPECTING_A_DSA_KEY 129 +#define EVP_R_EXPECTING_A_ECDSA_KEY 141 +#define EVP_R_EXPECTING_A_EC_KEY 142 +#define EVP_R_INITIALIZATION_ERROR 134 +#define EVP_R_INPUT_NOT_INITIALIZED 111 +#define EVP_R_INVALID_DIGEST 152 +#define EVP_R_INVALID_KEY_LENGTH 130 +#define EVP_R_INVALID_OPERATION 148 +#define EVP_R_IV_TOO_LARGE 102 +#define EVP_R_KEYGEN_FAILURE 120 +#define EVP_R_MESSAGE_DIGEST_IS_NULL 159 +#define EVP_R_METHOD_NOT_SUPPORTED 144 +#define EVP_R_MISSING_PARAMETERS 103 +#define EVP_R_NO_CIPHER_SET 131 +#define EVP_R_NO_DEFAULT_DIGEST 158 +#define EVP_R_NO_DIGEST_SET 139 +#define EVP_R_NO_DSA_PARAMETERS 116 +#define EVP_R_NO_KEY_SET 154 +#define EVP_R_NO_OPERATION_SET 149 +#define EVP_R_NO_SIGN_FUNCTION_CONFIGURED 104 +#define EVP_R_NO_VERIFY_FUNCTION_CONFIGURED 105 +#define EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE 150 +#define EVP_R_OPERATON_NOT_INITIALIZED 151 +#define EVP_R_PKCS8_UNKNOWN_BROKEN_TYPE 117 +#define EVP_R_PRIVATE_KEY_DECODE_ERROR 145 +#define EVP_R_PRIVATE_KEY_ENCODE_ERROR 146 +#define EVP_R_PUBLIC_KEY_NOT_RSA 106 +#define EVP_R_UNKNOWN_CIPHER 160 +#define EVP_R_UNKNOWN_DIGEST 161 +#define EVP_R_UNKNOWN_PBE_ALGORITHM 121 +#define EVP_R_UNSUPORTED_NUMBER_OF_ROUNDS 135 +#define EVP_R_UNSUPPORTED_ALGORITHM 156 +#define EVP_R_UNSUPPORTED_CIPHER 107 +#define EVP_R_UNSUPPORTED_KEYLENGTH 123 +#define EVP_R_UNSUPPORTED_KEY_DERIVATION_FUNCTION 124 +#define EVP_R_UNSUPPORTED_KEY_SIZE 108 +#define EVP_R_UNSUPPORTED_PRF 125 +#define EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM 118 +#define EVP_R_UNSUPPORTED_SALT_TYPE 126 +#define EVP_R_WRONG_FINAL_BLOCK_LENGTH 109 +#define EVP_R_WRONG_PUBLIC_KEY_TYPE 110 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/extra_lib/include/openssl/hmac.h b/extra_lib/include/openssl/hmac.h new file mode 100644 index 0000000..1be0022 --- /dev/null +++ b/extra_lib/include/openssl/hmac.h @@ -0,0 +1,110 @@ +/* crypto/hmac/hmac.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 AUTHOR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ +#ifndef HEADER_HMAC_H +#define HEADER_HMAC_H + +#include + +#ifdef OPENSSL_NO_HMAC +#error HMAC is disabled. +#endif + +#include + +#define HMAC_MAX_MD_CBLOCK 128 /* largest known is SHA512 */ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct hmac_ctx_st + { + const EVP_MD *md; + EVP_MD_CTX md_ctx; + EVP_MD_CTX i_ctx; + EVP_MD_CTX o_ctx; + unsigned int key_length; + unsigned char key[HMAC_MAX_MD_CBLOCK]; + } HMAC_CTX; + +#define HMAC_size(e) (EVP_MD_size((e)->md)) + + +void HMAC_CTX_init(HMAC_CTX *ctx); +void HMAC_CTX_cleanup(HMAC_CTX *ctx); + +#define HMAC_cleanup(ctx) HMAC_CTX_cleanup(ctx) /* deprecated */ + +int HMAC_Init(HMAC_CTX *ctx, const void *key, int len, + const EVP_MD *md); /* deprecated */ +int HMAC_Init_ex(HMAC_CTX *ctx, const void *key, int len, + const EVP_MD *md, ENGINE *impl); +int HMAC_Update(HMAC_CTX *ctx, const unsigned char *data, size_t len); +int HMAC_Final(HMAC_CTX *ctx, unsigned char *md, unsigned int *len); +unsigned char *HMAC(const EVP_MD *evp_md, const void *key, int key_len, + const unsigned char *d, size_t n, unsigned char *md, + unsigned int *md_len); +int HMAC_CTX_copy(HMAC_CTX *dctx, HMAC_CTX *sctx); + +void HMAC_CTX_set_flags(HMAC_CTX *ctx, unsigned long flags); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/extra_lib/include/openssl/kssl.h b/extra_lib/include/openssl/kssl.h new file mode 100644 index 0000000..a3d20e1 --- /dev/null +++ b/extra_lib/include/openssl/kssl.h @@ -0,0 +1,179 @@ +/* ssl/kssl.h -*- mode: C; c-file-style: "eay" -*- */ +/* Written by Vern Staats for the OpenSSL project 2000. + * project 2000. + */ +/* ==================================================================== + * Copyright (c) 2000 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * licensing@OpenSSL.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED 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 OpenSSL PROJECT OR + * ITS 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. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ + +/* +** 19990701 VRS Started. +*/ + +#ifndef KSSL_H +#define KSSL_H + +#include + +#ifndef OPENSSL_NO_KRB5 + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* +** Depending on which KRB5 implementation used, some types from +** the other may be missing. Resolve that here and now +*/ +#ifdef KRB5_HEIMDAL +typedef unsigned char krb5_octet; +#define FAR +#else + +#ifndef FAR +#define FAR +#endif + +#endif + +/* Uncomment this to debug kssl problems or +** to trace usage of the Kerberos session key +** +** #define KSSL_DEBUG +*/ + +#ifndef KRB5SVC +#define KRB5SVC "host" +#endif + +#ifndef KRB5KEYTAB +#define KRB5KEYTAB "/etc/krb5.keytab" +#endif + +#ifndef KRB5SENDAUTH +#define KRB5SENDAUTH 1 +#endif + +#ifndef KRB5CHECKAUTH +#define KRB5CHECKAUTH 1 +#endif + +#ifndef KSSL_CLOCKSKEW +#define KSSL_CLOCKSKEW 300; +#endif + +#define KSSL_ERR_MAX 255 +typedef struct kssl_err_st { + int reason; + char text[KSSL_ERR_MAX+1]; + } KSSL_ERR; + + +/* Context for passing +** (1) Kerberos session key to SSL, and +** (2) Config data between application and SSL lib +*/ +typedef struct kssl_ctx_st + { + /* used by: disposition: */ + char *service_name; /* C,S default ok (kssl) */ + char *service_host; /* C input, REQUIRED */ + char *client_princ; /* S output from krb5 ticket */ + char *keytab_file; /* S NULL (/etc/krb5.keytab) */ + char *cred_cache; /* C NULL (default) */ + krb5_enctype enctype; + int length; + krb5_octet FAR *key; + } KSSL_CTX; + +#define KSSL_CLIENT 1 +#define KSSL_SERVER 2 +#define KSSL_SERVICE 3 +#define KSSL_KEYTAB 4 + +#define KSSL_CTX_OK 0 +#define KSSL_CTX_ERR 1 +#define KSSL_NOMEM 2 + +/* Public (for use by applications that use OpenSSL with Kerberos 5 support */ +krb5_error_code kssl_ctx_setstring(KSSL_CTX *kssl_ctx, int which, char *text); +KSSL_CTX *kssl_ctx_new(void); +KSSL_CTX *kssl_ctx_free(KSSL_CTX *kssl_ctx); +void kssl_ctx_show(KSSL_CTX *kssl_ctx); +krb5_error_code kssl_ctx_setprinc(KSSL_CTX *kssl_ctx, int which, + krb5_data *realm, krb5_data *entity, int nentities); +krb5_error_code kssl_cget_tkt(KSSL_CTX *kssl_ctx, krb5_data **enc_tktp, + krb5_data *authenp, KSSL_ERR *kssl_err); +krb5_error_code kssl_sget_tkt(KSSL_CTX *kssl_ctx, krb5_data *indata, + krb5_ticket_times *ttimes, KSSL_ERR *kssl_err); +krb5_error_code kssl_ctx_setkey(KSSL_CTX *kssl_ctx, krb5_keyblock *session); +void kssl_err_set(KSSL_ERR *kssl_err, int reason, char *text); +void kssl_krb5_free_data_contents(krb5_context context, krb5_data *data); +krb5_error_code kssl_build_principal_2(krb5_context context, + krb5_principal *princ, int rlen, const char *realm, + int slen, const char *svc, int hlen, const char *host); +krb5_error_code kssl_validate_times(krb5_timestamp atime, + krb5_ticket_times *ttimes); +krb5_error_code kssl_check_authent(KSSL_CTX *kssl_ctx, krb5_data *authentp, + krb5_timestamp *atimep, KSSL_ERR *kssl_err); +unsigned char *kssl_skip_confound(krb5_enctype enctype, unsigned char *authn); + +#ifdef __cplusplus +} +#endif +#endif /* OPENSSL_NO_KRB5 */ +#endif /* KSSL_H */ diff --git a/extra_lib/include/openssl/lhash.h b/extra_lib/include/openssl/lhash.h new file mode 100644 index 0000000..e7d8763 --- /dev/null +++ b/extra_lib/include/openssl/lhash.h @@ -0,0 +1,241 @@ +/* crypto/lhash/lhash.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 AUTHOR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +/* Header for dynamic hash table routines + * Author - Eric Young + */ + +#ifndef HEADER_LHASH_H +#define HEADER_LHASH_H + +#include +#ifndef OPENSSL_NO_FP_API +#include +#endif + +#ifndef OPENSSL_NO_BIO +#include +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct lhash_node_st + { + void *data; + struct lhash_node_st *next; +#ifndef OPENSSL_NO_HASH_COMP + unsigned long hash; +#endif + } LHASH_NODE; + +typedef int (*LHASH_COMP_FN_TYPE)(const void *, const void *); +typedef unsigned long (*LHASH_HASH_FN_TYPE)(const void *); +typedef void (*LHASH_DOALL_FN_TYPE)(void *); +typedef void (*LHASH_DOALL_ARG_FN_TYPE)(void *, void *); + +/* Macros for declaring and implementing type-safe wrappers for LHASH callbacks. + * This way, callbacks can be provided to LHASH structures without function + * pointer casting and the macro-defined callbacks provide per-variable casting + * before deferring to the underlying type-specific callbacks. NB: It is + * possible to place a "static" in front of both the DECLARE and IMPLEMENT + * macros if the functions are strictly internal. */ + +/* First: "hash" functions */ +#define DECLARE_LHASH_HASH_FN(name, o_type) \ + unsigned long name##_LHASH_HASH(const void *); +#define IMPLEMENT_LHASH_HASH_FN(name, o_type) \ + unsigned long name##_LHASH_HASH(const void *arg) { \ + const o_type *a = arg; \ + return name##_hash(a); } +#define LHASH_HASH_FN(name) name##_LHASH_HASH + +/* Second: "compare" functions */ +#define DECLARE_LHASH_COMP_FN(name, o_type) \ + int name##_LHASH_COMP(const void *, const void *); +#define IMPLEMENT_LHASH_COMP_FN(name, o_type) \ + int name##_LHASH_COMP(const void *arg1, const void *arg2) { \ + const o_type *a = arg1; \ + const o_type *b = arg2; \ + return name##_cmp(a,b); } +#define LHASH_COMP_FN(name) name##_LHASH_COMP + +/* Third: "doall" functions */ +#define DECLARE_LHASH_DOALL_FN(name, o_type) \ + void name##_LHASH_DOALL(void *); +#define IMPLEMENT_LHASH_DOALL_FN(name, o_type) \ + void name##_LHASH_DOALL(void *arg) { \ + o_type *a = arg; \ + name##_doall(a); } +#define LHASH_DOALL_FN(name) name##_LHASH_DOALL + +/* Fourth: "doall_arg" functions */ +#define DECLARE_LHASH_DOALL_ARG_FN(name, o_type, a_type) \ + void name##_LHASH_DOALL_ARG(void *, void *); +#define IMPLEMENT_LHASH_DOALL_ARG_FN(name, o_type, a_type) \ + void name##_LHASH_DOALL_ARG(void *arg1, void *arg2) { \ + o_type *a = arg1; \ + a_type *b = arg2; \ + name##_doall_arg(a, b); } +#define LHASH_DOALL_ARG_FN(name) name##_LHASH_DOALL_ARG + +typedef struct lhash_st + { + LHASH_NODE **b; + LHASH_COMP_FN_TYPE comp; + LHASH_HASH_FN_TYPE hash; + unsigned int num_nodes; + unsigned int num_alloc_nodes; + unsigned int p; + unsigned int pmax; + unsigned long up_load; /* load times 256 */ + unsigned long down_load; /* load times 256 */ + unsigned long num_items; + + unsigned long num_expands; + unsigned long num_expand_reallocs; + unsigned long num_contracts; + unsigned long num_contract_reallocs; + unsigned long num_hash_calls; + unsigned long num_comp_calls; + unsigned long num_insert; + unsigned long num_replace; + unsigned long num_delete; + unsigned long num_no_delete; + unsigned long num_retrieve; + unsigned long num_retrieve_miss; + unsigned long num_hash_comps; + + int error; + } _LHASH; /* Do not use _LHASH directly, use LHASH_OF + * and friends */ + +#define LH_LOAD_MULT 256 + +/* Indicates a malloc() error in the last call, this is only bad + * in lh_insert(). */ +#define lh_error(lh) ((lh)->error) + +_LHASH *lh_new(LHASH_HASH_FN_TYPE h, LHASH_COMP_FN_TYPE c); +void lh_free(_LHASH *lh); +void *lh_insert(_LHASH *lh, void *data); +void *lh_delete(_LHASH *lh, const void *data); +void *lh_retrieve(_LHASH *lh, const void *data); +void lh_doall(_LHASH *lh, LHASH_DOALL_FN_TYPE func); +void lh_doall_arg(_LHASH *lh, LHASH_DOALL_ARG_FN_TYPE func, void *arg); +unsigned long lh_strhash(const char *c); +unsigned long lh_num_items(const _LHASH *lh); + +#ifndef OPENSSL_NO_FP_API +void lh_stats(const _LHASH *lh, FILE *out); +void lh_node_stats(const _LHASH *lh, FILE *out); +void lh_node_usage_stats(const _LHASH *lh, FILE *out); +#endif + +#ifndef OPENSSL_NO_BIO +void lh_stats_bio(const _LHASH *lh, BIO *out); +void lh_node_stats_bio(const _LHASH *lh, BIO *out); +void lh_node_usage_stats_bio(const _LHASH *lh, BIO *out); +#endif + +/* Type checking... */ + +#define LHASH_OF(type) struct lhash_st_##type + +#define DECLARE_LHASH_OF(type) LHASH_OF(type) { int dummy; } + +#define CHECKED_LHASH_OF(type,lh) \ + ((_LHASH *)CHECKED_PTR_OF(LHASH_OF(type),lh)) + +/* Define wrapper functions. */ +#define LHM_lh_new(type, name) \ + ((LHASH_OF(type) *)lh_new(LHASH_HASH_FN(name), LHASH_COMP_FN(name))) +#define LHM_lh_error(type, lh) \ + lh_error(CHECKED_LHASH_OF(type,lh)) +#define LHM_lh_insert(type, lh, inst) \ + ((type *)lh_insert(CHECKED_LHASH_OF(type, lh), \ + CHECKED_PTR_OF(type, inst))) +#define LHM_lh_retrieve(type, lh, inst) \ + ((type *)lh_retrieve(CHECKED_LHASH_OF(type, lh), \ + CHECKED_PTR_OF(type, inst))) +#define LHM_lh_delete(type, lh, inst) \ + ((type *)lh_delete(CHECKED_LHASH_OF(type, lh), \ + CHECKED_PTR_OF(type, inst))) +#define LHM_lh_doall(type, lh,fn) lh_doall(CHECKED_LHASH_OF(type, lh), fn) +#define LHM_lh_doall_arg(type, lh, fn, arg_type, arg) \ + lh_doall_arg(CHECKED_LHASH_OF(type, lh), fn, CHECKED_PTR_OF(arg_type, arg)) +#define LHM_lh_num_items(type, lh) lh_num_items(CHECKED_LHASH_OF(type, lh)) +#define LHM_lh_down_load(type, lh) (CHECKED_LHASH_OF(type, lh)->down_load) +#define LHM_lh_node_stats_bio(type, lh, out) \ + lh_node_stats_bio(CHECKED_LHASH_OF(type, lh), out) +#define LHM_lh_node_usage_stats_bio(type, lh, out) \ + lh_node_usage_stats_bio(CHECKED_LHASH_OF(type, lh), out) +#define LHM_lh_stats_bio(type, lh, out) \ + lh_stats_bio(CHECKED_LHASH_OF(type, lh), out) +#define LHM_lh_free(type, lh) lh_free(CHECKED_LHASH_OF(type, lh)) + +DECLARE_LHASH_OF(OPENSSL_STRING); +DECLARE_LHASH_OF(OPENSSL_CSTRING); + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/extra_lib/include/openssl/obj_mac.h b/extra_lib/include/openssl/obj_mac.h new file mode 100644 index 0000000..282f11a --- /dev/null +++ b/extra_lib/include/openssl/obj_mac.h @@ -0,0 +1,3914 @@ +/* crypto/objects/obj_mac.h */ + +/* THIS FILE IS GENERATED FROM objects.txt by objects.pl via the + * following command: + * perl objects.pl objects.txt obj_mac.num obj_mac.h + */ + +/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 AUTHOR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#define SN_undef "UNDEF" +#define LN_undef "undefined" +#define NID_undef 0 +#define OBJ_undef 0L + +#define SN_itu_t "ITU-T" +#define LN_itu_t "itu-t" +#define NID_itu_t 645 +#define OBJ_itu_t 0L + +#define NID_ccitt 404 +#define OBJ_ccitt OBJ_itu_t + +#define SN_iso "ISO" +#define LN_iso "iso" +#define NID_iso 181 +#define OBJ_iso 1L + +#define SN_joint_iso_itu_t "JOINT-ISO-ITU-T" +#define LN_joint_iso_itu_t "joint-iso-itu-t" +#define NID_joint_iso_itu_t 646 +#define OBJ_joint_iso_itu_t 2L + +#define NID_joint_iso_ccitt 393 +#define OBJ_joint_iso_ccitt OBJ_joint_iso_itu_t + +#define SN_member_body "member-body" +#define LN_member_body "ISO Member Body" +#define NID_member_body 182 +#define OBJ_member_body OBJ_iso,2L + +#define SN_identified_organization "identified-organization" +#define NID_identified_organization 676 +#define OBJ_identified_organization OBJ_iso,3L + +#define SN_hmac_md5 "HMAC-MD5" +#define LN_hmac_md5 "hmac-md5" +#define NID_hmac_md5 780 +#define OBJ_hmac_md5 OBJ_identified_organization,6L,1L,5L,5L,8L,1L,1L + +#define SN_hmac_sha1 "HMAC-SHA1" +#define LN_hmac_sha1 "hmac-sha1" +#define NID_hmac_sha1 781 +#define OBJ_hmac_sha1 OBJ_identified_organization,6L,1L,5L,5L,8L,1L,2L + +#define SN_certicom_arc "certicom-arc" +#define NID_certicom_arc 677 +#define OBJ_certicom_arc OBJ_identified_organization,132L + +#define SN_international_organizations "international-organizations" +#define LN_international_organizations "International Organizations" +#define NID_international_organizations 647 +#define OBJ_international_organizations OBJ_joint_iso_itu_t,23L + +#define SN_wap "wap" +#define NID_wap 678 +#define OBJ_wap OBJ_international_organizations,43L + +#define SN_wap_wsg "wap-wsg" +#define NID_wap_wsg 679 +#define OBJ_wap_wsg OBJ_wap,1L + +#define SN_selected_attribute_types "selected-attribute-types" +#define LN_selected_attribute_types "Selected Attribute Types" +#define NID_selected_attribute_types 394 +#define OBJ_selected_attribute_types OBJ_joint_iso_itu_t,5L,1L,5L + +#define SN_clearance "clearance" +#define NID_clearance 395 +#define OBJ_clearance OBJ_selected_attribute_types,55L + +#define SN_ISO_US "ISO-US" +#define LN_ISO_US "ISO US Member Body" +#define NID_ISO_US 183 +#define OBJ_ISO_US OBJ_member_body,840L + +#define SN_X9_57 "X9-57" +#define LN_X9_57 "X9.57" +#define NID_X9_57 184 +#define OBJ_X9_57 OBJ_ISO_US,10040L + +#define SN_X9cm "X9cm" +#define LN_X9cm "X9.57 CM ?" +#define NID_X9cm 185 +#define OBJ_X9cm OBJ_X9_57,4L + +#define SN_dsa "DSA" +#define LN_dsa "dsaEncryption" +#define NID_dsa 116 +#define OBJ_dsa OBJ_X9cm,1L + +#define SN_dsaWithSHA1 "DSA-SHA1" +#define LN_dsaWithSHA1 "dsaWithSHA1" +#define NID_dsaWithSHA1 113 +#define OBJ_dsaWithSHA1 OBJ_X9cm,3L + +#define SN_ansi_X9_62 "ansi-X9-62" +#define LN_ansi_X9_62 "ANSI X9.62" +#define NID_ansi_X9_62 405 +#define OBJ_ansi_X9_62 OBJ_ISO_US,10045L + +#define OBJ_X9_62_id_fieldType OBJ_ansi_X9_62,1L + +#define SN_X9_62_prime_field "prime-field" +#define NID_X9_62_prime_field 406 +#define OBJ_X9_62_prime_field OBJ_X9_62_id_fieldType,1L + +#define SN_X9_62_characteristic_two_field "characteristic-two-field" +#define NID_X9_62_characteristic_two_field 407 +#define OBJ_X9_62_characteristic_two_field OBJ_X9_62_id_fieldType,2L + +#define SN_X9_62_id_characteristic_two_basis "id-characteristic-two-basis" +#define NID_X9_62_id_characteristic_two_basis 680 +#define OBJ_X9_62_id_characteristic_two_basis OBJ_X9_62_characteristic_two_field,3L + +#define SN_X9_62_onBasis "onBasis" +#define NID_X9_62_onBasis 681 +#define OBJ_X9_62_onBasis OBJ_X9_62_id_characteristic_two_basis,1L + +#define SN_X9_62_tpBasis "tpBasis" +#define NID_X9_62_tpBasis 682 +#define OBJ_X9_62_tpBasis OBJ_X9_62_id_characteristic_two_basis,2L + +#define SN_X9_62_ppBasis "ppBasis" +#define NID_X9_62_ppBasis 683 +#define OBJ_X9_62_ppBasis OBJ_X9_62_id_characteristic_two_basis,3L + +#define OBJ_X9_62_id_publicKeyType OBJ_ansi_X9_62,2L + +#define SN_X9_62_id_ecPublicKey "id-ecPublicKey" +#define NID_X9_62_id_ecPublicKey 408 +#define OBJ_X9_62_id_ecPublicKey OBJ_X9_62_id_publicKeyType,1L + +#define OBJ_X9_62_ellipticCurve OBJ_ansi_X9_62,3L + +#define OBJ_X9_62_c_TwoCurve OBJ_X9_62_ellipticCurve,0L + +#define SN_X9_62_c2pnb163v1 "c2pnb163v1" +#define NID_X9_62_c2pnb163v1 684 +#define OBJ_X9_62_c2pnb163v1 OBJ_X9_62_c_TwoCurve,1L + +#define SN_X9_62_c2pnb163v2 "c2pnb163v2" +#define NID_X9_62_c2pnb163v2 685 +#define OBJ_X9_62_c2pnb163v2 OBJ_X9_62_c_TwoCurve,2L + +#define SN_X9_62_c2pnb163v3 "c2pnb163v3" +#define NID_X9_62_c2pnb163v3 686 +#define OBJ_X9_62_c2pnb163v3 OBJ_X9_62_c_TwoCurve,3L + +#define SN_X9_62_c2pnb176v1 "c2pnb176v1" +#define NID_X9_62_c2pnb176v1 687 +#define OBJ_X9_62_c2pnb176v1 OBJ_X9_62_c_TwoCurve,4L + +#define SN_X9_62_c2tnb191v1 "c2tnb191v1" +#define NID_X9_62_c2tnb191v1 688 +#define OBJ_X9_62_c2tnb191v1 OBJ_X9_62_c_TwoCurve,5L + +#define SN_X9_62_c2tnb191v2 "c2tnb191v2" +#define NID_X9_62_c2tnb191v2 689 +#define OBJ_X9_62_c2tnb191v2 OBJ_X9_62_c_TwoCurve,6L + +#define SN_X9_62_c2tnb191v3 "c2tnb191v3" +#define NID_X9_62_c2tnb191v3 690 +#define OBJ_X9_62_c2tnb191v3 OBJ_X9_62_c_TwoCurve,7L + +#define SN_X9_62_c2onb191v4 "c2onb191v4" +#define NID_X9_62_c2onb191v4 691 +#define OBJ_X9_62_c2onb191v4 OBJ_X9_62_c_TwoCurve,8L + +#define SN_X9_62_c2onb191v5 "c2onb191v5" +#define NID_X9_62_c2onb191v5 692 +#define OBJ_X9_62_c2onb191v5 OBJ_X9_62_c_TwoCurve,9L + +#define SN_X9_62_c2pnb208w1 "c2pnb208w1" +#define NID_X9_62_c2pnb208w1 693 +#define OBJ_X9_62_c2pnb208w1 OBJ_X9_62_c_TwoCurve,10L + +#define SN_X9_62_c2tnb239v1 "c2tnb239v1" +#define NID_X9_62_c2tnb239v1 694 +#define OBJ_X9_62_c2tnb239v1 OBJ_X9_62_c_TwoCurve,11L + +#define SN_X9_62_c2tnb239v2 "c2tnb239v2" +#define NID_X9_62_c2tnb239v2 695 +#define OBJ_X9_62_c2tnb239v2 OBJ_X9_62_c_TwoCurve,12L + +#define SN_X9_62_c2tnb239v3 "c2tnb239v3" +#define NID_X9_62_c2tnb239v3 696 +#define OBJ_X9_62_c2tnb239v3 OBJ_X9_62_c_TwoCurve,13L + +#define SN_X9_62_c2onb239v4 "c2onb239v4" +#define NID_X9_62_c2onb239v4 697 +#define OBJ_X9_62_c2onb239v4 OBJ_X9_62_c_TwoCurve,14L + +#define SN_X9_62_c2onb239v5 "c2onb239v5" +#define NID_X9_62_c2onb239v5 698 +#define OBJ_X9_62_c2onb239v5 OBJ_X9_62_c_TwoCurve,15L + +#define SN_X9_62_c2pnb272w1 "c2pnb272w1" +#define NID_X9_62_c2pnb272w1 699 +#define OBJ_X9_62_c2pnb272w1 OBJ_X9_62_c_TwoCurve,16L + +#define SN_X9_62_c2pnb304w1 "c2pnb304w1" +#define NID_X9_62_c2pnb304w1 700 +#define OBJ_X9_62_c2pnb304w1 OBJ_X9_62_c_TwoCurve,17L + +#define SN_X9_62_c2tnb359v1 "c2tnb359v1" +#define NID_X9_62_c2tnb359v1 701 +#define OBJ_X9_62_c2tnb359v1 OBJ_X9_62_c_TwoCurve,18L + +#define SN_X9_62_c2pnb368w1 "c2pnb368w1" +#define NID_X9_62_c2pnb368w1 702 +#define OBJ_X9_62_c2pnb368w1 OBJ_X9_62_c_TwoCurve,19L + +#define SN_X9_62_c2tnb431r1 "c2tnb431r1" +#define NID_X9_62_c2tnb431r1 703 +#define OBJ_X9_62_c2tnb431r1 OBJ_X9_62_c_TwoCurve,20L + +#define OBJ_X9_62_primeCurve OBJ_X9_62_ellipticCurve,1L + +#define SN_X9_62_prime192v1 "prime192v1" +#define NID_X9_62_prime192v1 409 +#define OBJ_X9_62_prime192v1 OBJ_X9_62_primeCurve,1L + +#define SN_X9_62_prime192v2 "prime192v2" +#define NID_X9_62_prime192v2 410 +#define OBJ_X9_62_prime192v2 OBJ_X9_62_primeCurve,2L + +#define SN_X9_62_prime192v3 "prime192v3" +#define NID_X9_62_prime192v3 411 +#define OBJ_X9_62_prime192v3 OBJ_X9_62_primeCurve,3L + +#define SN_X9_62_prime239v1 "prime239v1" +#define NID_X9_62_prime239v1 412 +#define OBJ_X9_62_prime239v1 OBJ_X9_62_primeCurve,4L + +#define SN_X9_62_prime239v2 "prime239v2" +#define NID_X9_62_prime239v2 413 +#define OBJ_X9_62_prime239v2 OBJ_X9_62_primeCurve,5L + +#define SN_X9_62_prime239v3 "prime239v3" +#define NID_X9_62_prime239v3 414 +#define OBJ_X9_62_prime239v3 OBJ_X9_62_primeCurve,6L + +#define SN_X9_62_prime256v1 "prime256v1" +#define NID_X9_62_prime256v1 415 +#define OBJ_X9_62_prime256v1 OBJ_X9_62_primeCurve,7L + +#define OBJ_X9_62_id_ecSigType OBJ_ansi_X9_62,4L + +#define SN_ecdsa_with_SHA1 "ecdsa-with-SHA1" +#define NID_ecdsa_with_SHA1 416 +#define OBJ_ecdsa_with_SHA1 OBJ_X9_62_id_ecSigType,1L + +#define SN_ecdsa_with_Recommended "ecdsa-with-Recommended" +#define NID_ecdsa_with_Recommended 791 +#define OBJ_ecdsa_with_Recommended OBJ_X9_62_id_ecSigType,2L + +#define SN_ecdsa_with_Specified "ecdsa-with-Specified" +#define NID_ecdsa_with_Specified 792 +#define OBJ_ecdsa_with_Specified OBJ_X9_62_id_ecSigType,3L + +#define SN_ecdsa_with_SHA224 "ecdsa-with-SHA224" +#define NID_ecdsa_with_SHA224 793 +#define OBJ_ecdsa_with_SHA224 OBJ_ecdsa_with_Specified,1L + +#define SN_ecdsa_with_SHA256 "ecdsa-with-SHA256" +#define NID_ecdsa_with_SHA256 794 +#define OBJ_ecdsa_with_SHA256 OBJ_ecdsa_with_Specified,2L + +#define SN_ecdsa_with_SHA384 "ecdsa-with-SHA384" +#define NID_ecdsa_with_SHA384 795 +#define OBJ_ecdsa_with_SHA384 OBJ_ecdsa_with_Specified,3L + +#define SN_ecdsa_with_SHA512 "ecdsa-with-SHA512" +#define NID_ecdsa_with_SHA512 796 +#define OBJ_ecdsa_with_SHA512 OBJ_ecdsa_with_Specified,4L + +#define OBJ_secg_ellipticCurve OBJ_certicom_arc,0L + +#define SN_secp112r1 "secp112r1" +#define NID_secp112r1 704 +#define OBJ_secp112r1 OBJ_secg_ellipticCurve,6L + +#define SN_secp112r2 "secp112r2" +#define NID_secp112r2 705 +#define OBJ_secp112r2 OBJ_secg_ellipticCurve,7L + +#define SN_secp128r1 "secp128r1" +#define NID_secp128r1 706 +#define OBJ_secp128r1 OBJ_secg_ellipticCurve,28L + +#define SN_secp128r2 "secp128r2" +#define NID_secp128r2 707 +#define OBJ_secp128r2 OBJ_secg_ellipticCurve,29L + +#define SN_secp160k1 "secp160k1" +#define NID_secp160k1 708 +#define OBJ_secp160k1 OBJ_secg_ellipticCurve,9L + +#define SN_secp160r1 "secp160r1" +#define NID_secp160r1 709 +#define OBJ_secp160r1 OBJ_secg_ellipticCurve,8L + +#define SN_secp160r2 "secp160r2" +#define NID_secp160r2 710 +#define OBJ_secp160r2 OBJ_secg_ellipticCurve,30L + +#define SN_secp192k1 "secp192k1" +#define NID_secp192k1 711 +#define OBJ_secp192k1 OBJ_secg_ellipticCurve,31L + +#define SN_secp224k1 "secp224k1" +#define NID_secp224k1 712 +#define OBJ_secp224k1 OBJ_secg_ellipticCurve,32L + +#define SN_secp224r1 "secp224r1" +#define NID_secp224r1 713 +#define OBJ_secp224r1 OBJ_secg_ellipticCurve,33L + +#define SN_secp256k1 "secp256k1" +#define NID_secp256k1 714 +#define OBJ_secp256k1 OBJ_secg_ellipticCurve,10L + +#define SN_secp384r1 "secp384r1" +#define NID_secp384r1 715 +#define OBJ_secp384r1 OBJ_secg_ellipticCurve,34L + +#define SN_secp521r1 "secp521r1" +#define NID_secp521r1 716 +#define OBJ_secp521r1 OBJ_secg_ellipticCurve,35L + +#define SN_sect113r1 "sect113r1" +#define NID_sect113r1 717 +#define OBJ_sect113r1 OBJ_secg_ellipticCurve,4L + +#define SN_sect113r2 "sect113r2" +#define NID_sect113r2 718 +#define OBJ_sect113r2 OBJ_secg_ellipticCurve,5L + +#define SN_sect131r1 "sect131r1" +#define NID_sect131r1 719 +#define OBJ_sect131r1 OBJ_secg_ellipticCurve,22L + +#define SN_sect131r2 "sect131r2" +#define NID_sect131r2 720 +#define OBJ_sect131r2 OBJ_secg_ellipticCurve,23L + +#define SN_sect163k1 "sect163k1" +#define NID_sect163k1 721 +#define OBJ_sect163k1 OBJ_secg_ellipticCurve,1L + +#define SN_sect163r1 "sect163r1" +#define NID_sect163r1 722 +#define OBJ_sect163r1 OBJ_secg_ellipticCurve,2L + +#define SN_sect163r2 "sect163r2" +#define NID_sect163r2 723 +#define OBJ_sect163r2 OBJ_secg_ellipticCurve,15L + +#define SN_sect193r1 "sect193r1" +#define NID_sect193r1 724 +#define OBJ_sect193r1 OBJ_secg_ellipticCurve,24L + +#define SN_sect193r2 "sect193r2" +#define NID_sect193r2 725 +#define OBJ_sect193r2 OBJ_secg_ellipticCurve,25L + +#define SN_sect233k1 "sect233k1" +#define NID_sect233k1 726 +#define OBJ_sect233k1 OBJ_secg_ellipticCurve,26L + +#define SN_sect233r1 "sect233r1" +#define NID_sect233r1 727 +#define OBJ_sect233r1 OBJ_secg_ellipticCurve,27L + +#define SN_sect239k1 "sect239k1" +#define NID_sect239k1 728 +#define OBJ_sect239k1 OBJ_secg_ellipticCurve,3L + +#define SN_sect283k1 "sect283k1" +#define NID_sect283k1 729 +#define OBJ_sect283k1 OBJ_secg_ellipticCurve,16L + +#define SN_sect283r1 "sect283r1" +#define NID_sect283r1 730 +#define OBJ_sect283r1 OBJ_secg_ellipticCurve,17L + +#define SN_sect409k1 "sect409k1" +#define NID_sect409k1 731 +#define OBJ_sect409k1 OBJ_secg_ellipticCurve,36L + +#define SN_sect409r1 "sect409r1" +#define NID_sect409r1 732 +#define OBJ_sect409r1 OBJ_secg_ellipticCurve,37L + +#define SN_sect571k1 "sect571k1" +#define NID_sect571k1 733 +#define OBJ_sect571k1 OBJ_secg_ellipticCurve,38L + +#define SN_sect571r1 "sect571r1" +#define NID_sect571r1 734 +#define OBJ_sect571r1 OBJ_secg_ellipticCurve,39L + +#define OBJ_wap_wsg_idm_ecid OBJ_wap_wsg,4L + +#define SN_wap_wsg_idm_ecid_wtls1 "wap-wsg-idm-ecid-wtls1" +#define NID_wap_wsg_idm_ecid_wtls1 735 +#define OBJ_wap_wsg_idm_ecid_wtls1 OBJ_wap_wsg_idm_ecid,1L + +#define SN_wap_wsg_idm_ecid_wtls3 "wap-wsg-idm-ecid-wtls3" +#define NID_wap_wsg_idm_ecid_wtls3 736 +#define OBJ_wap_wsg_idm_ecid_wtls3 OBJ_wap_wsg_idm_ecid,3L + +#define SN_wap_wsg_idm_ecid_wtls4 "wap-wsg-idm-ecid-wtls4" +#define NID_wap_wsg_idm_ecid_wtls4 737 +#define OBJ_wap_wsg_idm_ecid_wtls4 OBJ_wap_wsg_idm_ecid,4L + +#define SN_wap_wsg_idm_ecid_wtls5 "wap-wsg-idm-ecid-wtls5" +#define NID_wap_wsg_idm_ecid_wtls5 738 +#define OBJ_wap_wsg_idm_ecid_wtls5 OBJ_wap_wsg_idm_ecid,5L + +#define SN_wap_wsg_idm_ecid_wtls6 "wap-wsg-idm-ecid-wtls6" +#define NID_wap_wsg_idm_ecid_wtls6 739 +#define OBJ_wap_wsg_idm_ecid_wtls6 OBJ_wap_wsg_idm_ecid,6L + +#define SN_wap_wsg_idm_ecid_wtls7 "wap-wsg-idm-ecid-wtls7" +#define NID_wap_wsg_idm_ecid_wtls7 740 +#define OBJ_wap_wsg_idm_ecid_wtls7 OBJ_wap_wsg_idm_ecid,7L + +#define SN_wap_wsg_idm_ecid_wtls8 "wap-wsg-idm-ecid-wtls8" +#define NID_wap_wsg_idm_ecid_wtls8 741 +#define OBJ_wap_wsg_idm_ecid_wtls8 OBJ_wap_wsg_idm_ecid,8L + +#define SN_wap_wsg_idm_ecid_wtls9 "wap-wsg-idm-ecid-wtls9" +#define NID_wap_wsg_idm_ecid_wtls9 742 +#define OBJ_wap_wsg_idm_ecid_wtls9 OBJ_wap_wsg_idm_ecid,9L + +#define SN_wap_wsg_idm_ecid_wtls10 "wap-wsg-idm-ecid-wtls10" +#define NID_wap_wsg_idm_ecid_wtls10 743 +#define OBJ_wap_wsg_idm_ecid_wtls10 OBJ_wap_wsg_idm_ecid,10L + +#define SN_wap_wsg_idm_ecid_wtls11 "wap-wsg-idm-ecid-wtls11" +#define NID_wap_wsg_idm_ecid_wtls11 744 +#define OBJ_wap_wsg_idm_ecid_wtls11 OBJ_wap_wsg_idm_ecid,11L + +#define SN_wap_wsg_idm_ecid_wtls12 "wap-wsg-idm-ecid-wtls12" +#define NID_wap_wsg_idm_ecid_wtls12 745 +#define OBJ_wap_wsg_idm_ecid_wtls12 OBJ_wap_wsg_idm_ecid,12L + +#define SN_cast5_cbc "CAST5-CBC" +#define LN_cast5_cbc "cast5-cbc" +#define NID_cast5_cbc 108 +#define OBJ_cast5_cbc OBJ_ISO_US,113533L,7L,66L,10L + +#define SN_cast5_ecb "CAST5-ECB" +#define LN_cast5_ecb "cast5-ecb" +#define NID_cast5_ecb 109 + +#define SN_cast5_cfb64 "CAST5-CFB" +#define LN_cast5_cfb64 "cast5-cfb" +#define NID_cast5_cfb64 110 + +#define SN_cast5_ofb64 "CAST5-OFB" +#define LN_cast5_ofb64 "cast5-ofb" +#define NID_cast5_ofb64 111 + +#define LN_pbeWithMD5AndCast5_CBC "pbeWithMD5AndCast5CBC" +#define NID_pbeWithMD5AndCast5_CBC 112 +#define OBJ_pbeWithMD5AndCast5_CBC OBJ_ISO_US,113533L,7L,66L,12L + +#define SN_id_PasswordBasedMAC "id-PasswordBasedMAC" +#define LN_id_PasswordBasedMAC "password based MAC" +#define NID_id_PasswordBasedMAC 782 +#define OBJ_id_PasswordBasedMAC OBJ_ISO_US,113533L,7L,66L,13L + +#define SN_id_DHBasedMac "id-DHBasedMac" +#define LN_id_DHBasedMac "Diffie-Hellman based MAC" +#define NID_id_DHBasedMac 783 +#define OBJ_id_DHBasedMac OBJ_ISO_US,113533L,7L,66L,30L + +#define SN_rsadsi "rsadsi" +#define LN_rsadsi "RSA Data Security, Inc." +#define NID_rsadsi 1 +#define OBJ_rsadsi OBJ_ISO_US,113549L + +#define SN_pkcs "pkcs" +#define LN_pkcs "RSA Data Security, Inc. PKCS" +#define NID_pkcs 2 +#define OBJ_pkcs OBJ_rsadsi,1L + +#define SN_pkcs1 "pkcs1" +#define NID_pkcs1 186 +#define OBJ_pkcs1 OBJ_pkcs,1L + +#define LN_rsaEncryption "rsaEncryption" +#define NID_rsaEncryption 6 +#define OBJ_rsaEncryption OBJ_pkcs1,1L + +#define SN_md2WithRSAEncryption "RSA-MD2" +#define LN_md2WithRSAEncryption "md2WithRSAEncryption" +#define NID_md2WithRSAEncryption 7 +#define OBJ_md2WithRSAEncryption OBJ_pkcs1,2L + +#define SN_md4WithRSAEncryption "RSA-MD4" +#define LN_md4WithRSAEncryption "md4WithRSAEncryption" +#define NID_md4WithRSAEncryption 396 +#define OBJ_md4WithRSAEncryption OBJ_pkcs1,3L + +#define SN_md5WithRSAEncryption "RSA-MD5" +#define LN_md5WithRSAEncryption "md5WithRSAEncryption" +#define NID_md5WithRSAEncryption 8 +#define OBJ_md5WithRSAEncryption OBJ_pkcs1,4L + +#define SN_sha1WithRSAEncryption "RSA-SHA1" +#define LN_sha1WithRSAEncryption "sha1WithRSAEncryption" +#define NID_sha1WithRSAEncryption 65 +#define OBJ_sha1WithRSAEncryption OBJ_pkcs1,5L + +#define SN_sha256WithRSAEncryption "RSA-SHA256" +#define LN_sha256WithRSAEncryption "sha256WithRSAEncryption" +#define NID_sha256WithRSAEncryption 668 +#define OBJ_sha256WithRSAEncryption OBJ_pkcs1,11L + +#define SN_sha384WithRSAEncryption "RSA-SHA384" +#define LN_sha384WithRSAEncryption "sha384WithRSAEncryption" +#define NID_sha384WithRSAEncryption 669 +#define OBJ_sha384WithRSAEncryption OBJ_pkcs1,12L + +#define SN_sha512WithRSAEncryption "RSA-SHA512" +#define LN_sha512WithRSAEncryption "sha512WithRSAEncryption" +#define NID_sha512WithRSAEncryption 670 +#define OBJ_sha512WithRSAEncryption OBJ_pkcs1,13L + +#define SN_sha224WithRSAEncryption "RSA-SHA224" +#define LN_sha224WithRSAEncryption "sha224WithRSAEncryption" +#define NID_sha224WithRSAEncryption 671 +#define OBJ_sha224WithRSAEncryption OBJ_pkcs1,14L + +#define SN_pkcs3 "pkcs3" +#define NID_pkcs3 27 +#define OBJ_pkcs3 OBJ_pkcs,3L + +#define LN_dhKeyAgreement "dhKeyAgreement" +#define NID_dhKeyAgreement 28 +#define OBJ_dhKeyAgreement OBJ_pkcs3,1L + +#define SN_pkcs5 "pkcs5" +#define NID_pkcs5 187 +#define OBJ_pkcs5 OBJ_pkcs,5L + +#define SN_pbeWithMD2AndDES_CBC "PBE-MD2-DES" +#define LN_pbeWithMD2AndDES_CBC "pbeWithMD2AndDES-CBC" +#define NID_pbeWithMD2AndDES_CBC 9 +#define OBJ_pbeWithMD2AndDES_CBC OBJ_pkcs5,1L + +#define SN_pbeWithMD5AndDES_CBC "PBE-MD5-DES" +#define LN_pbeWithMD5AndDES_CBC "pbeWithMD5AndDES-CBC" +#define NID_pbeWithMD5AndDES_CBC 10 +#define OBJ_pbeWithMD5AndDES_CBC OBJ_pkcs5,3L + +#define SN_pbeWithMD2AndRC2_CBC "PBE-MD2-RC2-64" +#define LN_pbeWithMD2AndRC2_CBC "pbeWithMD2AndRC2-CBC" +#define NID_pbeWithMD2AndRC2_CBC 168 +#define OBJ_pbeWithMD2AndRC2_CBC OBJ_pkcs5,4L + +#define SN_pbeWithMD5AndRC2_CBC "PBE-MD5-RC2-64" +#define LN_pbeWithMD5AndRC2_CBC "pbeWithMD5AndRC2-CBC" +#define NID_pbeWithMD5AndRC2_CBC 169 +#define OBJ_pbeWithMD5AndRC2_CBC OBJ_pkcs5,6L + +#define SN_pbeWithSHA1AndDES_CBC "PBE-SHA1-DES" +#define LN_pbeWithSHA1AndDES_CBC "pbeWithSHA1AndDES-CBC" +#define NID_pbeWithSHA1AndDES_CBC 170 +#define OBJ_pbeWithSHA1AndDES_CBC OBJ_pkcs5,10L + +#define SN_pbeWithSHA1AndRC2_CBC "PBE-SHA1-RC2-64" +#define LN_pbeWithSHA1AndRC2_CBC "pbeWithSHA1AndRC2-CBC" +#define NID_pbeWithSHA1AndRC2_CBC 68 +#define OBJ_pbeWithSHA1AndRC2_CBC OBJ_pkcs5,11L + +#define LN_id_pbkdf2 "PBKDF2" +#define NID_id_pbkdf2 69 +#define OBJ_id_pbkdf2 OBJ_pkcs5,12L + +#define LN_pbes2 "PBES2" +#define NID_pbes2 161 +#define OBJ_pbes2 OBJ_pkcs5,13L + +#define LN_pbmac1 "PBMAC1" +#define NID_pbmac1 162 +#define OBJ_pbmac1 OBJ_pkcs5,14L + +#define SN_pkcs7 "pkcs7" +#define NID_pkcs7 20 +#define OBJ_pkcs7 OBJ_pkcs,7L + +#define LN_pkcs7_data "pkcs7-data" +#define NID_pkcs7_data 21 +#define OBJ_pkcs7_data OBJ_pkcs7,1L + +#define LN_pkcs7_signed "pkcs7-signedData" +#define NID_pkcs7_signed 22 +#define OBJ_pkcs7_signed OBJ_pkcs7,2L + +#define LN_pkcs7_enveloped "pkcs7-envelopedData" +#define NID_pkcs7_enveloped 23 +#define OBJ_pkcs7_enveloped OBJ_pkcs7,3L + +#define LN_pkcs7_signedAndEnveloped "pkcs7-signedAndEnvelopedData" +#define NID_pkcs7_signedAndEnveloped 24 +#define OBJ_pkcs7_signedAndEnveloped OBJ_pkcs7,4L + +#define LN_pkcs7_digest "pkcs7-digestData" +#define NID_pkcs7_digest 25 +#define OBJ_pkcs7_digest OBJ_pkcs7,5L + +#define LN_pkcs7_encrypted "pkcs7-encryptedData" +#define NID_pkcs7_encrypted 26 +#define OBJ_pkcs7_encrypted OBJ_pkcs7,6L + +#define SN_pkcs9 "pkcs9" +#define NID_pkcs9 47 +#define OBJ_pkcs9 OBJ_pkcs,9L + +#define LN_pkcs9_emailAddress "emailAddress" +#define NID_pkcs9_emailAddress 48 +#define OBJ_pkcs9_emailAddress OBJ_pkcs9,1L + +#define LN_pkcs9_unstructuredName "unstructuredName" +#define NID_pkcs9_unstructuredName 49 +#define OBJ_pkcs9_unstructuredName OBJ_pkcs9,2L + +#define LN_pkcs9_contentType "contentType" +#define NID_pkcs9_contentType 50 +#define OBJ_pkcs9_contentType OBJ_pkcs9,3L + +#define LN_pkcs9_messageDigest "messageDigest" +#define NID_pkcs9_messageDigest 51 +#define OBJ_pkcs9_messageDigest OBJ_pkcs9,4L + +#define LN_pkcs9_signingTime "signingTime" +#define NID_pkcs9_signingTime 52 +#define OBJ_pkcs9_signingTime OBJ_pkcs9,5L + +#define LN_pkcs9_countersignature "countersignature" +#define NID_pkcs9_countersignature 53 +#define OBJ_pkcs9_countersignature OBJ_pkcs9,6L + +#define LN_pkcs9_challengePassword "challengePassword" +#define NID_pkcs9_challengePassword 54 +#define OBJ_pkcs9_challengePassword OBJ_pkcs9,7L + +#define LN_pkcs9_unstructuredAddress "unstructuredAddress" +#define NID_pkcs9_unstructuredAddress 55 +#define OBJ_pkcs9_unstructuredAddress OBJ_pkcs9,8L + +#define LN_pkcs9_extCertAttributes "extendedCertificateAttributes" +#define NID_pkcs9_extCertAttributes 56 +#define OBJ_pkcs9_extCertAttributes OBJ_pkcs9,9L + +#define SN_ext_req "extReq" +#define LN_ext_req "Extension Request" +#define NID_ext_req 172 +#define OBJ_ext_req OBJ_pkcs9,14L + +#define SN_SMIMECapabilities "SMIME-CAPS" +#define LN_SMIMECapabilities "S/MIME Capabilities" +#define NID_SMIMECapabilities 167 +#define OBJ_SMIMECapabilities OBJ_pkcs9,15L + +#define SN_SMIME "SMIME" +#define LN_SMIME "S/MIME" +#define NID_SMIME 188 +#define OBJ_SMIME OBJ_pkcs9,16L + +#define SN_id_smime_mod "id-smime-mod" +#define NID_id_smime_mod 189 +#define OBJ_id_smime_mod OBJ_SMIME,0L + +#define SN_id_smime_ct "id-smime-ct" +#define NID_id_smime_ct 190 +#define OBJ_id_smime_ct OBJ_SMIME,1L + +#define SN_id_smime_aa "id-smime-aa" +#define NID_id_smime_aa 191 +#define OBJ_id_smime_aa OBJ_SMIME,2L + +#define SN_id_smime_alg "id-smime-alg" +#define NID_id_smime_alg 192 +#define OBJ_id_smime_alg OBJ_SMIME,3L + +#define SN_id_smime_cd "id-smime-cd" +#define NID_id_smime_cd 193 +#define OBJ_id_smime_cd OBJ_SMIME,4L + +#define SN_id_smime_spq "id-smime-spq" +#define NID_id_smime_spq 194 +#define OBJ_id_smime_spq OBJ_SMIME,5L + +#define SN_id_smime_cti "id-smime-cti" +#define NID_id_smime_cti 195 +#define OBJ_id_smime_cti OBJ_SMIME,6L + +#define SN_id_smime_mod_cms "id-smime-mod-cms" +#define NID_id_smime_mod_cms 196 +#define OBJ_id_smime_mod_cms OBJ_id_smime_mod,1L + +#define SN_id_smime_mod_ess "id-smime-mod-ess" +#define NID_id_smime_mod_ess 197 +#define OBJ_id_smime_mod_ess OBJ_id_smime_mod,2L + +#define SN_id_smime_mod_oid "id-smime-mod-oid" +#define NID_id_smime_mod_oid 198 +#define OBJ_id_smime_mod_oid OBJ_id_smime_mod,3L + +#define SN_id_smime_mod_msg_v3 "id-smime-mod-msg-v3" +#define NID_id_smime_mod_msg_v3 199 +#define OBJ_id_smime_mod_msg_v3 OBJ_id_smime_mod,4L + +#define SN_id_smime_mod_ets_eSignature_88 "id-smime-mod-ets-eSignature-88" +#define NID_id_smime_mod_ets_eSignature_88 200 +#define OBJ_id_smime_mod_ets_eSignature_88 OBJ_id_smime_mod,5L + +#define SN_id_smime_mod_ets_eSignature_97 "id-smime-mod-ets-eSignature-97" +#define NID_id_smime_mod_ets_eSignature_97 201 +#define OBJ_id_smime_mod_ets_eSignature_97 OBJ_id_smime_mod,6L + +#define SN_id_smime_mod_ets_eSigPolicy_88 "id-smime-mod-ets-eSigPolicy-88" +#define NID_id_smime_mod_ets_eSigPolicy_88 202 +#define OBJ_id_smime_mod_ets_eSigPolicy_88 OBJ_id_smime_mod,7L + +#define SN_id_smime_mod_ets_eSigPolicy_97 "id-smime-mod-ets-eSigPolicy-97" +#define NID_id_smime_mod_ets_eSigPolicy_97 203 +#define OBJ_id_smime_mod_ets_eSigPolicy_97 OBJ_id_smime_mod,8L + +#define SN_id_smime_ct_receipt "id-smime-ct-receipt" +#define NID_id_smime_ct_receipt 204 +#define OBJ_id_smime_ct_receipt OBJ_id_smime_ct,1L + +#define SN_id_smime_ct_authData "id-smime-ct-authData" +#define NID_id_smime_ct_authData 205 +#define OBJ_id_smime_ct_authData OBJ_id_smime_ct,2L + +#define SN_id_smime_ct_publishCert "id-smime-ct-publishCert" +#define NID_id_smime_ct_publishCert 206 +#define OBJ_id_smime_ct_publishCert OBJ_id_smime_ct,3L + +#define SN_id_smime_ct_TSTInfo "id-smime-ct-TSTInfo" +#define NID_id_smime_ct_TSTInfo 207 +#define OBJ_id_smime_ct_TSTInfo OBJ_id_smime_ct,4L + +#define SN_id_smime_ct_TDTInfo "id-smime-ct-TDTInfo" +#define NID_id_smime_ct_TDTInfo 208 +#define OBJ_id_smime_ct_TDTInfo OBJ_id_smime_ct,5L + +#define SN_id_smime_ct_contentInfo "id-smime-ct-contentInfo" +#define NID_id_smime_ct_contentInfo 209 +#define OBJ_id_smime_ct_contentInfo OBJ_id_smime_ct,6L + +#define SN_id_smime_ct_DVCSRequestData "id-smime-ct-DVCSRequestData" +#define NID_id_smime_ct_DVCSRequestData 210 +#define OBJ_id_smime_ct_DVCSRequestData OBJ_id_smime_ct,7L + +#define SN_id_smime_ct_DVCSResponseData "id-smime-ct-DVCSResponseData" +#define NID_id_smime_ct_DVCSResponseData 211 +#define OBJ_id_smime_ct_DVCSResponseData OBJ_id_smime_ct,8L + +#define SN_id_smime_ct_compressedData "id-smime-ct-compressedData" +#define NID_id_smime_ct_compressedData 786 +#define OBJ_id_smime_ct_compressedData OBJ_id_smime_ct,9L + +#define SN_id_ct_asciiTextWithCRLF "id-ct-asciiTextWithCRLF" +#define NID_id_ct_asciiTextWithCRLF 787 +#define OBJ_id_ct_asciiTextWithCRLF OBJ_id_smime_ct,27L + +#define SN_id_smime_aa_receiptRequest "id-smime-aa-receiptRequest" +#define NID_id_smime_aa_receiptRequest 212 +#define OBJ_id_smime_aa_receiptRequest OBJ_id_smime_aa,1L + +#define SN_id_smime_aa_securityLabel "id-smime-aa-securityLabel" +#define NID_id_smime_aa_securityLabel 213 +#define OBJ_id_smime_aa_securityLabel OBJ_id_smime_aa,2L + +#define SN_id_smime_aa_mlExpandHistory "id-smime-aa-mlExpandHistory" +#define NID_id_smime_aa_mlExpandHistory 214 +#define OBJ_id_smime_aa_mlExpandHistory OBJ_id_smime_aa,3L + +#define SN_id_smime_aa_contentHint "id-smime-aa-contentHint" +#define NID_id_smime_aa_contentHint 215 +#define OBJ_id_smime_aa_contentHint OBJ_id_smime_aa,4L + +#define SN_id_smime_aa_msgSigDigest "id-smime-aa-msgSigDigest" +#define NID_id_smime_aa_msgSigDigest 216 +#define OBJ_id_smime_aa_msgSigDigest OBJ_id_smime_aa,5L + +#define SN_id_smime_aa_encapContentType "id-smime-aa-encapContentType" +#define NID_id_smime_aa_encapContentType 217 +#define OBJ_id_smime_aa_encapContentType OBJ_id_smime_aa,6L + +#define SN_id_smime_aa_contentIdentifier "id-smime-aa-contentIdentifier" +#define NID_id_smime_aa_contentIdentifier 218 +#define OBJ_id_smime_aa_contentIdentifier OBJ_id_smime_aa,7L + +#define SN_id_smime_aa_macValue "id-smime-aa-macValue" +#define NID_id_smime_aa_macValue 219 +#define OBJ_id_smime_aa_macValue OBJ_id_smime_aa,8L + +#define SN_id_smime_aa_equivalentLabels "id-smime-aa-equivalentLabels" +#define NID_id_smime_aa_equivalentLabels 220 +#define OBJ_id_smime_aa_equivalentLabels OBJ_id_smime_aa,9L + +#define SN_id_smime_aa_contentReference "id-smime-aa-contentReference" +#define NID_id_smime_aa_contentReference 221 +#define OBJ_id_smime_aa_contentReference OBJ_id_smime_aa,10L + +#define SN_id_smime_aa_encrypKeyPref "id-smime-aa-encrypKeyPref" +#define NID_id_smime_aa_encrypKeyPref 222 +#define OBJ_id_smime_aa_encrypKeyPref OBJ_id_smime_aa,11L + +#define SN_id_smime_aa_signingCertificate "id-smime-aa-signingCertificate" +#define NID_id_smime_aa_signingCertificate 223 +#define OBJ_id_smime_aa_signingCertificate OBJ_id_smime_aa,12L + +#define SN_id_smime_aa_smimeEncryptCerts "id-smime-aa-smimeEncryptCerts" +#define NID_id_smime_aa_smimeEncryptCerts 224 +#define OBJ_id_smime_aa_smimeEncryptCerts OBJ_id_smime_aa,13L + +#define SN_id_smime_aa_timeStampToken "id-smime-aa-timeStampToken" +#define NID_id_smime_aa_timeStampToken 225 +#define OBJ_id_smime_aa_timeStampToken OBJ_id_smime_aa,14L + +#define SN_id_smime_aa_ets_sigPolicyId "id-smime-aa-ets-sigPolicyId" +#define NID_id_smime_aa_ets_sigPolicyId 226 +#define OBJ_id_smime_aa_ets_sigPolicyId OBJ_id_smime_aa,15L + +#define SN_id_smime_aa_ets_commitmentType "id-smime-aa-ets-commitmentType" +#define NID_id_smime_aa_ets_commitmentType 227 +#define OBJ_id_smime_aa_ets_commitmentType OBJ_id_smime_aa,16L + +#define SN_id_smime_aa_ets_signerLocation "id-smime-aa-ets-signerLocation" +#define NID_id_smime_aa_ets_signerLocation 228 +#define OBJ_id_smime_aa_ets_signerLocation OBJ_id_smime_aa,17L + +#define SN_id_smime_aa_ets_signerAttr "id-smime-aa-ets-signerAttr" +#define NID_id_smime_aa_ets_signerAttr 229 +#define OBJ_id_smime_aa_ets_signerAttr OBJ_id_smime_aa,18L + +#define SN_id_smime_aa_ets_otherSigCert "id-smime-aa-ets-otherSigCert" +#define NID_id_smime_aa_ets_otherSigCert 230 +#define OBJ_id_smime_aa_ets_otherSigCert OBJ_id_smime_aa,19L + +#define SN_id_smime_aa_ets_contentTimestamp "id-smime-aa-ets-contentTimestamp" +#define NID_id_smime_aa_ets_contentTimestamp 231 +#define OBJ_id_smime_aa_ets_contentTimestamp OBJ_id_smime_aa,20L + +#define SN_id_smime_aa_ets_CertificateRefs "id-smime-aa-ets-CertificateRefs" +#define NID_id_smime_aa_ets_CertificateRefs 232 +#define OBJ_id_smime_aa_ets_CertificateRefs OBJ_id_smime_aa,21L + +#define SN_id_smime_aa_ets_RevocationRefs "id-smime-aa-ets-RevocationRefs" +#define NID_id_smime_aa_ets_RevocationRefs 233 +#define OBJ_id_smime_aa_ets_RevocationRefs OBJ_id_smime_aa,22L + +#define SN_id_smime_aa_ets_certValues "id-smime-aa-ets-certValues" +#define NID_id_smime_aa_ets_certValues 234 +#define OBJ_id_smime_aa_ets_certValues OBJ_id_smime_aa,23L + +#define SN_id_smime_aa_ets_revocationValues "id-smime-aa-ets-revocationValues" +#define NID_id_smime_aa_ets_revocationValues 235 +#define OBJ_id_smime_aa_ets_revocationValues OBJ_id_smime_aa,24L + +#define SN_id_smime_aa_ets_escTimeStamp "id-smime-aa-ets-escTimeStamp" +#define NID_id_smime_aa_ets_escTimeStamp 236 +#define OBJ_id_smime_aa_ets_escTimeStamp OBJ_id_smime_aa,25L + +#define SN_id_smime_aa_ets_certCRLTimestamp "id-smime-aa-ets-certCRLTimestamp" +#define NID_id_smime_aa_ets_certCRLTimestamp 237 +#define OBJ_id_smime_aa_ets_certCRLTimestamp OBJ_id_smime_aa,26L + +#define SN_id_smime_aa_ets_archiveTimeStamp "id-smime-aa-ets-archiveTimeStamp" +#define NID_id_smime_aa_ets_archiveTimeStamp 238 +#define OBJ_id_smime_aa_ets_archiveTimeStamp OBJ_id_smime_aa,27L + +#define SN_id_smime_aa_signatureType "id-smime-aa-signatureType" +#define NID_id_smime_aa_signatureType 239 +#define OBJ_id_smime_aa_signatureType OBJ_id_smime_aa,28L + +#define SN_id_smime_aa_dvcs_dvc "id-smime-aa-dvcs-dvc" +#define NID_id_smime_aa_dvcs_dvc 240 +#define OBJ_id_smime_aa_dvcs_dvc OBJ_id_smime_aa,29L + +#define SN_id_smime_alg_ESDHwith3DES "id-smime-alg-ESDHwith3DES" +#define NID_id_smime_alg_ESDHwith3DES 241 +#define OBJ_id_smime_alg_ESDHwith3DES OBJ_id_smime_alg,1L + +#define SN_id_smime_alg_ESDHwithRC2 "id-smime-alg-ESDHwithRC2" +#define NID_id_smime_alg_ESDHwithRC2 242 +#define OBJ_id_smime_alg_ESDHwithRC2 OBJ_id_smime_alg,2L + +#define SN_id_smime_alg_3DESwrap "id-smime-alg-3DESwrap" +#define NID_id_smime_alg_3DESwrap 243 +#define OBJ_id_smime_alg_3DESwrap OBJ_id_smime_alg,3L + +#define SN_id_smime_alg_RC2wrap "id-smime-alg-RC2wrap" +#define NID_id_smime_alg_RC2wrap 244 +#define OBJ_id_smime_alg_RC2wrap OBJ_id_smime_alg,4L + +#define SN_id_smime_alg_ESDH "id-smime-alg-ESDH" +#define NID_id_smime_alg_ESDH 245 +#define OBJ_id_smime_alg_ESDH OBJ_id_smime_alg,5L + +#define SN_id_smime_alg_CMS3DESwrap "id-smime-alg-CMS3DESwrap" +#define NID_id_smime_alg_CMS3DESwrap 246 +#define OBJ_id_smime_alg_CMS3DESwrap OBJ_id_smime_alg,6L + +#define SN_id_smime_alg_CMSRC2wrap "id-smime-alg-CMSRC2wrap" +#define NID_id_smime_alg_CMSRC2wrap 247 +#define OBJ_id_smime_alg_CMSRC2wrap OBJ_id_smime_alg,7L + +#define SN_id_smime_cd_ldap "id-smime-cd-ldap" +#define NID_id_smime_cd_ldap 248 +#define OBJ_id_smime_cd_ldap OBJ_id_smime_cd,1L + +#define SN_id_smime_spq_ets_sqt_uri "id-smime-spq-ets-sqt-uri" +#define NID_id_smime_spq_ets_sqt_uri 249 +#define OBJ_id_smime_spq_ets_sqt_uri OBJ_id_smime_spq,1L + +#define SN_id_smime_spq_ets_sqt_unotice "id-smime-spq-ets-sqt-unotice" +#define NID_id_smime_spq_ets_sqt_unotice 250 +#define OBJ_id_smime_spq_ets_sqt_unotice OBJ_id_smime_spq,2L + +#define SN_id_smime_cti_ets_proofOfOrigin "id-smime-cti-ets-proofOfOrigin" +#define NID_id_smime_cti_ets_proofOfOrigin 251 +#define OBJ_id_smime_cti_ets_proofOfOrigin OBJ_id_smime_cti,1L + +#define SN_id_smime_cti_ets_proofOfReceipt "id-smime-cti-ets-proofOfReceipt" +#define NID_id_smime_cti_ets_proofOfReceipt 252 +#define OBJ_id_smime_cti_ets_proofOfReceipt OBJ_id_smime_cti,2L + +#define SN_id_smime_cti_ets_proofOfDelivery "id-smime-cti-ets-proofOfDelivery" +#define NID_id_smime_cti_ets_proofOfDelivery 253 +#define OBJ_id_smime_cti_ets_proofOfDelivery OBJ_id_smime_cti,3L + +#define SN_id_smime_cti_ets_proofOfSender "id-smime-cti-ets-proofOfSender" +#define NID_id_smime_cti_ets_proofOfSender 254 +#define OBJ_id_smime_cti_ets_proofOfSender OBJ_id_smime_cti,4L + +#define SN_id_smime_cti_ets_proofOfApproval "id-smime-cti-ets-proofOfApproval" +#define NID_id_smime_cti_ets_proofOfApproval 255 +#define OBJ_id_smime_cti_ets_proofOfApproval OBJ_id_smime_cti,5L + +#define SN_id_smime_cti_ets_proofOfCreation "id-smime-cti-ets-proofOfCreation" +#define NID_id_smime_cti_ets_proofOfCreation 256 +#define OBJ_id_smime_cti_ets_proofOfCreation OBJ_id_smime_cti,6L + +#define LN_friendlyName "friendlyName" +#define NID_friendlyName 156 +#define OBJ_friendlyName OBJ_pkcs9,20L + +#define LN_localKeyID "localKeyID" +#define NID_localKeyID 157 +#define OBJ_localKeyID OBJ_pkcs9,21L + +#define SN_ms_csp_name "CSPName" +#define LN_ms_csp_name "Microsoft CSP Name" +#define NID_ms_csp_name 417 +#define OBJ_ms_csp_name 1L,3L,6L,1L,4L,1L,311L,17L,1L + +#define SN_LocalKeySet "LocalKeySet" +#define LN_LocalKeySet "Microsoft Local Key set" +#define NID_LocalKeySet 856 +#define OBJ_LocalKeySet 1L,3L,6L,1L,4L,1L,311L,17L,2L + +#define OBJ_certTypes OBJ_pkcs9,22L + +#define LN_x509Certificate "x509Certificate" +#define NID_x509Certificate 158 +#define OBJ_x509Certificate OBJ_certTypes,1L + +#define LN_sdsiCertificate "sdsiCertificate" +#define NID_sdsiCertificate 159 +#define OBJ_sdsiCertificate OBJ_certTypes,2L + +#define OBJ_crlTypes OBJ_pkcs9,23L + +#define LN_x509Crl "x509Crl" +#define NID_x509Crl 160 +#define OBJ_x509Crl OBJ_crlTypes,1L + +#define OBJ_pkcs12 OBJ_pkcs,12L + +#define OBJ_pkcs12_pbeids OBJ_pkcs12,1L + +#define SN_pbe_WithSHA1And128BitRC4 "PBE-SHA1-RC4-128" +#define LN_pbe_WithSHA1And128BitRC4 "pbeWithSHA1And128BitRC4" +#define NID_pbe_WithSHA1And128BitRC4 144 +#define OBJ_pbe_WithSHA1And128BitRC4 OBJ_pkcs12_pbeids,1L + +#define SN_pbe_WithSHA1And40BitRC4 "PBE-SHA1-RC4-40" +#define LN_pbe_WithSHA1And40BitRC4 "pbeWithSHA1And40BitRC4" +#define NID_pbe_WithSHA1And40BitRC4 145 +#define OBJ_pbe_WithSHA1And40BitRC4 OBJ_pkcs12_pbeids,2L + +#define SN_pbe_WithSHA1And3_Key_TripleDES_CBC "PBE-SHA1-3DES" +#define LN_pbe_WithSHA1And3_Key_TripleDES_CBC "pbeWithSHA1And3-KeyTripleDES-CBC" +#define NID_pbe_WithSHA1And3_Key_TripleDES_CBC 146 +#define OBJ_pbe_WithSHA1And3_Key_TripleDES_CBC OBJ_pkcs12_pbeids,3L + +#define SN_pbe_WithSHA1And2_Key_TripleDES_CBC "PBE-SHA1-2DES" +#define LN_pbe_WithSHA1And2_Key_TripleDES_CBC "pbeWithSHA1And2-KeyTripleDES-CBC" +#define NID_pbe_WithSHA1And2_Key_TripleDES_CBC 147 +#define OBJ_pbe_WithSHA1And2_Key_TripleDES_CBC OBJ_pkcs12_pbeids,4L + +#define SN_pbe_WithSHA1And128BitRC2_CBC "PBE-SHA1-RC2-128" +#define LN_pbe_WithSHA1And128BitRC2_CBC "pbeWithSHA1And128BitRC2-CBC" +#define NID_pbe_WithSHA1And128BitRC2_CBC 148 +#define OBJ_pbe_WithSHA1And128BitRC2_CBC OBJ_pkcs12_pbeids,5L + +#define SN_pbe_WithSHA1And40BitRC2_CBC "PBE-SHA1-RC2-40" +#define LN_pbe_WithSHA1And40BitRC2_CBC "pbeWithSHA1And40BitRC2-CBC" +#define NID_pbe_WithSHA1And40BitRC2_CBC 149 +#define OBJ_pbe_WithSHA1And40BitRC2_CBC OBJ_pkcs12_pbeids,6L + +#define OBJ_pkcs12_Version1 OBJ_pkcs12,10L + +#define OBJ_pkcs12_BagIds OBJ_pkcs12_Version1,1L + +#define LN_keyBag "keyBag" +#define NID_keyBag 150 +#define OBJ_keyBag OBJ_pkcs12_BagIds,1L + +#define LN_pkcs8ShroudedKeyBag "pkcs8ShroudedKeyBag" +#define NID_pkcs8ShroudedKeyBag 151 +#define OBJ_pkcs8ShroudedKeyBag OBJ_pkcs12_BagIds,2L + +#define LN_certBag "certBag" +#define NID_certBag 152 +#define OBJ_certBag OBJ_pkcs12_BagIds,3L + +#define LN_crlBag "crlBag" +#define NID_crlBag 153 +#define OBJ_crlBag OBJ_pkcs12_BagIds,4L + +#define LN_secretBag "secretBag" +#define NID_secretBag 154 +#define OBJ_secretBag OBJ_pkcs12_BagIds,5L + +#define LN_safeContentsBag "safeContentsBag" +#define NID_safeContentsBag 155 +#define OBJ_safeContentsBag OBJ_pkcs12_BagIds,6L + +#define SN_md2 "MD2" +#define LN_md2 "md2" +#define NID_md2 3 +#define OBJ_md2 OBJ_rsadsi,2L,2L + +#define SN_md4 "MD4" +#define LN_md4 "md4" +#define NID_md4 257 +#define OBJ_md4 OBJ_rsadsi,2L,4L + +#define SN_md5 "MD5" +#define LN_md5 "md5" +#define NID_md5 4 +#define OBJ_md5 OBJ_rsadsi,2L,5L + +#define SN_md5_sha1 "MD5-SHA1" +#define LN_md5_sha1 "md5-sha1" +#define NID_md5_sha1 114 + +#define LN_hmacWithMD5 "hmacWithMD5" +#define NID_hmacWithMD5 797 +#define OBJ_hmacWithMD5 OBJ_rsadsi,2L,6L + +#define LN_hmacWithSHA1 "hmacWithSHA1" +#define NID_hmacWithSHA1 163 +#define OBJ_hmacWithSHA1 OBJ_rsadsi,2L,7L + +#define LN_hmacWithSHA224 "hmacWithSHA224" +#define NID_hmacWithSHA224 798 +#define OBJ_hmacWithSHA224 OBJ_rsadsi,2L,8L + +#define LN_hmacWithSHA256 "hmacWithSHA256" +#define NID_hmacWithSHA256 799 +#define OBJ_hmacWithSHA256 OBJ_rsadsi,2L,9L + +#define LN_hmacWithSHA384 "hmacWithSHA384" +#define NID_hmacWithSHA384 800 +#define OBJ_hmacWithSHA384 OBJ_rsadsi,2L,10L + +#define LN_hmacWithSHA512 "hmacWithSHA512" +#define NID_hmacWithSHA512 801 +#define OBJ_hmacWithSHA512 OBJ_rsadsi,2L,11L + +#define SN_rc2_cbc "RC2-CBC" +#define LN_rc2_cbc "rc2-cbc" +#define NID_rc2_cbc 37 +#define OBJ_rc2_cbc OBJ_rsadsi,3L,2L + +#define SN_rc2_ecb "RC2-ECB" +#define LN_rc2_ecb "rc2-ecb" +#define NID_rc2_ecb 38 + +#define SN_rc2_cfb64 "RC2-CFB" +#define LN_rc2_cfb64 "rc2-cfb" +#define NID_rc2_cfb64 39 + +#define SN_rc2_ofb64 "RC2-OFB" +#define LN_rc2_ofb64 "rc2-ofb" +#define NID_rc2_ofb64 40 + +#define SN_rc2_40_cbc "RC2-40-CBC" +#define LN_rc2_40_cbc "rc2-40-cbc" +#define NID_rc2_40_cbc 98 + +#define SN_rc2_64_cbc "RC2-64-CBC" +#define LN_rc2_64_cbc "rc2-64-cbc" +#define NID_rc2_64_cbc 166 + +#define SN_rc4 "RC4" +#define LN_rc4 "rc4" +#define NID_rc4 5 +#define OBJ_rc4 OBJ_rsadsi,3L,4L + +#define SN_rc4_40 "RC4-40" +#define LN_rc4_40 "rc4-40" +#define NID_rc4_40 97 + +#define SN_des_ede3_cbc "DES-EDE3-CBC" +#define LN_des_ede3_cbc "des-ede3-cbc" +#define NID_des_ede3_cbc 44 +#define OBJ_des_ede3_cbc OBJ_rsadsi,3L,7L + +#define SN_rc5_cbc "RC5-CBC" +#define LN_rc5_cbc "rc5-cbc" +#define NID_rc5_cbc 120 +#define OBJ_rc5_cbc OBJ_rsadsi,3L,8L + +#define SN_rc5_ecb "RC5-ECB" +#define LN_rc5_ecb "rc5-ecb" +#define NID_rc5_ecb 121 + +#define SN_rc5_cfb64 "RC5-CFB" +#define LN_rc5_cfb64 "rc5-cfb" +#define NID_rc5_cfb64 122 + +#define SN_rc5_ofb64 "RC5-OFB" +#define LN_rc5_ofb64 "rc5-ofb" +#define NID_rc5_ofb64 123 + +#define SN_ms_ext_req "msExtReq" +#define LN_ms_ext_req "Microsoft Extension Request" +#define NID_ms_ext_req 171 +#define OBJ_ms_ext_req 1L,3L,6L,1L,4L,1L,311L,2L,1L,14L + +#define SN_ms_code_ind "msCodeInd" +#define LN_ms_code_ind "Microsoft Individual Code Signing" +#define NID_ms_code_ind 134 +#define OBJ_ms_code_ind 1L,3L,6L,1L,4L,1L,311L,2L,1L,21L + +#define SN_ms_code_com "msCodeCom" +#define LN_ms_code_com "Microsoft Commercial Code Signing" +#define NID_ms_code_com 135 +#define OBJ_ms_code_com 1L,3L,6L,1L,4L,1L,311L,2L,1L,22L + +#define SN_ms_ctl_sign "msCTLSign" +#define LN_ms_ctl_sign "Microsoft Trust List Signing" +#define NID_ms_ctl_sign 136 +#define OBJ_ms_ctl_sign 1L,3L,6L,1L,4L,1L,311L,10L,3L,1L + +#define SN_ms_sgc "msSGC" +#define LN_ms_sgc "Microsoft Server Gated Crypto" +#define NID_ms_sgc 137 +#define OBJ_ms_sgc 1L,3L,6L,1L,4L,1L,311L,10L,3L,3L + +#define SN_ms_efs "msEFS" +#define LN_ms_efs "Microsoft Encrypted File System" +#define NID_ms_efs 138 +#define OBJ_ms_efs 1L,3L,6L,1L,4L,1L,311L,10L,3L,4L + +#define SN_ms_smartcard_login "msSmartcardLogin" +#define LN_ms_smartcard_login "Microsoft Smartcardlogin" +#define NID_ms_smartcard_login 648 +#define OBJ_ms_smartcard_login 1L,3L,6L,1L,4L,1L,311L,20L,2L,2L + +#define SN_ms_upn "msUPN" +#define LN_ms_upn "Microsoft Universal Principal Name" +#define NID_ms_upn 649 +#define OBJ_ms_upn 1L,3L,6L,1L,4L,1L,311L,20L,2L,3L + +#define SN_idea_cbc "IDEA-CBC" +#define LN_idea_cbc "idea-cbc" +#define NID_idea_cbc 34 +#define OBJ_idea_cbc 1L,3L,6L,1L,4L,1L,188L,7L,1L,1L,2L + +#define SN_idea_ecb "IDEA-ECB" +#define LN_idea_ecb "idea-ecb" +#define NID_idea_ecb 36 + +#define SN_idea_cfb64 "IDEA-CFB" +#define LN_idea_cfb64 "idea-cfb" +#define NID_idea_cfb64 35 + +#define SN_idea_ofb64 "IDEA-OFB" +#define LN_idea_ofb64 "idea-ofb" +#define NID_idea_ofb64 46 + +#define SN_bf_cbc "BF-CBC" +#define LN_bf_cbc "bf-cbc" +#define NID_bf_cbc 91 +#define OBJ_bf_cbc 1L,3L,6L,1L,4L,1L,3029L,1L,2L + +#define SN_bf_ecb "BF-ECB" +#define LN_bf_ecb "bf-ecb" +#define NID_bf_ecb 92 + +#define SN_bf_cfb64 "BF-CFB" +#define LN_bf_cfb64 "bf-cfb" +#define NID_bf_cfb64 93 + +#define SN_bf_ofb64 "BF-OFB" +#define LN_bf_ofb64 "bf-ofb" +#define NID_bf_ofb64 94 + +#define SN_id_pkix "PKIX" +#define NID_id_pkix 127 +#define OBJ_id_pkix 1L,3L,6L,1L,5L,5L,7L + +#define SN_id_pkix_mod "id-pkix-mod" +#define NID_id_pkix_mod 258 +#define OBJ_id_pkix_mod OBJ_id_pkix,0L + +#define SN_id_pe "id-pe" +#define NID_id_pe 175 +#define OBJ_id_pe OBJ_id_pkix,1L + +#define SN_id_qt "id-qt" +#define NID_id_qt 259 +#define OBJ_id_qt OBJ_id_pkix,2L + +#define SN_id_kp "id-kp" +#define NID_id_kp 128 +#define OBJ_id_kp OBJ_id_pkix,3L + +#define SN_id_it "id-it" +#define NID_id_it 260 +#define OBJ_id_it OBJ_id_pkix,4L + +#define SN_id_pkip "id-pkip" +#define NID_id_pkip 261 +#define OBJ_id_pkip OBJ_id_pkix,5L + +#define SN_id_alg "id-alg" +#define NID_id_alg 262 +#define OBJ_id_alg OBJ_id_pkix,6L + +#define SN_id_cmc "id-cmc" +#define NID_id_cmc 263 +#define OBJ_id_cmc OBJ_id_pkix,7L + +#define SN_id_on "id-on" +#define NID_id_on 264 +#define OBJ_id_on OBJ_id_pkix,8L + +#define SN_id_pda "id-pda" +#define NID_id_pda 265 +#define OBJ_id_pda OBJ_id_pkix,9L + +#define SN_id_aca "id-aca" +#define NID_id_aca 266 +#define OBJ_id_aca OBJ_id_pkix,10L + +#define SN_id_qcs "id-qcs" +#define NID_id_qcs 267 +#define OBJ_id_qcs OBJ_id_pkix,11L + +#define SN_id_cct "id-cct" +#define NID_id_cct 268 +#define OBJ_id_cct OBJ_id_pkix,12L + +#define SN_id_ppl "id-ppl" +#define NID_id_ppl 662 +#define OBJ_id_ppl OBJ_id_pkix,21L + +#define SN_id_ad "id-ad" +#define NID_id_ad 176 +#define OBJ_id_ad OBJ_id_pkix,48L + +#define SN_id_pkix1_explicit_88 "id-pkix1-explicit-88" +#define NID_id_pkix1_explicit_88 269 +#define OBJ_id_pkix1_explicit_88 OBJ_id_pkix_mod,1L + +#define SN_id_pkix1_implicit_88 "id-pkix1-implicit-88" +#define NID_id_pkix1_implicit_88 270 +#define OBJ_id_pkix1_implicit_88 OBJ_id_pkix_mod,2L + +#define SN_id_pkix1_explicit_93 "id-pkix1-explicit-93" +#define NID_id_pkix1_explicit_93 271 +#define OBJ_id_pkix1_explicit_93 OBJ_id_pkix_mod,3L + +#define SN_id_pkix1_implicit_93 "id-pkix1-implicit-93" +#define NID_id_pkix1_implicit_93 272 +#define OBJ_id_pkix1_implicit_93 OBJ_id_pkix_mod,4L + +#define SN_id_mod_crmf "id-mod-crmf" +#define NID_id_mod_crmf 273 +#define OBJ_id_mod_crmf OBJ_id_pkix_mod,5L + +#define SN_id_mod_cmc "id-mod-cmc" +#define NID_id_mod_cmc 274 +#define OBJ_id_mod_cmc OBJ_id_pkix_mod,6L + +#define SN_id_mod_kea_profile_88 "id-mod-kea-profile-88" +#define NID_id_mod_kea_profile_88 275 +#define OBJ_id_mod_kea_profile_88 OBJ_id_pkix_mod,7L + +#define SN_id_mod_kea_profile_93 "id-mod-kea-profile-93" +#define NID_id_mod_kea_profile_93 276 +#define OBJ_id_mod_kea_profile_93 OBJ_id_pkix_mod,8L + +#define SN_id_mod_cmp "id-mod-cmp" +#define NID_id_mod_cmp 277 +#define OBJ_id_mod_cmp OBJ_id_pkix_mod,9L + +#define SN_id_mod_qualified_cert_88 "id-mod-qualified-cert-88" +#define NID_id_mod_qualified_cert_88 278 +#define OBJ_id_mod_qualified_cert_88 OBJ_id_pkix_mod,10L + +#define SN_id_mod_qualified_cert_93 "id-mod-qualified-cert-93" +#define NID_id_mod_qualified_cert_93 279 +#define OBJ_id_mod_qualified_cert_93 OBJ_id_pkix_mod,11L + +#define SN_id_mod_attribute_cert "id-mod-attribute-cert" +#define NID_id_mod_attribute_cert 280 +#define OBJ_id_mod_attribute_cert OBJ_id_pkix_mod,12L + +#define SN_id_mod_timestamp_protocol "id-mod-timestamp-protocol" +#define NID_id_mod_timestamp_protocol 281 +#define OBJ_id_mod_timestamp_protocol OBJ_id_pkix_mod,13L + +#define SN_id_mod_ocsp "id-mod-ocsp" +#define NID_id_mod_ocsp 282 +#define OBJ_id_mod_ocsp OBJ_id_pkix_mod,14L + +#define SN_id_mod_dvcs "id-mod-dvcs" +#define NID_id_mod_dvcs 283 +#define OBJ_id_mod_dvcs OBJ_id_pkix_mod,15L + +#define SN_id_mod_cmp2000 "id-mod-cmp2000" +#define NID_id_mod_cmp2000 284 +#define OBJ_id_mod_cmp2000 OBJ_id_pkix_mod,16L + +#define SN_info_access "authorityInfoAccess" +#define LN_info_access "Authority Information Access" +#define NID_info_access 177 +#define OBJ_info_access OBJ_id_pe,1L + +#define SN_biometricInfo "biometricInfo" +#define LN_biometricInfo "Biometric Info" +#define NID_biometricInfo 285 +#define OBJ_biometricInfo OBJ_id_pe,2L + +#define SN_qcStatements "qcStatements" +#define NID_qcStatements 286 +#define OBJ_qcStatements OBJ_id_pe,3L + +#define SN_ac_auditEntity "ac-auditEntity" +#define NID_ac_auditEntity 287 +#define OBJ_ac_auditEntity OBJ_id_pe,4L + +#define SN_ac_targeting "ac-targeting" +#define NID_ac_targeting 288 +#define OBJ_ac_targeting OBJ_id_pe,5L + +#define SN_aaControls "aaControls" +#define NID_aaControls 289 +#define OBJ_aaControls OBJ_id_pe,6L + +#define SN_sbgp_ipAddrBlock "sbgp-ipAddrBlock" +#define NID_sbgp_ipAddrBlock 290 +#define OBJ_sbgp_ipAddrBlock OBJ_id_pe,7L + +#define SN_sbgp_autonomousSysNum "sbgp-autonomousSysNum" +#define NID_sbgp_autonomousSysNum 291 +#define OBJ_sbgp_autonomousSysNum OBJ_id_pe,8L + +#define SN_sbgp_routerIdentifier "sbgp-routerIdentifier" +#define NID_sbgp_routerIdentifier 292 +#define OBJ_sbgp_routerIdentifier OBJ_id_pe,9L + +#define SN_ac_proxying "ac-proxying" +#define NID_ac_proxying 397 +#define OBJ_ac_proxying OBJ_id_pe,10L + +#define SN_sinfo_access "subjectInfoAccess" +#define LN_sinfo_access "Subject Information Access" +#define NID_sinfo_access 398 +#define OBJ_sinfo_access OBJ_id_pe,11L + +#define SN_proxyCertInfo "proxyCertInfo" +#define LN_proxyCertInfo "Proxy Certificate Information" +#define NID_proxyCertInfo 663 +#define OBJ_proxyCertInfo OBJ_id_pe,14L + +#define SN_id_qt_cps "id-qt-cps" +#define LN_id_qt_cps "Policy Qualifier CPS" +#define NID_id_qt_cps 164 +#define OBJ_id_qt_cps OBJ_id_qt,1L + +#define SN_id_qt_unotice "id-qt-unotice" +#define LN_id_qt_unotice "Policy Qualifier User Notice" +#define NID_id_qt_unotice 165 +#define OBJ_id_qt_unotice OBJ_id_qt,2L + +#define SN_textNotice "textNotice" +#define NID_textNotice 293 +#define OBJ_textNotice OBJ_id_qt,3L + +#define SN_server_auth "serverAuth" +#define LN_server_auth "TLS Web Server Authentication" +#define NID_server_auth 129 +#define OBJ_server_auth OBJ_id_kp,1L + +#define SN_client_auth "clientAuth" +#define LN_client_auth "TLS Web Client Authentication" +#define NID_client_auth 130 +#define OBJ_client_auth OBJ_id_kp,2L + +#define SN_code_sign "codeSigning" +#define LN_code_sign "Code Signing" +#define NID_code_sign 131 +#define OBJ_code_sign OBJ_id_kp,3L + +#define SN_email_protect "emailProtection" +#define LN_email_protect "E-mail Protection" +#define NID_email_protect 132 +#define OBJ_email_protect OBJ_id_kp,4L + +#define SN_ipsecEndSystem "ipsecEndSystem" +#define LN_ipsecEndSystem "IPSec End System" +#define NID_ipsecEndSystem 294 +#define OBJ_ipsecEndSystem OBJ_id_kp,5L + +#define SN_ipsecTunnel "ipsecTunnel" +#define LN_ipsecTunnel "IPSec Tunnel" +#define NID_ipsecTunnel 295 +#define OBJ_ipsecTunnel OBJ_id_kp,6L + +#define SN_ipsecUser "ipsecUser" +#define LN_ipsecUser "IPSec User" +#define NID_ipsecUser 296 +#define OBJ_ipsecUser OBJ_id_kp,7L + +#define SN_time_stamp "timeStamping" +#define LN_time_stamp "Time Stamping" +#define NID_time_stamp 133 +#define OBJ_time_stamp OBJ_id_kp,8L + +#define SN_OCSP_sign "OCSPSigning" +#define LN_OCSP_sign "OCSP Signing" +#define NID_OCSP_sign 180 +#define OBJ_OCSP_sign OBJ_id_kp,9L + +#define SN_dvcs "DVCS" +#define LN_dvcs "dvcs" +#define NID_dvcs 297 +#define OBJ_dvcs OBJ_id_kp,10L + +#define SN_id_it_caProtEncCert "id-it-caProtEncCert" +#define NID_id_it_caProtEncCert 298 +#define OBJ_id_it_caProtEncCert OBJ_id_it,1L + +#define SN_id_it_signKeyPairTypes "id-it-signKeyPairTypes" +#define NID_id_it_signKeyPairTypes 299 +#define OBJ_id_it_signKeyPairTypes OBJ_id_it,2L + +#define SN_id_it_encKeyPairTypes "id-it-encKeyPairTypes" +#define NID_id_it_encKeyPairTypes 300 +#define OBJ_id_it_encKeyPairTypes OBJ_id_it,3L + +#define SN_id_it_preferredSymmAlg "id-it-preferredSymmAlg" +#define NID_id_it_preferredSymmAlg 301 +#define OBJ_id_it_preferredSymmAlg OBJ_id_it,4L + +#define SN_id_it_caKeyUpdateInfo "id-it-caKeyUpdateInfo" +#define NID_id_it_caKeyUpdateInfo 302 +#define OBJ_id_it_caKeyUpdateInfo OBJ_id_it,5L + +#define SN_id_it_currentCRL "id-it-currentCRL" +#define NID_id_it_currentCRL 303 +#define OBJ_id_it_currentCRL OBJ_id_it,6L + +#define SN_id_it_unsupportedOIDs "id-it-unsupportedOIDs" +#define NID_id_it_unsupportedOIDs 304 +#define OBJ_id_it_unsupportedOIDs OBJ_id_it,7L + +#define SN_id_it_subscriptionRequest "id-it-subscriptionRequest" +#define NID_id_it_subscriptionRequest 305 +#define OBJ_id_it_subscriptionRequest OBJ_id_it,8L + +#define SN_id_it_subscriptionResponse "id-it-subscriptionResponse" +#define NID_id_it_subscriptionResponse 306 +#define OBJ_id_it_subscriptionResponse OBJ_id_it,9L + +#define SN_id_it_keyPairParamReq "id-it-keyPairParamReq" +#define NID_id_it_keyPairParamReq 307 +#define OBJ_id_it_keyPairParamReq OBJ_id_it,10L + +#define SN_id_it_keyPairParamRep "id-it-keyPairParamRep" +#define NID_id_it_keyPairParamRep 308 +#define OBJ_id_it_keyPairParamRep OBJ_id_it,11L + +#define SN_id_it_revPassphrase "id-it-revPassphrase" +#define NID_id_it_revPassphrase 309 +#define OBJ_id_it_revPassphrase OBJ_id_it,12L + +#define SN_id_it_implicitConfirm "id-it-implicitConfirm" +#define NID_id_it_implicitConfirm 310 +#define OBJ_id_it_implicitConfirm OBJ_id_it,13L + +#define SN_id_it_confirmWaitTime "id-it-confirmWaitTime" +#define NID_id_it_confirmWaitTime 311 +#define OBJ_id_it_confirmWaitTime OBJ_id_it,14L + +#define SN_id_it_origPKIMessage "id-it-origPKIMessage" +#define NID_id_it_origPKIMessage 312 +#define OBJ_id_it_origPKIMessage OBJ_id_it,15L + +#define SN_id_it_suppLangTags "id-it-suppLangTags" +#define NID_id_it_suppLangTags 784 +#define OBJ_id_it_suppLangTags OBJ_id_it,16L + +#define SN_id_regCtrl "id-regCtrl" +#define NID_id_regCtrl 313 +#define OBJ_id_regCtrl OBJ_id_pkip,1L + +#define SN_id_regInfo "id-regInfo" +#define NID_id_regInfo 314 +#define OBJ_id_regInfo OBJ_id_pkip,2L + +#define SN_id_regCtrl_regToken "id-regCtrl-regToken" +#define NID_id_regCtrl_regToken 315 +#define OBJ_id_regCtrl_regToken OBJ_id_regCtrl,1L + +#define SN_id_regCtrl_authenticator "id-regCtrl-authenticator" +#define NID_id_regCtrl_authenticator 316 +#define OBJ_id_regCtrl_authenticator OBJ_id_regCtrl,2L + +#define SN_id_regCtrl_pkiPublicationInfo "id-regCtrl-pkiPublicationInfo" +#define NID_id_regCtrl_pkiPublicationInfo 317 +#define OBJ_id_regCtrl_pkiPublicationInfo OBJ_id_regCtrl,3L + +#define SN_id_regCtrl_pkiArchiveOptions "id-regCtrl-pkiArchiveOptions" +#define NID_id_regCtrl_pkiArchiveOptions 318 +#define OBJ_id_regCtrl_pkiArchiveOptions OBJ_id_regCtrl,4L + +#define SN_id_regCtrl_oldCertID "id-regCtrl-oldCertID" +#define NID_id_regCtrl_oldCertID 319 +#define OBJ_id_regCtrl_oldCertID OBJ_id_regCtrl,5L + +#define SN_id_regCtrl_protocolEncrKey "id-regCtrl-protocolEncrKey" +#define NID_id_regCtrl_protocolEncrKey 320 +#define OBJ_id_regCtrl_protocolEncrKey OBJ_id_regCtrl,6L + +#define SN_id_regInfo_utf8Pairs "id-regInfo-utf8Pairs" +#define NID_id_regInfo_utf8Pairs 321 +#define OBJ_id_regInfo_utf8Pairs OBJ_id_regInfo,1L + +#define SN_id_regInfo_certReq "id-regInfo-certReq" +#define NID_id_regInfo_certReq 322 +#define OBJ_id_regInfo_certReq OBJ_id_regInfo,2L + +#define SN_id_alg_des40 "id-alg-des40" +#define NID_id_alg_des40 323 +#define OBJ_id_alg_des40 OBJ_id_alg,1L + +#define SN_id_alg_noSignature "id-alg-noSignature" +#define NID_id_alg_noSignature 324 +#define OBJ_id_alg_noSignature OBJ_id_alg,2L + +#define SN_id_alg_dh_sig_hmac_sha1 "id-alg-dh-sig-hmac-sha1" +#define NID_id_alg_dh_sig_hmac_sha1 325 +#define OBJ_id_alg_dh_sig_hmac_sha1 OBJ_id_alg,3L + +#define SN_id_alg_dh_pop "id-alg-dh-pop" +#define NID_id_alg_dh_pop 326 +#define OBJ_id_alg_dh_pop OBJ_id_alg,4L + +#define SN_id_cmc_statusInfo "id-cmc-statusInfo" +#define NID_id_cmc_statusInfo 327 +#define OBJ_id_cmc_statusInfo OBJ_id_cmc,1L + +#define SN_id_cmc_identification "id-cmc-identification" +#define NID_id_cmc_identification 328 +#define OBJ_id_cmc_identification OBJ_id_cmc,2L + +#define SN_id_cmc_identityProof "id-cmc-identityProof" +#define NID_id_cmc_identityProof 329 +#define OBJ_id_cmc_identityProof OBJ_id_cmc,3L + +#define SN_id_cmc_dataReturn "id-cmc-dataReturn" +#define NID_id_cmc_dataReturn 330 +#define OBJ_id_cmc_dataReturn OBJ_id_cmc,4L + +#define SN_id_cmc_transactionId "id-cmc-transactionId" +#define NID_id_cmc_transactionId 331 +#define OBJ_id_cmc_transactionId OBJ_id_cmc,5L + +#define SN_id_cmc_senderNonce "id-cmc-senderNonce" +#define NID_id_cmc_senderNonce 332 +#define OBJ_id_cmc_senderNonce OBJ_id_cmc,6L + +#define SN_id_cmc_recipientNonce "id-cmc-recipientNonce" +#define NID_id_cmc_recipientNonce 333 +#define OBJ_id_cmc_recipientNonce OBJ_id_cmc,7L + +#define SN_id_cmc_addExtensions "id-cmc-addExtensions" +#define NID_id_cmc_addExtensions 334 +#define OBJ_id_cmc_addExtensions OBJ_id_cmc,8L + +#define SN_id_cmc_encryptedPOP "id-cmc-encryptedPOP" +#define NID_id_cmc_encryptedPOP 335 +#define OBJ_id_cmc_encryptedPOP OBJ_id_cmc,9L + +#define SN_id_cmc_decryptedPOP "id-cmc-decryptedPOP" +#define NID_id_cmc_decryptedPOP 336 +#define OBJ_id_cmc_decryptedPOP OBJ_id_cmc,10L + +#define SN_id_cmc_lraPOPWitness "id-cmc-lraPOPWitness" +#define NID_id_cmc_lraPOPWitness 337 +#define OBJ_id_cmc_lraPOPWitness OBJ_id_cmc,11L + +#define SN_id_cmc_getCert "id-cmc-getCert" +#define NID_id_cmc_getCert 338 +#define OBJ_id_cmc_getCert OBJ_id_cmc,15L + +#define SN_id_cmc_getCRL "id-cmc-getCRL" +#define NID_id_cmc_getCRL 339 +#define OBJ_id_cmc_getCRL OBJ_id_cmc,16L + +#define SN_id_cmc_revokeRequest "id-cmc-revokeRequest" +#define NID_id_cmc_revokeRequest 340 +#define OBJ_id_cmc_revokeRequest OBJ_id_cmc,17L + +#define SN_id_cmc_regInfo "id-cmc-regInfo" +#define NID_id_cmc_regInfo 341 +#define OBJ_id_cmc_regInfo OBJ_id_cmc,18L + +#define SN_id_cmc_responseInfo "id-cmc-responseInfo" +#define NID_id_cmc_responseInfo 342 +#define OBJ_id_cmc_responseInfo OBJ_id_cmc,19L + +#define SN_id_cmc_queryPending "id-cmc-queryPending" +#define NID_id_cmc_queryPending 343 +#define OBJ_id_cmc_queryPending OBJ_id_cmc,21L + +#define SN_id_cmc_popLinkRandom "id-cmc-popLinkRandom" +#define NID_id_cmc_popLinkRandom 344 +#define OBJ_id_cmc_popLinkRandom OBJ_id_cmc,22L + +#define SN_id_cmc_popLinkWitness "id-cmc-popLinkWitness" +#define NID_id_cmc_popLinkWitness 345 +#define OBJ_id_cmc_popLinkWitness OBJ_id_cmc,23L + +#define SN_id_cmc_confirmCertAcceptance "id-cmc-confirmCertAcceptance" +#define NID_id_cmc_confirmCertAcceptance 346 +#define OBJ_id_cmc_confirmCertAcceptance OBJ_id_cmc,24L + +#define SN_id_on_personalData "id-on-personalData" +#define NID_id_on_personalData 347 +#define OBJ_id_on_personalData OBJ_id_on,1L + +#define SN_id_on_permanentIdentifier "id-on-permanentIdentifier" +#define LN_id_on_permanentIdentifier "Permanent Identifier" +#define NID_id_on_permanentIdentifier 858 +#define OBJ_id_on_permanentIdentifier OBJ_id_on,3L + +#define SN_id_pda_dateOfBirth "id-pda-dateOfBirth" +#define NID_id_pda_dateOfBirth 348 +#define OBJ_id_pda_dateOfBirth OBJ_id_pda,1L + +#define SN_id_pda_placeOfBirth "id-pda-placeOfBirth" +#define NID_id_pda_placeOfBirth 349 +#define OBJ_id_pda_placeOfBirth OBJ_id_pda,2L + +#define SN_id_pda_gender "id-pda-gender" +#define NID_id_pda_gender 351 +#define OBJ_id_pda_gender OBJ_id_pda,3L + +#define SN_id_pda_countryOfCitizenship "id-pda-countryOfCitizenship" +#define NID_id_pda_countryOfCitizenship 352 +#define OBJ_id_pda_countryOfCitizenship OBJ_id_pda,4L + +#define SN_id_pda_countryOfResidence "id-pda-countryOfResidence" +#define NID_id_pda_countryOfResidence 353 +#define OBJ_id_pda_countryOfResidence OBJ_id_pda,5L + +#define SN_id_aca_authenticationInfo "id-aca-authenticationInfo" +#define NID_id_aca_authenticationInfo 354 +#define OBJ_id_aca_authenticationInfo OBJ_id_aca,1L + +#define SN_id_aca_accessIdentity "id-aca-accessIdentity" +#define NID_id_aca_accessIdentity 355 +#define OBJ_id_aca_accessIdentity OBJ_id_aca,2L + +#define SN_id_aca_chargingIdentity "id-aca-chargingIdentity" +#define NID_id_aca_chargingIdentity 356 +#define OBJ_id_aca_chargingIdentity OBJ_id_aca,3L + +#define SN_id_aca_group "id-aca-group" +#define NID_id_aca_group 357 +#define OBJ_id_aca_group OBJ_id_aca,4L + +#define SN_id_aca_role "id-aca-role" +#define NID_id_aca_role 358 +#define OBJ_id_aca_role OBJ_id_aca,5L + +#define SN_id_aca_encAttrs "id-aca-encAttrs" +#define NID_id_aca_encAttrs 399 +#define OBJ_id_aca_encAttrs OBJ_id_aca,6L + +#define SN_id_qcs_pkixQCSyntax_v1 "id-qcs-pkixQCSyntax-v1" +#define NID_id_qcs_pkixQCSyntax_v1 359 +#define OBJ_id_qcs_pkixQCSyntax_v1 OBJ_id_qcs,1L + +#define SN_id_cct_crs "id-cct-crs" +#define NID_id_cct_crs 360 +#define OBJ_id_cct_crs OBJ_id_cct,1L + +#define SN_id_cct_PKIData "id-cct-PKIData" +#define NID_id_cct_PKIData 361 +#define OBJ_id_cct_PKIData OBJ_id_cct,2L + +#define SN_id_cct_PKIResponse "id-cct-PKIResponse" +#define NID_id_cct_PKIResponse 362 +#define OBJ_id_cct_PKIResponse OBJ_id_cct,3L + +#define SN_id_ppl_anyLanguage "id-ppl-anyLanguage" +#define LN_id_ppl_anyLanguage "Any language" +#define NID_id_ppl_anyLanguage 664 +#define OBJ_id_ppl_anyLanguage OBJ_id_ppl,0L + +#define SN_id_ppl_inheritAll "id-ppl-inheritAll" +#define LN_id_ppl_inheritAll "Inherit all" +#define NID_id_ppl_inheritAll 665 +#define OBJ_id_ppl_inheritAll OBJ_id_ppl,1L + +#define SN_Independent "id-ppl-independent" +#define LN_Independent "Independent" +#define NID_Independent 667 +#define OBJ_Independent OBJ_id_ppl,2L + +#define SN_ad_OCSP "OCSP" +#define LN_ad_OCSP "OCSP" +#define NID_ad_OCSP 178 +#define OBJ_ad_OCSP OBJ_id_ad,1L + +#define SN_ad_ca_issuers "caIssuers" +#define LN_ad_ca_issuers "CA Issuers" +#define NID_ad_ca_issuers 179 +#define OBJ_ad_ca_issuers OBJ_id_ad,2L + +#define SN_ad_timeStamping "ad_timestamping" +#define LN_ad_timeStamping "AD Time Stamping" +#define NID_ad_timeStamping 363 +#define OBJ_ad_timeStamping OBJ_id_ad,3L + +#define SN_ad_dvcs "AD_DVCS" +#define LN_ad_dvcs "ad dvcs" +#define NID_ad_dvcs 364 +#define OBJ_ad_dvcs OBJ_id_ad,4L + +#define SN_caRepository "caRepository" +#define LN_caRepository "CA Repository" +#define NID_caRepository 785 +#define OBJ_caRepository OBJ_id_ad,5L + +#define OBJ_id_pkix_OCSP OBJ_ad_OCSP + +#define SN_id_pkix_OCSP_basic "basicOCSPResponse" +#define LN_id_pkix_OCSP_basic "Basic OCSP Response" +#define NID_id_pkix_OCSP_basic 365 +#define OBJ_id_pkix_OCSP_basic OBJ_id_pkix_OCSP,1L + +#define SN_id_pkix_OCSP_Nonce "Nonce" +#define LN_id_pkix_OCSP_Nonce "OCSP Nonce" +#define NID_id_pkix_OCSP_Nonce 366 +#define OBJ_id_pkix_OCSP_Nonce OBJ_id_pkix_OCSP,2L + +#define SN_id_pkix_OCSP_CrlID "CrlID" +#define LN_id_pkix_OCSP_CrlID "OCSP CRL ID" +#define NID_id_pkix_OCSP_CrlID 367 +#define OBJ_id_pkix_OCSP_CrlID OBJ_id_pkix_OCSP,3L + +#define SN_id_pkix_OCSP_acceptableResponses "acceptableResponses" +#define LN_id_pkix_OCSP_acceptableResponses "Acceptable OCSP Responses" +#define NID_id_pkix_OCSP_acceptableResponses 368 +#define OBJ_id_pkix_OCSP_acceptableResponses OBJ_id_pkix_OCSP,4L + +#define SN_id_pkix_OCSP_noCheck "noCheck" +#define LN_id_pkix_OCSP_noCheck "OCSP No Check" +#define NID_id_pkix_OCSP_noCheck 369 +#define OBJ_id_pkix_OCSP_noCheck OBJ_id_pkix_OCSP,5L + +#define SN_id_pkix_OCSP_archiveCutoff "archiveCutoff" +#define LN_id_pkix_OCSP_archiveCutoff "OCSP Archive Cutoff" +#define NID_id_pkix_OCSP_archiveCutoff 370 +#define OBJ_id_pkix_OCSP_archiveCutoff OBJ_id_pkix_OCSP,6L + +#define SN_id_pkix_OCSP_serviceLocator "serviceLocator" +#define LN_id_pkix_OCSP_serviceLocator "OCSP Service Locator" +#define NID_id_pkix_OCSP_serviceLocator 371 +#define OBJ_id_pkix_OCSP_serviceLocator OBJ_id_pkix_OCSP,7L + +#define SN_id_pkix_OCSP_extendedStatus "extendedStatus" +#define LN_id_pkix_OCSP_extendedStatus "Extended OCSP Status" +#define NID_id_pkix_OCSP_extendedStatus 372 +#define OBJ_id_pkix_OCSP_extendedStatus OBJ_id_pkix_OCSP,8L + +#define SN_id_pkix_OCSP_valid "valid" +#define NID_id_pkix_OCSP_valid 373 +#define OBJ_id_pkix_OCSP_valid OBJ_id_pkix_OCSP,9L + +#define SN_id_pkix_OCSP_path "path" +#define NID_id_pkix_OCSP_path 374 +#define OBJ_id_pkix_OCSP_path OBJ_id_pkix_OCSP,10L + +#define SN_id_pkix_OCSP_trustRoot "trustRoot" +#define LN_id_pkix_OCSP_trustRoot "Trust Root" +#define NID_id_pkix_OCSP_trustRoot 375 +#define OBJ_id_pkix_OCSP_trustRoot OBJ_id_pkix_OCSP,11L + +#define SN_algorithm "algorithm" +#define LN_algorithm "algorithm" +#define NID_algorithm 376 +#define OBJ_algorithm 1L,3L,14L,3L,2L + +#define SN_md5WithRSA "RSA-NP-MD5" +#define LN_md5WithRSA "md5WithRSA" +#define NID_md5WithRSA 104 +#define OBJ_md5WithRSA OBJ_algorithm,3L + +#define SN_des_ecb "DES-ECB" +#define LN_des_ecb "des-ecb" +#define NID_des_ecb 29 +#define OBJ_des_ecb OBJ_algorithm,6L + +#define SN_des_cbc "DES-CBC" +#define LN_des_cbc "des-cbc" +#define NID_des_cbc 31 +#define OBJ_des_cbc OBJ_algorithm,7L + +#define SN_des_ofb64 "DES-OFB" +#define LN_des_ofb64 "des-ofb" +#define NID_des_ofb64 45 +#define OBJ_des_ofb64 OBJ_algorithm,8L + +#define SN_des_cfb64 "DES-CFB" +#define LN_des_cfb64 "des-cfb" +#define NID_des_cfb64 30 +#define OBJ_des_cfb64 OBJ_algorithm,9L + +#define SN_rsaSignature "rsaSignature" +#define NID_rsaSignature 377 +#define OBJ_rsaSignature OBJ_algorithm,11L + +#define SN_dsa_2 "DSA-old" +#define LN_dsa_2 "dsaEncryption-old" +#define NID_dsa_2 67 +#define OBJ_dsa_2 OBJ_algorithm,12L + +#define SN_dsaWithSHA "DSA-SHA" +#define LN_dsaWithSHA "dsaWithSHA" +#define NID_dsaWithSHA 66 +#define OBJ_dsaWithSHA OBJ_algorithm,13L + +#define SN_shaWithRSAEncryption "RSA-SHA" +#define LN_shaWithRSAEncryption "shaWithRSAEncryption" +#define NID_shaWithRSAEncryption 42 +#define OBJ_shaWithRSAEncryption OBJ_algorithm,15L + +#define SN_des_ede_ecb "DES-EDE" +#define LN_des_ede_ecb "des-ede" +#define NID_des_ede_ecb 32 +#define OBJ_des_ede_ecb OBJ_algorithm,17L + +#define SN_des_ede3_ecb "DES-EDE3" +#define LN_des_ede3_ecb "des-ede3" +#define NID_des_ede3_ecb 33 + +#define SN_des_ede_cbc "DES-EDE-CBC" +#define LN_des_ede_cbc "des-ede-cbc" +#define NID_des_ede_cbc 43 + +#define SN_des_ede_cfb64 "DES-EDE-CFB" +#define LN_des_ede_cfb64 "des-ede-cfb" +#define NID_des_ede_cfb64 60 + +#define SN_des_ede3_cfb64 "DES-EDE3-CFB" +#define LN_des_ede3_cfb64 "des-ede3-cfb" +#define NID_des_ede3_cfb64 61 + +#define SN_des_ede_ofb64 "DES-EDE-OFB" +#define LN_des_ede_ofb64 "des-ede-ofb" +#define NID_des_ede_ofb64 62 + +#define SN_des_ede3_ofb64 "DES-EDE3-OFB" +#define LN_des_ede3_ofb64 "des-ede3-ofb" +#define NID_des_ede3_ofb64 63 + +#define SN_desx_cbc "DESX-CBC" +#define LN_desx_cbc "desx-cbc" +#define NID_desx_cbc 80 + +#define SN_sha "SHA" +#define LN_sha "sha" +#define NID_sha 41 +#define OBJ_sha OBJ_algorithm,18L + +#define SN_sha1 "SHA1" +#define LN_sha1 "sha1" +#define NID_sha1 64 +#define OBJ_sha1 OBJ_algorithm,26L + +#define SN_dsaWithSHA1_2 "DSA-SHA1-old" +#define LN_dsaWithSHA1_2 "dsaWithSHA1-old" +#define NID_dsaWithSHA1_2 70 +#define OBJ_dsaWithSHA1_2 OBJ_algorithm,27L + +#define SN_sha1WithRSA "RSA-SHA1-2" +#define LN_sha1WithRSA "sha1WithRSA" +#define NID_sha1WithRSA 115 +#define OBJ_sha1WithRSA OBJ_algorithm,29L + +#define SN_ripemd160 "RIPEMD160" +#define LN_ripemd160 "ripemd160" +#define NID_ripemd160 117 +#define OBJ_ripemd160 1L,3L,36L,3L,2L,1L + +#define SN_ripemd160WithRSA "RSA-RIPEMD160" +#define LN_ripemd160WithRSA "ripemd160WithRSA" +#define NID_ripemd160WithRSA 119 +#define OBJ_ripemd160WithRSA 1L,3L,36L,3L,3L,1L,2L + +#define SN_sxnet "SXNetID" +#define LN_sxnet "Strong Extranet ID" +#define NID_sxnet 143 +#define OBJ_sxnet 1L,3L,101L,1L,4L,1L + +#define SN_X500 "X500" +#define LN_X500 "directory services (X.500)" +#define NID_X500 11 +#define OBJ_X500 2L,5L + +#define SN_X509 "X509" +#define NID_X509 12 +#define OBJ_X509 OBJ_X500,4L + +#define SN_commonName "CN" +#define LN_commonName "commonName" +#define NID_commonName 13 +#define OBJ_commonName OBJ_X509,3L + +#define SN_surname "SN" +#define LN_surname "surname" +#define NID_surname 100 +#define OBJ_surname OBJ_X509,4L + +#define LN_serialNumber "serialNumber" +#define NID_serialNumber 105 +#define OBJ_serialNumber OBJ_X509,5L + +#define SN_countryName "C" +#define LN_countryName "countryName" +#define NID_countryName 14 +#define OBJ_countryName OBJ_X509,6L + +#define SN_localityName "L" +#define LN_localityName "localityName" +#define NID_localityName 15 +#define OBJ_localityName OBJ_X509,7L + +#define SN_stateOrProvinceName "ST" +#define LN_stateOrProvinceName "stateOrProvinceName" +#define NID_stateOrProvinceName 16 +#define OBJ_stateOrProvinceName OBJ_X509,8L + +#define SN_streetAddress "street" +#define LN_streetAddress "streetAddress" +#define NID_streetAddress 660 +#define OBJ_streetAddress OBJ_X509,9L + +#define SN_organizationName "O" +#define LN_organizationName "organizationName" +#define NID_organizationName 17 +#define OBJ_organizationName OBJ_X509,10L + +#define SN_organizationalUnitName "OU" +#define LN_organizationalUnitName "organizationalUnitName" +#define NID_organizationalUnitName 18 +#define OBJ_organizationalUnitName OBJ_X509,11L + +#define SN_title "title" +#define LN_title "title" +#define NID_title 106 +#define OBJ_title OBJ_X509,12L + +#define LN_description "description" +#define NID_description 107 +#define OBJ_description OBJ_X509,13L + +#define LN_searchGuide "searchGuide" +#define NID_searchGuide 859 +#define OBJ_searchGuide OBJ_X509,14L + +#define LN_businessCategory "businessCategory" +#define NID_businessCategory 860 +#define OBJ_businessCategory OBJ_X509,15L + +#define LN_postalAddress "postalAddress" +#define NID_postalAddress 861 +#define OBJ_postalAddress OBJ_X509,16L + +#define LN_postalCode "postalCode" +#define NID_postalCode 661 +#define OBJ_postalCode OBJ_X509,17L + +#define LN_postOfficeBox "postOfficeBox" +#define NID_postOfficeBox 862 +#define OBJ_postOfficeBox OBJ_X509,18L + +#define LN_physicalDeliveryOfficeName "physicalDeliveryOfficeName" +#define NID_physicalDeliveryOfficeName 863 +#define OBJ_physicalDeliveryOfficeName OBJ_X509,19L + +#define LN_telephoneNumber "telephoneNumber" +#define NID_telephoneNumber 864 +#define OBJ_telephoneNumber OBJ_X509,20L + +#define LN_telexNumber "telexNumber" +#define NID_telexNumber 865 +#define OBJ_telexNumber OBJ_X509,21L + +#define LN_teletexTerminalIdentifier "teletexTerminalIdentifier" +#define NID_teletexTerminalIdentifier 866 +#define OBJ_teletexTerminalIdentifier OBJ_X509,22L + +#define LN_facsimileTelephoneNumber "facsimileTelephoneNumber" +#define NID_facsimileTelephoneNumber 867 +#define OBJ_facsimileTelephoneNumber OBJ_X509,23L + +#define LN_x121Address "x121Address" +#define NID_x121Address 868 +#define OBJ_x121Address OBJ_X509,24L + +#define LN_internationaliSDNNumber "internationaliSDNNumber" +#define NID_internationaliSDNNumber 869 +#define OBJ_internationaliSDNNumber OBJ_X509,25L + +#define LN_registeredAddress "registeredAddress" +#define NID_registeredAddress 870 +#define OBJ_registeredAddress OBJ_X509,26L + +#define LN_destinationIndicator "destinationIndicator" +#define NID_destinationIndicator 871 +#define OBJ_destinationIndicator OBJ_X509,27L + +#define LN_preferredDeliveryMethod "preferredDeliveryMethod" +#define NID_preferredDeliveryMethod 872 +#define OBJ_preferredDeliveryMethod OBJ_X509,28L + +#define LN_presentationAddress "presentationAddress" +#define NID_presentationAddress 873 +#define OBJ_presentationAddress OBJ_X509,29L + +#define LN_supportedApplicationContext "supportedApplicationContext" +#define NID_supportedApplicationContext 874 +#define OBJ_supportedApplicationContext OBJ_X509,30L + +#define SN_member "member" +#define NID_member 875 +#define OBJ_member OBJ_X509,31L + +#define SN_owner "owner" +#define NID_owner 876 +#define OBJ_owner OBJ_X509,32L + +#define LN_roleOccupant "roleOccupant" +#define NID_roleOccupant 877 +#define OBJ_roleOccupant OBJ_X509,33L + +#define SN_seeAlso "seeAlso" +#define NID_seeAlso 878 +#define OBJ_seeAlso OBJ_X509,34L + +#define LN_userPassword "userPassword" +#define NID_userPassword 879 +#define OBJ_userPassword OBJ_X509,35L + +#define LN_userCertificate "userCertificate" +#define NID_userCertificate 880 +#define OBJ_userCertificate OBJ_X509,36L + +#define LN_cACertificate "cACertificate" +#define NID_cACertificate 881 +#define OBJ_cACertificate OBJ_X509,37L + +#define LN_authorityRevocationList "authorityRevocationList" +#define NID_authorityRevocationList 882 +#define OBJ_authorityRevocationList OBJ_X509,38L + +#define LN_certificateRevocationList "certificateRevocationList" +#define NID_certificateRevocationList 883 +#define OBJ_certificateRevocationList OBJ_X509,39L + +#define LN_crossCertificatePair "crossCertificatePair" +#define NID_crossCertificatePair 884 +#define OBJ_crossCertificatePair OBJ_X509,40L + +#define SN_name "name" +#define LN_name "name" +#define NID_name 173 +#define OBJ_name OBJ_X509,41L + +#define SN_givenName "GN" +#define LN_givenName "givenName" +#define NID_givenName 99 +#define OBJ_givenName OBJ_X509,42L + +#define SN_initials "initials" +#define LN_initials "initials" +#define NID_initials 101 +#define OBJ_initials OBJ_X509,43L + +#define LN_generationQualifier "generationQualifier" +#define NID_generationQualifier 509 +#define OBJ_generationQualifier OBJ_X509,44L + +#define LN_x500UniqueIdentifier "x500UniqueIdentifier" +#define NID_x500UniqueIdentifier 503 +#define OBJ_x500UniqueIdentifier OBJ_X509,45L + +#define SN_dnQualifier "dnQualifier" +#define LN_dnQualifier "dnQualifier" +#define NID_dnQualifier 174 +#define OBJ_dnQualifier OBJ_X509,46L + +#define LN_enhancedSearchGuide "enhancedSearchGuide" +#define NID_enhancedSearchGuide 885 +#define OBJ_enhancedSearchGuide OBJ_X509,47L + +#define LN_protocolInformation "protocolInformation" +#define NID_protocolInformation 886 +#define OBJ_protocolInformation OBJ_X509,48L + +#define LN_distinguishedName "distinguishedName" +#define NID_distinguishedName 887 +#define OBJ_distinguishedName OBJ_X509,49L + +#define LN_uniqueMember "uniqueMember" +#define NID_uniqueMember 888 +#define OBJ_uniqueMember OBJ_X509,50L + +#define LN_houseIdentifier "houseIdentifier" +#define NID_houseIdentifier 889 +#define OBJ_houseIdentifier OBJ_X509,51L + +#define LN_supportedAlgorithms "supportedAlgorithms" +#define NID_supportedAlgorithms 890 +#define OBJ_supportedAlgorithms OBJ_X509,52L + +#define LN_deltaRevocationList "deltaRevocationList" +#define NID_deltaRevocationList 891 +#define OBJ_deltaRevocationList OBJ_X509,53L + +#define SN_dmdName "dmdName" +#define NID_dmdName 892 +#define OBJ_dmdName OBJ_X509,54L + +#define LN_pseudonym "pseudonym" +#define NID_pseudonym 510 +#define OBJ_pseudonym OBJ_X509,65L + +#define SN_role "role" +#define LN_role "role" +#define NID_role 400 +#define OBJ_role OBJ_X509,72L + +#define SN_X500algorithms "X500algorithms" +#define LN_X500algorithms "directory services - algorithms" +#define NID_X500algorithms 378 +#define OBJ_X500algorithms OBJ_X500,8L + +#define SN_rsa "RSA" +#define LN_rsa "rsa" +#define NID_rsa 19 +#define OBJ_rsa OBJ_X500algorithms,1L,1L + +#define SN_mdc2WithRSA "RSA-MDC2" +#define LN_mdc2WithRSA "mdc2WithRSA" +#define NID_mdc2WithRSA 96 +#define OBJ_mdc2WithRSA OBJ_X500algorithms,3L,100L + +#define SN_mdc2 "MDC2" +#define LN_mdc2 "mdc2" +#define NID_mdc2 95 +#define OBJ_mdc2 OBJ_X500algorithms,3L,101L + +#define SN_id_ce "id-ce" +#define NID_id_ce 81 +#define OBJ_id_ce OBJ_X500,29L + +#define SN_subject_directory_attributes "subjectDirectoryAttributes" +#define LN_subject_directory_attributes "X509v3 Subject Directory Attributes" +#define NID_subject_directory_attributes 769 +#define OBJ_subject_directory_attributes OBJ_id_ce,9L + +#define SN_subject_key_identifier "subjectKeyIdentifier" +#define LN_subject_key_identifier "X509v3 Subject Key Identifier" +#define NID_subject_key_identifier 82 +#define OBJ_subject_key_identifier OBJ_id_ce,14L + +#define SN_key_usage "keyUsage" +#define LN_key_usage "X509v3 Key Usage" +#define NID_key_usage 83 +#define OBJ_key_usage OBJ_id_ce,15L + +#define SN_private_key_usage_period "privateKeyUsagePeriod" +#define LN_private_key_usage_period "X509v3 Private Key Usage Period" +#define NID_private_key_usage_period 84 +#define OBJ_private_key_usage_period OBJ_id_ce,16L + +#define SN_subject_alt_name "subjectAltName" +#define LN_subject_alt_name "X509v3 Subject Alternative Name" +#define NID_subject_alt_name 85 +#define OBJ_subject_alt_name OBJ_id_ce,17L + +#define SN_issuer_alt_name "issuerAltName" +#define LN_issuer_alt_name "X509v3 Issuer Alternative Name" +#define NID_issuer_alt_name 86 +#define OBJ_issuer_alt_name OBJ_id_ce,18L + +#define SN_basic_constraints "basicConstraints" +#define LN_basic_constraints "X509v3 Basic Constraints" +#define NID_basic_constraints 87 +#define OBJ_basic_constraints OBJ_id_ce,19L + +#define SN_crl_number "crlNumber" +#define LN_crl_number "X509v3 CRL Number" +#define NID_crl_number 88 +#define OBJ_crl_number OBJ_id_ce,20L + +#define SN_crl_reason "CRLReason" +#define LN_crl_reason "X509v3 CRL Reason Code" +#define NID_crl_reason 141 +#define OBJ_crl_reason OBJ_id_ce,21L + +#define SN_invalidity_date "invalidityDate" +#define LN_invalidity_date "Invalidity Date" +#define NID_invalidity_date 142 +#define OBJ_invalidity_date OBJ_id_ce,24L + +#define SN_delta_crl "deltaCRL" +#define LN_delta_crl "X509v3 Delta CRL Indicator" +#define NID_delta_crl 140 +#define OBJ_delta_crl OBJ_id_ce,27L + +#define SN_issuing_distribution_point "issuingDistributionPoint" +#define LN_issuing_distribution_point "X509v3 Issuing Distrubution Point" +#define NID_issuing_distribution_point 770 +#define OBJ_issuing_distribution_point OBJ_id_ce,28L + +#define SN_certificate_issuer "certificateIssuer" +#define LN_certificate_issuer "X509v3 Certificate Issuer" +#define NID_certificate_issuer 771 +#define OBJ_certificate_issuer OBJ_id_ce,29L + +#define SN_name_constraints "nameConstraints" +#define LN_name_constraints "X509v3 Name Constraints" +#define NID_name_constraints 666 +#define OBJ_name_constraints OBJ_id_ce,30L + +#define SN_crl_distribution_points "crlDistributionPoints" +#define LN_crl_distribution_points "X509v3 CRL Distribution Points" +#define NID_crl_distribution_points 103 +#define OBJ_crl_distribution_points OBJ_id_ce,31L + +#define SN_certificate_policies "certificatePolicies" +#define LN_certificate_policies "X509v3 Certificate Policies" +#define NID_certificate_policies 89 +#define OBJ_certificate_policies OBJ_id_ce,32L + +#define SN_any_policy "anyPolicy" +#define LN_any_policy "X509v3 Any Policy" +#define NID_any_policy 746 +#define OBJ_any_policy OBJ_certificate_policies,0L + +#define SN_policy_mappings "policyMappings" +#define LN_policy_mappings "X509v3 Policy Mappings" +#define NID_policy_mappings 747 +#define OBJ_policy_mappings OBJ_id_ce,33L + +#define SN_authority_key_identifier "authorityKeyIdentifier" +#define LN_authority_key_identifier "X509v3 Authority Key Identifier" +#define NID_authority_key_identifier 90 +#define OBJ_authority_key_identifier OBJ_id_ce,35L + +#define SN_policy_constraints "policyConstraints" +#define LN_policy_constraints "X509v3 Policy Constraints" +#define NID_policy_constraints 401 +#define OBJ_policy_constraints OBJ_id_ce,36L + +#define SN_ext_key_usage "extendedKeyUsage" +#define LN_ext_key_usage "X509v3 Extended Key Usage" +#define NID_ext_key_usage 126 +#define OBJ_ext_key_usage OBJ_id_ce,37L + +#define SN_freshest_crl "freshestCRL" +#define LN_freshest_crl "X509v3 Freshest CRL" +#define NID_freshest_crl 857 +#define OBJ_freshest_crl OBJ_id_ce,46L + +#define SN_inhibit_any_policy "inhibitAnyPolicy" +#define LN_inhibit_any_policy "X509v3 Inhibit Any Policy" +#define NID_inhibit_any_policy 748 +#define OBJ_inhibit_any_policy OBJ_id_ce,54L + +#define SN_target_information "targetInformation" +#define LN_target_information "X509v3 AC Targeting" +#define NID_target_information 402 +#define OBJ_target_information OBJ_id_ce,55L + +#define SN_no_rev_avail "noRevAvail" +#define LN_no_rev_avail "X509v3 No Revocation Available" +#define NID_no_rev_avail 403 +#define OBJ_no_rev_avail OBJ_id_ce,56L + +#define SN_netscape "Netscape" +#define LN_netscape "Netscape Communications Corp." +#define NID_netscape 57 +#define OBJ_netscape 2L,16L,840L,1L,113730L + +#define SN_netscape_cert_extension "nsCertExt" +#define LN_netscape_cert_extension "Netscape Certificate Extension" +#define NID_netscape_cert_extension 58 +#define OBJ_netscape_cert_extension OBJ_netscape,1L + +#define SN_netscape_data_type "nsDataType" +#define LN_netscape_data_type "Netscape Data Type" +#define NID_netscape_data_type 59 +#define OBJ_netscape_data_type OBJ_netscape,2L + +#define SN_netscape_cert_type "nsCertType" +#define LN_netscape_cert_type "Netscape Cert Type" +#define NID_netscape_cert_type 71 +#define OBJ_netscape_cert_type OBJ_netscape_cert_extension,1L + +#define SN_netscape_base_url "nsBaseUrl" +#define LN_netscape_base_url "Netscape Base Url" +#define NID_netscape_base_url 72 +#define OBJ_netscape_base_url OBJ_netscape_cert_extension,2L + +#define SN_netscape_revocation_url "nsRevocationUrl" +#define LN_netscape_revocation_url "Netscape Revocation Url" +#define NID_netscape_revocation_url 73 +#define OBJ_netscape_revocation_url OBJ_netscape_cert_extension,3L + +#define SN_netscape_ca_revocation_url "nsCaRevocationUrl" +#define LN_netscape_ca_revocation_url "Netscape CA Revocation Url" +#define NID_netscape_ca_revocation_url 74 +#define OBJ_netscape_ca_revocation_url OBJ_netscape_cert_extension,4L + +#define SN_netscape_renewal_url "nsRenewalUrl" +#define LN_netscape_renewal_url "Netscape Renewal Url" +#define NID_netscape_renewal_url 75 +#define OBJ_netscape_renewal_url OBJ_netscape_cert_extension,7L + +#define SN_netscape_ca_policy_url "nsCaPolicyUrl" +#define LN_netscape_ca_policy_url "Netscape CA Policy Url" +#define NID_netscape_ca_policy_url 76 +#define OBJ_netscape_ca_policy_url OBJ_netscape_cert_extension,8L + +#define SN_netscape_ssl_server_name "nsSslServerName" +#define LN_netscape_ssl_server_name "Netscape SSL Server Name" +#define NID_netscape_ssl_server_name 77 +#define OBJ_netscape_ssl_server_name OBJ_netscape_cert_extension,12L + +#define SN_netscape_comment "nsComment" +#define LN_netscape_comment "Netscape Comment" +#define NID_netscape_comment 78 +#define OBJ_netscape_comment OBJ_netscape_cert_extension,13L + +#define SN_netscape_cert_sequence "nsCertSequence" +#define LN_netscape_cert_sequence "Netscape Certificate Sequence" +#define NID_netscape_cert_sequence 79 +#define OBJ_netscape_cert_sequence OBJ_netscape_data_type,5L + +#define SN_ns_sgc "nsSGC" +#define LN_ns_sgc "Netscape Server Gated Crypto" +#define NID_ns_sgc 139 +#define OBJ_ns_sgc OBJ_netscape,4L,1L + +#define SN_org "ORG" +#define LN_org "org" +#define NID_org 379 +#define OBJ_org OBJ_iso,3L + +#define SN_dod "DOD" +#define LN_dod "dod" +#define NID_dod 380 +#define OBJ_dod OBJ_org,6L + +#define SN_iana "IANA" +#define LN_iana "iana" +#define NID_iana 381 +#define OBJ_iana OBJ_dod,1L + +#define OBJ_internet OBJ_iana + +#define SN_Directory "directory" +#define LN_Directory "Directory" +#define NID_Directory 382 +#define OBJ_Directory OBJ_internet,1L + +#define SN_Management "mgmt" +#define LN_Management "Management" +#define NID_Management 383 +#define OBJ_Management OBJ_internet,2L + +#define SN_Experimental "experimental" +#define LN_Experimental "Experimental" +#define NID_Experimental 384 +#define OBJ_Experimental OBJ_internet,3L + +#define SN_Private "private" +#define LN_Private "Private" +#define NID_Private 385 +#define OBJ_Private OBJ_internet,4L + +#define SN_Security "security" +#define LN_Security "Security" +#define NID_Security 386 +#define OBJ_Security OBJ_internet,5L + +#define SN_SNMPv2 "snmpv2" +#define LN_SNMPv2 "SNMPv2" +#define NID_SNMPv2 387 +#define OBJ_SNMPv2 OBJ_internet,6L + +#define LN_Mail "Mail" +#define NID_Mail 388 +#define OBJ_Mail OBJ_internet,7L + +#define SN_Enterprises "enterprises" +#define LN_Enterprises "Enterprises" +#define NID_Enterprises 389 +#define OBJ_Enterprises OBJ_Private,1L + +#define SN_dcObject "dcobject" +#define LN_dcObject "dcObject" +#define NID_dcObject 390 +#define OBJ_dcObject OBJ_Enterprises,1466L,344L + +#define SN_mime_mhs "mime-mhs" +#define LN_mime_mhs "MIME MHS" +#define NID_mime_mhs 504 +#define OBJ_mime_mhs OBJ_Mail,1L + +#define SN_mime_mhs_headings "mime-mhs-headings" +#define LN_mime_mhs_headings "mime-mhs-headings" +#define NID_mime_mhs_headings 505 +#define OBJ_mime_mhs_headings OBJ_mime_mhs,1L + +#define SN_mime_mhs_bodies "mime-mhs-bodies" +#define LN_mime_mhs_bodies "mime-mhs-bodies" +#define NID_mime_mhs_bodies 506 +#define OBJ_mime_mhs_bodies OBJ_mime_mhs,2L + +#define SN_id_hex_partial_message "id-hex-partial-message" +#define LN_id_hex_partial_message "id-hex-partial-message" +#define NID_id_hex_partial_message 507 +#define OBJ_id_hex_partial_message OBJ_mime_mhs_headings,1L + +#define SN_id_hex_multipart_message "id-hex-multipart-message" +#define LN_id_hex_multipart_message "id-hex-multipart-message" +#define NID_id_hex_multipart_message 508 +#define OBJ_id_hex_multipart_message OBJ_mime_mhs_headings,2L + +#define SN_rle_compression "RLE" +#define LN_rle_compression "run length compression" +#define NID_rle_compression 124 +#define OBJ_rle_compression 1L,1L,1L,1L,666L,1L + +#define SN_zlib_compression "ZLIB" +#define LN_zlib_compression "zlib compression" +#define NID_zlib_compression 125 +#define OBJ_zlib_compression OBJ_id_smime_alg,8L + +#define OBJ_csor 2L,16L,840L,1L,101L,3L + +#define OBJ_nistAlgorithms OBJ_csor,4L + +#define OBJ_aes OBJ_nistAlgorithms,1L + +#define SN_aes_128_ecb "AES-128-ECB" +#define LN_aes_128_ecb "aes-128-ecb" +#define NID_aes_128_ecb 418 +#define OBJ_aes_128_ecb OBJ_aes,1L + +#define SN_aes_128_cbc "AES-128-CBC" +#define LN_aes_128_cbc "aes-128-cbc" +#define NID_aes_128_cbc 419 +#define OBJ_aes_128_cbc OBJ_aes,2L + +#define SN_aes_128_ofb128 "AES-128-OFB" +#define LN_aes_128_ofb128 "aes-128-ofb" +#define NID_aes_128_ofb128 420 +#define OBJ_aes_128_ofb128 OBJ_aes,3L + +#define SN_aes_128_cfb128 "AES-128-CFB" +#define LN_aes_128_cfb128 "aes-128-cfb" +#define NID_aes_128_cfb128 421 +#define OBJ_aes_128_cfb128 OBJ_aes,4L + +#define SN_aes_192_ecb "AES-192-ECB" +#define LN_aes_192_ecb "aes-192-ecb" +#define NID_aes_192_ecb 422 +#define OBJ_aes_192_ecb OBJ_aes,21L + +#define SN_aes_192_cbc "AES-192-CBC" +#define LN_aes_192_cbc "aes-192-cbc" +#define NID_aes_192_cbc 423 +#define OBJ_aes_192_cbc OBJ_aes,22L + +#define SN_aes_192_ofb128 "AES-192-OFB" +#define LN_aes_192_ofb128 "aes-192-ofb" +#define NID_aes_192_ofb128 424 +#define OBJ_aes_192_ofb128 OBJ_aes,23L + +#define SN_aes_192_cfb128 "AES-192-CFB" +#define LN_aes_192_cfb128 "aes-192-cfb" +#define NID_aes_192_cfb128 425 +#define OBJ_aes_192_cfb128 OBJ_aes,24L + +#define SN_aes_256_ecb "AES-256-ECB" +#define LN_aes_256_ecb "aes-256-ecb" +#define NID_aes_256_ecb 426 +#define OBJ_aes_256_ecb OBJ_aes,41L + +#define SN_aes_256_cbc "AES-256-CBC" +#define LN_aes_256_cbc "aes-256-cbc" +#define NID_aes_256_cbc 427 +#define OBJ_aes_256_cbc OBJ_aes,42L + +#define SN_aes_256_ofb128 "AES-256-OFB" +#define LN_aes_256_ofb128 "aes-256-ofb" +#define NID_aes_256_ofb128 428 +#define OBJ_aes_256_ofb128 OBJ_aes,43L + +#define SN_aes_256_cfb128 "AES-256-CFB" +#define LN_aes_256_cfb128 "aes-256-cfb" +#define NID_aes_256_cfb128 429 +#define OBJ_aes_256_cfb128 OBJ_aes,44L + +#define SN_aes_128_cfb1 "AES-128-CFB1" +#define LN_aes_128_cfb1 "aes-128-cfb1" +#define NID_aes_128_cfb1 650 + +#define SN_aes_192_cfb1 "AES-192-CFB1" +#define LN_aes_192_cfb1 "aes-192-cfb1" +#define NID_aes_192_cfb1 651 + +#define SN_aes_256_cfb1 "AES-256-CFB1" +#define LN_aes_256_cfb1 "aes-256-cfb1" +#define NID_aes_256_cfb1 652 + +#define SN_aes_128_cfb8 "AES-128-CFB8" +#define LN_aes_128_cfb8 "aes-128-cfb8" +#define NID_aes_128_cfb8 653 + +#define SN_aes_192_cfb8 "AES-192-CFB8" +#define LN_aes_192_cfb8 "aes-192-cfb8" +#define NID_aes_192_cfb8 654 + +#define SN_aes_256_cfb8 "AES-256-CFB8" +#define LN_aes_256_cfb8 "aes-256-cfb8" +#define NID_aes_256_cfb8 655 + +#define SN_des_cfb1 "DES-CFB1" +#define LN_des_cfb1 "des-cfb1" +#define NID_des_cfb1 656 + +#define SN_des_cfb8 "DES-CFB8" +#define LN_des_cfb8 "des-cfb8" +#define NID_des_cfb8 657 + +#define SN_des_ede3_cfb1 "DES-EDE3-CFB1" +#define LN_des_ede3_cfb1 "des-ede3-cfb1" +#define NID_des_ede3_cfb1 658 + +#define SN_des_ede3_cfb8 "DES-EDE3-CFB8" +#define LN_des_ede3_cfb8 "des-ede3-cfb8" +#define NID_des_ede3_cfb8 659 + +#define SN_id_aes128_wrap "id-aes128-wrap" +#define NID_id_aes128_wrap 788 +#define OBJ_id_aes128_wrap OBJ_aes,5L + +#define SN_id_aes192_wrap "id-aes192-wrap" +#define NID_id_aes192_wrap 789 +#define OBJ_id_aes192_wrap OBJ_aes,25L + +#define SN_id_aes256_wrap "id-aes256-wrap" +#define NID_id_aes256_wrap 790 +#define OBJ_id_aes256_wrap OBJ_aes,45L + +#define OBJ_nist_hashalgs OBJ_nistAlgorithms,2L + +#define SN_sha256 "SHA256" +#define LN_sha256 "sha256" +#define NID_sha256 672 +#define OBJ_sha256 OBJ_nist_hashalgs,1L + +#define SN_sha384 "SHA384" +#define LN_sha384 "sha384" +#define NID_sha384 673 +#define OBJ_sha384 OBJ_nist_hashalgs,2L + +#define SN_sha512 "SHA512" +#define LN_sha512 "sha512" +#define NID_sha512 674 +#define OBJ_sha512 OBJ_nist_hashalgs,3L + +#define SN_sha224 "SHA224" +#define LN_sha224 "sha224" +#define NID_sha224 675 +#define OBJ_sha224 OBJ_nist_hashalgs,4L + +#define OBJ_dsa_with_sha2 OBJ_nistAlgorithms,3L + +#define SN_dsa_with_SHA224 "dsa_with_SHA224" +#define NID_dsa_with_SHA224 802 +#define OBJ_dsa_with_SHA224 OBJ_dsa_with_sha2,1L + +#define SN_dsa_with_SHA256 "dsa_with_SHA256" +#define NID_dsa_with_SHA256 803 +#define OBJ_dsa_with_SHA256 OBJ_dsa_with_sha2,2L + +#define SN_hold_instruction_code "holdInstructionCode" +#define LN_hold_instruction_code "Hold Instruction Code" +#define NID_hold_instruction_code 430 +#define OBJ_hold_instruction_code OBJ_id_ce,23L + +#define OBJ_holdInstruction OBJ_X9_57,2L + +#define SN_hold_instruction_none "holdInstructionNone" +#define LN_hold_instruction_none "Hold Instruction None" +#define NID_hold_instruction_none 431 +#define OBJ_hold_instruction_none OBJ_holdInstruction,1L + +#define SN_hold_instruction_call_issuer "holdInstructionCallIssuer" +#define LN_hold_instruction_call_issuer "Hold Instruction Call Issuer" +#define NID_hold_instruction_call_issuer 432 +#define OBJ_hold_instruction_call_issuer OBJ_holdInstruction,2L + +#define SN_hold_instruction_reject "holdInstructionReject" +#define LN_hold_instruction_reject "Hold Instruction Reject" +#define NID_hold_instruction_reject 433 +#define OBJ_hold_instruction_reject OBJ_holdInstruction,3L + +#define SN_data "data" +#define NID_data 434 +#define OBJ_data OBJ_itu_t,9L + +#define SN_pss "pss" +#define NID_pss 435 +#define OBJ_pss OBJ_data,2342L + +#define SN_ucl "ucl" +#define NID_ucl 436 +#define OBJ_ucl OBJ_pss,19200300L + +#define SN_pilot "pilot" +#define NID_pilot 437 +#define OBJ_pilot OBJ_ucl,100L + +#define LN_pilotAttributeType "pilotAttributeType" +#define NID_pilotAttributeType 438 +#define OBJ_pilotAttributeType OBJ_pilot,1L + +#define LN_pilotAttributeSyntax "pilotAttributeSyntax" +#define NID_pilotAttributeSyntax 439 +#define OBJ_pilotAttributeSyntax OBJ_pilot,3L + +#define LN_pilotObjectClass "pilotObjectClass" +#define NID_pilotObjectClass 440 +#define OBJ_pilotObjectClass OBJ_pilot,4L + +#define LN_pilotGroups "pilotGroups" +#define NID_pilotGroups 441 +#define OBJ_pilotGroups OBJ_pilot,10L + +#define LN_iA5StringSyntax "iA5StringSyntax" +#define NID_iA5StringSyntax 442 +#define OBJ_iA5StringSyntax OBJ_pilotAttributeSyntax,4L + +#define LN_caseIgnoreIA5StringSyntax "caseIgnoreIA5StringSyntax" +#define NID_caseIgnoreIA5StringSyntax 443 +#define OBJ_caseIgnoreIA5StringSyntax OBJ_pilotAttributeSyntax,5L + +#define LN_pilotObject "pilotObject" +#define NID_pilotObject 444 +#define OBJ_pilotObject OBJ_pilotObjectClass,3L + +#define LN_pilotPerson "pilotPerson" +#define NID_pilotPerson 445 +#define OBJ_pilotPerson OBJ_pilotObjectClass,4L + +#define SN_account "account" +#define NID_account 446 +#define OBJ_account OBJ_pilotObjectClass,5L + +#define SN_document "document" +#define NID_document 447 +#define OBJ_document OBJ_pilotObjectClass,6L + +#define SN_room "room" +#define NID_room 448 +#define OBJ_room OBJ_pilotObjectClass,7L + +#define LN_documentSeries "documentSeries" +#define NID_documentSeries 449 +#define OBJ_documentSeries OBJ_pilotObjectClass,9L + +#define SN_Domain "domain" +#define LN_Domain "Domain" +#define NID_Domain 392 +#define OBJ_Domain OBJ_pilotObjectClass,13L + +#define LN_rFC822localPart "rFC822localPart" +#define NID_rFC822localPart 450 +#define OBJ_rFC822localPart OBJ_pilotObjectClass,14L + +#define LN_dNSDomain "dNSDomain" +#define NID_dNSDomain 451 +#define OBJ_dNSDomain OBJ_pilotObjectClass,15L + +#define LN_domainRelatedObject "domainRelatedObject" +#define NID_domainRelatedObject 452 +#define OBJ_domainRelatedObject OBJ_pilotObjectClass,17L + +#define LN_friendlyCountry "friendlyCountry" +#define NID_friendlyCountry 453 +#define OBJ_friendlyCountry OBJ_pilotObjectClass,18L + +#define LN_simpleSecurityObject "simpleSecurityObject" +#define NID_simpleSecurityObject 454 +#define OBJ_simpleSecurityObject OBJ_pilotObjectClass,19L + +#define LN_pilotOrganization "pilotOrganization" +#define NID_pilotOrganization 455 +#define OBJ_pilotOrganization OBJ_pilotObjectClass,20L + +#define LN_pilotDSA "pilotDSA" +#define NID_pilotDSA 456 +#define OBJ_pilotDSA OBJ_pilotObjectClass,21L + +#define LN_qualityLabelledData "qualityLabelledData" +#define NID_qualityLabelledData 457 +#define OBJ_qualityLabelledData OBJ_pilotObjectClass,22L + +#define SN_userId "UID" +#define LN_userId "userId" +#define NID_userId 458 +#define OBJ_userId OBJ_pilotAttributeType,1L + +#define LN_textEncodedORAddress "textEncodedORAddress" +#define NID_textEncodedORAddress 459 +#define OBJ_textEncodedORAddress OBJ_pilotAttributeType,2L + +#define SN_rfc822Mailbox "mail" +#define LN_rfc822Mailbox "rfc822Mailbox" +#define NID_rfc822Mailbox 460 +#define OBJ_rfc822Mailbox OBJ_pilotAttributeType,3L + +#define SN_info "info" +#define NID_info 461 +#define OBJ_info OBJ_pilotAttributeType,4L + +#define LN_favouriteDrink "favouriteDrink" +#define NID_favouriteDrink 462 +#define OBJ_favouriteDrink OBJ_pilotAttributeType,5L + +#define LN_roomNumber "roomNumber" +#define NID_roomNumber 463 +#define OBJ_roomNumber OBJ_pilotAttributeType,6L + +#define SN_photo "photo" +#define NID_photo 464 +#define OBJ_photo OBJ_pilotAttributeType,7L + +#define LN_userClass "userClass" +#define NID_userClass 465 +#define OBJ_userClass OBJ_pilotAttributeType,8L + +#define SN_host "host" +#define NID_host 466 +#define OBJ_host OBJ_pilotAttributeType,9L + +#define SN_manager "manager" +#define NID_manager 467 +#define OBJ_manager OBJ_pilotAttributeType,10L + +#define LN_documentIdentifier "documentIdentifier" +#define NID_documentIdentifier 468 +#define OBJ_documentIdentifier OBJ_pilotAttributeType,11L + +#define LN_documentTitle "documentTitle" +#define NID_documentTitle 469 +#define OBJ_documentTitle OBJ_pilotAttributeType,12L + +#define LN_documentVersion "documentVersion" +#define NID_documentVersion 470 +#define OBJ_documentVersion OBJ_pilotAttributeType,13L + +#define LN_documentAuthor "documentAuthor" +#define NID_documentAuthor 471 +#define OBJ_documentAuthor OBJ_pilotAttributeType,14L + +#define LN_documentLocation "documentLocation" +#define NID_documentLocation 472 +#define OBJ_documentLocation OBJ_pilotAttributeType,15L + +#define LN_homeTelephoneNumber "homeTelephoneNumber" +#define NID_homeTelephoneNumber 473 +#define OBJ_homeTelephoneNumber OBJ_pilotAttributeType,20L + +#define SN_secretary "secretary" +#define NID_secretary 474 +#define OBJ_secretary OBJ_pilotAttributeType,21L + +#define LN_otherMailbox "otherMailbox" +#define NID_otherMailbox 475 +#define OBJ_otherMailbox OBJ_pilotAttributeType,22L + +#define LN_lastModifiedTime "lastModifiedTime" +#define NID_lastModifiedTime 476 +#define OBJ_lastModifiedTime OBJ_pilotAttributeType,23L + +#define LN_lastModifiedBy "lastModifiedBy" +#define NID_lastModifiedBy 477 +#define OBJ_lastModifiedBy OBJ_pilotAttributeType,24L + +#define SN_domainComponent "DC" +#define LN_domainComponent "domainComponent" +#define NID_domainComponent 391 +#define OBJ_domainComponent OBJ_pilotAttributeType,25L + +#define LN_aRecord "aRecord" +#define NID_aRecord 478 +#define OBJ_aRecord OBJ_pilotAttributeType,26L + +#define LN_pilotAttributeType27 "pilotAttributeType27" +#define NID_pilotAttributeType27 479 +#define OBJ_pilotAttributeType27 OBJ_pilotAttributeType,27L + +#define LN_mXRecord "mXRecord" +#define NID_mXRecord 480 +#define OBJ_mXRecord OBJ_pilotAttributeType,28L + +#define LN_nSRecord "nSRecord" +#define NID_nSRecord 481 +#define OBJ_nSRecord OBJ_pilotAttributeType,29L + +#define LN_sOARecord "sOARecord" +#define NID_sOARecord 482 +#define OBJ_sOARecord OBJ_pilotAttributeType,30L + +#define LN_cNAMERecord "cNAMERecord" +#define NID_cNAMERecord 483 +#define OBJ_cNAMERecord OBJ_pilotAttributeType,31L + +#define LN_associatedDomain "associatedDomain" +#define NID_associatedDomain 484 +#define OBJ_associatedDomain OBJ_pilotAttributeType,37L + +#define LN_associatedName "associatedName" +#define NID_associatedName 485 +#define OBJ_associatedName OBJ_pilotAttributeType,38L + +#define LN_homePostalAddress "homePostalAddress" +#define NID_homePostalAddress 486 +#define OBJ_homePostalAddress OBJ_pilotAttributeType,39L + +#define LN_personalTitle "personalTitle" +#define NID_personalTitle 487 +#define OBJ_personalTitle OBJ_pilotAttributeType,40L + +#define LN_mobileTelephoneNumber "mobileTelephoneNumber" +#define NID_mobileTelephoneNumber 488 +#define OBJ_mobileTelephoneNumber OBJ_pilotAttributeType,41L + +#define LN_pagerTelephoneNumber "pagerTelephoneNumber" +#define NID_pagerTelephoneNumber 489 +#define OBJ_pagerTelephoneNumber OBJ_pilotAttributeType,42L + +#define LN_friendlyCountryName "friendlyCountryName" +#define NID_friendlyCountryName 490 +#define OBJ_friendlyCountryName OBJ_pilotAttributeType,43L + +#define LN_organizationalStatus "organizationalStatus" +#define NID_organizationalStatus 491 +#define OBJ_organizationalStatus OBJ_pilotAttributeType,45L + +#define LN_janetMailbox "janetMailbox" +#define NID_janetMailbox 492 +#define OBJ_janetMailbox OBJ_pilotAttributeType,46L + +#define LN_mailPreferenceOption "mailPreferenceOption" +#define NID_mailPreferenceOption 493 +#define OBJ_mailPreferenceOption OBJ_pilotAttributeType,47L + +#define LN_buildingName "buildingName" +#define NID_buildingName 494 +#define OBJ_buildingName OBJ_pilotAttributeType,48L + +#define LN_dSAQuality "dSAQuality" +#define NID_dSAQuality 495 +#define OBJ_dSAQuality OBJ_pilotAttributeType,49L + +#define LN_singleLevelQuality "singleLevelQuality" +#define NID_singleLevelQuality 496 +#define OBJ_singleLevelQuality OBJ_pilotAttributeType,50L + +#define LN_subtreeMinimumQuality "subtreeMinimumQuality" +#define NID_subtreeMinimumQuality 497 +#define OBJ_subtreeMinimumQuality OBJ_pilotAttributeType,51L + +#define LN_subtreeMaximumQuality "subtreeMaximumQuality" +#define NID_subtreeMaximumQuality 498 +#define OBJ_subtreeMaximumQuality OBJ_pilotAttributeType,52L + +#define LN_personalSignature "personalSignature" +#define NID_personalSignature 499 +#define OBJ_personalSignature OBJ_pilotAttributeType,53L + +#define LN_dITRedirect "dITRedirect" +#define NID_dITRedirect 500 +#define OBJ_dITRedirect OBJ_pilotAttributeType,54L + +#define SN_audio "audio" +#define NID_audio 501 +#define OBJ_audio OBJ_pilotAttributeType,55L + +#define LN_documentPublisher "documentPublisher" +#define NID_documentPublisher 502 +#define OBJ_documentPublisher OBJ_pilotAttributeType,56L + +#define SN_id_set "id-set" +#define LN_id_set "Secure Electronic Transactions" +#define NID_id_set 512 +#define OBJ_id_set OBJ_international_organizations,42L + +#define SN_set_ctype "set-ctype" +#define LN_set_ctype "content types" +#define NID_set_ctype 513 +#define OBJ_set_ctype OBJ_id_set,0L + +#define SN_set_msgExt "set-msgExt" +#define LN_set_msgExt "message extensions" +#define NID_set_msgExt 514 +#define OBJ_set_msgExt OBJ_id_set,1L + +#define SN_set_attr "set-attr" +#define NID_set_attr 515 +#define OBJ_set_attr OBJ_id_set,3L + +#define SN_set_policy "set-policy" +#define NID_set_policy 516 +#define OBJ_set_policy OBJ_id_set,5L + +#define SN_set_certExt "set-certExt" +#define LN_set_certExt "certificate extensions" +#define NID_set_certExt 517 +#define OBJ_set_certExt OBJ_id_set,7L + +#define SN_set_brand "set-brand" +#define NID_set_brand 518 +#define OBJ_set_brand OBJ_id_set,8L + +#define SN_setct_PANData "setct-PANData" +#define NID_setct_PANData 519 +#define OBJ_setct_PANData OBJ_set_ctype,0L + +#define SN_setct_PANToken "setct-PANToken" +#define NID_setct_PANToken 520 +#define OBJ_setct_PANToken OBJ_set_ctype,1L + +#define SN_setct_PANOnly "setct-PANOnly" +#define NID_setct_PANOnly 521 +#define OBJ_setct_PANOnly OBJ_set_ctype,2L + +#define SN_setct_OIData "setct-OIData" +#define NID_setct_OIData 522 +#define OBJ_setct_OIData OBJ_set_ctype,3L + +#define SN_setct_PI "setct-PI" +#define NID_setct_PI 523 +#define OBJ_setct_PI OBJ_set_ctype,4L + +#define SN_setct_PIData "setct-PIData" +#define NID_setct_PIData 524 +#define OBJ_setct_PIData OBJ_set_ctype,5L + +#define SN_setct_PIDataUnsigned "setct-PIDataUnsigned" +#define NID_setct_PIDataUnsigned 525 +#define OBJ_setct_PIDataUnsigned OBJ_set_ctype,6L + +#define SN_setct_HODInput "setct-HODInput" +#define NID_setct_HODInput 526 +#define OBJ_setct_HODInput OBJ_set_ctype,7L + +#define SN_setct_AuthResBaggage "setct-AuthResBaggage" +#define NID_setct_AuthResBaggage 527 +#define OBJ_setct_AuthResBaggage OBJ_set_ctype,8L + +#define SN_setct_AuthRevReqBaggage "setct-AuthRevReqBaggage" +#define NID_setct_AuthRevReqBaggage 528 +#define OBJ_setct_AuthRevReqBaggage OBJ_set_ctype,9L + +#define SN_setct_AuthRevResBaggage "setct-AuthRevResBaggage" +#define NID_setct_AuthRevResBaggage 529 +#define OBJ_setct_AuthRevResBaggage OBJ_set_ctype,10L + +#define SN_setct_CapTokenSeq "setct-CapTokenSeq" +#define NID_setct_CapTokenSeq 530 +#define OBJ_setct_CapTokenSeq OBJ_set_ctype,11L + +#define SN_setct_PInitResData "setct-PInitResData" +#define NID_setct_PInitResData 531 +#define OBJ_setct_PInitResData OBJ_set_ctype,12L + +#define SN_setct_PI_TBS "setct-PI-TBS" +#define NID_setct_PI_TBS 532 +#define OBJ_setct_PI_TBS OBJ_set_ctype,13L + +#define SN_setct_PResData "setct-PResData" +#define NID_setct_PResData 533 +#define OBJ_setct_PResData OBJ_set_ctype,14L + +#define SN_setct_AuthReqTBS "setct-AuthReqTBS" +#define NID_setct_AuthReqTBS 534 +#define OBJ_setct_AuthReqTBS OBJ_set_ctype,16L + +#define SN_setct_AuthResTBS "setct-AuthResTBS" +#define NID_setct_AuthResTBS 535 +#define OBJ_setct_AuthResTBS OBJ_set_ctype,17L + +#define SN_setct_AuthResTBSX "setct-AuthResTBSX" +#define NID_setct_AuthResTBSX 536 +#define OBJ_setct_AuthResTBSX OBJ_set_ctype,18L + +#define SN_setct_AuthTokenTBS "setct-AuthTokenTBS" +#define NID_setct_AuthTokenTBS 537 +#define OBJ_setct_AuthTokenTBS OBJ_set_ctype,19L + +#define SN_setct_CapTokenData "setct-CapTokenData" +#define NID_setct_CapTokenData 538 +#define OBJ_setct_CapTokenData OBJ_set_ctype,20L + +#define SN_setct_CapTokenTBS "setct-CapTokenTBS" +#define NID_setct_CapTokenTBS 539 +#define OBJ_setct_CapTokenTBS OBJ_set_ctype,21L + +#define SN_setct_AcqCardCodeMsg "setct-AcqCardCodeMsg" +#define NID_setct_AcqCardCodeMsg 540 +#define OBJ_setct_AcqCardCodeMsg OBJ_set_ctype,22L + +#define SN_setct_AuthRevReqTBS "setct-AuthRevReqTBS" +#define NID_setct_AuthRevReqTBS 541 +#define OBJ_setct_AuthRevReqTBS OBJ_set_ctype,23L + +#define SN_setct_AuthRevResData "setct-AuthRevResData" +#define NID_setct_AuthRevResData 542 +#define OBJ_setct_AuthRevResData OBJ_set_ctype,24L + +#define SN_setct_AuthRevResTBS "setct-AuthRevResTBS" +#define NID_setct_AuthRevResTBS 543 +#define OBJ_setct_AuthRevResTBS OBJ_set_ctype,25L + +#define SN_setct_CapReqTBS "setct-CapReqTBS" +#define NID_setct_CapReqTBS 544 +#define OBJ_setct_CapReqTBS OBJ_set_ctype,26L + +#define SN_setct_CapReqTBSX "setct-CapReqTBSX" +#define NID_setct_CapReqTBSX 545 +#define OBJ_setct_CapReqTBSX OBJ_set_ctype,27L + +#define SN_setct_CapResData "setct-CapResData" +#define NID_setct_CapResData 546 +#define OBJ_setct_CapResData OBJ_set_ctype,28L + +#define SN_setct_CapRevReqTBS "setct-CapRevReqTBS" +#define NID_setct_CapRevReqTBS 547 +#define OBJ_setct_CapRevReqTBS OBJ_set_ctype,29L + +#define SN_setct_CapRevReqTBSX "setct-CapRevReqTBSX" +#define NID_setct_CapRevReqTBSX 548 +#define OBJ_setct_CapRevReqTBSX OBJ_set_ctype,30L + +#define SN_setct_CapRevResData "setct-CapRevResData" +#define NID_setct_CapRevResData 549 +#define OBJ_setct_CapRevResData OBJ_set_ctype,31L + +#define SN_setct_CredReqTBS "setct-CredReqTBS" +#define NID_setct_CredReqTBS 550 +#define OBJ_setct_CredReqTBS OBJ_set_ctype,32L + +#define SN_setct_CredReqTBSX "setct-CredReqTBSX" +#define NID_setct_CredReqTBSX 551 +#define OBJ_setct_CredReqTBSX OBJ_set_ctype,33L + +#define SN_setct_CredResData "setct-CredResData" +#define NID_setct_CredResData 552 +#define OBJ_setct_CredResData OBJ_set_ctype,34L + +#define SN_setct_CredRevReqTBS "setct-CredRevReqTBS" +#define NID_setct_CredRevReqTBS 553 +#define OBJ_setct_CredRevReqTBS OBJ_set_ctype,35L + +#define SN_setct_CredRevReqTBSX "setct-CredRevReqTBSX" +#define NID_setct_CredRevReqTBSX 554 +#define OBJ_setct_CredRevReqTBSX OBJ_set_ctype,36L + +#define SN_setct_CredRevResData "setct-CredRevResData" +#define NID_setct_CredRevResData 555 +#define OBJ_setct_CredRevResData OBJ_set_ctype,37L + +#define SN_setct_PCertReqData "setct-PCertReqData" +#define NID_setct_PCertReqData 556 +#define OBJ_setct_PCertReqData OBJ_set_ctype,38L + +#define SN_setct_PCertResTBS "setct-PCertResTBS" +#define NID_setct_PCertResTBS 557 +#define OBJ_setct_PCertResTBS OBJ_set_ctype,39L + +#define SN_setct_BatchAdminReqData "setct-BatchAdminReqData" +#define NID_setct_BatchAdminReqData 558 +#define OBJ_setct_BatchAdminReqData OBJ_set_ctype,40L + +#define SN_setct_BatchAdminResData "setct-BatchAdminResData" +#define NID_setct_BatchAdminResData 559 +#define OBJ_setct_BatchAdminResData OBJ_set_ctype,41L + +#define SN_setct_CardCInitResTBS "setct-CardCInitResTBS" +#define NID_setct_CardCInitResTBS 560 +#define OBJ_setct_CardCInitResTBS OBJ_set_ctype,42L + +#define SN_setct_MeAqCInitResTBS "setct-MeAqCInitResTBS" +#define NID_setct_MeAqCInitResTBS 561 +#define OBJ_setct_MeAqCInitResTBS OBJ_set_ctype,43L + +#define SN_setct_RegFormResTBS "setct-RegFormResTBS" +#define NID_setct_RegFormResTBS 562 +#define OBJ_setct_RegFormResTBS OBJ_set_ctype,44L + +#define SN_setct_CertReqData "setct-CertReqData" +#define NID_setct_CertReqData 563 +#define OBJ_setct_CertReqData OBJ_set_ctype,45L + +#define SN_setct_CertReqTBS "setct-CertReqTBS" +#define NID_setct_CertReqTBS 564 +#define OBJ_setct_CertReqTBS OBJ_set_ctype,46L + +#define SN_setct_CertResData "setct-CertResData" +#define NID_setct_CertResData 565 +#define OBJ_setct_CertResData OBJ_set_ctype,47L + +#define SN_setct_CertInqReqTBS "setct-CertInqReqTBS" +#define NID_setct_CertInqReqTBS 566 +#define OBJ_setct_CertInqReqTBS OBJ_set_ctype,48L + +#define SN_setct_ErrorTBS "setct-ErrorTBS" +#define NID_setct_ErrorTBS 567 +#define OBJ_setct_ErrorTBS OBJ_set_ctype,49L + +#define SN_setct_PIDualSignedTBE "setct-PIDualSignedTBE" +#define NID_setct_PIDualSignedTBE 568 +#define OBJ_setct_PIDualSignedTBE OBJ_set_ctype,50L + +#define SN_setct_PIUnsignedTBE "setct-PIUnsignedTBE" +#define NID_setct_PIUnsignedTBE 569 +#define OBJ_setct_PIUnsignedTBE OBJ_set_ctype,51L + +#define SN_setct_AuthReqTBE "setct-AuthReqTBE" +#define NID_setct_AuthReqTBE 570 +#define OBJ_setct_AuthReqTBE OBJ_set_ctype,52L + +#define SN_setct_AuthResTBE "setct-AuthResTBE" +#define NID_setct_AuthResTBE 571 +#define OBJ_setct_AuthResTBE OBJ_set_ctype,53L + +#define SN_setct_AuthResTBEX "setct-AuthResTBEX" +#define NID_setct_AuthResTBEX 572 +#define OBJ_setct_AuthResTBEX OBJ_set_ctype,54L + +#define SN_setct_AuthTokenTBE "setct-AuthTokenTBE" +#define NID_setct_AuthTokenTBE 573 +#define OBJ_setct_AuthTokenTBE OBJ_set_ctype,55L + +#define SN_setct_CapTokenTBE "setct-CapTokenTBE" +#define NID_setct_CapTokenTBE 574 +#define OBJ_setct_CapTokenTBE OBJ_set_ctype,56L + +#define SN_setct_CapTokenTBEX "setct-CapTokenTBEX" +#define NID_setct_CapTokenTBEX 575 +#define OBJ_setct_CapTokenTBEX OBJ_set_ctype,57L + +#define SN_setct_AcqCardCodeMsgTBE "setct-AcqCardCodeMsgTBE" +#define NID_setct_AcqCardCodeMsgTBE 576 +#define OBJ_setct_AcqCardCodeMsgTBE OBJ_set_ctype,58L + +#define SN_setct_AuthRevReqTBE "setct-AuthRevReqTBE" +#define NID_setct_AuthRevReqTBE 577 +#define OBJ_setct_AuthRevReqTBE OBJ_set_ctype,59L + +#define SN_setct_AuthRevResTBE "setct-AuthRevResTBE" +#define NID_setct_AuthRevResTBE 578 +#define OBJ_setct_AuthRevResTBE OBJ_set_ctype,60L + +#define SN_setct_AuthRevResTBEB "setct-AuthRevResTBEB" +#define NID_setct_AuthRevResTBEB 579 +#define OBJ_setct_AuthRevResTBEB OBJ_set_ctype,61L + +#define SN_setct_CapReqTBE "setct-CapReqTBE" +#define NID_setct_CapReqTBE 580 +#define OBJ_setct_CapReqTBE OBJ_set_ctype,62L + +#define SN_setct_CapReqTBEX "setct-CapReqTBEX" +#define NID_setct_CapReqTBEX 581 +#define OBJ_setct_CapReqTBEX OBJ_set_ctype,63L + +#define SN_setct_CapResTBE "setct-CapResTBE" +#define NID_setct_CapResTBE 582 +#define OBJ_setct_CapResTBE OBJ_set_ctype,64L + +#define SN_setct_CapRevReqTBE "setct-CapRevReqTBE" +#define NID_setct_CapRevReqTBE 583 +#define OBJ_setct_CapRevReqTBE OBJ_set_ctype,65L + +#define SN_setct_CapRevReqTBEX "setct-CapRevReqTBEX" +#define NID_setct_CapRevReqTBEX 584 +#define OBJ_setct_CapRevReqTBEX OBJ_set_ctype,66L + +#define SN_setct_CapRevResTBE "setct-CapRevResTBE" +#define NID_setct_CapRevResTBE 585 +#define OBJ_setct_CapRevResTBE OBJ_set_ctype,67L + +#define SN_setct_CredReqTBE "setct-CredReqTBE" +#define NID_setct_CredReqTBE 586 +#define OBJ_setct_CredReqTBE OBJ_set_ctype,68L + +#define SN_setct_CredReqTBEX "setct-CredReqTBEX" +#define NID_setct_CredReqTBEX 587 +#define OBJ_setct_CredReqTBEX OBJ_set_ctype,69L + +#define SN_setct_CredResTBE "setct-CredResTBE" +#define NID_setct_CredResTBE 588 +#define OBJ_setct_CredResTBE OBJ_set_ctype,70L + +#define SN_setct_CredRevReqTBE "setct-CredRevReqTBE" +#define NID_setct_CredRevReqTBE 589 +#define OBJ_setct_CredRevReqTBE OBJ_set_ctype,71L + +#define SN_setct_CredRevReqTBEX "setct-CredRevReqTBEX" +#define NID_setct_CredRevReqTBEX 590 +#define OBJ_setct_CredRevReqTBEX OBJ_set_ctype,72L + +#define SN_setct_CredRevResTBE "setct-CredRevResTBE" +#define NID_setct_CredRevResTBE 591 +#define OBJ_setct_CredRevResTBE OBJ_set_ctype,73L + +#define SN_setct_BatchAdminReqTBE "setct-BatchAdminReqTBE" +#define NID_setct_BatchAdminReqTBE 592 +#define OBJ_setct_BatchAdminReqTBE OBJ_set_ctype,74L + +#define SN_setct_BatchAdminResTBE "setct-BatchAdminResTBE" +#define NID_setct_BatchAdminResTBE 593 +#define OBJ_setct_BatchAdminResTBE OBJ_set_ctype,75L + +#define SN_setct_RegFormReqTBE "setct-RegFormReqTBE" +#define NID_setct_RegFormReqTBE 594 +#define OBJ_setct_RegFormReqTBE OBJ_set_ctype,76L + +#define SN_setct_CertReqTBE "setct-CertReqTBE" +#define NID_setct_CertReqTBE 595 +#define OBJ_setct_CertReqTBE OBJ_set_ctype,77L + +#define SN_setct_CertReqTBEX "setct-CertReqTBEX" +#define NID_setct_CertReqTBEX 596 +#define OBJ_setct_CertReqTBEX OBJ_set_ctype,78L + +#define SN_setct_CertResTBE "setct-CertResTBE" +#define NID_setct_CertResTBE 597 +#define OBJ_setct_CertResTBE OBJ_set_ctype,79L + +#define SN_setct_CRLNotificationTBS "setct-CRLNotificationTBS" +#define NID_setct_CRLNotificationTBS 598 +#define OBJ_setct_CRLNotificationTBS OBJ_set_ctype,80L + +#define SN_setct_CRLNotificationResTBS "setct-CRLNotificationResTBS" +#define NID_setct_CRLNotificationResTBS 599 +#define OBJ_setct_CRLNotificationResTBS OBJ_set_ctype,81L + +#define SN_setct_BCIDistributionTBS "setct-BCIDistributionTBS" +#define NID_setct_BCIDistributionTBS 600 +#define OBJ_setct_BCIDistributionTBS OBJ_set_ctype,82L + +#define SN_setext_genCrypt "setext-genCrypt" +#define LN_setext_genCrypt "generic cryptogram" +#define NID_setext_genCrypt 601 +#define OBJ_setext_genCrypt OBJ_set_msgExt,1L + +#define SN_setext_miAuth "setext-miAuth" +#define LN_setext_miAuth "merchant initiated auth" +#define NID_setext_miAuth 602 +#define OBJ_setext_miAuth OBJ_set_msgExt,3L + +#define SN_setext_pinSecure "setext-pinSecure" +#define NID_setext_pinSecure 603 +#define OBJ_setext_pinSecure OBJ_set_msgExt,4L + +#define SN_setext_pinAny "setext-pinAny" +#define NID_setext_pinAny 604 +#define OBJ_setext_pinAny OBJ_set_msgExt,5L + +#define SN_setext_track2 "setext-track2" +#define NID_setext_track2 605 +#define OBJ_setext_track2 OBJ_set_msgExt,7L + +#define SN_setext_cv "setext-cv" +#define LN_setext_cv "additional verification" +#define NID_setext_cv 606 +#define OBJ_setext_cv OBJ_set_msgExt,8L + +#define SN_set_policy_root "set-policy-root" +#define NID_set_policy_root 607 +#define OBJ_set_policy_root OBJ_set_policy,0L + +#define SN_setCext_hashedRoot "setCext-hashedRoot" +#define NID_setCext_hashedRoot 608 +#define OBJ_setCext_hashedRoot OBJ_set_certExt,0L + +#define SN_setCext_certType "setCext-certType" +#define NID_setCext_certType 609 +#define OBJ_setCext_certType OBJ_set_certExt,1L + +#define SN_setCext_merchData "setCext-merchData" +#define NID_setCext_merchData 610 +#define OBJ_setCext_merchData OBJ_set_certExt,2L + +#define SN_setCext_cCertRequired "setCext-cCertRequired" +#define NID_setCext_cCertRequired 611 +#define OBJ_setCext_cCertRequired OBJ_set_certExt,3L + +#define SN_setCext_tunneling "setCext-tunneling" +#define NID_setCext_tunneling 612 +#define OBJ_setCext_tunneling OBJ_set_certExt,4L + +#define SN_setCext_setExt "setCext-setExt" +#define NID_setCext_setExt 613 +#define OBJ_setCext_setExt OBJ_set_certExt,5L + +#define SN_setCext_setQualf "setCext-setQualf" +#define NID_setCext_setQualf 614 +#define OBJ_setCext_setQualf OBJ_set_certExt,6L + +#define SN_setCext_PGWYcapabilities "setCext-PGWYcapabilities" +#define NID_setCext_PGWYcapabilities 615 +#define OBJ_setCext_PGWYcapabilities OBJ_set_certExt,7L + +#define SN_setCext_TokenIdentifier "setCext-TokenIdentifier" +#define NID_setCext_TokenIdentifier 616 +#define OBJ_setCext_TokenIdentifier OBJ_set_certExt,8L + +#define SN_setCext_Track2Data "setCext-Track2Data" +#define NID_setCext_Track2Data 617 +#define OBJ_setCext_Track2Data OBJ_set_certExt,9L + +#define SN_setCext_TokenType "setCext-TokenType" +#define NID_setCext_TokenType 618 +#define OBJ_setCext_TokenType OBJ_set_certExt,10L + +#define SN_setCext_IssuerCapabilities "setCext-IssuerCapabilities" +#define NID_setCext_IssuerCapabilities 619 +#define OBJ_setCext_IssuerCapabilities OBJ_set_certExt,11L + +#define SN_setAttr_Cert "setAttr-Cert" +#define NID_setAttr_Cert 620 +#define OBJ_setAttr_Cert OBJ_set_attr,0L + +#define SN_setAttr_PGWYcap "setAttr-PGWYcap" +#define LN_setAttr_PGWYcap "payment gateway capabilities" +#define NID_setAttr_PGWYcap 621 +#define OBJ_setAttr_PGWYcap OBJ_set_attr,1L + +#define SN_setAttr_TokenType "setAttr-TokenType" +#define NID_setAttr_TokenType 622 +#define OBJ_setAttr_TokenType OBJ_set_attr,2L + +#define SN_setAttr_IssCap "setAttr-IssCap" +#define LN_setAttr_IssCap "issuer capabilities" +#define NID_setAttr_IssCap 623 +#define OBJ_setAttr_IssCap OBJ_set_attr,3L + +#define SN_set_rootKeyThumb "set-rootKeyThumb" +#define NID_set_rootKeyThumb 624 +#define OBJ_set_rootKeyThumb OBJ_setAttr_Cert,0L + +#define SN_set_addPolicy "set-addPolicy" +#define NID_set_addPolicy 625 +#define OBJ_set_addPolicy OBJ_setAttr_Cert,1L + +#define SN_setAttr_Token_EMV "setAttr-Token-EMV" +#define NID_setAttr_Token_EMV 626 +#define OBJ_setAttr_Token_EMV OBJ_setAttr_TokenType,1L + +#define SN_setAttr_Token_B0Prime "setAttr-Token-B0Prime" +#define NID_setAttr_Token_B0Prime 627 +#define OBJ_setAttr_Token_B0Prime OBJ_setAttr_TokenType,2L + +#define SN_setAttr_IssCap_CVM "setAttr-IssCap-CVM" +#define NID_setAttr_IssCap_CVM 628 +#define OBJ_setAttr_IssCap_CVM OBJ_setAttr_IssCap,3L + +#define SN_setAttr_IssCap_T2 "setAttr-IssCap-T2" +#define NID_setAttr_IssCap_T2 629 +#define OBJ_setAttr_IssCap_T2 OBJ_setAttr_IssCap,4L + +#define SN_setAttr_IssCap_Sig "setAttr-IssCap-Sig" +#define NID_setAttr_IssCap_Sig 630 +#define OBJ_setAttr_IssCap_Sig OBJ_setAttr_IssCap,5L + +#define SN_setAttr_GenCryptgrm "setAttr-GenCryptgrm" +#define LN_setAttr_GenCryptgrm "generate cryptogram" +#define NID_setAttr_GenCryptgrm 631 +#define OBJ_setAttr_GenCryptgrm OBJ_setAttr_IssCap_CVM,1L + +#define SN_setAttr_T2Enc "setAttr-T2Enc" +#define LN_setAttr_T2Enc "encrypted track 2" +#define NID_setAttr_T2Enc 632 +#define OBJ_setAttr_T2Enc OBJ_setAttr_IssCap_T2,1L + +#define SN_setAttr_T2cleartxt "setAttr-T2cleartxt" +#define LN_setAttr_T2cleartxt "cleartext track 2" +#define NID_setAttr_T2cleartxt 633 +#define OBJ_setAttr_T2cleartxt OBJ_setAttr_IssCap_T2,2L + +#define SN_setAttr_TokICCsig "setAttr-TokICCsig" +#define LN_setAttr_TokICCsig "ICC or token signature" +#define NID_setAttr_TokICCsig 634 +#define OBJ_setAttr_TokICCsig OBJ_setAttr_IssCap_Sig,1L + +#define SN_setAttr_SecDevSig "setAttr-SecDevSig" +#define LN_setAttr_SecDevSig "secure device signature" +#define NID_setAttr_SecDevSig 635 +#define OBJ_setAttr_SecDevSig OBJ_setAttr_IssCap_Sig,2L + +#define SN_set_brand_IATA_ATA "set-brand-IATA-ATA" +#define NID_set_brand_IATA_ATA 636 +#define OBJ_set_brand_IATA_ATA OBJ_set_brand,1L + +#define SN_set_brand_Diners "set-brand-Diners" +#define NID_set_brand_Diners 637 +#define OBJ_set_brand_Diners OBJ_set_brand,30L + +#define SN_set_brand_AmericanExpress "set-brand-AmericanExpress" +#define NID_set_brand_AmericanExpress 638 +#define OBJ_set_brand_AmericanExpress OBJ_set_brand,34L + +#define SN_set_brand_JCB "set-brand-JCB" +#define NID_set_brand_JCB 639 +#define OBJ_set_brand_JCB OBJ_set_brand,35L + +#define SN_set_brand_Visa "set-brand-Visa" +#define NID_set_brand_Visa 640 +#define OBJ_set_brand_Visa OBJ_set_brand,4L + +#define SN_set_brand_MasterCard "set-brand-MasterCard" +#define NID_set_brand_MasterCard 641 +#define OBJ_set_brand_MasterCard OBJ_set_brand,5L + +#define SN_set_brand_Novus "set-brand-Novus" +#define NID_set_brand_Novus 642 +#define OBJ_set_brand_Novus OBJ_set_brand,6011L + +#define SN_des_cdmf "DES-CDMF" +#define LN_des_cdmf "des-cdmf" +#define NID_des_cdmf 643 +#define OBJ_des_cdmf OBJ_rsadsi,3L,10L + +#define SN_rsaOAEPEncryptionSET "rsaOAEPEncryptionSET" +#define NID_rsaOAEPEncryptionSET 644 +#define OBJ_rsaOAEPEncryptionSET OBJ_rsadsi,1L,1L,6L + +#define SN_ipsec3 "Oakley-EC2N-3" +#define LN_ipsec3 "ipsec3" +#define NID_ipsec3 749 + +#define SN_ipsec4 "Oakley-EC2N-4" +#define LN_ipsec4 "ipsec4" +#define NID_ipsec4 750 + +#define SN_whirlpool "whirlpool" +#define NID_whirlpool 804 +#define OBJ_whirlpool OBJ_iso,0L,10118L,3L,0L,55L + +#define SN_cryptopro "cryptopro" +#define NID_cryptopro 805 +#define OBJ_cryptopro OBJ_member_body,643L,2L,2L + +#define SN_cryptocom "cryptocom" +#define NID_cryptocom 806 +#define OBJ_cryptocom OBJ_member_body,643L,2L,9L + +#define SN_id_GostR3411_94_with_GostR3410_2001 "id-GostR3411-94-with-GostR3410-2001" +#define LN_id_GostR3411_94_with_GostR3410_2001 "GOST R 34.11-94 with GOST R 34.10-2001" +#define NID_id_GostR3411_94_with_GostR3410_2001 807 +#define OBJ_id_GostR3411_94_with_GostR3410_2001 OBJ_cryptopro,3L + +#define SN_id_GostR3411_94_with_GostR3410_94 "id-GostR3411-94-with-GostR3410-94" +#define LN_id_GostR3411_94_with_GostR3410_94 "GOST R 34.11-94 with GOST R 34.10-94" +#define NID_id_GostR3411_94_with_GostR3410_94 808 +#define OBJ_id_GostR3411_94_with_GostR3410_94 OBJ_cryptopro,4L + +#define SN_id_GostR3411_94 "md_gost94" +#define LN_id_GostR3411_94 "GOST R 34.11-94" +#define NID_id_GostR3411_94 809 +#define OBJ_id_GostR3411_94 OBJ_cryptopro,9L + +#define SN_id_HMACGostR3411_94 "id-HMACGostR3411-94" +#define LN_id_HMACGostR3411_94 "HMAC GOST 34.11-94" +#define NID_id_HMACGostR3411_94 810 +#define OBJ_id_HMACGostR3411_94 OBJ_cryptopro,10L + +#define SN_id_GostR3410_2001 "gost2001" +#define LN_id_GostR3410_2001 "GOST R 34.10-2001" +#define NID_id_GostR3410_2001 811 +#define OBJ_id_GostR3410_2001 OBJ_cryptopro,19L + +#define SN_id_GostR3410_94 "gost94" +#define LN_id_GostR3410_94 "GOST R 34.10-94" +#define NID_id_GostR3410_94 812 +#define OBJ_id_GostR3410_94 OBJ_cryptopro,20L + +#define SN_id_Gost28147_89 "gost89" +#define LN_id_Gost28147_89 "GOST 28147-89" +#define NID_id_Gost28147_89 813 +#define OBJ_id_Gost28147_89 OBJ_cryptopro,21L + +#define SN_gost89_cnt "gost89-cnt" +#define NID_gost89_cnt 814 + +#define SN_id_Gost28147_89_MAC "gost-mac" +#define LN_id_Gost28147_89_MAC "GOST 28147-89 MAC" +#define NID_id_Gost28147_89_MAC 815 +#define OBJ_id_Gost28147_89_MAC OBJ_cryptopro,22L + +#define SN_id_GostR3411_94_prf "prf-gostr3411-94" +#define LN_id_GostR3411_94_prf "GOST R 34.11-94 PRF" +#define NID_id_GostR3411_94_prf 816 +#define OBJ_id_GostR3411_94_prf OBJ_cryptopro,23L + +#define SN_id_GostR3410_2001DH "id-GostR3410-2001DH" +#define LN_id_GostR3410_2001DH "GOST R 34.10-2001 DH" +#define NID_id_GostR3410_2001DH 817 +#define OBJ_id_GostR3410_2001DH OBJ_cryptopro,98L + +#define SN_id_GostR3410_94DH "id-GostR3410-94DH" +#define LN_id_GostR3410_94DH "GOST R 34.10-94 DH" +#define NID_id_GostR3410_94DH 818 +#define OBJ_id_GostR3410_94DH OBJ_cryptopro,99L + +#define SN_id_Gost28147_89_CryptoPro_KeyMeshing "id-Gost28147-89-CryptoPro-KeyMeshing" +#define NID_id_Gost28147_89_CryptoPro_KeyMeshing 819 +#define OBJ_id_Gost28147_89_CryptoPro_KeyMeshing OBJ_cryptopro,14L,1L + +#define SN_id_Gost28147_89_None_KeyMeshing "id-Gost28147-89-None-KeyMeshing" +#define NID_id_Gost28147_89_None_KeyMeshing 820 +#define OBJ_id_Gost28147_89_None_KeyMeshing OBJ_cryptopro,14L,0L + +#define SN_id_GostR3411_94_TestParamSet "id-GostR3411-94-TestParamSet" +#define NID_id_GostR3411_94_TestParamSet 821 +#define OBJ_id_GostR3411_94_TestParamSet OBJ_cryptopro,30L,0L + +#define SN_id_GostR3411_94_CryptoProParamSet "id-GostR3411-94-CryptoProParamSet" +#define NID_id_GostR3411_94_CryptoProParamSet 822 +#define OBJ_id_GostR3411_94_CryptoProParamSet OBJ_cryptopro,30L,1L + +#define SN_id_Gost28147_89_TestParamSet "id-Gost28147-89-TestParamSet" +#define NID_id_Gost28147_89_TestParamSet 823 +#define OBJ_id_Gost28147_89_TestParamSet OBJ_cryptopro,31L,0L + +#define SN_id_Gost28147_89_CryptoPro_A_ParamSet "id-Gost28147-89-CryptoPro-A-ParamSet" +#define NID_id_Gost28147_89_CryptoPro_A_ParamSet 824 +#define OBJ_id_Gost28147_89_CryptoPro_A_ParamSet OBJ_cryptopro,31L,1L + +#define SN_id_Gost28147_89_CryptoPro_B_ParamSet "id-Gost28147-89-CryptoPro-B-ParamSet" +#define NID_id_Gost28147_89_CryptoPro_B_ParamSet 825 +#define OBJ_id_Gost28147_89_CryptoPro_B_ParamSet OBJ_cryptopro,31L,2L + +#define SN_id_Gost28147_89_CryptoPro_C_ParamSet "id-Gost28147-89-CryptoPro-C-ParamSet" +#define NID_id_Gost28147_89_CryptoPro_C_ParamSet 826 +#define OBJ_id_Gost28147_89_CryptoPro_C_ParamSet OBJ_cryptopro,31L,3L + +#define SN_id_Gost28147_89_CryptoPro_D_ParamSet "id-Gost28147-89-CryptoPro-D-ParamSet" +#define NID_id_Gost28147_89_CryptoPro_D_ParamSet 827 +#define OBJ_id_Gost28147_89_CryptoPro_D_ParamSet OBJ_cryptopro,31L,4L + +#define SN_id_Gost28147_89_CryptoPro_Oscar_1_1_ParamSet "id-Gost28147-89-CryptoPro-Oscar-1-1-ParamSet" +#define NID_id_Gost28147_89_CryptoPro_Oscar_1_1_ParamSet 828 +#define OBJ_id_Gost28147_89_CryptoPro_Oscar_1_1_ParamSet OBJ_cryptopro,31L,5L + +#define SN_id_Gost28147_89_CryptoPro_Oscar_1_0_ParamSet "id-Gost28147-89-CryptoPro-Oscar-1-0-ParamSet" +#define NID_id_Gost28147_89_CryptoPro_Oscar_1_0_ParamSet 829 +#define OBJ_id_Gost28147_89_CryptoPro_Oscar_1_0_ParamSet OBJ_cryptopro,31L,6L + +#define SN_id_Gost28147_89_CryptoPro_RIC_1_ParamSet "id-Gost28147-89-CryptoPro-RIC-1-ParamSet" +#define NID_id_Gost28147_89_CryptoPro_RIC_1_ParamSet 830 +#define OBJ_id_Gost28147_89_CryptoPro_RIC_1_ParamSet OBJ_cryptopro,31L,7L + +#define SN_id_GostR3410_94_TestParamSet "id-GostR3410-94-TestParamSet" +#define NID_id_GostR3410_94_TestParamSet 831 +#define OBJ_id_GostR3410_94_TestParamSet OBJ_cryptopro,32L,0L + +#define SN_id_GostR3410_94_CryptoPro_A_ParamSet "id-GostR3410-94-CryptoPro-A-ParamSet" +#define NID_id_GostR3410_94_CryptoPro_A_ParamSet 832 +#define OBJ_id_GostR3410_94_CryptoPro_A_ParamSet OBJ_cryptopro,32L,2L + +#define SN_id_GostR3410_94_CryptoPro_B_ParamSet "id-GostR3410-94-CryptoPro-B-ParamSet" +#define NID_id_GostR3410_94_CryptoPro_B_ParamSet 833 +#define OBJ_id_GostR3410_94_CryptoPro_B_ParamSet OBJ_cryptopro,32L,3L + +#define SN_id_GostR3410_94_CryptoPro_C_ParamSet "id-GostR3410-94-CryptoPro-C-ParamSet" +#define NID_id_GostR3410_94_CryptoPro_C_ParamSet 834 +#define OBJ_id_GostR3410_94_CryptoPro_C_ParamSet OBJ_cryptopro,32L,4L + +#define SN_id_GostR3410_94_CryptoPro_D_ParamSet "id-GostR3410-94-CryptoPro-D-ParamSet" +#define NID_id_GostR3410_94_CryptoPro_D_ParamSet 835 +#define OBJ_id_GostR3410_94_CryptoPro_D_ParamSet OBJ_cryptopro,32L,5L + +#define SN_id_GostR3410_94_CryptoPro_XchA_ParamSet "id-GostR3410-94-CryptoPro-XchA-ParamSet" +#define NID_id_GostR3410_94_CryptoPro_XchA_ParamSet 836 +#define OBJ_id_GostR3410_94_CryptoPro_XchA_ParamSet OBJ_cryptopro,33L,1L + +#define SN_id_GostR3410_94_CryptoPro_XchB_ParamSet "id-GostR3410-94-CryptoPro-XchB-ParamSet" +#define NID_id_GostR3410_94_CryptoPro_XchB_ParamSet 837 +#define OBJ_id_GostR3410_94_CryptoPro_XchB_ParamSet OBJ_cryptopro,33L,2L + +#define SN_id_GostR3410_94_CryptoPro_XchC_ParamSet "id-GostR3410-94-CryptoPro-XchC-ParamSet" +#define NID_id_GostR3410_94_CryptoPro_XchC_ParamSet 838 +#define OBJ_id_GostR3410_94_CryptoPro_XchC_ParamSet OBJ_cryptopro,33L,3L + +#define SN_id_GostR3410_2001_TestParamSet "id-GostR3410-2001-TestParamSet" +#define NID_id_GostR3410_2001_TestParamSet 839 +#define OBJ_id_GostR3410_2001_TestParamSet OBJ_cryptopro,35L,0L + +#define SN_id_GostR3410_2001_CryptoPro_A_ParamSet "id-GostR3410-2001-CryptoPro-A-ParamSet" +#define NID_id_GostR3410_2001_CryptoPro_A_ParamSet 840 +#define OBJ_id_GostR3410_2001_CryptoPro_A_ParamSet OBJ_cryptopro,35L,1L + +#define SN_id_GostR3410_2001_CryptoPro_B_ParamSet "id-GostR3410-2001-CryptoPro-B-ParamSet" +#define NID_id_GostR3410_2001_CryptoPro_B_ParamSet 841 +#define OBJ_id_GostR3410_2001_CryptoPro_B_ParamSet OBJ_cryptopro,35L,2L + +#define SN_id_GostR3410_2001_CryptoPro_C_ParamSet "id-GostR3410-2001-CryptoPro-C-ParamSet" +#define NID_id_GostR3410_2001_CryptoPro_C_ParamSet 842 +#define OBJ_id_GostR3410_2001_CryptoPro_C_ParamSet OBJ_cryptopro,35L,3L + +#define SN_id_GostR3410_2001_CryptoPro_XchA_ParamSet "id-GostR3410-2001-CryptoPro-XchA-ParamSet" +#define NID_id_GostR3410_2001_CryptoPro_XchA_ParamSet 843 +#define OBJ_id_GostR3410_2001_CryptoPro_XchA_ParamSet OBJ_cryptopro,36L,0L + +#define SN_id_GostR3410_2001_CryptoPro_XchB_ParamSet "id-GostR3410-2001-CryptoPro-XchB-ParamSet" +#define NID_id_GostR3410_2001_CryptoPro_XchB_ParamSet 844 +#define OBJ_id_GostR3410_2001_CryptoPro_XchB_ParamSet OBJ_cryptopro,36L,1L + +#define SN_id_GostR3410_94_a "id-GostR3410-94-a" +#define NID_id_GostR3410_94_a 845 +#define OBJ_id_GostR3410_94_a OBJ_id_GostR3410_94,1L + +#define SN_id_GostR3410_94_aBis "id-GostR3410-94-aBis" +#define NID_id_GostR3410_94_aBis 846 +#define OBJ_id_GostR3410_94_aBis OBJ_id_GostR3410_94,2L + +#define SN_id_GostR3410_94_b "id-GostR3410-94-b" +#define NID_id_GostR3410_94_b 847 +#define OBJ_id_GostR3410_94_b OBJ_id_GostR3410_94,3L + +#define SN_id_GostR3410_94_bBis "id-GostR3410-94-bBis" +#define NID_id_GostR3410_94_bBis 848 +#define OBJ_id_GostR3410_94_bBis OBJ_id_GostR3410_94,4L + +#define SN_id_Gost28147_89_cc "id-Gost28147-89-cc" +#define LN_id_Gost28147_89_cc "GOST 28147-89 Cryptocom ParamSet" +#define NID_id_Gost28147_89_cc 849 +#define OBJ_id_Gost28147_89_cc OBJ_cryptocom,1L,6L,1L + +#define SN_id_GostR3410_94_cc "gost94cc" +#define LN_id_GostR3410_94_cc "GOST 34.10-94 Cryptocom" +#define NID_id_GostR3410_94_cc 850 +#define OBJ_id_GostR3410_94_cc OBJ_cryptocom,1L,5L,3L + +#define SN_id_GostR3410_2001_cc "gost2001cc" +#define LN_id_GostR3410_2001_cc "GOST 34.10-2001 Cryptocom" +#define NID_id_GostR3410_2001_cc 851 +#define OBJ_id_GostR3410_2001_cc OBJ_cryptocom,1L,5L,4L + +#define SN_id_GostR3411_94_with_GostR3410_94_cc "id-GostR3411-94-with-GostR3410-94-cc" +#define LN_id_GostR3411_94_with_GostR3410_94_cc "GOST R 34.11-94 with GOST R 34.10-94 Cryptocom" +#define NID_id_GostR3411_94_with_GostR3410_94_cc 852 +#define OBJ_id_GostR3411_94_with_GostR3410_94_cc OBJ_cryptocom,1L,3L,3L + +#define SN_id_GostR3411_94_with_GostR3410_2001_cc "id-GostR3411-94-with-GostR3410-2001-cc" +#define LN_id_GostR3411_94_with_GostR3410_2001_cc "GOST R 34.11-94 with GOST R 34.10-2001 Cryptocom" +#define NID_id_GostR3411_94_with_GostR3410_2001_cc 853 +#define OBJ_id_GostR3411_94_with_GostR3410_2001_cc OBJ_cryptocom,1L,3L,4L + +#define SN_id_GostR3410_2001_ParamSet_cc "id-GostR3410-2001-ParamSet-cc" +#define LN_id_GostR3410_2001_ParamSet_cc "GOST R 3410-2001 Parameter Set Cryptocom" +#define NID_id_GostR3410_2001_ParamSet_cc 854 +#define OBJ_id_GostR3410_2001_ParamSet_cc OBJ_cryptocom,1L,8L,1L + +#define SN_camellia_128_cbc "CAMELLIA-128-CBC" +#define LN_camellia_128_cbc "camellia-128-cbc" +#define NID_camellia_128_cbc 751 +#define OBJ_camellia_128_cbc 1L,2L,392L,200011L,61L,1L,1L,1L,2L + +#define SN_camellia_192_cbc "CAMELLIA-192-CBC" +#define LN_camellia_192_cbc "camellia-192-cbc" +#define NID_camellia_192_cbc 752 +#define OBJ_camellia_192_cbc 1L,2L,392L,200011L,61L,1L,1L,1L,3L + +#define SN_camellia_256_cbc "CAMELLIA-256-CBC" +#define LN_camellia_256_cbc "camellia-256-cbc" +#define NID_camellia_256_cbc 753 +#define OBJ_camellia_256_cbc 1L,2L,392L,200011L,61L,1L,1L,1L,4L + +#define OBJ_ntt_ds 0L,3L,4401L,5L + +#define OBJ_camellia OBJ_ntt_ds,3L,1L,9L + +#define SN_camellia_128_ecb "CAMELLIA-128-ECB" +#define LN_camellia_128_ecb "camellia-128-ecb" +#define NID_camellia_128_ecb 754 +#define OBJ_camellia_128_ecb OBJ_camellia,1L + +#define SN_camellia_128_ofb128 "CAMELLIA-128-OFB" +#define LN_camellia_128_ofb128 "camellia-128-ofb" +#define NID_camellia_128_ofb128 766 +#define OBJ_camellia_128_ofb128 OBJ_camellia,3L + +#define SN_camellia_128_cfb128 "CAMELLIA-128-CFB" +#define LN_camellia_128_cfb128 "camellia-128-cfb" +#define NID_camellia_128_cfb128 757 +#define OBJ_camellia_128_cfb128 OBJ_camellia,4L + +#define SN_camellia_192_ecb "CAMELLIA-192-ECB" +#define LN_camellia_192_ecb "camellia-192-ecb" +#define NID_camellia_192_ecb 755 +#define OBJ_camellia_192_ecb OBJ_camellia,21L + +#define SN_camellia_192_ofb128 "CAMELLIA-192-OFB" +#define LN_camellia_192_ofb128 "camellia-192-ofb" +#define NID_camellia_192_ofb128 767 +#define OBJ_camellia_192_ofb128 OBJ_camellia,23L + +#define SN_camellia_192_cfb128 "CAMELLIA-192-CFB" +#define LN_camellia_192_cfb128 "camellia-192-cfb" +#define NID_camellia_192_cfb128 758 +#define OBJ_camellia_192_cfb128 OBJ_camellia,24L + +#define SN_camellia_256_ecb "CAMELLIA-256-ECB" +#define LN_camellia_256_ecb "camellia-256-ecb" +#define NID_camellia_256_ecb 756 +#define OBJ_camellia_256_ecb OBJ_camellia,41L + +#define SN_camellia_256_ofb128 "CAMELLIA-256-OFB" +#define LN_camellia_256_ofb128 "camellia-256-ofb" +#define NID_camellia_256_ofb128 768 +#define OBJ_camellia_256_ofb128 OBJ_camellia,43L + +#define SN_camellia_256_cfb128 "CAMELLIA-256-CFB" +#define LN_camellia_256_cfb128 "camellia-256-cfb" +#define NID_camellia_256_cfb128 759 +#define OBJ_camellia_256_cfb128 OBJ_camellia,44L + +#define SN_camellia_128_cfb1 "CAMELLIA-128-CFB1" +#define LN_camellia_128_cfb1 "camellia-128-cfb1" +#define NID_camellia_128_cfb1 760 + +#define SN_camellia_192_cfb1 "CAMELLIA-192-CFB1" +#define LN_camellia_192_cfb1 "camellia-192-cfb1" +#define NID_camellia_192_cfb1 761 + +#define SN_camellia_256_cfb1 "CAMELLIA-256-CFB1" +#define LN_camellia_256_cfb1 "camellia-256-cfb1" +#define NID_camellia_256_cfb1 762 + +#define SN_camellia_128_cfb8 "CAMELLIA-128-CFB8" +#define LN_camellia_128_cfb8 "camellia-128-cfb8" +#define NID_camellia_128_cfb8 763 + +#define SN_camellia_192_cfb8 "CAMELLIA-192-CFB8" +#define LN_camellia_192_cfb8 "camellia-192-cfb8" +#define NID_camellia_192_cfb8 764 + +#define SN_camellia_256_cfb8 "CAMELLIA-256-CFB8" +#define LN_camellia_256_cfb8 "camellia-256-cfb8" +#define NID_camellia_256_cfb8 765 + +#define SN_kisa "KISA" +#define LN_kisa "kisa" +#define NID_kisa 773 +#define OBJ_kisa OBJ_member_body,410L,200004L + +#define SN_seed_ecb "SEED-ECB" +#define LN_seed_ecb "seed-ecb" +#define NID_seed_ecb 776 +#define OBJ_seed_ecb OBJ_kisa,1L,3L + +#define SN_seed_cbc "SEED-CBC" +#define LN_seed_cbc "seed-cbc" +#define NID_seed_cbc 777 +#define OBJ_seed_cbc OBJ_kisa,1L,4L + +#define SN_seed_cfb128 "SEED-CFB" +#define LN_seed_cfb128 "seed-cfb" +#define NID_seed_cfb128 779 +#define OBJ_seed_cfb128 OBJ_kisa,1L,5L + +#define SN_seed_ofb128 "SEED-OFB" +#define LN_seed_ofb128 "seed-ofb" +#define NID_seed_ofb128 778 +#define OBJ_seed_ofb128 OBJ_kisa,1L,6L + +#define SN_hmac "HMAC" +#define LN_hmac "hmac" +#define NID_hmac 855 + diff --git a/extra_lib/include/openssl/objects.h b/extra_lib/include/openssl/objects.h new file mode 100644 index 0000000..bd0ee52 --- /dev/null +++ b/extra_lib/include/openssl/objects.h @@ -0,0 +1,1138 @@ +/* crypto/objects/objects.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 AUTHOR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_OBJECTS_H +#define HEADER_OBJECTS_H + +#define USE_OBJ_MAC + +#ifdef USE_OBJ_MAC +#include +#else +#define SN_undef "UNDEF" +#define LN_undef "undefined" +#define NID_undef 0 +#define OBJ_undef 0L + +#define SN_Algorithm "Algorithm" +#define LN_algorithm "algorithm" +#define NID_algorithm 38 +#define OBJ_algorithm 1L,3L,14L,3L,2L + +#define LN_rsadsi "rsadsi" +#define NID_rsadsi 1 +#define OBJ_rsadsi 1L,2L,840L,113549L + +#define LN_pkcs "pkcs" +#define NID_pkcs 2 +#define OBJ_pkcs OBJ_rsadsi,1L + +#define SN_md2 "MD2" +#define LN_md2 "md2" +#define NID_md2 3 +#define OBJ_md2 OBJ_rsadsi,2L,2L + +#define SN_md5 "MD5" +#define LN_md5 "md5" +#define NID_md5 4 +#define OBJ_md5 OBJ_rsadsi,2L,5L + +#define SN_rc4 "RC4" +#define LN_rc4 "rc4" +#define NID_rc4 5 +#define OBJ_rc4 OBJ_rsadsi,3L,4L + +#define LN_rsaEncryption "rsaEncryption" +#define NID_rsaEncryption 6 +#define OBJ_rsaEncryption OBJ_pkcs,1L,1L + +#define SN_md2WithRSAEncryption "RSA-MD2" +#define LN_md2WithRSAEncryption "md2WithRSAEncryption" +#define NID_md2WithRSAEncryption 7 +#define OBJ_md2WithRSAEncryption OBJ_pkcs,1L,2L + +#define SN_md5WithRSAEncryption "RSA-MD5" +#define LN_md5WithRSAEncryption "md5WithRSAEncryption" +#define NID_md5WithRSAEncryption 8 +#define OBJ_md5WithRSAEncryption OBJ_pkcs,1L,4L + +#define SN_pbeWithMD2AndDES_CBC "PBE-MD2-DES" +#define LN_pbeWithMD2AndDES_CBC "pbeWithMD2AndDES-CBC" +#define NID_pbeWithMD2AndDES_CBC 9 +#define OBJ_pbeWithMD2AndDES_CBC OBJ_pkcs,5L,1L + +#define SN_pbeWithMD5AndDES_CBC "PBE-MD5-DES" +#define LN_pbeWithMD5AndDES_CBC "pbeWithMD5AndDES-CBC" +#define NID_pbeWithMD5AndDES_CBC 10 +#define OBJ_pbeWithMD5AndDES_CBC OBJ_pkcs,5L,3L + +#define LN_X500 "X500" +#define NID_X500 11 +#define OBJ_X500 2L,5L + +#define LN_X509 "X509" +#define NID_X509 12 +#define OBJ_X509 OBJ_X500,4L + +#define SN_commonName "CN" +#define LN_commonName "commonName" +#define NID_commonName 13 +#define OBJ_commonName OBJ_X509,3L + +#define SN_countryName "C" +#define LN_countryName "countryName" +#define NID_countryName 14 +#define OBJ_countryName OBJ_X509,6L + +#define SN_localityName "L" +#define LN_localityName "localityName" +#define NID_localityName 15 +#define OBJ_localityName OBJ_X509,7L + +/* Postal Address? PA */ + +/* should be "ST" (rfc1327) but MS uses 'S' */ +#define SN_stateOrProvinceName "ST" +#define LN_stateOrProvinceName "stateOrProvinceName" +#define NID_stateOrProvinceName 16 +#define OBJ_stateOrProvinceName OBJ_X509,8L + +#define SN_organizationName "O" +#define LN_organizationName "organizationName" +#define NID_organizationName 17 +#define OBJ_organizationName OBJ_X509,10L + +#define SN_organizationalUnitName "OU" +#define LN_organizationalUnitName "organizationalUnitName" +#define NID_organizationalUnitName 18 +#define OBJ_organizationalUnitName OBJ_X509,11L + +#define SN_rsa "RSA" +#define LN_rsa "rsa" +#define NID_rsa 19 +#define OBJ_rsa OBJ_X500,8L,1L,1L + +#define LN_pkcs7 "pkcs7" +#define NID_pkcs7 20 +#define OBJ_pkcs7 OBJ_pkcs,7L + +#define LN_pkcs7_data "pkcs7-data" +#define NID_pkcs7_data 21 +#define OBJ_pkcs7_data OBJ_pkcs7,1L + +#define LN_pkcs7_signed "pkcs7-signedData" +#define NID_pkcs7_signed 22 +#define OBJ_pkcs7_signed OBJ_pkcs7,2L + +#define LN_pkcs7_enveloped "pkcs7-envelopedData" +#define NID_pkcs7_enveloped 23 +#define OBJ_pkcs7_enveloped OBJ_pkcs7,3L + +#define LN_pkcs7_signedAndEnveloped "pkcs7-signedAndEnvelopedData" +#define NID_pkcs7_signedAndEnveloped 24 +#define OBJ_pkcs7_signedAndEnveloped OBJ_pkcs7,4L + +#define LN_pkcs7_digest "pkcs7-digestData" +#define NID_pkcs7_digest 25 +#define OBJ_pkcs7_digest OBJ_pkcs7,5L + +#define LN_pkcs7_encrypted "pkcs7-encryptedData" +#define NID_pkcs7_encrypted 26 +#define OBJ_pkcs7_encrypted OBJ_pkcs7,6L + +#define LN_pkcs3 "pkcs3" +#define NID_pkcs3 27 +#define OBJ_pkcs3 OBJ_pkcs,3L + +#define LN_dhKeyAgreement "dhKeyAgreement" +#define NID_dhKeyAgreement 28 +#define OBJ_dhKeyAgreement OBJ_pkcs3,1L + +#define SN_des_ecb "DES-ECB" +#define LN_des_ecb "des-ecb" +#define NID_des_ecb 29 +#define OBJ_des_ecb OBJ_algorithm,6L + +#define SN_des_cfb64 "DES-CFB" +#define LN_des_cfb64 "des-cfb" +#define NID_des_cfb64 30 +/* IV + num */ +#define OBJ_des_cfb64 OBJ_algorithm,9L + +#define SN_des_cbc "DES-CBC" +#define LN_des_cbc "des-cbc" +#define NID_des_cbc 31 +/* IV */ +#define OBJ_des_cbc OBJ_algorithm,7L + +#define SN_des_ede "DES-EDE" +#define LN_des_ede "des-ede" +#define NID_des_ede 32 +/* ?? */ +#define OBJ_des_ede OBJ_algorithm,17L + +#define SN_des_ede3 "DES-EDE3" +#define LN_des_ede3 "des-ede3" +#define NID_des_ede3 33 + +#define SN_idea_cbc "IDEA-CBC" +#define LN_idea_cbc "idea-cbc" +#define NID_idea_cbc 34 +#define OBJ_idea_cbc 1L,3L,6L,1L,4L,1L,188L,7L,1L,1L,2L + +#define SN_idea_cfb64 "IDEA-CFB" +#define LN_idea_cfb64 "idea-cfb" +#define NID_idea_cfb64 35 + +#define SN_idea_ecb "IDEA-ECB" +#define LN_idea_ecb "idea-ecb" +#define NID_idea_ecb 36 + +#define SN_rc2_cbc "RC2-CBC" +#define LN_rc2_cbc "rc2-cbc" +#define NID_rc2_cbc 37 +#define OBJ_rc2_cbc OBJ_rsadsi,3L,2L + +#define SN_rc2_ecb "RC2-ECB" +#define LN_rc2_ecb "rc2-ecb" +#define NID_rc2_ecb 38 + +#define SN_rc2_cfb64 "RC2-CFB" +#define LN_rc2_cfb64 "rc2-cfb" +#define NID_rc2_cfb64 39 + +#define SN_rc2_ofb64 "RC2-OFB" +#define LN_rc2_ofb64 "rc2-ofb" +#define NID_rc2_ofb64 40 + +#define SN_sha "SHA" +#define LN_sha "sha" +#define NID_sha 41 +#define OBJ_sha OBJ_algorithm,18L + +#define SN_shaWithRSAEncryption "RSA-SHA" +#define LN_shaWithRSAEncryption "shaWithRSAEncryption" +#define NID_shaWithRSAEncryption 42 +#define OBJ_shaWithRSAEncryption OBJ_algorithm,15L + +#define SN_des_ede_cbc "DES-EDE-CBC" +#define LN_des_ede_cbc "des-ede-cbc" +#define NID_des_ede_cbc 43 + +#define SN_des_ede3_cbc "DES-EDE3-CBC" +#define LN_des_ede3_cbc "des-ede3-cbc" +#define NID_des_ede3_cbc 44 +#define OBJ_des_ede3_cbc OBJ_rsadsi,3L,7L + +#define SN_des_ofb64 "DES-OFB" +#define LN_des_ofb64 "des-ofb" +#define NID_des_ofb64 45 +#define OBJ_des_ofb64 OBJ_algorithm,8L + +#define SN_idea_ofb64 "IDEA-OFB" +#define LN_idea_ofb64 "idea-ofb" +#define NID_idea_ofb64 46 + +#define LN_pkcs9 "pkcs9" +#define NID_pkcs9 47 +#define OBJ_pkcs9 OBJ_pkcs,9L + +#define SN_pkcs9_emailAddress "Email" +#define LN_pkcs9_emailAddress "emailAddress" +#define NID_pkcs9_emailAddress 48 +#define OBJ_pkcs9_emailAddress OBJ_pkcs9,1L + +#define LN_pkcs9_unstructuredName "unstructuredName" +#define NID_pkcs9_unstructuredName 49 +#define OBJ_pkcs9_unstructuredName OBJ_pkcs9,2L + +#define LN_pkcs9_contentType "contentType" +#define NID_pkcs9_contentType 50 +#define OBJ_pkcs9_contentType OBJ_pkcs9,3L + +#define LN_pkcs9_messageDigest "messageDigest" +#define NID_pkcs9_messageDigest 51 +#define OBJ_pkcs9_messageDigest OBJ_pkcs9,4L + +#define LN_pkcs9_signingTime "signingTime" +#define NID_pkcs9_signingTime 52 +#define OBJ_pkcs9_signingTime OBJ_pkcs9,5L + +#define LN_pkcs9_countersignature "countersignature" +#define NID_pkcs9_countersignature 53 +#define OBJ_pkcs9_countersignature OBJ_pkcs9,6L + +#define LN_pkcs9_challengePassword "challengePassword" +#define NID_pkcs9_challengePassword 54 +#define OBJ_pkcs9_challengePassword OBJ_pkcs9,7L + +#define LN_pkcs9_unstructuredAddress "unstructuredAddress" +#define NID_pkcs9_unstructuredAddress 55 +#define OBJ_pkcs9_unstructuredAddress OBJ_pkcs9,8L + +#define LN_pkcs9_extCertAttributes "extendedCertificateAttributes" +#define NID_pkcs9_extCertAttributes 56 +#define OBJ_pkcs9_extCertAttributes OBJ_pkcs9,9L + +#define SN_netscape "Netscape" +#define LN_netscape "Netscape Communications Corp." +#define NID_netscape 57 +#define OBJ_netscape 2L,16L,840L,1L,113730L + +#define SN_netscape_cert_extension "nsCertExt" +#define LN_netscape_cert_extension "Netscape Certificate Extension" +#define NID_netscape_cert_extension 58 +#define OBJ_netscape_cert_extension OBJ_netscape,1L + +#define SN_netscape_data_type "nsDataType" +#define LN_netscape_data_type "Netscape Data Type" +#define NID_netscape_data_type 59 +#define OBJ_netscape_data_type OBJ_netscape,2L + +#define SN_des_ede_cfb64 "DES-EDE-CFB" +#define LN_des_ede_cfb64 "des-ede-cfb" +#define NID_des_ede_cfb64 60 + +#define SN_des_ede3_cfb64 "DES-EDE3-CFB" +#define LN_des_ede3_cfb64 "des-ede3-cfb" +#define NID_des_ede3_cfb64 61 + +#define SN_des_ede_ofb64 "DES-EDE-OFB" +#define LN_des_ede_ofb64 "des-ede-ofb" +#define NID_des_ede_ofb64 62 + +#define SN_des_ede3_ofb64 "DES-EDE3-OFB" +#define LN_des_ede3_ofb64 "des-ede3-ofb" +#define NID_des_ede3_ofb64 63 + +/* I'm not sure about the object ID */ +#define SN_sha1 "SHA1" +#define LN_sha1 "sha1" +#define NID_sha1 64 +#define OBJ_sha1 OBJ_algorithm,26L +/* 28 Jun 1996 - eay */ +/* #define OBJ_sha1 1L,3L,14L,2L,26L,05L <- wrong */ + +#define SN_sha1WithRSAEncryption "RSA-SHA1" +#define LN_sha1WithRSAEncryption "sha1WithRSAEncryption" +#define NID_sha1WithRSAEncryption 65 +#define OBJ_sha1WithRSAEncryption OBJ_pkcs,1L,5L + +#define SN_dsaWithSHA "DSA-SHA" +#define LN_dsaWithSHA "dsaWithSHA" +#define NID_dsaWithSHA 66 +#define OBJ_dsaWithSHA OBJ_algorithm,13L + +#define SN_dsa_2 "DSA-old" +#define LN_dsa_2 "dsaEncryption-old" +#define NID_dsa_2 67 +#define OBJ_dsa_2 OBJ_algorithm,12L + +/* proposed by microsoft to RSA */ +#define SN_pbeWithSHA1AndRC2_CBC "PBE-SHA1-RC2-64" +#define LN_pbeWithSHA1AndRC2_CBC "pbeWithSHA1AndRC2-CBC" +#define NID_pbeWithSHA1AndRC2_CBC 68 +#define OBJ_pbeWithSHA1AndRC2_CBC OBJ_pkcs,5L,11L + +/* proposed by microsoft to RSA as pbeWithSHA1AndRC4: it is now + * defined explicitly in PKCS#5 v2.0 as id-PBKDF2 which is something + * completely different. + */ +#define LN_id_pbkdf2 "PBKDF2" +#define NID_id_pbkdf2 69 +#define OBJ_id_pbkdf2 OBJ_pkcs,5L,12L + +#define SN_dsaWithSHA1_2 "DSA-SHA1-old" +#define LN_dsaWithSHA1_2 "dsaWithSHA1-old" +#define NID_dsaWithSHA1_2 70 +/* Got this one from 'sdn706r20.pdf' which is actually an NSA document :-) */ +#define OBJ_dsaWithSHA1_2 OBJ_algorithm,27L + +#define SN_netscape_cert_type "nsCertType" +#define LN_netscape_cert_type "Netscape Cert Type" +#define NID_netscape_cert_type 71 +#define OBJ_netscape_cert_type OBJ_netscape_cert_extension,1L + +#define SN_netscape_base_url "nsBaseUrl" +#define LN_netscape_base_url "Netscape Base Url" +#define NID_netscape_base_url 72 +#define OBJ_netscape_base_url OBJ_netscape_cert_extension,2L + +#define SN_netscape_revocation_url "nsRevocationUrl" +#define LN_netscape_revocation_url "Netscape Revocation Url" +#define NID_netscape_revocation_url 73 +#define OBJ_netscape_revocation_url OBJ_netscape_cert_extension,3L + +#define SN_netscape_ca_revocation_url "nsCaRevocationUrl" +#define LN_netscape_ca_revocation_url "Netscape CA Revocation Url" +#define NID_netscape_ca_revocation_url 74 +#define OBJ_netscape_ca_revocation_url OBJ_netscape_cert_extension,4L + +#define SN_netscape_renewal_url "nsRenewalUrl" +#define LN_netscape_renewal_url "Netscape Renewal Url" +#define NID_netscape_renewal_url 75 +#define OBJ_netscape_renewal_url OBJ_netscape_cert_extension,7L + +#define SN_netscape_ca_policy_url "nsCaPolicyUrl" +#define LN_netscape_ca_policy_url "Netscape CA Policy Url" +#define NID_netscape_ca_policy_url 76 +#define OBJ_netscape_ca_policy_url OBJ_netscape_cert_extension,8L + +#define SN_netscape_ssl_server_name "nsSslServerName" +#define LN_netscape_ssl_server_name "Netscape SSL Server Name" +#define NID_netscape_ssl_server_name 77 +#define OBJ_netscape_ssl_server_name OBJ_netscape_cert_extension,12L + +#define SN_netscape_comment "nsComment" +#define LN_netscape_comment "Netscape Comment" +#define NID_netscape_comment 78 +#define OBJ_netscape_comment OBJ_netscape_cert_extension,13L + +#define SN_netscape_cert_sequence "nsCertSequence" +#define LN_netscape_cert_sequence "Netscape Certificate Sequence" +#define NID_netscape_cert_sequence 79 +#define OBJ_netscape_cert_sequence OBJ_netscape_data_type,5L + +#define SN_desx_cbc "DESX-CBC" +#define LN_desx_cbc "desx-cbc" +#define NID_desx_cbc 80 + +#define SN_id_ce "id-ce" +#define NID_id_ce 81 +#define OBJ_id_ce 2L,5L,29L + +#define SN_subject_key_identifier "subjectKeyIdentifier" +#define LN_subject_key_identifier "X509v3 Subject Key Identifier" +#define NID_subject_key_identifier 82 +#define OBJ_subject_key_identifier OBJ_id_ce,14L + +#define SN_key_usage "keyUsage" +#define LN_key_usage "X509v3 Key Usage" +#define NID_key_usage 83 +#define OBJ_key_usage OBJ_id_ce,15L + +#define SN_private_key_usage_period "privateKeyUsagePeriod" +#define LN_private_key_usage_period "X509v3 Private Key Usage Period" +#define NID_private_key_usage_period 84 +#define OBJ_private_key_usage_period OBJ_id_ce,16L + +#define SN_subject_alt_name "subjectAltName" +#define LN_subject_alt_name "X509v3 Subject Alternative Name" +#define NID_subject_alt_name 85 +#define OBJ_subject_alt_name OBJ_id_ce,17L + +#define SN_issuer_alt_name "issuerAltName" +#define LN_issuer_alt_name "X509v3 Issuer Alternative Name" +#define NID_issuer_alt_name 86 +#define OBJ_issuer_alt_name OBJ_id_ce,18L + +#define SN_basic_constraints "basicConstraints" +#define LN_basic_constraints "X509v3 Basic Constraints" +#define NID_basic_constraints 87 +#define OBJ_basic_constraints OBJ_id_ce,19L + +#define SN_crl_number "crlNumber" +#define LN_crl_number "X509v3 CRL Number" +#define NID_crl_number 88 +#define OBJ_crl_number OBJ_id_ce,20L + +#define SN_certificate_policies "certificatePolicies" +#define LN_certificate_policies "X509v3 Certificate Policies" +#define NID_certificate_policies 89 +#define OBJ_certificate_policies OBJ_id_ce,32L + +#define SN_authority_key_identifier "authorityKeyIdentifier" +#define LN_authority_key_identifier "X509v3 Authority Key Identifier" +#define NID_authority_key_identifier 90 +#define OBJ_authority_key_identifier OBJ_id_ce,35L + +#define SN_bf_cbc "BF-CBC" +#define LN_bf_cbc "bf-cbc" +#define NID_bf_cbc 91 +#define OBJ_bf_cbc 1L,3L,6L,1L,4L,1L,3029L,1L,2L + +#define SN_bf_ecb "BF-ECB" +#define LN_bf_ecb "bf-ecb" +#define NID_bf_ecb 92 + +#define SN_bf_cfb64 "BF-CFB" +#define LN_bf_cfb64 "bf-cfb" +#define NID_bf_cfb64 93 + +#define SN_bf_ofb64 "BF-OFB" +#define LN_bf_ofb64 "bf-ofb" +#define NID_bf_ofb64 94 + +#define SN_mdc2 "MDC2" +#define LN_mdc2 "mdc2" +#define NID_mdc2 95 +#define OBJ_mdc2 2L,5L,8L,3L,101L +/* An alternative? 1L,3L,14L,3L,2L,19L */ + +#define SN_mdc2WithRSA "RSA-MDC2" +#define LN_mdc2WithRSA "mdc2withRSA" +#define NID_mdc2WithRSA 96 +#define OBJ_mdc2WithRSA 2L,5L,8L,3L,100L + +#define SN_rc4_40 "RC4-40" +#define LN_rc4_40 "rc4-40" +#define NID_rc4_40 97 + +#define SN_rc2_40_cbc "RC2-40-CBC" +#define LN_rc2_40_cbc "rc2-40-cbc" +#define NID_rc2_40_cbc 98 + +#define SN_givenName "G" +#define LN_givenName "givenName" +#define NID_givenName 99 +#define OBJ_givenName OBJ_X509,42L + +#define SN_surname "S" +#define LN_surname "surname" +#define NID_surname 100 +#define OBJ_surname OBJ_X509,4L + +#define SN_initials "I" +#define LN_initials "initials" +#define NID_initials 101 +#define OBJ_initials OBJ_X509,43L + +#define SN_uniqueIdentifier "UID" +#define LN_uniqueIdentifier "uniqueIdentifier" +#define NID_uniqueIdentifier 102 +#define OBJ_uniqueIdentifier OBJ_X509,45L + +#define SN_crl_distribution_points "crlDistributionPoints" +#define LN_crl_distribution_points "X509v3 CRL Distribution Points" +#define NID_crl_distribution_points 103 +#define OBJ_crl_distribution_points OBJ_id_ce,31L + +#define SN_md5WithRSA "RSA-NP-MD5" +#define LN_md5WithRSA "md5WithRSA" +#define NID_md5WithRSA 104 +#define OBJ_md5WithRSA OBJ_algorithm,3L + +#define SN_serialNumber "SN" +#define LN_serialNumber "serialNumber" +#define NID_serialNumber 105 +#define OBJ_serialNumber OBJ_X509,5L + +#define SN_title "T" +#define LN_title "title" +#define NID_title 106 +#define OBJ_title OBJ_X509,12L + +#define SN_description "D" +#define LN_description "description" +#define NID_description 107 +#define OBJ_description OBJ_X509,13L + +/* CAST5 is CAST-128, I'm just sticking with the documentation */ +#define SN_cast5_cbc "CAST5-CBC" +#define LN_cast5_cbc "cast5-cbc" +#define NID_cast5_cbc 108 +#define OBJ_cast5_cbc 1L,2L,840L,113533L,7L,66L,10L + +#define SN_cast5_ecb "CAST5-ECB" +#define LN_cast5_ecb "cast5-ecb" +#define NID_cast5_ecb 109 + +#define SN_cast5_cfb64 "CAST5-CFB" +#define LN_cast5_cfb64 "cast5-cfb" +#define NID_cast5_cfb64 110 + +#define SN_cast5_ofb64 "CAST5-OFB" +#define LN_cast5_ofb64 "cast5-ofb" +#define NID_cast5_ofb64 111 + +#define LN_pbeWithMD5AndCast5_CBC "pbeWithMD5AndCast5CBC" +#define NID_pbeWithMD5AndCast5_CBC 112 +#define OBJ_pbeWithMD5AndCast5_CBC 1L,2L,840L,113533L,7L,66L,12L + +/* This is one sun will soon be using :-( + * id-dsa-with-sha1 ID ::= { + * iso(1) member-body(2) us(840) x9-57 (10040) x9cm(4) 3 } + */ +#define SN_dsaWithSHA1 "DSA-SHA1" +#define LN_dsaWithSHA1 "dsaWithSHA1" +#define NID_dsaWithSHA1 113 +#define OBJ_dsaWithSHA1 1L,2L,840L,10040L,4L,3L + +#define NID_md5_sha1 114 +#define SN_md5_sha1 "MD5-SHA1" +#define LN_md5_sha1 "md5-sha1" + +#define SN_sha1WithRSA "RSA-SHA1-2" +#define LN_sha1WithRSA "sha1WithRSA" +#define NID_sha1WithRSA 115 +#define OBJ_sha1WithRSA OBJ_algorithm,29L + +#define SN_dsa "DSA" +#define LN_dsa "dsaEncryption" +#define NID_dsa 116 +#define OBJ_dsa 1L,2L,840L,10040L,4L,1L + +#define SN_ripemd160 "RIPEMD160" +#define LN_ripemd160 "ripemd160" +#define NID_ripemd160 117 +#define OBJ_ripemd160 1L,3L,36L,3L,2L,1L + +/* The name should actually be rsaSignatureWithripemd160, but I'm going + * to continue using the convention I'm using with the other ciphers */ +#define SN_ripemd160WithRSA "RSA-RIPEMD160" +#define LN_ripemd160WithRSA "ripemd160WithRSA" +#define NID_ripemd160WithRSA 119 +#define OBJ_ripemd160WithRSA 1L,3L,36L,3L,3L,1L,2L + +/* Taken from rfc2040 + * RC5_CBC_Parameters ::= SEQUENCE { + * version INTEGER (v1_0(16)), + * rounds INTEGER (8..127), + * blockSizeInBits INTEGER (64, 128), + * iv OCTET STRING OPTIONAL + * } + */ +#define SN_rc5_cbc "RC5-CBC" +#define LN_rc5_cbc "rc5-cbc" +#define NID_rc5_cbc 120 +#define OBJ_rc5_cbc OBJ_rsadsi,3L,8L + +#define SN_rc5_ecb "RC5-ECB" +#define LN_rc5_ecb "rc5-ecb" +#define NID_rc5_ecb 121 + +#define SN_rc5_cfb64 "RC5-CFB" +#define LN_rc5_cfb64 "rc5-cfb" +#define NID_rc5_cfb64 122 + +#define SN_rc5_ofb64 "RC5-OFB" +#define LN_rc5_ofb64 "rc5-ofb" +#define NID_rc5_ofb64 123 + +#define SN_rle_compression "RLE" +#define LN_rle_compression "run length compression" +#define NID_rle_compression 124 +#define OBJ_rle_compression 1L,1L,1L,1L,666L,1L + +#define SN_zlib_compression "ZLIB" +#define LN_zlib_compression "zlib compression" +#define NID_zlib_compression 125 +#define OBJ_zlib_compression 1L,1L,1L,1L,666L,2L + +#define SN_ext_key_usage "extendedKeyUsage" +#define LN_ext_key_usage "X509v3 Extended Key Usage" +#define NID_ext_key_usage 126 +#define OBJ_ext_key_usage OBJ_id_ce,37 + +#define SN_id_pkix "PKIX" +#define NID_id_pkix 127 +#define OBJ_id_pkix 1L,3L,6L,1L,5L,5L,7L + +#define SN_id_kp "id-kp" +#define NID_id_kp 128 +#define OBJ_id_kp OBJ_id_pkix,3L + +/* PKIX extended key usage OIDs */ + +#define SN_server_auth "serverAuth" +#define LN_server_auth "TLS Web Server Authentication" +#define NID_server_auth 129 +#define OBJ_server_auth OBJ_id_kp,1L + +#define SN_client_auth "clientAuth" +#define LN_client_auth "TLS Web Client Authentication" +#define NID_client_auth 130 +#define OBJ_client_auth OBJ_id_kp,2L + +#define SN_code_sign "codeSigning" +#define LN_code_sign "Code Signing" +#define NID_code_sign 131 +#define OBJ_code_sign OBJ_id_kp,3L + +#define SN_email_protect "emailProtection" +#define LN_email_protect "E-mail Protection" +#define NID_email_protect 132 +#define OBJ_email_protect OBJ_id_kp,4L + +#define SN_time_stamp "timeStamping" +#define LN_time_stamp "Time Stamping" +#define NID_time_stamp 133 +#define OBJ_time_stamp OBJ_id_kp,8L + +/* Additional extended key usage OIDs: Microsoft */ + +#define SN_ms_code_ind "msCodeInd" +#define LN_ms_code_ind "Microsoft Individual Code Signing" +#define NID_ms_code_ind 134 +#define OBJ_ms_code_ind 1L,3L,6L,1L,4L,1L,311L,2L,1L,21L + +#define SN_ms_code_com "msCodeCom" +#define LN_ms_code_com "Microsoft Commercial Code Signing" +#define NID_ms_code_com 135 +#define OBJ_ms_code_com 1L,3L,6L,1L,4L,1L,311L,2L,1L,22L + +#define SN_ms_ctl_sign "msCTLSign" +#define LN_ms_ctl_sign "Microsoft Trust List Signing" +#define NID_ms_ctl_sign 136 +#define OBJ_ms_ctl_sign 1L,3L,6L,1L,4L,1L,311L,10L,3L,1L + +#define SN_ms_sgc "msSGC" +#define LN_ms_sgc "Microsoft Server Gated Crypto" +#define NID_ms_sgc 137 +#define OBJ_ms_sgc 1L,3L,6L,1L,4L,1L,311L,10L,3L,3L + +#define SN_ms_efs "msEFS" +#define LN_ms_efs "Microsoft Encrypted File System" +#define NID_ms_efs 138 +#define OBJ_ms_efs 1L,3L,6L,1L,4L,1L,311L,10L,3L,4L + +/* Additional usage: Netscape */ + +#define SN_ns_sgc "nsSGC" +#define LN_ns_sgc "Netscape Server Gated Crypto" +#define NID_ns_sgc 139 +#define OBJ_ns_sgc OBJ_netscape,4L,1L + +#define SN_delta_crl "deltaCRL" +#define LN_delta_crl "X509v3 Delta CRL Indicator" +#define NID_delta_crl 140 +#define OBJ_delta_crl OBJ_id_ce,27L + +#define SN_crl_reason "CRLReason" +#define LN_crl_reason "CRL Reason Code" +#define NID_crl_reason 141 +#define OBJ_crl_reason OBJ_id_ce,21L + +#define SN_invalidity_date "invalidityDate" +#define LN_invalidity_date "Invalidity Date" +#define NID_invalidity_date 142 +#define OBJ_invalidity_date OBJ_id_ce,24L + +#define SN_sxnet "SXNetID" +#define LN_sxnet "Strong Extranet ID" +#define NID_sxnet 143 +#define OBJ_sxnet 1L,3L,101L,1L,4L,1L + +/* PKCS12 and related OBJECT IDENTIFIERS */ + +#define OBJ_pkcs12 OBJ_pkcs,12L +#define OBJ_pkcs12_pbeids OBJ_pkcs12, 1 + +#define SN_pbe_WithSHA1And128BitRC4 "PBE-SHA1-RC4-128" +#define LN_pbe_WithSHA1And128BitRC4 "pbeWithSHA1And128BitRC4" +#define NID_pbe_WithSHA1And128BitRC4 144 +#define OBJ_pbe_WithSHA1And128BitRC4 OBJ_pkcs12_pbeids, 1L + +#define SN_pbe_WithSHA1And40BitRC4 "PBE-SHA1-RC4-40" +#define LN_pbe_WithSHA1And40BitRC4 "pbeWithSHA1And40BitRC4" +#define NID_pbe_WithSHA1And40BitRC4 145 +#define OBJ_pbe_WithSHA1And40BitRC4 OBJ_pkcs12_pbeids, 2L + +#define SN_pbe_WithSHA1And3_Key_TripleDES_CBC "PBE-SHA1-3DES" +#define LN_pbe_WithSHA1And3_Key_TripleDES_CBC "pbeWithSHA1And3-KeyTripleDES-CBC" +#define NID_pbe_WithSHA1And3_Key_TripleDES_CBC 146 +#define OBJ_pbe_WithSHA1And3_Key_TripleDES_CBC OBJ_pkcs12_pbeids, 3L + +#define SN_pbe_WithSHA1And2_Key_TripleDES_CBC "PBE-SHA1-2DES" +#define LN_pbe_WithSHA1And2_Key_TripleDES_CBC "pbeWithSHA1And2-KeyTripleDES-CBC" +#define NID_pbe_WithSHA1And2_Key_TripleDES_CBC 147 +#define OBJ_pbe_WithSHA1And2_Key_TripleDES_CBC OBJ_pkcs12_pbeids, 4L + +#define SN_pbe_WithSHA1And128BitRC2_CBC "PBE-SHA1-RC2-128" +#define LN_pbe_WithSHA1And128BitRC2_CBC "pbeWithSHA1And128BitRC2-CBC" +#define NID_pbe_WithSHA1And128BitRC2_CBC 148 +#define OBJ_pbe_WithSHA1And128BitRC2_CBC OBJ_pkcs12_pbeids, 5L + +#define SN_pbe_WithSHA1And40BitRC2_CBC "PBE-SHA1-RC2-40" +#define LN_pbe_WithSHA1And40BitRC2_CBC "pbeWithSHA1And40BitRC2-CBC" +#define NID_pbe_WithSHA1And40BitRC2_CBC 149 +#define OBJ_pbe_WithSHA1And40BitRC2_CBC OBJ_pkcs12_pbeids, 6L + +#define OBJ_pkcs12_Version1 OBJ_pkcs12, 10L + +#define OBJ_pkcs12_BagIds OBJ_pkcs12_Version1, 1L + +#define LN_keyBag "keyBag" +#define NID_keyBag 150 +#define OBJ_keyBag OBJ_pkcs12_BagIds, 1L + +#define LN_pkcs8ShroudedKeyBag "pkcs8ShroudedKeyBag" +#define NID_pkcs8ShroudedKeyBag 151 +#define OBJ_pkcs8ShroudedKeyBag OBJ_pkcs12_BagIds, 2L + +#define LN_certBag "certBag" +#define NID_certBag 152 +#define OBJ_certBag OBJ_pkcs12_BagIds, 3L + +#define LN_crlBag "crlBag" +#define NID_crlBag 153 +#define OBJ_crlBag OBJ_pkcs12_BagIds, 4L + +#define LN_secretBag "secretBag" +#define NID_secretBag 154 +#define OBJ_secretBag OBJ_pkcs12_BagIds, 5L + +#define LN_safeContentsBag "safeContentsBag" +#define NID_safeContentsBag 155 +#define OBJ_safeContentsBag OBJ_pkcs12_BagIds, 6L + +#define LN_friendlyName "friendlyName" +#define NID_friendlyName 156 +#define OBJ_friendlyName OBJ_pkcs9, 20L + +#define LN_localKeyID "localKeyID" +#define NID_localKeyID 157 +#define OBJ_localKeyID OBJ_pkcs9, 21L + +#define OBJ_certTypes OBJ_pkcs9, 22L + +#define LN_x509Certificate "x509Certificate" +#define NID_x509Certificate 158 +#define OBJ_x509Certificate OBJ_certTypes, 1L + +#define LN_sdsiCertificate "sdsiCertificate" +#define NID_sdsiCertificate 159 +#define OBJ_sdsiCertificate OBJ_certTypes, 2L + +#define OBJ_crlTypes OBJ_pkcs9, 23L + +#define LN_x509Crl "x509Crl" +#define NID_x509Crl 160 +#define OBJ_x509Crl OBJ_crlTypes, 1L + +/* PKCS#5 v2 OIDs */ + +#define LN_pbes2 "PBES2" +#define NID_pbes2 161 +#define OBJ_pbes2 OBJ_pkcs,5L,13L + +#define LN_pbmac1 "PBMAC1" +#define NID_pbmac1 162 +#define OBJ_pbmac1 OBJ_pkcs,5L,14L + +#define LN_hmacWithSHA1 "hmacWithSHA1" +#define NID_hmacWithSHA1 163 +#define OBJ_hmacWithSHA1 OBJ_rsadsi,2L,7L + +/* Policy Qualifier Ids */ + +#define LN_id_qt_cps "Policy Qualifier CPS" +#define SN_id_qt_cps "id-qt-cps" +#define NID_id_qt_cps 164 +#define OBJ_id_qt_cps OBJ_id_pkix,2L,1L + +#define LN_id_qt_unotice "Policy Qualifier User Notice" +#define SN_id_qt_unotice "id-qt-unotice" +#define NID_id_qt_unotice 165 +#define OBJ_id_qt_unotice OBJ_id_pkix,2L,2L + +#define SN_rc2_64_cbc "RC2-64-CBC" +#define LN_rc2_64_cbc "rc2-64-cbc" +#define NID_rc2_64_cbc 166 + +#define SN_SMIMECapabilities "SMIME-CAPS" +#define LN_SMIMECapabilities "S/MIME Capabilities" +#define NID_SMIMECapabilities 167 +#define OBJ_SMIMECapabilities OBJ_pkcs9,15L + +#define SN_pbeWithMD2AndRC2_CBC "PBE-MD2-RC2-64" +#define LN_pbeWithMD2AndRC2_CBC "pbeWithMD2AndRC2-CBC" +#define NID_pbeWithMD2AndRC2_CBC 168 +#define OBJ_pbeWithMD2AndRC2_CBC OBJ_pkcs,5L,4L + +#define SN_pbeWithMD5AndRC2_CBC "PBE-MD5-RC2-64" +#define LN_pbeWithMD5AndRC2_CBC "pbeWithMD5AndRC2-CBC" +#define NID_pbeWithMD5AndRC2_CBC 169 +#define OBJ_pbeWithMD5AndRC2_CBC OBJ_pkcs,5L,6L + +#define SN_pbeWithSHA1AndDES_CBC "PBE-SHA1-DES" +#define LN_pbeWithSHA1AndDES_CBC "pbeWithSHA1AndDES-CBC" +#define NID_pbeWithSHA1AndDES_CBC 170 +#define OBJ_pbeWithSHA1AndDES_CBC OBJ_pkcs,5L,10L + +/* Extension request OIDs */ + +#define LN_ms_ext_req "Microsoft Extension Request" +#define SN_ms_ext_req "msExtReq" +#define NID_ms_ext_req 171 +#define OBJ_ms_ext_req 1L,3L,6L,1L,4L,1L,311L,2L,1L,14L + +#define LN_ext_req "Extension Request" +#define SN_ext_req "extReq" +#define NID_ext_req 172 +#define OBJ_ext_req OBJ_pkcs9,14L + +#define SN_name "name" +#define LN_name "name" +#define NID_name 173 +#define OBJ_name OBJ_X509,41L + +#define SN_dnQualifier "dnQualifier" +#define LN_dnQualifier "dnQualifier" +#define NID_dnQualifier 174 +#define OBJ_dnQualifier OBJ_X509,46L + +#define SN_id_pe "id-pe" +#define NID_id_pe 175 +#define OBJ_id_pe OBJ_id_pkix,1L + +#define SN_id_ad "id-ad" +#define NID_id_ad 176 +#define OBJ_id_ad OBJ_id_pkix,48L + +#define SN_info_access "authorityInfoAccess" +#define LN_info_access "Authority Information Access" +#define NID_info_access 177 +#define OBJ_info_access OBJ_id_pe,1L + +#define SN_ad_OCSP "OCSP" +#define LN_ad_OCSP "OCSP" +#define NID_ad_OCSP 178 +#define OBJ_ad_OCSP OBJ_id_ad,1L + +#define SN_ad_ca_issuers "caIssuers" +#define LN_ad_ca_issuers "CA Issuers" +#define NID_ad_ca_issuers 179 +#define OBJ_ad_ca_issuers OBJ_id_ad,2L + +#define SN_OCSP_sign "OCSPSigning" +#define LN_OCSP_sign "OCSP Signing" +#define NID_OCSP_sign 180 +#define OBJ_OCSP_sign OBJ_id_kp,9L +#endif /* USE_OBJ_MAC */ + +#include +#include + +#define OBJ_NAME_TYPE_UNDEF 0x00 +#define OBJ_NAME_TYPE_MD_METH 0x01 +#define OBJ_NAME_TYPE_CIPHER_METH 0x02 +#define OBJ_NAME_TYPE_PKEY_METH 0x03 +#define OBJ_NAME_TYPE_COMP_METH 0x04 +#define OBJ_NAME_TYPE_NUM 0x05 + +#define OBJ_NAME_ALIAS 0x8000 + +#define OBJ_BSEARCH_VALUE_ON_NOMATCH 0x01 +#define OBJ_BSEARCH_FIRST_VALUE_ON_MATCH 0x02 + + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct obj_name_st + { + int type; + int alias; + const char *name; + const char *data; + } OBJ_NAME; + +#define OBJ_create_and_add_object(a,b,c) OBJ_create(a,b,c) + + +int OBJ_NAME_init(void); +int OBJ_NAME_new_index(unsigned long (*hash_func)(const char *), + int (*cmp_func)(const char *, const char *), + void (*free_func)(const char *, int, const char *)); +const char *OBJ_NAME_get(const char *name,int type); +int OBJ_NAME_add(const char *name,int type,const char *data); +int OBJ_NAME_remove(const char *name,int type); +void OBJ_NAME_cleanup(int type); /* -1 for everything */ +void OBJ_NAME_do_all(int type,void (*fn)(const OBJ_NAME *,void *arg), + void *arg); +void OBJ_NAME_do_all_sorted(int type,void (*fn)(const OBJ_NAME *,void *arg), + void *arg); + +ASN1_OBJECT * OBJ_dup(const ASN1_OBJECT *o); +ASN1_OBJECT * OBJ_nid2obj(int n); +const char * OBJ_nid2ln(int n); +const char * OBJ_nid2sn(int n); +int OBJ_obj2nid(const ASN1_OBJECT *o); +ASN1_OBJECT * OBJ_txt2obj(const char *s, int no_name); +int OBJ_obj2txt(char *buf, int buf_len, const ASN1_OBJECT *a, int no_name); +int OBJ_txt2nid(const char *s); +int OBJ_ln2nid(const char *s); +int OBJ_sn2nid(const char *s); +int OBJ_cmp(const ASN1_OBJECT *a,const ASN1_OBJECT *b); +const void * OBJ_bsearch_(const void *key,const void *base,int num,int size, + int (*cmp)(const void *, const void *)); +const void * OBJ_bsearch_ex_(const void *key,const void *base,int num, + int size, + int (*cmp)(const void *, const void *), + int flags); + +#define _DECLARE_OBJ_BSEARCH_CMP_FN(scope, type1, type2, nm) \ + static int nm##_cmp_BSEARCH_CMP_FN(const void *, const void *); \ + static int nm##_cmp(type1 const *, type2 const *); \ + scope type2 * OBJ_bsearch_##nm(type1 *key, type2 const *base, int num) + +#define DECLARE_OBJ_BSEARCH_CMP_FN(type1, type2, cmp) \ + _DECLARE_OBJ_BSEARCH_CMP_FN(static, type1, type2, cmp) +#define DECLARE_OBJ_BSEARCH_GLOBAL_CMP_FN(type1, type2, nm) \ + type2 * OBJ_bsearch_##nm(type1 *key, type2 const *base, int num) + +/* + * Unsolved problem: if a type is actually a pointer type, like + * nid_triple is, then its impossible to get a const where you need + * it. Consider: + * + * typedef int nid_triple[3]; + * const void *a_; + * const nid_triple const *a = a_; + * + * The assignement discards a const because what you really want is: + * + * const int const * const *a = a_; + * + * But if you do that, you lose the fact that a is an array of 3 ints, + * which breaks comparison functions. + * + * Thus we end up having to cast, sadly, or unpack the + * declarations. Or, as I finally did in this case, delcare nid_triple + * to be a struct, which it should have been in the first place. + * + * Ben, August 2008. + * + * Also, strictly speaking not all types need be const, but handling + * the non-constness means a lot of complication, and in practice + * comparison routines do always not touch their arguments. + */ + +#define IMPLEMENT_OBJ_BSEARCH_CMP_FN(type1, type2, nm) \ + static int nm##_cmp_BSEARCH_CMP_FN(const void *a_, const void *b_) \ + { \ + type1 const *a = a_; \ + type2 const *b = b_; \ + return nm##_cmp(a,b); \ + } \ + static type2 *OBJ_bsearch_##nm(type1 *key, type2 const *base, int num) \ + { \ + return (type2 *)OBJ_bsearch_(key, base, num, sizeof(type2), \ + nm##_cmp_BSEARCH_CMP_FN); \ + } \ + extern void dummy_prototype(void) + +#define IMPLEMENT_OBJ_BSEARCH_GLOBAL_CMP_FN(type1, type2, nm) \ + static int nm##_cmp_BSEARCH_CMP_FN(const void *a_, const void *b_) \ + { \ + type1 const *a = a_; \ + type2 const *b = b_; \ + return nm##_cmp(a,b); \ + } \ + type2 *OBJ_bsearch_##nm(type1 *key, type2 const *base, int num) \ + { \ + return (type2 *)OBJ_bsearch_(key, base, num, sizeof(type2), \ + nm##_cmp_BSEARCH_CMP_FN); \ + } \ + extern void dummy_prototype(void) + +#define OBJ_bsearch(type1,key,type2,base,num,cmp) \ + ((type2 *)OBJ_bsearch_(CHECKED_PTR_OF(type1,key),CHECKED_PTR_OF(type2,base), \ + num,sizeof(type2), \ + ((void)CHECKED_PTR_OF(type1,cmp##_type_1), \ + (void)CHECKED_PTR_OF(type2,cmp##_type_2), \ + cmp##_BSEARCH_CMP_FN))) + +#define OBJ_bsearch_ex(type1,key,type2,base,num,cmp,flags) \ + ((type2 *)OBJ_bsearch_ex_(CHECKED_PTR_OF(type1,key),CHECKED_PTR_OF(type2,base), \ + num,sizeof(type2), \ + ((void)CHECKED_PTR_OF(type1,cmp##_type_1), \ + (void)type_2=CHECKED_PTR_OF(type2,cmp##_type_2), \ + cmp##_BSEARCH_CMP_FN)),flags) + +int OBJ_new_nid(int num); +int OBJ_add_object(const ASN1_OBJECT *obj); +int OBJ_create(const char *oid,const char *sn,const char *ln); +void OBJ_cleanup(void ); +int OBJ_create_objects(BIO *in); + +int OBJ_find_sigid_algs(int signid, int *pdig_nid, int *ppkey_nid); +int OBJ_find_sigid_by_algs(int *psignid, int dig_nid, int pkey_nid); +int OBJ_add_sigid(int signid, int dig_id, int pkey_id); +void OBJ_sigid_free(void); + +extern int obj_cleanup_defer; +void check_defer(int nid); + +/* BEGIN ERROR CODES */ +/* The following lines are auto generated by the script mkerr.pl. Any changes + * made after this point may be overwritten when the script is next run. + */ +void ERR_load_OBJ_strings(void); + +/* Error codes for the OBJ functions. */ + +/* Function codes. */ +#define OBJ_F_OBJ_ADD_OBJECT 105 +#define OBJ_F_OBJ_CREATE 100 +#define OBJ_F_OBJ_DUP 101 +#define OBJ_F_OBJ_NAME_NEW_INDEX 106 +#define OBJ_F_OBJ_NID2LN 102 +#define OBJ_F_OBJ_NID2OBJ 103 +#define OBJ_F_OBJ_NID2SN 104 + +/* Reason codes. */ +#define OBJ_R_MALLOC_FAILURE 100 +#define OBJ_R_UNKNOWN_NID 101 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/extra_lib/include/openssl/opensslconf.h b/extra_lib/include/openssl/opensslconf.h new file mode 100644 index 0000000..8268e9a --- /dev/null +++ b/extra_lib/include/openssl/opensslconf.h @@ -0,0 +1,223 @@ +/* opensslconf.h */ +/* WARNING: Generated automatically from opensslconf.h.in by Configure. */ + +/* OpenSSL was configured with the following options: */ +#ifndef OPENSSL_SYSNAME_WIN32 +# define OPENSSL_SYSNAME_WIN32 +#endif +#ifndef OPENSSL_DOING_MAKEDEPEND + + +#ifndef OPENSSL_NO_GMP +# define OPENSSL_NO_GMP +#endif +#ifndef OPENSSL_NO_JPAKE +# define OPENSSL_NO_JPAKE +#endif +#ifndef OPENSSL_NO_KRB5 +# define OPENSSL_NO_KRB5 +#endif +#ifndef OPENSSL_NO_MD2 +# define OPENSSL_NO_MD2 +#endif +#ifndef OPENSSL_NO_RC5 +# define OPENSSL_NO_RC5 +#endif +#ifndef OPENSSL_NO_RFC3779 +# define OPENSSL_NO_RFC3779 +#endif +#ifndef OPENSSL_NO_STORE +# define OPENSSL_NO_STORE +#endif + +#endif /* OPENSSL_DOING_MAKEDEPEND */ + +#ifndef OPENSSL_THREADS +# define OPENSSL_THREADS +#endif + +/* The OPENSSL_NO_* macros are also defined as NO_* if the application + asks for it. This is a transient feature that is provided for those + who haven't had the time to do the appropriate changes in their + applications. */ +#ifdef OPENSSL_ALGORITHM_DEFINES +# if defined(OPENSSL_NO_GMP) && !defined(NO_GMP) +# define NO_GMP +# endif +# if defined(OPENSSL_NO_JPAKE) && !defined(NO_JPAKE) +# define NO_JPAKE +# endif +# if defined(OPENSSL_NO_KRB5) && !defined(NO_KRB5) +# define NO_KRB5 +# endif +# if defined(OPENSSL_NO_MD2) && !defined(NO_MD2) +# define NO_MD2 +# endif +# if defined(OPENSSL_NO_RC5) && !defined(NO_RC5) +# define NO_RC5 +# endif +# if defined(OPENSSL_NO_RFC3779) && !defined(NO_RFC3779) +# define NO_RFC3779 +# endif +# if defined(OPENSSL_NO_STORE) && !defined(NO_STORE) +# define NO_STORE +# endif +#endif + +#define OPENSSL_CPUID_OBJ + +/* crypto/opensslconf.h.in */ + +/* Generate 80386 code? */ +#undef I386_ONLY + +#if !(defined(VMS) || defined(__VMS)) /* VMS uses logical names instead */ +#if defined(HEADER_CRYPTLIB_H) && !defined(OPENSSLDIR) +#define ENGINESDIR "c:cygwinhomeAdministrateurbuildslavefull-windows_xp_32buildgpac_extra_libs/lib/engines" +#define OPENSSLDIR "c:cygwinhomeAdministrateurbuildslavefull-windows_xp_32buildgpac_extra_libs/c:cygwinhomeAdministrateurbuildslavefull-windows_xp_32buildgpac_extra_libs/ssl" +#endif +#endif + +#undef OPENSSL_UNISTD +#define OPENSSL_UNISTD + +#undef OPENSSL_EXPORT_VAR_AS_FUNCTION +#define OPENSSL_EXPORT_VAR_AS_FUNCTION + +#if defined(HEADER_IDEA_H) && !defined(IDEA_INT) +#define IDEA_INT unsigned int +#endif + +#if defined(HEADER_MD2_H) && !defined(MD2_INT) +#define MD2_INT unsigned int +#endif + +#if defined(HEADER_RC2_H) && !defined(RC2_INT) +/* I need to put in a mod for the alpha - eay */ +#define RC2_INT unsigned int +#endif + +#if defined(HEADER_RC4_H) +#if !defined(RC4_INT) +/* using int types make the structure larger but make the code faster + * on most boxes I have tested - up to %20 faster. */ +/* + * I don't know what does "most" mean, but declaring "int" is a must on: + * - Intel P6 because partial register stalls are very expensive; + * - elder Alpha because it lacks byte load/store instructions; + */ +#define RC4_INT unsigned int +#endif +#if !defined(RC4_CHUNK) +/* + * This enables code handling data aligned at natural CPU word + * boundary. See crypto/rc4/rc4_enc.c for further details. + */ +#undef RC4_CHUNK +#endif +#endif + +#if (defined(HEADER_NEW_DES_H) || defined(HEADER_DES_H)) && !defined(DES_LONG) +/* If this is set to 'unsigned int' on a DEC Alpha, this gives about a + * %20 speed up (longs are 8 bytes, int's are 4). */ +#ifndef DES_LONG +#define DES_LONG unsigned long +#endif +#endif + +#if defined(HEADER_BN_H) && !defined(CONFIG_HEADER_BN_H) +#define CONFIG_HEADER_BN_H +#define BN_LLONG + +/* Should we define BN_DIV2W here? */ + +/* Only one for the following should be defined */ +#undef SIXTY_FOUR_BIT_LONG +#undef SIXTY_FOUR_BIT +#define THIRTY_TWO_BIT +#endif + +#if defined(HEADER_RC4_LOCL_H) && !defined(CONFIG_HEADER_RC4_LOCL_H) +#define CONFIG_HEADER_RC4_LOCL_H +/* if this is defined data[i] is used instead of *data, this is a %20 + * speedup on x86 */ +#define RC4_INDEX +#endif + +#if defined(HEADER_BF_LOCL_H) && !defined(CONFIG_HEADER_BF_LOCL_H) +#define CONFIG_HEADER_BF_LOCL_H +#undef BF_PTR +#endif /* HEADER_BF_LOCL_H */ + +#if defined(HEADER_DES_LOCL_H) && !defined(CONFIG_HEADER_DES_LOCL_H) +#define CONFIG_HEADER_DES_LOCL_H +#ifndef DES_DEFAULT_OPTIONS +/* the following is tweaked from a config script, that is why it is a + * protected undef/define */ +#ifndef DES_PTR +#undef DES_PTR +#endif + +/* This helps C compiler generate the correct code for multiple functional + * units. It reduces register dependancies at the expense of 2 more + * registers */ +#ifndef DES_RISC1 +#undef DES_RISC1 +#endif + +#ifndef DES_RISC2 +#undef DES_RISC2 +#endif + +#if defined(DES_RISC1) && defined(DES_RISC2) +YOU SHOULD NOT HAVE BOTH DES_RISC1 AND DES_RISC2 DEFINED!!!!! +#endif + +/* Unroll the inner loop, this sometimes helps, sometimes hinders. + * Very mucy CPU dependant */ +#ifndef DES_UNROLL +#undef DES_UNROLL +#endif + +/* These default values were supplied by + * Peter Gutman + * They are only used if nothing else has been defined */ +#if !defined(DES_PTR) && !defined(DES_RISC1) && !defined(DES_RISC2) && !defined(DES_UNROLL) +/* Special defines which change the way the code is built depending on the + CPU and OS. For SGI machines you can use _MIPS_SZLONG (32 or 64) to find + even newer MIPS CPU's, but at the moment one size fits all for + optimization options. Older Sparc's work better with only UNROLL, but + there's no way to tell at compile time what it is you're running on */ + +#if defined( sun ) /* Newer Sparc's */ +# define DES_PTR +# define DES_RISC1 +# define DES_UNROLL +#elif defined( __ultrix ) /* Older MIPS */ +# define DES_PTR +# define DES_RISC2 +# define DES_UNROLL +#elif defined( __osf1__ ) /* Alpha */ +# define DES_PTR +# define DES_RISC2 +#elif defined ( _AIX ) /* RS6000 */ + /* Unknown */ +#elif defined( __hpux ) /* HP-PA */ + /* Unknown */ +#elif defined( __aux ) /* 68K */ + /* Unknown */ +#elif defined( __dgux ) /* 88K (but P6 in latest boxes) */ +# define DES_UNROLL +#elif defined( __sgi ) /* Newer MIPS */ +# define DES_PTR +# define DES_RISC2 +# define DES_UNROLL +#elif defined(i386) || defined(__i386__) /* x86 boxes, should be gcc */ +# define DES_PTR +# define DES_RISC1 +# define DES_UNROLL +#endif /* Systems-specific speed defines */ +#endif + +#endif /* DES_DEFAULT_OPTIONS */ +#endif /* HEADER_DES_LOCL_H */ diff --git a/extra_lib/include/openssl/opensslv.h b/extra_lib/include/openssl/opensslv.h new file mode 100644 index 0000000..e7fca83 --- /dev/null +++ b/extra_lib/include/openssl/opensslv.h @@ -0,0 +1,89 @@ +#ifndef HEADER_OPENSSLV_H +#define HEADER_OPENSSLV_H + +/* Numeric release version identifier: + * MNNFFPPS: major minor fix patch status + * The status nibble has one of the values 0 for development, 1 to e for betas + * 1 to 14, and f for release. The patch level is exactly that. + * For example: + * 0.9.3-dev 0x00903000 + * 0.9.3-beta1 0x00903001 + * 0.9.3-beta2-dev 0x00903002 + * 0.9.3-beta2 0x00903002 (same as ...beta2-dev) + * 0.9.3 0x0090300f + * 0.9.3a 0x0090301f + * 0.9.4 0x0090400f + * 1.2.3z 0x102031af + * + * For continuity reasons (because 0.9.5 is already out, and is coded + * 0x00905100), between 0.9.5 and 0.9.6 the coding of the patch level + * part is slightly different, by setting the highest bit. This means + * that 0.9.5a looks like this: 0x0090581f. At 0.9.6, we can start + * with 0x0090600S... + * + * (Prior to 0.9.3-dev a different scheme was used: 0.9.2b is 0x0922.) + * (Prior to 0.9.5a beta1, a different scheme was used: MMNNFFRBB for + * major minor fix final patch/beta) + */ +#define OPENSSL_VERSION_NUMBER 0x1000004fL +#ifdef OPENSSL_FIPS +#define OPENSSL_VERSION_TEXT "OpenSSL 1.0.0d-fips 8 Feb 2011" +#else +#define OPENSSL_VERSION_TEXT "OpenSSL 1.0.0d 8 Feb 2011" +#endif +#define OPENSSL_VERSION_PTEXT " part of " OPENSSL_VERSION_TEXT + + +/* The macros below are to be used for shared library (.so, .dll, ...) + * versioning. That kind of versioning works a bit differently between + * operating systems. The most usual scheme is to set a major and a minor + * number, and have the runtime loader check that the major number is equal + * to what it was at application link time, while the minor number has to + * be greater or equal to what it was at application link time. With this + * scheme, the version number is usually part of the file name, like this: + * + * libcrypto.so.0.9 + * + * Some unixen also make a softlink with the major verson number only: + * + * libcrypto.so.0 + * + * On Tru64 and IRIX 6.x it works a little bit differently. There, the + * shared library version is stored in the file, and is actually a series + * of versions, separated by colons. The rightmost version present in the + * library when linking an application is stored in the application to be + * matched at run time. When the application is run, a check is done to + * see if the library version stored in the application matches any of the + * versions in the version string of the library itself. + * This version string can be constructed in any way, depending on what + * kind of matching is desired. However, to implement the same scheme as + * the one used in the other unixen, all compatible versions, from lowest + * to highest, should be part of the string. Consecutive builds would + * give the following versions strings: + * + * 3.0 + * 3.0:3.1 + * 3.0:3.1:3.2 + * 4.0 + * 4.0:4.1 + * + * Notice how version 4 is completely incompatible with version, and + * therefore give the breach you can see. + * + * There may be other schemes as well that I haven't yet discovered. + * + * So, here's the way it works here: first of all, the library version + * number doesn't need at all to match the overall OpenSSL version. + * However, it's nice and more understandable if it actually does. + * The current library version is stored in the macro SHLIB_VERSION_NUMBER, + * which is just a piece of text in the format "M.m.e" (Major, minor, edit). + * For the sake of Tru64, IRIX, and any other OS that behaves in similar ways, + * we need to keep a history of version numbers, which is done in the + * macro SHLIB_VERSION_HISTORY. The numbers are separated by colons and + * should only keep the versions that are binary compatible with the current. + */ +#define SHLIB_VERSION_HISTORY "" +#define SHLIB_VERSION_NUMBER "1.0.0" + + +#endif /* HEADER_OPENSSLV_H */ diff --git a/extra_lib/include/openssl/ossl_typ.h b/extra_lib/include/openssl/ossl_typ.h new file mode 100644 index 0000000..12bd701 --- /dev/null +++ b/extra_lib/include/openssl/ossl_typ.h @@ -0,0 +1,200 @@ +/* ==================================================================== + * Copyright (c) 1998-2001 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED 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 OpenSSL PROJECT OR + * ITS 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. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ + +#ifndef HEADER_OPENSSL_TYPES_H +#define HEADER_OPENSSL_TYPES_H + +#include + +#ifdef NO_ASN1_TYPEDEFS +#define ASN1_INTEGER ASN1_STRING +#define ASN1_ENUMERATED ASN1_STRING +#define ASN1_BIT_STRING ASN1_STRING +#define ASN1_OCTET_STRING ASN1_STRING +#define ASN1_PRINTABLESTRING ASN1_STRING +#define ASN1_T61STRING ASN1_STRING +#define ASN1_IA5STRING ASN1_STRING +#define ASN1_UTCTIME ASN1_STRING +#define ASN1_GENERALIZEDTIME ASN1_STRING +#define ASN1_TIME ASN1_STRING +#define ASN1_GENERALSTRING ASN1_STRING +#define ASN1_UNIVERSALSTRING ASN1_STRING +#define ASN1_BMPSTRING ASN1_STRING +#define ASN1_VISIBLESTRING ASN1_STRING +#define ASN1_UTF8STRING ASN1_STRING +#define ASN1_BOOLEAN int +#define ASN1_NULL int +#else +typedef struct asn1_string_st ASN1_INTEGER; +typedef struct asn1_string_st ASN1_ENUMERATED; +typedef struct asn1_string_st ASN1_BIT_STRING; +typedef struct asn1_string_st ASN1_OCTET_STRING; +typedef struct asn1_string_st ASN1_PRINTABLESTRING; +typedef struct asn1_string_st ASN1_T61STRING; +typedef struct asn1_string_st ASN1_IA5STRING; +typedef struct asn1_string_st ASN1_GENERALSTRING; +typedef struct asn1_string_st ASN1_UNIVERSALSTRING; +typedef struct asn1_string_st ASN1_BMPSTRING; +typedef struct asn1_string_st ASN1_UTCTIME; +typedef struct asn1_string_st ASN1_TIME; +typedef struct asn1_string_st ASN1_GENERALIZEDTIME; +typedef struct asn1_string_st ASN1_VISIBLESTRING; +typedef struct asn1_string_st ASN1_UTF8STRING; +typedef int ASN1_BOOLEAN; +typedef int ASN1_NULL; +#endif + +typedef struct asn1_pctx_st ASN1_PCTX; + +#ifdef OPENSSL_SYS_WIN32 +#undef X509_NAME +#undef X509_EXTENSIONS +#undef X509_CERT_PAIR +#undef PKCS7_ISSUER_AND_SERIAL +#undef OCSP_REQUEST +#undef OCSP_RESPONSE +#endif + +#ifdef BIGNUM +#undef BIGNUM +#endif +typedef struct bignum_st BIGNUM; +typedef struct bignum_ctx BN_CTX; +typedef struct bn_blinding_st BN_BLINDING; +typedef struct bn_mont_ctx_st BN_MONT_CTX; +typedef struct bn_recp_ctx_st BN_RECP_CTX; +typedef struct bn_gencb_st BN_GENCB; + +typedef struct buf_mem_st BUF_MEM; + +typedef struct evp_cipher_st EVP_CIPHER; +typedef struct evp_cipher_ctx_st EVP_CIPHER_CTX; +typedef struct env_md_st EVP_MD; +typedef struct env_md_ctx_st EVP_MD_CTX; +typedef struct evp_pkey_st EVP_PKEY; + +typedef struct evp_pkey_asn1_method_st EVP_PKEY_ASN1_METHOD; + +typedef struct evp_pkey_method_st EVP_PKEY_METHOD; +typedef struct evp_pkey_ctx_st EVP_PKEY_CTX; + +typedef struct dh_st DH; +typedef struct dh_method DH_METHOD; + +typedef struct dsa_st DSA; +typedef struct dsa_method DSA_METHOD; + +typedef struct rsa_st RSA; +typedef struct rsa_meth_st RSA_METHOD; + +typedef struct rand_meth_st RAND_METHOD; + +typedef struct ecdh_method ECDH_METHOD; +typedef struct ecdsa_method ECDSA_METHOD; + +typedef struct x509_st X509; +typedef struct X509_algor_st X509_ALGOR; +typedef struct X509_crl_st X509_CRL; +typedef struct x509_crl_method_st X509_CRL_METHOD; +typedef struct x509_revoked_st X509_REVOKED; +typedef struct X509_name_st X509_NAME; +typedef struct X509_pubkey_st X509_PUBKEY; +typedef struct x509_store_st X509_STORE; +typedef struct x509_store_ctx_st X509_STORE_CTX; + +typedef struct pkcs8_priv_key_info_st PKCS8_PRIV_KEY_INFO; + +typedef struct v3_ext_ctx X509V3_CTX; +typedef struct conf_st CONF; + +typedef struct store_st STORE; +typedef struct store_method_st STORE_METHOD; + +typedef struct ui_st UI; +typedef struct ui_method_st UI_METHOD; + +typedef struct st_ERR_FNS ERR_FNS; + +typedef struct engine_st ENGINE; +typedef struct ssl_st SSL; +typedef struct ssl_ctx_st SSL_CTX; + +typedef struct X509_POLICY_NODE_st X509_POLICY_NODE; +typedef struct X509_POLICY_LEVEL_st X509_POLICY_LEVEL; +typedef struct X509_POLICY_TREE_st X509_POLICY_TREE; +typedef struct X509_POLICY_CACHE_st X509_POLICY_CACHE; + +typedef struct AUTHORITY_KEYID_st AUTHORITY_KEYID; +typedef struct DIST_POINT_st DIST_POINT; +typedef struct ISSUING_DIST_POINT_st ISSUING_DIST_POINT; +typedef struct NAME_CONSTRAINTS_st NAME_CONSTRAINTS; + + /* If placed in pkcs12.h, we end up with a circular depency with pkcs7.h */ +#define DECLARE_PKCS12_STACK_OF(type) /* Nothing */ +#define IMPLEMENT_PKCS12_STACK_OF(type) /* Nothing */ + +typedef struct crypto_ex_data_st CRYPTO_EX_DATA; +/* Callback types for crypto.h */ +typedef int CRYPTO_EX_new(void *parent, void *ptr, CRYPTO_EX_DATA *ad, + int idx, long argl, void *argp); +typedef void CRYPTO_EX_free(void *parent, void *ptr, CRYPTO_EX_DATA *ad, + int idx, long argl, void *argp); +typedef int CRYPTO_EX_dup(CRYPTO_EX_DATA *to, CRYPTO_EX_DATA *from, void *from_d, + int idx, long argl, void *argp); + +typedef struct ocsp_req_ctx_st OCSP_REQ_CTX; +typedef struct ocsp_response_st OCSP_RESPONSE; +typedef struct ocsp_responder_id_st OCSP_RESPID; + +#endif /* def HEADER_OPENSSL_TYPES_H */ diff --git a/extra_lib/include/openssl/pem.h b/extra_lib/include/openssl/pem.h new file mode 100644 index 0000000..8a6abab --- /dev/null +++ b/extra_lib/include/openssl/pem.h @@ -0,0 +1,641 @@ +/* crypto/pem/pem.h */ +/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 AUTHOR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_PEM_H +#define HEADER_PEM_H + +#include +#ifndef OPENSSL_NO_BIO +#include +#endif +#ifndef OPENSSL_NO_STACK +#include +#endif +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define PEM_BUFSIZE 1024 + +#define PEM_OBJ_UNDEF 0 +#define PEM_OBJ_X509 1 +#define PEM_OBJ_X509_REQ 2 +#define PEM_OBJ_CRL 3 +#define PEM_OBJ_SSL_SESSION 4 +#define PEM_OBJ_PRIV_KEY 10 +#define PEM_OBJ_PRIV_RSA 11 +#define PEM_OBJ_PRIV_DSA 12 +#define PEM_OBJ_PRIV_DH 13 +#define PEM_OBJ_PUB_RSA 14 +#define PEM_OBJ_PUB_DSA 15 +#define PEM_OBJ_PUB_DH 16 +#define PEM_OBJ_DHPARAMS 17 +#define PEM_OBJ_DSAPARAMS 18 +#define PEM_OBJ_PRIV_RSA_PUBLIC 19 +#define PEM_OBJ_PRIV_ECDSA 20 +#define PEM_OBJ_PUB_ECDSA 21 +#define PEM_OBJ_ECPARAMETERS 22 + +#define PEM_ERROR 30 +#define PEM_DEK_DES_CBC 40 +#define PEM_DEK_IDEA_CBC 45 +#define PEM_DEK_DES_EDE 50 +#define PEM_DEK_DES_ECB 60 +#define PEM_DEK_RSA 70 +#define PEM_DEK_RSA_MD2 80 +#define PEM_DEK_RSA_MD5 90 + +#define PEM_MD_MD2 NID_md2 +#define PEM_MD_MD5 NID_md5 +#define PEM_MD_SHA NID_sha +#define PEM_MD_MD2_RSA NID_md2WithRSAEncryption +#define PEM_MD_MD5_RSA NID_md5WithRSAEncryption +#define PEM_MD_SHA_RSA NID_sha1WithRSAEncryption + +#define PEM_STRING_X509_OLD "X509 CERTIFICATE" +#define PEM_STRING_X509 "CERTIFICATE" +#define PEM_STRING_X509_PAIR "CERTIFICATE PAIR" +#define PEM_STRING_X509_TRUSTED "TRUSTED CERTIFICATE" +#define PEM_STRING_X509_REQ_OLD "NEW CERTIFICATE REQUEST" +#define PEM_STRING_X509_REQ "CERTIFICATE REQUEST" +#define PEM_STRING_X509_CRL "X509 CRL" +#define PEM_STRING_EVP_PKEY "ANY PRIVATE KEY" +#define PEM_STRING_PUBLIC "PUBLIC KEY" +#define PEM_STRING_RSA "RSA PRIVATE KEY" +#define PEM_STRING_RSA_PUBLIC "RSA PUBLIC KEY" +#define PEM_STRING_DSA "DSA PRIVATE KEY" +#define PEM_STRING_DSA_PUBLIC "DSA PUBLIC KEY" +#define PEM_STRING_PKCS7 "PKCS7" +#define PEM_STRING_PKCS7_SIGNED "PKCS #7 SIGNED DATA" +#define PEM_STRING_PKCS8 "ENCRYPTED PRIVATE KEY" +#define PEM_STRING_PKCS8INF "PRIVATE KEY" +#define PEM_STRING_DHPARAMS "DH PARAMETERS" +#define PEM_STRING_SSL_SESSION "SSL SESSION PARAMETERS" +#define PEM_STRING_DSAPARAMS "DSA PARAMETERS" +#define PEM_STRING_ECDSA_PUBLIC "ECDSA PUBLIC KEY" +#define PEM_STRING_ECPARAMETERS "EC PARAMETERS" +#define PEM_STRING_ECPRIVATEKEY "EC PRIVATE KEY" +#define PEM_STRING_PARAMETERS "PARAMETERS" +#define PEM_STRING_CMS "CMS" + + /* Note that this structure is initialised by PEM_SealInit and cleaned up + by PEM_SealFinal (at least for now) */ +typedef struct PEM_Encode_Seal_st + { + EVP_ENCODE_CTX encode; + EVP_MD_CTX md; + EVP_CIPHER_CTX cipher; + } PEM_ENCODE_SEAL_CTX; + +/* enc_type is one off */ +#define PEM_TYPE_ENCRYPTED 10 +#define PEM_TYPE_MIC_ONLY 20 +#define PEM_TYPE_MIC_CLEAR 30 +#define PEM_TYPE_CLEAR 40 + +typedef struct pem_recip_st + { + char *name; + X509_NAME *dn; + + int cipher; + int key_enc; + /* char iv[8]; unused and wrong size */ + } PEM_USER; + +typedef struct pem_ctx_st + { + int type; /* what type of object */ + + struct { + int version; + int mode; + } proc_type; + + char *domain; + + struct { + int cipher; + /* unused, and wrong size + unsigned char iv[8]; */ + } DEK_info; + + PEM_USER *originator; + + int num_recipient; + PEM_USER **recipient; + + /* XXX(ben): don#t think this is used! + STACK *x509_chain; / * certificate chain */ + EVP_MD *md; /* signature type */ + + int md_enc; /* is the md encrypted or not? */ + int md_len; /* length of md_data */ + char *md_data; /* message digest, could be pkey encrypted */ + + EVP_CIPHER *dec; /* date encryption cipher */ + int key_len; /* key length */ + unsigned char *key; /* key */ + /* unused, and wrong size + unsigned char iv[8]; */ + + + int data_enc; /* is the data encrypted */ + int data_len; + unsigned char *data; + } PEM_CTX; + +/* These macros make the PEM_read/PEM_write functions easier to maintain and + * write. Now they are all implemented with either: + * IMPLEMENT_PEM_rw(...) or IMPLEMENT_PEM_rw_cb(...) + */ + +#ifdef OPENSSL_NO_FP_API + +#define IMPLEMENT_PEM_read_fp(name, type, str, asn1) /**/ +#define IMPLEMENT_PEM_write_fp(name, type, str, asn1) /**/ +#define IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) /**/ +#define IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) /**/ +#define IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) /**/ + +#else + +#define IMPLEMENT_PEM_read_fp(name, type, str, asn1) \ +type *PEM_read_##name(FILE *fp, type **x, pem_password_cb *cb, void *u)\ +{ \ +return PEM_ASN1_read((d2i_of_void *)d2i_##asn1, str,fp,(void **)x,cb,u); \ +} + +#define IMPLEMENT_PEM_write_fp(name, type, str, asn1) \ +int PEM_write_##name(FILE *fp, type *x) \ +{ \ +return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,x,NULL,NULL,0,NULL,NULL); \ +} + +#define IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) \ +int PEM_write_##name(FILE *fp, const type *x) \ +{ \ +return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,(void *)x,NULL,NULL,0,NULL,NULL); \ +} + +#define IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) \ +int PEM_write_##name(FILE *fp, type *x, const EVP_CIPHER *enc, \ + unsigned char *kstr, int klen, pem_password_cb *cb, \ + void *u) \ + { \ + return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,x,enc,kstr,klen,cb,u); \ + } + +#define IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) \ +int PEM_write_##name(FILE *fp, type *x, const EVP_CIPHER *enc, \ + unsigned char *kstr, int klen, pem_password_cb *cb, \ + void *u) \ + { \ + return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,x,enc,kstr,klen,cb,u); \ + } + +#endif + +#define IMPLEMENT_PEM_read_bio(name, type, str, asn1) \ +type *PEM_read_bio_##name(BIO *bp, type **x, pem_password_cb *cb, void *u)\ +{ \ +return PEM_ASN1_read_bio((d2i_of_void *)d2i_##asn1, str,bp,(void **)x,cb,u); \ +} + +#define IMPLEMENT_PEM_write_bio(name, type, str, asn1) \ +int PEM_write_bio_##name(BIO *bp, type *x) \ +{ \ +return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,x,NULL,NULL,0,NULL,NULL); \ +} + +#define IMPLEMENT_PEM_write_bio_const(name, type, str, asn1) \ +int PEM_write_bio_##name(BIO *bp, const type *x) \ +{ \ +return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,(void *)x,NULL,NULL,0,NULL,NULL); \ +} + +#define IMPLEMENT_PEM_write_cb_bio(name, type, str, asn1) \ +int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \ + unsigned char *kstr, int klen, pem_password_cb *cb, void *u) \ + { \ + return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,x,enc,kstr,klen,cb,u); \ + } + +#define IMPLEMENT_PEM_write_cb_bio_const(name, type, str, asn1) \ +int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \ + unsigned char *kstr, int klen, pem_password_cb *cb, void *u) \ + { \ + return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,(void *)x,enc,kstr,klen,cb,u); \ + } + +#define IMPLEMENT_PEM_write(name, type, str, asn1) \ + IMPLEMENT_PEM_write_bio(name, type, str, asn1) \ + IMPLEMENT_PEM_write_fp(name, type, str, asn1) + +#define IMPLEMENT_PEM_write_const(name, type, str, asn1) \ + IMPLEMENT_PEM_write_bio_const(name, type, str, asn1) \ + IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) + +#define IMPLEMENT_PEM_write_cb(name, type, str, asn1) \ + IMPLEMENT_PEM_write_cb_bio(name, type, str, asn1) \ + IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) + +#define IMPLEMENT_PEM_write_cb_const(name, type, str, asn1) \ + IMPLEMENT_PEM_write_cb_bio_const(name, type, str, asn1) \ + IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) + +#define IMPLEMENT_PEM_read(name, type, str, asn1) \ + IMPLEMENT_PEM_read_bio(name, type, str, asn1) \ + IMPLEMENT_PEM_read_fp(name, type, str, asn1) + +#define IMPLEMENT_PEM_rw(name, type, str, asn1) \ + IMPLEMENT_PEM_read(name, type, str, asn1) \ + IMPLEMENT_PEM_write(name, type, str, asn1) + +#define IMPLEMENT_PEM_rw_const(name, type, str, asn1) \ + IMPLEMENT_PEM_read(name, type, str, asn1) \ + IMPLEMENT_PEM_write_const(name, type, str, asn1) + +#define IMPLEMENT_PEM_rw_cb(name, type, str, asn1) \ + IMPLEMENT_PEM_read(name, type, str, asn1) \ + IMPLEMENT_PEM_write_cb(name, type, str, asn1) + +/* These are the same except they are for the declarations */ + +#if defined(OPENSSL_NO_FP_API) + +#define DECLARE_PEM_read_fp(name, type) /**/ +#define DECLARE_PEM_write_fp(name, type) /**/ +#define DECLARE_PEM_write_cb_fp(name, type) /**/ + +#else + +#define DECLARE_PEM_read_fp(name, type) \ + type *PEM_read_##name(FILE *fp, type **x, pem_password_cb *cb, void *u); + +#define DECLARE_PEM_write_fp(name, type) \ + int PEM_write_##name(FILE *fp, type *x); + +#define DECLARE_PEM_write_fp_const(name, type) \ + int PEM_write_##name(FILE *fp, const type *x); + +#define DECLARE_PEM_write_cb_fp(name, type) \ + int PEM_write_##name(FILE *fp, type *x, const EVP_CIPHER *enc, \ + unsigned char *kstr, int klen, pem_password_cb *cb, void *u); + +#endif + +#ifndef OPENSSL_NO_BIO +#define DECLARE_PEM_read_bio(name, type) \ + type *PEM_read_bio_##name(BIO *bp, type **x, pem_password_cb *cb, void *u); + +#define DECLARE_PEM_write_bio(name, type) \ + int PEM_write_bio_##name(BIO *bp, type *x); + +#define DECLARE_PEM_write_bio_const(name, type) \ + int PEM_write_bio_##name(BIO *bp, const type *x); + +#define DECLARE_PEM_write_cb_bio(name, type) \ + int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \ + unsigned char *kstr, int klen, pem_password_cb *cb, void *u); + +#else + +#define DECLARE_PEM_read_bio(name, type) /**/ +#define DECLARE_PEM_write_bio(name, type) /**/ +#define DECLARE_PEM_write_bio_const(name, type) /**/ +#define DECLARE_PEM_write_cb_bio(name, type) /**/ + +#endif + +#define DECLARE_PEM_write(name, type) \ + DECLARE_PEM_write_bio(name, type) \ + DECLARE_PEM_write_fp(name, type) + +#define DECLARE_PEM_write_const(name, type) \ + DECLARE_PEM_write_bio_const(name, type) \ + DECLARE_PEM_write_fp_const(name, type) + +#define DECLARE_PEM_write_cb(name, type) \ + DECLARE_PEM_write_cb_bio(name, type) \ + DECLARE_PEM_write_cb_fp(name, type) + +#define DECLARE_PEM_read(name, type) \ + DECLARE_PEM_read_bio(name, type) \ + DECLARE_PEM_read_fp(name, type) + +#define DECLARE_PEM_rw(name, type) \ + DECLARE_PEM_read(name, type) \ + DECLARE_PEM_write(name, type) + +#define DECLARE_PEM_rw_const(name, type) \ + DECLARE_PEM_read(name, type) \ + DECLARE_PEM_write_const(name, type) + +#define DECLARE_PEM_rw_cb(name, type) \ + DECLARE_PEM_read(name, type) \ + DECLARE_PEM_write_cb(name, type) + +#if 1 +/* "userdata": new with OpenSSL 0.9.4 */ +typedef int pem_password_cb(char *buf, int size, int rwflag, void *userdata); +#else +/* OpenSSL 0.9.3, 0.9.3a */ +typedef int pem_password_cb(char *buf, int size, int rwflag); +#endif + +int PEM_get_EVP_CIPHER_INFO(char *header, EVP_CIPHER_INFO *cipher); +int PEM_do_header (EVP_CIPHER_INFO *cipher, unsigned char *data,long *len, + pem_password_cb *callback,void *u); + +#ifndef OPENSSL_NO_BIO +int PEM_read_bio(BIO *bp, char **name, char **header, + unsigned char **data,long *len); +int PEM_write_bio(BIO *bp,const char *name,char *hdr,unsigned char *data, + long len); +int PEM_bytes_read_bio(unsigned char **pdata, long *plen, char **pnm, const char *name, BIO *bp, + pem_password_cb *cb, void *u); +void * PEM_ASN1_read_bio(d2i_of_void *d2i, const char *name, BIO *bp, + void **x, pem_password_cb *cb, void *u); +int PEM_ASN1_write_bio(i2d_of_void *i2d,const char *name,BIO *bp, void *x, + const EVP_CIPHER *enc,unsigned char *kstr,int klen, + pem_password_cb *cb, void *u); + +STACK_OF(X509_INFO) * PEM_X509_INFO_read_bio(BIO *bp, STACK_OF(X509_INFO) *sk, pem_password_cb *cb, void *u); +int PEM_X509_INFO_write_bio(BIO *bp,X509_INFO *xi, EVP_CIPHER *enc, + unsigned char *kstr, int klen, pem_password_cb *cd, void *u); +#endif + +int PEM_read(FILE *fp, char **name, char **header, + unsigned char **data,long *len); +int PEM_write(FILE *fp,char *name,char *hdr,unsigned char *data,long len); +void * PEM_ASN1_read(d2i_of_void *d2i, const char *name, FILE *fp, void **x, + pem_password_cb *cb, void *u); +int PEM_ASN1_write(i2d_of_void *i2d,const char *name,FILE *fp, + void *x,const EVP_CIPHER *enc,unsigned char *kstr, + int klen,pem_password_cb *callback, void *u); +STACK_OF(X509_INFO) * PEM_X509_INFO_read(FILE *fp, STACK_OF(X509_INFO) *sk, + pem_password_cb *cb, void *u); + +int PEM_SealInit(PEM_ENCODE_SEAL_CTX *ctx, EVP_CIPHER *type, + EVP_MD *md_type, unsigned char **ek, int *ekl, + unsigned char *iv, EVP_PKEY **pubk, int npubk); +void PEM_SealUpdate(PEM_ENCODE_SEAL_CTX *ctx, unsigned char *out, int *outl, + unsigned char *in, int inl); +int PEM_SealFinal(PEM_ENCODE_SEAL_CTX *ctx, unsigned char *sig,int *sigl, + unsigned char *out, int *outl, EVP_PKEY *priv); + +void PEM_SignInit(EVP_MD_CTX *ctx, EVP_MD *type); +void PEM_SignUpdate(EVP_MD_CTX *ctx,unsigned char *d,unsigned int cnt); +int PEM_SignFinal(EVP_MD_CTX *ctx, unsigned char *sigret, + unsigned int *siglen, EVP_PKEY *pkey); + +int PEM_def_callback(char *buf, int num, int w, void *key); +void PEM_proc_type(char *buf, int type); +void PEM_dek_info(char *buf, const char *type, int len, char *str); + + +#include + +DECLARE_PEM_rw(X509, X509) + +DECLARE_PEM_rw(X509_AUX, X509) + +DECLARE_PEM_rw(X509_CERT_PAIR, X509_CERT_PAIR) + +DECLARE_PEM_rw(X509_REQ, X509_REQ) +DECLARE_PEM_write(X509_REQ_NEW, X509_REQ) + +DECLARE_PEM_rw(X509_CRL, X509_CRL) + +DECLARE_PEM_rw(PKCS7, PKCS7) + +DECLARE_PEM_rw(NETSCAPE_CERT_SEQUENCE, NETSCAPE_CERT_SEQUENCE) + +DECLARE_PEM_rw(PKCS8, X509_SIG) + +DECLARE_PEM_rw(PKCS8_PRIV_KEY_INFO, PKCS8_PRIV_KEY_INFO) + +#ifndef OPENSSL_NO_RSA + +DECLARE_PEM_rw_cb(RSAPrivateKey, RSA) + +DECLARE_PEM_rw_const(RSAPublicKey, RSA) +DECLARE_PEM_rw(RSA_PUBKEY, RSA) + +#endif + +#ifndef OPENSSL_NO_DSA + +DECLARE_PEM_rw_cb(DSAPrivateKey, DSA) + +DECLARE_PEM_rw(DSA_PUBKEY, DSA) + +DECLARE_PEM_rw_const(DSAparams, DSA) + +#endif + +#ifndef OPENSSL_NO_EC +DECLARE_PEM_rw_const(ECPKParameters, EC_GROUP) +DECLARE_PEM_rw_cb(ECPrivateKey, EC_KEY) +DECLARE_PEM_rw(EC_PUBKEY, EC_KEY) +#endif + +#ifndef OPENSSL_NO_DH + +DECLARE_PEM_rw_const(DHparams, DH) + +#endif + +DECLARE_PEM_rw_cb(PrivateKey, EVP_PKEY) + +DECLARE_PEM_rw(PUBKEY, EVP_PKEY) + +int PEM_write_bio_PKCS8PrivateKey_nid(BIO *bp, EVP_PKEY *x, int nid, + char *kstr, int klen, + pem_password_cb *cb, void *u); +int PEM_write_bio_PKCS8PrivateKey(BIO *, EVP_PKEY *, const EVP_CIPHER *, + char *, int, pem_password_cb *, void *); +int i2d_PKCS8PrivateKey_bio(BIO *bp, EVP_PKEY *x, const EVP_CIPHER *enc, + char *kstr, int klen, + pem_password_cb *cb, void *u); +int i2d_PKCS8PrivateKey_nid_bio(BIO *bp, EVP_PKEY *x, int nid, + char *kstr, int klen, + pem_password_cb *cb, void *u); +EVP_PKEY *d2i_PKCS8PrivateKey_bio(BIO *bp, EVP_PKEY **x, pem_password_cb *cb, void *u); + +int i2d_PKCS8PrivateKey_fp(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc, + char *kstr, int klen, + pem_password_cb *cb, void *u); +int i2d_PKCS8PrivateKey_nid_fp(FILE *fp, EVP_PKEY *x, int nid, + char *kstr, int klen, + pem_password_cb *cb, void *u); +int PEM_write_PKCS8PrivateKey_nid(FILE *fp, EVP_PKEY *x, int nid, + char *kstr, int klen, + pem_password_cb *cb, void *u); + +EVP_PKEY *d2i_PKCS8PrivateKey_fp(FILE *fp, EVP_PKEY **x, pem_password_cb *cb, void *u); + +int PEM_write_PKCS8PrivateKey(FILE *fp,EVP_PKEY *x,const EVP_CIPHER *enc, + char *kstr,int klen, pem_password_cb *cd, void *u); + +EVP_PKEY *PEM_read_bio_Parameters(BIO *bp, EVP_PKEY **x); +int PEM_write_bio_Parameters(BIO *bp, EVP_PKEY *x); + + +EVP_PKEY *b2i_PrivateKey(const unsigned char **in, long length); +EVP_PKEY *b2i_PublicKey(const unsigned char **in, long length); +EVP_PKEY *b2i_PrivateKey_bio(BIO *in); +EVP_PKEY *b2i_PublicKey_bio(BIO *in); +int i2b_PrivateKey_bio(BIO *out, EVP_PKEY *pk); +int i2b_PublicKey_bio(BIO *out, EVP_PKEY *pk); +#ifndef OPENSSL_NO_RC4 +EVP_PKEY *b2i_PVK_bio(BIO *in, pem_password_cb *cb, void *u); +int i2b_PVK_bio(BIO *out, EVP_PKEY *pk, int enclevel, + pem_password_cb *cb, void *u); +#endif + + +/* BEGIN ERROR CODES */ +/* The following lines are auto generated by the script mkerr.pl. Any changes + * made after this point may be overwritten when the script is next run. + */ +void ERR_load_PEM_strings(void); + +/* Error codes for the PEM functions. */ + +/* Function codes. */ +#define PEM_F_B2I_DSS 127 +#define PEM_F_B2I_PVK_BIO 128 +#define PEM_F_B2I_RSA 129 +#define PEM_F_CHECK_BITLEN_DSA 130 +#define PEM_F_CHECK_BITLEN_RSA 131 +#define PEM_F_D2I_PKCS8PRIVATEKEY_BIO 120 +#define PEM_F_D2I_PKCS8PRIVATEKEY_FP 121 +#define PEM_F_DO_B2I 132 +#define PEM_F_DO_B2I_BIO 133 +#define PEM_F_DO_BLOB_HEADER 134 +#define PEM_F_DO_PK8PKEY 126 +#define PEM_F_DO_PK8PKEY_FP 125 +#define PEM_F_DO_PVK_BODY 135 +#define PEM_F_DO_PVK_HEADER 136 +#define PEM_F_I2B_PVK 137 +#define PEM_F_I2B_PVK_BIO 138 +#define PEM_F_LOAD_IV 101 +#define PEM_F_PEM_ASN1_READ 102 +#define PEM_F_PEM_ASN1_READ_BIO 103 +#define PEM_F_PEM_ASN1_WRITE 104 +#define PEM_F_PEM_ASN1_WRITE_BIO 105 +#define PEM_F_PEM_DEF_CALLBACK 100 +#define PEM_F_PEM_DO_HEADER 106 +#define PEM_F_PEM_F_PEM_WRITE_PKCS8PRIVATEKEY 118 +#define PEM_F_PEM_GET_EVP_CIPHER_INFO 107 +#define PEM_F_PEM_PK8PKEY 119 +#define PEM_F_PEM_READ 108 +#define PEM_F_PEM_READ_BIO 109 +#define PEM_F_PEM_READ_BIO_PARAMETERS 140 +#define PEM_F_PEM_READ_BIO_PRIVATEKEY 123 +#define PEM_F_PEM_READ_PRIVATEKEY 124 +#define PEM_F_PEM_SEALFINAL 110 +#define PEM_F_PEM_SEALINIT 111 +#define PEM_F_PEM_SIGNFINAL 112 +#define PEM_F_PEM_WRITE 113 +#define PEM_F_PEM_WRITE_BIO 114 +#define PEM_F_PEM_WRITE_PRIVATEKEY 139 +#define PEM_F_PEM_X509_INFO_READ 115 +#define PEM_F_PEM_X509_INFO_READ_BIO 116 +#define PEM_F_PEM_X509_INFO_WRITE_BIO 117 + +/* Reason codes. */ +#define PEM_R_BAD_BASE64_DECODE 100 +#define PEM_R_BAD_DECRYPT 101 +#define PEM_R_BAD_END_LINE 102 +#define PEM_R_BAD_IV_CHARS 103 +#define PEM_R_BAD_MAGIC_NUMBER 116 +#define PEM_R_BAD_PASSWORD_READ 104 +#define PEM_R_BAD_VERSION_NUMBER 117 +#define PEM_R_BIO_WRITE_FAILURE 118 +#define PEM_R_CIPHER_IS_NULL 127 +#define PEM_R_ERROR_CONVERTING_PRIVATE_KEY 115 +#define PEM_R_EXPECTING_PRIVATE_KEY_BLOB 119 +#define PEM_R_EXPECTING_PUBLIC_KEY_BLOB 120 +#define PEM_R_INCONSISTENT_HEADER 121 +#define PEM_R_KEYBLOB_HEADER_PARSE_ERROR 122 +#define PEM_R_KEYBLOB_TOO_SHORT 123 +#define PEM_R_NOT_DEK_INFO 105 +#define PEM_R_NOT_ENCRYPTED 106 +#define PEM_R_NOT_PROC_TYPE 107 +#define PEM_R_NO_START_LINE 108 +#define PEM_R_PROBLEMS_GETTING_PASSWORD 109 +#define PEM_R_PUBLIC_KEY_NO_RSA 110 +#define PEM_R_PVK_DATA_TOO_SHORT 124 +#define PEM_R_PVK_TOO_SHORT 125 +#define PEM_R_READ_KEY 111 +#define PEM_R_SHORT_HEADER 112 +#define PEM_R_UNSUPPORTED_CIPHER 113 +#define PEM_R_UNSUPPORTED_ENCRYPTION 114 +#define PEM_R_UNSUPPORTED_KEY_COMPONENTS 126 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/extra_lib/include/openssl/pem2.h b/extra_lib/include/openssl/pem2.h new file mode 100644 index 0000000..f31790d --- /dev/null +++ b/extra_lib/include/openssl/pem2.h @@ -0,0 +1,70 @@ +/* ==================================================================== + * Copyright (c) 1999 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * licensing@OpenSSL.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED 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 OpenSSL PROJECT OR + * ITS 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. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ + +/* + * This header only exists to break a circular dependency between pem and err + * Ben 30 Jan 1999. + */ + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef HEADER_PEM_H +void ERR_load_PEM_strings(void); +#endif + +#ifdef __cplusplus +} +#endif diff --git a/extra_lib/include/openssl/pkcs7.h b/extra_lib/include/openssl/pkcs7.h new file mode 100644 index 0000000..e4d4431 --- /dev/null +++ b/extra_lib/include/openssl/pkcs7.h @@ -0,0 +1,499 @@ +/* crypto/pkcs7/pkcs7.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 AUTHOR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_PKCS7_H +#define HEADER_PKCS7_H + +#include +#include +#include + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef OPENSSL_SYS_WIN32 +/* Under Win32 thes are defined in wincrypt.h */ +#undef PKCS7_ISSUER_AND_SERIAL +#undef PKCS7_SIGNER_INFO +#endif + +/* +Encryption_ID DES-CBC +Digest_ID MD5 +Digest_Encryption_ID rsaEncryption +Key_Encryption_ID rsaEncryption +*/ + +typedef struct pkcs7_issuer_and_serial_st + { + X509_NAME *issuer; + ASN1_INTEGER *serial; + } PKCS7_ISSUER_AND_SERIAL; + +typedef struct pkcs7_signer_info_st + { + ASN1_INTEGER *version; /* version 1 */ + PKCS7_ISSUER_AND_SERIAL *issuer_and_serial; + X509_ALGOR *digest_alg; + STACK_OF(X509_ATTRIBUTE) *auth_attr; /* [ 0 ] */ + X509_ALGOR *digest_enc_alg; + ASN1_OCTET_STRING *enc_digest; + STACK_OF(X509_ATTRIBUTE) *unauth_attr; /* [ 1 ] */ + + /* The private key to sign with */ + EVP_PKEY *pkey; + } PKCS7_SIGNER_INFO; + +DECLARE_STACK_OF(PKCS7_SIGNER_INFO) +DECLARE_ASN1_SET_OF(PKCS7_SIGNER_INFO) + +typedef struct pkcs7_recip_info_st + { + ASN1_INTEGER *version; /* version 0 */ + PKCS7_ISSUER_AND_SERIAL *issuer_and_serial; + X509_ALGOR *key_enc_algor; + ASN1_OCTET_STRING *enc_key; + X509 *cert; /* get the pub-key from this */ + } PKCS7_RECIP_INFO; + +DECLARE_STACK_OF(PKCS7_RECIP_INFO) +DECLARE_ASN1_SET_OF(PKCS7_RECIP_INFO) + +typedef struct pkcs7_signed_st + { + ASN1_INTEGER *version; /* version 1 */ + STACK_OF(X509_ALGOR) *md_algs; /* md used */ + STACK_OF(X509) *cert; /* [ 0 ] */ + STACK_OF(X509_CRL) *crl; /* [ 1 ] */ + STACK_OF(PKCS7_SIGNER_INFO) *signer_info; + + struct pkcs7_st *contents; + } PKCS7_SIGNED; +/* The above structure is very very similar to PKCS7_SIGN_ENVELOPE. + * How about merging the two */ + +typedef struct pkcs7_enc_content_st + { + ASN1_OBJECT *content_type; + X509_ALGOR *algorithm; + ASN1_OCTET_STRING *enc_data; /* [ 0 ] */ + const EVP_CIPHER *cipher; + } PKCS7_ENC_CONTENT; + +typedef struct pkcs7_enveloped_st + { + ASN1_INTEGER *version; /* version 0 */ + STACK_OF(PKCS7_RECIP_INFO) *recipientinfo; + PKCS7_ENC_CONTENT *enc_data; + } PKCS7_ENVELOPE; + +typedef struct pkcs7_signedandenveloped_st + { + ASN1_INTEGER *version; /* version 1 */ + STACK_OF(X509_ALGOR) *md_algs; /* md used */ + STACK_OF(X509) *cert; /* [ 0 ] */ + STACK_OF(X509_CRL) *crl; /* [ 1 ] */ + STACK_OF(PKCS7_SIGNER_INFO) *signer_info; + + PKCS7_ENC_CONTENT *enc_data; + STACK_OF(PKCS7_RECIP_INFO) *recipientinfo; + } PKCS7_SIGN_ENVELOPE; + +typedef struct pkcs7_digest_st + { + ASN1_INTEGER *version; /* version 0 */ + X509_ALGOR *md; /* md used */ + struct pkcs7_st *contents; + ASN1_OCTET_STRING *digest; + } PKCS7_DIGEST; + +typedef struct pkcs7_encrypted_st + { + ASN1_INTEGER *version; /* version 0 */ + PKCS7_ENC_CONTENT *enc_data; + } PKCS7_ENCRYPT; + +typedef struct pkcs7_st + { + /* The following is non NULL if it contains ASN1 encoding of + * this structure */ + unsigned char *asn1; + long length; + +#define PKCS7_S_HEADER 0 +#define PKCS7_S_BODY 1 +#define PKCS7_S_TAIL 2 + int state; /* used during processing */ + + int detached; + + ASN1_OBJECT *type; + /* content as defined by the type */ + /* all encryption/message digests are applied to the 'contents', + * leaving out the 'type' field. */ + union { + char *ptr; + + /* NID_pkcs7_data */ + ASN1_OCTET_STRING *data; + + /* NID_pkcs7_signed */ + PKCS7_SIGNED *sign; + + /* NID_pkcs7_enveloped */ + PKCS7_ENVELOPE *enveloped; + + /* NID_pkcs7_signedAndEnveloped */ + PKCS7_SIGN_ENVELOPE *signed_and_enveloped; + + /* NID_pkcs7_digest */ + PKCS7_DIGEST *digest; + + /* NID_pkcs7_encrypted */ + PKCS7_ENCRYPT *encrypted; + + /* Anything else */ + ASN1_TYPE *other; + } d; + } PKCS7; + +DECLARE_STACK_OF(PKCS7) +DECLARE_ASN1_SET_OF(PKCS7) +DECLARE_PKCS12_STACK_OF(PKCS7) + +#define PKCS7_OP_SET_DETACHED_SIGNATURE 1 +#define PKCS7_OP_GET_DETACHED_SIGNATURE 2 + +#define PKCS7_get_signed_attributes(si) ((si)->auth_attr) +#define PKCS7_get_attributes(si) ((si)->unauth_attr) + +#define PKCS7_type_is_signed(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_signed) +#define PKCS7_type_is_encrypted(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_encrypted) +#define PKCS7_type_is_enveloped(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_enveloped) +#define PKCS7_type_is_signedAndEnveloped(a) \ + (OBJ_obj2nid((a)->type) == NID_pkcs7_signedAndEnveloped) +#define PKCS7_type_is_data(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_data) +#define PKCS7_type_is_digest(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_digest) +#define PKCS7_type_is_encrypted(a) \ + (OBJ_obj2nid((a)->type) == NID_pkcs7_encrypted) + +#define PKCS7_type_is_digest(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_digest) + +#define PKCS7_set_detached(p,v) \ + PKCS7_ctrl(p,PKCS7_OP_SET_DETACHED_SIGNATURE,v,NULL) +#define PKCS7_get_detached(p) \ + PKCS7_ctrl(p,PKCS7_OP_GET_DETACHED_SIGNATURE,0,NULL) + +#define PKCS7_is_detached(p7) (PKCS7_type_is_signed(p7) && PKCS7_get_detached(p7)) + +/* S/MIME related flags */ + +#define PKCS7_TEXT 0x1 +#define PKCS7_NOCERTS 0x2 +#define PKCS7_NOSIGS 0x4 +#define PKCS7_NOCHAIN 0x8 +#define PKCS7_NOINTERN 0x10 +#define PKCS7_NOVERIFY 0x20 +#define PKCS7_DETACHED 0x40 +#define PKCS7_BINARY 0x80 +#define PKCS7_NOATTR 0x100 +#define PKCS7_NOSMIMECAP 0x200 +#define PKCS7_NOOLDMIMETYPE 0x400 +#define PKCS7_CRLFEOL 0x800 +#define PKCS7_STREAM 0x1000 +#define PKCS7_NOCRL 0x2000 +#define PKCS7_PARTIAL 0x4000 +#define PKCS7_REUSE_DIGEST 0x8000 + +/* Flags: for compatibility with older code */ + +#define SMIME_TEXT PKCS7_TEXT +#define SMIME_NOCERTS PKCS7_NOCERTS +#define SMIME_NOSIGS PKCS7_NOSIGS +#define SMIME_NOCHAIN PKCS7_NOCHAIN +#define SMIME_NOINTERN PKCS7_NOINTERN +#define SMIME_NOVERIFY PKCS7_NOVERIFY +#define SMIME_DETACHED PKCS7_DETACHED +#define SMIME_BINARY PKCS7_BINARY +#define SMIME_NOATTR PKCS7_NOATTR + +DECLARE_ASN1_FUNCTIONS(PKCS7_ISSUER_AND_SERIAL) + +int PKCS7_ISSUER_AND_SERIAL_digest(PKCS7_ISSUER_AND_SERIAL *data,const EVP_MD *type, + unsigned char *md,unsigned int *len); +#ifndef OPENSSL_NO_FP_API +PKCS7 *d2i_PKCS7_fp(FILE *fp,PKCS7 **p7); +int i2d_PKCS7_fp(FILE *fp,PKCS7 *p7); +#endif +PKCS7 *PKCS7_dup(PKCS7 *p7); +PKCS7 *d2i_PKCS7_bio(BIO *bp,PKCS7 **p7); +int i2d_PKCS7_bio(BIO *bp,PKCS7 *p7); +int i2d_PKCS7_bio_stream(BIO *out, PKCS7 *p7, BIO *in, int flags); +int PEM_write_bio_PKCS7_stream(BIO *out, PKCS7 *p7, BIO *in, int flags); + +DECLARE_ASN1_FUNCTIONS(PKCS7_SIGNER_INFO) +DECLARE_ASN1_FUNCTIONS(PKCS7_RECIP_INFO) +DECLARE_ASN1_FUNCTIONS(PKCS7_SIGNED) +DECLARE_ASN1_FUNCTIONS(PKCS7_ENC_CONTENT) +DECLARE_ASN1_FUNCTIONS(PKCS7_ENVELOPE) +DECLARE_ASN1_FUNCTIONS(PKCS7_SIGN_ENVELOPE) +DECLARE_ASN1_FUNCTIONS(PKCS7_DIGEST) +DECLARE_ASN1_FUNCTIONS(PKCS7_ENCRYPT) +DECLARE_ASN1_FUNCTIONS(PKCS7) + +DECLARE_ASN1_ITEM(PKCS7_ATTR_SIGN) +DECLARE_ASN1_ITEM(PKCS7_ATTR_VERIFY) + +DECLARE_ASN1_NDEF_FUNCTION(PKCS7) +DECLARE_ASN1_PRINT_FUNCTION(PKCS7) + +long PKCS7_ctrl(PKCS7 *p7, int cmd, long larg, char *parg); + +int PKCS7_set_type(PKCS7 *p7, int type); +int PKCS7_set0_type_other(PKCS7 *p7, int type, ASN1_TYPE *other); +int PKCS7_set_content(PKCS7 *p7, PKCS7 *p7_data); +int PKCS7_SIGNER_INFO_set(PKCS7_SIGNER_INFO *p7i, X509 *x509, EVP_PKEY *pkey, + const EVP_MD *dgst); +int PKCS7_SIGNER_INFO_sign(PKCS7_SIGNER_INFO *si); +int PKCS7_add_signer(PKCS7 *p7, PKCS7_SIGNER_INFO *p7i); +int PKCS7_add_certificate(PKCS7 *p7, X509 *x509); +int PKCS7_add_crl(PKCS7 *p7, X509_CRL *x509); +int PKCS7_content_new(PKCS7 *p7, int nid); +int PKCS7_dataVerify(X509_STORE *cert_store, X509_STORE_CTX *ctx, + BIO *bio, PKCS7 *p7, PKCS7_SIGNER_INFO *si); +int PKCS7_signatureVerify(BIO *bio, PKCS7 *p7, PKCS7_SIGNER_INFO *si, + X509 *x509); + +BIO *PKCS7_dataInit(PKCS7 *p7, BIO *bio); +int PKCS7_dataFinal(PKCS7 *p7, BIO *bio); +BIO *PKCS7_dataDecode(PKCS7 *p7, EVP_PKEY *pkey, BIO *in_bio, X509 *pcert); + + +PKCS7_SIGNER_INFO *PKCS7_add_signature(PKCS7 *p7, X509 *x509, + EVP_PKEY *pkey, const EVP_MD *dgst); +X509 *PKCS7_cert_from_signer_info(PKCS7 *p7, PKCS7_SIGNER_INFO *si); +int PKCS7_set_digest(PKCS7 *p7, const EVP_MD *md); +STACK_OF(PKCS7_SIGNER_INFO) *PKCS7_get_signer_info(PKCS7 *p7); + +PKCS7_RECIP_INFO *PKCS7_add_recipient(PKCS7 *p7, X509 *x509); +void PKCS7_SIGNER_INFO_get0_algs(PKCS7_SIGNER_INFO *si, EVP_PKEY **pk, + X509_ALGOR **pdig, X509_ALGOR **psig); +void PKCS7_RECIP_INFO_get0_alg(PKCS7_RECIP_INFO *ri, X509_ALGOR **penc); +int PKCS7_add_recipient_info(PKCS7 *p7, PKCS7_RECIP_INFO *ri); +int PKCS7_RECIP_INFO_set(PKCS7_RECIP_INFO *p7i, X509 *x509); +int PKCS7_set_cipher(PKCS7 *p7, const EVP_CIPHER *cipher); +int PKCS7_stream(unsigned char ***boundary, PKCS7 *p7); + +PKCS7_ISSUER_AND_SERIAL *PKCS7_get_issuer_and_serial(PKCS7 *p7, int idx); +ASN1_OCTET_STRING *PKCS7_digest_from_attributes(STACK_OF(X509_ATTRIBUTE) *sk); +int PKCS7_add_signed_attribute(PKCS7_SIGNER_INFO *p7si,int nid,int type, + void *data); +int PKCS7_add_attribute (PKCS7_SIGNER_INFO *p7si, int nid, int atrtype, + void *value); +ASN1_TYPE *PKCS7_get_attribute(PKCS7_SIGNER_INFO *si, int nid); +ASN1_TYPE *PKCS7_get_signed_attribute(PKCS7_SIGNER_INFO *si, int nid); +int PKCS7_set_signed_attributes(PKCS7_SIGNER_INFO *p7si, + STACK_OF(X509_ATTRIBUTE) *sk); +int PKCS7_set_attributes(PKCS7_SIGNER_INFO *p7si,STACK_OF(X509_ATTRIBUTE) *sk); + + +PKCS7 *PKCS7_sign(X509 *signcert, EVP_PKEY *pkey, STACK_OF(X509) *certs, + BIO *data, int flags); + +PKCS7_SIGNER_INFO *PKCS7_sign_add_signer(PKCS7 *p7, + X509 *signcert, EVP_PKEY *pkey, const EVP_MD *md, + int flags); + +int PKCS7_final(PKCS7 *p7, BIO *data, int flags); +int PKCS7_verify(PKCS7 *p7, STACK_OF(X509) *certs, X509_STORE *store, + BIO *indata, BIO *out, int flags); +STACK_OF(X509) *PKCS7_get0_signers(PKCS7 *p7, STACK_OF(X509) *certs, int flags); +PKCS7 *PKCS7_encrypt(STACK_OF(X509) *certs, BIO *in, const EVP_CIPHER *cipher, + int flags); +int PKCS7_decrypt(PKCS7 *p7, EVP_PKEY *pkey, X509 *cert, BIO *data, int flags); + +int PKCS7_add_attrib_smimecap(PKCS7_SIGNER_INFO *si, + STACK_OF(X509_ALGOR) *cap); +STACK_OF(X509_ALGOR) *PKCS7_get_smimecap(PKCS7_SIGNER_INFO *si); +int PKCS7_simple_smimecap(STACK_OF(X509_ALGOR) *sk, int nid, int arg); + +int PKCS7_add_attrib_content_type(PKCS7_SIGNER_INFO *si, ASN1_OBJECT *coid); +int PKCS7_add0_attrib_signing_time(PKCS7_SIGNER_INFO *si, ASN1_TIME *t); +int PKCS7_add1_attrib_digest(PKCS7_SIGNER_INFO *si, + const unsigned char *md, int mdlen); + +int SMIME_write_PKCS7(BIO *bio, PKCS7 *p7, BIO *data, int flags); +PKCS7 *SMIME_read_PKCS7(BIO *bio, BIO **bcont); + +BIO *BIO_new_PKCS7(BIO *out, PKCS7 *p7); + + +/* BEGIN ERROR CODES */ +/* The following lines are auto generated by the script mkerr.pl. Any changes + * made after this point may be overwritten when the script is next run. + */ +void ERR_load_PKCS7_strings(void); + +/* Error codes for the PKCS7 functions. */ + +/* Function codes. */ +#define PKCS7_F_B64_READ_PKCS7 120 +#define PKCS7_F_B64_WRITE_PKCS7 121 +#define PKCS7_F_DO_PKCS7_SIGNED_ATTRIB 136 +#define PKCS7_F_I2D_PKCS7_BIO_STREAM 140 +#define PKCS7_F_PKCS7_ADD0_ATTRIB_SIGNING_TIME 135 +#define PKCS7_F_PKCS7_ADD_ATTRIB_SMIMECAP 118 +#define PKCS7_F_PKCS7_ADD_CERTIFICATE 100 +#define PKCS7_F_PKCS7_ADD_CRL 101 +#define PKCS7_F_PKCS7_ADD_RECIPIENT_INFO 102 +#define PKCS7_F_PKCS7_ADD_SIGNATURE 131 +#define PKCS7_F_PKCS7_ADD_SIGNER 103 +#define PKCS7_F_PKCS7_BIO_ADD_DIGEST 125 +#define PKCS7_F_PKCS7_COPY_EXISTING_DIGEST 138 +#define PKCS7_F_PKCS7_CTRL 104 +#define PKCS7_F_PKCS7_DATADECODE 112 +#define PKCS7_F_PKCS7_DATAFINAL 128 +#define PKCS7_F_PKCS7_DATAINIT 105 +#define PKCS7_F_PKCS7_DATASIGN 106 +#define PKCS7_F_PKCS7_DATAVERIFY 107 +#define PKCS7_F_PKCS7_DECRYPT 114 +#define PKCS7_F_PKCS7_DECRYPT_RINFO 133 +#define PKCS7_F_PKCS7_ENCODE_RINFO 132 +#define PKCS7_F_PKCS7_ENCRYPT 115 +#define PKCS7_F_PKCS7_FINAL 134 +#define PKCS7_F_PKCS7_FIND_DIGEST 127 +#define PKCS7_F_PKCS7_GET0_SIGNERS 124 +#define PKCS7_F_PKCS7_RECIP_INFO_SET 130 +#define PKCS7_F_PKCS7_SET_CIPHER 108 +#define PKCS7_F_PKCS7_SET_CONTENT 109 +#define PKCS7_F_PKCS7_SET_DIGEST 126 +#define PKCS7_F_PKCS7_SET_TYPE 110 +#define PKCS7_F_PKCS7_SIGN 116 +#define PKCS7_F_PKCS7_SIGNATUREVERIFY 113 +#define PKCS7_F_PKCS7_SIGNER_INFO_SET 129 +#define PKCS7_F_PKCS7_SIGNER_INFO_SIGN 139 +#define PKCS7_F_PKCS7_SIGN_ADD_SIGNER 137 +#define PKCS7_F_PKCS7_SIMPLE_SMIMECAP 119 +#define PKCS7_F_PKCS7_VERIFY 117 +#define PKCS7_F_SMIME_READ_PKCS7 122 +#define PKCS7_F_SMIME_TEXT 123 + +/* Reason codes. */ +#define PKCS7_R_CERTIFICATE_VERIFY_ERROR 117 +#define PKCS7_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER 144 +#define PKCS7_R_CIPHER_NOT_INITIALIZED 116 +#define PKCS7_R_CONTENT_AND_DATA_PRESENT 118 +#define PKCS7_R_CTRL_ERROR 152 +#define PKCS7_R_DECODE_ERROR 130 +#define PKCS7_R_DECRYPTED_KEY_IS_WRONG_LENGTH 100 +#define PKCS7_R_DECRYPT_ERROR 119 +#define PKCS7_R_DIGEST_FAILURE 101 +#define PKCS7_R_ENCRYPTION_CTRL_FAILURE 149 +#define PKCS7_R_ENCRYPTION_NOT_SUPPORTED_FOR_THIS_KEY_TYPE 150 +#define PKCS7_R_ERROR_ADDING_RECIPIENT 120 +#define PKCS7_R_ERROR_SETTING_CIPHER 121 +#define PKCS7_R_INVALID_MIME_TYPE 131 +#define PKCS7_R_INVALID_NULL_POINTER 143 +#define PKCS7_R_MIME_NO_CONTENT_TYPE 132 +#define PKCS7_R_MIME_PARSE_ERROR 133 +#define PKCS7_R_MIME_SIG_PARSE_ERROR 134 +#define PKCS7_R_MISSING_CERIPEND_INFO 103 +#define PKCS7_R_NO_CONTENT 122 +#define PKCS7_R_NO_CONTENT_TYPE 135 +#define PKCS7_R_NO_DEFAULT_DIGEST 151 +#define PKCS7_R_NO_MATCHING_DIGEST_TYPE_FOUND 154 +#define PKCS7_R_NO_MULTIPART_BODY_FAILURE 136 +#define PKCS7_R_NO_MULTIPART_BOUNDARY 137 +#define PKCS7_R_NO_RECIPIENT_MATCHES_CERTIFICATE 115 +#define PKCS7_R_NO_RECIPIENT_MATCHES_KEY 146 +#define PKCS7_R_NO_SIGNATURES_ON_DATA 123 +#define PKCS7_R_NO_SIGNERS 142 +#define PKCS7_R_NO_SIG_CONTENT_TYPE 138 +#define PKCS7_R_OPERATION_NOT_SUPPORTED_ON_THIS_TYPE 104 +#define PKCS7_R_PKCS7_ADD_SIGNATURE_ERROR 124 +#define PKCS7_R_PKCS7_ADD_SIGNER_ERROR 153 +#define PKCS7_R_PKCS7_DATAFINAL 126 +#define PKCS7_R_PKCS7_DATAFINAL_ERROR 125 +#define PKCS7_R_PKCS7_DATASIGN 145 +#define PKCS7_R_PKCS7_PARSE_ERROR 139 +#define PKCS7_R_PKCS7_SIG_PARSE_ERROR 140 +#define PKCS7_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE 127 +#define PKCS7_R_SIGNATURE_FAILURE 105 +#define PKCS7_R_SIGNER_CERTIFICATE_NOT_FOUND 128 +#define PKCS7_R_SIGNING_CTRL_FAILURE 147 +#define PKCS7_R_SIGNING_NOT_SUPPORTED_FOR_THIS_KEY_TYPE 148 +#define PKCS7_R_SIG_INVALID_MIME_TYPE 141 +#define PKCS7_R_SMIME_TEXT_ERROR 129 +#define PKCS7_R_UNABLE_TO_FIND_CERTIFICATE 106 +#define PKCS7_R_UNABLE_TO_FIND_MEM_BIO 107 +#define PKCS7_R_UNABLE_TO_FIND_MESSAGE_DIGEST 108 +#define PKCS7_R_UNKNOWN_DIGEST_TYPE 109 +#define PKCS7_R_UNKNOWN_OPERATION 110 +#define PKCS7_R_UNSUPPORTED_CIPHER_TYPE 111 +#define PKCS7_R_UNSUPPORTED_CONTENT_TYPE 112 +#define PKCS7_R_WRONG_CONTENT_TYPE 113 +#define PKCS7_R_WRONG_PKCS7_TYPE 114 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/extra_lib/include/openssl/pqueue.h b/extra_lib/include/openssl/pqueue.h new file mode 100644 index 0000000..87fc903 --- /dev/null +++ b/extra_lib/include/openssl/pqueue.h @@ -0,0 +1,94 @@ +/* crypto/pqueue/pqueue.h */ +/* + * DTLS implementation written by Nagendra Modadugu + * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. + */ +/* ==================================================================== + * Copyright (c) 1999-2005 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@OpenSSL.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED 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 OpenSSL PROJECT OR + * ITS 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. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ + +#ifndef HEADER_PQUEUE_H +#define HEADER_PQUEUE_H + +#include +#include +#include + +typedef struct _pqueue *pqueue; + +typedef struct _pitem + { + unsigned char priority[8]; /* 64-bit value in big-endian encoding */ + void *data; + struct _pitem *next; + } pitem; + +typedef struct _pitem *piterator; + +pitem *pitem_new(unsigned char *prio64be, void *data); +void pitem_free(pitem *item); + +pqueue pqueue_new(void); +void pqueue_free(pqueue pq); + +pitem *pqueue_insert(pqueue pq, pitem *item); +pitem *pqueue_peek(pqueue pq); +pitem *pqueue_pop(pqueue pq); +pitem *pqueue_find(pqueue pq, unsigned char *prio64be); +pitem *pqueue_iterator(pqueue pq); +pitem *pqueue_next(piterator *iter); + +void pqueue_print(pqueue pq); +int pqueue_size(pqueue pq); + +#endif /* ! HEADER_PQUEUE_H */ diff --git a/extra_lib/include/openssl/rand.h b/extra_lib/include/openssl/rand.h new file mode 100644 index 0000000..ac6c021 --- /dev/null +++ b/extra_lib/include/openssl/rand.h @@ -0,0 +1,140 @@ +/* crypto/rand/rand.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 AUTHOR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_RAND_H +#define HEADER_RAND_H + +#include +#include +#include + +#if defined(OPENSSL_SYS_WINDOWS) +#include +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(OPENSSL_FIPS) +#define FIPS_RAND_SIZE_T size_t +#endif + +/* Already defined in ossl_typ.h */ +/* typedef struct rand_meth_st RAND_METHOD; */ + +struct rand_meth_st + { + void (*seed)(const void *buf, int num); + int (*bytes)(unsigned char *buf, int num); + void (*cleanup)(void); + void (*add)(const void *buf, int num, double entropy); + int (*pseudorand)(unsigned char *buf, int num); + int (*status)(void); + }; + +#ifdef BN_DEBUG +extern int rand_predictable; +#endif + +int RAND_set_rand_method(const RAND_METHOD *meth); +const RAND_METHOD *RAND_get_rand_method(void); +#ifndef OPENSSL_NO_ENGINE +int RAND_set_rand_engine(ENGINE *engine); +#endif +RAND_METHOD *RAND_SSLeay(void); +void RAND_cleanup(void ); +int RAND_bytes(unsigned char *buf,int num); +int RAND_pseudo_bytes(unsigned char *buf,int num); +void RAND_seed(const void *buf,int num); +void RAND_add(const void *buf,int num,double entropy); +int RAND_load_file(const char *file,long max_bytes); +int RAND_write_file(const char *file); +const char *RAND_file_name(char *file,size_t num); +int RAND_status(void); +int RAND_query_egd_bytes(const char *path, unsigned char *buf, int bytes); +int RAND_egd(const char *path); +int RAND_egd_bytes(const char *path,int bytes); +int RAND_poll(void); + +#if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_WIN32) + +void RAND_screen(void); +int RAND_event(UINT, WPARAM, LPARAM); + +#endif + +/* BEGIN ERROR CODES */ +/* The following lines are auto generated by the script mkerr.pl. Any changes + * made after this point may be overwritten when the script is next run. + */ +void ERR_load_RAND_strings(void); + +/* Error codes for the RAND functions. */ + +/* Function codes. */ +#define RAND_F_RAND_GET_RAND_METHOD 101 +#define RAND_F_SSLEAY_RAND_BYTES 100 + +/* Reason codes. */ +#define RAND_R_PRNG_NOT_SEEDED 100 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/extra_lib/include/openssl/rsa.h b/extra_lib/include/openssl/rsa.h new file mode 100644 index 0000000..cf74343 --- /dev/null +++ b/extra_lib/include/openssl/rsa.h @@ -0,0 +1,503 @@ +/* crypto/rsa/rsa.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 AUTHOR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_RSA_H +#define HEADER_RSA_H + +#include + +#ifndef OPENSSL_NO_BIO +#include +#endif +#include +#include +#ifndef OPENSSL_NO_DEPRECATED +#include +#endif + +#ifdef OPENSSL_NO_RSA +#error RSA is disabled. +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Declared already in ossl_typ.h */ +/* typedef struct rsa_st RSA; */ +/* typedef struct rsa_meth_st RSA_METHOD; */ + +struct rsa_meth_st + { + const char *name; + int (*rsa_pub_enc)(int flen,const unsigned char *from, + unsigned char *to, + RSA *rsa,int padding); + int (*rsa_pub_dec)(int flen,const unsigned char *from, + unsigned char *to, + RSA *rsa,int padding); + int (*rsa_priv_enc)(int flen,const unsigned char *from, + unsigned char *to, + RSA *rsa,int padding); + int (*rsa_priv_dec)(int flen,const unsigned char *from, + unsigned char *to, + RSA *rsa,int padding); + int (*rsa_mod_exp)(BIGNUM *r0,const BIGNUM *I,RSA *rsa,BN_CTX *ctx); /* Can be null */ + int (*bn_mod_exp)(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, + const BIGNUM *m, BN_CTX *ctx, + BN_MONT_CTX *m_ctx); /* Can be null */ + int (*init)(RSA *rsa); /* called at new */ + int (*finish)(RSA *rsa); /* called at free */ + int flags; /* RSA_METHOD_FLAG_* things */ + char *app_data; /* may be needed! */ +/* New sign and verify functions: some libraries don't allow arbitrary data + * to be signed/verified: this allows them to be used. Note: for this to work + * the RSA_public_decrypt() and RSA_private_encrypt() should *NOT* be used + * RSA_sign(), RSA_verify() should be used instead. Note: for backwards + * compatibility this functionality is only enabled if the RSA_FLAG_SIGN_VER + * option is set in 'flags'. + */ + int (*rsa_sign)(int type, + const unsigned char *m, unsigned int m_length, + unsigned char *sigret, unsigned int *siglen, const RSA *rsa); + int (*rsa_verify)(int dtype, + const unsigned char *m, unsigned int m_length, + const unsigned char *sigbuf, unsigned int siglen, + const RSA *rsa); +/* If this callback is NULL, the builtin software RSA key-gen will be used. This + * is for behavioural compatibility whilst the code gets rewired, but one day + * it would be nice to assume there are no such things as "builtin software" + * implementations. */ + int (*rsa_keygen)(RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb); + }; + +struct rsa_st + { + /* The first parameter is used to pickup errors where + * this is passed instead of aEVP_PKEY, it is set to 0 */ + int pad; + long version; + const RSA_METHOD *meth; + /* functional reference if 'meth' is ENGINE-provided */ + ENGINE *engine; + BIGNUM *n; + BIGNUM *e; + BIGNUM *d; + BIGNUM *p; + BIGNUM *q; + BIGNUM *dmp1; + BIGNUM *dmq1; + BIGNUM *iqmp; + /* be careful using this if the RSA structure is shared */ + CRYPTO_EX_DATA ex_data; + int references; + int flags; + + /* Used to cache montgomery values */ + BN_MONT_CTX *_method_mod_n; + BN_MONT_CTX *_method_mod_p; + BN_MONT_CTX *_method_mod_q; + + /* all BIGNUM values are actually in the following data, if it is not + * NULL */ + char *bignum_data; + BN_BLINDING *blinding; + BN_BLINDING *mt_blinding; + }; + +#ifndef OPENSSL_RSA_MAX_MODULUS_BITS +# define OPENSSL_RSA_MAX_MODULUS_BITS 16384 +#endif + +#ifndef OPENSSL_RSA_SMALL_MODULUS_BITS +# define OPENSSL_RSA_SMALL_MODULUS_BITS 3072 +#endif +#ifndef OPENSSL_RSA_MAX_PUBEXP_BITS +# define OPENSSL_RSA_MAX_PUBEXP_BITS 64 /* exponent limit enforced for "large" modulus only */ +#endif + +#define RSA_3 0x3L +#define RSA_F4 0x10001L + +#define RSA_METHOD_FLAG_NO_CHECK 0x0001 /* don't check pub/private match */ + +#define RSA_FLAG_CACHE_PUBLIC 0x0002 +#define RSA_FLAG_CACHE_PRIVATE 0x0004 +#define RSA_FLAG_BLINDING 0x0008 +#define RSA_FLAG_THREAD_SAFE 0x0010 +/* This flag means the private key operations will be handled by rsa_mod_exp + * and that they do not depend on the private key components being present: + * for example a key stored in external hardware. Without this flag bn_mod_exp + * gets called when private key components are absent. + */ +#define RSA_FLAG_EXT_PKEY 0x0020 + +/* This flag in the RSA_METHOD enables the new rsa_sign, rsa_verify functions. + */ +#define RSA_FLAG_SIGN_VER 0x0040 + +#define RSA_FLAG_NO_BLINDING 0x0080 /* new with 0.9.6j and 0.9.7b; the built-in + * RSA implementation now uses blinding by + * default (ignoring RSA_FLAG_BLINDING), + * but other engines might not need it + */ +#define RSA_FLAG_NO_CONSTTIME 0x0100 /* new with 0.9.8f; the built-in RSA + * implementation now uses constant time + * operations by default in private key operations, + * e.g., constant time modular exponentiation, + * modular inverse without leaking branches, + * division without leaking branches. This + * flag disables these constant time + * operations and results in faster RSA + * private key operations. + */ +#ifndef OPENSSL_NO_DEPRECATED +#define RSA_FLAG_NO_EXP_CONSTTIME RSA_FLAG_NO_CONSTTIME /* deprecated name for the flag*/ + /* new with 0.9.7h; the built-in RSA + * implementation now uses constant time + * modular exponentiation for secret exponents + * by default. This flag causes the + * faster variable sliding window method to + * be used for all exponents. + */ +#endif + + +#define EVP_PKEY_CTX_set_rsa_padding(ctx, pad) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, -1, EVP_PKEY_CTRL_RSA_PADDING, \ + pad, NULL) + +#define EVP_PKEY_CTX_set_rsa_pss_saltlen(ctx, len) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, \ + (EVP_PKEY_OP_SIGN|EVP_PKEY_OP_VERIFY), \ + EVP_PKEY_CTRL_RSA_PSS_SALTLEN, \ + len, NULL) + +#define EVP_PKEY_CTX_set_rsa_keygen_bits(ctx, bits) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_KEYGEN, \ + EVP_PKEY_CTRL_RSA_KEYGEN_BITS, bits, NULL) + +#define EVP_PKEY_CTX_set_rsa_keygen_pubexp(ctx, pubexp) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_KEYGEN, \ + EVP_PKEY_CTRL_RSA_KEYGEN_PUBEXP, 0, pubexp) + +#define EVP_PKEY_CTRL_RSA_PADDING (EVP_PKEY_ALG_CTRL + 1) +#define EVP_PKEY_CTRL_RSA_PSS_SALTLEN (EVP_PKEY_ALG_CTRL + 2) + +#define EVP_PKEY_CTRL_RSA_KEYGEN_BITS (EVP_PKEY_ALG_CTRL + 3) +#define EVP_PKEY_CTRL_RSA_KEYGEN_PUBEXP (EVP_PKEY_ALG_CTRL + 4) + +#define RSA_PKCS1_PADDING 1 +#define RSA_SSLV23_PADDING 2 +#define RSA_NO_PADDING 3 +#define RSA_PKCS1_OAEP_PADDING 4 +#define RSA_X931_PADDING 5 +/* EVP_PKEY_ only */ +#define RSA_PKCS1_PSS_PADDING 6 + +#define RSA_PKCS1_PADDING_SIZE 11 + +#define RSA_set_app_data(s,arg) RSA_set_ex_data(s,0,arg) +#define RSA_get_app_data(s) RSA_get_ex_data(s,0) + +RSA * RSA_new(void); +RSA * RSA_new_method(ENGINE *engine); +int RSA_size(const RSA *); + +/* Deprecated version */ +#ifndef OPENSSL_NO_DEPRECATED +RSA * RSA_generate_key(int bits, unsigned long e,void + (*callback)(int,int,void *),void *cb_arg); +#endif /* !defined(OPENSSL_NO_DEPRECATED) */ + +/* New version */ +int RSA_generate_key_ex(RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb); + +int RSA_check_key(const RSA *); + /* next 4 return -1 on error */ +int RSA_public_encrypt(int flen, const unsigned char *from, + unsigned char *to, RSA *rsa,int padding); +int RSA_private_encrypt(int flen, const unsigned char *from, + unsigned char *to, RSA *rsa,int padding); +int RSA_public_decrypt(int flen, const unsigned char *from, + unsigned char *to, RSA *rsa,int padding); +int RSA_private_decrypt(int flen, const unsigned char *from, + unsigned char *to, RSA *rsa,int padding); +void RSA_free (RSA *r); +/* "up" the RSA object's reference count */ +int RSA_up_ref(RSA *r); + +int RSA_flags(const RSA *r); + +void RSA_set_default_method(const RSA_METHOD *meth); +const RSA_METHOD *RSA_get_default_method(void); +const RSA_METHOD *RSA_get_method(const RSA *rsa); +int RSA_set_method(RSA *rsa, const RSA_METHOD *meth); + +/* This function needs the memory locking malloc callbacks to be installed */ +int RSA_memory_lock(RSA *r); + +/* these are the actual SSLeay RSA functions */ +const RSA_METHOD *RSA_PKCS1_SSLeay(void); + +const RSA_METHOD *RSA_null_method(void); + +DECLARE_ASN1_ENCODE_FUNCTIONS_const(RSA, RSAPublicKey) +DECLARE_ASN1_ENCODE_FUNCTIONS_const(RSA, RSAPrivateKey) + +#ifndef OPENSSL_NO_FP_API +int RSA_print_fp(FILE *fp, const RSA *r,int offset); +#endif + +#ifndef OPENSSL_NO_BIO +int RSA_print(BIO *bp, const RSA *r,int offset); +#endif + +#ifndef OPENSSL_NO_RC4 +int i2d_RSA_NET(const RSA *a, unsigned char **pp, + int (*cb)(char *buf, int len, const char *prompt, int verify), + int sgckey); +RSA *d2i_RSA_NET(RSA **a, const unsigned char **pp, long length, + int (*cb)(char *buf, int len, const char *prompt, int verify), + int sgckey); + +int i2d_Netscape_RSA(const RSA *a, unsigned char **pp, + int (*cb)(char *buf, int len, const char *prompt, + int verify)); +RSA *d2i_Netscape_RSA(RSA **a, const unsigned char **pp, long length, + int (*cb)(char *buf, int len, const char *prompt, + int verify)); +#endif + +/* The following 2 functions sign and verify a X509_SIG ASN1 object + * inside PKCS#1 padded RSA encryption */ +int RSA_sign(int type, const unsigned char *m, unsigned int m_length, + unsigned char *sigret, unsigned int *siglen, RSA *rsa); +int RSA_verify(int type, const unsigned char *m, unsigned int m_length, + const unsigned char *sigbuf, unsigned int siglen, RSA *rsa); + +/* The following 2 function sign and verify a ASN1_OCTET_STRING + * object inside PKCS#1 padded RSA encryption */ +int RSA_sign_ASN1_OCTET_STRING(int type, + const unsigned char *m, unsigned int m_length, + unsigned char *sigret, unsigned int *siglen, RSA *rsa); +int RSA_verify_ASN1_OCTET_STRING(int type, + const unsigned char *m, unsigned int m_length, + unsigned char *sigbuf, unsigned int siglen, RSA *rsa); + +int RSA_blinding_on(RSA *rsa, BN_CTX *ctx); +void RSA_blinding_off(RSA *rsa); +BN_BLINDING *RSA_setup_blinding(RSA *rsa, BN_CTX *ctx); + +int RSA_padding_add_PKCS1_type_1(unsigned char *to,int tlen, + const unsigned char *f,int fl); +int RSA_padding_check_PKCS1_type_1(unsigned char *to,int tlen, + const unsigned char *f,int fl,int rsa_len); +int RSA_padding_add_PKCS1_type_2(unsigned char *to,int tlen, + const unsigned char *f,int fl); +int RSA_padding_check_PKCS1_type_2(unsigned char *to,int tlen, + const unsigned char *f,int fl,int rsa_len); +int PKCS1_MGF1(unsigned char *mask, long len, + const unsigned char *seed, long seedlen, const EVP_MD *dgst); +int RSA_padding_add_PKCS1_OAEP(unsigned char *to,int tlen, + const unsigned char *f,int fl, + const unsigned char *p,int pl); +int RSA_padding_check_PKCS1_OAEP(unsigned char *to,int tlen, + const unsigned char *f,int fl,int rsa_len, + const unsigned char *p,int pl); +int RSA_padding_add_SSLv23(unsigned char *to,int tlen, + const unsigned char *f,int fl); +int RSA_padding_check_SSLv23(unsigned char *to,int tlen, + const unsigned char *f,int fl,int rsa_len); +int RSA_padding_add_none(unsigned char *to,int tlen, + const unsigned char *f,int fl); +int RSA_padding_check_none(unsigned char *to,int tlen, + const unsigned char *f,int fl,int rsa_len); +int RSA_padding_add_X931(unsigned char *to,int tlen, + const unsigned char *f,int fl); +int RSA_padding_check_X931(unsigned char *to,int tlen, + const unsigned char *f,int fl,int rsa_len); +int RSA_X931_hash_id(int nid); + +int RSA_verify_PKCS1_PSS(RSA *rsa, const unsigned char *mHash, + const EVP_MD *Hash, const unsigned char *EM, int sLen); +int RSA_padding_add_PKCS1_PSS(RSA *rsa, unsigned char *EM, + const unsigned char *mHash, + const EVP_MD *Hash, int sLen); + +int RSA_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, + CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); +int RSA_set_ex_data(RSA *r,int idx,void *arg); +void *RSA_get_ex_data(const RSA *r, int idx); + +RSA *RSAPublicKey_dup(RSA *rsa); +RSA *RSAPrivateKey_dup(RSA *rsa); + +/* BEGIN ERROR CODES */ +/* The following lines are auto generated by the script mkerr.pl. Any changes + * made after this point may be overwritten when the script is next run. + */ +void ERR_load_RSA_strings(void); + +/* Error codes for the RSA functions. */ + +/* Function codes. */ +#define RSA_F_CHECK_PADDING_MD 140 +#define RSA_F_DO_RSA_PRINT 146 +#define RSA_F_INT_RSA_VERIFY 145 +#define RSA_F_MEMORY_LOCK 100 +#define RSA_F_OLD_RSA_PRIV_DECODE 147 +#define RSA_F_PKEY_RSA_CTRL 143 +#define RSA_F_PKEY_RSA_CTRL_STR 144 +#define RSA_F_PKEY_RSA_SIGN 142 +#define RSA_F_PKEY_RSA_VERIFYRECOVER 141 +#define RSA_F_RSA_BUILTIN_KEYGEN 129 +#define RSA_F_RSA_CHECK_KEY 123 +#define RSA_F_RSA_EAY_PRIVATE_DECRYPT 101 +#define RSA_F_RSA_EAY_PRIVATE_ENCRYPT 102 +#define RSA_F_RSA_EAY_PUBLIC_DECRYPT 103 +#define RSA_F_RSA_EAY_PUBLIC_ENCRYPT 104 +#define RSA_F_RSA_GENERATE_KEY 105 +#define RSA_F_RSA_MEMORY_LOCK 130 +#define RSA_F_RSA_NEW_METHOD 106 +#define RSA_F_RSA_NULL 124 +#define RSA_F_RSA_NULL_MOD_EXP 131 +#define RSA_F_RSA_NULL_PRIVATE_DECRYPT 132 +#define RSA_F_RSA_NULL_PRIVATE_ENCRYPT 133 +#define RSA_F_RSA_NULL_PUBLIC_DECRYPT 134 +#define RSA_F_RSA_NULL_PUBLIC_ENCRYPT 135 +#define RSA_F_RSA_PADDING_ADD_NONE 107 +#define RSA_F_RSA_PADDING_ADD_PKCS1_OAEP 121 +#define RSA_F_RSA_PADDING_ADD_PKCS1_PSS 125 +#define RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_1 108 +#define RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_2 109 +#define RSA_F_RSA_PADDING_ADD_SSLV23 110 +#define RSA_F_RSA_PADDING_ADD_X931 127 +#define RSA_F_RSA_PADDING_CHECK_NONE 111 +#define RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP 122 +#define RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_1 112 +#define RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_2 113 +#define RSA_F_RSA_PADDING_CHECK_SSLV23 114 +#define RSA_F_RSA_PADDING_CHECK_X931 128 +#define RSA_F_RSA_PRINT 115 +#define RSA_F_RSA_PRINT_FP 116 +#define RSA_F_RSA_PRIV_DECODE 137 +#define RSA_F_RSA_PRIV_ENCODE 138 +#define RSA_F_RSA_PUB_DECODE 139 +#define RSA_F_RSA_SETUP_BLINDING 136 +#define RSA_F_RSA_SIGN 117 +#define RSA_F_RSA_SIGN_ASN1_OCTET_STRING 118 +#define RSA_F_RSA_VERIFY 119 +#define RSA_F_RSA_VERIFY_ASN1_OCTET_STRING 120 +#define RSA_F_RSA_VERIFY_PKCS1_PSS 126 + +/* Reason codes. */ +#define RSA_R_ALGORITHM_MISMATCH 100 +#define RSA_R_BAD_E_VALUE 101 +#define RSA_R_BAD_FIXED_HEADER_DECRYPT 102 +#define RSA_R_BAD_PAD_BYTE_COUNT 103 +#define RSA_R_BAD_SIGNATURE 104 +#define RSA_R_BLOCK_TYPE_IS_NOT_01 106 +#define RSA_R_BLOCK_TYPE_IS_NOT_02 107 +#define RSA_R_DATA_GREATER_THAN_MOD_LEN 108 +#define RSA_R_DATA_TOO_LARGE 109 +#define RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE 110 +#define RSA_R_DATA_TOO_LARGE_FOR_MODULUS 132 +#define RSA_R_DATA_TOO_SMALL 111 +#define RSA_R_DATA_TOO_SMALL_FOR_KEY_SIZE 122 +#define RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY 112 +#define RSA_R_DMP1_NOT_CONGRUENT_TO_D 124 +#define RSA_R_DMQ1_NOT_CONGRUENT_TO_D 125 +#define RSA_R_D_E_NOT_CONGRUENT_TO_1 123 +#define RSA_R_FIRST_OCTET_INVALID 133 +#define RSA_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE 144 +#define RSA_R_INVALID_DIGEST_LENGTH 143 +#define RSA_R_INVALID_HEADER 137 +#define RSA_R_INVALID_KEYBITS 145 +#define RSA_R_INVALID_MESSAGE_LENGTH 131 +#define RSA_R_INVALID_PADDING 138 +#define RSA_R_INVALID_PADDING_MODE 141 +#define RSA_R_INVALID_PSS_SALTLEN 146 +#define RSA_R_INVALID_TRAILER 139 +#define RSA_R_INVALID_X931_DIGEST 142 +#define RSA_R_IQMP_NOT_INVERSE_OF_Q 126 +#define RSA_R_KEY_SIZE_TOO_SMALL 120 +#define RSA_R_LAST_OCTET_INVALID 134 +#define RSA_R_MODULUS_TOO_LARGE 105 +#define RSA_R_NO_PUBLIC_EXPONENT 140 +#define RSA_R_NULL_BEFORE_BLOCK_MISSING 113 +#define RSA_R_N_DOES_NOT_EQUAL_P_Q 127 +#define RSA_R_OAEP_DECODING_ERROR 121 +#define RSA_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE 148 +#define RSA_R_PADDING_CHECK_FAILED 114 +#define RSA_R_P_NOT_PRIME 128 +#define RSA_R_Q_NOT_PRIME 129 +#define RSA_R_RSA_OPERATIONS_NOT_SUPPORTED 130 +#define RSA_R_SLEN_CHECK_FAILED 136 +#define RSA_R_SLEN_RECOVERY_FAILED 135 +#define RSA_R_SSLV3_ROLLBACK_ATTACK 115 +#define RSA_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD 116 +#define RSA_R_UNKNOWN_ALGORITHM_TYPE 117 +#define RSA_R_UNKNOWN_PADDING_TYPE 118 +#define RSA_R_VALUE_MISSING 147 +#define RSA_R_WRONG_SIGNATURE_LENGTH 119 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/extra_lib/include/openssl/safestack.h b/extra_lib/include/openssl/safestack.h new file mode 100644 index 0000000..39914bd --- /dev/null +++ b/extra_lib/include/openssl/safestack.h @@ -0,0 +1,2575 @@ +/* ==================================================================== + * Copyright (c) 1999 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED 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 OpenSSL PROJECT OR + * ITS 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. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ + +#ifndef HEADER_SAFESTACK_H +#define HEADER_SAFESTACK_H + +#include + +#ifndef CHECKED_PTR_OF +#define CHECKED_PTR_OF(type, p) \ + ((void*) (1 ? p : (type*)0)) +#endif + +/* In C++ we get problems because an explicit cast is needed from (void *) + * we use CHECKED_STACK_OF to ensure the correct type is passed in the macros + * below. + */ + +#define CHECKED_STACK_OF(type, p) \ + ((_STACK*) (1 ? p : (STACK_OF(type)*)0)) + +#define CHECKED_SK_FREE_FUNC(type, p) \ + ((void (*)(void *)) ((1 ? p : (void (*)(type *))0))) + +#define CHECKED_SK_FREE_FUNC2(type, p) \ + ((void (*)(void *)) ((1 ? p : (void (*)(type))0))) + +#define CHECKED_SK_CMP_FUNC(type, p) \ + ((int (*)(const void *, const void *)) \ + ((1 ? p : (int (*)(const type * const *, const type * const *))0))) + +#define STACK_OF(type) struct stack_st_##type +#define PREDECLARE_STACK_OF(type) STACK_OF(type); + +#define DECLARE_STACK_OF(type) \ +STACK_OF(type) \ + { \ + _STACK stack; \ + }; +#define DECLARE_SPECIAL_STACK_OF(type, type2) \ +STACK_OF(type) \ + { \ + _STACK stack; \ + }; + +#define IMPLEMENT_STACK_OF(type) /* nada (obsolete in new safestack approach)*/ + + +/* Strings are special: normally an lhash entry will point to a single + * (somewhat) mutable object. In the case of strings: + * + * a) Instead of a single char, there is an array of chars, NUL-terminated. + * b) The string may have be immutable. + * + * So, they need their own declarations. Especially important for + * type-checking tools, such as Deputy. + * +o * In practice, however, it appears to be hard to have a const + * string. For now, I'm settling for dealing with the fact it is a + * string at all. + */ +typedef char *OPENSSL_STRING; + +typedef const char *OPENSSL_CSTRING; + +/* Confusingly, LHASH_OF(STRING) deals with char ** throughout, but + * STACK_OF(STRING) is really more like STACK_OF(char), only, as + * mentioned above, instead of a single char each entry is a + * NUL-terminated array of chars. So, we have to implement STRING + * specially for STACK_OF. This is dealt with in the autogenerated + * macros below. + */ + +DECLARE_SPECIAL_STACK_OF(OPENSSL_STRING, char) + +/* Similarly, we sometimes use a block of characters, NOT + * nul-terminated. These should also be distinguished from "normal" + * stacks. */ + +typedef void *OPENSSL_BLOCK; +DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void) + +/* SKM_sk_... stack macros are internal to safestack.h: + * never use them directly, use sk__... instead */ +#define SKM_sk_new(type, cmp) \ + ((STACK_OF(type) *)sk_new(CHECKED_SK_CMP_FUNC(type, cmp))) +#define SKM_sk_new_null(type) \ + ((STACK_OF(type) *)sk_new_null()) +#define SKM_sk_free(type, st) \ + sk_free(CHECKED_STACK_OF(type, st)) +#define SKM_sk_num(type, st) \ + sk_num(CHECKED_STACK_OF(type, st)) +#define SKM_sk_value(type, st,i) \ + ((type *)sk_value(CHECKED_STACK_OF(type, st), i)) +#define SKM_sk_set(type, st,i,val) \ + sk_set(CHECKED_STACK_OF(type, st), i, CHECKED_PTR_OF(type, val)) +#define SKM_sk_zero(type, st) \ + sk_zero(CHECKED_STACK_OF(type, st)) +#define SKM_sk_push(type, st, val) \ + sk_push(CHECKED_STACK_OF(type, st), CHECKED_PTR_OF(type, val)) +#define SKM_sk_unshift(type, st, val) \ + sk_unshift(CHECKED_STACK_OF(type, st), CHECKED_PTR_OF(type, val)) +#define SKM_sk_find(type, st, val) \ + sk_find(CHECKED_STACK_OF(type, st), CHECKED_PTR_OF(type, val)) +#define SKM_sk_find_ex(type, st, val) \ + sk_find_ex(CHECKED_STACK_OF(type, st), \ + CHECKED_PTR_OF(type, val)) +#define SKM_sk_delete(type, st, i) \ + (type *)sk_delete(CHECKED_STACK_OF(type, st), i) +#define SKM_sk_delete_ptr(type, st, ptr) \ + (type *)sk_delete_ptr(CHECKED_STACK_OF(type, st), CHECKED_PTR_OF(type, ptr)) +#define SKM_sk_insert(type, st,val, i) \ + sk_insert(CHECKED_STACK_OF(type, st), CHECKED_PTR_OF(type, val), i) +#define SKM_sk_set_cmp_func(type, st, cmp) \ + ((int (*)(const type * const *,const type * const *)) \ + sk_set_cmp_func(CHECKED_STACK_OF(type, st), CHECKED_SK_CMP_FUNC(type, cmp))) +#define SKM_sk_dup(type, st) \ + (STACK_OF(type) *)sk_dup(CHECKED_STACK_OF(type, st)) +#define SKM_sk_pop_free(type, st, free_func) \ + sk_pop_free(CHECKED_STACK_OF(type, st), CHECKED_SK_FREE_FUNC(type, free_func)) +#define SKM_sk_shift(type, st) \ + (type *)sk_shift(CHECKED_STACK_OF(type, st)) +#define SKM_sk_pop(type, st) \ + (type *)sk_pop(CHECKED_STACK_OF(type, st)) +#define SKM_sk_sort(type, st) \ + sk_sort(CHECKED_STACK_OF(type, st)) +#define SKM_sk_is_sorted(type, st) \ + sk_is_sorted(CHECKED_STACK_OF(type, st)) + +#define SKM_ASN1_SET_OF_d2i(type, st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + (STACK_OF(type) *)d2i_ASN1_SET( \ + (STACK_OF(OPENSSL_BLOCK) **)CHECKED_PTR_OF(STACK_OF(type)*, st), \ + pp, length, \ + CHECKED_D2I_OF(type, d2i_func), \ + CHECKED_SK_FREE_FUNC(type, free_func), \ + ex_tag, ex_class) + +#define SKM_ASN1_SET_OF_i2d(type, st, pp, i2d_func, ex_tag, ex_class, is_set) \ + i2d_ASN1_SET((STACK_OF(OPENSSL_BLOCK) *)CHECKED_STACK_OF(type, st), pp, \ + CHECKED_I2D_OF(type, i2d_func), \ + ex_tag, ex_class, is_set) + +#define SKM_ASN1_seq_pack(type, st, i2d_func, buf, len) \ + ASN1_seq_pack(CHECKED_PTR_OF(STACK_OF(type), st), \ + CHECKED_I2D_OF(type, i2d_func), buf, len) + +#define SKM_ASN1_seq_unpack(type, buf, len, d2i_func, free_func) \ + (STACK_OF(type) *)ASN1_seq_unpack(buf, len, CHECKED_D2I_OF(type, d2i_func), CHECKED_SK_FREE_FUNC(type, free_func)) + +#define SKM_PKCS12_decrypt_d2i(type, algor, d2i_func, free_func, pass, passlen, oct, seq) \ + (STACK_OF(type) *)PKCS12_decrypt_d2i(algor, \ + CHECKED_D2I_OF(type, d2i_func), \ + CHECKED_SK_FREE_FUNC(type, free_func), \ + pass, passlen, oct, seq) + +/* This block of defines is updated by util/mkstack.pl, please do not touch! */ +#define sk_ACCESS_DESCRIPTION_new(cmp) SKM_sk_new(ACCESS_DESCRIPTION, (cmp)) +#define sk_ACCESS_DESCRIPTION_new_null() SKM_sk_new_null(ACCESS_DESCRIPTION) +#define sk_ACCESS_DESCRIPTION_free(st) SKM_sk_free(ACCESS_DESCRIPTION, (st)) +#define sk_ACCESS_DESCRIPTION_num(st) SKM_sk_num(ACCESS_DESCRIPTION, (st)) +#define sk_ACCESS_DESCRIPTION_value(st, i) SKM_sk_value(ACCESS_DESCRIPTION, (st), (i)) +#define sk_ACCESS_DESCRIPTION_set(st, i, val) SKM_sk_set(ACCESS_DESCRIPTION, (st), (i), (val)) +#define sk_ACCESS_DESCRIPTION_zero(st) SKM_sk_zero(ACCESS_DESCRIPTION, (st)) +#define sk_ACCESS_DESCRIPTION_push(st, val) SKM_sk_push(ACCESS_DESCRIPTION, (st), (val)) +#define sk_ACCESS_DESCRIPTION_unshift(st, val) SKM_sk_unshift(ACCESS_DESCRIPTION, (st), (val)) +#define sk_ACCESS_DESCRIPTION_find(st, val) SKM_sk_find(ACCESS_DESCRIPTION, (st), (val)) +#define sk_ACCESS_DESCRIPTION_find_ex(st, val) SKM_sk_find_ex(ACCESS_DESCRIPTION, (st), (val)) +#define sk_ACCESS_DESCRIPTION_delete(st, i) SKM_sk_delete(ACCESS_DESCRIPTION, (st), (i)) +#define sk_ACCESS_DESCRIPTION_delete_ptr(st, ptr) SKM_sk_delete_ptr(ACCESS_DESCRIPTION, (st), (ptr)) +#define sk_ACCESS_DESCRIPTION_insert(st, val, i) SKM_sk_insert(ACCESS_DESCRIPTION, (st), (val), (i)) +#define sk_ACCESS_DESCRIPTION_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ACCESS_DESCRIPTION, (st), (cmp)) +#define sk_ACCESS_DESCRIPTION_dup(st) SKM_sk_dup(ACCESS_DESCRIPTION, st) +#define sk_ACCESS_DESCRIPTION_pop_free(st, free_func) SKM_sk_pop_free(ACCESS_DESCRIPTION, (st), (free_func)) +#define sk_ACCESS_DESCRIPTION_shift(st) SKM_sk_shift(ACCESS_DESCRIPTION, (st)) +#define sk_ACCESS_DESCRIPTION_pop(st) SKM_sk_pop(ACCESS_DESCRIPTION, (st)) +#define sk_ACCESS_DESCRIPTION_sort(st) SKM_sk_sort(ACCESS_DESCRIPTION, (st)) +#define sk_ACCESS_DESCRIPTION_is_sorted(st) SKM_sk_is_sorted(ACCESS_DESCRIPTION, (st)) + +#define sk_ASIdOrRange_new(cmp) SKM_sk_new(ASIdOrRange, (cmp)) +#define sk_ASIdOrRange_new_null() SKM_sk_new_null(ASIdOrRange) +#define sk_ASIdOrRange_free(st) SKM_sk_free(ASIdOrRange, (st)) +#define sk_ASIdOrRange_num(st) SKM_sk_num(ASIdOrRange, (st)) +#define sk_ASIdOrRange_value(st, i) SKM_sk_value(ASIdOrRange, (st), (i)) +#define sk_ASIdOrRange_set(st, i, val) SKM_sk_set(ASIdOrRange, (st), (i), (val)) +#define sk_ASIdOrRange_zero(st) SKM_sk_zero(ASIdOrRange, (st)) +#define sk_ASIdOrRange_push(st, val) SKM_sk_push(ASIdOrRange, (st), (val)) +#define sk_ASIdOrRange_unshift(st, val) SKM_sk_unshift(ASIdOrRange, (st), (val)) +#define sk_ASIdOrRange_find(st, val) SKM_sk_find(ASIdOrRange, (st), (val)) +#define sk_ASIdOrRange_find_ex(st, val) SKM_sk_find_ex(ASIdOrRange, (st), (val)) +#define sk_ASIdOrRange_delete(st, i) SKM_sk_delete(ASIdOrRange, (st), (i)) +#define sk_ASIdOrRange_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASIdOrRange, (st), (ptr)) +#define sk_ASIdOrRange_insert(st, val, i) SKM_sk_insert(ASIdOrRange, (st), (val), (i)) +#define sk_ASIdOrRange_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASIdOrRange, (st), (cmp)) +#define sk_ASIdOrRange_dup(st) SKM_sk_dup(ASIdOrRange, st) +#define sk_ASIdOrRange_pop_free(st, free_func) SKM_sk_pop_free(ASIdOrRange, (st), (free_func)) +#define sk_ASIdOrRange_shift(st) SKM_sk_shift(ASIdOrRange, (st)) +#define sk_ASIdOrRange_pop(st) SKM_sk_pop(ASIdOrRange, (st)) +#define sk_ASIdOrRange_sort(st) SKM_sk_sort(ASIdOrRange, (st)) +#define sk_ASIdOrRange_is_sorted(st) SKM_sk_is_sorted(ASIdOrRange, (st)) + +#define sk_ASN1_GENERALSTRING_new(cmp) SKM_sk_new(ASN1_GENERALSTRING, (cmp)) +#define sk_ASN1_GENERALSTRING_new_null() SKM_sk_new_null(ASN1_GENERALSTRING) +#define sk_ASN1_GENERALSTRING_free(st) SKM_sk_free(ASN1_GENERALSTRING, (st)) +#define sk_ASN1_GENERALSTRING_num(st) SKM_sk_num(ASN1_GENERALSTRING, (st)) +#define sk_ASN1_GENERALSTRING_value(st, i) SKM_sk_value(ASN1_GENERALSTRING, (st), (i)) +#define sk_ASN1_GENERALSTRING_set(st, i, val) SKM_sk_set(ASN1_GENERALSTRING, (st), (i), (val)) +#define sk_ASN1_GENERALSTRING_zero(st) SKM_sk_zero(ASN1_GENERALSTRING, (st)) +#define sk_ASN1_GENERALSTRING_push(st, val) SKM_sk_push(ASN1_GENERALSTRING, (st), (val)) +#define sk_ASN1_GENERALSTRING_unshift(st, val) SKM_sk_unshift(ASN1_GENERALSTRING, (st), (val)) +#define sk_ASN1_GENERALSTRING_find(st, val) SKM_sk_find(ASN1_GENERALSTRING, (st), (val)) +#define sk_ASN1_GENERALSTRING_find_ex(st, val) SKM_sk_find_ex(ASN1_GENERALSTRING, (st), (val)) +#define sk_ASN1_GENERALSTRING_delete(st, i) SKM_sk_delete(ASN1_GENERALSTRING, (st), (i)) +#define sk_ASN1_GENERALSTRING_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASN1_GENERALSTRING, (st), (ptr)) +#define sk_ASN1_GENERALSTRING_insert(st, val, i) SKM_sk_insert(ASN1_GENERALSTRING, (st), (val), (i)) +#define sk_ASN1_GENERALSTRING_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_GENERALSTRING, (st), (cmp)) +#define sk_ASN1_GENERALSTRING_dup(st) SKM_sk_dup(ASN1_GENERALSTRING, st) +#define sk_ASN1_GENERALSTRING_pop_free(st, free_func) SKM_sk_pop_free(ASN1_GENERALSTRING, (st), (free_func)) +#define sk_ASN1_GENERALSTRING_shift(st) SKM_sk_shift(ASN1_GENERALSTRING, (st)) +#define sk_ASN1_GENERALSTRING_pop(st) SKM_sk_pop(ASN1_GENERALSTRING, (st)) +#define sk_ASN1_GENERALSTRING_sort(st) SKM_sk_sort(ASN1_GENERALSTRING, (st)) +#define sk_ASN1_GENERALSTRING_is_sorted(st) SKM_sk_is_sorted(ASN1_GENERALSTRING, (st)) + +#define sk_ASN1_INTEGER_new(cmp) SKM_sk_new(ASN1_INTEGER, (cmp)) +#define sk_ASN1_INTEGER_new_null() SKM_sk_new_null(ASN1_INTEGER) +#define sk_ASN1_INTEGER_free(st) SKM_sk_free(ASN1_INTEGER, (st)) +#define sk_ASN1_INTEGER_num(st) SKM_sk_num(ASN1_INTEGER, (st)) +#define sk_ASN1_INTEGER_value(st, i) SKM_sk_value(ASN1_INTEGER, (st), (i)) +#define sk_ASN1_INTEGER_set(st, i, val) SKM_sk_set(ASN1_INTEGER, (st), (i), (val)) +#define sk_ASN1_INTEGER_zero(st) SKM_sk_zero(ASN1_INTEGER, (st)) +#define sk_ASN1_INTEGER_push(st, val) SKM_sk_push(ASN1_INTEGER, (st), (val)) +#define sk_ASN1_INTEGER_unshift(st, val) SKM_sk_unshift(ASN1_INTEGER, (st), (val)) +#define sk_ASN1_INTEGER_find(st, val) SKM_sk_find(ASN1_INTEGER, (st), (val)) +#define sk_ASN1_INTEGER_find_ex(st, val) SKM_sk_find_ex(ASN1_INTEGER, (st), (val)) +#define sk_ASN1_INTEGER_delete(st, i) SKM_sk_delete(ASN1_INTEGER, (st), (i)) +#define sk_ASN1_INTEGER_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASN1_INTEGER, (st), (ptr)) +#define sk_ASN1_INTEGER_insert(st, val, i) SKM_sk_insert(ASN1_INTEGER, (st), (val), (i)) +#define sk_ASN1_INTEGER_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_INTEGER, (st), (cmp)) +#define sk_ASN1_INTEGER_dup(st) SKM_sk_dup(ASN1_INTEGER, st) +#define sk_ASN1_INTEGER_pop_free(st, free_func) SKM_sk_pop_free(ASN1_INTEGER, (st), (free_func)) +#define sk_ASN1_INTEGER_shift(st) SKM_sk_shift(ASN1_INTEGER, (st)) +#define sk_ASN1_INTEGER_pop(st) SKM_sk_pop(ASN1_INTEGER, (st)) +#define sk_ASN1_INTEGER_sort(st) SKM_sk_sort(ASN1_INTEGER, (st)) +#define sk_ASN1_INTEGER_is_sorted(st) SKM_sk_is_sorted(ASN1_INTEGER, (st)) + +#define sk_ASN1_OBJECT_new(cmp) SKM_sk_new(ASN1_OBJECT, (cmp)) +#define sk_ASN1_OBJECT_new_null() SKM_sk_new_null(ASN1_OBJECT) +#define sk_ASN1_OBJECT_free(st) SKM_sk_free(ASN1_OBJECT, (st)) +#define sk_ASN1_OBJECT_num(st) SKM_sk_num(ASN1_OBJECT, (st)) +#define sk_ASN1_OBJECT_value(st, i) SKM_sk_value(ASN1_OBJECT, (st), (i)) +#define sk_ASN1_OBJECT_set(st, i, val) SKM_sk_set(ASN1_OBJECT, (st), (i), (val)) +#define sk_ASN1_OBJECT_zero(st) SKM_sk_zero(ASN1_OBJECT, (st)) +#define sk_ASN1_OBJECT_push(st, val) SKM_sk_push(ASN1_OBJECT, (st), (val)) +#define sk_ASN1_OBJECT_unshift(st, val) SKM_sk_unshift(ASN1_OBJECT, (st), (val)) +#define sk_ASN1_OBJECT_find(st, val) SKM_sk_find(ASN1_OBJECT, (st), (val)) +#define sk_ASN1_OBJECT_find_ex(st, val) SKM_sk_find_ex(ASN1_OBJECT, (st), (val)) +#define sk_ASN1_OBJECT_delete(st, i) SKM_sk_delete(ASN1_OBJECT, (st), (i)) +#define sk_ASN1_OBJECT_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASN1_OBJECT, (st), (ptr)) +#define sk_ASN1_OBJECT_insert(st, val, i) SKM_sk_insert(ASN1_OBJECT, (st), (val), (i)) +#define sk_ASN1_OBJECT_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_OBJECT, (st), (cmp)) +#define sk_ASN1_OBJECT_dup(st) SKM_sk_dup(ASN1_OBJECT, st) +#define sk_ASN1_OBJECT_pop_free(st, free_func) SKM_sk_pop_free(ASN1_OBJECT, (st), (free_func)) +#define sk_ASN1_OBJECT_shift(st) SKM_sk_shift(ASN1_OBJECT, (st)) +#define sk_ASN1_OBJECT_pop(st) SKM_sk_pop(ASN1_OBJECT, (st)) +#define sk_ASN1_OBJECT_sort(st) SKM_sk_sort(ASN1_OBJECT, (st)) +#define sk_ASN1_OBJECT_is_sorted(st) SKM_sk_is_sorted(ASN1_OBJECT, (st)) + +#define sk_ASN1_STRING_TABLE_new(cmp) SKM_sk_new(ASN1_STRING_TABLE, (cmp)) +#define sk_ASN1_STRING_TABLE_new_null() SKM_sk_new_null(ASN1_STRING_TABLE) +#define sk_ASN1_STRING_TABLE_free(st) SKM_sk_free(ASN1_STRING_TABLE, (st)) +#define sk_ASN1_STRING_TABLE_num(st) SKM_sk_num(ASN1_STRING_TABLE, (st)) +#define sk_ASN1_STRING_TABLE_value(st, i) SKM_sk_value(ASN1_STRING_TABLE, (st), (i)) +#define sk_ASN1_STRING_TABLE_set(st, i, val) SKM_sk_set(ASN1_STRING_TABLE, (st), (i), (val)) +#define sk_ASN1_STRING_TABLE_zero(st) SKM_sk_zero(ASN1_STRING_TABLE, (st)) +#define sk_ASN1_STRING_TABLE_push(st, val) SKM_sk_push(ASN1_STRING_TABLE, (st), (val)) +#define sk_ASN1_STRING_TABLE_unshift(st, val) SKM_sk_unshift(ASN1_STRING_TABLE, (st), (val)) +#define sk_ASN1_STRING_TABLE_find(st, val) SKM_sk_find(ASN1_STRING_TABLE, (st), (val)) +#define sk_ASN1_STRING_TABLE_find_ex(st, val) SKM_sk_find_ex(ASN1_STRING_TABLE, (st), (val)) +#define sk_ASN1_STRING_TABLE_delete(st, i) SKM_sk_delete(ASN1_STRING_TABLE, (st), (i)) +#define sk_ASN1_STRING_TABLE_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASN1_STRING_TABLE, (st), (ptr)) +#define sk_ASN1_STRING_TABLE_insert(st, val, i) SKM_sk_insert(ASN1_STRING_TABLE, (st), (val), (i)) +#define sk_ASN1_STRING_TABLE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_STRING_TABLE, (st), (cmp)) +#define sk_ASN1_STRING_TABLE_dup(st) SKM_sk_dup(ASN1_STRING_TABLE, st) +#define sk_ASN1_STRING_TABLE_pop_free(st, free_func) SKM_sk_pop_free(ASN1_STRING_TABLE, (st), (free_func)) +#define sk_ASN1_STRING_TABLE_shift(st) SKM_sk_shift(ASN1_STRING_TABLE, (st)) +#define sk_ASN1_STRING_TABLE_pop(st) SKM_sk_pop(ASN1_STRING_TABLE, (st)) +#define sk_ASN1_STRING_TABLE_sort(st) SKM_sk_sort(ASN1_STRING_TABLE, (st)) +#define sk_ASN1_STRING_TABLE_is_sorted(st) SKM_sk_is_sorted(ASN1_STRING_TABLE, (st)) + +#define sk_ASN1_TYPE_new(cmp) SKM_sk_new(ASN1_TYPE, (cmp)) +#define sk_ASN1_TYPE_new_null() SKM_sk_new_null(ASN1_TYPE) +#define sk_ASN1_TYPE_free(st) SKM_sk_free(ASN1_TYPE, (st)) +#define sk_ASN1_TYPE_num(st) SKM_sk_num(ASN1_TYPE, (st)) +#define sk_ASN1_TYPE_value(st, i) SKM_sk_value(ASN1_TYPE, (st), (i)) +#define sk_ASN1_TYPE_set(st, i, val) SKM_sk_set(ASN1_TYPE, (st), (i), (val)) +#define sk_ASN1_TYPE_zero(st) SKM_sk_zero(ASN1_TYPE, (st)) +#define sk_ASN1_TYPE_push(st, val) SKM_sk_push(ASN1_TYPE, (st), (val)) +#define sk_ASN1_TYPE_unshift(st, val) SKM_sk_unshift(ASN1_TYPE, (st), (val)) +#define sk_ASN1_TYPE_find(st, val) SKM_sk_find(ASN1_TYPE, (st), (val)) +#define sk_ASN1_TYPE_find_ex(st, val) SKM_sk_find_ex(ASN1_TYPE, (st), (val)) +#define sk_ASN1_TYPE_delete(st, i) SKM_sk_delete(ASN1_TYPE, (st), (i)) +#define sk_ASN1_TYPE_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASN1_TYPE, (st), (ptr)) +#define sk_ASN1_TYPE_insert(st, val, i) SKM_sk_insert(ASN1_TYPE, (st), (val), (i)) +#define sk_ASN1_TYPE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_TYPE, (st), (cmp)) +#define sk_ASN1_TYPE_dup(st) SKM_sk_dup(ASN1_TYPE, st) +#define sk_ASN1_TYPE_pop_free(st, free_func) SKM_sk_pop_free(ASN1_TYPE, (st), (free_func)) +#define sk_ASN1_TYPE_shift(st) SKM_sk_shift(ASN1_TYPE, (st)) +#define sk_ASN1_TYPE_pop(st) SKM_sk_pop(ASN1_TYPE, (st)) +#define sk_ASN1_TYPE_sort(st) SKM_sk_sort(ASN1_TYPE, (st)) +#define sk_ASN1_TYPE_is_sorted(st) SKM_sk_is_sorted(ASN1_TYPE, (st)) + +#define sk_ASN1_UTF8STRING_new(cmp) SKM_sk_new(ASN1_UTF8STRING, (cmp)) +#define sk_ASN1_UTF8STRING_new_null() SKM_sk_new_null(ASN1_UTF8STRING) +#define sk_ASN1_UTF8STRING_free(st) SKM_sk_free(ASN1_UTF8STRING, (st)) +#define sk_ASN1_UTF8STRING_num(st) SKM_sk_num(ASN1_UTF8STRING, (st)) +#define sk_ASN1_UTF8STRING_value(st, i) SKM_sk_value(ASN1_UTF8STRING, (st), (i)) +#define sk_ASN1_UTF8STRING_set(st, i, val) SKM_sk_set(ASN1_UTF8STRING, (st), (i), (val)) +#define sk_ASN1_UTF8STRING_zero(st) SKM_sk_zero(ASN1_UTF8STRING, (st)) +#define sk_ASN1_UTF8STRING_push(st, val) SKM_sk_push(ASN1_UTF8STRING, (st), (val)) +#define sk_ASN1_UTF8STRING_unshift(st, val) SKM_sk_unshift(ASN1_UTF8STRING, (st), (val)) +#define sk_ASN1_UTF8STRING_find(st, val) SKM_sk_find(ASN1_UTF8STRING, (st), (val)) +#define sk_ASN1_UTF8STRING_find_ex(st, val) SKM_sk_find_ex(ASN1_UTF8STRING, (st), (val)) +#define sk_ASN1_UTF8STRING_delete(st, i) SKM_sk_delete(ASN1_UTF8STRING, (st), (i)) +#define sk_ASN1_UTF8STRING_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASN1_UTF8STRING, (st), (ptr)) +#define sk_ASN1_UTF8STRING_insert(st, val, i) SKM_sk_insert(ASN1_UTF8STRING, (st), (val), (i)) +#define sk_ASN1_UTF8STRING_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_UTF8STRING, (st), (cmp)) +#define sk_ASN1_UTF8STRING_dup(st) SKM_sk_dup(ASN1_UTF8STRING, st) +#define sk_ASN1_UTF8STRING_pop_free(st, free_func) SKM_sk_pop_free(ASN1_UTF8STRING, (st), (free_func)) +#define sk_ASN1_UTF8STRING_shift(st) SKM_sk_shift(ASN1_UTF8STRING, (st)) +#define sk_ASN1_UTF8STRING_pop(st) SKM_sk_pop(ASN1_UTF8STRING, (st)) +#define sk_ASN1_UTF8STRING_sort(st) SKM_sk_sort(ASN1_UTF8STRING, (st)) +#define sk_ASN1_UTF8STRING_is_sorted(st) SKM_sk_is_sorted(ASN1_UTF8STRING, (st)) + +#define sk_ASN1_VALUE_new(cmp) SKM_sk_new(ASN1_VALUE, (cmp)) +#define sk_ASN1_VALUE_new_null() SKM_sk_new_null(ASN1_VALUE) +#define sk_ASN1_VALUE_free(st) SKM_sk_free(ASN1_VALUE, (st)) +#define sk_ASN1_VALUE_num(st) SKM_sk_num(ASN1_VALUE, (st)) +#define sk_ASN1_VALUE_value(st, i) SKM_sk_value(ASN1_VALUE, (st), (i)) +#define sk_ASN1_VALUE_set(st, i, val) SKM_sk_set(ASN1_VALUE, (st), (i), (val)) +#define sk_ASN1_VALUE_zero(st) SKM_sk_zero(ASN1_VALUE, (st)) +#define sk_ASN1_VALUE_push(st, val) SKM_sk_push(ASN1_VALUE, (st), (val)) +#define sk_ASN1_VALUE_unshift(st, val) SKM_sk_unshift(ASN1_VALUE, (st), (val)) +#define sk_ASN1_VALUE_find(st, val) SKM_sk_find(ASN1_VALUE, (st), (val)) +#define sk_ASN1_VALUE_find_ex(st, val) SKM_sk_find_ex(ASN1_VALUE, (st), (val)) +#define sk_ASN1_VALUE_delete(st, i) SKM_sk_delete(ASN1_VALUE, (st), (i)) +#define sk_ASN1_VALUE_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASN1_VALUE, (st), (ptr)) +#define sk_ASN1_VALUE_insert(st, val, i) SKM_sk_insert(ASN1_VALUE, (st), (val), (i)) +#define sk_ASN1_VALUE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_VALUE, (st), (cmp)) +#define sk_ASN1_VALUE_dup(st) SKM_sk_dup(ASN1_VALUE, st) +#define sk_ASN1_VALUE_pop_free(st, free_func) SKM_sk_pop_free(ASN1_VALUE, (st), (free_func)) +#define sk_ASN1_VALUE_shift(st) SKM_sk_shift(ASN1_VALUE, (st)) +#define sk_ASN1_VALUE_pop(st) SKM_sk_pop(ASN1_VALUE, (st)) +#define sk_ASN1_VALUE_sort(st) SKM_sk_sort(ASN1_VALUE, (st)) +#define sk_ASN1_VALUE_is_sorted(st) SKM_sk_is_sorted(ASN1_VALUE, (st)) + +#define sk_BIO_new(cmp) SKM_sk_new(BIO, (cmp)) +#define sk_BIO_new_null() SKM_sk_new_null(BIO) +#define sk_BIO_free(st) SKM_sk_free(BIO, (st)) +#define sk_BIO_num(st) SKM_sk_num(BIO, (st)) +#define sk_BIO_value(st, i) SKM_sk_value(BIO, (st), (i)) +#define sk_BIO_set(st, i, val) SKM_sk_set(BIO, (st), (i), (val)) +#define sk_BIO_zero(st) SKM_sk_zero(BIO, (st)) +#define sk_BIO_push(st, val) SKM_sk_push(BIO, (st), (val)) +#define sk_BIO_unshift(st, val) SKM_sk_unshift(BIO, (st), (val)) +#define sk_BIO_find(st, val) SKM_sk_find(BIO, (st), (val)) +#define sk_BIO_find_ex(st, val) SKM_sk_find_ex(BIO, (st), (val)) +#define sk_BIO_delete(st, i) SKM_sk_delete(BIO, (st), (i)) +#define sk_BIO_delete_ptr(st, ptr) SKM_sk_delete_ptr(BIO, (st), (ptr)) +#define sk_BIO_insert(st, val, i) SKM_sk_insert(BIO, (st), (val), (i)) +#define sk_BIO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(BIO, (st), (cmp)) +#define sk_BIO_dup(st) SKM_sk_dup(BIO, st) +#define sk_BIO_pop_free(st, free_func) SKM_sk_pop_free(BIO, (st), (free_func)) +#define sk_BIO_shift(st) SKM_sk_shift(BIO, (st)) +#define sk_BIO_pop(st) SKM_sk_pop(BIO, (st)) +#define sk_BIO_sort(st) SKM_sk_sort(BIO, (st)) +#define sk_BIO_is_sorted(st) SKM_sk_is_sorted(BIO, (st)) + +#define sk_BY_DIR_ENTRY_new(cmp) SKM_sk_new(BY_DIR_ENTRY, (cmp)) +#define sk_BY_DIR_ENTRY_new_null() SKM_sk_new_null(BY_DIR_ENTRY) +#define sk_BY_DIR_ENTRY_free(st) SKM_sk_free(BY_DIR_ENTRY, (st)) +#define sk_BY_DIR_ENTRY_num(st) SKM_sk_num(BY_DIR_ENTRY, (st)) +#define sk_BY_DIR_ENTRY_value(st, i) SKM_sk_value(BY_DIR_ENTRY, (st), (i)) +#define sk_BY_DIR_ENTRY_set(st, i, val) SKM_sk_set(BY_DIR_ENTRY, (st), (i), (val)) +#define sk_BY_DIR_ENTRY_zero(st) SKM_sk_zero(BY_DIR_ENTRY, (st)) +#define sk_BY_DIR_ENTRY_push(st, val) SKM_sk_push(BY_DIR_ENTRY, (st), (val)) +#define sk_BY_DIR_ENTRY_unshift(st, val) SKM_sk_unshift(BY_DIR_ENTRY, (st), (val)) +#define sk_BY_DIR_ENTRY_find(st, val) SKM_sk_find(BY_DIR_ENTRY, (st), (val)) +#define sk_BY_DIR_ENTRY_find_ex(st, val) SKM_sk_find_ex(BY_DIR_ENTRY, (st), (val)) +#define sk_BY_DIR_ENTRY_delete(st, i) SKM_sk_delete(BY_DIR_ENTRY, (st), (i)) +#define sk_BY_DIR_ENTRY_delete_ptr(st, ptr) SKM_sk_delete_ptr(BY_DIR_ENTRY, (st), (ptr)) +#define sk_BY_DIR_ENTRY_insert(st, val, i) SKM_sk_insert(BY_DIR_ENTRY, (st), (val), (i)) +#define sk_BY_DIR_ENTRY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(BY_DIR_ENTRY, (st), (cmp)) +#define sk_BY_DIR_ENTRY_dup(st) SKM_sk_dup(BY_DIR_ENTRY, st) +#define sk_BY_DIR_ENTRY_pop_free(st, free_func) SKM_sk_pop_free(BY_DIR_ENTRY, (st), (free_func)) +#define sk_BY_DIR_ENTRY_shift(st) SKM_sk_shift(BY_DIR_ENTRY, (st)) +#define sk_BY_DIR_ENTRY_pop(st) SKM_sk_pop(BY_DIR_ENTRY, (st)) +#define sk_BY_DIR_ENTRY_sort(st) SKM_sk_sort(BY_DIR_ENTRY, (st)) +#define sk_BY_DIR_ENTRY_is_sorted(st) SKM_sk_is_sorted(BY_DIR_ENTRY, (st)) + +#define sk_BY_DIR_HASH_new(cmp) SKM_sk_new(BY_DIR_HASH, (cmp)) +#define sk_BY_DIR_HASH_new_null() SKM_sk_new_null(BY_DIR_HASH) +#define sk_BY_DIR_HASH_free(st) SKM_sk_free(BY_DIR_HASH, (st)) +#define sk_BY_DIR_HASH_num(st) SKM_sk_num(BY_DIR_HASH, (st)) +#define sk_BY_DIR_HASH_value(st, i) SKM_sk_value(BY_DIR_HASH, (st), (i)) +#define sk_BY_DIR_HASH_set(st, i, val) SKM_sk_set(BY_DIR_HASH, (st), (i), (val)) +#define sk_BY_DIR_HASH_zero(st) SKM_sk_zero(BY_DIR_HASH, (st)) +#define sk_BY_DIR_HASH_push(st, val) SKM_sk_push(BY_DIR_HASH, (st), (val)) +#define sk_BY_DIR_HASH_unshift(st, val) SKM_sk_unshift(BY_DIR_HASH, (st), (val)) +#define sk_BY_DIR_HASH_find(st, val) SKM_sk_find(BY_DIR_HASH, (st), (val)) +#define sk_BY_DIR_HASH_find_ex(st, val) SKM_sk_find_ex(BY_DIR_HASH, (st), (val)) +#define sk_BY_DIR_HASH_delete(st, i) SKM_sk_delete(BY_DIR_HASH, (st), (i)) +#define sk_BY_DIR_HASH_delete_ptr(st, ptr) SKM_sk_delete_ptr(BY_DIR_HASH, (st), (ptr)) +#define sk_BY_DIR_HASH_insert(st, val, i) SKM_sk_insert(BY_DIR_HASH, (st), (val), (i)) +#define sk_BY_DIR_HASH_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(BY_DIR_HASH, (st), (cmp)) +#define sk_BY_DIR_HASH_dup(st) SKM_sk_dup(BY_DIR_HASH, st) +#define sk_BY_DIR_HASH_pop_free(st, free_func) SKM_sk_pop_free(BY_DIR_HASH, (st), (free_func)) +#define sk_BY_DIR_HASH_shift(st) SKM_sk_shift(BY_DIR_HASH, (st)) +#define sk_BY_DIR_HASH_pop(st) SKM_sk_pop(BY_DIR_HASH, (st)) +#define sk_BY_DIR_HASH_sort(st) SKM_sk_sort(BY_DIR_HASH, (st)) +#define sk_BY_DIR_HASH_is_sorted(st) SKM_sk_is_sorted(BY_DIR_HASH, (st)) + +#define sk_CMS_CertificateChoices_new(cmp) SKM_sk_new(CMS_CertificateChoices, (cmp)) +#define sk_CMS_CertificateChoices_new_null() SKM_sk_new_null(CMS_CertificateChoices) +#define sk_CMS_CertificateChoices_free(st) SKM_sk_free(CMS_CertificateChoices, (st)) +#define sk_CMS_CertificateChoices_num(st) SKM_sk_num(CMS_CertificateChoices, (st)) +#define sk_CMS_CertificateChoices_value(st, i) SKM_sk_value(CMS_CertificateChoices, (st), (i)) +#define sk_CMS_CertificateChoices_set(st, i, val) SKM_sk_set(CMS_CertificateChoices, (st), (i), (val)) +#define sk_CMS_CertificateChoices_zero(st) SKM_sk_zero(CMS_CertificateChoices, (st)) +#define sk_CMS_CertificateChoices_push(st, val) SKM_sk_push(CMS_CertificateChoices, (st), (val)) +#define sk_CMS_CertificateChoices_unshift(st, val) SKM_sk_unshift(CMS_CertificateChoices, (st), (val)) +#define sk_CMS_CertificateChoices_find(st, val) SKM_sk_find(CMS_CertificateChoices, (st), (val)) +#define sk_CMS_CertificateChoices_find_ex(st, val) SKM_sk_find_ex(CMS_CertificateChoices, (st), (val)) +#define sk_CMS_CertificateChoices_delete(st, i) SKM_sk_delete(CMS_CertificateChoices, (st), (i)) +#define sk_CMS_CertificateChoices_delete_ptr(st, ptr) SKM_sk_delete_ptr(CMS_CertificateChoices, (st), (ptr)) +#define sk_CMS_CertificateChoices_insert(st, val, i) SKM_sk_insert(CMS_CertificateChoices, (st), (val), (i)) +#define sk_CMS_CertificateChoices_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CMS_CertificateChoices, (st), (cmp)) +#define sk_CMS_CertificateChoices_dup(st) SKM_sk_dup(CMS_CertificateChoices, st) +#define sk_CMS_CertificateChoices_pop_free(st, free_func) SKM_sk_pop_free(CMS_CertificateChoices, (st), (free_func)) +#define sk_CMS_CertificateChoices_shift(st) SKM_sk_shift(CMS_CertificateChoices, (st)) +#define sk_CMS_CertificateChoices_pop(st) SKM_sk_pop(CMS_CertificateChoices, (st)) +#define sk_CMS_CertificateChoices_sort(st) SKM_sk_sort(CMS_CertificateChoices, (st)) +#define sk_CMS_CertificateChoices_is_sorted(st) SKM_sk_is_sorted(CMS_CertificateChoices, (st)) + +#define sk_CMS_RecipientInfo_new(cmp) SKM_sk_new(CMS_RecipientInfo, (cmp)) +#define sk_CMS_RecipientInfo_new_null() SKM_sk_new_null(CMS_RecipientInfo) +#define sk_CMS_RecipientInfo_free(st) SKM_sk_free(CMS_RecipientInfo, (st)) +#define sk_CMS_RecipientInfo_num(st) SKM_sk_num(CMS_RecipientInfo, (st)) +#define sk_CMS_RecipientInfo_value(st, i) SKM_sk_value(CMS_RecipientInfo, (st), (i)) +#define sk_CMS_RecipientInfo_set(st, i, val) SKM_sk_set(CMS_RecipientInfo, (st), (i), (val)) +#define sk_CMS_RecipientInfo_zero(st) SKM_sk_zero(CMS_RecipientInfo, (st)) +#define sk_CMS_RecipientInfo_push(st, val) SKM_sk_push(CMS_RecipientInfo, (st), (val)) +#define sk_CMS_RecipientInfo_unshift(st, val) SKM_sk_unshift(CMS_RecipientInfo, (st), (val)) +#define sk_CMS_RecipientInfo_find(st, val) SKM_sk_find(CMS_RecipientInfo, (st), (val)) +#define sk_CMS_RecipientInfo_find_ex(st, val) SKM_sk_find_ex(CMS_RecipientInfo, (st), (val)) +#define sk_CMS_RecipientInfo_delete(st, i) SKM_sk_delete(CMS_RecipientInfo, (st), (i)) +#define sk_CMS_RecipientInfo_delete_ptr(st, ptr) SKM_sk_delete_ptr(CMS_RecipientInfo, (st), (ptr)) +#define sk_CMS_RecipientInfo_insert(st, val, i) SKM_sk_insert(CMS_RecipientInfo, (st), (val), (i)) +#define sk_CMS_RecipientInfo_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CMS_RecipientInfo, (st), (cmp)) +#define sk_CMS_RecipientInfo_dup(st) SKM_sk_dup(CMS_RecipientInfo, st) +#define sk_CMS_RecipientInfo_pop_free(st, free_func) SKM_sk_pop_free(CMS_RecipientInfo, (st), (free_func)) +#define sk_CMS_RecipientInfo_shift(st) SKM_sk_shift(CMS_RecipientInfo, (st)) +#define sk_CMS_RecipientInfo_pop(st) SKM_sk_pop(CMS_RecipientInfo, (st)) +#define sk_CMS_RecipientInfo_sort(st) SKM_sk_sort(CMS_RecipientInfo, (st)) +#define sk_CMS_RecipientInfo_is_sorted(st) SKM_sk_is_sorted(CMS_RecipientInfo, (st)) + +#define sk_CMS_RevocationInfoChoice_new(cmp) SKM_sk_new(CMS_RevocationInfoChoice, (cmp)) +#define sk_CMS_RevocationInfoChoice_new_null() SKM_sk_new_null(CMS_RevocationInfoChoice) +#define sk_CMS_RevocationInfoChoice_free(st) SKM_sk_free(CMS_RevocationInfoChoice, (st)) +#define sk_CMS_RevocationInfoChoice_num(st) SKM_sk_num(CMS_RevocationInfoChoice, (st)) +#define sk_CMS_RevocationInfoChoice_value(st, i) SKM_sk_value(CMS_RevocationInfoChoice, (st), (i)) +#define sk_CMS_RevocationInfoChoice_set(st, i, val) SKM_sk_set(CMS_RevocationInfoChoice, (st), (i), (val)) +#define sk_CMS_RevocationInfoChoice_zero(st) SKM_sk_zero(CMS_RevocationInfoChoice, (st)) +#define sk_CMS_RevocationInfoChoice_push(st, val) SKM_sk_push(CMS_RevocationInfoChoice, (st), (val)) +#define sk_CMS_RevocationInfoChoice_unshift(st, val) SKM_sk_unshift(CMS_RevocationInfoChoice, (st), (val)) +#define sk_CMS_RevocationInfoChoice_find(st, val) SKM_sk_find(CMS_RevocationInfoChoice, (st), (val)) +#define sk_CMS_RevocationInfoChoice_find_ex(st, val) SKM_sk_find_ex(CMS_RevocationInfoChoice, (st), (val)) +#define sk_CMS_RevocationInfoChoice_delete(st, i) SKM_sk_delete(CMS_RevocationInfoChoice, (st), (i)) +#define sk_CMS_RevocationInfoChoice_delete_ptr(st, ptr) SKM_sk_delete_ptr(CMS_RevocationInfoChoice, (st), (ptr)) +#define sk_CMS_RevocationInfoChoice_insert(st, val, i) SKM_sk_insert(CMS_RevocationInfoChoice, (st), (val), (i)) +#define sk_CMS_RevocationInfoChoice_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CMS_RevocationInfoChoice, (st), (cmp)) +#define sk_CMS_RevocationInfoChoice_dup(st) SKM_sk_dup(CMS_RevocationInfoChoice, st) +#define sk_CMS_RevocationInfoChoice_pop_free(st, free_func) SKM_sk_pop_free(CMS_RevocationInfoChoice, (st), (free_func)) +#define sk_CMS_RevocationInfoChoice_shift(st) SKM_sk_shift(CMS_RevocationInfoChoice, (st)) +#define sk_CMS_RevocationInfoChoice_pop(st) SKM_sk_pop(CMS_RevocationInfoChoice, (st)) +#define sk_CMS_RevocationInfoChoice_sort(st) SKM_sk_sort(CMS_RevocationInfoChoice, (st)) +#define sk_CMS_RevocationInfoChoice_is_sorted(st) SKM_sk_is_sorted(CMS_RevocationInfoChoice, (st)) + +#define sk_CMS_SignerInfo_new(cmp) SKM_sk_new(CMS_SignerInfo, (cmp)) +#define sk_CMS_SignerInfo_new_null() SKM_sk_new_null(CMS_SignerInfo) +#define sk_CMS_SignerInfo_free(st) SKM_sk_free(CMS_SignerInfo, (st)) +#define sk_CMS_SignerInfo_num(st) SKM_sk_num(CMS_SignerInfo, (st)) +#define sk_CMS_SignerInfo_value(st, i) SKM_sk_value(CMS_SignerInfo, (st), (i)) +#define sk_CMS_SignerInfo_set(st, i, val) SKM_sk_set(CMS_SignerInfo, (st), (i), (val)) +#define sk_CMS_SignerInfo_zero(st) SKM_sk_zero(CMS_SignerInfo, (st)) +#define sk_CMS_SignerInfo_push(st, val) SKM_sk_push(CMS_SignerInfo, (st), (val)) +#define sk_CMS_SignerInfo_unshift(st, val) SKM_sk_unshift(CMS_SignerInfo, (st), (val)) +#define sk_CMS_SignerInfo_find(st, val) SKM_sk_find(CMS_SignerInfo, (st), (val)) +#define sk_CMS_SignerInfo_find_ex(st, val) SKM_sk_find_ex(CMS_SignerInfo, (st), (val)) +#define sk_CMS_SignerInfo_delete(st, i) SKM_sk_delete(CMS_SignerInfo, (st), (i)) +#define sk_CMS_SignerInfo_delete_ptr(st, ptr) SKM_sk_delete_ptr(CMS_SignerInfo, (st), (ptr)) +#define sk_CMS_SignerInfo_insert(st, val, i) SKM_sk_insert(CMS_SignerInfo, (st), (val), (i)) +#define sk_CMS_SignerInfo_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CMS_SignerInfo, (st), (cmp)) +#define sk_CMS_SignerInfo_dup(st) SKM_sk_dup(CMS_SignerInfo, st) +#define sk_CMS_SignerInfo_pop_free(st, free_func) SKM_sk_pop_free(CMS_SignerInfo, (st), (free_func)) +#define sk_CMS_SignerInfo_shift(st) SKM_sk_shift(CMS_SignerInfo, (st)) +#define sk_CMS_SignerInfo_pop(st) SKM_sk_pop(CMS_SignerInfo, (st)) +#define sk_CMS_SignerInfo_sort(st) SKM_sk_sort(CMS_SignerInfo, (st)) +#define sk_CMS_SignerInfo_is_sorted(st) SKM_sk_is_sorted(CMS_SignerInfo, (st)) + +#define sk_CONF_IMODULE_new(cmp) SKM_sk_new(CONF_IMODULE, (cmp)) +#define sk_CONF_IMODULE_new_null() SKM_sk_new_null(CONF_IMODULE) +#define sk_CONF_IMODULE_free(st) SKM_sk_free(CONF_IMODULE, (st)) +#define sk_CONF_IMODULE_num(st) SKM_sk_num(CONF_IMODULE, (st)) +#define sk_CONF_IMODULE_value(st, i) SKM_sk_value(CONF_IMODULE, (st), (i)) +#define sk_CONF_IMODULE_set(st, i, val) SKM_sk_set(CONF_IMODULE, (st), (i), (val)) +#define sk_CONF_IMODULE_zero(st) SKM_sk_zero(CONF_IMODULE, (st)) +#define sk_CONF_IMODULE_push(st, val) SKM_sk_push(CONF_IMODULE, (st), (val)) +#define sk_CONF_IMODULE_unshift(st, val) SKM_sk_unshift(CONF_IMODULE, (st), (val)) +#define sk_CONF_IMODULE_find(st, val) SKM_sk_find(CONF_IMODULE, (st), (val)) +#define sk_CONF_IMODULE_find_ex(st, val) SKM_sk_find_ex(CONF_IMODULE, (st), (val)) +#define sk_CONF_IMODULE_delete(st, i) SKM_sk_delete(CONF_IMODULE, (st), (i)) +#define sk_CONF_IMODULE_delete_ptr(st, ptr) SKM_sk_delete_ptr(CONF_IMODULE, (st), (ptr)) +#define sk_CONF_IMODULE_insert(st, val, i) SKM_sk_insert(CONF_IMODULE, (st), (val), (i)) +#define sk_CONF_IMODULE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CONF_IMODULE, (st), (cmp)) +#define sk_CONF_IMODULE_dup(st) SKM_sk_dup(CONF_IMODULE, st) +#define sk_CONF_IMODULE_pop_free(st, free_func) SKM_sk_pop_free(CONF_IMODULE, (st), (free_func)) +#define sk_CONF_IMODULE_shift(st) SKM_sk_shift(CONF_IMODULE, (st)) +#define sk_CONF_IMODULE_pop(st) SKM_sk_pop(CONF_IMODULE, (st)) +#define sk_CONF_IMODULE_sort(st) SKM_sk_sort(CONF_IMODULE, (st)) +#define sk_CONF_IMODULE_is_sorted(st) SKM_sk_is_sorted(CONF_IMODULE, (st)) + +#define sk_CONF_MODULE_new(cmp) SKM_sk_new(CONF_MODULE, (cmp)) +#define sk_CONF_MODULE_new_null() SKM_sk_new_null(CONF_MODULE) +#define sk_CONF_MODULE_free(st) SKM_sk_free(CONF_MODULE, (st)) +#define sk_CONF_MODULE_num(st) SKM_sk_num(CONF_MODULE, (st)) +#define sk_CONF_MODULE_value(st, i) SKM_sk_value(CONF_MODULE, (st), (i)) +#define sk_CONF_MODULE_set(st, i, val) SKM_sk_set(CONF_MODULE, (st), (i), (val)) +#define sk_CONF_MODULE_zero(st) SKM_sk_zero(CONF_MODULE, (st)) +#define sk_CONF_MODULE_push(st, val) SKM_sk_push(CONF_MODULE, (st), (val)) +#define sk_CONF_MODULE_unshift(st, val) SKM_sk_unshift(CONF_MODULE, (st), (val)) +#define sk_CONF_MODULE_find(st, val) SKM_sk_find(CONF_MODULE, (st), (val)) +#define sk_CONF_MODULE_find_ex(st, val) SKM_sk_find_ex(CONF_MODULE, (st), (val)) +#define sk_CONF_MODULE_delete(st, i) SKM_sk_delete(CONF_MODULE, (st), (i)) +#define sk_CONF_MODULE_delete_ptr(st, ptr) SKM_sk_delete_ptr(CONF_MODULE, (st), (ptr)) +#define sk_CONF_MODULE_insert(st, val, i) SKM_sk_insert(CONF_MODULE, (st), (val), (i)) +#define sk_CONF_MODULE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CONF_MODULE, (st), (cmp)) +#define sk_CONF_MODULE_dup(st) SKM_sk_dup(CONF_MODULE, st) +#define sk_CONF_MODULE_pop_free(st, free_func) SKM_sk_pop_free(CONF_MODULE, (st), (free_func)) +#define sk_CONF_MODULE_shift(st) SKM_sk_shift(CONF_MODULE, (st)) +#define sk_CONF_MODULE_pop(st) SKM_sk_pop(CONF_MODULE, (st)) +#define sk_CONF_MODULE_sort(st) SKM_sk_sort(CONF_MODULE, (st)) +#define sk_CONF_MODULE_is_sorted(st) SKM_sk_is_sorted(CONF_MODULE, (st)) + +#define sk_CONF_VALUE_new(cmp) SKM_sk_new(CONF_VALUE, (cmp)) +#define sk_CONF_VALUE_new_null() SKM_sk_new_null(CONF_VALUE) +#define sk_CONF_VALUE_free(st) SKM_sk_free(CONF_VALUE, (st)) +#define sk_CONF_VALUE_num(st) SKM_sk_num(CONF_VALUE, (st)) +#define sk_CONF_VALUE_value(st, i) SKM_sk_value(CONF_VALUE, (st), (i)) +#define sk_CONF_VALUE_set(st, i, val) SKM_sk_set(CONF_VALUE, (st), (i), (val)) +#define sk_CONF_VALUE_zero(st) SKM_sk_zero(CONF_VALUE, (st)) +#define sk_CONF_VALUE_push(st, val) SKM_sk_push(CONF_VALUE, (st), (val)) +#define sk_CONF_VALUE_unshift(st, val) SKM_sk_unshift(CONF_VALUE, (st), (val)) +#define sk_CONF_VALUE_find(st, val) SKM_sk_find(CONF_VALUE, (st), (val)) +#define sk_CONF_VALUE_find_ex(st, val) SKM_sk_find_ex(CONF_VALUE, (st), (val)) +#define sk_CONF_VALUE_delete(st, i) SKM_sk_delete(CONF_VALUE, (st), (i)) +#define sk_CONF_VALUE_delete_ptr(st, ptr) SKM_sk_delete_ptr(CONF_VALUE, (st), (ptr)) +#define sk_CONF_VALUE_insert(st, val, i) SKM_sk_insert(CONF_VALUE, (st), (val), (i)) +#define sk_CONF_VALUE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CONF_VALUE, (st), (cmp)) +#define sk_CONF_VALUE_dup(st) SKM_sk_dup(CONF_VALUE, st) +#define sk_CONF_VALUE_pop_free(st, free_func) SKM_sk_pop_free(CONF_VALUE, (st), (free_func)) +#define sk_CONF_VALUE_shift(st) SKM_sk_shift(CONF_VALUE, (st)) +#define sk_CONF_VALUE_pop(st) SKM_sk_pop(CONF_VALUE, (st)) +#define sk_CONF_VALUE_sort(st) SKM_sk_sort(CONF_VALUE, (st)) +#define sk_CONF_VALUE_is_sorted(st) SKM_sk_is_sorted(CONF_VALUE, (st)) + +#define sk_CRYPTO_EX_DATA_FUNCS_new(cmp) SKM_sk_new(CRYPTO_EX_DATA_FUNCS, (cmp)) +#define sk_CRYPTO_EX_DATA_FUNCS_new_null() SKM_sk_new_null(CRYPTO_EX_DATA_FUNCS) +#define sk_CRYPTO_EX_DATA_FUNCS_free(st) SKM_sk_free(CRYPTO_EX_DATA_FUNCS, (st)) +#define sk_CRYPTO_EX_DATA_FUNCS_num(st) SKM_sk_num(CRYPTO_EX_DATA_FUNCS, (st)) +#define sk_CRYPTO_EX_DATA_FUNCS_value(st, i) SKM_sk_value(CRYPTO_EX_DATA_FUNCS, (st), (i)) +#define sk_CRYPTO_EX_DATA_FUNCS_set(st, i, val) SKM_sk_set(CRYPTO_EX_DATA_FUNCS, (st), (i), (val)) +#define sk_CRYPTO_EX_DATA_FUNCS_zero(st) SKM_sk_zero(CRYPTO_EX_DATA_FUNCS, (st)) +#define sk_CRYPTO_EX_DATA_FUNCS_push(st, val) SKM_sk_push(CRYPTO_EX_DATA_FUNCS, (st), (val)) +#define sk_CRYPTO_EX_DATA_FUNCS_unshift(st, val) SKM_sk_unshift(CRYPTO_EX_DATA_FUNCS, (st), (val)) +#define sk_CRYPTO_EX_DATA_FUNCS_find(st, val) SKM_sk_find(CRYPTO_EX_DATA_FUNCS, (st), (val)) +#define sk_CRYPTO_EX_DATA_FUNCS_find_ex(st, val) SKM_sk_find_ex(CRYPTO_EX_DATA_FUNCS, (st), (val)) +#define sk_CRYPTO_EX_DATA_FUNCS_delete(st, i) SKM_sk_delete(CRYPTO_EX_DATA_FUNCS, (st), (i)) +#define sk_CRYPTO_EX_DATA_FUNCS_delete_ptr(st, ptr) SKM_sk_delete_ptr(CRYPTO_EX_DATA_FUNCS, (st), (ptr)) +#define sk_CRYPTO_EX_DATA_FUNCS_insert(st, val, i) SKM_sk_insert(CRYPTO_EX_DATA_FUNCS, (st), (val), (i)) +#define sk_CRYPTO_EX_DATA_FUNCS_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CRYPTO_EX_DATA_FUNCS, (st), (cmp)) +#define sk_CRYPTO_EX_DATA_FUNCS_dup(st) SKM_sk_dup(CRYPTO_EX_DATA_FUNCS, st) +#define sk_CRYPTO_EX_DATA_FUNCS_pop_free(st, free_func) SKM_sk_pop_free(CRYPTO_EX_DATA_FUNCS, (st), (free_func)) +#define sk_CRYPTO_EX_DATA_FUNCS_shift(st) SKM_sk_shift(CRYPTO_EX_DATA_FUNCS, (st)) +#define sk_CRYPTO_EX_DATA_FUNCS_pop(st) SKM_sk_pop(CRYPTO_EX_DATA_FUNCS, (st)) +#define sk_CRYPTO_EX_DATA_FUNCS_sort(st) SKM_sk_sort(CRYPTO_EX_DATA_FUNCS, (st)) +#define sk_CRYPTO_EX_DATA_FUNCS_is_sorted(st) SKM_sk_is_sorted(CRYPTO_EX_DATA_FUNCS, (st)) + +#define sk_CRYPTO_dynlock_new(cmp) SKM_sk_new(CRYPTO_dynlock, (cmp)) +#define sk_CRYPTO_dynlock_new_null() SKM_sk_new_null(CRYPTO_dynlock) +#define sk_CRYPTO_dynlock_free(st) SKM_sk_free(CRYPTO_dynlock, (st)) +#define sk_CRYPTO_dynlock_num(st) SKM_sk_num(CRYPTO_dynlock, (st)) +#define sk_CRYPTO_dynlock_value(st, i) SKM_sk_value(CRYPTO_dynlock, (st), (i)) +#define sk_CRYPTO_dynlock_set(st, i, val) SKM_sk_set(CRYPTO_dynlock, (st), (i), (val)) +#define sk_CRYPTO_dynlock_zero(st) SKM_sk_zero(CRYPTO_dynlock, (st)) +#define sk_CRYPTO_dynlock_push(st, val) SKM_sk_push(CRYPTO_dynlock, (st), (val)) +#define sk_CRYPTO_dynlock_unshift(st, val) SKM_sk_unshift(CRYPTO_dynlock, (st), (val)) +#define sk_CRYPTO_dynlock_find(st, val) SKM_sk_find(CRYPTO_dynlock, (st), (val)) +#define sk_CRYPTO_dynlock_find_ex(st, val) SKM_sk_find_ex(CRYPTO_dynlock, (st), (val)) +#define sk_CRYPTO_dynlock_delete(st, i) SKM_sk_delete(CRYPTO_dynlock, (st), (i)) +#define sk_CRYPTO_dynlock_delete_ptr(st, ptr) SKM_sk_delete_ptr(CRYPTO_dynlock, (st), (ptr)) +#define sk_CRYPTO_dynlock_insert(st, val, i) SKM_sk_insert(CRYPTO_dynlock, (st), (val), (i)) +#define sk_CRYPTO_dynlock_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CRYPTO_dynlock, (st), (cmp)) +#define sk_CRYPTO_dynlock_dup(st) SKM_sk_dup(CRYPTO_dynlock, st) +#define sk_CRYPTO_dynlock_pop_free(st, free_func) SKM_sk_pop_free(CRYPTO_dynlock, (st), (free_func)) +#define sk_CRYPTO_dynlock_shift(st) SKM_sk_shift(CRYPTO_dynlock, (st)) +#define sk_CRYPTO_dynlock_pop(st) SKM_sk_pop(CRYPTO_dynlock, (st)) +#define sk_CRYPTO_dynlock_sort(st) SKM_sk_sort(CRYPTO_dynlock, (st)) +#define sk_CRYPTO_dynlock_is_sorted(st) SKM_sk_is_sorted(CRYPTO_dynlock, (st)) + +#define sk_DIST_POINT_new(cmp) SKM_sk_new(DIST_POINT, (cmp)) +#define sk_DIST_POINT_new_null() SKM_sk_new_null(DIST_POINT) +#define sk_DIST_POINT_free(st) SKM_sk_free(DIST_POINT, (st)) +#define sk_DIST_POINT_num(st) SKM_sk_num(DIST_POINT, (st)) +#define sk_DIST_POINT_value(st, i) SKM_sk_value(DIST_POINT, (st), (i)) +#define sk_DIST_POINT_set(st, i, val) SKM_sk_set(DIST_POINT, (st), (i), (val)) +#define sk_DIST_POINT_zero(st) SKM_sk_zero(DIST_POINT, (st)) +#define sk_DIST_POINT_push(st, val) SKM_sk_push(DIST_POINT, (st), (val)) +#define sk_DIST_POINT_unshift(st, val) SKM_sk_unshift(DIST_POINT, (st), (val)) +#define sk_DIST_POINT_find(st, val) SKM_sk_find(DIST_POINT, (st), (val)) +#define sk_DIST_POINT_find_ex(st, val) SKM_sk_find_ex(DIST_POINT, (st), (val)) +#define sk_DIST_POINT_delete(st, i) SKM_sk_delete(DIST_POINT, (st), (i)) +#define sk_DIST_POINT_delete_ptr(st, ptr) SKM_sk_delete_ptr(DIST_POINT, (st), (ptr)) +#define sk_DIST_POINT_insert(st, val, i) SKM_sk_insert(DIST_POINT, (st), (val), (i)) +#define sk_DIST_POINT_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(DIST_POINT, (st), (cmp)) +#define sk_DIST_POINT_dup(st) SKM_sk_dup(DIST_POINT, st) +#define sk_DIST_POINT_pop_free(st, free_func) SKM_sk_pop_free(DIST_POINT, (st), (free_func)) +#define sk_DIST_POINT_shift(st) SKM_sk_shift(DIST_POINT, (st)) +#define sk_DIST_POINT_pop(st) SKM_sk_pop(DIST_POINT, (st)) +#define sk_DIST_POINT_sort(st) SKM_sk_sort(DIST_POINT, (st)) +#define sk_DIST_POINT_is_sorted(st) SKM_sk_is_sorted(DIST_POINT, (st)) + +#define sk_ENGINE_new(cmp) SKM_sk_new(ENGINE, (cmp)) +#define sk_ENGINE_new_null() SKM_sk_new_null(ENGINE) +#define sk_ENGINE_free(st) SKM_sk_free(ENGINE, (st)) +#define sk_ENGINE_num(st) SKM_sk_num(ENGINE, (st)) +#define sk_ENGINE_value(st, i) SKM_sk_value(ENGINE, (st), (i)) +#define sk_ENGINE_set(st, i, val) SKM_sk_set(ENGINE, (st), (i), (val)) +#define sk_ENGINE_zero(st) SKM_sk_zero(ENGINE, (st)) +#define sk_ENGINE_push(st, val) SKM_sk_push(ENGINE, (st), (val)) +#define sk_ENGINE_unshift(st, val) SKM_sk_unshift(ENGINE, (st), (val)) +#define sk_ENGINE_find(st, val) SKM_sk_find(ENGINE, (st), (val)) +#define sk_ENGINE_find_ex(st, val) SKM_sk_find_ex(ENGINE, (st), (val)) +#define sk_ENGINE_delete(st, i) SKM_sk_delete(ENGINE, (st), (i)) +#define sk_ENGINE_delete_ptr(st, ptr) SKM_sk_delete_ptr(ENGINE, (st), (ptr)) +#define sk_ENGINE_insert(st, val, i) SKM_sk_insert(ENGINE, (st), (val), (i)) +#define sk_ENGINE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ENGINE, (st), (cmp)) +#define sk_ENGINE_dup(st) SKM_sk_dup(ENGINE, st) +#define sk_ENGINE_pop_free(st, free_func) SKM_sk_pop_free(ENGINE, (st), (free_func)) +#define sk_ENGINE_shift(st) SKM_sk_shift(ENGINE, (st)) +#define sk_ENGINE_pop(st) SKM_sk_pop(ENGINE, (st)) +#define sk_ENGINE_sort(st) SKM_sk_sort(ENGINE, (st)) +#define sk_ENGINE_is_sorted(st) SKM_sk_is_sorted(ENGINE, (st)) + +#define sk_ENGINE_CLEANUP_ITEM_new(cmp) SKM_sk_new(ENGINE_CLEANUP_ITEM, (cmp)) +#define sk_ENGINE_CLEANUP_ITEM_new_null() SKM_sk_new_null(ENGINE_CLEANUP_ITEM) +#define sk_ENGINE_CLEANUP_ITEM_free(st) SKM_sk_free(ENGINE_CLEANUP_ITEM, (st)) +#define sk_ENGINE_CLEANUP_ITEM_num(st) SKM_sk_num(ENGINE_CLEANUP_ITEM, (st)) +#define sk_ENGINE_CLEANUP_ITEM_value(st, i) SKM_sk_value(ENGINE_CLEANUP_ITEM, (st), (i)) +#define sk_ENGINE_CLEANUP_ITEM_set(st, i, val) SKM_sk_set(ENGINE_CLEANUP_ITEM, (st), (i), (val)) +#define sk_ENGINE_CLEANUP_ITEM_zero(st) SKM_sk_zero(ENGINE_CLEANUP_ITEM, (st)) +#define sk_ENGINE_CLEANUP_ITEM_push(st, val) SKM_sk_push(ENGINE_CLEANUP_ITEM, (st), (val)) +#define sk_ENGINE_CLEANUP_ITEM_unshift(st, val) SKM_sk_unshift(ENGINE_CLEANUP_ITEM, (st), (val)) +#define sk_ENGINE_CLEANUP_ITEM_find(st, val) SKM_sk_find(ENGINE_CLEANUP_ITEM, (st), (val)) +#define sk_ENGINE_CLEANUP_ITEM_find_ex(st, val) SKM_sk_find_ex(ENGINE_CLEANUP_ITEM, (st), (val)) +#define sk_ENGINE_CLEANUP_ITEM_delete(st, i) SKM_sk_delete(ENGINE_CLEANUP_ITEM, (st), (i)) +#define sk_ENGINE_CLEANUP_ITEM_delete_ptr(st, ptr) SKM_sk_delete_ptr(ENGINE_CLEANUP_ITEM, (st), (ptr)) +#define sk_ENGINE_CLEANUP_ITEM_insert(st, val, i) SKM_sk_insert(ENGINE_CLEANUP_ITEM, (st), (val), (i)) +#define sk_ENGINE_CLEANUP_ITEM_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ENGINE_CLEANUP_ITEM, (st), (cmp)) +#define sk_ENGINE_CLEANUP_ITEM_dup(st) SKM_sk_dup(ENGINE_CLEANUP_ITEM, st) +#define sk_ENGINE_CLEANUP_ITEM_pop_free(st, free_func) SKM_sk_pop_free(ENGINE_CLEANUP_ITEM, (st), (free_func)) +#define sk_ENGINE_CLEANUP_ITEM_shift(st) SKM_sk_shift(ENGINE_CLEANUP_ITEM, (st)) +#define sk_ENGINE_CLEANUP_ITEM_pop(st) SKM_sk_pop(ENGINE_CLEANUP_ITEM, (st)) +#define sk_ENGINE_CLEANUP_ITEM_sort(st) SKM_sk_sort(ENGINE_CLEANUP_ITEM, (st)) +#define sk_ENGINE_CLEANUP_ITEM_is_sorted(st) SKM_sk_is_sorted(ENGINE_CLEANUP_ITEM, (st)) + +#define sk_ESS_CERT_ID_new(cmp) SKM_sk_new(ESS_CERT_ID, (cmp)) +#define sk_ESS_CERT_ID_new_null() SKM_sk_new_null(ESS_CERT_ID) +#define sk_ESS_CERT_ID_free(st) SKM_sk_free(ESS_CERT_ID, (st)) +#define sk_ESS_CERT_ID_num(st) SKM_sk_num(ESS_CERT_ID, (st)) +#define sk_ESS_CERT_ID_value(st, i) SKM_sk_value(ESS_CERT_ID, (st), (i)) +#define sk_ESS_CERT_ID_set(st, i, val) SKM_sk_set(ESS_CERT_ID, (st), (i), (val)) +#define sk_ESS_CERT_ID_zero(st) SKM_sk_zero(ESS_CERT_ID, (st)) +#define sk_ESS_CERT_ID_push(st, val) SKM_sk_push(ESS_CERT_ID, (st), (val)) +#define sk_ESS_CERT_ID_unshift(st, val) SKM_sk_unshift(ESS_CERT_ID, (st), (val)) +#define sk_ESS_CERT_ID_find(st, val) SKM_sk_find(ESS_CERT_ID, (st), (val)) +#define sk_ESS_CERT_ID_find_ex(st, val) SKM_sk_find_ex(ESS_CERT_ID, (st), (val)) +#define sk_ESS_CERT_ID_delete(st, i) SKM_sk_delete(ESS_CERT_ID, (st), (i)) +#define sk_ESS_CERT_ID_delete_ptr(st, ptr) SKM_sk_delete_ptr(ESS_CERT_ID, (st), (ptr)) +#define sk_ESS_CERT_ID_insert(st, val, i) SKM_sk_insert(ESS_CERT_ID, (st), (val), (i)) +#define sk_ESS_CERT_ID_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ESS_CERT_ID, (st), (cmp)) +#define sk_ESS_CERT_ID_dup(st) SKM_sk_dup(ESS_CERT_ID, st) +#define sk_ESS_CERT_ID_pop_free(st, free_func) SKM_sk_pop_free(ESS_CERT_ID, (st), (free_func)) +#define sk_ESS_CERT_ID_shift(st) SKM_sk_shift(ESS_CERT_ID, (st)) +#define sk_ESS_CERT_ID_pop(st) SKM_sk_pop(ESS_CERT_ID, (st)) +#define sk_ESS_CERT_ID_sort(st) SKM_sk_sort(ESS_CERT_ID, (st)) +#define sk_ESS_CERT_ID_is_sorted(st) SKM_sk_is_sorted(ESS_CERT_ID, (st)) + +#define sk_EVP_MD_new(cmp) SKM_sk_new(EVP_MD, (cmp)) +#define sk_EVP_MD_new_null() SKM_sk_new_null(EVP_MD) +#define sk_EVP_MD_free(st) SKM_sk_free(EVP_MD, (st)) +#define sk_EVP_MD_num(st) SKM_sk_num(EVP_MD, (st)) +#define sk_EVP_MD_value(st, i) SKM_sk_value(EVP_MD, (st), (i)) +#define sk_EVP_MD_set(st, i, val) SKM_sk_set(EVP_MD, (st), (i), (val)) +#define sk_EVP_MD_zero(st) SKM_sk_zero(EVP_MD, (st)) +#define sk_EVP_MD_push(st, val) SKM_sk_push(EVP_MD, (st), (val)) +#define sk_EVP_MD_unshift(st, val) SKM_sk_unshift(EVP_MD, (st), (val)) +#define sk_EVP_MD_find(st, val) SKM_sk_find(EVP_MD, (st), (val)) +#define sk_EVP_MD_find_ex(st, val) SKM_sk_find_ex(EVP_MD, (st), (val)) +#define sk_EVP_MD_delete(st, i) SKM_sk_delete(EVP_MD, (st), (i)) +#define sk_EVP_MD_delete_ptr(st, ptr) SKM_sk_delete_ptr(EVP_MD, (st), (ptr)) +#define sk_EVP_MD_insert(st, val, i) SKM_sk_insert(EVP_MD, (st), (val), (i)) +#define sk_EVP_MD_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(EVP_MD, (st), (cmp)) +#define sk_EVP_MD_dup(st) SKM_sk_dup(EVP_MD, st) +#define sk_EVP_MD_pop_free(st, free_func) SKM_sk_pop_free(EVP_MD, (st), (free_func)) +#define sk_EVP_MD_shift(st) SKM_sk_shift(EVP_MD, (st)) +#define sk_EVP_MD_pop(st) SKM_sk_pop(EVP_MD, (st)) +#define sk_EVP_MD_sort(st) SKM_sk_sort(EVP_MD, (st)) +#define sk_EVP_MD_is_sorted(st) SKM_sk_is_sorted(EVP_MD, (st)) + +#define sk_EVP_PBE_CTL_new(cmp) SKM_sk_new(EVP_PBE_CTL, (cmp)) +#define sk_EVP_PBE_CTL_new_null() SKM_sk_new_null(EVP_PBE_CTL) +#define sk_EVP_PBE_CTL_free(st) SKM_sk_free(EVP_PBE_CTL, (st)) +#define sk_EVP_PBE_CTL_num(st) SKM_sk_num(EVP_PBE_CTL, (st)) +#define sk_EVP_PBE_CTL_value(st, i) SKM_sk_value(EVP_PBE_CTL, (st), (i)) +#define sk_EVP_PBE_CTL_set(st, i, val) SKM_sk_set(EVP_PBE_CTL, (st), (i), (val)) +#define sk_EVP_PBE_CTL_zero(st) SKM_sk_zero(EVP_PBE_CTL, (st)) +#define sk_EVP_PBE_CTL_push(st, val) SKM_sk_push(EVP_PBE_CTL, (st), (val)) +#define sk_EVP_PBE_CTL_unshift(st, val) SKM_sk_unshift(EVP_PBE_CTL, (st), (val)) +#define sk_EVP_PBE_CTL_find(st, val) SKM_sk_find(EVP_PBE_CTL, (st), (val)) +#define sk_EVP_PBE_CTL_find_ex(st, val) SKM_sk_find_ex(EVP_PBE_CTL, (st), (val)) +#define sk_EVP_PBE_CTL_delete(st, i) SKM_sk_delete(EVP_PBE_CTL, (st), (i)) +#define sk_EVP_PBE_CTL_delete_ptr(st, ptr) SKM_sk_delete_ptr(EVP_PBE_CTL, (st), (ptr)) +#define sk_EVP_PBE_CTL_insert(st, val, i) SKM_sk_insert(EVP_PBE_CTL, (st), (val), (i)) +#define sk_EVP_PBE_CTL_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(EVP_PBE_CTL, (st), (cmp)) +#define sk_EVP_PBE_CTL_dup(st) SKM_sk_dup(EVP_PBE_CTL, st) +#define sk_EVP_PBE_CTL_pop_free(st, free_func) SKM_sk_pop_free(EVP_PBE_CTL, (st), (free_func)) +#define sk_EVP_PBE_CTL_shift(st) SKM_sk_shift(EVP_PBE_CTL, (st)) +#define sk_EVP_PBE_CTL_pop(st) SKM_sk_pop(EVP_PBE_CTL, (st)) +#define sk_EVP_PBE_CTL_sort(st) SKM_sk_sort(EVP_PBE_CTL, (st)) +#define sk_EVP_PBE_CTL_is_sorted(st) SKM_sk_is_sorted(EVP_PBE_CTL, (st)) + +#define sk_EVP_PKEY_ASN1_METHOD_new(cmp) SKM_sk_new(EVP_PKEY_ASN1_METHOD, (cmp)) +#define sk_EVP_PKEY_ASN1_METHOD_new_null() SKM_sk_new_null(EVP_PKEY_ASN1_METHOD) +#define sk_EVP_PKEY_ASN1_METHOD_free(st) SKM_sk_free(EVP_PKEY_ASN1_METHOD, (st)) +#define sk_EVP_PKEY_ASN1_METHOD_num(st) SKM_sk_num(EVP_PKEY_ASN1_METHOD, (st)) +#define sk_EVP_PKEY_ASN1_METHOD_value(st, i) SKM_sk_value(EVP_PKEY_ASN1_METHOD, (st), (i)) +#define sk_EVP_PKEY_ASN1_METHOD_set(st, i, val) SKM_sk_set(EVP_PKEY_ASN1_METHOD, (st), (i), (val)) +#define sk_EVP_PKEY_ASN1_METHOD_zero(st) SKM_sk_zero(EVP_PKEY_ASN1_METHOD, (st)) +#define sk_EVP_PKEY_ASN1_METHOD_push(st, val) SKM_sk_push(EVP_PKEY_ASN1_METHOD, (st), (val)) +#define sk_EVP_PKEY_ASN1_METHOD_unshift(st, val) SKM_sk_unshift(EVP_PKEY_ASN1_METHOD, (st), (val)) +#define sk_EVP_PKEY_ASN1_METHOD_find(st, val) SKM_sk_find(EVP_PKEY_ASN1_METHOD, (st), (val)) +#define sk_EVP_PKEY_ASN1_METHOD_find_ex(st, val) SKM_sk_find_ex(EVP_PKEY_ASN1_METHOD, (st), (val)) +#define sk_EVP_PKEY_ASN1_METHOD_delete(st, i) SKM_sk_delete(EVP_PKEY_ASN1_METHOD, (st), (i)) +#define sk_EVP_PKEY_ASN1_METHOD_delete_ptr(st, ptr) SKM_sk_delete_ptr(EVP_PKEY_ASN1_METHOD, (st), (ptr)) +#define sk_EVP_PKEY_ASN1_METHOD_insert(st, val, i) SKM_sk_insert(EVP_PKEY_ASN1_METHOD, (st), (val), (i)) +#define sk_EVP_PKEY_ASN1_METHOD_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(EVP_PKEY_ASN1_METHOD, (st), (cmp)) +#define sk_EVP_PKEY_ASN1_METHOD_dup(st) SKM_sk_dup(EVP_PKEY_ASN1_METHOD, st) +#define sk_EVP_PKEY_ASN1_METHOD_pop_free(st, free_func) SKM_sk_pop_free(EVP_PKEY_ASN1_METHOD, (st), (free_func)) +#define sk_EVP_PKEY_ASN1_METHOD_shift(st) SKM_sk_shift(EVP_PKEY_ASN1_METHOD, (st)) +#define sk_EVP_PKEY_ASN1_METHOD_pop(st) SKM_sk_pop(EVP_PKEY_ASN1_METHOD, (st)) +#define sk_EVP_PKEY_ASN1_METHOD_sort(st) SKM_sk_sort(EVP_PKEY_ASN1_METHOD, (st)) +#define sk_EVP_PKEY_ASN1_METHOD_is_sorted(st) SKM_sk_is_sorted(EVP_PKEY_ASN1_METHOD, (st)) + +#define sk_EVP_PKEY_METHOD_new(cmp) SKM_sk_new(EVP_PKEY_METHOD, (cmp)) +#define sk_EVP_PKEY_METHOD_new_null() SKM_sk_new_null(EVP_PKEY_METHOD) +#define sk_EVP_PKEY_METHOD_free(st) SKM_sk_free(EVP_PKEY_METHOD, (st)) +#define sk_EVP_PKEY_METHOD_num(st) SKM_sk_num(EVP_PKEY_METHOD, (st)) +#define sk_EVP_PKEY_METHOD_value(st, i) SKM_sk_value(EVP_PKEY_METHOD, (st), (i)) +#define sk_EVP_PKEY_METHOD_set(st, i, val) SKM_sk_set(EVP_PKEY_METHOD, (st), (i), (val)) +#define sk_EVP_PKEY_METHOD_zero(st) SKM_sk_zero(EVP_PKEY_METHOD, (st)) +#define sk_EVP_PKEY_METHOD_push(st, val) SKM_sk_push(EVP_PKEY_METHOD, (st), (val)) +#define sk_EVP_PKEY_METHOD_unshift(st, val) SKM_sk_unshift(EVP_PKEY_METHOD, (st), (val)) +#define sk_EVP_PKEY_METHOD_find(st, val) SKM_sk_find(EVP_PKEY_METHOD, (st), (val)) +#define sk_EVP_PKEY_METHOD_find_ex(st, val) SKM_sk_find_ex(EVP_PKEY_METHOD, (st), (val)) +#define sk_EVP_PKEY_METHOD_delete(st, i) SKM_sk_delete(EVP_PKEY_METHOD, (st), (i)) +#define sk_EVP_PKEY_METHOD_delete_ptr(st, ptr) SKM_sk_delete_ptr(EVP_PKEY_METHOD, (st), (ptr)) +#define sk_EVP_PKEY_METHOD_insert(st, val, i) SKM_sk_insert(EVP_PKEY_METHOD, (st), (val), (i)) +#define sk_EVP_PKEY_METHOD_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(EVP_PKEY_METHOD, (st), (cmp)) +#define sk_EVP_PKEY_METHOD_dup(st) SKM_sk_dup(EVP_PKEY_METHOD, st) +#define sk_EVP_PKEY_METHOD_pop_free(st, free_func) SKM_sk_pop_free(EVP_PKEY_METHOD, (st), (free_func)) +#define sk_EVP_PKEY_METHOD_shift(st) SKM_sk_shift(EVP_PKEY_METHOD, (st)) +#define sk_EVP_PKEY_METHOD_pop(st) SKM_sk_pop(EVP_PKEY_METHOD, (st)) +#define sk_EVP_PKEY_METHOD_sort(st) SKM_sk_sort(EVP_PKEY_METHOD, (st)) +#define sk_EVP_PKEY_METHOD_is_sorted(st) SKM_sk_is_sorted(EVP_PKEY_METHOD, (st)) + +#define sk_GENERAL_NAME_new(cmp) SKM_sk_new(GENERAL_NAME, (cmp)) +#define sk_GENERAL_NAME_new_null() SKM_sk_new_null(GENERAL_NAME) +#define sk_GENERAL_NAME_free(st) SKM_sk_free(GENERAL_NAME, (st)) +#define sk_GENERAL_NAME_num(st) SKM_sk_num(GENERAL_NAME, (st)) +#define sk_GENERAL_NAME_value(st, i) SKM_sk_value(GENERAL_NAME, (st), (i)) +#define sk_GENERAL_NAME_set(st, i, val) SKM_sk_set(GENERAL_NAME, (st), (i), (val)) +#define sk_GENERAL_NAME_zero(st) SKM_sk_zero(GENERAL_NAME, (st)) +#define sk_GENERAL_NAME_push(st, val) SKM_sk_push(GENERAL_NAME, (st), (val)) +#define sk_GENERAL_NAME_unshift(st, val) SKM_sk_unshift(GENERAL_NAME, (st), (val)) +#define sk_GENERAL_NAME_find(st, val) SKM_sk_find(GENERAL_NAME, (st), (val)) +#define sk_GENERAL_NAME_find_ex(st, val) SKM_sk_find_ex(GENERAL_NAME, (st), (val)) +#define sk_GENERAL_NAME_delete(st, i) SKM_sk_delete(GENERAL_NAME, (st), (i)) +#define sk_GENERAL_NAME_delete_ptr(st, ptr) SKM_sk_delete_ptr(GENERAL_NAME, (st), (ptr)) +#define sk_GENERAL_NAME_insert(st, val, i) SKM_sk_insert(GENERAL_NAME, (st), (val), (i)) +#define sk_GENERAL_NAME_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(GENERAL_NAME, (st), (cmp)) +#define sk_GENERAL_NAME_dup(st) SKM_sk_dup(GENERAL_NAME, st) +#define sk_GENERAL_NAME_pop_free(st, free_func) SKM_sk_pop_free(GENERAL_NAME, (st), (free_func)) +#define sk_GENERAL_NAME_shift(st) SKM_sk_shift(GENERAL_NAME, (st)) +#define sk_GENERAL_NAME_pop(st) SKM_sk_pop(GENERAL_NAME, (st)) +#define sk_GENERAL_NAME_sort(st) SKM_sk_sort(GENERAL_NAME, (st)) +#define sk_GENERAL_NAME_is_sorted(st) SKM_sk_is_sorted(GENERAL_NAME, (st)) + +#define sk_GENERAL_NAMES_new(cmp) SKM_sk_new(GENERAL_NAMES, (cmp)) +#define sk_GENERAL_NAMES_new_null() SKM_sk_new_null(GENERAL_NAMES) +#define sk_GENERAL_NAMES_free(st) SKM_sk_free(GENERAL_NAMES, (st)) +#define sk_GENERAL_NAMES_num(st) SKM_sk_num(GENERAL_NAMES, (st)) +#define sk_GENERAL_NAMES_value(st, i) SKM_sk_value(GENERAL_NAMES, (st), (i)) +#define sk_GENERAL_NAMES_set(st, i, val) SKM_sk_set(GENERAL_NAMES, (st), (i), (val)) +#define sk_GENERAL_NAMES_zero(st) SKM_sk_zero(GENERAL_NAMES, (st)) +#define sk_GENERAL_NAMES_push(st, val) SKM_sk_push(GENERAL_NAMES, (st), (val)) +#define sk_GENERAL_NAMES_unshift(st, val) SKM_sk_unshift(GENERAL_NAMES, (st), (val)) +#define sk_GENERAL_NAMES_find(st, val) SKM_sk_find(GENERAL_NAMES, (st), (val)) +#define sk_GENERAL_NAMES_find_ex(st, val) SKM_sk_find_ex(GENERAL_NAMES, (st), (val)) +#define sk_GENERAL_NAMES_delete(st, i) SKM_sk_delete(GENERAL_NAMES, (st), (i)) +#define sk_GENERAL_NAMES_delete_ptr(st, ptr) SKM_sk_delete_ptr(GENERAL_NAMES, (st), (ptr)) +#define sk_GENERAL_NAMES_insert(st, val, i) SKM_sk_insert(GENERAL_NAMES, (st), (val), (i)) +#define sk_GENERAL_NAMES_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(GENERAL_NAMES, (st), (cmp)) +#define sk_GENERAL_NAMES_dup(st) SKM_sk_dup(GENERAL_NAMES, st) +#define sk_GENERAL_NAMES_pop_free(st, free_func) SKM_sk_pop_free(GENERAL_NAMES, (st), (free_func)) +#define sk_GENERAL_NAMES_shift(st) SKM_sk_shift(GENERAL_NAMES, (st)) +#define sk_GENERAL_NAMES_pop(st) SKM_sk_pop(GENERAL_NAMES, (st)) +#define sk_GENERAL_NAMES_sort(st) SKM_sk_sort(GENERAL_NAMES, (st)) +#define sk_GENERAL_NAMES_is_sorted(st) SKM_sk_is_sorted(GENERAL_NAMES, (st)) + +#define sk_GENERAL_SUBTREE_new(cmp) SKM_sk_new(GENERAL_SUBTREE, (cmp)) +#define sk_GENERAL_SUBTREE_new_null() SKM_sk_new_null(GENERAL_SUBTREE) +#define sk_GENERAL_SUBTREE_free(st) SKM_sk_free(GENERAL_SUBTREE, (st)) +#define sk_GENERAL_SUBTREE_num(st) SKM_sk_num(GENERAL_SUBTREE, (st)) +#define sk_GENERAL_SUBTREE_value(st, i) SKM_sk_value(GENERAL_SUBTREE, (st), (i)) +#define sk_GENERAL_SUBTREE_set(st, i, val) SKM_sk_set(GENERAL_SUBTREE, (st), (i), (val)) +#define sk_GENERAL_SUBTREE_zero(st) SKM_sk_zero(GENERAL_SUBTREE, (st)) +#define sk_GENERAL_SUBTREE_push(st, val) SKM_sk_push(GENERAL_SUBTREE, (st), (val)) +#define sk_GENERAL_SUBTREE_unshift(st, val) SKM_sk_unshift(GENERAL_SUBTREE, (st), (val)) +#define sk_GENERAL_SUBTREE_find(st, val) SKM_sk_find(GENERAL_SUBTREE, (st), (val)) +#define sk_GENERAL_SUBTREE_find_ex(st, val) SKM_sk_find_ex(GENERAL_SUBTREE, (st), (val)) +#define sk_GENERAL_SUBTREE_delete(st, i) SKM_sk_delete(GENERAL_SUBTREE, (st), (i)) +#define sk_GENERAL_SUBTREE_delete_ptr(st, ptr) SKM_sk_delete_ptr(GENERAL_SUBTREE, (st), (ptr)) +#define sk_GENERAL_SUBTREE_insert(st, val, i) SKM_sk_insert(GENERAL_SUBTREE, (st), (val), (i)) +#define sk_GENERAL_SUBTREE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(GENERAL_SUBTREE, (st), (cmp)) +#define sk_GENERAL_SUBTREE_dup(st) SKM_sk_dup(GENERAL_SUBTREE, st) +#define sk_GENERAL_SUBTREE_pop_free(st, free_func) SKM_sk_pop_free(GENERAL_SUBTREE, (st), (free_func)) +#define sk_GENERAL_SUBTREE_shift(st) SKM_sk_shift(GENERAL_SUBTREE, (st)) +#define sk_GENERAL_SUBTREE_pop(st) SKM_sk_pop(GENERAL_SUBTREE, (st)) +#define sk_GENERAL_SUBTREE_sort(st) SKM_sk_sort(GENERAL_SUBTREE, (st)) +#define sk_GENERAL_SUBTREE_is_sorted(st) SKM_sk_is_sorted(GENERAL_SUBTREE, (st)) + +#define sk_IPAddressFamily_new(cmp) SKM_sk_new(IPAddressFamily, (cmp)) +#define sk_IPAddressFamily_new_null() SKM_sk_new_null(IPAddressFamily) +#define sk_IPAddressFamily_free(st) SKM_sk_free(IPAddressFamily, (st)) +#define sk_IPAddressFamily_num(st) SKM_sk_num(IPAddressFamily, (st)) +#define sk_IPAddressFamily_value(st, i) SKM_sk_value(IPAddressFamily, (st), (i)) +#define sk_IPAddressFamily_set(st, i, val) SKM_sk_set(IPAddressFamily, (st), (i), (val)) +#define sk_IPAddressFamily_zero(st) SKM_sk_zero(IPAddressFamily, (st)) +#define sk_IPAddressFamily_push(st, val) SKM_sk_push(IPAddressFamily, (st), (val)) +#define sk_IPAddressFamily_unshift(st, val) SKM_sk_unshift(IPAddressFamily, (st), (val)) +#define sk_IPAddressFamily_find(st, val) SKM_sk_find(IPAddressFamily, (st), (val)) +#define sk_IPAddressFamily_find_ex(st, val) SKM_sk_find_ex(IPAddressFamily, (st), (val)) +#define sk_IPAddressFamily_delete(st, i) SKM_sk_delete(IPAddressFamily, (st), (i)) +#define sk_IPAddressFamily_delete_ptr(st, ptr) SKM_sk_delete_ptr(IPAddressFamily, (st), (ptr)) +#define sk_IPAddressFamily_insert(st, val, i) SKM_sk_insert(IPAddressFamily, (st), (val), (i)) +#define sk_IPAddressFamily_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(IPAddressFamily, (st), (cmp)) +#define sk_IPAddressFamily_dup(st) SKM_sk_dup(IPAddressFamily, st) +#define sk_IPAddressFamily_pop_free(st, free_func) SKM_sk_pop_free(IPAddressFamily, (st), (free_func)) +#define sk_IPAddressFamily_shift(st) SKM_sk_shift(IPAddressFamily, (st)) +#define sk_IPAddressFamily_pop(st) SKM_sk_pop(IPAddressFamily, (st)) +#define sk_IPAddressFamily_sort(st) SKM_sk_sort(IPAddressFamily, (st)) +#define sk_IPAddressFamily_is_sorted(st) SKM_sk_is_sorted(IPAddressFamily, (st)) + +#define sk_IPAddressOrRange_new(cmp) SKM_sk_new(IPAddressOrRange, (cmp)) +#define sk_IPAddressOrRange_new_null() SKM_sk_new_null(IPAddressOrRange) +#define sk_IPAddressOrRange_free(st) SKM_sk_free(IPAddressOrRange, (st)) +#define sk_IPAddressOrRange_num(st) SKM_sk_num(IPAddressOrRange, (st)) +#define sk_IPAddressOrRange_value(st, i) SKM_sk_value(IPAddressOrRange, (st), (i)) +#define sk_IPAddressOrRange_set(st, i, val) SKM_sk_set(IPAddressOrRange, (st), (i), (val)) +#define sk_IPAddressOrRange_zero(st) SKM_sk_zero(IPAddressOrRange, (st)) +#define sk_IPAddressOrRange_push(st, val) SKM_sk_push(IPAddressOrRange, (st), (val)) +#define sk_IPAddressOrRange_unshift(st, val) SKM_sk_unshift(IPAddressOrRange, (st), (val)) +#define sk_IPAddressOrRange_find(st, val) SKM_sk_find(IPAddressOrRange, (st), (val)) +#define sk_IPAddressOrRange_find_ex(st, val) SKM_sk_find_ex(IPAddressOrRange, (st), (val)) +#define sk_IPAddressOrRange_delete(st, i) SKM_sk_delete(IPAddressOrRange, (st), (i)) +#define sk_IPAddressOrRange_delete_ptr(st, ptr) SKM_sk_delete_ptr(IPAddressOrRange, (st), (ptr)) +#define sk_IPAddressOrRange_insert(st, val, i) SKM_sk_insert(IPAddressOrRange, (st), (val), (i)) +#define sk_IPAddressOrRange_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(IPAddressOrRange, (st), (cmp)) +#define sk_IPAddressOrRange_dup(st) SKM_sk_dup(IPAddressOrRange, st) +#define sk_IPAddressOrRange_pop_free(st, free_func) SKM_sk_pop_free(IPAddressOrRange, (st), (free_func)) +#define sk_IPAddressOrRange_shift(st) SKM_sk_shift(IPAddressOrRange, (st)) +#define sk_IPAddressOrRange_pop(st) SKM_sk_pop(IPAddressOrRange, (st)) +#define sk_IPAddressOrRange_sort(st) SKM_sk_sort(IPAddressOrRange, (st)) +#define sk_IPAddressOrRange_is_sorted(st) SKM_sk_is_sorted(IPAddressOrRange, (st)) + +#define sk_KRB5_APREQBODY_new(cmp) SKM_sk_new(KRB5_APREQBODY, (cmp)) +#define sk_KRB5_APREQBODY_new_null() SKM_sk_new_null(KRB5_APREQBODY) +#define sk_KRB5_APREQBODY_free(st) SKM_sk_free(KRB5_APREQBODY, (st)) +#define sk_KRB5_APREQBODY_num(st) SKM_sk_num(KRB5_APREQBODY, (st)) +#define sk_KRB5_APREQBODY_value(st, i) SKM_sk_value(KRB5_APREQBODY, (st), (i)) +#define sk_KRB5_APREQBODY_set(st, i, val) SKM_sk_set(KRB5_APREQBODY, (st), (i), (val)) +#define sk_KRB5_APREQBODY_zero(st) SKM_sk_zero(KRB5_APREQBODY, (st)) +#define sk_KRB5_APREQBODY_push(st, val) SKM_sk_push(KRB5_APREQBODY, (st), (val)) +#define sk_KRB5_APREQBODY_unshift(st, val) SKM_sk_unshift(KRB5_APREQBODY, (st), (val)) +#define sk_KRB5_APREQBODY_find(st, val) SKM_sk_find(KRB5_APREQBODY, (st), (val)) +#define sk_KRB5_APREQBODY_find_ex(st, val) SKM_sk_find_ex(KRB5_APREQBODY, (st), (val)) +#define sk_KRB5_APREQBODY_delete(st, i) SKM_sk_delete(KRB5_APREQBODY, (st), (i)) +#define sk_KRB5_APREQBODY_delete_ptr(st, ptr) SKM_sk_delete_ptr(KRB5_APREQBODY, (st), (ptr)) +#define sk_KRB5_APREQBODY_insert(st, val, i) SKM_sk_insert(KRB5_APREQBODY, (st), (val), (i)) +#define sk_KRB5_APREQBODY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_APREQBODY, (st), (cmp)) +#define sk_KRB5_APREQBODY_dup(st) SKM_sk_dup(KRB5_APREQBODY, st) +#define sk_KRB5_APREQBODY_pop_free(st, free_func) SKM_sk_pop_free(KRB5_APREQBODY, (st), (free_func)) +#define sk_KRB5_APREQBODY_shift(st) SKM_sk_shift(KRB5_APREQBODY, (st)) +#define sk_KRB5_APREQBODY_pop(st) SKM_sk_pop(KRB5_APREQBODY, (st)) +#define sk_KRB5_APREQBODY_sort(st) SKM_sk_sort(KRB5_APREQBODY, (st)) +#define sk_KRB5_APREQBODY_is_sorted(st) SKM_sk_is_sorted(KRB5_APREQBODY, (st)) + +#define sk_KRB5_AUTHDATA_new(cmp) SKM_sk_new(KRB5_AUTHDATA, (cmp)) +#define sk_KRB5_AUTHDATA_new_null() SKM_sk_new_null(KRB5_AUTHDATA) +#define sk_KRB5_AUTHDATA_free(st) SKM_sk_free(KRB5_AUTHDATA, (st)) +#define sk_KRB5_AUTHDATA_num(st) SKM_sk_num(KRB5_AUTHDATA, (st)) +#define sk_KRB5_AUTHDATA_value(st, i) SKM_sk_value(KRB5_AUTHDATA, (st), (i)) +#define sk_KRB5_AUTHDATA_set(st, i, val) SKM_sk_set(KRB5_AUTHDATA, (st), (i), (val)) +#define sk_KRB5_AUTHDATA_zero(st) SKM_sk_zero(KRB5_AUTHDATA, (st)) +#define sk_KRB5_AUTHDATA_push(st, val) SKM_sk_push(KRB5_AUTHDATA, (st), (val)) +#define sk_KRB5_AUTHDATA_unshift(st, val) SKM_sk_unshift(KRB5_AUTHDATA, (st), (val)) +#define sk_KRB5_AUTHDATA_find(st, val) SKM_sk_find(KRB5_AUTHDATA, (st), (val)) +#define sk_KRB5_AUTHDATA_find_ex(st, val) SKM_sk_find_ex(KRB5_AUTHDATA, (st), (val)) +#define sk_KRB5_AUTHDATA_delete(st, i) SKM_sk_delete(KRB5_AUTHDATA, (st), (i)) +#define sk_KRB5_AUTHDATA_delete_ptr(st, ptr) SKM_sk_delete_ptr(KRB5_AUTHDATA, (st), (ptr)) +#define sk_KRB5_AUTHDATA_insert(st, val, i) SKM_sk_insert(KRB5_AUTHDATA, (st), (val), (i)) +#define sk_KRB5_AUTHDATA_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_AUTHDATA, (st), (cmp)) +#define sk_KRB5_AUTHDATA_dup(st) SKM_sk_dup(KRB5_AUTHDATA, st) +#define sk_KRB5_AUTHDATA_pop_free(st, free_func) SKM_sk_pop_free(KRB5_AUTHDATA, (st), (free_func)) +#define sk_KRB5_AUTHDATA_shift(st) SKM_sk_shift(KRB5_AUTHDATA, (st)) +#define sk_KRB5_AUTHDATA_pop(st) SKM_sk_pop(KRB5_AUTHDATA, (st)) +#define sk_KRB5_AUTHDATA_sort(st) SKM_sk_sort(KRB5_AUTHDATA, (st)) +#define sk_KRB5_AUTHDATA_is_sorted(st) SKM_sk_is_sorted(KRB5_AUTHDATA, (st)) + +#define sk_KRB5_AUTHENTBODY_new(cmp) SKM_sk_new(KRB5_AUTHENTBODY, (cmp)) +#define sk_KRB5_AUTHENTBODY_new_null() SKM_sk_new_null(KRB5_AUTHENTBODY) +#define sk_KRB5_AUTHENTBODY_free(st) SKM_sk_free(KRB5_AUTHENTBODY, (st)) +#define sk_KRB5_AUTHENTBODY_num(st) SKM_sk_num(KRB5_AUTHENTBODY, (st)) +#define sk_KRB5_AUTHENTBODY_value(st, i) SKM_sk_value(KRB5_AUTHENTBODY, (st), (i)) +#define sk_KRB5_AUTHENTBODY_set(st, i, val) SKM_sk_set(KRB5_AUTHENTBODY, (st), (i), (val)) +#define sk_KRB5_AUTHENTBODY_zero(st) SKM_sk_zero(KRB5_AUTHENTBODY, (st)) +#define sk_KRB5_AUTHENTBODY_push(st, val) SKM_sk_push(KRB5_AUTHENTBODY, (st), (val)) +#define sk_KRB5_AUTHENTBODY_unshift(st, val) SKM_sk_unshift(KRB5_AUTHENTBODY, (st), (val)) +#define sk_KRB5_AUTHENTBODY_find(st, val) SKM_sk_find(KRB5_AUTHENTBODY, (st), (val)) +#define sk_KRB5_AUTHENTBODY_find_ex(st, val) SKM_sk_find_ex(KRB5_AUTHENTBODY, (st), (val)) +#define sk_KRB5_AUTHENTBODY_delete(st, i) SKM_sk_delete(KRB5_AUTHENTBODY, (st), (i)) +#define sk_KRB5_AUTHENTBODY_delete_ptr(st, ptr) SKM_sk_delete_ptr(KRB5_AUTHENTBODY, (st), (ptr)) +#define sk_KRB5_AUTHENTBODY_insert(st, val, i) SKM_sk_insert(KRB5_AUTHENTBODY, (st), (val), (i)) +#define sk_KRB5_AUTHENTBODY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_AUTHENTBODY, (st), (cmp)) +#define sk_KRB5_AUTHENTBODY_dup(st) SKM_sk_dup(KRB5_AUTHENTBODY, st) +#define sk_KRB5_AUTHENTBODY_pop_free(st, free_func) SKM_sk_pop_free(KRB5_AUTHENTBODY, (st), (free_func)) +#define sk_KRB5_AUTHENTBODY_shift(st) SKM_sk_shift(KRB5_AUTHENTBODY, (st)) +#define sk_KRB5_AUTHENTBODY_pop(st) SKM_sk_pop(KRB5_AUTHENTBODY, (st)) +#define sk_KRB5_AUTHENTBODY_sort(st) SKM_sk_sort(KRB5_AUTHENTBODY, (st)) +#define sk_KRB5_AUTHENTBODY_is_sorted(st) SKM_sk_is_sorted(KRB5_AUTHENTBODY, (st)) + +#define sk_KRB5_CHECKSUM_new(cmp) SKM_sk_new(KRB5_CHECKSUM, (cmp)) +#define sk_KRB5_CHECKSUM_new_null() SKM_sk_new_null(KRB5_CHECKSUM) +#define sk_KRB5_CHECKSUM_free(st) SKM_sk_free(KRB5_CHECKSUM, (st)) +#define sk_KRB5_CHECKSUM_num(st) SKM_sk_num(KRB5_CHECKSUM, (st)) +#define sk_KRB5_CHECKSUM_value(st, i) SKM_sk_value(KRB5_CHECKSUM, (st), (i)) +#define sk_KRB5_CHECKSUM_set(st, i, val) SKM_sk_set(KRB5_CHECKSUM, (st), (i), (val)) +#define sk_KRB5_CHECKSUM_zero(st) SKM_sk_zero(KRB5_CHECKSUM, (st)) +#define sk_KRB5_CHECKSUM_push(st, val) SKM_sk_push(KRB5_CHECKSUM, (st), (val)) +#define sk_KRB5_CHECKSUM_unshift(st, val) SKM_sk_unshift(KRB5_CHECKSUM, (st), (val)) +#define sk_KRB5_CHECKSUM_find(st, val) SKM_sk_find(KRB5_CHECKSUM, (st), (val)) +#define sk_KRB5_CHECKSUM_find_ex(st, val) SKM_sk_find_ex(KRB5_CHECKSUM, (st), (val)) +#define sk_KRB5_CHECKSUM_delete(st, i) SKM_sk_delete(KRB5_CHECKSUM, (st), (i)) +#define sk_KRB5_CHECKSUM_delete_ptr(st, ptr) SKM_sk_delete_ptr(KRB5_CHECKSUM, (st), (ptr)) +#define sk_KRB5_CHECKSUM_insert(st, val, i) SKM_sk_insert(KRB5_CHECKSUM, (st), (val), (i)) +#define sk_KRB5_CHECKSUM_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_CHECKSUM, (st), (cmp)) +#define sk_KRB5_CHECKSUM_dup(st) SKM_sk_dup(KRB5_CHECKSUM, st) +#define sk_KRB5_CHECKSUM_pop_free(st, free_func) SKM_sk_pop_free(KRB5_CHECKSUM, (st), (free_func)) +#define sk_KRB5_CHECKSUM_shift(st) SKM_sk_shift(KRB5_CHECKSUM, (st)) +#define sk_KRB5_CHECKSUM_pop(st) SKM_sk_pop(KRB5_CHECKSUM, (st)) +#define sk_KRB5_CHECKSUM_sort(st) SKM_sk_sort(KRB5_CHECKSUM, (st)) +#define sk_KRB5_CHECKSUM_is_sorted(st) SKM_sk_is_sorted(KRB5_CHECKSUM, (st)) + +#define sk_KRB5_ENCDATA_new(cmp) SKM_sk_new(KRB5_ENCDATA, (cmp)) +#define sk_KRB5_ENCDATA_new_null() SKM_sk_new_null(KRB5_ENCDATA) +#define sk_KRB5_ENCDATA_free(st) SKM_sk_free(KRB5_ENCDATA, (st)) +#define sk_KRB5_ENCDATA_num(st) SKM_sk_num(KRB5_ENCDATA, (st)) +#define sk_KRB5_ENCDATA_value(st, i) SKM_sk_value(KRB5_ENCDATA, (st), (i)) +#define sk_KRB5_ENCDATA_set(st, i, val) SKM_sk_set(KRB5_ENCDATA, (st), (i), (val)) +#define sk_KRB5_ENCDATA_zero(st) SKM_sk_zero(KRB5_ENCDATA, (st)) +#define sk_KRB5_ENCDATA_push(st, val) SKM_sk_push(KRB5_ENCDATA, (st), (val)) +#define sk_KRB5_ENCDATA_unshift(st, val) SKM_sk_unshift(KRB5_ENCDATA, (st), (val)) +#define sk_KRB5_ENCDATA_find(st, val) SKM_sk_find(KRB5_ENCDATA, (st), (val)) +#define sk_KRB5_ENCDATA_find_ex(st, val) SKM_sk_find_ex(KRB5_ENCDATA, (st), (val)) +#define sk_KRB5_ENCDATA_delete(st, i) SKM_sk_delete(KRB5_ENCDATA, (st), (i)) +#define sk_KRB5_ENCDATA_delete_ptr(st, ptr) SKM_sk_delete_ptr(KRB5_ENCDATA, (st), (ptr)) +#define sk_KRB5_ENCDATA_insert(st, val, i) SKM_sk_insert(KRB5_ENCDATA, (st), (val), (i)) +#define sk_KRB5_ENCDATA_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_ENCDATA, (st), (cmp)) +#define sk_KRB5_ENCDATA_dup(st) SKM_sk_dup(KRB5_ENCDATA, st) +#define sk_KRB5_ENCDATA_pop_free(st, free_func) SKM_sk_pop_free(KRB5_ENCDATA, (st), (free_func)) +#define sk_KRB5_ENCDATA_shift(st) SKM_sk_shift(KRB5_ENCDATA, (st)) +#define sk_KRB5_ENCDATA_pop(st) SKM_sk_pop(KRB5_ENCDATA, (st)) +#define sk_KRB5_ENCDATA_sort(st) SKM_sk_sort(KRB5_ENCDATA, (st)) +#define sk_KRB5_ENCDATA_is_sorted(st) SKM_sk_is_sorted(KRB5_ENCDATA, (st)) + +#define sk_KRB5_ENCKEY_new(cmp) SKM_sk_new(KRB5_ENCKEY, (cmp)) +#define sk_KRB5_ENCKEY_new_null() SKM_sk_new_null(KRB5_ENCKEY) +#define sk_KRB5_ENCKEY_free(st) SKM_sk_free(KRB5_ENCKEY, (st)) +#define sk_KRB5_ENCKEY_num(st) SKM_sk_num(KRB5_ENCKEY, (st)) +#define sk_KRB5_ENCKEY_value(st, i) SKM_sk_value(KRB5_ENCKEY, (st), (i)) +#define sk_KRB5_ENCKEY_set(st, i, val) SKM_sk_set(KRB5_ENCKEY, (st), (i), (val)) +#define sk_KRB5_ENCKEY_zero(st) SKM_sk_zero(KRB5_ENCKEY, (st)) +#define sk_KRB5_ENCKEY_push(st, val) SKM_sk_push(KRB5_ENCKEY, (st), (val)) +#define sk_KRB5_ENCKEY_unshift(st, val) SKM_sk_unshift(KRB5_ENCKEY, (st), (val)) +#define sk_KRB5_ENCKEY_find(st, val) SKM_sk_find(KRB5_ENCKEY, (st), (val)) +#define sk_KRB5_ENCKEY_find_ex(st, val) SKM_sk_find_ex(KRB5_ENCKEY, (st), (val)) +#define sk_KRB5_ENCKEY_delete(st, i) SKM_sk_delete(KRB5_ENCKEY, (st), (i)) +#define sk_KRB5_ENCKEY_delete_ptr(st, ptr) SKM_sk_delete_ptr(KRB5_ENCKEY, (st), (ptr)) +#define sk_KRB5_ENCKEY_insert(st, val, i) SKM_sk_insert(KRB5_ENCKEY, (st), (val), (i)) +#define sk_KRB5_ENCKEY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_ENCKEY, (st), (cmp)) +#define sk_KRB5_ENCKEY_dup(st) SKM_sk_dup(KRB5_ENCKEY, st) +#define sk_KRB5_ENCKEY_pop_free(st, free_func) SKM_sk_pop_free(KRB5_ENCKEY, (st), (free_func)) +#define sk_KRB5_ENCKEY_shift(st) SKM_sk_shift(KRB5_ENCKEY, (st)) +#define sk_KRB5_ENCKEY_pop(st) SKM_sk_pop(KRB5_ENCKEY, (st)) +#define sk_KRB5_ENCKEY_sort(st) SKM_sk_sort(KRB5_ENCKEY, (st)) +#define sk_KRB5_ENCKEY_is_sorted(st) SKM_sk_is_sorted(KRB5_ENCKEY, (st)) + +#define sk_KRB5_PRINCNAME_new(cmp) SKM_sk_new(KRB5_PRINCNAME, (cmp)) +#define sk_KRB5_PRINCNAME_new_null() SKM_sk_new_null(KRB5_PRINCNAME) +#define sk_KRB5_PRINCNAME_free(st) SKM_sk_free(KRB5_PRINCNAME, (st)) +#define sk_KRB5_PRINCNAME_num(st) SKM_sk_num(KRB5_PRINCNAME, (st)) +#define sk_KRB5_PRINCNAME_value(st, i) SKM_sk_value(KRB5_PRINCNAME, (st), (i)) +#define sk_KRB5_PRINCNAME_set(st, i, val) SKM_sk_set(KRB5_PRINCNAME, (st), (i), (val)) +#define sk_KRB5_PRINCNAME_zero(st) SKM_sk_zero(KRB5_PRINCNAME, (st)) +#define sk_KRB5_PRINCNAME_push(st, val) SKM_sk_push(KRB5_PRINCNAME, (st), (val)) +#define sk_KRB5_PRINCNAME_unshift(st, val) SKM_sk_unshift(KRB5_PRINCNAME, (st), (val)) +#define sk_KRB5_PRINCNAME_find(st, val) SKM_sk_find(KRB5_PRINCNAME, (st), (val)) +#define sk_KRB5_PRINCNAME_find_ex(st, val) SKM_sk_find_ex(KRB5_PRINCNAME, (st), (val)) +#define sk_KRB5_PRINCNAME_delete(st, i) SKM_sk_delete(KRB5_PRINCNAME, (st), (i)) +#define sk_KRB5_PRINCNAME_delete_ptr(st, ptr) SKM_sk_delete_ptr(KRB5_PRINCNAME, (st), (ptr)) +#define sk_KRB5_PRINCNAME_insert(st, val, i) SKM_sk_insert(KRB5_PRINCNAME, (st), (val), (i)) +#define sk_KRB5_PRINCNAME_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_PRINCNAME, (st), (cmp)) +#define sk_KRB5_PRINCNAME_dup(st) SKM_sk_dup(KRB5_PRINCNAME, st) +#define sk_KRB5_PRINCNAME_pop_free(st, free_func) SKM_sk_pop_free(KRB5_PRINCNAME, (st), (free_func)) +#define sk_KRB5_PRINCNAME_shift(st) SKM_sk_shift(KRB5_PRINCNAME, (st)) +#define sk_KRB5_PRINCNAME_pop(st) SKM_sk_pop(KRB5_PRINCNAME, (st)) +#define sk_KRB5_PRINCNAME_sort(st) SKM_sk_sort(KRB5_PRINCNAME, (st)) +#define sk_KRB5_PRINCNAME_is_sorted(st) SKM_sk_is_sorted(KRB5_PRINCNAME, (st)) + +#define sk_KRB5_TKTBODY_new(cmp) SKM_sk_new(KRB5_TKTBODY, (cmp)) +#define sk_KRB5_TKTBODY_new_null() SKM_sk_new_null(KRB5_TKTBODY) +#define sk_KRB5_TKTBODY_free(st) SKM_sk_free(KRB5_TKTBODY, (st)) +#define sk_KRB5_TKTBODY_num(st) SKM_sk_num(KRB5_TKTBODY, (st)) +#define sk_KRB5_TKTBODY_value(st, i) SKM_sk_value(KRB5_TKTBODY, (st), (i)) +#define sk_KRB5_TKTBODY_set(st, i, val) SKM_sk_set(KRB5_TKTBODY, (st), (i), (val)) +#define sk_KRB5_TKTBODY_zero(st) SKM_sk_zero(KRB5_TKTBODY, (st)) +#define sk_KRB5_TKTBODY_push(st, val) SKM_sk_push(KRB5_TKTBODY, (st), (val)) +#define sk_KRB5_TKTBODY_unshift(st, val) SKM_sk_unshift(KRB5_TKTBODY, (st), (val)) +#define sk_KRB5_TKTBODY_find(st, val) SKM_sk_find(KRB5_TKTBODY, (st), (val)) +#define sk_KRB5_TKTBODY_find_ex(st, val) SKM_sk_find_ex(KRB5_TKTBODY, (st), (val)) +#define sk_KRB5_TKTBODY_delete(st, i) SKM_sk_delete(KRB5_TKTBODY, (st), (i)) +#define sk_KRB5_TKTBODY_delete_ptr(st, ptr) SKM_sk_delete_ptr(KRB5_TKTBODY, (st), (ptr)) +#define sk_KRB5_TKTBODY_insert(st, val, i) SKM_sk_insert(KRB5_TKTBODY, (st), (val), (i)) +#define sk_KRB5_TKTBODY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_TKTBODY, (st), (cmp)) +#define sk_KRB5_TKTBODY_dup(st) SKM_sk_dup(KRB5_TKTBODY, st) +#define sk_KRB5_TKTBODY_pop_free(st, free_func) SKM_sk_pop_free(KRB5_TKTBODY, (st), (free_func)) +#define sk_KRB5_TKTBODY_shift(st) SKM_sk_shift(KRB5_TKTBODY, (st)) +#define sk_KRB5_TKTBODY_pop(st) SKM_sk_pop(KRB5_TKTBODY, (st)) +#define sk_KRB5_TKTBODY_sort(st) SKM_sk_sort(KRB5_TKTBODY, (st)) +#define sk_KRB5_TKTBODY_is_sorted(st) SKM_sk_is_sorted(KRB5_TKTBODY, (st)) + +#define sk_MEM_OBJECT_DATA_new(cmp) SKM_sk_new(MEM_OBJECT_DATA, (cmp)) +#define sk_MEM_OBJECT_DATA_new_null() SKM_sk_new_null(MEM_OBJECT_DATA) +#define sk_MEM_OBJECT_DATA_free(st) SKM_sk_free(MEM_OBJECT_DATA, (st)) +#define sk_MEM_OBJECT_DATA_num(st) SKM_sk_num(MEM_OBJECT_DATA, (st)) +#define sk_MEM_OBJECT_DATA_value(st, i) SKM_sk_value(MEM_OBJECT_DATA, (st), (i)) +#define sk_MEM_OBJECT_DATA_set(st, i, val) SKM_sk_set(MEM_OBJECT_DATA, (st), (i), (val)) +#define sk_MEM_OBJECT_DATA_zero(st) SKM_sk_zero(MEM_OBJECT_DATA, (st)) +#define sk_MEM_OBJECT_DATA_push(st, val) SKM_sk_push(MEM_OBJECT_DATA, (st), (val)) +#define sk_MEM_OBJECT_DATA_unshift(st, val) SKM_sk_unshift(MEM_OBJECT_DATA, (st), (val)) +#define sk_MEM_OBJECT_DATA_find(st, val) SKM_sk_find(MEM_OBJECT_DATA, (st), (val)) +#define sk_MEM_OBJECT_DATA_find_ex(st, val) SKM_sk_find_ex(MEM_OBJECT_DATA, (st), (val)) +#define sk_MEM_OBJECT_DATA_delete(st, i) SKM_sk_delete(MEM_OBJECT_DATA, (st), (i)) +#define sk_MEM_OBJECT_DATA_delete_ptr(st, ptr) SKM_sk_delete_ptr(MEM_OBJECT_DATA, (st), (ptr)) +#define sk_MEM_OBJECT_DATA_insert(st, val, i) SKM_sk_insert(MEM_OBJECT_DATA, (st), (val), (i)) +#define sk_MEM_OBJECT_DATA_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(MEM_OBJECT_DATA, (st), (cmp)) +#define sk_MEM_OBJECT_DATA_dup(st) SKM_sk_dup(MEM_OBJECT_DATA, st) +#define sk_MEM_OBJECT_DATA_pop_free(st, free_func) SKM_sk_pop_free(MEM_OBJECT_DATA, (st), (free_func)) +#define sk_MEM_OBJECT_DATA_shift(st) SKM_sk_shift(MEM_OBJECT_DATA, (st)) +#define sk_MEM_OBJECT_DATA_pop(st) SKM_sk_pop(MEM_OBJECT_DATA, (st)) +#define sk_MEM_OBJECT_DATA_sort(st) SKM_sk_sort(MEM_OBJECT_DATA, (st)) +#define sk_MEM_OBJECT_DATA_is_sorted(st) SKM_sk_is_sorted(MEM_OBJECT_DATA, (st)) + +#define sk_MIME_HEADER_new(cmp) SKM_sk_new(MIME_HEADER, (cmp)) +#define sk_MIME_HEADER_new_null() SKM_sk_new_null(MIME_HEADER) +#define sk_MIME_HEADER_free(st) SKM_sk_free(MIME_HEADER, (st)) +#define sk_MIME_HEADER_num(st) SKM_sk_num(MIME_HEADER, (st)) +#define sk_MIME_HEADER_value(st, i) SKM_sk_value(MIME_HEADER, (st), (i)) +#define sk_MIME_HEADER_set(st, i, val) SKM_sk_set(MIME_HEADER, (st), (i), (val)) +#define sk_MIME_HEADER_zero(st) SKM_sk_zero(MIME_HEADER, (st)) +#define sk_MIME_HEADER_push(st, val) SKM_sk_push(MIME_HEADER, (st), (val)) +#define sk_MIME_HEADER_unshift(st, val) SKM_sk_unshift(MIME_HEADER, (st), (val)) +#define sk_MIME_HEADER_find(st, val) SKM_sk_find(MIME_HEADER, (st), (val)) +#define sk_MIME_HEADER_find_ex(st, val) SKM_sk_find_ex(MIME_HEADER, (st), (val)) +#define sk_MIME_HEADER_delete(st, i) SKM_sk_delete(MIME_HEADER, (st), (i)) +#define sk_MIME_HEADER_delete_ptr(st, ptr) SKM_sk_delete_ptr(MIME_HEADER, (st), (ptr)) +#define sk_MIME_HEADER_insert(st, val, i) SKM_sk_insert(MIME_HEADER, (st), (val), (i)) +#define sk_MIME_HEADER_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(MIME_HEADER, (st), (cmp)) +#define sk_MIME_HEADER_dup(st) SKM_sk_dup(MIME_HEADER, st) +#define sk_MIME_HEADER_pop_free(st, free_func) SKM_sk_pop_free(MIME_HEADER, (st), (free_func)) +#define sk_MIME_HEADER_shift(st) SKM_sk_shift(MIME_HEADER, (st)) +#define sk_MIME_HEADER_pop(st) SKM_sk_pop(MIME_HEADER, (st)) +#define sk_MIME_HEADER_sort(st) SKM_sk_sort(MIME_HEADER, (st)) +#define sk_MIME_HEADER_is_sorted(st) SKM_sk_is_sorted(MIME_HEADER, (st)) + +#define sk_MIME_PARAM_new(cmp) SKM_sk_new(MIME_PARAM, (cmp)) +#define sk_MIME_PARAM_new_null() SKM_sk_new_null(MIME_PARAM) +#define sk_MIME_PARAM_free(st) SKM_sk_free(MIME_PARAM, (st)) +#define sk_MIME_PARAM_num(st) SKM_sk_num(MIME_PARAM, (st)) +#define sk_MIME_PARAM_value(st, i) SKM_sk_value(MIME_PARAM, (st), (i)) +#define sk_MIME_PARAM_set(st, i, val) SKM_sk_set(MIME_PARAM, (st), (i), (val)) +#define sk_MIME_PARAM_zero(st) SKM_sk_zero(MIME_PARAM, (st)) +#define sk_MIME_PARAM_push(st, val) SKM_sk_push(MIME_PARAM, (st), (val)) +#define sk_MIME_PARAM_unshift(st, val) SKM_sk_unshift(MIME_PARAM, (st), (val)) +#define sk_MIME_PARAM_find(st, val) SKM_sk_find(MIME_PARAM, (st), (val)) +#define sk_MIME_PARAM_find_ex(st, val) SKM_sk_find_ex(MIME_PARAM, (st), (val)) +#define sk_MIME_PARAM_delete(st, i) SKM_sk_delete(MIME_PARAM, (st), (i)) +#define sk_MIME_PARAM_delete_ptr(st, ptr) SKM_sk_delete_ptr(MIME_PARAM, (st), (ptr)) +#define sk_MIME_PARAM_insert(st, val, i) SKM_sk_insert(MIME_PARAM, (st), (val), (i)) +#define sk_MIME_PARAM_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(MIME_PARAM, (st), (cmp)) +#define sk_MIME_PARAM_dup(st) SKM_sk_dup(MIME_PARAM, st) +#define sk_MIME_PARAM_pop_free(st, free_func) SKM_sk_pop_free(MIME_PARAM, (st), (free_func)) +#define sk_MIME_PARAM_shift(st) SKM_sk_shift(MIME_PARAM, (st)) +#define sk_MIME_PARAM_pop(st) SKM_sk_pop(MIME_PARAM, (st)) +#define sk_MIME_PARAM_sort(st) SKM_sk_sort(MIME_PARAM, (st)) +#define sk_MIME_PARAM_is_sorted(st) SKM_sk_is_sorted(MIME_PARAM, (st)) + +#define sk_NAME_FUNCS_new(cmp) SKM_sk_new(NAME_FUNCS, (cmp)) +#define sk_NAME_FUNCS_new_null() SKM_sk_new_null(NAME_FUNCS) +#define sk_NAME_FUNCS_free(st) SKM_sk_free(NAME_FUNCS, (st)) +#define sk_NAME_FUNCS_num(st) SKM_sk_num(NAME_FUNCS, (st)) +#define sk_NAME_FUNCS_value(st, i) SKM_sk_value(NAME_FUNCS, (st), (i)) +#define sk_NAME_FUNCS_set(st, i, val) SKM_sk_set(NAME_FUNCS, (st), (i), (val)) +#define sk_NAME_FUNCS_zero(st) SKM_sk_zero(NAME_FUNCS, (st)) +#define sk_NAME_FUNCS_push(st, val) SKM_sk_push(NAME_FUNCS, (st), (val)) +#define sk_NAME_FUNCS_unshift(st, val) SKM_sk_unshift(NAME_FUNCS, (st), (val)) +#define sk_NAME_FUNCS_find(st, val) SKM_sk_find(NAME_FUNCS, (st), (val)) +#define sk_NAME_FUNCS_find_ex(st, val) SKM_sk_find_ex(NAME_FUNCS, (st), (val)) +#define sk_NAME_FUNCS_delete(st, i) SKM_sk_delete(NAME_FUNCS, (st), (i)) +#define sk_NAME_FUNCS_delete_ptr(st, ptr) SKM_sk_delete_ptr(NAME_FUNCS, (st), (ptr)) +#define sk_NAME_FUNCS_insert(st, val, i) SKM_sk_insert(NAME_FUNCS, (st), (val), (i)) +#define sk_NAME_FUNCS_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(NAME_FUNCS, (st), (cmp)) +#define sk_NAME_FUNCS_dup(st) SKM_sk_dup(NAME_FUNCS, st) +#define sk_NAME_FUNCS_pop_free(st, free_func) SKM_sk_pop_free(NAME_FUNCS, (st), (free_func)) +#define sk_NAME_FUNCS_shift(st) SKM_sk_shift(NAME_FUNCS, (st)) +#define sk_NAME_FUNCS_pop(st) SKM_sk_pop(NAME_FUNCS, (st)) +#define sk_NAME_FUNCS_sort(st) SKM_sk_sort(NAME_FUNCS, (st)) +#define sk_NAME_FUNCS_is_sorted(st) SKM_sk_is_sorted(NAME_FUNCS, (st)) + +#define sk_OCSP_CERTID_new(cmp) SKM_sk_new(OCSP_CERTID, (cmp)) +#define sk_OCSP_CERTID_new_null() SKM_sk_new_null(OCSP_CERTID) +#define sk_OCSP_CERTID_free(st) SKM_sk_free(OCSP_CERTID, (st)) +#define sk_OCSP_CERTID_num(st) SKM_sk_num(OCSP_CERTID, (st)) +#define sk_OCSP_CERTID_value(st, i) SKM_sk_value(OCSP_CERTID, (st), (i)) +#define sk_OCSP_CERTID_set(st, i, val) SKM_sk_set(OCSP_CERTID, (st), (i), (val)) +#define sk_OCSP_CERTID_zero(st) SKM_sk_zero(OCSP_CERTID, (st)) +#define sk_OCSP_CERTID_push(st, val) SKM_sk_push(OCSP_CERTID, (st), (val)) +#define sk_OCSP_CERTID_unshift(st, val) SKM_sk_unshift(OCSP_CERTID, (st), (val)) +#define sk_OCSP_CERTID_find(st, val) SKM_sk_find(OCSP_CERTID, (st), (val)) +#define sk_OCSP_CERTID_find_ex(st, val) SKM_sk_find_ex(OCSP_CERTID, (st), (val)) +#define sk_OCSP_CERTID_delete(st, i) SKM_sk_delete(OCSP_CERTID, (st), (i)) +#define sk_OCSP_CERTID_delete_ptr(st, ptr) SKM_sk_delete_ptr(OCSP_CERTID, (st), (ptr)) +#define sk_OCSP_CERTID_insert(st, val, i) SKM_sk_insert(OCSP_CERTID, (st), (val), (i)) +#define sk_OCSP_CERTID_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(OCSP_CERTID, (st), (cmp)) +#define sk_OCSP_CERTID_dup(st) SKM_sk_dup(OCSP_CERTID, st) +#define sk_OCSP_CERTID_pop_free(st, free_func) SKM_sk_pop_free(OCSP_CERTID, (st), (free_func)) +#define sk_OCSP_CERTID_shift(st) SKM_sk_shift(OCSP_CERTID, (st)) +#define sk_OCSP_CERTID_pop(st) SKM_sk_pop(OCSP_CERTID, (st)) +#define sk_OCSP_CERTID_sort(st) SKM_sk_sort(OCSP_CERTID, (st)) +#define sk_OCSP_CERTID_is_sorted(st) SKM_sk_is_sorted(OCSP_CERTID, (st)) + +#define sk_OCSP_ONEREQ_new(cmp) SKM_sk_new(OCSP_ONEREQ, (cmp)) +#define sk_OCSP_ONEREQ_new_null() SKM_sk_new_null(OCSP_ONEREQ) +#define sk_OCSP_ONEREQ_free(st) SKM_sk_free(OCSP_ONEREQ, (st)) +#define sk_OCSP_ONEREQ_num(st) SKM_sk_num(OCSP_ONEREQ, (st)) +#define sk_OCSP_ONEREQ_value(st, i) SKM_sk_value(OCSP_ONEREQ, (st), (i)) +#define sk_OCSP_ONEREQ_set(st, i, val) SKM_sk_set(OCSP_ONEREQ, (st), (i), (val)) +#define sk_OCSP_ONEREQ_zero(st) SKM_sk_zero(OCSP_ONEREQ, (st)) +#define sk_OCSP_ONEREQ_push(st, val) SKM_sk_push(OCSP_ONEREQ, (st), (val)) +#define sk_OCSP_ONEREQ_unshift(st, val) SKM_sk_unshift(OCSP_ONEREQ, (st), (val)) +#define sk_OCSP_ONEREQ_find(st, val) SKM_sk_find(OCSP_ONEREQ, (st), (val)) +#define sk_OCSP_ONEREQ_find_ex(st, val) SKM_sk_find_ex(OCSP_ONEREQ, (st), (val)) +#define sk_OCSP_ONEREQ_delete(st, i) SKM_sk_delete(OCSP_ONEREQ, (st), (i)) +#define sk_OCSP_ONEREQ_delete_ptr(st, ptr) SKM_sk_delete_ptr(OCSP_ONEREQ, (st), (ptr)) +#define sk_OCSP_ONEREQ_insert(st, val, i) SKM_sk_insert(OCSP_ONEREQ, (st), (val), (i)) +#define sk_OCSP_ONEREQ_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(OCSP_ONEREQ, (st), (cmp)) +#define sk_OCSP_ONEREQ_dup(st) SKM_sk_dup(OCSP_ONEREQ, st) +#define sk_OCSP_ONEREQ_pop_free(st, free_func) SKM_sk_pop_free(OCSP_ONEREQ, (st), (free_func)) +#define sk_OCSP_ONEREQ_shift(st) SKM_sk_shift(OCSP_ONEREQ, (st)) +#define sk_OCSP_ONEREQ_pop(st) SKM_sk_pop(OCSP_ONEREQ, (st)) +#define sk_OCSP_ONEREQ_sort(st) SKM_sk_sort(OCSP_ONEREQ, (st)) +#define sk_OCSP_ONEREQ_is_sorted(st) SKM_sk_is_sorted(OCSP_ONEREQ, (st)) + +#define sk_OCSP_RESPID_new(cmp) SKM_sk_new(OCSP_RESPID, (cmp)) +#define sk_OCSP_RESPID_new_null() SKM_sk_new_null(OCSP_RESPID) +#define sk_OCSP_RESPID_free(st) SKM_sk_free(OCSP_RESPID, (st)) +#define sk_OCSP_RESPID_num(st) SKM_sk_num(OCSP_RESPID, (st)) +#define sk_OCSP_RESPID_value(st, i) SKM_sk_value(OCSP_RESPID, (st), (i)) +#define sk_OCSP_RESPID_set(st, i, val) SKM_sk_set(OCSP_RESPID, (st), (i), (val)) +#define sk_OCSP_RESPID_zero(st) SKM_sk_zero(OCSP_RESPID, (st)) +#define sk_OCSP_RESPID_push(st, val) SKM_sk_push(OCSP_RESPID, (st), (val)) +#define sk_OCSP_RESPID_unshift(st, val) SKM_sk_unshift(OCSP_RESPID, (st), (val)) +#define sk_OCSP_RESPID_find(st, val) SKM_sk_find(OCSP_RESPID, (st), (val)) +#define sk_OCSP_RESPID_find_ex(st, val) SKM_sk_find_ex(OCSP_RESPID, (st), (val)) +#define sk_OCSP_RESPID_delete(st, i) SKM_sk_delete(OCSP_RESPID, (st), (i)) +#define sk_OCSP_RESPID_delete_ptr(st, ptr) SKM_sk_delete_ptr(OCSP_RESPID, (st), (ptr)) +#define sk_OCSP_RESPID_insert(st, val, i) SKM_sk_insert(OCSP_RESPID, (st), (val), (i)) +#define sk_OCSP_RESPID_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(OCSP_RESPID, (st), (cmp)) +#define sk_OCSP_RESPID_dup(st) SKM_sk_dup(OCSP_RESPID, st) +#define sk_OCSP_RESPID_pop_free(st, free_func) SKM_sk_pop_free(OCSP_RESPID, (st), (free_func)) +#define sk_OCSP_RESPID_shift(st) SKM_sk_shift(OCSP_RESPID, (st)) +#define sk_OCSP_RESPID_pop(st) SKM_sk_pop(OCSP_RESPID, (st)) +#define sk_OCSP_RESPID_sort(st) SKM_sk_sort(OCSP_RESPID, (st)) +#define sk_OCSP_RESPID_is_sorted(st) SKM_sk_is_sorted(OCSP_RESPID, (st)) + +#define sk_OCSP_SINGLERESP_new(cmp) SKM_sk_new(OCSP_SINGLERESP, (cmp)) +#define sk_OCSP_SINGLERESP_new_null() SKM_sk_new_null(OCSP_SINGLERESP) +#define sk_OCSP_SINGLERESP_free(st) SKM_sk_free(OCSP_SINGLERESP, (st)) +#define sk_OCSP_SINGLERESP_num(st) SKM_sk_num(OCSP_SINGLERESP, (st)) +#define sk_OCSP_SINGLERESP_value(st, i) SKM_sk_value(OCSP_SINGLERESP, (st), (i)) +#define sk_OCSP_SINGLERESP_set(st, i, val) SKM_sk_set(OCSP_SINGLERESP, (st), (i), (val)) +#define sk_OCSP_SINGLERESP_zero(st) SKM_sk_zero(OCSP_SINGLERESP, (st)) +#define sk_OCSP_SINGLERESP_push(st, val) SKM_sk_push(OCSP_SINGLERESP, (st), (val)) +#define sk_OCSP_SINGLERESP_unshift(st, val) SKM_sk_unshift(OCSP_SINGLERESP, (st), (val)) +#define sk_OCSP_SINGLERESP_find(st, val) SKM_sk_find(OCSP_SINGLERESP, (st), (val)) +#define sk_OCSP_SINGLERESP_find_ex(st, val) SKM_sk_find_ex(OCSP_SINGLERESP, (st), (val)) +#define sk_OCSP_SINGLERESP_delete(st, i) SKM_sk_delete(OCSP_SINGLERESP, (st), (i)) +#define sk_OCSP_SINGLERESP_delete_ptr(st, ptr) SKM_sk_delete_ptr(OCSP_SINGLERESP, (st), (ptr)) +#define sk_OCSP_SINGLERESP_insert(st, val, i) SKM_sk_insert(OCSP_SINGLERESP, (st), (val), (i)) +#define sk_OCSP_SINGLERESP_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(OCSP_SINGLERESP, (st), (cmp)) +#define sk_OCSP_SINGLERESP_dup(st) SKM_sk_dup(OCSP_SINGLERESP, st) +#define sk_OCSP_SINGLERESP_pop_free(st, free_func) SKM_sk_pop_free(OCSP_SINGLERESP, (st), (free_func)) +#define sk_OCSP_SINGLERESP_shift(st) SKM_sk_shift(OCSP_SINGLERESP, (st)) +#define sk_OCSP_SINGLERESP_pop(st) SKM_sk_pop(OCSP_SINGLERESP, (st)) +#define sk_OCSP_SINGLERESP_sort(st) SKM_sk_sort(OCSP_SINGLERESP, (st)) +#define sk_OCSP_SINGLERESP_is_sorted(st) SKM_sk_is_sorted(OCSP_SINGLERESP, (st)) + +#define sk_PKCS12_SAFEBAG_new(cmp) SKM_sk_new(PKCS12_SAFEBAG, (cmp)) +#define sk_PKCS12_SAFEBAG_new_null() SKM_sk_new_null(PKCS12_SAFEBAG) +#define sk_PKCS12_SAFEBAG_free(st) SKM_sk_free(PKCS12_SAFEBAG, (st)) +#define sk_PKCS12_SAFEBAG_num(st) SKM_sk_num(PKCS12_SAFEBAG, (st)) +#define sk_PKCS12_SAFEBAG_value(st, i) SKM_sk_value(PKCS12_SAFEBAG, (st), (i)) +#define sk_PKCS12_SAFEBAG_set(st, i, val) SKM_sk_set(PKCS12_SAFEBAG, (st), (i), (val)) +#define sk_PKCS12_SAFEBAG_zero(st) SKM_sk_zero(PKCS12_SAFEBAG, (st)) +#define sk_PKCS12_SAFEBAG_push(st, val) SKM_sk_push(PKCS12_SAFEBAG, (st), (val)) +#define sk_PKCS12_SAFEBAG_unshift(st, val) SKM_sk_unshift(PKCS12_SAFEBAG, (st), (val)) +#define sk_PKCS12_SAFEBAG_find(st, val) SKM_sk_find(PKCS12_SAFEBAG, (st), (val)) +#define sk_PKCS12_SAFEBAG_find_ex(st, val) SKM_sk_find_ex(PKCS12_SAFEBAG, (st), (val)) +#define sk_PKCS12_SAFEBAG_delete(st, i) SKM_sk_delete(PKCS12_SAFEBAG, (st), (i)) +#define sk_PKCS12_SAFEBAG_delete_ptr(st, ptr) SKM_sk_delete_ptr(PKCS12_SAFEBAG, (st), (ptr)) +#define sk_PKCS12_SAFEBAG_insert(st, val, i) SKM_sk_insert(PKCS12_SAFEBAG, (st), (val), (i)) +#define sk_PKCS12_SAFEBAG_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(PKCS12_SAFEBAG, (st), (cmp)) +#define sk_PKCS12_SAFEBAG_dup(st) SKM_sk_dup(PKCS12_SAFEBAG, st) +#define sk_PKCS12_SAFEBAG_pop_free(st, free_func) SKM_sk_pop_free(PKCS12_SAFEBAG, (st), (free_func)) +#define sk_PKCS12_SAFEBAG_shift(st) SKM_sk_shift(PKCS12_SAFEBAG, (st)) +#define sk_PKCS12_SAFEBAG_pop(st) SKM_sk_pop(PKCS12_SAFEBAG, (st)) +#define sk_PKCS12_SAFEBAG_sort(st) SKM_sk_sort(PKCS12_SAFEBAG, (st)) +#define sk_PKCS12_SAFEBAG_is_sorted(st) SKM_sk_is_sorted(PKCS12_SAFEBAG, (st)) + +#define sk_PKCS7_new(cmp) SKM_sk_new(PKCS7, (cmp)) +#define sk_PKCS7_new_null() SKM_sk_new_null(PKCS7) +#define sk_PKCS7_free(st) SKM_sk_free(PKCS7, (st)) +#define sk_PKCS7_num(st) SKM_sk_num(PKCS7, (st)) +#define sk_PKCS7_value(st, i) SKM_sk_value(PKCS7, (st), (i)) +#define sk_PKCS7_set(st, i, val) SKM_sk_set(PKCS7, (st), (i), (val)) +#define sk_PKCS7_zero(st) SKM_sk_zero(PKCS7, (st)) +#define sk_PKCS7_push(st, val) SKM_sk_push(PKCS7, (st), (val)) +#define sk_PKCS7_unshift(st, val) SKM_sk_unshift(PKCS7, (st), (val)) +#define sk_PKCS7_find(st, val) SKM_sk_find(PKCS7, (st), (val)) +#define sk_PKCS7_find_ex(st, val) SKM_sk_find_ex(PKCS7, (st), (val)) +#define sk_PKCS7_delete(st, i) SKM_sk_delete(PKCS7, (st), (i)) +#define sk_PKCS7_delete_ptr(st, ptr) SKM_sk_delete_ptr(PKCS7, (st), (ptr)) +#define sk_PKCS7_insert(st, val, i) SKM_sk_insert(PKCS7, (st), (val), (i)) +#define sk_PKCS7_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(PKCS7, (st), (cmp)) +#define sk_PKCS7_dup(st) SKM_sk_dup(PKCS7, st) +#define sk_PKCS7_pop_free(st, free_func) SKM_sk_pop_free(PKCS7, (st), (free_func)) +#define sk_PKCS7_shift(st) SKM_sk_shift(PKCS7, (st)) +#define sk_PKCS7_pop(st) SKM_sk_pop(PKCS7, (st)) +#define sk_PKCS7_sort(st) SKM_sk_sort(PKCS7, (st)) +#define sk_PKCS7_is_sorted(st) SKM_sk_is_sorted(PKCS7, (st)) + +#define sk_PKCS7_RECIP_INFO_new(cmp) SKM_sk_new(PKCS7_RECIP_INFO, (cmp)) +#define sk_PKCS7_RECIP_INFO_new_null() SKM_sk_new_null(PKCS7_RECIP_INFO) +#define sk_PKCS7_RECIP_INFO_free(st) SKM_sk_free(PKCS7_RECIP_INFO, (st)) +#define sk_PKCS7_RECIP_INFO_num(st) SKM_sk_num(PKCS7_RECIP_INFO, (st)) +#define sk_PKCS7_RECIP_INFO_value(st, i) SKM_sk_value(PKCS7_RECIP_INFO, (st), (i)) +#define sk_PKCS7_RECIP_INFO_set(st, i, val) SKM_sk_set(PKCS7_RECIP_INFO, (st), (i), (val)) +#define sk_PKCS7_RECIP_INFO_zero(st) SKM_sk_zero(PKCS7_RECIP_INFO, (st)) +#define sk_PKCS7_RECIP_INFO_push(st, val) SKM_sk_push(PKCS7_RECIP_INFO, (st), (val)) +#define sk_PKCS7_RECIP_INFO_unshift(st, val) SKM_sk_unshift(PKCS7_RECIP_INFO, (st), (val)) +#define sk_PKCS7_RECIP_INFO_find(st, val) SKM_sk_find(PKCS7_RECIP_INFO, (st), (val)) +#define sk_PKCS7_RECIP_INFO_find_ex(st, val) SKM_sk_find_ex(PKCS7_RECIP_INFO, (st), (val)) +#define sk_PKCS7_RECIP_INFO_delete(st, i) SKM_sk_delete(PKCS7_RECIP_INFO, (st), (i)) +#define sk_PKCS7_RECIP_INFO_delete_ptr(st, ptr) SKM_sk_delete_ptr(PKCS7_RECIP_INFO, (st), (ptr)) +#define sk_PKCS7_RECIP_INFO_insert(st, val, i) SKM_sk_insert(PKCS7_RECIP_INFO, (st), (val), (i)) +#define sk_PKCS7_RECIP_INFO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(PKCS7_RECIP_INFO, (st), (cmp)) +#define sk_PKCS7_RECIP_INFO_dup(st) SKM_sk_dup(PKCS7_RECIP_INFO, st) +#define sk_PKCS7_RECIP_INFO_pop_free(st, free_func) SKM_sk_pop_free(PKCS7_RECIP_INFO, (st), (free_func)) +#define sk_PKCS7_RECIP_INFO_shift(st) SKM_sk_shift(PKCS7_RECIP_INFO, (st)) +#define sk_PKCS7_RECIP_INFO_pop(st) SKM_sk_pop(PKCS7_RECIP_INFO, (st)) +#define sk_PKCS7_RECIP_INFO_sort(st) SKM_sk_sort(PKCS7_RECIP_INFO, (st)) +#define sk_PKCS7_RECIP_INFO_is_sorted(st) SKM_sk_is_sorted(PKCS7_RECIP_INFO, (st)) + +#define sk_PKCS7_SIGNER_INFO_new(cmp) SKM_sk_new(PKCS7_SIGNER_INFO, (cmp)) +#define sk_PKCS7_SIGNER_INFO_new_null() SKM_sk_new_null(PKCS7_SIGNER_INFO) +#define sk_PKCS7_SIGNER_INFO_free(st) SKM_sk_free(PKCS7_SIGNER_INFO, (st)) +#define sk_PKCS7_SIGNER_INFO_num(st) SKM_sk_num(PKCS7_SIGNER_INFO, (st)) +#define sk_PKCS7_SIGNER_INFO_value(st, i) SKM_sk_value(PKCS7_SIGNER_INFO, (st), (i)) +#define sk_PKCS7_SIGNER_INFO_set(st, i, val) SKM_sk_set(PKCS7_SIGNER_INFO, (st), (i), (val)) +#define sk_PKCS7_SIGNER_INFO_zero(st) SKM_sk_zero(PKCS7_SIGNER_INFO, (st)) +#define sk_PKCS7_SIGNER_INFO_push(st, val) SKM_sk_push(PKCS7_SIGNER_INFO, (st), (val)) +#define sk_PKCS7_SIGNER_INFO_unshift(st, val) SKM_sk_unshift(PKCS7_SIGNER_INFO, (st), (val)) +#define sk_PKCS7_SIGNER_INFO_find(st, val) SKM_sk_find(PKCS7_SIGNER_INFO, (st), (val)) +#define sk_PKCS7_SIGNER_INFO_find_ex(st, val) SKM_sk_find_ex(PKCS7_SIGNER_INFO, (st), (val)) +#define sk_PKCS7_SIGNER_INFO_delete(st, i) SKM_sk_delete(PKCS7_SIGNER_INFO, (st), (i)) +#define sk_PKCS7_SIGNER_INFO_delete_ptr(st, ptr) SKM_sk_delete_ptr(PKCS7_SIGNER_INFO, (st), (ptr)) +#define sk_PKCS7_SIGNER_INFO_insert(st, val, i) SKM_sk_insert(PKCS7_SIGNER_INFO, (st), (val), (i)) +#define sk_PKCS7_SIGNER_INFO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(PKCS7_SIGNER_INFO, (st), (cmp)) +#define sk_PKCS7_SIGNER_INFO_dup(st) SKM_sk_dup(PKCS7_SIGNER_INFO, st) +#define sk_PKCS7_SIGNER_INFO_pop_free(st, free_func) SKM_sk_pop_free(PKCS7_SIGNER_INFO, (st), (free_func)) +#define sk_PKCS7_SIGNER_INFO_shift(st) SKM_sk_shift(PKCS7_SIGNER_INFO, (st)) +#define sk_PKCS7_SIGNER_INFO_pop(st) SKM_sk_pop(PKCS7_SIGNER_INFO, (st)) +#define sk_PKCS7_SIGNER_INFO_sort(st) SKM_sk_sort(PKCS7_SIGNER_INFO, (st)) +#define sk_PKCS7_SIGNER_INFO_is_sorted(st) SKM_sk_is_sorted(PKCS7_SIGNER_INFO, (st)) + +#define sk_POLICYINFO_new(cmp) SKM_sk_new(POLICYINFO, (cmp)) +#define sk_POLICYINFO_new_null() SKM_sk_new_null(POLICYINFO) +#define sk_POLICYINFO_free(st) SKM_sk_free(POLICYINFO, (st)) +#define sk_POLICYINFO_num(st) SKM_sk_num(POLICYINFO, (st)) +#define sk_POLICYINFO_value(st, i) SKM_sk_value(POLICYINFO, (st), (i)) +#define sk_POLICYINFO_set(st, i, val) SKM_sk_set(POLICYINFO, (st), (i), (val)) +#define sk_POLICYINFO_zero(st) SKM_sk_zero(POLICYINFO, (st)) +#define sk_POLICYINFO_push(st, val) SKM_sk_push(POLICYINFO, (st), (val)) +#define sk_POLICYINFO_unshift(st, val) SKM_sk_unshift(POLICYINFO, (st), (val)) +#define sk_POLICYINFO_find(st, val) SKM_sk_find(POLICYINFO, (st), (val)) +#define sk_POLICYINFO_find_ex(st, val) SKM_sk_find_ex(POLICYINFO, (st), (val)) +#define sk_POLICYINFO_delete(st, i) SKM_sk_delete(POLICYINFO, (st), (i)) +#define sk_POLICYINFO_delete_ptr(st, ptr) SKM_sk_delete_ptr(POLICYINFO, (st), (ptr)) +#define sk_POLICYINFO_insert(st, val, i) SKM_sk_insert(POLICYINFO, (st), (val), (i)) +#define sk_POLICYINFO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(POLICYINFO, (st), (cmp)) +#define sk_POLICYINFO_dup(st) SKM_sk_dup(POLICYINFO, st) +#define sk_POLICYINFO_pop_free(st, free_func) SKM_sk_pop_free(POLICYINFO, (st), (free_func)) +#define sk_POLICYINFO_shift(st) SKM_sk_shift(POLICYINFO, (st)) +#define sk_POLICYINFO_pop(st) SKM_sk_pop(POLICYINFO, (st)) +#define sk_POLICYINFO_sort(st) SKM_sk_sort(POLICYINFO, (st)) +#define sk_POLICYINFO_is_sorted(st) SKM_sk_is_sorted(POLICYINFO, (st)) + +#define sk_POLICYQUALINFO_new(cmp) SKM_sk_new(POLICYQUALINFO, (cmp)) +#define sk_POLICYQUALINFO_new_null() SKM_sk_new_null(POLICYQUALINFO) +#define sk_POLICYQUALINFO_free(st) SKM_sk_free(POLICYQUALINFO, (st)) +#define sk_POLICYQUALINFO_num(st) SKM_sk_num(POLICYQUALINFO, (st)) +#define sk_POLICYQUALINFO_value(st, i) SKM_sk_value(POLICYQUALINFO, (st), (i)) +#define sk_POLICYQUALINFO_set(st, i, val) SKM_sk_set(POLICYQUALINFO, (st), (i), (val)) +#define sk_POLICYQUALINFO_zero(st) SKM_sk_zero(POLICYQUALINFO, (st)) +#define sk_POLICYQUALINFO_push(st, val) SKM_sk_push(POLICYQUALINFO, (st), (val)) +#define sk_POLICYQUALINFO_unshift(st, val) SKM_sk_unshift(POLICYQUALINFO, (st), (val)) +#define sk_POLICYQUALINFO_find(st, val) SKM_sk_find(POLICYQUALINFO, (st), (val)) +#define sk_POLICYQUALINFO_find_ex(st, val) SKM_sk_find_ex(POLICYQUALINFO, (st), (val)) +#define sk_POLICYQUALINFO_delete(st, i) SKM_sk_delete(POLICYQUALINFO, (st), (i)) +#define sk_POLICYQUALINFO_delete_ptr(st, ptr) SKM_sk_delete_ptr(POLICYQUALINFO, (st), (ptr)) +#define sk_POLICYQUALINFO_insert(st, val, i) SKM_sk_insert(POLICYQUALINFO, (st), (val), (i)) +#define sk_POLICYQUALINFO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(POLICYQUALINFO, (st), (cmp)) +#define sk_POLICYQUALINFO_dup(st) SKM_sk_dup(POLICYQUALINFO, st) +#define sk_POLICYQUALINFO_pop_free(st, free_func) SKM_sk_pop_free(POLICYQUALINFO, (st), (free_func)) +#define sk_POLICYQUALINFO_shift(st) SKM_sk_shift(POLICYQUALINFO, (st)) +#define sk_POLICYQUALINFO_pop(st) SKM_sk_pop(POLICYQUALINFO, (st)) +#define sk_POLICYQUALINFO_sort(st) SKM_sk_sort(POLICYQUALINFO, (st)) +#define sk_POLICYQUALINFO_is_sorted(st) SKM_sk_is_sorted(POLICYQUALINFO, (st)) + +#define sk_POLICY_MAPPING_new(cmp) SKM_sk_new(POLICY_MAPPING, (cmp)) +#define sk_POLICY_MAPPING_new_null() SKM_sk_new_null(POLICY_MAPPING) +#define sk_POLICY_MAPPING_free(st) SKM_sk_free(POLICY_MAPPING, (st)) +#define sk_POLICY_MAPPING_num(st) SKM_sk_num(POLICY_MAPPING, (st)) +#define sk_POLICY_MAPPING_value(st, i) SKM_sk_value(POLICY_MAPPING, (st), (i)) +#define sk_POLICY_MAPPING_set(st, i, val) SKM_sk_set(POLICY_MAPPING, (st), (i), (val)) +#define sk_POLICY_MAPPING_zero(st) SKM_sk_zero(POLICY_MAPPING, (st)) +#define sk_POLICY_MAPPING_push(st, val) SKM_sk_push(POLICY_MAPPING, (st), (val)) +#define sk_POLICY_MAPPING_unshift(st, val) SKM_sk_unshift(POLICY_MAPPING, (st), (val)) +#define sk_POLICY_MAPPING_find(st, val) SKM_sk_find(POLICY_MAPPING, (st), (val)) +#define sk_POLICY_MAPPING_find_ex(st, val) SKM_sk_find_ex(POLICY_MAPPING, (st), (val)) +#define sk_POLICY_MAPPING_delete(st, i) SKM_sk_delete(POLICY_MAPPING, (st), (i)) +#define sk_POLICY_MAPPING_delete_ptr(st, ptr) SKM_sk_delete_ptr(POLICY_MAPPING, (st), (ptr)) +#define sk_POLICY_MAPPING_insert(st, val, i) SKM_sk_insert(POLICY_MAPPING, (st), (val), (i)) +#define sk_POLICY_MAPPING_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(POLICY_MAPPING, (st), (cmp)) +#define sk_POLICY_MAPPING_dup(st) SKM_sk_dup(POLICY_MAPPING, st) +#define sk_POLICY_MAPPING_pop_free(st, free_func) SKM_sk_pop_free(POLICY_MAPPING, (st), (free_func)) +#define sk_POLICY_MAPPING_shift(st) SKM_sk_shift(POLICY_MAPPING, (st)) +#define sk_POLICY_MAPPING_pop(st) SKM_sk_pop(POLICY_MAPPING, (st)) +#define sk_POLICY_MAPPING_sort(st) SKM_sk_sort(POLICY_MAPPING, (st)) +#define sk_POLICY_MAPPING_is_sorted(st) SKM_sk_is_sorted(POLICY_MAPPING, (st)) + +#define sk_SSL_CIPHER_new(cmp) SKM_sk_new(SSL_CIPHER, (cmp)) +#define sk_SSL_CIPHER_new_null() SKM_sk_new_null(SSL_CIPHER) +#define sk_SSL_CIPHER_free(st) SKM_sk_free(SSL_CIPHER, (st)) +#define sk_SSL_CIPHER_num(st) SKM_sk_num(SSL_CIPHER, (st)) +#define sk_SSL_CIPHER_value(st, i) SKM_sk_value(SSL_CIPHER, (st), (i)) +#define sk_SSL_CIPHER_set(st, i, val) SKM_sk_set(SSL_CIPHER, (st), (i), (val)) +#define sk_SSL_CIPHER_zero(st) SKM_sk_zero(SSL_CIPHER, (st)) +#define sk_SSL_CIPHER_push(st, val) SKM_sk_push(SSL_CIPHER, (st), (val)) +#define sk_SSL_CIPHER_unshift(st, val) SKM_sk_unshift(SSL_CIPHER, (st), (val)) +#define sk_SSL_CIPHER_find(st, val) SKM_sk_find(SSL_CIPHER, (st), (val)) +#define sk_SSL_CIPHER_find_ex(st, val) SKM_sk_find_ex(SSL_CIPHER, (st), (val)) +#define sk_SSL_CIPHER_delete(st, i) SKM_sk_delete(SSL_CIPHER, (st), (i)) +#define sk_SSL_CIPHER_delete_ptr(st, ptr) SKM_sk_delete_ptr(SSL_CIPHER, (st), (ptr)) +#define sk_SSL_CIPHER_insert(st, val, i) SKM_sk_insert(SSL_CIPHER, (st), (val), (i)) +#define sk_SSL_CIPHER_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SSL_CIPHER, (st), (cmp)) +#define sk_SSL_CIPHER_dup(st) SKM_sk_dup(SSL_CIPHER, st) +#define sk_SSL_CIPHER_pop_free(st, free_func) SKM_sk_pop_free(SSL_CIPHER, (st), (free_func)) +#define sk_SSL_CIPHER_shift(st) SKM_sk_shift(SSL_CIPHER, (st)) +#define sk_SSL_CIPHER_pop(st) SKM_sk_pop(SSL_CIPHER, (st)) +#define sk_SSL_CIPHER_sort(st) SKM_sk_sort(SSL_CIPHER, (st)) +#define sk_SSL_CIPHER_is_sorted(st) SKM_sk_is_sorted(SSL_CIPHER, (st)) + +#define sk_SSL_COMP_new(cmp) SKM_sk_new(SSL_COMP, (cmp)) +#define sk_SSL_COMP_new_null() SKM_sk_new_null(SSL_COMP) +#define sk_SSL_COMP_free(st) SKM_sk_free(SSL_COMP, (st)) +#define sk_SSL_COMP_num(st) SKM_sk_num(SSL_COMP, (st)) +#define sk_SSL_COMP_value(st, i) SKM_sk_value(SSL_COMP, (st), (i)) +#define sk_SSL_COMP_set(st, i, val) SKM_sk_set(SSL_COMP, (st), (i), (val)) +#define sk_SSL_COMP_zero(st) SKM_sk_zero(SSL_COMP, (st)) +#define sk_SSL_COMP_push(st, val) SKM_sk_push(SSL_COMP, (st), (val)) +#define sk_SSL_COMP_unshift(st, val) SKM_sk_unshift(SSL_COMP, (st), (val)) +#define sk_SSL_COMP_find(st, val) SKM_sk_find(SSL_COMP, (st), (val)) +#define sk_SSL_COMP_find_ex(st, val) SKM_sk_find_ex(SSL_COMP, (st), (val)) +#define sk_SSL_COMP_delete(st, i) SKM_sk_delete(SSL_COMP, (st), (i)) +#define sk_SSL_COMP_delete_ptr(st, ptr) SKM_sk_delete_ptr(SSL_COMP, (st), (ptr)) +#define sk_SSL_COMP_insert(st, val, i) SKM_sk_insert(SSL_COMP, (st), (val), (i)) +#define sk_SSL_COMP_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SSL_COMP, (st), (cmp)) +#define sk_SSL_COMP_dup(st) SKM_sk_dup(SSL_COMP, st) +#define sk_SSL_COMP_pop_free(st, free_func) SKM_sk_pop_free(SSL_COMP, (st), (free_func)) +#define sk_SSL_COMP_shift(st) SKM_sk_shift(SSL_COMP, (st)) +#define sk_SSL_COMP_pop(st) SKM_sk_pop(SSL_COMP, (st)) +#define sk_SSL_COMP_sort(st) SKM_sk_sort(SSL_COMP, (st)) +#define sk_SSL_COMP_is_sorted(st) SKM_sk_is_sorted(SSL_COMP, (st)) + +#define sk_STACK_OF_X509_NAME_ENTRY_new(cmp) SKM_sk_new(STACK_OF_X509_NAME_ENTRY, (cmp)) +#define sk_STACK_OF_X509_NAME_ENTRY_new_null() SKM_sk_new_null(STACK_OF_X509_NAME_ENTRY) +#define sk_STACK_OF_X509_NAME_ENTRY_free(st) SKM_sk_free(STACK_OF_X509_NAME_ENTRY, (st)) +#define sk_STACK_OF_X509_NAME_ENTRY_num(st) SKM_sk_num(STACK_OF_X509_NAME_ENTRY, (st)) +#define sk_STACK_OF_X509_NAME_ENTRY_value(st, i) SKM_sk_value(STACK_OF_X509_NAME_ENTRY, (st), (i)) +#define sk_STACK_OF_X509_NAME_ENTRY_set(st, i, val) SKM_sk_set(STACK_OF_X509_NAME_ENTRY, (st), (i), (val)) +#define sk_STACK_OF_X509_NAME_ENTRY_zero(st) SKM_sk_zero(STACK_OF_X509_NAME_ENTRY, (st)) +#define sk_STACK_OF_X509_NAME_ENTRY_push(st, val) SKM_sk_push(STACK_OF_X509_NAME_ENTRY, (st), (val)) +#define sk_STACK_OF_X509_NAME_ENTRY_unshift(st, val) SKM_sk_unshift(STACK_OF_X509_NAME_ENTRY, (st), (val)) +#define sk_STACK_OF_X509_NAME_ENTRY_find(st, val) SKM_sk_find(STACK_OF_X509_NAME_ENTRY, (st), (val)) +#define sk_STACK_OF_X509_NAME_ENTRY_find_ex(st, val) SKM_sk_find_ex(STACK_OF_X509_NAME_ENTRY, (st), (val)) +#define sk_STACK_OF_X509_NAME_ENTRY_delete(st, i) SKM_sk_delete(STACK_OF_X509_NAME_ENTRY, (st), (i)) +#define sk_STACK_OF_X509_NAME_ENTRY_delete_ptr(st, ptr) SKM_sk_delete_ptr(STACK_OF_X509_NAME_ENTRY, (st), (ptr)) +#define sk_STACK_OF_X509_NAME_ENTRY_insert(st, val, i) SKM_sk_insert(STACK_OF_X509_NAME_ENTRY, (st), (val), (i)) +#define sk_STACK_OF_X509_NAME_ENTRY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(STACK_OF_X509_NAME_ENTRY, (st), (cmp)) +#define sk_STACK_OF_X509_NAME_ENTRY_dup(st) SKM_sk_dup(STACK_OF_X509_NAME_ENTRY, st) +#define sk_STACK_OF_X509_NAME_ENTRY_pop_free(st, free_func) SKM_sk_pop_free(STACK_OF_X509_NAME_ENTRY, (st), (free_func)) +#define sk_STACK_OF_X509_NAME_ENTRY_shift(st) SKM_sk_shift(STACK_OF_X509_NAME_ENTRY, (st)) +#define sk_STACK_OF_X509_NAME_ENTRY_pop(st) SKM_sk_pop(STACK_OF_X509_NAME_ENTRY, (st)) +#define sk_STACK_OF_X509_NAME_ENTRY_sort(st) SKM_sk_sort(STACK_OF_X509_NAME_ENTRY, (st)) +#define sk_STACK_OF_X509_NAME_ENTRY_is_sorted(st) SKM_sk_is_sorted(STACK_OF_X509_NAME_ENTRY, (st)) + +#define sk_STORE_ATTR_INFO_new(cmp) SKM_sk_new(STORE_ATTR_INFO, (cmp)) +#define sk_STORE_ATTR_INFO_new_null() SKM_sk_new_null(STORE_ATTR_INFO) +#define sk_STORE_ATTR_INFO_free(st) SKM_sk_free(STORE_ATTR_INFO, (st)) +#define sk_STORE_ATTR_INFO_num(st) SKM_sk_num(STORE_ATTR_INFO, (st)) +#define sk_STORE_ATTR_INFO_value(st, i) SKM_sk_value(STORE_ATTR_INFO, (st), (i)) +#define sk_STORE_ATTR_INFO_set(st, i, val) SKM_sk_set(STORE_ATTR_INFO, (st), (i), (val)) +#define sk_STORE_ATTR_INFO_zero(st) SKM_sk_zero(STORE_ATTR_INFO, (st)) +#define sk_STORE_ATTR_INFO_push(st, val) SKM_sk_push(STORE_ATTR_INFO, (st), (val)) +#define sk_STORE_ATTR_INFO_unshift(st, val) SKM_sk_unshift(STORE_ATTR_INFO, (st), (val)) +#define sk_STORE_ATTR_INFO_find(st, val) SKM_sk_find(STORE_ATTR_INFO, (st), (val)) +#define sk_STORE_ATTR_INFO_find_ex(st, val) SKM_sk_find_ex(STORE_ATTR_INFO, (st), (val)) +#define sk_STORE_ATTR_INFO_delete(st, i) SKM_sk_delete(STORE_ATTR_INFO, (st), (i)) +#define sk_STORE_ATTR_INFO_delete_ptr(st, ptr) SKM_sk_delete_ptr(STORE_ATTR_INFO, (st), (ptr)) +#define sk_STORE_ATTR_INFO_insert(st, val, i) SKM_sk_insert(STORE_ATTR_INFO, (st), (val), (i)) +#define sk_STORE_ATTR_INFO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(STORE_ATTR_INFO, (st), (cmp)) +#define sk_STORE_ATTR_INFO_dup(st) SKM_sk_dup(STORE_ATTR_INFO, st) +#define sk_STORE_ATTR_INFO_pop_free(st, free_func) SKM_sk_pop_free(STORE_ATTR_INFO, (st), (free_func)) +#define sk_STORE_ATTR_INFO_shift(st) SKM_sk_shift(STORE_ATTR_INFO, (st)) +#define sk_STORE_ATTR_INFO_pop(st) SKM_sk_pop(STORE_ATTR_INFO, (st)) +#define sk_STORE_ATTR_INFO_sort(st) SKM_sk_sort(STORE_ATTR_INFO, (st)) +#define sk_STORE_ATTR_INFO_is_sorted(st) SKM_sk_is_sorted(STORE_ATTR_INFO, (st)) + +#define sk_STORE_OBJECT_new(cmp) SKM_sk_new(STORE_OBJECT, (cmp)) +#define sk_STORE_OBJECT_new_null() SKM_sk_new_null(STORE_OBJECT) +#define sk_STORE_OBJECT_free(st) SKM_sk_free(STORE_OBJECT, (st)) +#define sk_STORE_OBJECT_num(st) SKM_sk_num(STORE_OBJECT, (st)) +#define sk_STORE_OBJECT_value(st, i) SKM_sk_value(STORE_OBJECT, (st), (i)) +#define sk_STORE_OBJECT_set(st, i, val) SKM_sk_set(STORE_OBJECT, (st), (i), (val)) +#define sk_STORE_OBJECT_zero(st) SKM_sk_zero(STORE_OBJECT, (st)) +#define sk_STORE_OBJECT_push(st, val) SKM_sk_push(STORE_OBJECT, (st), (val)) +#define sk_STORE_OBJECT_unshift(st, val) SKM_sk_unshift(STORE_OBJECT, (st), (val)) +#define sk_STORE_OBJECT_find(st, val) SKM_sk_find(STORE_OBJECT, (st), (val)) +#define sk_STORE_OBJECT_find_ex(st, val) SKM_sk_find_ex(STORE_OBJECT, (st), (val)) +#define sk_STORE_OBJECT_delete(st, i) SKM_sk_delete(STORE_OBJECT, (st), (i)) +#define sk_STORE_OBJECT_delete_ptr(st, ptr) SKM_sk_delete_ptr(STORE_OBJECT, (st), (ptr)) +#define sk_STORE_OBJECT_insert(st, val, i) SKM_sk_insert(STORE_OBJECT, (st), (val), (i)) +#define sk_STORE_OBJECT_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(STORE_OBJECT, (st), (cmp)) +#define sk_STORE_OBJECT_dup(st) SKM_sk_dup(STORE_OBJECT, st) +#define sk_STORE_OBJECT_pop_free(st, free_func) SKM_sk_pop_free(STORE_OBJECT, (st), (free_func)) +#define sk_STORE_OBJECT_shift(st) SKM_sk_shift(STORE_OBJECT, (st)) +#define sk_STORE_OBJECT_pop(st) SKM_sk_pop(STORE_OBJECT, (st)) +#define sk_STORE_OBJECT_sort(st) SKM_sk_sort(STORE_OBJECT, (st)) +#define sk_STORE_OBJECT_is_sorted(st) SKM_sk_is_sorted(STORE_OBJECT, (st)) + +#define sk_SXNETID_new(cmp) SKM_sk_new(SXNETID, (cmp)) +#define sk_SXNETID_new_null() SKM_sk_new_null(SXNETID) +#define sk_SXNETID_free(st) SKM_sk_free(SXNETID, (st)) +#define sk_SXNETID_num(st) SKM_sk_num(SXNETID, (st)) +#define sk_SXNETID_value(st, i) SKM_sk_value(SXNETID, (st), (i)) +#define sk_SXNETID_set(st, i, val) SKM_sk_set(SXNETID, (st), (i), (val)) +#define sk_SXNETID_zero(st) SKM_sk_zero(SXNETID, (st)) +#define sk_SXNETID_push(st, val) SKM_sk_push(SXNETID, (st), (val)) +#define sk_SXNETID_unshift(st, val) SKM_sk_unshift(SXNETID, (st), (val)) +#define sk_SXNETID_find(st, val) SKM_sk_find(SXNETID, (st), (val)) +#define sk_SXNETID_find_ex(st, val) SKM_sk_find_ex(SXNETID, (st), (val)) +#define sk_SXNETID_delete(st, i) SKM_sk_delete(SXNETID, (st), (i)) +#define sk_SXNETID_delete_ptr(st, ptr) SKM_sk_delete_ptr(SXNETID, (st), (ptr)) +#define sk_SXNETID_insert(st, val, i) SKM_sk_insert(SXNETID, (st), (val), (i)) +#define sk_SXNETID_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SXNETID, (st), (cmp)) +#define sk_SXNETID_dup(st) SKM_sk_dup(SXNETID, st) +#define sk_SXNETID_pop_free(st, free_func) SKM_sk_pop_free(SXNETID, (st), (free_func)) +#define sk_SXNETID_shift(st) SKM_sk_shift(SXNETID, (st)) +#define sk_SXNETID_pop(st) SKM_sk_pop(SXNETID, (st)) +#define sk_SXNETID_sort(st) SKM_sk_sort(SXNETID, (st)) +#define sk_SXNETID_is_sorted(st) SKM_sk_is_sorted(SXNETID, (st)) + +#define sk_UI_STRING_new(cmp) SKM_sk_new(UI_STRING, (cmp)) +#define sk_UI_STRING_new_null() SKM_sk_new_null(UI_STRING) +#define sk_UI_STRING_free(st) SKM_sk_free(UI_STRING, (st)) +#define sk_UI_STRING_num(st) SKM_sk_num(UI_STRING, (st)) +#define sk_UI_STRING_value(st, i) SKM_sk_value(UI_STRING, (st), (i)) +#define sk_UI_STRING_set(st, i, val) SKM_sk_set(UI_STRING, (st), (i), (val)) +#define sk_UI_STRING_zero(st) SKM_sk_zero(UI_STRING, (st)) +#define sk_UI_STRING_push(st, val) SKM_sk_push(UI_STRING, (st), (val)) +#define sk_UI_STRING_unshift(st, val) SKM_sk_unshift(UI_STRING, (st), (val)) +#define sk_UI_STRING_find(st, val) SKM_sk_find(UI_STRING, (st), (val)) +#define sk_UI_STRING_find_ex(st, val) SKM_sk_find_ex(UI_STRING, (st), (val)) +#define sk_UI_STRING_delete(st, i) SKM_sk_delete(UI_STRING, (st), (i)) +#define sk_UI_STRING_delete_ptr(st, ptr) SKM_sk_delete_ptr(UI_STRING, (st), (ptr)) +#define sk_UI_STRING_insert(st, val, i) SKM_sk_insert(UI_STRING, (st), (val), (i)) +#define sk_UI_STRING_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(UI_STRING, (st), (cmp)) +#define sk_UI_STRING_dup(st) SKM_sk_dup(UI_STRING, st) +#define sk_UI_STRING_pop_free(st, free_func) SKM_sk_pop_free(UI_STRING, (st), (free_func)) +#define sk_UI_STRING_shift(st) SKM_sk_shift(UI_STRING, (st)) +#define sk_UI_STRING_pop(st) SKM_sk_pop(UI_STRING, (st)) +#define sk_UI_STRING_sort(st) SKM_sk_sort(UI_STRING, (st)) +#define sk_UI_STRING_is_sorted(st) SKM_sk_is_sorted(UI_STRING, (st)) + +#define sk_X509_new(cmp) SKM_sk_new(X509, (cmp)) +#define sk_X509_new_null() SKM_sk_new_null(X509) +#define sk_X509_free(st) SKM_sk_free(X509, (st)) +#define sk_X509_num(st) SKM_sk_num(X509, (st)) +#define sk_X509_value(st, i) SKM_sk_value(X509, (st), (i)) +#define sk_X509_set(st, i, val) SKM_sk_set(X509, (st), (i), (val)) +#define sk_X509_zero(st) SKM_sk_zero(X509, (st)) +#define sk_X509_push(st, val) SKM_sk_push(X509, (st), (val)) +#define sk_X509_unshift(st, val) SKM_sk_unshift(X509, (st), (val)) +#define sk_X509_find(st, val) SKM_sk_find(X509, (st), (val)) +#define sk_X509_find_ex(st, val) SKM_sk_find_ex(X509, (st), (val)) +#define sk_X509_delete(st, i) SKM_sk_delete(X509, (st), (i)) +#define sk_X509_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509, (st), (ptr)) +#define sk_X509_insert(st, val, i) SKM_sk_insert(X509, (st), (val), (i)) +#define sk_X509_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509, (st), (cmp)) +#define sk_X509_dup(st) SKM_sk_dup(X509, st) +#define sk_X509_pop_free(st, free_func) SKM_sk_pop_free(X509, (st), (free_func)) +#define sk_X509_shift(st) SKM_sk_shift(X509, (st)) +#define sk_X509_pop(st) SKM_sk_pop(X509, (st)) +#define sk_X509_sort(st) SKM_sk_sort(X509, (st)) +#define sk_X509_is_sorted(st) SKM_sk_is_sorted(X509, (st)) + +#define sk_X509V3_EXT_METHOD_new(cmp) SKM_sk_new(X509V3_EXT_METHOD, (cmp)) +#define sk_X509V3_EXT_METHOD_new_null() SKM_sk_new_null(X509V3_EXT_METHOD) +#define sk_X509V3_EXT_METHOD_free(st) SKM_sk_free(X509V3_EXT_METHOD, (st)) +#define sk_X509V3_EXT_METHOD_num(st) SKM_sk_num(X509V3_EXT_METHOD, (st)) +#define sk_X509V3_EXT_METHOD_value(st, i) SKM_sk_value(X509V3_EXT_METHOD, (st), (i)) +#define sk_X509V3_EXT_METHOD_set(st, i, val) SKM_sk_set(X509V3_EXT_METHOD, (st), (i), (val)) +#define sk_X509V3_EXT_METHOD_zero(st) SKM_sk_zero(X509V3_EXT_METHOD, (st)) +#define sk_X509V3_EXT_METHOD_push(st, val) SKM_sk_push(X509V3_EXT_METHOD, (st), (val)) +#define sk_X509V3_EXT_METHOD_unshift(st, val) SKM_sk_unshift(X509V3_EXT_METHOD, (st), (val)) +#define sk_X509V3_EXT_METHOD_find(st, val) SKM_sk_find(X509V3_EXT_METHOD, (st), (val)) +#define sk_X509V3_EXT_METHOD_find_ex(st, val) SKM_sk_find_ex(X509V3_EXT_METHOD, (st), (val)) +#define sk_X509V3_EXT_METHOD_delete(st, i) SKM_sk_delete(X509V3_EXT_METHOD, (st), (i)) +#define sk_X509V3_EXT_METHOD_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509V3_EXT_METHOD, (st), (ptr)) +#define sk_X509V3_EXT_METHOD_insert(st, val, i) SKM_sk_insert(X509V3_EXT_METHOD, (st), (val), (i)) +#define sk_X509V3_EXT_METHOD_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509V3_EXT_METHOD, (st), (cmp)) +#define sk_X509V3_EXT_METHOD_dup(st) SKM_sk_dup(X509V3_EXT_METHOD, st) +#define sk_X509V3_EXT_METHOD_pop_free(st, free_func) SKM_sk_pop_free(X509V3_EXT_METHOD, (st), (free_func)) +#define sk_X509V3_EXT_METHOD_shift(st) SKM_sk_shift(X509V3_EXT_METHOD, (st)) +#define sk_X509V3_EXT_METHOD_pop(st) SKM_sk_pop(X509V3_EXT_METHOD, (st)) +#define sk_X509V3_EXT_METHOD_sort(st) SKM_sk_sort(X509V3_EXT_METHOD, (st)) +#define sk_X509V3_EXT_METHOD_is_sorted(st) SKM_sk_is_sorted(X509V3_EXT_METHOD, (st)) + +#define sk_X509_ALGOR_new(cmp) SKM_sk_new(X509_ALGOR, (cmp)) +#define sk_X509_ALGOR_new_null() SKM_sk_new_null(X509_ALGOR) +#define sk_X509_ALGOR_free(st) SKM_sk_free(X509_ALGOR, (st)) +#define sk_X509_ALGOR_num(st) SKM_sk_num(X509_ALGOR, (st)) +#define sk_X509_ALGOR_value(st, i) SKM_sk_value(X509_ALGOR, (st), (i)) +#define sk_X509_ALGOR_set(st, i, val) SKM_sk_set(X509_ALGOR, (st), (i), (val)) +#define sk_X509_ALGOR_zero(st) SKM_sk_zero(X509_ALGOR, (st)) +#define sk_X509_ALGOR_push(st, val) SKM_sk_push(X509_ALGOR, (st), (val)) +#define sk_X509_ALGOR_unshift(st, val) SKM_sk_unshift(X509_ALGOR, (st), (val)) +#define sk_X509_ALGOR_find(st, val) SKM_sk_find(X509_ALGOR, (st), (val)) +#define sk_X509_ALGOR_find_ex(st, val) SKM_sk_find_ex(X509_ALGOR, (st), (val)) +#define sk_X509_ALGOR_delete(st, i) SKM_sk_delete(X509_ALGOR, (st), (i)) +#define sk_X509_ALGOR_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_ALGOR, (st), (ptr)) +#define sk_X509_ALGOR_insert(st, val, i) SKM_sk_insert(X509_ALGOR, (st), (val), (i)) +#define sk_X509_ALGOR_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_ALGOR, (st), (cmp)) +#define sk_X509_ALGOR_dup(st) SKM_sk_dup(X509_ALGOR, st) +#define sk_X509_ALGOR_pop_free(st, free_func) SKM_sk_pop_free(X509_ALGOR, (st), (free_func)) +#define sk_X509_ALGOR_shift(st) SKM_sk_shift(X509_ALGOR, (st)) +#define sk_X509_ALGOR_pop(st) SKM_sk_pop(X509_ALGOR, (st)) +#define sk_X509_ALGOR_sort(st) SKM_sk_sort(X509_ALGOR, (st)) +#define sk_X509_ALGOR_is_sorted(st) SKM_sk_is_sorted(X509_ALGOR, (st)) + +#define sk_X509_ATTRIBUTE_new(cmp) SKM_sk_new(X509_ATTRIBUTE, (cmp)) +#define sk_X509_ATTRIBUTE_new_null() SKM_sk_new_null(X509_ATTRIBUTE) +#define sk_X509_ATTRIBUTE_free(st) SKM_sk_free(X509_ATTRIBUTE, (st)) +#define sk_X509_ATTRIBUTE_num(st) SKM_sk_num(X509_ATTRIBUTE, (st)) +#define sk_X509_ATTRIBUTE_value(st, i) SKM_sk_value(X509_ATTRIBUTE, (st), (i)) +#define sk_X509_ATTRIBUTE_set(st, i, val) SKM_sk_set(X509_ATTRIBUTE, (st), (i), (val)) +#define sk_X509_ATTRIBUTE_zero(st) SKM_sk_zero(X509_ATTRIBUTE, (st)) +#define sk_X509_ATTRIBUTE_push(st, val) SKM_sk_push(X509_ATTRIBUTE, (st), (val)) +#define sk_X509_ATTRIBUTE_unshift(st, val) SKM_sk_unshift(X509_ATTRIBUTE, (st), (val)) +#define sk_X509_ATTRIBUTE_find(st, val) SKM_sk_find(X509_ATTRIBUTE, (st), (val)) +#define sk_X509_ATTRIBUTE_find_ex(st, val) SKM_sk_find_ex(X509_ATTRIBUTE, (st), (val)) +#define sk_X509_ATTRIBUTE_delete(st, i) SKM_sk_delete(X509_ATTRIBUTE, (st), (i)) +#define sk_X509_ATTRIBUTE_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_ATTRIBUTE, (st), (ptr)) +#define sk_X509_ATTRIBUTE_insert(st, val, i) SKM_sk_insert(X509_ATTRIBUTE, (st), (val), (i)) +#define sk_X509_ATTRIBUTE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_ATTRIBUTE, (st), (cmp)) +#define sk_X509_ATTRIBUTE_dup(st) SKM_sk_dup(X509_ATTRIBUTE, st) +#define sk_X509_ATTRIBUTE_pop_free(st, free_func) SKM_sk_pop_free(X509_ATTRIBUTE, (st), (free_func)) +#define sk_X509_ATTRIBUTE_shift(st) SKM_sk_shift(X509_ATTRIBUTE, (st)) +#define sk_X509_ATTRIBUTE_pop(st) SKM_sk_pop(X509_ATTRIBUTE, (st)) +#define sk_X509_ATTRIBUTE_sort(st) SKM_sk_sort(X509_ATTRIBUTE, (st)) +#define sk_X509_ATTRIBUTE_is_sorted(st) SKM_sk_is_sorted(X509_ATTRIBUTE, (st)) + +#define sk_X509_CRL_new(cmp) SKM_sk_new(X509_CRL, (cmp)) +#define sk_X509_CRL_new_null() SKM_sk_new_null(X509_CRL) +#define sk_X509_CRL_free(st) SKM_sk_free(X509_CRL, (st)) +#define sk_X509_CRL_num(st) SKM_sk_num(X509_CRL, (st)) +#define sk_X509_CRL_value(st, i) SKM_sk_value(X509_CRL, (st), (i)) +#define sk_X509_CRL_set(st, i, val) SKM_sk_set(X509_CRL, (st), (i), (val)) +#define sk_X509_CRL_zero(st) SKM_sk_zero(X509_CRL, (st)) +#define sk_X509_CRL_push(st, val) SKM_sk_push(X509_CRL, (st), (val)) +#define sk_X509_CRL_unshift(st, val) SKM_sk_unshift(X509_CRL, (st), (val)) +#define sk_X509_CRL_find(st, val) SKM_sk_find(X509_CRL, (st), (val)) +#define sk_X509_CRL_find_ex(st, val) SKM_sk_find_ex(X509_CRL, (st), (val)) +#define sk_X509_CRL_delete(st, i) SKM_sk_delete(X509_CRL, (st), (i)) +#define sk_X509_CRL_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_CRL, (st), (ptr)) +#define sk_X509_CRL_insert(st, val, i) SKM_sk_insert(X509_CRL, (st), (val), (i)) +#define sk_X509_CRL_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_CRL, (st), (cmp)) +#define sk_X509_CRL_dup(st) SKM_sk_dup(X509_CRL, st) +#define sk_X509_CRL_pop_free(st, free_func) SKM_sk_pop_free(X509_CRL, (st), (free_func)) +#define sk_X509_CRL_shift(st) SKM_sk_shift(X509_CRL, (st)) +#define sk_X509_CRL_pop(st) SKM_sk_pop(X509_CRL, (st)) +#define sk_X509_CRL_sort(st) SKM_sk_sort(X509_CRL, (st)) +#define sk_X509_CRL_is_sorted(st) SKM_sk_is_sorted(X509_CRL, (st)) + +#define sk_X509_EXTENSION_new(cmp) SKM_sk_new(X509_EXTENSION, (cmp)) +#define sk_X509_EXTENSION_new_null() SKM_sk_new_null(X509_EXTENSION) +#define sk_X509_EXTENSION_free(st) SKM_sk_free(X509_EXTENSION, (st)) +#define sk_X509_EXTENSION_num(st) SKM_sk_num(X509_EXTENSION, (st)) +#define sk_X509_EXTENSION_value(st, i) SKM_sk_value(X509_EXTENSION, (st), (i)) +#define sk_X509_EXTENSION_set(st, i, val) SKM_sk_set(X509_EXTENSION, (st), (i), (val)) +#define sk_X509_EXTENSION_zero(st) SKM_sk_zero(X509_EXTENSION, (st)) +#define sk_X509_EXTENSION_push(st, val) SKM_sk_push(X509_EXTENSION, (st), (val)) +#define sk_X509_EXTENSION_unshift(st, val) SKM_sk_unshift(X509_EXTENSION, (st), (val)) +#define sk_X509_EXTENSION_find(st, val) SKM_sk_find(X509_EXTENSION, (st), (val)) +#define sk_X509_EXTENSION_find_ex(st, val) SKM_sk_find_ex(X509_EXTENSION, (st), (val)) +#define sk_X509_EXTENSION_delete(st, i) SKM_sk_delete(X509_EXTENSION, (st), (i)) +#define sk_X509_EXTENSION_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_EXTENSION, (st), (ptr)) +#define sk_X509_EXTENSION_insert(st, val, i) SKM_sk_insert(X509_EXTENSION, (st), (val), (i)) +#define sk_X509_EXTENSION_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_EXTENSION, (st), (cmp)) +#define sk_X509_EXTENSION_dup(st) SKM_sk_dup(X509_EXTENSION, st) +#define sk_X509_EXTENSION_pop_free(st, free_func) SKM_sk_pop_free(X509_EXTENSION, (st), (free_func)) +#define sk_X509_EXTENSION_shift(st) SKM_sk_shift(X509_EXTENSION, (st)) +#define sk_X509_EXTENSION_pop(st) SKM_sk_pop(X509_EXTENSION, (st)) +#define sk_X509_EXTENSION_sort(st) SKM_sk_sort(X509_EXTENSION, (st)) +#define sk_X509_EXTENSION_is_sorted(st) SKM_sk_is_sorted(X509_EXTENSION, (st)) + +#define sk_X509_INFO_new(cmp) SKM_sk_new(X509_INFO, (cmp)) +#define sk_X509_INFO_new_null() SKM_sk_new_null(X509_INFO) +#define sk_X509_INFO_free(st) SKM_sk_free(X509_INFO, (st)) +#define sk_X509_INFO_num(st) SKM_sk_num(X509_INFO, (st)) +#define sk_X509_INFO_value(st, i) SKM_sk_value(X509_INFO, (st), (i)) +#define sk_X509_INFO_set(st, i, val) SKM_sk_set(X509_INFO, (st), (i), (val)) +#define sk_X509_INFO_zero(st) SKM_sk_zero(X509_INFO, (st)) +#define sk_X509_INFO_push(st, val) SKM_sk_push(X509_INFO, (st), (val)) +#define sk_X509_INFO_unshift(st, val) SKM_sk_unshift(X509_INFO, (st), (val)) +#define sk_X509_INFO_find(st, val) SKM_sk_find(X509_INFO, (st), (val)) +#define sk_X509_INFO_find_ex(st, val) SKM_sk_find_ex(X509_INFO, (st), (val)) +#define sk_X509_INFO_delete(st, i) SKM_sk_delete(X509_INFO, (st), (i)) +#define sk_X509_INFO_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_INFO, (st), (ptr)) +#define sk_X509_INFO_insert(st, val, i) SKM_sk_insert(X509_INFO, (st), (val), (i)) +#define sk_X509_INFO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_INFO, (st), (cmp)) +#define sk_X509_INFO_dup(st) SKM_sk_dup(X509_INFO, st) +#define sk_X509_INFO_pop_free(st, free_func) SKM_sk_pop_free(X509_INFO, (st), (free_func)) +#define sk_X509_INFO_shift(st) SKM_sk_shift(X509_INFO, (st)) +#define sk_X509_INFO_pop(st) SKM_sk_pop(X509_INFO, (st)) +#define sk_X509_INFO_sort(st) SKM_sk_sort(X509_INFO, (st)) +#define sk_X509_INFO_is_sorted(st) SKM_sk_is_sorted(X509_INFO, (st)) + +#define sk_X509_LOOKUP_new(cmp) SKM_sk_new(X509_LOOKUP, (cmp)) +#define sk_X509_LOOKUP_new_null() SKM_sk_new_null(X509_LOOKUP) +#define sk_X509_LOOKUP_free(st) SKM_sk_free(X509_LOOKUP, (st)) +#define sk_X509_LOOKUP_num(st) SKM_sk_num(X509_LOOKUP, (st)) +#define sk_X509_LOOKUP_value(st, i) SKM_sk_value(X509_LOOKUP, (st), (i)) +#define sk_X509_LOOKUP_set(st, i, val) SKM_sk_set(X509_LOOKUP, (st), (i), (val)) +#define sk_X509_LOOKUP_zero(st) SKM_sk_zero(X509_LOOKUP, (st)) +#define sk_X509_LOOKUP_push(st, val) SKM_sk_push(X509_LOOKUP, (st), (val)) +#define sk_X509_LOOKUP_unshift(st, val) SKM_sk_unshift(X509_LOOKUP, (st), (val)) +#define sk_X509_LOOKUP_find(st, val) SKM_sk_find(X509_LOOKUP, (st), (val)) +#define sk_X509_LOOKUP_find_ex(st, val) SKM_sk_find_ex(X509_LOOKUP, (st), (val)) +#define sk_X509_LOOKUP_delete(st, i) SKM_sk_delete(X509_LOOKUP, (st), (i)) +#define sk_X509_LOOKUP_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_LOOKUP, (st), (ptr)) +#define sk_X509_LOOKUP_insert(st, val, i) SKM_sk_insert(X509_LOOKUP, (st), (val), (i)) +#define sk_X509_LOOKUP_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_LOOKUP, (st), (cmp)) +#define sk_X509_LOOKUP_dup(st) SKM_sk_dup(X509_LOOKUP, st) +#define sk_X509_LOOKUP_pop_free(st, free_func) SKM_sk_pop_free(X509_LOOKUP, (st), (free_func)) +#define sk_X509_LOOKUP_shift(st) SKM_sk_shift(X509_LOOKUP, (st)) +#define sk_X509_LOOKUP_pop(st) SKM_sk_pop(X509_LOOKUP, (st)) +#define sk_X509_LOOKUP_sort(st) SKM_sk_sort(X509_LOOKUP, (st)) +#define sk_X509_LOOKUP_is_sorted(st) SKM_sk_is_sorted(X509_LOOKUP, (st)) + +#define sk_X509_NAME_new(cmp) SKM_sk_new(X509_NAME, (cmp)) +#define sk_X509_NAME_new_null() SKM_sk_new_null(X509_NAME) +#define sk_X509_NAME_free(st) SKM_sk_free(X509_NAME, (st)) +#define sk_X509_NAME_num(st) SKM_sk_num(X509_NAME, (st)) +#define sk_X509_NAME_value(st, i) SKM_sk_value(X509_NAME, (st), (i)) +#define sk_X509_NAME_set(st, i, val) SKM_sk_set(X509_NAME, (st), (i), (val)) +#define sk_X509_NAME_zero(st) SKM_sk_zero(X509_NAME, (st)) +#define sk_X509_NAME_push(st, val) SKM_sk_push(X509_NAME, (st), (val)) +#define sk_X509_NAME_unshift(st, val) SKM_sk_unshift(X509_NAME, (st), (val)) +#define sk_X509_NAME_find(st, val) SKM_sk_find(X509_NAME, (st), (val)) +#define sk_X509_NAME_find_ex(st, val) SKM_sk_find_ex(X509_NAME, (st), (val)) +#define sk_X509_NAME_delete(st, i) SKM_sk_delete(X509_NAME, (st), (i)) +#define sk_X509_NAME_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_NAME, (st), (ptr)) +#define sk_X509_NAME_insert(st, val, i) SKM_sk_insert(X509_NAME, (st), (val), (i)) +#define sk_X509_NAME_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_NAME, (st), (cmp)) +#define sk_X509_NAME_dup(st) SKM_sk_dup(X509_NAME, st) +#define sk_X509_NAME_pop_free(st, free_func) SKM_sk_pop_free(X509_NAME, (st), (free_func)) +#define sk_X509_NAME_shift(st) SKM_sk_shift(X509_NAME, (st)) +#define sk_X509_NAME_pop(st) SKM_sk_pop(X509_NAME, (st)) +#define sk_X509_NAME_sort(st) SKM_sk_sort(X509_NAME, (st)) +#define sk_X509_NAME_is_sorted(st) SKM_sk_is_sorted(X509_NAME, (st)) + +#define sk_X509_NAME_ENTRY_new(cmp) SKM_sk_new(X509_NAME_ENTRY, (cmp)) +#define sk_X509_NAME_ENTRY_new_null() SKM_sk_new_null(X509_NAME_ENTRY) +#define sk_X509_NAME_ENTRY_free(st) SKM_sk_free(X509_NAME_ENTRY, (st)) +#define sk_X509_NAME_ENTRY_num(st) SKM_sk_num(X509_NAME_ENTRY, (st)) +#define sk_X509_NAME_ENTRY_value(st, i) SKM_sk_value(X509_NAME_ENTRY, (st), (i)) +#define sk_X509_NAME_ENTRY_set(st, i, val) SKM_sk_set(X509_NAME_ENTRY, (st), (i), (val)) +#define sk_X509_NAME_ENTRY_zero(st) SKM_sk_zero(X509_NAME_ENTRY, (st)) +#define sk_X509_NAME_ENTRY_push(st, val) SKM_sk_push(X509_NAME_ENTRY, (st), (val)) +#define sk_X509_NAME_ENTRY_unshift(st, val) SKM_sk_unshift(X509_NAME_ENTRY, (st), (val)) +#define sk_X509_NAME_ENTRY_find(st, val) SKM_sk_find(X509_NAME_ENTRY, (st), (val)) +#define sk_X509_NAME_ENTRY_find_ex(st, val) SKM_sk_find_ex(X509_NAME_ENTRY, (st), (val)) +#define sk_X509_NAME_ENTRY_delete(st, i) SKM_sk_delete(X509_NAME_ENTRY, (st), (i)) +#define sk_X509_NAME_ENTRY_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_NAME_ENTRY, (st), (ptr)) +#define sk_X509_NAME_ENTRY_insert(st, val, i) SKM_sk_insert(X509_NAME_ENTRY, (st), (val), (i)) +#define sk_X509_NAME_ENTRY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_NAME_ENTRY, (st), (cmp)) +#define sk_X509_NAME_ENTRY_dup(st) SKM_sk_dup(X509_NAME_ENTRY, st) +#define sk_X509_NAME_ENTRY_pop_free(st, free_func) SKM_sk_pop_free(X509_NAME_ENTRY, (st), (free_func)) +#define sk_X509_NAME_ENTRY_shift(st) SKM_sk_shift(X509_NAME_ENTRY, (st)) +#define sk_X509_NAME_ENTRY_pop(st) SKM_sk_pop(X509_NAME_ENTRY, (st)) +#define sk_X509_NAME_ENTRY_sort(st) SKM_sk_sort(X509_NAME_ENTRY, (st)) +#define sk_X509_NAME_ENTRY_is_sorted(st) SKM_sk_is_sorted(X509_NAME_ENTRY, (st)) + +#define sk_X509_OBJECT_new(cmp) SKM_sk_new(X509_OBJECT, (cmp)) +#define sk_X509_OBJECT_new_null() SKM_sk_new_null(X509_OBJECT) +#define sk_X509_OBJECT_free(st) SKM_sk_free(X509_OBJECT, (st)) +#define sk_X509_OBJECT_num(st) SKM_sk_num(X509_OBJECT, (st)) +#define sk_X509_OBJECT_value(st, i) SKM_sk_value(X509_OBJECT, (st), (i)) +#define sk_X509_OBJECT_set(st, i, val) SKM_sk_set(X509_OBJECT, (st), (i), (val)) +#define sk_X509_OBJECT_zero(st) SKM_sk_zero(X509_OBJECT, (st)) +#define sk_X509_OBJECT_push(st, val) SKM_sk_push(X509_OBJECT, (st), (val)) +#define sk_X509_OBJECT_unshift(st, val) SKM_sk_unshift(X509_OBJECT, (st), (val)) +#define sk_X509_OBJECT_find(st, val) SKM_sk_find(X509_OBJECT, (st), (val)) +#define sk_X509_OBJECT_find_ex(st, val) SKM_sk_find_ex(X509_OBJECT, (st), (val)) +#define sk_X509_OBJECT_delete(st, i) SKM_sk_delete(X509_OBJECT, (st), (i)) +#define sk_X509_OBJECT_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_OBJECT, (st), (ptr)) +#define sk_X509_OBJECT_insert(st, val, i) SKM_sk_insert(X509_OBJECT, (st), (val), (i)) +#define sk_X509_OBJECT_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_OBJECT, (st), (cmp)) +#define sk_X509_OBJECT_dup(st) SKM_sk_dup(X509_OBJECT, st) +#define sk_X509_OBJECT_pop_free(st, free_func) SKM_sk_pop_free(X509_OBJECT, (st), (free_func)) +#define sk_X509_OBJECT_shift(st) SKM_sk_shift(X509_OBJECT, (st)) +#define sk_X509_OBJECT_pop(st) SKM_sk_pop(X509_OBJECT, (st)) +#define sk_X509_OBJECT_sort(st) SKM_sk_sort(X509_OBJECT, (st)) +#define sk_X509_OBJECT_is_sorted(st) SKM_sk_is_sorted(X509_OBJECT, (st)) + +#define sk_X509_POLICY_DATA_new(cmp) SKM_sk_new(X509_POLICY_DATA, (cmp)) +#define sk_X509_POLICY_DATA_new_null() SKM_sk_new_null(X509_POLICY_DATA) +#define sk_X509_POLICY_DATA_free(st) SKM_sk_free(X509_POLICY_DATA, (st)) +#define sk_X509_POLICY_DATA_num(st) SKM_sk_num(X509_POLICY_DATA, (st)) +#define sk_X509_POLICY_DATA_value(st, i) SKM_sk_value(X509_POLICY_DATA, (st), (i)) +#define sk_X509_POLICY_DATA_set(st, i, val) SKM_sk_set(X509_POLICY_DATA, (st), (i), (val)) +#define sk_X509_POLICY_DATA_zero(st) SKM_sk_zero(X509_POLICY_DATA, (st)) +#define sk_X509_POLICY_DATA_push(st, val) SKM_sk_push(X509_POLICY_DATA, (st), (val)) +#define sk_X509_POLICY_DATA_unshift(st, val) SKM_sk_unshift(X509_POLICY_DATA, (st), (val)) +#define sk_X509_POLICY_DATA_find(st, val) SKM_sk_find(X509_POLICY_DATA, (st), (val)) +#define sk_X509_POLICY_DATA_find_ex(st, val) SKM_sk_find_ex(X509_POLICY_DATA, (st), (val)) +#define sk_X509_POLICY_DATA_delete(st, i) SKM_sk_delete(X509_POLICY_DATA, (st), (i)) +#define sk_X509_POLICY_DATA_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_POLICY_DATA, (st), (ptr)) +#define sk_X509_POLICY_DATA_insert(st, val, i) SKM_sk_insert(X509_POLICY_DATA, (st), (val), (i)) +#define sk_X509_POLICY_DATA_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_POLICY_DATA, (st), (cmp)) +#define sk_X509_POLICY_DATA_dup(st) SKM_sk_dup(X509_POLICY_DATA, st) +#define sk_X509_POLICY_DATA_pop_free(st, free_func) SKM_sk_pop_free(X509_POLICY_DATA, (st), (free_func)) +#define sk_X509_POLICY_DATA_shift(st) SKM_sk_shift(X509_POLICY_DATA, (st)) +#define sk_X509_POLICY_DATA_pop(st) SKM_sk_pop(X509_POLICY_DATA, (st)) +#define sk_X509_POLICY_DATA_sort(st) SKM_sk_sort(X509_POLICY_DATA, (st)) +#define sk_X509_POLICY_DATA_is_sorted(st) SKM_sk_is_sorted(X509_POLICY_DATA, (st)) + +#define sk_X509_POLICY_NODE_new(cmp) SKM_sk_new(X509_POLICY_NODE, (cmp)) +#define sk_X509_POLICY_NODE_new_null() SKM_sk_new_null(X509_POLICY_NODE) +#define sk_X509_POLICY_NODE_free(st) SKM_sk_free(X509_POLICY_NODE, (st)) +#define sk_X509_POLICY_NODE_num(st) SKM_sk_num(X509_POLICY_NODE, (st)) +#define sk_X509_POLICY_NODE_value(st, i) SKM_sk_value(X509_POLICY_NODE, (st), (i)) +#define sk_X509_POLICY_NODE_set(st, i, val) SKM_sk_set(X509_POLICY_NODE, (st), (i), (val)) +#define sk_X509_POLICY_NODE_zero(st) SKM_sk_zero(X509_POLICY_NODE, (st)) +#define sk_X509_POLICY_NODE_push(st, val) SKM_sk_push(X509_POLICY_NODE, (st), (val)) +#define sk_X509_POLICY_NODE_unshift(st, val) SKM_sk_unshift(X509_POLICY_NODE, (st), (val)) +#define sk_X509_POLICY_NODE_find(st, val) SKM_sk_find(X509_POLICY_NODE, (st), (val)) +#define sk_X509_POLICY_NODE_find_ex(st, val) SKM_sk_find_ex(X509_POLICY_NODE, (st), (val)) +#define sk_X509_POLICY_NODE_delete(st, i) SKM_sk_delete(X509_POLICY_NODE, (st), (i)) +#define sk_X509_POLICY_NODE_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_POLICY_NODE, (st), (ptr)) +#define sk_X509_POLICY_NODE_insert(st, val, i) SKM_sk_insert(X509_POLICY_NODE, (st), (val), (i)) +#define sk_X509_POLICY_NODE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_POLICY_NODE, (st), (cmp)) +#define sk_X509_POLICY_NODE_dup(st) SKM_sk_dup(X509_POLICY_NODE, st) +#define sk_X509_POLICY_NODE_pop_free(st, free_func) SKM_sk_pop_free(X509_POLICY_NODE, (st), (free_func)) +#define sk_X509_POLICY_NODE_shift(st) SKM_sk_shift(X509_POLICY_NODE, (st)) +#define sk_X509_POLICY_NODE_pop(st) SKM_sk_pop(X509_POLICY_NODE, (st)) +#define sk_X509_POLICY_NODE_sort(st) SKM_sk_sort(X509_POLICY_NODE, (st)) +#define sk_X509_POLICY_NODE_is_sorted(st) SKM_sk_is_sorted(X509_POLICY_NODE, (st)) + +#define sk_X509_PURPOSE_new(cmp) SKM_sk_new(X509_PURPOSE, (cmp)) +#define sk_X509_PURPOSE_new_null() SKM_sk_new_null(X509_PURPOSE) +#define sk_X509_PURPOSE_free(st) SKM_sk_free(X509_PURPOSE, (st)) +#define sk_X509_PURPOSE_num(st) SKM_sk_num(X509_PURPOSE, (st)) +#define sk_X509_PURPOSE_value(st, i) SKM_sk_value(X509_PURPOSE, (st), (i)) +#define sk_X509_PURPOSE_set(st, i, val) SKM_sk_set(X509_PURPOSE, (st), (i), (val)) +#define sk_X509_PURPOSE_zero(st) SKM_sk_zero(X509_PURPOSE, (st)) +#define sk_X509_PURPOSE_push(st, val) SKM_sk_push(X509_PURPOSE, (st), (val)) +#define sk_X509_PURPOSE_unshift(st, val) SKM_sk_unshift(X509_PURPOSE, (st), (val)) +#define sk_X509_PURPOSE_find(st, val) SKM_sk_find(X509_PURPOSE, (st), (val)) +#define sk_X509_PURPOSE_find_ex(st, val) SKM_sk_find_ex(X509_PURPOSE, (st), (val)) +#define sk_X509_PURPOSE_delete(st, i) SKM_sk_delete(X509_PURPOSE, (st), (i)) +#define sk_X509_PURPOSE_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_PURPOSE, (st), (ptr)) +#define sk_X509_PURPOSE_insert(st, val, i) SKM_sk_insert(X509_PURPOSE, (st), (val), (i)) +#define sk_X509_PURPOSE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_PURPOSE, (st), (cmp)) +#define sk_X509_PURPOSE_dup(st) SKM_sk_dup(X509_PURPOSE, st) +#define sk_X509_PURPOSE_pop_free(st, free_func) SKM_sk_pop_free(X509_PURPOSE, (st), (free_func)) +#define sk_X509_PURPOSE_shift(st) SKM_sk_shift(X509_PURPOSE, (st)) +#define sk_X509_PURPOSE_pop(st) SKM_sk_pop(X509_PURPOSE, (st)) +#define sk_X509_PURPOSE_sort(st) SKM_sk_sort(X509_PURPOSE, (st)) +#define sk_X509_PURPOSE_is_sorted(st) SKM_sk_is_sorted(X509_PURPOSE, (st)) + +#define sk_X509_REVOKED_new(cmp) SKM_sk_new(X509_REVOKED, (cmp)) +#define sk_X509_REVOKED_new_null() SKM_sk_new_null(X509_REVOKED) +#define sk_X509_REVOKED_free(st) SKM_sk_free(X509_REVOKED, (st)) +#define sk_X509_REVOKED_num(st) SKM_sk_num(X509_REVOKED, (st)) +#define sk_X509_REVOKED_value(st, i) SKM_sk_value(X509_REVOKED, (st), (i)) +#define sk_X509_REVOKED_set(st, i, val) SKM_sk_set(X509_REVOKED, (st), (i), (val)) +#define sk_X509_REVOKED_zero(st) SKM_sk_zero(X509_REVOKED, (st)) +#define sk_X509_REVOKED_push(st, val) SKM_sk_push(X509_REVOKED, (st), (val)) +#define sk_X509_REVOKED_unshift(st, val) SKM_sk_unshift(X509_REVOKED, (st), (val)) +#define sk_X509_REVOKED_find(st, val) SKM_sk_find(X509_REVOKED, (st), (val)) +#define sk_X509_REVOKED_find_ex(st, val) SKM_sk_find_ex(X509_REVOKED, (st), (val)) +#define sk_X509_REVOKED_delete(st, i) SKM_sk_delete(X509_REVOKED, (st), (i)) +#define sk_X509_REVOKED_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_REVOKED, (st), (ptr)) +#define sk_X509_REVOKED_insert(st, val, i) SKM_sk_insert(X509_REVOKED, (st), (val), (i)) +#define sk_X509_REVOKED_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_REVOKED, (st), (cmp)) +#define sk_X509_REVOKED_dup(st) SKM_sk_dup(X509_REVOKED, st) +#define sk_X509_REVOKED_pop_free(st, free_func) SKM_sk_pop_free(X509_REVOKED, (st), (free_func)) +#define sk_X509_REVOKED_shift(st) SKM_sk_shift(X509_REVOKED, (st)) +#define sk_X509_REVOKED_pop(st) SKM_sk_pop(X509_REVOKED, (st)) +#define sk_X509_REVOKED_sort(st) SKM_sk_sort(X509_REVOKED, (st)) +#define sk_X509_REVOKED_is_sorted(st) SKM_sk_is_sorted(X509_REVOKED, (st)) + +#define sk_X509_TRUST_new(cmp) SKM_sk_new(X509_TRUST, (cmp)) +#define sk_X509_TRUST_new_null() SKM_sk_new_null(X509_TRUST) +#define sk_X509_TRUST_free(st) SKM_sk_free(X509_TRUST, (st)) +#define sk_X509_TRUST_num(st) SKM_sk_num(X509_TRUST, (st)) +#define sk_X509_TRUST_value(st, i) SKM_sk_value(X509_TRUST, (st), (i)) +#define sk_X509_TRUST_set(st, i, val) SKM_sk_set(X509_TRUST, (st), (i), (val)) +#define sk_X509_TRUST_zero(st) SKM_sk_zero(X509_TRUST, (st)) +#define sk_X509_TRUST_push(st, val) SKM_sk_push(X509_TRUST, (st), (val)) +#define sk_X509_TRUST_unshift(st, val) SKM_sk_unshift(X509_TRUST, (st), (val)) +#define sk_X509_TRUST_find(st, val) SKM_sk_find(X509_TRUST, (st), (val)) +#define sk_X509_TRUST_find_ex(st, val) SKM_sk_find_ex(X509_TRUST, (st), (val)) +#define sk_X509_TRUST_delete(st, i) SKM_sk_delete(X509_TRUST, (st), (i)) +#define sk_X509_TRUST_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_TRUST, (st), (ptr)) +#define sk_X509_TRUST_insert(st, val, i) SKM_sk_insert(X509_TRUST, (st), (val), (i)) +#define sk_X509_TRUST_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_TRUST, (st), (cmp)) +#define sk_X509_TRUST_dup(st) SKM_sk_dup(X509_TRUST, st) +#define sk_X509_TRUST_pop_free(st, free_func) SKM_sk_pop_free(X509_TRUST, (st), (free_func)) +#define sk_X509_TRUST_shift(st) SKM_sk_shift(X509_TRUST, (st)) +#define sk_X509_TRUST_pop(st) SKM_sk_pop(X509_TRUST, (st)) +#define sk_X509_TRUST_sort(st) SKM_sk_sort(X509_TRUST, (st)) +#define sk_X509_TRUST_is_sorted(st) SKM_sk_is_sorted(X509_TRUST, (st)) + +#define sk_X509_VERIFY_PARAM_new(cmp) SKM_sk_new(X509_VERIFY_PARAM, (cmp)) +#define sk_X509_VERIFY_PARAM_new_null() SKM_sk_new_null(X509_VERIFY_PARAM) +#define sk_X509_VERIFY_PARAM_free(st) SKM_sk_free(X509_VERIFY_PARAM, (st)) +#define sk_X509_VERIFY_PARAM_num(st) SKM_sk_num(X509_VERIFY_PARAM, (st)) +#define sk_X509_VERIFY_PARAM_value(st, i) SKM_sk_value(X509_VERIFY_PARAM, (st), (i)) +#define sk_X509_VERIFY_PARAM_set(st, i, val) SKM_sk_set(X509_VERIFY_PARAM, (st), (i), (val)) +#define sk_X509_VERIFY_PARAM_zero(st) SKM_sk_zero(X509_VERIFY_PARAM, (st)) +#define sk_X509_VERIFY_PARAM_push(st, val) SKM_sk_push(X509_VERIFY_PARAM, (st), (val)) +#define sk_X509_VERIFY_PARAM_unshift(st, val) SKM_sk_unshift(X509_VERIFY_PARAM, (st), (val)) +#define sk_X509_VERIFY_PARAM_find(st, val) SKM_sk_find(X509_VERIFY_PARAM, (st), (val)) +#define sk_X509_VERIFY_PARAM_find_ex(st, val) SKM_sk_find_ex(X509_VERIFY_PARAM, (st), (val)) +#define sk_X509_VERIFY_PARAM_delete(st, i) SKM_sk_delete(X509_VERIFY_PARAM, (st), (i)) +#define sk_X509_VERIFY_PARAM_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_VERIFY_PARAM, (st), (ptr)) +#define sk_X509_VERIFY_PARAM_insert(st, val, i) SKM_sk_insert(X509_VERIFY_PARAM, (st), (val), (i)) +#define sk_X509_VERIFY_PARAM_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_VERIFY_PARAM, (st), (cmp)) +#define sk_X509_VERIFY_PARAM_dup(st) SKM_sk_dup(X509_VERIFY_PARAM, st) +#define sk_X509_VERIFY_PARAM_pop_free(st, free_func) SKM_sk_pop_free(X509_VERIFY_PARAM, (st), (free_func)) +#define sk_X509_VERIFY_PARAM_shift(st) SKM_sk_shift(X509_VERIFY_PARAM, (st)) +#define sk_X509_VERIFY_PARAM_pop(st) SKM_sk_pop(X509_VERIFY_PARAM, (st)) +#define sk_X509_VERIFY_PARAM_sort(st) SKM_sk_sort(X509_VERIFY_PARAM, (st)) +#define sk_X509_VERIFY_PARAM_is_sorted(st) SKM_sk_is_sorted(X509_VERIFY_PARAM, (st)) + +#define sk_nid_triple_new(cmp) SKM_sk_new(nid_triple, (cmp)) +#define sk_nid_triple_new_null() SKM_sk_new_null(nid_triple) +#define sk_nid_triple_free(st) SKM_sk_free(nid_triple, (st)) +#define sk_nid_triple_num(st) SKM_sk_num(nid_triple, (st)) +#define sk_nid_triple_value(st, i) SKM_sk_value(nid_triple, (st), (i)) +#define sk_nid_triple_set(st, i, val) SKM_sk_set(nid_triple, (st), (i), (val)) +#define sk_nid_triple_zero(st) SKM_sk_zero(nid_triple, (st)) +#define sk_nid_triple_push(st, val) SKM_sk_push(nid_triple, (st), (val)) +#define sk_nid_triple_unshift(st, val) SKM_sk_unshift(nid_triple, (st), (val)) +#define sk_nid_triple_find(st, val) SKM_sk_find(nid_triple, (st), (val)) +#define sk_nid_triple_find_ex(st, val) SKM_sk_find_ex(nid_triple, (st), (val)) +#define sk_nid_triple_delete(st, i) SKM_sk_delete(nid_triple, (st), (i)) +#define sk_nid_triple_delete_ptr(st, ptr) SKM_sk_delete_ptr(nid_triple, (st), (ptr)) +#define sk_nid_triple_insert(st, val, i) SKM_sk_insert(nid_triple, (st), (val), (i)) +#define sk_nid_triple_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(nid_triple, (st), (cmp)) +#define sk_nid_triple_dup(st) SKM_sk_dup(nid_triple, st) +#define sk_nid_triple_pop_free(st, free_func) SKM_sk_pop_free(nid_triple, (st), (free_func)) +#define sk_nid_triple_shift(st) SKM_sk_shift(nid_triple, (st)) +#define sk_nid_triple_pop(st) SKM_sk_pop(nid_triple, (st)) +#define sk_nid_triple_sort(st) SKM_sk_sort(nid_triple, (st)) +#define sk_nid_triple_is_sorted(st) SKM_sk_is_sorted(nid_triple, (st)) + +#define sk_void_new(cmp) SKM_sk_new(void, (cmp)) +#define sk_void_new_null() SKM_sk_new_null(void) +#define sk_void_free(st) SKM_sk_free(void, (st)) +#define sk_void_num(st) SKM_sk_num(void, (st)) +#define sk_void_value(st, i) SKM_sk_value(void, (st), (i)) +#define sk_void_set(st, i, val) SKM_sk_set(void, (st), (i), (val)) +#define sk_void_zero(st) SKM_sk_zero(void, (st)) +#define sk_void_push(st, val) SKM_sk_push(void, (st), (val)) +#define sk_void_unshift(st, val) SKM_sk_unshift(void, (st), (val)) +#define sk_void_find(st, val) SKM_sk_find(void, (st), (val)) +#define sk_void_find_ex(st, val) SKM_sk_find_ex(void, (st), (val)) +#define sk_void_delete(st, i) SKM_sk_delete(void, (st), (i)) +#define sk_void_delete_ptr(st, ptr) SKM_sk_delete_ptr(void, (st), (ptr)) +#define sk_void_insert(st, val, i) SKM_sk_insert(void, (st), (val), (i)) +#define sk_void_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(void, (st), (cmp)) +#define sk_void_dup(st) SKM_sk_dup(void, st) +#define sk_void_pop_free(st, free_func) SKM_sk_pop_free(void, (st), (free_func)) +#define sk_void_shift(st) SKM_sk_shift(void, (st)) +#define sk_void_pop(st) SKM_sk_pop(void, (st)) +#define sk_void_sort(st) SKM_sk_sort(void, (st)) +#define sk_void_is_sorted(st) SKM_sk_is_sorted(void, (st)) + +#define sk_OPENSSL_STRING_new(cmp) ((STACK_OF(OPENSSL_STRING) *)sk_new(CHECKED_SK_CMP_FUNC(char, cmp))) +#define sk_OPENSSL_STRING_new_null() ((STACK_OF(OPENSSL_STRING) *)sk_new_null()) +#define sk_OPENSSL_STRING_push(st, val) sk_push(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_PTR_OF(char, val)) +#define sk_OPENSSL_STRING_find(st, val) sk_find(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_PTR_OF(char, val)) +#define sk_OPENSSL_STRING_value(st, i) ((OPENSSL_STRING)sk_value(CHECKED_STACK_OF(OPENSSL_STRING, st), i)) +#define sk_OPENSSL_STRING_num(st) SKM_sk_num(OPENSSL_STRING, st) +#define sk_OPENSSL_STRING_pop_free(st, free_func) sk_pop_free(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_SK_FREE_FUNC2(OPENSSL_STRING, free_func)) +#define sk_OPENSSL_STRING_insert(st, val, i) sk_insert(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_PTR_OF(char, val), i) +#define sk_OPENSSL_STRING_free(st) SKM_sk_free(OPENSSL_STRING, st) +#define sk_OPENSSL_STRING_set(st, i, val) sk_set(CHECKED_STACK_OF(OPENSSL_STRING, st), i, CHECKED_PTR_OF(char, val)) +#define sk_OPENSSL_STRING_zero(st) SKM_sk_zero(OPENSSL_STRING, (st)) +#define sk_OPENSSL_STRING_unshift(st, val) sk_unshift(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_PTR_OF(char, val)) +#define sk_OPENSSL_STRING_find_ex(st, val) sk_find_ex((_STACK *)CHECKED_CONST_PTR_OF(STACK_OF(OPENSSL_STRING), st), CHECKED_CONST_PTR_OF(char, val)) +#define sk_OPENSSL_STRING_delete(st, i) SKM_sk_delete(OPENSSL_STRING, (st), (i)) +#define sk_OPENSSL_STRING_delete_ptr(st, ptr) (OPENSSL_STRING *)sk_delete_ptr(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_PTR_OF(char, ptr)) +#define sk_OPENSSL_STRING_set_cmp_func(st, cmp) \ + ((int (*)(const char * const *,const char * const *)) \ + sk_set_cmp_func(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_SK_CMP_FUNC(char, cmp))) +#define sk_OPENSSL_STRING_dup(st) SKM_sk_dup(OPENSSL_STRING, st) +#define sk_OPENSSL_STRING_shift(st) SKM_sk_shift(OPENSSL_STRING, (st)) +#define sk_OPENSSL_STRING_pop(st) (char *)sk_pop(CHECKED_STACK_OF(OPENSSL_STRING, st)) +#define sk_OPENSSL_STRING_sort(st) SKM_sk_sort(OPENSSL_STRING, (st)) +#define sk_OPENSSL_STRING_is_sorted(st) SKM_sk_is_sorted(OPENSSL_STRING, (st)) + + +#define sk_OPENSSL_BLOCK_new(cmp) ((STACK_OF(OPENSSL_BLOCK) *)sk_new(CHECKED_SK_CMP_FUNC(void, cmp))) +#define sk_OPENSSL_BLOCK_new_null() ((STACK_OF(OPENSSL_BLOCK) *)sk_new_null()) +#define sk_OPENSSL_BLOCK_push(st, val) sk_push(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_PTR_OF(void, val)) +#define sk_OPENSSL_BLOCK_find(st, val) sk_find(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_PTR_OF(void, val)) +#define sk_OPENSSL_BLOCK_value(st, i) ((OPENSSL_BLOCK)sk_value(CHECKED_STACK_OF(OPENSSL_BLOCK, st), i)) +#define sk_OPENSSL_BLOCK_num(st) SKM_sk_num(OPENSSL_BLOCK, st) +#define sk_OPENSSL_BLOCK_pop_free(st, free_func) sk_pop_free(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_SK_FREE_FUNC2(OPENSSL_BLOCK, free_func)) +#define sk_OPENSSL_BLOCK_insert(st, val, i) sk_insert(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_PTR_OF(void, val), i) +#define sk_OPENSSL_BLOCK_free(st) SKM_sk_free(OPENSSL_BLOCK, st) +#define sk_OPENSSL_BLOCK_set(st, i, val) sk_set(CHECKED_STACK_OF(OPENSSL_BLOCK, st), i, CHECKED_PTR_OF(void, val)) +#define sk_OPENSSL_BLOCK_zero(st) SKM_sk_zero(OPENSSL_BLOCK, (st)) +#define sk_OPENSSL_BLOCK_unshift(st, val) sk_unshift(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_PTR_OF(void, val)) +#define sk_OPENSSL_BLOCK_find_ex(st, val) sk_find_ex((_STACK *)CHECKED_CONST_PTR_OF(STACK_OF(OPENSSL_BLOCK), st), CHECKED_CONST_PTR_OF(void, val)) +#define sk_OPENSSL_BLOCK_delete(st, i) SKM_sk_delete(OPENSSL_BLOCK, (st), (i)) +#define sk_OPENSSL_BLOCK_delete_ptr(st, ptr) (OPENSSL_BLOCK *)sk_delete_ptr(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_PTR_OF(void, ptr)) +#define sk_OPENSSL_BLOCK_set_cmp_func(st, cmp) \ + ((int (*)(const void * const *,const void * const *)) \ + sk_set_cmp_func(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_SK_CMP_FUNC(void, cmp))) +#define sk_OPENSSL_BLOCK_dup(st) SKM_sk_dup(OPENSSL_BLOCK, st) +#define sk_OPENSSL_BLOCK_shift(st) SKM_sk_shift(OPENSSL_BLOCK, (st)) +#define sk_OPENSSL_BLOCK_pop(st) (void *)sk_pop(CHECKED_STACK_OF(OPENSSL_BLOCK, st)) +#define sk_OPENSSL_BLOCK_sort(st) SKM_sk_sort(OPENSSL_BLOCK, (st)) +#define sk_OPENSSL_BLOCK_is_sorted(st) SKM_sk_is_sorted(OPENSSL_BLOCK, (st)) + + +#define sk_OPENSSL_PSTRING_new(cmp) ((STACK_OF(OPENSSL_PSTRING) *)sk_new(CHECKED_SK_CMP_FUNC(OPENSSL_STRING, cmp))) +#define sk_OPENSSL_PSTRING_new_null() ((STACK_OF(OPENSSL_PSTRING) *)sk_new_null()) +#define sk_OPENSSL_PSTRING_push(st, val) sk_push(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_PTR_OF(OPENSSL_STRING, val)) +#define sk_OPENSSL_PSTRING_find(st, val) sk_find(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_PTR_OF(OPENSSL_STRING, val)) +#define sk_OPENSSL_PSTRING_value(st, i) ((OPENSSL_PSTRING)sk_value(CHECKED_STACK_OF(OPENSSL_PSTRING, st), i)) +#define sk_OPENSSL_PSTRING_num(st) SKM_sk_num(OPENSSL_PSTRING, st) +#define sk_OPENSSL_PSTRING_pop_free(st, free_func) sk_pop_free(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_SK_FREE_FUNC2(OPENSSL_PSTRING, free_func)) +#define sk_OPENSSL_PSTRING_insert(st, val, i) sk_insert(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_PTR_OF(OPENSSL_STRING, val), i) +#define sk_OPENSSL_PSTRING_free(st) SKM_sk_free(OPENSSL_PSTRING, st) +#define sk_OPENSSL_PSTRING_set(st, i, val) sk_set(CHECKED_STACK_OF(OPENSSL_PSTRING, st), i, CHECKED_PTR_OF(OPENSSL_STRING, val)) +#define sk_OPENSSL_PSTRING_zero(st) SKM_sk_zero(OPENSSL_PSTRING, (st)) +#define sk_OPENSSL_PSTRING_unshift(st, val) sk_unshift(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_PTR_OF(OPENSSL_STRING, val)) +#define sk_OPENSSL_PSTRING_find_ex(st, val) sk_find_ex((_STACK *)CHECKED_CONST_PTR_OF(STACK_OF(OPENSSL_PSTRING), st), CHECKED_CONST_PTR_OF(OPENSSL_STRING, val)) +#define sk_OPENSSL_PSTRING_delete(st, i) SKM_sk_delete(OPENSSL_PSTRING, (st), (i)) +#define sk_OPENSSL_PSTRING_delete_ptr(st, ptr) (OPENSSL_PSTRING *)sk_delete_ptr(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_PTR_OF(OPENSSL_STRING, ptr)) +#define sk_OPENSSL_PSTRING_set_cmp_func(st, cmp) \ + ((int (*)(const OPENSSL_STRING * const *,const OPENSSL_STRING * const *)) \ + sk_set_cmp_func(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_SK_CMP_FUNC(OPENSSL_STRING, cmp))) +#define sk_OPENSSL_PSTRING_dup(st) SKM_sk_dup(OPENSSL_PSTRING, st) +#define sk_OPENSSL_PSTRING_shift(st) SKM_sk_shift(OPENSSL_PSTRING, (st)) +#define sk_OPENSSL_PSTRING_pop(st) (OPENSSL_STRING *)sk_pop(CHECKED_STACK_OF(OPENSSL_PSTRING, st)) +#define sk_OPENSSL_PSTRING_sort(st) SKM_sk_sort(OPENSSL_PSTRING, (st)) +#define sk_OPENSSL_PSTRING_is_sorted(st) SKM_sk_is_sorted(OPENSSL_PSTRING, (st)) + + +#define d2i_ASN1_SET_OF_ACCESS_DESCRIPTION(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(ACCESS_DESCRIPTION, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +#define i2d_ASN1_SET_OF_ACCESS_DESCRIPTION(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(ACCESS_DESCRIPTION, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +#define ASN1_seq_pack_ACCESS_DESCRIPTION(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(ACCESS_DESCRIPTION, (st), (i2d_func), (buf), (len)) +#define ASN1_seq_unpack_ACCESS_DESCRIPTION(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(ACCESS_DESCRIPTION, (buf), (len), (d2i_func), (free_func)) + +#define d2i_ASN1_SET_OF_ASN1_INTEGER(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(ASN1_INTEGER, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +#define i2d_ASN1_SET_OF_ASN1_INTEGER(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(ASN1_INTEGER, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +#define ASN1_seq_pack_ASN1_INTEGER(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(ASN1_INTEGER, (st), (i2d_func), (buf), (len)) +#define ASN1_seq_unpack_ASN1_INTEGER(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(ASN1_INTEGER, (buf), (len), (d2i_func), (free_func)) + +#define d2i_ASN1_SET_OF_ASN1_OBJECT(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(ASN1_OBJECT, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +#define i2d_ASN1_SET_OF_ASN1_OBJECT(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(ASN1_OBJECT, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +#define ASN1_seq_pack_ASN1_OBJECT(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(ASN1_OBJECT, (st), (i2d_func), (buf), (len)) +#define ASN1_seq_unpack_ASN1_OBJECT(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(ASN1_OBJECT, (buf), (len), (d2i_func), (free_func)) + +#define d2i_ASN1_SET_OF_ASN1_TYPE(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(ASN1_TYPE, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +#define i2d_ASN1_SET_OF_ASN1_TYPE(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(ASN1_TYPE, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +#define ASN1_seq_pack_ASN1_TYPE(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(ASN1_TYPE, (st), (i2d_func), (buf), (len)) +#define ASN1_seq_unpack_ASN1_TYPE(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(ASN1_TYPE, (buf), (len), (d2i_func), (free_func)) + +#define d2i_ASN1_SET_OF_ASN1_UTF8STRING(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(ASN1_UTF8STRING, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +#define i2d_ASN1_SET_OF_ASN1_UTF8STRING(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(ASN1_UTF8STRING, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +#define ASN1_seq_pack_ASN1_UTF8STRING(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(ASN1_UTF8STRING, (st), (i2d_func), (buf), (len)) +#define ASN1_seq_unpack_ASN1_UTF8STRING(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(ASN1_UTF8STRING, (buf), (len), (d2i_func), (free_func)) + +#define d2i_ASN1_SET_OF_DIST_POINT(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(DIST_POINT, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +#define i2d_ASN1_SET_OF_DIST_POINT(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(DIST_POINT, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +#define ASN1_seq_pack_DIST_POINT(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(DIST_POINT, (st), (i2d_func), (buf), (len)) +#define ASN1_seq_unpack_DIST_POINT(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(DIST_POINT, (buf), (len), (d2i_func), (free_func)) + +#define d2i_ASN1_SET_OF_ESS_CERT_ID(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(ESS_CERT_ID, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +#define i2d_ASN1_SET_OF_ESS_CERT_ID(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(ESS_CERT_ID, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +#define ASN1_seq_pack_ESS_CERT_ID(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(ESS_CERT_ID, (st), (i2d_func), (buf), (len)) +#define ASN1_seq_unpack_ESS_CERT_ID(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(ESS_CERT_ID, (buf), (len), (d2i_func), (free_func)) + +#define d2i_ASN1_SET_OF_EVP_MD(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(EVP_MD, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +#define i2d_ASN1_SET_OF_EVP_MD(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(EVP_MD, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +#define ASN1_seq_pack_EVP_MD(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(EVP_MD, (st), (i2d_func), (buf), (len)) +#define ASN1_seq_unpack_EVP_MD(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(EVP_MD, (buf), (len), (d2i_func), (free_func)) + +#define d2i_ASN1_SET_OF_GENERAL_NAME(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(GENERAL_NAME, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +#define i2d_ASN1_SET_OF_GENERAL_NAME(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(GENERAL_NAME, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +#define ASN1_seq_pack_GENERAL_NAME(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(GENERAL_NAME, (st), (i2d_func), (buf), (len)) +#define ASN1_seq_unpack_GENERAL_NAME(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(GENERAL_NAME, (buf), (len), (d2i_func), (free_func)) + +#define d2i_ASN1_SET_OF_OCSP_ONEREQ(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(OCSP_ONEREQ, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +#define i2d_ASN1_SET_OF_OCSP_ONEREQ(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(OCSP_ONEREQ, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +#define ASN1_seq_pack_OCSP_ONEREQ(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(OCSP_ONEREQ, (st), (i2d_func), (buf), (len)) +#define ASN1_seq_unpack_OCSP_ONEREQ(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(OCSP_ONEREQ, (buf), (len), (d2i_func), (free_func)) + +#define d2i_ASN1_SET_OF_OCSP_SINGLERESP(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(OCSP_SINGLERESP, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +#define i2d_ASN1_SET_OF_OCSP_SINGLERESP(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(OCSP_SINGLERESP, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +#define ASN1_seq_pack_OCSP_SINGLERESP(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(OCSP_SINGLERESP, (st), (i2d_func), (buf), (len)) +#define ASN1_seq_unpack_OCSP_SINGLERESP(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(OCSP_SINGLERESP, (buf), (len), (d2i_func), (free_func)) + +#define d2i_ASN1_SET_OF_PKCS12_SAFEBAG(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(PKCS12_SAFEBAG, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +#define i2d_ASN1_SET_OF_PKCS12_SAFEBAG(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(PKCS12_SAFEBAG, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +#define ASN1_seq_pack_PKCS12_SAFEBAG(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(PKCS12_SAFEBAG, (st), (i2d_func), (buf), (len)) +#define ASN1_seq_unpack_PKCS12_SAFEBAG(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(PKCS12_SAFEBAG, (buf), (len), (d2i_func), (free_func)) + +#define d2i_ASN1_SET_OF_PKCS7(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(PKCS7, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +#define i2d_ASN1_SET_OF_PKCS7(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(PKCS7, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +#define ASN1_seq_pack_PKCS7(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(PKCS7, (st), (i2d_func), (buf), (len)) +#define ASN1_seq_unpack_PKCS7(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(PKCS7, (buf), (len), (d2i_func), (free_func)) + +#define d2i_ASN1_SET_OF_PKCS7_RECIP_INFO(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(PKCS7_RECIP_INFO, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +#define i2d_ASN1_SET_OF_PKCS7_RECIP_INFO(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(PKCS7_RECIP_INFO, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +#define ASN1_seq_pack_PKCS7_RECIP_INFO(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(PKCS7_RECIP_INFO, (st), (i2d_func), (buf), (len)) +#define ASN1_seq_unpack_PKCS7_RECIP_INFO(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(PKCS7_RECIP_INFO, (buf), (len), (d2i_func), (free_func)) + +#define d2i_ASN1_SET_OF_PKCS7_SIGNER_INFO(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(PKCS7_SIGNER_INFO, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +#define i2d_ASN1_SET_OF_PKCS7_SIGNER_INFO(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(PKCS7_SIGNER_INFO, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +#define ASN1_seq_pack_PKCS7_SIGNER_INFO(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(PKCS7_SIGNER_INFO, (st), (i2d_func), (buf), (len)) +#define ASN1_seq_unpack_PKCS7_SIGNER_INFO(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(PKCS7_SIGNER_INFO, (buf), (len), (d2i_func), (free_func)) + +#define d2i_ASN1_SET_OF_POLICYINFO(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(POLICYINFO, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +#define i2d_ASN1_SET_OF_POLICYINFO(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(POLICYINFO, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +#define ASN1_seq_pack_POLICYINFO(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(POLICYINFO, (st), (i2d_func), (buf), (len)) +#define ASN1_seq_unpack_POLICYINFO(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(POLICYINFO, (buf), (len), (d2i_func), (free_func)) + +#define d2i_ASN1_SET_OF_POLICYQUALINFO(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(POLICYQUALINFO, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +#define i2d_ASN1_SET_OF_POLICYQUALINFO(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(POLICYQUALINFO, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +#define ASN1_seq_pack_POLICYQUALINFO(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(POLICYQUALINFO, (st), (i2d_func), (buf), (len)) +#define ASN1_seq_unpack_POLICYQUALINFO(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(POLICYQUALINFO, (buf), (len), (d2i_func), (free_func)) + +#define d2i_ASN1_SET_OF_SXNETID(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(SXNETID, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +#define i2d_ASN1_SET_OF_SXNETID(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(SXNETID, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +#define ASN1_seq_pack_SXNETID(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(SXNETID, (st), (i2d_func), (buf), (len)) +#define ASN1_seq_unpack_SXNETID(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(SXNETID, (buf), (len), (d2i_func), (free_func)) + +#define d2i_ASN1_SET_OF_X509(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(X509, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +#define i2d_ASN1_SET_OF_X509(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(X509, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +#define ASN1_seq_pack_X509(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(X509, (st), (i2d_func), (buf), (len)) +#define ASN1_seq_unpack_X509(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(X509, (buf), (len), (d2i_func), (free_func)) + +#define d2i_ASN1_SET_OF_X509_ALGOR(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(X509_ALGOR, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +#define i2d_ASN1_SET_OF_X509_ALGOR(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(X509_ALGOR, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +#define ASN1_seq_pack_X509_ALGOR(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(X509_ALGOR, (st), (i2d_func), (buf), (len)) +#define ASN1_seq_unpack_X509_ALGOR(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(X509_ALGOR, (buf), (len), (d2i_func), (free_func)) + +#define d2i_ASN1_SET_OF_X509_ATTRIBUTE(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(X509_ATTRIBUTE, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +#define i2d_ASN1_SET_OF_X509_ATTRIBUTE(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(X509_ATTRIBUTE, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +#define ASN1_seq_pack_X509_ATTRIBUTE(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(X509_ATTRIBUTE, (st), (i2d_func), (buf), (len)) +#define ASN1_seq_unpack_X509_ATTRIBUTE(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(X509_ATTRIBUTE, (buf), (len), (d2i_func), (free_func)) + +#define d2i_ASN1_SET_OF_X509_CRL(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(X509_CRL, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +#define i2d_ASN1_SET_OF_X509_CRL(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(X509_CRL, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +#define ASN1_seq_pack_X509_CRL(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(X509_CRL, (st), (i2d_func), (buf), (len)) +#define ASN1_seq_unpack_X509_CRL(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(X509_CRL, (buf), (len), (d2i_func), (free_func)) + +#define d2i_ASN1_SET_OF_X509_EXTENSION(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(X509_EXTENSION, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +#define i2d_ASN1_SET_OF_X509_EXTENSION(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(X509_EXTENSION, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +#define ASN1_seq_pack_X509_EXTENSION(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(X509_EXTENSION, (st), (i2d_func), (buf), (len)) +#define ASN1_seq_unpack_X509_EXTENSION(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(X509_EXTENSION, (buf), (len), (d2i_func), (free_func)) + +#define d2i_ASN1_SET_OF_X509_NAME_ENTRY(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(X509_NAME_ENTRY, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +#define i2d_ASN1_SET_OF_X509_NAME_ENTRY(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(X509_NAME_ENTRY, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +#define ASN1_seq_pack_X509_NAME_ENTRY(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(X509_NAME_ENTRY, (st), (i2d_func), (buf), (len)) +#define ASN1_seq_unpack_X509_NAME_ENTRY(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(X509_NAME_ENTRY, (buf), (len), (d2i_func), (free_func)) + +#define d2i_ASN1_SET_OF_X509_REVOKED(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(X509_REVOKED, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +#define i2d_ASN1_SET_OF_X509_REVOKED(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(X509_REVOKED, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +#define ASN1_seq_pack_X509_REVOKED(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(X509_REVOKED, (st), (i2d_func), (buf), (len)) +#define ASN1_seq_unpack_X509_REVOKED(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(X509_REVOKED, (buf), (len), (d2i_func), (free_func)) + +#define PKCS12_decrypt_d2i_PKCS12_SAFEBAG(algor, d2i_func, free_func, pass, passlen, oct, seq) \ + SKM_PKCS12_decrypt_d2i(PKCS12_SAFEBAG, (algor), (d2i_func), (free_func), (pass), (passlen), (oct), (seq)) + +#define PKCS12_decrypt_d2i_PKCS7(algor, d2i_func, free_func, pass, passlen, oct, seq) \ + SKM_PKCS12_decrypt_d2i(PKCS7, (algor), (d2i_func), (free_func), (pass), (passlen), (oct), (seq)) + +#define lh_ADDED_OBJ_new() LHM_lh_new(ADDED_OBJ,added_obj) +#define lh_ADDED_OBJ_insert(lh,inst) LHM_lh_insert(ADDED_OBJ,lh,inst) +#define lh_ADDED_OBJ_retrieve(lh,inst) LHM_lh_retrieve(ADDED_OBJ,lh,inst) +#define lh_ADDED_OBJ_delete(lh,inst) LHM_lh_delete(ADDED_OBJ,lh,inst) +#define lh_ADDED_OBJ_doall(lh,fn) LHM_lh_doall(ADDED_OBJ,lh,fn) +#define lh_ADDED_OBJ_doall_arg(lh,fn,arg_type,arg) \ + LHM_lh_doall_arg(ADDED_OBJ,lh,fn,arg_type,arg) +#define lh_ADDED_OBJ_error(lh) LHM_lh_error(ADDED_OBJ,lh) +#define lh_ADDED_OBJ_num_items(lh) LHM_lh_num_items(ADDED_OBJ,lh) +#define lh_ADDED_OBJ_down_load(lh) LHM_lh_down_load(ADDED_OBJ,lh) +#define lh_ADDED_OBJ_node_stats_bio(lh,out) \ + LHM_lh_node_stats_bio(ADDED_OBJ,lh,out) +#define lh_ADDED_OBJ_node_usage_stats_bio(lh,out) \ + LHM_lh_node_usage_stats_bio(ADDED_OBJ,lh,out) +#define lh_ADDED_OBJ_stats_bio(lh,out) \ + LHM_lh_stats_bio(ADDED_OBJ,lh,out) +#define lh_ADDED_OBJ_free(lh) LHM_lh_free(ADDED_OBJ,lh) + +#define lh_APP_INFO_new() LHM_lh_new(APP_INFO,app_info) +#define lh_APP_INFO_insert(lh,inst) LHM_lh_insert(APP_INFO,lh,inst) +#define lh_APP_INFO_retrieve(lh,inst) LHM_lh_retrieve(APP_INFO,lh,inst) +#define lh_APP_INFO_delete(lh,inst) LHM_lh_delete(APP_INFO,lh,inst) +#define lh_APP_INFO_doall(lh,fn) LHM_lh_doall(APP_INFO,lh,fn) +#define lh_APP_INFO_doall_arg(lh,fn,arg_type,arg) \ + LHM_lh_doall_arg(APP_INFO,lh,fn,arg_type,arg) +#define lh_APP_INFO_error(lh) LHM_lh_error(APP_INFO,lh) +#define lh_APP_INFO_num_items(lh) LHM_lh_num_items(APP_INFO,lh) +#define lh_APP_INFO_down_load(lh) LHM_lh_down_load(APP_INFO,lh) +#define lh_APP_INFO_node_stats_bio(lh,out) \ + LHM_lh_node_stats_bio(APP_INFO,lh,out) +#define lh_APP_INFO_node_usage_stats_bio(lh,out) \ + LHM_lh_node_usage_stats_bio(APP_INFO,lh,out) +#define lh_APP_INFO_stats_bio(lh,out) \ + LHM_lh_stats_bio(APP_INFO,lh,out) +#define lh_APP_INFO_free(lh) LHM_lh_free(APP_INFO,lh) + +#define lh_CONF_VALUE_new() LHM_lh_new(CONF_VALUE,conf_value) +#define lh_CONF_VALUE_insert(lh,inst) LHM_lh_insert(CONF_VALUE,lh,inst) +#define lh_CONF_VALUE_retrieve(lh,inst) LHM_lh_retrieve(CONF_VALUE,lh,inst) +#define lh_CONF_VALUE_delete(lh,inst) LHM_lh_delete(CONF_VALUE,lh,inst) +#define lh_CONF_VALUE_doall(lh,fn) LHM_lh_doall(CONF_VALUE,lh,fn) +#define lh_CONF_VALUE_doall_arg(lh,fn,arg_type,arg) \ + LHM_lh_doall_arg(CONF_VALUE,lh,fn,arg_type,arg) +#define lh_CONF_VALUE_error(lh) LHM_lh_error(CONF_VALUE,lh) +#define lh_CONF_VALUE_num_items(lh) LHM_lh_num_items(CONF_VALUE,lh) +#define lh_CONF_VALUE_down_load(lh) LHM_lh_down_load(CONF_VALUE,lh) +#define lh_CONF_VALUE_node_stats_bio(lh,out) \ + LHM_lh_node_stats_bio(CONF_VALUE,lh,out) +#define lh_CONF_VALUE_node_usage_stats_bio(lh,out) \ + LHM_lh_node_usage_stats_bio(CONF_VALUE,lh,out) +#define lh_CONF_VALUE_stats_bio(lh,out) \ + LHM_lh_stats_bio(CONF_VALUE,lh,out) +#define lh_CONF_VALUE_free(lh) LHM_lh_free(CONF_VALUE,lh) + +#define lh_ENGINE_PILE_new() LHM_lh_new(ENGINE_PILE,engine_pile) +#define lh_ENGINE_PILE_insert(lh,inst) LHM_lh_insert(ENGINE_PILE,lh,inst) +#define lh_ENGINE_PILE_retrieve(lh,inst) LHM_lh_retrieve(ENGINE_PILE,lh,inst) +#define lh_ENGINE_PILE_delete(lh,inst) LHM_lh_delete(ENGINE_PILE,lh,inst) +#define lh_ENGINE_PILE_doall(lh,fn) LHM_lh_doall(ENGINE_PILE,lh,fn) +#define lh_ENGINE_PILE_doall_arg(lh,fn,arg_type,arg) \ + LHM_lh_doall_arg(ENGINE_PILE,lh,fn,arg_type,arg) +#define lh_ENGINE_PILE_error(lh) LHM_lh_error(ENGINE_PILE,lh) +#define lh_ENGINE_PILE_num_items(lh) LHM_lh_num_items(ENGINE_PILE,lh) +#define lh_ENGINE_PILE_down_load(lh) LHM_lh_down_load(ENGINE_PILE,lh) +#define lh_ENGINE_PILE_node_stats_bio(lh,out) \ + LHM_lh_node_stats_bio(ENGINE_PILE,lh,out) +#define lh_ENGINE_PILE_node_usage_stats_bio(lh,out) \ + LHM_lh_node_usage_stats_bio(ENGINE_PILE,lh,out) +#define lh_ENGINE_PILE_stats_bio(lh,out) \ + LHM_lh_stats_bio(ENGINE_PILE,lh,out) +#define lh_ENGINE_PILE_free(lh) LHM_lh_free(ENGINE_PILE,lh) + +#define lh_ERR_STATE_new() LHM_lh_new(ERR_STATE,err_state) +#define lh_ERR_STATE_insert(lh,inst) LHM_lh_insert(ERR_STATE,lh,inst) +#define lh_ERR_STATE_retrieve(lh,inst) LHM_lh_retrieve(ERR_STATE,lh,inst) +#define lh_ERR_STATE_delete(lh,inst) LHM_lh_delete(ERR_STATE,lh,inst) +#define lh_ERR_STATE_doall(lh,fn) LHM_lh_doall(ERR_STATE,lh,fn) +#define lh_ERR_STATE_doall_arg(lh,fn,arg_type,arg) \ + LHM_lh_doall_arg(ERR_STATE,lh,fn,arg_type,arg) +#define lh_ERR_STATE_error(lh) LHM_lh_error(ERR_STATE,lh) +#define lh_ERR_STATE_num_items(lh) LHM_lh_num_items(ERR_STATE,lh) +#define lh_ERR_STATE_down_load(lh) LHM_lh_down_load(ERR_STATE,lh) +#define lh_ERR_STATE_node_stats_bio(lh,out) \ + LHM_lh_node_stats_bio(ERR_STATE,lh,out) +#define lh_ERR_STATE_node_usage_stats_bio(lh,out) \ + LHM_lh_node_usage_stats_bio(ERR_STATE,lh,out) +#define lh_ERR_STATE_stats_bio(lh,out) \ + LHM_lh_stats_bio(ERR_STATE,lh,out) +#define lh_ERR_STATE_free(lh) LHM_lh_free(ERR_STATE,lh) + +#define lh_ERR_STRING_DATA_new() LHM_lh_new(ERR_STRING_DATA,err_string_data) +#define lh_ERR_STRING_DATA_insert(lh,inst) LHM_lh_insert(ERR_STRING_DATA,lh,inst) +#define lh_ERR_STRING_DATA_retrieve(lh,inst) LHM_lh_retrieve(ERR_STRING_DATA,lh,inst) +#define lh_ERR_STRING_DATA_delete(lh,inst) LHM_lh_delete(ERR_STRING_DATA,lh,inst) +#define lh_ERR_STRING_DATA_doall(lh,fn) LHM_lh_doall(ERR_STRING_DATA,lh,fn) +#define lh_ERR_STRING_DATA_doall_arg(lh,fn,arg_type,arg) \ + LHM_lh_doall_arg(ERR_STRING_DATA,lh,fn,arg_type,arg) +#define lh_ERR_STRING_DATA_error(lh) LHM_lh_error(ERR_STRING_DATA,lh) +#define lh_ERR_STRING_DATA_num_items(lh) LHM_lh_num_items(ERR_STRING_DATA,lh) +#define lh_ERR_STRING_DATA_down_load(lh) LHM_lh_down_load(ERR_STRING_DATA,lh) +#define lh_ERR_STRING_DATA_node_stats_bio(lh,out) \ + LHM_lh_node_stats_bio(ERR_STRING_DATA,lh,out) +#define lh_ERR_STRING_DATA_node_usage_stats_bio(lh,out) \ + LHM_lh_node_usage_stats_bio(ERR_STRING_DATA,lh,out) +#define lh_ERR_STRING_DATA_stats_bio(lh,out) \ + LHM_lh_stats_bio(ERR_STRING_DATA,lh,out) +#define lh_ERR_STRING_DATA_free(lh) LHM_lh_free(ERR_STRING_DATA,lh) + +#define lh_EX_CLASS_ITEM_new() LHM_lh_new(EX_CLASS_ITEM,ex_class_item) +#define lh_EX_CLASS_ITEM_insert(lh,inst) LHM_lh_insert(EX_CLASS_ITEM,lh,inst) +#define lh_EX_CLASS_ITEM_retrieve(lh,inst) LHM_lh_retrieve(EX_CLASS_ITEM,lh,inst) +#define lh_EX_CLASS_ITEM_delete(lh,inst) LHM_lh_delete(EX_CLASS_ITEM,lh,inst) +#define lh_EX_CLASS_ITEM_doall(lh,fn) LHM_lh_doall(EX_CLASS_ITEM,lh,fn) +#define lh_EX_CLASS_ITEM_doall_arg(lh,fn,arg_type,arg) \ + LHM_lh_doall_arg(EX_CLASS_ITEM,lh,fn,arg_type,arg) +#define lh_EX_CLASS_ITEM_error(lh) LHM_lh_error(EX_CLASS_ITEM,lh) +#define lh_EX_CLASS_ITEM_num_items(lh) LHM_lh_num_items(EX_CLASS_ITEM,lh) +#define lh_EX_CLASS_ITEM_down_load(lh) LHM_lh_down_load(EX_CLASS_ITEM,lh) +#define lh_EX_CLASS_ITEM_node_stats_bio(lh,out) \ + LHM_lh_node_stats_bio(EX_CLASS_ITEM,lh,out) +#define lh_EX_CLASS_ITEM_node_usage_stats_bio(lh,out) \ + LHM_lh_node_usage_stats_bio(EX_CLASS_ITEM,lh,out) +#define lh_EX_CLASS_ITEM_stats_bio(lh,out) \ + LHM_lh_stats_bio(EX_CLASS_ITEM,lh,out) +#define lh_EX_CLASS_ITEM_free(lh) LHM_lh_free(EX_CLASS_ITEM,lh) + +#define lh_FUNCTION_new() LHM_lh_new(FUNCTION,function) +#define lh_FUNCTION_insert(lh,inst) LHM_lh_insert(FUNCTION,lh,inst) +#define lh_FUNCTION_retrieve(lh,inst) LHM_lh_retrieve(FUNCTION,lh,inst) +#define lh_FUNCTION_delete(lh,inst) LHM_lh_delete(FUNCTION,lh,inst) +#define lh_FUNCTION_doall(lh,fn) LHM_lh_doall(FUNCTION,lh,fn) +#define lh_FUNCTION_doall_arg(lh,fn,arg_type,arg) \ + LHM_lh_doall_arg(FUNCTION,lh,fn,arg_type,arg) +#define lh_FUNCTION_error(lh) LHM_lh_error(FUNCTION,lh) +#define lh_FUNCTION_num_items(lh) LHM_lh_num_items(FUNCTION,lh) +#define lh_FUNCTION_down_load(lh) LHM_lh_down_load(FUNCTION,lh) +#define lh_FUNCTION_node_stats_bio(lh,out) \ + LHM_lh_node_stats_bio(FUNCTION,lh,out) +#define lh_FUNCTION_node_usage_stats_bio(lh,out) \ + LHM_lh_node_usage_stats_bio(FUNCTION,lh,out) +#define lh_FUNCTION_stats_bio(lh,out) \ + LHM_lh_stats_bio(FUNCTION,lh,out) +#define lh_FUNCTION_free(lh) LHM_lh_free(FUNCTION,lh) + +#define lh_MEM_new() LHM_lh_new(MEM,mem) +#define lh_MEM_insert(lh,inst) LHM_lh_insert(MEM,lh,inst) +#define lh_MEM_retrieve(lh,inst) LHM_lh_retrieve(MEM,lh,inst) +#define lh_MEM_delete(lh,inst) LHM_lh_delete(MEM,lh,inst) +#define lh_MEM_doall(lh,fn) LHM_lh_doall(MEM,lh,fn) +#define lh_MEM_doall_arg(lh,fn,arg_type,arg) \ + LHM_lh_doall_arg(MEM,lh,fn,arg_type,arg) +#define lh_MEM_error(lh) LHM_lh_error(MEM,lh) +#define lh_MEM_num_items(lh) LHM_lh_num_items(MEM,lh) +#define lh_MEM_down_load(lh) LHM_lh_down_load(MEM,lh) +#define lh_MEM_node_stats_bio(lh,out) \ + LHM_lh_node_stats_bio(MEM,lh,out) +#define lh_MEM_node_usage_stats_bio(lh,out) \ + LHM_lh_node_usage_stats_bio(MEM,lh,out) +#define lh_MEM_stats_bio(lh,out) \ + LHM_lh_stats_bio(MEM,lh,out) +#define lh_MEM_free(lh) LHM_lh_free(MEM,lh) + +#define lh_OBJ_NAME_new() LHM_lh_new(OBJ_NAME,obj_name) +#define lh_OBJ_NAME_insert(lh,inst) LHM_lh_insert(OBJ_NAME,lh,inst) +#define lh_OBJ_NAME_retrieve(lh,inst) LHM_lh_retrieve(OBJ_NAME,lh,inst) +#define lh_OBJ_NAME_delete(lh,inst) LHM_lh_delete(OBJ_NAME,lh,inst) +#define lh_OBJ_NAME_doall(lh,fn) LHM_lh_doall(OBJ_NAME,lh,fn) +#define lh_OBJ_NAME_doall_arg(lh,fn,arg_type,arg) \ + LHM_lh_doall_arg(OBJ_NAME,lh,fn,arg_type,arg) +#define lh_OBJ_NAME_error(lh) LHM_lh_error(OBJ_NAME,lh) +#define lh_OBJ_NAME_num_items(lh) LHM_lh_num_items(OBJ_NAME,lh) +#define lh_OBJ_NAME_down_load(lh) LHM_lh_down_load(OBJ_NAME,lh) +#define lh_OBJ_NAME_node_stats_bio(lh,out) \ + LHM_lh_node_stats_bio(OBJ_NAME,lh,out) +#define lh_OBJ_NAME_node_usage_stats_bio(lh,out) \ + LHM_lh_node_usage_stats_bio(OBJ_NAME,lh,out) +#define lh_OBJ_NAME_stats_bio(lh,out) \ + LHM_lh_stats_bio(OBJ_NAME,lh,out) +#define lh_OBJ_NAME_free(lh) LHM_lh_free(OBJ_NAME,lh) + +#define lh_OPENSSL_CSTRING_new() LHM_lh_new(OPENSSL_CSTRING,openssl_cstring) +#define lh_OPENSSL_CSTRING_insert(lh,inst) LHM_lh_insert(OPENSSL_CSTRING,lh,inst) +#define lh_OPENSSL_CSTRING_retrieve(lh,inst) LHM_lh_retrieve(OPENSSL_CSTRING,lh,inst) +#define lh_OPENSSL_CSTRING_delete(lh,inst) LHM_lh_delete(OPENSSL_CSTRING,lh,inst) +#define lh_OPENSSL_CSTRING_doall(lh,fn) LHM_lh_doall(OPENSSL_CSTRING,lh,fn) +#define lh_OPENSSL_CSTRING_doall_arg(lh,fn,arg_type,arg) \ + LHM_lh_doall_arg(OPENSSL_CSTRING,lh,fn,arg_type,arg) +#define lh_OPENSSL_CSTRING_error(lh) LHM_lh_error(OPENSSL_CSTRING,lh) +#define lh_OPENSSL_CSTRING_num_items(lh) LHM_lh_num_items(OPENSSL_CSTRING,lh) +#define lh_OPENSSL_CSTRING_down_load(lh) LHM_lh_down_load(OPENSSL_CSTRING,lh) +#define lh_OPENSSL_CSTRING_node_stats_bio(lh,out) \ + LHM_lh_node_stats_bio(OPENSSL_CSTRING,lh,out) +#define lh_OPENSSL_CSTRING_node_usage_stats_bio(lh,out) \ + LHM_lh_node_usage_stats_bio(OPENSSL_CSTRING,lh,out) +#define lh_OPENSSL_CSTRING_stats_bio(lh,out) \ + LHM_lh_stats_bio(OPENSSL_CSTRING,lh,out) +#define lh_OPENSSL_CSTRING_free(lh) LHM_lh_free(OPENSSL_CSTRING,lh) + +#define lh_OPENSSL_STRING_new() LHM_lh_new(OPENSSL_STRING,openssl_string) +#define lh_OPENSSL_STRING_insert(lh,inst) LHM_lh_insert(OPENSSL_STRING,lh,inst) +#define lh_OPENSSL_STRING_retrieve(lh,inst) LHM_lh_retrieve(OPENSSL_STRING,lh,inst) +#define lh_OPENSSL_STRING_delete(lh,inst) LHM_lh_delete(OPENSSL_STRING,lh,inst) +#define lh_OPENSSL_STRING_doall(lh,fn) LHM_lh_doall(OPENSSL_STRING,lh,fn) +#define lh_OPENSSL_STRING_doall_arg(lh,fn,arg_type,arg) \ + LHM_lh_doall_arg(OPENSSL_STRING,lh,fn,arg_type,arg) +#define lh_OPENSSL_STRING_error(lh) LHM_lh_error(OPENSSL_STRING,lh) +#define lh_OPENSSL_STRING_num_items(lh) LHM_lh_num_items(OPENSSL_STRING,lh) +#define lh_OPENSSL_STRING_down_load(lh) LHM_lh_down_load(OPENSSL_STRING,lh) +#define lh_OPENSSL_STRING_node_stats_bio(lh,out) \ + LHM_lh_node_stats_bio(OPENSSL_STRING,lh,out) +#define lh_OPENSSL_STRING_node_usage_stats_bio(lh,out) \ + LHM_lh_node_usage_stats_bio(OPENSSL_STRING,lh,out) +#define lh_OPENSSL_STRING_stats_bio(lh,out) \ + LHM_lh_stats_bio(OPENSSL_STRING,lh,out) +#define lh_OPENSSL_STRING_free(lh) LHM_lh_free(OPENSSL_STRING,lh) + +#define lh_SSL_SESSION_new() LHM_lh_new(SSL_SESSION,ssl_session) +#define lh_SSL_SESSION_insert(lh,inst) LHM_lh_insert(SSL_SESSION,lh,inst) +#define lh_SSL_SESSION_retrieve(lh,inst) LHM_lh_retrieve(SSL_SESSION,lh,inst) +#define lh_SSL_SESSION_delete(lh,inst) LHM_lh_delete(SSL_SESSION,lh,inst) +#define lh_SSL_SESSION_doall(lh,fn) LHM_lh_doall(SSL_SESSION,lh,fn) +#define lh_SSL_SESSION_doall_arg(lh,fn,arg_type,arg) \ + LHM_lh_doall_arg(SSL_SESSION,lh,fn,arg_type,arg) +#define lh_SSL_SESSION_error(lh) LHM_lh_error(SSL_SESSION,lh) +#define lh_SSL_SESSION_num_items(lh) LHM_lh_num_items(SSL_SESSION,lh) +#define lh_SSL_SESSION_down_load(lh) LHM_lh_down_load(SSL_SESSION,lh) +#define lh_SSL_SESSION_node_stats_bio(lh,out) \ + LHM_lh_node_stats_bio(SSL_SESSION,lh,out) +#define lh_SSL_SESSION_node_usage_stats_bio(lh,out) \ + LHM_lh_node_usage_stats_bio(SSL_SESSION,lh,out) +#define lh_SSL_SESSION_stats_bio(lh,out) \ + LHM_lh_stats_bio(SSL_SESSION,lh,out) +#define lh_SSL_SESSION_free(lh) LHM_lh_free(SSL_SESSION,lh) +/* End of util/mkstack.pl block, you may now edit :-) */ + +#endif /* !defined HEADER_SAFESTACK_H */ diff --git a/extra_lib/include/openssl/sha.h b/extra_lib/include/openssl/sha.h new file mode 100644 index 0000000..16cacf9 --- /dev/null +++ b/extra_lib/include/openssl/sha.h @@ -0,0 +1,200 @@ +/* crypto/sha/sha.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 AUTHOR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_SHA_H +#define HEADER_SHA_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(OPENSSL_NO_SHA) || (defined(OPENSSL_NO_SHA0) && defined(OPENSSL_NO_SHA1)) +#error SHA is disabled. +#endif + +#if defined(OPENSSL_FIPS) +#define FIPS_SHA_SIZE_T size_t +#endif + +/* + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + * ! SHA_LONG has to be at least 32 bits wide. If it's wider, then ! + * ! SHA_LONG_LOG2 has to be defined along. ! + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + */ + +#if defined(__LP32__) +#define SHA_LONG unsigned long +#elif defined(OPENSSL_SYS_CRAY) || defined(__ILP64__) +#define SHA_LONG unsigned long +#define SHA_LONG_LOG2 3 +#else +#define SHA_LONG unsigned int +#endif + +#define SHA_LBLOCK 16 +#define SHA_CBLOCK (SHA_LBLOCK*4) /* SHA treats input data as a + * contiguous array of 32 bit + * wide big-endian values. */ +#define SHA_LAST_BLOCK (SHA_CBLOCK-8) +#define SHA_DIGEST_LENGTH 20 + +typedef struct SHAstate_st + { + SHA_LONG h0,h1,h2,h3,h4; + SHA_LONG Nl,Nh; + SHA_LONG data[SHA_LBLOCK]; + unsigned int num; + } SHA_CTX; + +#ifndef OPENSSL_NO_SHA0 +int SHA_Init(SHA_CTX *c); +int SHA_Update(SHA_CTX *c, const void *data, size_t len); +int SHA_Final(unsigned char *md, SHA_CTX *c); +unsigned char *SHA(const unsigned char *d, size_t n, unsigned char *md); +void SHA_Transform(SHA_CTX *c, const unsigned char *data); +#endif +#ifndef OPENSSL_NO_SHA1 +int SHA1_Init(SHA_CTX *c); +int SHA1_Update(SHA_CTX *c, const void *data, size_t len); +int SHA1_Final(unsigned char *md, SHA_CTX *c); +unsigned char *SHA1(const unsigned char *d, size_t n, unsigned char *md); +void SHA1_Transform(SHA_CTX *c, const unsigned char *data); +#endif + +#define SHA256_CBLOCK (SHA_LBLOCK*4) /* SHA-256 treats input data as a + * contiguous array of 32 bit + * wide big-endian values. */ +#define SHA224_DIGEST_LENGTH 28 +#define SHA256_DIGEST_LENGTH 32 + +typedef struct SHA256state_st + { + SHA_LONG h[8]; + SHA_LONG Nl,Nh; + SHA_LONG data[SHA_LBLOCK]; + unsigned int num,md_len; + } SHA256_CTX; + +#ifndef OPENSSL_NO_SHA256 +int SHA224_Init(SHA256_CTX *c); +int SHA224_Update(SHA256_CTX *c, const void *data, size_t len); +int SHA224_Final(unsigned char *md, SHA256_CTX *c); +unsigned char *SHA224(const unsigned char *d, size_t n,unsigned char *md); +int SHA256_Init(SHA256_CTX *c); +int SHA256_Update(SHA256_CTX *c, const void *data, size_t len); +int SHA256_Final(unsigned char *md, SHA256_CTX *c); +unsigned char *SHA256(const unsigned char *d, size_t n,unsigned char *md); +void SHA256_Transform(SHA256_CTX *c, const unsigned char *data); +#endif + +#define SHA384_DIGEST_LENGTH 48 +#define SHA512_DIGEST_LENGTH 64 + +#ifndef OPENSSL_NO_SHA512 +/* + * Unlike 32-bit digest algorithms, SHA-512 *relies* on SHA_LONG64 + * being exactly 64-bit wide. See Implementation Notes in sha512.c + * for further details. + */ +#define SHA512_CBLOCK (SHA_LBLOCK*8) /* SHA-512 treats input data as a + * contiguous array of 64 bit + * wide big-endian values. */ +#if (defined(_WIN32) || defined(_WIN64)) && !defined(__MINGW32__) +#define SHA_LONG64 unsigned __int64 +#define U64(C) C##UI64 +#elif defined(__arch64__) +#define SHA_LONG64 unsigned long +#define U64(C) C##UL +#else +#define SHA_LONG64 unsigned long long +#define U64(C) C##ULL +#endif + +typedef struct SHA512state_st + { + SHA_LONG64 h[8]; + SHA_LONG64 Nl,Nh; + union { + SHA_LONG64 d[SHA_LBLOCK]; + unsigned char p[SHA512_CBLOCK]; + } u; + unsigned int num,md_len; + } SHA512_CTX; +#endif + +#ifndef OPENSSL_NO_SHA512 +int SHA384_Init(SHA512_CTX *c); +int SHA384_Update(SHA512_CTX *c, const void *data, size_t len); +int SHA384_Final(unsigned char *md, SHA512_CTX *c); +unsigned char *SHA384(const unsigned char *d, size_t n,unsigned char *md); +int SHA512_Init(SHA512_CTX *c); +int SHA512_Update(SHA512_CTX *c, const void *data, size_t len); +int SHA512_Final(unsigned char *md, SHA512_CTX *c); +unsigned char *SHA512(const unsigned char *d, size_t n,unsigned char *md); +void SHA512_Transform(SHA512_CTX *c, const unsigned char *data); +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/extra_lib/include/openssl/ssl.h b/extra_lib/include/openssl/ssl.h new file mode 100644 index 0000000..e4c3f65 --- /dev/null +++ b/extra_lib/include/openssl/ssl.h @@ -0,0 +1,2302 @@ +/* ssl/ssl.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 AUTHOR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ +/* ==================================================================== + * Copyright (c) 1998-2007 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED 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 OpenSSL PROJECT OR + * ITS 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. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ +/* ==================================================================== + * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. + * ECC cipher suite support in OpenSSL originally developed by + * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project. + */ +/* ==================================================================== + * Copyright 2005 Nokia. All rights reserved. + * + * The portions of the attached software ("Contribution") is developed by + * Nokia Corporation and is licensed pursuant to the OpenSSL open source + * license. + * + * The Contribution, originally written by Mika Kousa and Pasi Eronen of + * Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites + * support (see RFC 4279) to OpenSSL. + * + * No patent licenses or other rights except those expressly stated in + * the OpenSSL open source license shall be deemed granted or received + * expressly, by implication, estoppel, or otherwise. + * + * No assurances are provided by Nokia that the Contribution does not + * infringe the patent or other intellectual property rights of any third + * party or that the license provides you with all the necessary rights + * to make use of the Contribution. + * + * THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN + * ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA + * SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY + * OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR + * OTHERWISE. + */ + +#ifndef HEADER_SSL_H +#define HEADER_SSL_H + +#include + +#ifndef OPENSSL_NO_COMP +#include +#endif +#ifndef OPENSSL_NO_BIO +#include +#endif +#ifndef OPENSSL_NO_DEPRECATED +#ifndef OPENSSL_NO_X509 +#include +#endif +#include +#include +#include +#endif +#include +#include + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* SSLeay version number for ASN.1 encoding of the session information */ +/* Version 0 - initial version + * Version 1 - added the optional peer certificate + */ +#define SSL_SESSION_ASN1_VERSION 0x0001 + +/* text strings for the ciphers */ +#define SSL_TXT_NULL_WITH_MD5 SSL2_TXT_NULL_WITH_MD5 +#define SSL_TXT_RC4_128_WITH_MD5 SSL2_TXT_RC4_128_WITH_MD5 +#define SSL_TXT_RC4_128_EXPORT40_WITH_MD5 SSL2_TXT_RC4_128_EXPORT40_WITH_MD5 +#define SSL_TXT_RC2_128_CBC_WITH_MD5 SSL2_TXT_RC2_128_CBC_WITH_MD5 +#define SSL_TXT_RC2_128_CBC_EXPORT40_WITH_MD5 SSL2_TXT_RC2_128_CBC_EXPORT40_WITH_MD5 +#define SSL_TXT_IDEA_128_CBC_WITH_MD5 SSL2_TXT_IDEA_128_CBC_WITH_MD5 +#define SSL_TXT_DES_64_CBC_WITH_MD5 SSL2_TXT_DES_64_CBC_WITH_MD5 +#define SSL_TXT_DES_64_CBC_WITH_SHA SSL2_TXT_DES_64_CBC_WITH_SHA +#define SSL_TXT_DES_192_EDE3_CBC_WITH_MD5 SSL2_TXT_DES_192_EDE3_CBC_WITH_MD5 +#define SSL_TXT_DES_192_EDE3_CBC_WITH_SHA SSL2_TXT_DES_192_EDE3_CBC_WITH_SHA + +/* VRS Additional Kerberos5 entries + */ +#define SSL_TXT_KRB5_DES_64_CBC_SHA SSL3_TXT_KRB5_DES_64_CBC_SHA +#define SSL_TXT_KRB5_DES_192_CBC3_SHA SSL3_TXT_KRB5_DES_192_CBC3_SHA +#define SSL_TXT_KRB5_RC4_128_SHA SSL3_TXT_KRB5_RC4_128_SHA +#define SSL_TXT_KRB5_IDEA_128_CBC_SHA SSL3_TXT_KRB5_IDEA_128_CBC_SHA +#define SSL_TXT_KRB5_DES_64_CBC_MD5 SSL3_TXT_KRB5_DES_64_CBC_MD5 +#define SSL_TXT_KRB5_DES_192_CBC3_MD5 SSL3_TXT_KRB5_DES_192_CBC3_MD5 +#define SSL_TXT_KRB5_RC4_128_MD5 SSL3_TXT_KRB5_RC4_128_MD5 +#define SSL_TXT_KRB5_IDEA_128_CBC_MD5 SSL3_TXT_KRB5_IDEA_128_CBC_MD5 + +#define SSL_TXT_KRB5_DES_40_CBC_SHA SSL3_TXT_KRB5_DES_40_CBC_SHA +#define SSL_TXT_KRB5_RC2_40_CBC_SHA SSL3_TXT_KRB5_RC2_40_CBC_SHA +#define SSL_TXT_KRB5_RC4_40_SHA SSL3_TXT_KRB5_RC4_40_SHA +#define SSL_TXT_KRB5_DES_40_CBC_MD5 SSL3_TXT_KRB5_DES_40_CBC_MD5 +#define SSL_TXT_KRB5_RC2_40_CBC_MD5 SSL3_TXT_KRB5_RC2_40_CBC_MD5 +#define SSL_TXT_KRB5_RC4_40_MD5 SSL3_TXT_KRB5_RC4_40_MD5 + +#define SSL_TXT_KRB5_DES_40_CBC_SHA SSL3_TXT_KRB5_DES_40_CBC_SHA +#define SSL_TXT_KRB5_DES_40_CBC_MD5 SSL3_TXT_KRB5_DES_40_CBC_MD5 +#define SSL_TXT_KRB5_DES_64_CBC_SHA SSL3_TXT_KRB5_DES_64_CBC_SHA +#define SSL_TXT_KRB5_DES_64_CBC_MD5 SSL3_TXT_KRB5_DES_64_CBC_MD5 +#define SSL_TXT_KRB5_DES_192_CBC3_SHA SSL3_TXT_KRB5_DES_192_CBC3_SHA +#define SSL_TXT_KRB5_DES_192_CBC3_MD5 SSL3_TXT_KRB5_DES_192_CBC3_MD5 +#define SSL_MAX_KRB5_PRINCIPAL_LENGTH 256 + +#define SSL_MAX_SSL_SESSION_ID_LENGTH 32 +#define SSL_MAX_SID_CTX_LENGTH 32 + +#define SSL_MIN_RSA_MODULUS_LENGTH_IN_BYTES (512/8) +#define SSL_MAX_KEY_ARG_LENGTH 8 +#define SSL_MAX_MASTER_KEY_LENGTH 48 + + +/* These are used to specify which ciphers to use and not to use */ + +#define SSL_TXT_EXP40 "EXPORT40" +#define SSL_TXT_EXP56 "EXPORT56" +#define SSL_TXT_LOW "LOW" +#define SSL_TXT_MEDIUM "MEDIUM" +#define SSL_TXT_HIGH "HIGH" +#define SSL_TXT_FIPS "FIPS" + +#define SSL_TXT_kFZA "kFZA" /* unused! */ +#define SSL_TXT_aFZA "aFZA" /* unused! */ +#define SSL_TXT_eFZA "eFZA" /* unused! */ +#define SSL_TXT_FZA "FZA" /* unused! */ + +#define SSL_TXT_aNULL "aNULL" +#define SSL_TXT_eNULL "eNULL" +#define SSL_TXT_NULL "NULL" + +#define SSL_TXT_kRSA "kRSA" +#define SSL_TXT_kDHr "kDHr" /* no such ciphersuites supported! */ +#define SSL_TXT_kDHd "kDHd" /* no such ciphersuites supported! */ +#define SSL_TXT_kDH "kDH" /* no such ciphersuites supported! */ +#define SSL_TXT_kEDH "kEDH" +#define SSL_TXT_kKRB5 "kKRB5" +#define SSL_TXT_kECDHr "kECDHr" +#define SSL_TXT_kECDHe "kECDHe" +#define SSL_TXT_kECDH "kECDH" +#define SSL_TXT_kEECDH "kEECDH" +#define SSL_TXT_kPSK "kPSK" +#define SSL_TXT_kGOST "kGOST" + +#define SSL_TXT_aRSA "aRSA" +#define SSL_TXT_aDSS "aDSS" +#define SSL_TXT_aDH "aDH" /* no such ciphersuites supported! */ +#define SSL_TXT_aECDH "aECDH" +#define SSL_TXT_aKRB5 "aKRB5" +#define SSL_TXT_aECDSA "aECDSA" +#define SSL_TXT_aPSK "aPSK" +#define SSL_TXT_aGOST94 "aGOST94" +#define SSL_TXT_aGOST01 "aGOST01" +#define SSL_TXT_aGOST "aGOST" + +#define SSL_TXT_DSS "DSS" +#define SSL_TXT_DH "DH" +#define SSL_TXT_EDH "EDH" /* same as "kEDH:-ADH" */ +#define SSL_TXT_ADH "ADH" +#define SSL_TXT_RSA "RSA" +#define SSL_TXT_ECDH "ECDH" +#define SSL_TXT_EECDH "EECDH" /* same as "kEECDH:-AECDH" */ +#define SSL_TXT_AECDH "AECDH" +#define SSL_TXT_ECDSA "ECDSA" +#define SSL_TXT_KRB5 "KRB5" +#define SSL_TXT_PSK "PSK" + +#define SSL_TXT_DES "DES" +#define SSL_TXT_3DES "3DES" +#define SSL_TXT_RC4 "RC4" +#define SSL_TXT_RC2 "RC2" +#define SSL_TXT_IDEA "IDEA" +#define SSL_TXT_SEED "SEED" +#define SSL_TXT_AES128 "AES128" +#define SSL_TXT_AES256 "AES256" +#define SSL_TXT_AES "AES" +#define SSL_TXT_CAMELLIA128 "CAMELLIA128" +#define SSL_TXT_CAMELLIA256 "CAMELLIA256" +#define SSL_TXT_CAMELLIA "CAMELLIA" + +#define SSL_TXT_MD5 "MD5" +#define SSL_TXT_SHA1 "SHA1" +#define SSL_TXT_SHA "SHA" /* same as "SHA1" */ +#define SSL_TXT_GOST94 "GOST94" +#define SSL_TXT_GOST89MAC "GOST89MAC" + +#define SSL_TXT_SSLV2 "SSLv2" +#define SSL_TXT_SSLV3 "SSLv3" +#define SSL_TXT_TLSV1 "TLSv1" + +#define SSL_TXT_EXP "EXP" +#define SSL_TXT_EXPORT "EXPORT" + +#define SSL_TXT_ALL "ALL" + +/* + * COMPLEMENTOF* definitions. These identifiers are used to (de-select) + * ciphers normally not being used. + * Example: "RC4" will activate all ciphers using RC4 including ciphers + * without authentication, which would normally disabled by DEFAULT (due + * the "!ADH" being part of default). Therefore "RC4:!COMPLEMENTOFDEFAULT" + * will make sure that it is also disabled in the specific selection. + * COMPLEMENTOF* identifiers are portable between version, as adjustments + * to the default cipher setup will also be included here. + * + * COMPLEMENTOFDEFAULT does not experience the same special treatment that + * DEFAULT gets, as only selection is being done and no sorting as needed + * for DEFAULT. + */ +#define SSL_TXT_CMPALL "COMPLEMENTOFALL" +#define SSL_TXT_CMPDEF "COMPLEMENTOFDEFAULT" + +/* The following cipher list is used by default. + * It also is substituted when an application-defined cipher list string + * starts with 'DEFAULT'. */ +#define SSL_DEFAULT_CIPHER_LIST "ALL:!aNULL:!eNULL:!SSLv2" +/* As of OpenSSL 1.0.0, ssl_create_cipher_list() in ssl/ssl_ciph.c always + * starts with a reasonable order, and all we have to do for DEFAULT is + * throwing out anonymous and unencrypted ciphersuites! + * (The latter are not actually enabled by ALL, but "ALL:RSA" would enable + * some of them.) + */ + +/* Used in SSL_set_shutdown()/SSL_get_shutdown(); */ +#define SSL_SENT_SHUTDOWN 1 +#define SSL_RECEIVED_SHUTDOWN 2 + +#ifdef __cplusplus +} +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#if (defined(OPENSSL_NO_RSA) || defined(OPENSSL_NO_MD5)) && !defined(OPENSSL_NO_SSL2) +#define OPENSSL_NO_SSL2 +#endif + +#define SSL_FILETYPE_ASN1 X509_FILETYPE_ASN1 +#define SSL_FILETYPE_PEM X509_FILETYPE_PEM + +/* This is needed to stop compilers complaining about the + * 'struct ssl_st *' function parameters used to prototype callbacks + * in SSL_CTX. */ +typedef struct ssl_st *ssl_crock_st; +typedef struct tls_session_ticket_ext_st TLS_SESSION_TICKET_EXT; + +/* used to hold info on the particular ciphers used */ +typedef struct ssl_cipher_st + { + int valid; + const char *name; /* text name */ + unsigned long id; /* id, 4 bytes, first is version */ + + /* changed in 0.9.9: these four used to be portions of a single value 'algorithms' */ + unsigned long algorithm_mkey; /* key exchange algorithm */ + unsigned long algorithm_auth; /* server authentication */ + unsigned long algorithm_enc; /* symmetric encryption */ + unsigned long algorithm_mac; /* symmetric authentication */ + unsigned long algorithm_ssl; /* (major) protocol version */ + + unsigned long algo_strength; /* strength and export flags */ + unsigned long algorithm2; /* Extra flags */ + int strength_bits; /* Number of bits really used */ + int alg_bits; /* Number of bits for algorithm */ + } SSL_CIPHER; + +DECLARE_STACK_OF(SSL_CIPHER) + +typedef int (*tls_session_ticket_ext_cb_fn)(SSL *s, const unsigned char *data, int len, void *arg); +typedef int (*tls_session_secret_cb_fn)(SSL *s, void *secret, int *secret_len, STACK_OF(SSL_CIPHER) *peer_ciphers, SSL_CIPHER **cipher, void *arg); + +/* Used to hold functions for SSLv2 or SSLv3/TLSv1 functions */ +typedef struct ssl_method_st + { + int version; + int (*ssl_new)(SSL *s); + void (*ssl_clear)(SSL *s); + void (*ssl_free)(SSL *s); + int (*ssl_accept)(SSL *s); + int (*ssl_connect)(SSL *s); + int (*ssl_read)(SSL *s,void *buf,int len); + int (*ssl_peek)(SSL *s,void *buf,int len); + int (*ssl_write)(SSL *s,const void *buf,int len); + int (*ssl_shutdown)(SSL *s); + int (*ssl_renegotiate)(SSL *s); + int (*ssl_renegotiate_check)(SSL *s); + long (*ssl_get_message)(SSL *s, int st1, int stn, int mt, long + max, int *ok); + int (*ssl_read_bytes)(SSL *s, int type, unsigned char *buf, int len, + int peek); + int (*ssl_write_bytes)(SSL *s, int type, const void *buf_, int len); + int (*ssl_dispatch_alert)(SSL *s); + long (*ssl_ctrl)(SSL *s,int cmd,long larg,void *parg); + long (*ssl_ctx_ctrl)(SSL_CTX *ctx,int cmd,long larg,void *parg); + const SSL_CIPHER *(*get_cipher_by_char)(const unsigned char *ptr); + int (*put_cipher_by_char)(const SSL_CIPHER *cipher,unsigned char *ptr); + int (*ssl_pending)(const SSL *s); + int (*num_ciphers)(void); + const SSL_CIPHER *(*get_cipher)(unsigned ncipher); + const struct ssl_method_st *(*get_ssl_method)(int version); + long (*get_timeout)(void); + struct ssl3_enc_method *ssl3_enc; /* Extra SSLv3/TLS stuff */ + int (*ssl_version)(void); + long (*ssl_callback_ctrl)(SSL *s, int cb_id, void (*fp)(void)); + long (*ssl_ctx_callback_ctrl)(SSL_CTX *s, int cb_id, void (*fp)(void)); + } SSL_METHOD; + +/* Lets make this into an ASN.1 type structure as follows + * SSL_SESSION_ID ::= SEQUENCE { + * version INTEGER, -- structure version number + * SSLversion INTEGER, -- SSL version number + * Cipher OCTET STRING, -- the 3 byte cipher ID + * Session_ID OCTET STRING, -- the Session ID + * Master_key OCTET STRING, -- the master key + * KRB5_principal OCTET STRING -- optional Kerberos principal + * Key_Arg [ 0 ] IMPLICIT OCTET STRING, -- the optional Key argument + * Time [ 1 ] EXPLICIT INTEGER, -- optional Start Time + * Timeout [ 2 ] EXPLICIT INTEGER, -- optional Timeout ins seconds + * Peer [ 3 ] EXPLICIT X509, -- optional Peer Certificate + * Session_ID_context [ 4 ] EXPLICIT OCTET STRING, -- the Session ID context + * Verify_result [ 5 ] EXPLICIT INTEGER, -- X509_V_... code for `Peer' + * HostName [ 6 ] EXPLICIT OCTET STRING, -- optional HostName from servername TLS extension + * ECPointFormatList [ 7 ] OCTET STRING, -- optional EC point format list from TLS extension + * PSK_identity_hint [ 8 ] EXPLICIT OCTET STRING, -- optional PSK identity hint + * PSK_identity [ 9 ] EXPLICIT OCTET STRING -- optional PSK identity + * } + * Look in ssl/ssl_asn1.c for more details + * I'm using EXPLICIT tags so I can read the damn things using asn1parse :-). + */ +typedef struct ssl_session_st + { + int ssl_version; /* what ssl version session info is + * being kept in here? */ + + /* only really used in SSLv2 */ + unsigned int key_arg_length; + unsigned char key_arg[SSL_MAX_KEY_ARG_LENGTH]; + int master_key_length; + unsigned char master_key[SSL_MAX_MASTER_KEY_LENGTH]; + /* session_id - valid? */ + unsigned int session_id_length; + unsigned char session_id[SSL_MAX_SSL_SESSION_ID_LENGTH]; + /* this is used to determine whether the session is being reused in + * the appropriate context. It is up to the application to set this, + * via SSL_new */ + unsigned int sid_ctx_length; + unsigned char sid_ctx[SSL_MAX_SID_CTX_LENGTH]; + +#ifndef OPENSSL_NO_KRB5 + unsigned int krb5_client_princ_len; + unsigned char krb5_client_princ[SSL_MAX_KRB5_PRINCIPAL_LENGTH]; +#endif /* OPENSSL_NO_KRB5 */ +#ifndef OPENSSL_NO_PSK + char *psk_identity_hint; + char *psk_identity; +#endif + int not_resumable; + + /* The cert is the certificate used to establish this connection */ + struct sess_cert_st /* SESS_CERT */ *sess_cert; + + /* This is the cert for the other end. + * On clients, it will be the same as sess_cert->peer_key->x509 + * (the latter is not enough as sess_cert is not retained + * in the external representation of sessions, see ssl_asn1.c). */ + X509 *peer; + /* when app_verify_callback accepts a session where the peer's certificate + * is not ok, we must remember the error for session reuse: */ + long verify_result; /* only for servers */ + + int references; + long timeout; + long time; + + unsigned int compress_meth; /* Need to lookup the method */ + + const SSL_CIPHER *cipher; + unsigned long cipher_id; /* when ASN.1 loaded, this + * needs to be used to load + * the 'cipher' structure */ + + STACK_OF(SSL_CIPHER) *ciphers; /* shared ciphers? */ + + CRYPTO_EX_DATA ex_data; /* application specific data */ + + /* These are used to make removal of session-ids more + * efficient and to implement a maximum cache size. */ + struct ssl_session_st *prev,*next; +#ifndef OPENSSL_NO_TLSEXT + char *tlsext_hostname; +#ifndef OPENSSL_NO_EC + size_t tlsext_ecpointformatlist_length; + unsigned char *tlsext_ecpointformatlist; /* peer's list */ + size_t tlsext_ellipticcurvelist_length; + unsigned char *tlsext_ellipticcurvelist; /* peer's list */ +#endif /* OPENSSL_NO_EC */ + /* RFC4507 info */ + unsigned char *tlsext_tick; /* Session ticket */ + size_t tlsext_ticklen; /* Session ticket length */ + long tlsext_tick_lifetime_hint; /* Session lifetime hint in seconds */ +#endif + } SSL_SESSION; + + +#define SSL_OP_MICROSOFT_SESS_ID_BUG 0x00000001L +#define SSL_OP_NETSCAPE_CHALLENGE_BUG 0x00000002L +/* Allow initial connection to servers that don't support RI */ +#define SSL_OP_LEGACY_SERVER_CONNECT 0x00000004L +#define SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG 0x00000008L +#define SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG 0x00000010L +#define SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER 0x00000020L +#define SSL_OP_MSIE_SSLV2_RSA_PADDING 0x00000040L /* no effect since 0.9.7h and 0.9.8b */ +#define SSL_OP_SSLEAY_080_CLIENT_DH_BUG 0x00000080L +#define SSL_OP_TLS_D5_BUG 0x00000100L +#define SSL_OP_TLS_BLOCK_PADDING_BUG 0x00000200L + +/* Disable SSL 3.0/TLS 1.0 CBC vulnerability workaround that was added + * in OpenSSL 0.9.6d. Usually (depending on the application protocol) + * the workaround is not needed. Unfortunately some broken SSL/TLS + * implementations cannot handle it at all, which is why we include + * it in SSL_OP_ALL. */ +#define SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS 0x00000800L /* added in 0.9.6e */ + +/* SSL_OP_ALL: various bug workarounds that should be rather harmless. + * This used to be 0x000FFFFFL before 0.9.7. */ +#define SSL_OP_ALL 0x80000FFFL + +/* DTLS options */ +#define SSL_OP_NO_QUERY_MTU 0x00001000L +/* Turn on Cookie Exchange (on relevant for servers) */ +#define SSL_OP_COOKIE_EXCHANGE 0x00002000L +/* Don't use RFC4507 ticket extension */ +#define SSL_OP_NO_TICKET 0x00004000L +/* Use Cisco's "speshul" version of DTLS_BAD_VER (as client) */ +#define SSL_OP_CISCO_ANYCONNECT 0x00008000L + +/* As server, disallow session resumption on renegotiation */ +#define SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION 0x00010000L +/* Don't use compression even if supported */ +#define SSL_OP_NO_COMPRESSION 0x00020000L +/* Permit unsafe legacy renegotiation */ +#define SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION 0x00040000L +/* If set, always create a new key when using tmp_ecdh parameters */ +#define SSL_OP_SINGLE_ECDH_USE 0x00080000L +/* If set, always create a new key when using tmp_dh parameters */ +#define SSL_OP_SINGLE_DH_USE 0x00100000L +/* Set to always use the tmp_rsa key when doing RSA operations, + * even when this violates protocol specs */ +#define SSL_OP_EPHEMERAL_RSA 0x00200000L +/* Set on servers to choose the cipher according to the server's + * preferences */ +#define SSL_OP_CIPHER_SERVER_PREFERENCE 0x00400000L +/* If set, a server will allow a client to issue a SSLv3.0 version number + * as latest version supported in the premaster secret, even when TLSv1.0 + * (version 3.1) was announced in the client hello. Normally this is + * forbidden to prevent version rollback attacks. */ +#define SSL_OP_TLS_ROLLBACK_BUG 0x00800000L + +#define SSL_OP_NO_SSLv2 0x01000000L +#define SSL_OP_NO_SSLv3 0x02000000L +#define SSL_OP_NO_TLSv1 0x04000000L + +/* The next flag deliberately changes the ciphertest, this is a check + * for the PKCS#1 attack */ +#define SSL_OP_PKCS1_CHECK_1 0x08000000L +#define SSL_OP_PKCS1_CHECK_2 0x10000000L +#define SSL_OP_NETSCAPE_CA_DN_BUG 0x20000000L +#define SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG 0x40000000L +/* Make server add server-hello extension from early version of + * cryptopro draft, when GOST ciphersuite is negotiated. + * Required for interoperability with CryptoPro CSP 3.x + */ +#define SSL_OP_CRYPTOPRO_TLSEXT_BUG 0x80000000L + +/* Allow SSL_write(..., n) to return r with 0 < r < n (i.e. report success + * when just a single record has been written): */ +#define SSL_MODE_ENABLE_PARTIAL_WRITE 0x00000001L +/* Make it possible to retry SSL_write() with changed buffer location + * (buffer contents must stay the same!); this is not the default to avoid + * the misconception that non-blocking SSL_write() behaves like + * non-blocking write(): */ +#define SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER 0x00000002L +/* Never bother the application with retries if the transport + * is blocking: */ +#define SSL_MODE_AUTO_RETRY 0x00000004L +/* Don't attempt to automatically build certificate chain */ +#define SSL_MODE_NO_AUTO_CHAIN 0x00000008L +/* Save RAM by releasing read and write buffers when they're empty. (SSL3 and + * TLS only.) "Released" buffers are put onto a free-list in the context + * or just freed (depending on the context's setting for freelist_max_len). */ +#define SSL_MODE_RELEASE_BUFFERS 0x00000010L + +/* Note: SSL[_CTX]_set_{options,mode} use |= op on the previous value, + * they cannot be used to clear bits. */ + +#define SSL_CTX_set_options(ctx,op) \ + SSL_CTX_ctrl((ctx),SSL_CTRL_OPTIONS,(op),NULL) +#define SSL_CTX_clear_options(ctx,op) \ + SSL_CTX_ctrl((ctx),SSL_CTRL_CLEAR_OPTIONS,(op),NULL) +#define SSL_CTX_get_options(ctx) \ + SSL_CTX_ctrl((ctx),SSL_CTRL_OPTIONS,0,NULL) +#define SSL_set_options(ssl,op) \ + SSL_ctrl((ssl),SSL_CTRL_OPTIONS,(op),NULL) +#define SSL_clear_options(ssl,op) \ + SSL_ctrl((ssl),SSL_CTRL_CLEAR_OPTIONS,(op),NULL) +#define SSL_get_options(ssl) \ + SSL_ctrl((ssl),SSL_CTRL_OPTIONS,0,NULL) + +#define SSL_CTX_set_mode(ctx,op) \ + SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,(op),NULL) +#define SSL_CTX_clear_mode(ctx,op) \ + SSL_CTX_ctrl((ctx),SSL_CTRL_CLEAR_MODE,(op),NULL) +#define SSL_CTX_get_mode(ctx) \ + SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,0,NULL) +#define SSL_clear_mode(ssl,op) \ + SSL_ctrl((ssl),SSL_CTRL_CLEAR_MODE,(op),NULL) +#define SSL_set_mode(ssl,op) \ + SSL_ctrl((ssl),SSL_CTRL_MODE,(op),NULL) +#define SSL_get_mode(ssl) \ + SSL_ctrl((ssl),SSL_CTRL_MODE,0,NULL) +#define SSL_set_mtu(ssl, mtu) \ + SSL_ctrl((ssl),SSL_CTRL_SET_MTU,(mtu),NULL) + +#define SSL_get_secure_renegotiation_support(ssl) \ + SSL_ctrl((ssl), SSL_CTRL_GET_RI_SUPPORT, 0, NULL) + +void SSL_CTX_set_msg_callback(SSL_CTX *ctx, void (*cb)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg)); +void SSL_set_msg_callback(SSL *ssl, void (*cb)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg)); +#define SSL_CTX_set_msg_callback_arg(ctx, arg) SSL_CTX_ctrl((ctx), SSL_CTRL_SET_MSG_CALLBACK_ARG, 0, (arg)) +#define SSL_set_msg_callback_arg(ssl, arg) SSL_ctrl((ssl), SSL_CTRL_SET_MSG_CALLBACK_ARG, 0, (arg)) + + + +#if defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_WIN32) +#define SSL_MAX_CERT_LIST_DEFAULT 1024*30 /* 30k max cert list :-) */ +#else +#define SSL_MAX_CERT_LIST_DEFAULT 1024*100 /* 100k max cert list :-) */ +#endif + +#define SSL_SESSION_CACHE_MAX_SIZE_DEFAULT (1024*20) + +/* This callback type is used inside SSL_CTX, SSL, and in the functions that set + * them. It is used to override the generation of SSL/TLS session IDs in a + * server. Return value should be zero on an error, non-zero to proceed. Also, + * callbacks should themselves check if the id they generate is unique otherwise + * the SSL handshake will fail with an error - callbacks can do this using the + * 'ssl' value they're passed by; + * SSL_has_matching_session_id(ssl, id, *id_len) + * The length value passed in is set at the maximum size the session ID can be. + * In SSLv2 this is 16 bytes, whereas SSLv3/TLSv1 it is 32 bytes. The callback + * can alter this length to be less if desired, but under SSLv2 session IDs are + * supposed to be fixed at 16 bytes so the id will be padded after the callback + * returns in this case. It is also an error for the callback to set the size to + * zero. */ +typedef int (*GEN_SESSION_CB)(const SSL *ssl, unsigned char *id, + unsigned int *id_len); + +typedef struct ssl_comp_st + { + int id; + const char *name; +#ifndef OPENSSL_NO_COMP + COMP_METHOD *method; +#else + char *method; +#endif + } SSL_COMP; + +DECLARE_STACK_OF(SSL_COMP) +DECLARE_LHASH_OF(SSL_SESSION); + +struct ssl_ctx_st + { + const SSL_METHOD *method; + + STACK_OF(SSL_CIPHER) *cipher_list; + /* same as above but sorted for lookup */ + STACK_OF(SSL_CIPHER) *cipher_list_by_id; + + struct x509_store_st /* X509_STORE */ *cert_store; + LHASH_OF(SSL_SESSION) *sessions; + /* Most session-ids that will be cached, default is + * SSL_SESSION_CACHE_MAX_SIZE_DEFAULT. 0 is unlimited. */ + unsigned long session_cache_size; + struct ssl_session_st *session_cache_head; + struct ssl_session_st *session_cache_tail; + + /* This can have one of 2 values, ored together, + * SSL_SESS_CACHE_CLIENT, + * SSL_SESS_CACHE_SERVER, + * Default is SSL_SESSION_CACHE_SERVER, which means only + * SSL_accept which cache SSL_SESSIONS. */ + int session_cache_mode; + + /* If timeout is not 0, it is the default timeout value set + * when SSL_new() is called. This has been put in to make + * life easier to set things up */ + long session_timeout; + + /* If this callback is not null, it will be called each + * time a session id is added to the cache. If this function + * returns 1, it means that the callback will do a + * SSL_SESSION_free() when it has finished using it. Otherwise, + * on 0, it means the callback has finished with it. + * If remove_session_cb is not null, it will be called when + * a session-id is removed from the cache. After the call, + * OpenSSL will SSL_SESSION_free() it. */ + int (*new_session_cb)(struct ssl_st *ssl,SSL_SESSION *sess); + void (*remove_session_cb)(struct ssl_ctx_st *ctx,SSL_SESSION *sess); + SSL_SESSION *(*get_session_cb)(struct ssl_st *ssl, + unsigned char *data,int len,int *copy); + + struct + { + int sess_connect; /* SSL new conn - started */ + int sess_connect_renegotiate;/* SSL reneg - requested */ + int sess_connect_good; /* SSL new conne/reneg - finished */ + int sess_accept; /* SSL new accept - started */ + int sess_accept_renegotiate;/* SSL reneg - requested */ + int sess_accept_good; /* SSL accept/reneg - finished */ + int sess_miss; /* session lookup misses */ + int sess_timeout; /* reuse attempt on timeouted session */ + int sess_cache_full; /* session removed due to full cache */ + int sess_hit; /* session reuse actually done */ + int sess_cb_hit; /* session-id that was not + * in the cache was + * passed back via the callback. This + * indicates that the application is + * supplying session-id's from other + * processes - spooky :-) */ + } stats; + + int references; + + /* if defined, these override the X509_verify_cert() calls */ + int (*app_verify_callback)(X509_STORE_CTX *, void *); + void *app_verify_arg; + /* before OpenSSL 0.9.7, 'app_verify_arg' was ignored + * ('app_verify_callback' was called with just one argument) */ + + /* Default password callback. */ + pem_password_cb *default_passwd_callback; + + /* Default password callback user data. */ + void *default_passwd_callback_userdata; + + /* get client cert callback */ + int (*client_cert_cb)(SSL *ssl, X509 **x509, EVP_PKEY **pkey); + + /* cookie generate callback */ + int (*app_gen_cookie_cb)(SSL *ssl, unsigned char *cookie, + unsigned int *cookie_len); + + /* verify cookie callback */ + int (*app_verify_cookie_cb)(SSL *ssl, unsigned char *cookie, + unsigned int cookie_len); + + CRYPTO_EX_DATA ex_data; + + const EVP_MD *rsa_md5;/* For SSLv2 - name is 'ssl2-md5' */ + const EVP_MD *md5; /* For SSLv3/TLSv1 'ssl3-md5' */ + const EVP_MD *sha1; /* For SSLv3/TLSv1 'ssl3->sha1' */ + + STACK_OF(X509) *extra_certs; + STACK_OF(SSL_COMP) *comp_methods; /* stack of SSL_COMP, SSLv3/TLSv1 */ + + + /* Default values used when no per-SSL value is defined follow */ + + void (*info_callback)(const SSL *ssl,int type,int val); /* used if SSL's info_callback is NULL */ + + /* what we put in client cert requests */ + STACK_OF(X509_NAME) *client_CA; + + + /* Default values to use in SSL structures follow (these are copied by SSL_new) */ + + unsigned long options; + unsigned long mode; + long max_cert_list; + + struct cert_st /* CERT */ *cert; + int read_ahead; + + /* callback that allows applications to peek at protocol messages */ + void (*msg_callback)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg); + void *msg_callback_arg; + + int verify_mode; + unsigned int sid_ctx_length; + unsigned char sid_ctx[SSL_MAX_SID_CTX_LENGTH]; + int (*default_verify_callback)(int ok,X509_STORE_CTX *ctx); /* called 'verify_callback' in the SSL */ + + /* Default generate session ID callback. */ + GEN_SESSION_CB generate_session_id; + + X509_VERIFY_PARAM *param; + +#if 0 + int purpose; /* Purpose setting */ + int trust; /* Trust setting */ +#endif + + int quiet_shutdown; + + /* Maximum amount of data to send in one fragment. + * actual record size can be more than this due to + * padding and MAC overheads. + */ + unsigned int max_send_fragment; + +#ifndef OPENSSL_ENGINE + /* Engine to pass requests for client certs to + */ + ENGINE *client_cert_engine; +#endif + +#ifndef OPENSSL_NO_TLSEXT + /* TLS extensions servername callback */ + int (*tlsext_servername_callback)(SSL*, int *, void *); + void *tlsext_servername_arg; + /* RFC 4507 session ticket keys */ + unsigned char tlsext_tick_key_name[16]; + unsigned char tlsext_tick_hmac_key[16]; + unsigned char tlsext_tick_aes_key[16]; + /* Callback to support customisation of ticket key setting */ + int (*tlsext_ticket_key_cb)(SSL *ssl, + unsigned char *name, unsigned char *iv, + EVP_CIPHER_CTX *ectx, + HMAC_CTX *hctx, int enc); + + /* certificate status request info */ + /* Callback for status request */ + int (*tlsext_status_cb)(SSL *ssl, void *arg); + void *tlsext_status_arg; + + /* draft-rescorla-tls-opaque-prf-input-00.txt information */ + int (*tlsext_opaque_prf_input_callback)(SSL *, void *peerinput, size_t len, void *arg); + void *tlsext_opaque_prf_input_callback_arg; +#endif + +#ifndef OPENSSL_NO_PSK + char *psk_identity_hint; + unsigned int (*psk_client_callback)(SSL *ssl, const char *hint, char *identity, + unsigned int max_identity_len, unsigned char *psk, + unsigned int max_psk_len); + unsigned int (*psk_server_callback)(SSL *ssl, const char *identity, + unsigned char *psk, unsigned int max_psk_len); +#endif + +#ifndef OPENSSL_NO_BUF_FREELISTS +#define SSL_MAX_BUF_FREELIST_LEN_DEFAULT 32 + unsigned int freelist_max_len; + struct ssl3_buf_freelist_st *wbuf_freelist; + struct ssl3_buf_freelist_st *rbuf_freelist; +#endif + }; + +#define SSL_SESS_CACHE_OFF 0x0000 +#define SSL_SESS_CACHE_CLIENT 0x0001 +#define SSL_SESS_CACHE_SERVER 0x0002 +#define SSL_SESS_CACHE_BOTH (SSL_SESS_CACHE_CLIENT|SSL_SESS_CACHE_SERVER) +#define SSL_SESS_CACHE_NO_AUTO_CLEAR 0x0080 +/* enough comments already ... see SSL_CTX_set_session_cache_mode(3) */ +#define SSL_SESS_CACHE_NO_INTERNAL_LOOKUP 0x0100 +#define SSL_SESS_CACHE_NO_INTERNAL_STORE 0x0200 +#define SSL_SESS_CACHE_NO_INTERNAL \ + (SSL_SESS_CACHE_NO_INTERNAL_LOOKUP|SSL_SESS_CACHE_NO_INTERNAL_STORE) + +LHASH_OF(SSL_SESSION) *SSL_CTX_sessions(SSL_CTX *ctx); +#define SSL_CTX_sess_number(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_NUMBER,0,NULL) +#define SSL_CTX_sess_connect(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT,0,NULL) +#define SSL_CTX_sess_connect_good(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT_GOOD,0,NULL) +#define SSL_CTX_sess_connect_renegotiate(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT_RENEGOTIATE,0,NULL) +#define SSL_CTX_sess_accept(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT,0,NULL) +#define SSL_CTX_sess_accept_renegotiate(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT_RENEGOTIATE,0,NULL) +#define SSL_CTX_sess_accept_good(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT_GOOD,0,NULL) +#define SSL_CTX_sess_hits(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_HIT,0,NULL) +#define SSL_CTX_sess_cb_hits(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CB_HIT,0,NULL) +#define SSL_CTX_sess_misses(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_MISSES,0,NULL) +#define SSL_CTX_sess_timeouts(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_TIMEOUTS,0,NULL) +#define SSL_CTX_sess_cache_full(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CACHE_FULL,0,NULL) + +void SSL_CTX_sess_set_new_cb(SSL_CTX *ctx, int (*new_session_cb)(struct ssl_st *ssl,SSL_SESSION *sess)); +int (*SSL_CTX_sess_get_new_cb(SSL_CTX *ctx))(struct ssl_st *ssl, SSL_SESSION *sess); +void SSL_CTX_sess_set_remove_cb(SSL_CTX *ctx, void (*remove_session_cb)(struct ssl_ctx_st *ctx,SSL_SESSION *sess)); +void (*SSL_CTX_sess_get_remove_cb(SSL_CTX *ctx))(struct ssl_ctx_st *ctx, SSL_SESSION *sess); +void SSL_CTX_sess_set_get_cb(SSL_CTX *ctx, SSL_SESSION *(*get_session_cb)(struct ssl_st *ssl, unsigned char *data,int len,int *copy)); +SSL_SESSION *(*SSL_CTX_sess_get_get_cb(SSL_CTX *ctx))(struct ssl_st *ssl, unsigned char *Data, int len, int *copy); +void SSL_CTX_set_info_callback(SSL_CTX *ctx, void (*cb)(const SSL *ssl,int type,int val)); +void (*SSL_CTX_get_info_callback(SSL_CTX *ctx))(const SSL *ssl,int type,int val); +void SSL_CTX_set_client_cert_cb(SSL_CTX *ctx, int (*client_cert_cb)(SSL *ssl, X509 **x509, EVP_PKEY **pkey)); +int (*SSL_CTX_get_client_cert_cb(SSL_CTX *ctx))(SSL *ssl, X509 **x509, EVP_PKEY **pkey); +#ifndef OPENSSL_NO_ENGINE +int SSL_CTX_set_client_cert_engine(SSL_CTX *ctx, ENGINE *e); +#endif +void SSL_CTX_set_cookie_generate_cb(SSL_CTX *ctx, int (*app_gen_cookie_cb)(SSL *ssl, unsigned char *cookie, unsigned int *cookie_len)); +void SSL_CTX_set_cookie_verify_cb(SSL_CTX *ctx, int (*app_verify_cookie_cb)(SSL *ssl, unsigned char *cookie, unsigned int cookie_len)); + +#ifndef OPENSSL_NO_PSK +/* the maximum length of the buffer given to callbacks containing the + * resulting identity/psk */ +#define PSK_MAX_IDENTITY_LEN 128 +#define PSK_MAX_PSK_LEN 256 +void SSL_CTX_set_psk_client_callback(SSL_CTX *ctx, + unsigned int (*psk_client_callback)(SSL *ssl, const char *hint, + char *identity, unsigned int max_identity_len, unsigned char *psk, + unsigned int max_psk_len)); +void SSL_set_psk_client_callback(SSL *ssl, + unsigned int (*psk_client_callback)(SSL *ssl, const char *hint, + char *identity, unsigned int max_identity_len, unsigned char *psk, + unsigned int max_psk_len)); +void SSL_CTX_set_psk_server_callback(SSL_CTX *ctx, + unsigned int (*psk_server_callback)(SSL *ssl, const char *identity, + unsigned char *psk, unsigned int max_psk_len)); +void SSL_set_psk_server_callback(SSL *ssl, + unsigned int (*psk_server_callback)(SSL *ssl, const char *identity, + unsigned char *psk, unsigned int max_psk_len)); +int SSL_CTX_use_psk_identity_hint(SSL_CTX *ctx, const char *identity_hint); +int SSL_use_psk_identity_hint(SSL *s, const char *identity_hint); +const char *SSL_get_psk_identity_hint(const SSL *s); +const char *SSL_get_psk_identity(const SSL *s); +#endif + +#define SSL_NOTHING 1 +#define SSL_WRITING 2 +#define SSL_READING 3 +#define SSL_X509_LOOKUP 4 + +/* These will only be used when doing non-blocking IO */ +#define SSL_want_nothing(s) (SSL_want(s) == SSL_NOTHING) +#define SSL_want_read(s) (SSL_want(s) == SSL_READING) +#define SSL_want_write(s) (SSL_want(s) == SSL_WRITING) +#define SSL_want_x509_lookup(s) (SSL_want(s) == SSL_X509_LOOKUP) + +#define SSL_MAC_FLAG_READ_MAC_STREAM 1 +#define SSL_MAC_FLAG_WRITE_MAC_STREAM 2 + +struct ssl_st + { + /* protocol version + * (one of SSL2_VERSION, SSL3_VERSION, TLS1_VERSION, DTLS1_VERSION) + */ + int version; + int type; /* SSL_ST_CONNECT or SSL_ST_ACCEPT */ + + const SSL_METHOD *method; /* SSLv3 */ + + /* There are 2 BIO's even though they are normally both the + * same. This is so data can be read and written to different + * handlers */ + +#ifndef OPENSSL_NO_BIO + BIO *rbio; /* used by SSL_read */ + BIO *wbio; /* used by SSL_write */ + BIO *bbio; /* used during session-id reuse to concatenate + * messages */ +#else + char *rbio; /* used by SSL_read */ + char *wbio; /* used by SSL_write */ + char *bbio; +#endif + /* This holds a variable that indicates what we were doing + * when a 0 or -1 is returned. This is needed for + * non-blocking IO so we know what request needs re-doing when + * in SSL_accept or SSL_connect */ + int rwstate; + + /* true when we are actually in SSL_accept() or SSL_connect() */ + int in_handshake; + int (*handshake_func)(SSL *); + + /* Imagine that here's a boolean member "init" that is + * switched as soon as SSL_set_{accept/connect}_state + * is called for the first time, so that "state" and + * "handshake_func" are properly initialized. But as + * handshake_func is == 0 until then, we use this + * test instead of an "init" member. + */ + + int server; /* are we the server side? - mostly used by SSL_clear*/ + + int new_session;/* 1 if we are to use a new session. + * 2 if we are a server and are inside a handshake + * (i.e. not just sending a HelloRequest) + * NB: For servers, the 'new' session may actually be a previously + * cached session or even the previous session unless + * SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION is set */ + int quiet_shutdown;/* don't send shutdown packets */ + int shutdown; /* we have shut things down, 0x01 sent, 0x02 + * for received */ + int state; /* where we are */ + int rstate; /* where we are when reading */ + + BUF_MEM *init_buf; /* buffer used during init */ + void *init_msg; /* pointer to handshake message body, set by ssl3_get_message() */ + int init_num; /* amount read/written */ + int init_off; /* amount read/written */ + + /* used internally to point at a raw packet */ + unsigned char *packet; + unsigned int packet_length; + + struct ssl2_state_st *s2; /* SSLv2 variables */ + struct ssl3_state_st *s3; /* SSLv3 variables */ + struct dtls1_state_st *d1; /* DTLSv1 variables */ + + int read_ahead; /* Read as many input bytes as possible + * (for non-blocking reads) */ + + /* callback that allows applications to peek at protocol messages */ + void (*msg_callback)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg); + void *msg_callback_arg; + + int hit; /* reusing a previous session */ + + X509_VERIFY_PARAM *param; + +#if 0 + int purpose; /* Purpose setting */ + int trust; /* Trust setting */ +#endif + + /* crypto */ + STACK_OF(SSL_CIPHER) *cipher_list; + STACK_OF(SSL_CIPHER) *cipher_list_by_id; + + /* These are the ones being used, the ones in SSL_SESSION are + * the ones to be 'copied' into these ones */ + int mac_flags; + EVP_CIPHER_CTX *enc_read_ctx; /* cryptographic state */ + EVP_MD_CTX *read_hash; /* used for mac generation */ +#ifndef OPENSSL_NO_COMP + COMP_CTX *expand; /* uncompress */ +#else + char *expand; +#endif + + EVP_CIPHER_CTX *enc_write_ctx; /* cryptographic state */ + EVP_MD_CTX *write_hash; /* used for mac generation */ +#ifndef OPENSSL_NO_COMP + COMP_CTX *compress; /* compression */ +#else + char *compress; +#endif + + /* session info */ + + /* client cert? */ + /* This is used to hold the server certificate used */ + struct cert_st /* CERT */ *cert; + + /* the session_id_context is used to ensure sessions are only reused + * in the appropriate context */ + unsigned int sid_ctx_length; + unsigned char sid_ctx[SSL_MAX_SID_CTX_LENGTH]; + + /* This can also be in the session once a session is established */ + SSL_SESSION *session; + + /* Default generate session ID callback. */ + GEN_SESSION_CB generate_session_id; + + /* Used in SSL2 and SSL3 */ + int verify_mode; /* 0 don't care about verify failure. + * 1 fail if verify fails */ + int (*verify_callback)(int ok,X509_STORE_CTX *ctx); /* fail if callback returns 0 */ + + void (*info_callback)(const SSL *ssl,int type,int val); /* optional informational callback */ + + int error; /* error bytes to be written */ + int error_code; /* actual code */ + +#ifndef OPENSSL_NO_KRB5 + KSSL_CTX *kssl_ctx; /* Kerberos 5 context */ +#endif /* OPENSSL_NO_KRB5 */ + +#ifndef OPENSSL_NO_PSK + unsigned int (*psk_client_callback)(SSL *ssl, const char *hint, char *identity, + unsigned int max_identity_len, unsigned char *psk, + unsigned int max_psk_len); + unsigned int (*psk_server_callback)(SSL *ssl, const char *identity, + unsigned char *psk, unsigned int max_psk_len); +#endif + + SSL_CTX *ctx; + /* set this flag to 1 and a sleep(1) is put into all SSL_read() + * and SSL_write() calls, good for nbio debuging :-) */ + int debug; + + /* extra application data */ + long verify_result; + CRYPTO_EX_DATA ex_data; + + /* for server side, keep the list of CA_dn we can use */ + STACK_OF(X509_NAME) *client_CA; + + int references; + unsigned long options; /* protocol behaviour */ + unsigned long mode; /* API behaviour */ + long max_cert_list; + int first_packet; + int client_version; /* what was passed, used for + * SSLv3/TLS rollback check */ + unsigned int max_send_fragment; +#ifndef OPENSSL_NO_TLSEXT + /* TLS extension debug callback */ + void (*tlsext_debug_cb)(SSL *s, int client_server, int type, + unsigned char *data, int len, + void *arg); + void *tlsext_debug_arg; + char *tlsext_hostname; + int servername_done; /* no further mod of servername + 0 : call the servername extension callback. + 1 : prepare 2, allow last ack just after in server callback. + 2 : don't call servername callback, no ack in server hello + */ + /* certificate status request info */ + /* Status type or -1 if no status type */ + int tlsext_status_type; + /* Expect OCSP CertificateStatus message */ + int tlsext_status_expected; + /* OCSP status request only */ + STACK_OF(OCSP_RESPID) *tlsext_ocsp_ids; + X509_EXTENSIONS *tlsext_ocsp_exts; + /* OCSP response received or to be sent */ + unsigned char *tlsext_ocsp_resp; + int tlsext_ocsp_resplen; + + /* RFC4507 session ticket expected to be received or sent */ + int tlsext_ticket_expected; +#ifndef OPENSSL_NO_EC + size_t tlsext_ecpointformatlist_length; + unsigned char *tlsext_ecpointformatlist; /* our list */ + size_t tlsext_ellipticcurvelist_length; + unsigned char *tlsext_ellipticcurvelist; /* our list */ +#endif /* OPENSSL_NO_EC */ + + /* draft-rescorla-tls-opaque-prf-input-00.txt information to be used for handshakes */ + void *tlsext_opaque_prf_input; + size_t tlsext_opaque_prf_input_len; + + /* TLS Session Ticket extension override */ + TLS_SESSION_TICKET_EXT *tlsext_session_ticket; + + /* TLS Session Ticket extension callback */ + tls_session_ticket_ext_cb_fn tls_session_ticket_ext_cb; + void *tls_session_ticket_ext_cb_arg; + + /* TLS pre-shared secret session resumption */ + tls_session_secret_cb_fn tls_session_secret_cb; + void *tls_session_secret_cb_arg; + + SSL_CTX * initial_ctx; /* initial ctx, used to store sessions */ +#define session_ctx initial_ctx +#else +#define session_ctx ctx +#endif /* OPENSSL_NO_TLSEXT */ + }; + +#ifdef __cplusplus +} +#endif + +#include +#include +#include /* This is mostly sslv3 with a few tweaks */ +#include /* Datagram TLS */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* compatibility */ +#define SSL_set_app_data(s,arg) (SSL_set_ex_data(s,0,(char *)arg)) +#define SSL_get_app_data(s) (SSL_get_ex_data(s,0)) +#define SSL_SESSION_set_app_data(s,a) (SSL_SESSION_set_ex_data(s,0,(char *)a)) +#define SSL_SESSION_get_app_data(s) (SSL_SESSION_get_ex_data(s,0)) +#define SSL_CTX_get_app_data(ctx) (SSL_CTX_get_ex_data(ctx,0)) +#define SSL_CTX_set_app_data(ctx,arg) (SSL_CTX_set_ex_data(ctx,0,(char *)arg)) + +/* The following are the possible values for ssl->state are are + * used to indicate where we are up to in the SSL connection establishment. + * The macros that follow are about the only things you should need to use + * and even then, only when using non-blocking IO. + * It can also be useful to work out where you were when the connection + * failed */ + +#define SSL_ST_CONNECT 0x1000 +#define SSL_ST_ACCEPT 0x2000 +#define SSL_ST_MASK 0x0FFF +#define SSL_ST_INIT (SSL_ST_CONNECT|SSL_ST_ACCEPT) +#define SSL_ST_BEFORE 0x4000 +#define SSL_ST_OK 0x03 +#define SSL_ST_RENEGOTIATE (0x04|SSL_ST_INIT) + +#define SSL_CB_LOOP 0x01 +#define SSL_CB_EXIT 0x02 +#define SSL_CB_READ 0x04 +#define SSL_CB_WRITE 0x08 +#define SSL_CB_ALERT 0x4000 /* used in callback */ +#define SSL_CB_READ_ALERT (SSL_CB_ALERT|SSL_CB_READ) +#define SSL_CB_WRITE_ALERT (SSL_CB_ALERT|SSL_CB_WRITE) +#define SSL_CB_ACCEPT_LOOP (SSL_ST_ACCEPT|SSL_CB_LOOP) +#define SSL_CB_ACCEPT_EXIT (SSL_ST_ACCEPT|SSL_CB_EXIT) +#define SSL_CB_CONNECT_LOOP (SSL_ST_CONNECT|SSL_CB_LOOP) +#define SSL_CB_CONNECT_EXIT (SSL_ST_CONNECT|SSL_CB_EXIT) +#define SSL_CB_HANDSHAKE_START 0x10 +#define SSL_CB_HANDSHAKE_DONE 0x20 + +/* Is the SSL_connection established? */ +#define SSL_get_state(a) SSL_state(a) +#define SSL_is_init_finished(a) (SSL_state(a) == SSL_ST_OK) +#define SSL_in_init(a) (SSL_state(a)&SSL_ST_INIT) +#define SSL_in_before(a) (SSL_state(a)&SSL_ST_BEFORE) +#define SSL_in_connect_init(a) (SSL_state(a)&SSL_ST_CONNECT) +#define SSL_in_accept_init(a) (SSL_state(a)&SSL_ST_ACCEPT) + +/* The following 2 states are kept in ssl->rstate when reads fail, + * you should not need these */ +#define SSL_ST_READ_HEADER 0xF0 +#define SSL_ST_READ_BODY 0xF1 +#define SSL_ST_READ_DONE 0xF2 + +/* Obtain latest Finished message + * -- that we sent (SSL_get_finished) + * -- that we expected from peer (SSL_get_peer_finished). + * Returns length (0 == no Finished so far), copies up to 'count' bytes. */ +size_t SSL_get_finished(const SSL *s, void *buf, size_t count); +size_t SSL_get_peer_finished(const SSL *s, void *buf, size_t count); + +/* use either SSL_VERIFY_NONE or SSL_VERIFY_PEER, the last 2 options + * are 'ored' with SSL_VERIFY_PEER if they are desired */ +#define SSL_VERIFY_NONE 0x00 +#define SSL_VERIFY_PEER 0x01 +#define SSL_VERIFY_FAIL_IF_NO_PEER_CERT 0x02 +#define SSL_VERIFY_CLIENT_ONCE 0x04 + +#define OpenSSL_add_ssl_algorithms() SSL_library_init() +#define SSLeay_add_ssl_algorithms() SSL_library_init() + +/* this is for backward compatibility */ +#if 0 /* NEW_SSLEAY */ +#define SSL_CTX_set_default_verify(a,b,c) SSL_CTX_set_verify(a,b,c) +#define SSL_set_pref_cipher(c,n) SSL_set_cipher_list(c,n) +#define SSL_add_session(a,b) SSL_CTX_add_session((a),(b)) +#define SSL_remove_session(a,b) SSL_CTX_remove_session((a),(b)) +#define SSL_flush_sessions(a,b) SSL_CTX_flush_sessions((a),(b)) +#endif +/* More backward compatibility */ +#define SSL_get_cipher(s) \ + SSL_CIPHER_get_name(SSL_get_current_cipher(s)) +#define SSL_get_cipher_bits(s,np) \ + SSL_CIPHER_get_bits(SSL_get_current_cipher(s),np) +#define SSL_get_cipher_version(s) \ + SSL_CIPHER_get_version(SSL_get_current_cipher(s)) +#define SSL_get_cipher_name(s) \ + SSL_CIPHER_get_name(SSL_get_current_cipher(s)) +#define SSL_get_time(a) SSL_SESSION_get_time(a) +#define SSL_set_time(a,b) SSL_SESSION_set_time((a),(b)) +#define SSL_get_timeout(a) SSL_SESSION_get_timeout(a) +#define SSL_set_timeout(a,b) SSL_SESSION_set_timeout((a),(b)) + +#define d2i_SSL_SESSION_bio(bp,s_id) ASN1_d2i_bio_of(SSL_SESSION,SSL_SESSION_new,d2i_SSL_SESSION,bp,s_id) +#define i2d_SSL_SESSION_bio(bp,s_id) ASN1_i2d_bio_of(SSL_SESSION,i2d_SSL_SESSION,bp,s_id) + +DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) + +#define SSL_AD_REASON_OFFSET 1000 /* offset to get SSL_R_... value from SSL_AD_... */ + +/* These alert types are for SSLv3 and TLSv1 */ +#define SSL_AD_CLOSE_NOTIFY SSL3_AD_CLOSE_NOTIFY +#define SSL_AD_UNEXPECTED_MESSAGE SSL3_AD_UNEXPECTED_MESSAGE /* fatal */ +#define SSL_AD_BAD_RECORD_MAC SSL3_AD_BAD_RECORD_MAC /* fatal */ +#define SSL_AD_DECRYPTION_FAILED TLS1_AD_DECRYPTION_FAILED +#define SSL_AD_RECORD_OVERFLOW TLS1_AD_RECORD_OVERFLOW +#define SSL_AD_DECOMPRESSION_FAILURE SSL3_AD_DECOMPRESSION_FAILURE/* fatal */ +#define SSL_AD_HANDSHAKE_FAILURE SSL3_AD_HANDSHAKE_FAILURE/* fatal */ +#define SSL_AD_NO_CERTIFICATE SSL3_AD_NO_CERTIFICATE /* Not for TLS */ +#define SSL_AD_BAD_CERTIFICATE SSL3_AD_BAD_CERTIFICATE +#define SSL_AD_UNSUPPORTED_CERTIFICATE SSL3_AD_UNSUPPORTED_CERTIFICATE +#define SSL_AD_CERTIFICATE_REVOKED SSL3_AD_CERTIFICATE_REVOKED +#define SSL_AD_CERTIFICATE_EXPIRED SSL3_AD_CERTIFICATE_EXPIRED +#define SSL_AD_CERTIFICATE_UNKNOWN SSL3_AD_CERTIFICATE_UNKNOWN +#define SSL_AD_ILLEGAL_PARAMETER SSL3_AD_ILLEGAL_PARAMETER /* fatal */ +#define SSL_AD_UNKNOWN_CA TLS1_AD_UNKNOWN_CA /* fatal */ +#define SSL_AD_ACCESS_DENIED TLS1_AD_ACCESS_DENIED /* fatal */ +#define SSL_AD_DECODE_ERROR TLS1_AD_DECODE_ERROR /* fatal */ +#define SSL_AD_DECRYPT_ERROR TLS1_AD_DECRYPT_ERROR +#define SSL_AD_EXPORT_RESTRICTION TLS1_AD_EXPORT_RESTRICTION/* fatal */ +#define SSL_AD_PROTOCOL_VERSION TLS1_AD_PROTOCOL_VERSION /* fatal */ +#define SSL_AD_INSUFFICIENT_SECURITY TLS1_AD_INSUFFICIENT_SECURITY/* fatal */ +#define SSL_AD_INTERNAL_ERROR TLS1_AD_INTERNAL_ERROR /* fatal */ +#define SSL_AD_USER_CANCELLED TLS1_AD_USER_CANCELLED +#define SSL_AD_NO_RENEGOTIATION TLS1_AD_NO_RENEGOTIATION +#define SSL_AD_UNSUPPORTED_EXTENSION TLS1_AD_UNSUPPORTED_EXTENSION +#define SSL_AD_CERTIFICATE_UNOBTAINABLE TLS1_AD_CERTIFICATE_UNOBTAINABLE +#define SSL_AD_UNRECOGNIZED_NAME TLS1_AD_UNRECOGNIZED_NAME +#define SSL_AD_BAD_CERTIFICATE_STATUS_RESPONSE TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE +#define SSL_AD_BAD_CERTIFICATE_HASH_VALUE TLS1_AD_BAD_CERTIFICATE_HASH_VALUE +#define SSL_AD_UNKNOWN_PSK_IDENTITY TLS1_AD_UNKNOWN_PSK_IDENTITY /* fatal */ + +#define SSL_ERROR_NONE 0 +#define SSL_ERROR_SSL 1 +#define SSL_ERROR_WANT_READ 2 +#define SSL_ERROR_WANT_WRITE 3 +#define SSL_ERROR_WANT_X509_LOOKUP 4 +#define SSL_ERROR_SYSCALL 5 /* look at error stack/return value/errno */ +#define SSL_ERROR_ZERO_RETURN 6 +#define SSL_ERROR_WANT_CONNECT 7 +#define SSL_ERROR_WANT_ACCEPT 8 + +#define SSL_CTRL_NEED_TMP_RSA 1 +#define SSL_CTRL_SET_TMP_RSA 2 +#define SSL_CTRL_SET_TMP_DH 3 +#define SSL_CTRL_SET_TMP_ECDH 4 +#define SSL_CTRL_SET_TMP_RSA_CB 5 +#define SSL_CTRL_SET_TMP_DH_CB 6 +#define SSL_CTRL_SET_TMP_ECDH_CB 7 + +#define SSL_CTRL_GET_SESSION_REUSED 8 +#define SSL_CTRL_GET_CLIENT_CERT_REQUEST 9 +#define SSL_CTRL_GET_NUM_RENEGOTIATIONS 10 +#define SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS 11 +#define SSL_CTRL_GET_TOTAL_RENEGOTIATIONS 12 +#define SSL_CTRL_GET_FLAGS 13 +#define SSL_CTRL_EXTRA_CHAIN_CERT 14 + +#define SSL_CTRL_SET_MSG_CALLBACK 15 +#define SSL_CTRL_SET_MSG_CALLBACK_ARG 16 + +/* only applies to datagram connections */ +#define SSL_CTRL_SET_MTU 17 +/* Stats */ +#define SSL_CTRL_SESS_NUMBER 20 +#define SSL_CTRL_SESS_CONNECT 21 +#define SSL_CTRL_SESS_CONNECT_GOOD 22 +#define SSL_CTRL_SESS_CONNECT_RENEGOTIATE 23 +#define SSL_CTRL_SESS_ACCEPT 24 +#define SSL_CTRL_SESS_ACCEPT_GOOD 25 +#define SSL_CTRL_SESS_ACCEPT_RENEGOTIATE 26 +#define SSL_CTRL_SESS_HIT 27 +#define SSL_CTRL_SESS_CB_HIT 28 +#define SSL_CTRL_SESS_MISSES 29 +#define SSL_CTRL_SESS_TIMEOUTS 30 +#define SSL_CTRL_SESS_CACHE_FULL 31 +#define SSL_CTRL_OPTIONS 32 +#define SSL_CTRL_MODE 33 + +#define SSL_CTRL_GET_READ_AHEAD 40 +#define SSL_CTRL_SET_READ_AHEAD 41 +#define SSL_CTRL_SET_SESS_CACHE_SIZE 42 +#define SSL_CTRL_GET_SESS_CACHE_SIZE 43 +#define SSL_CTRL_SET_SESS_CACHE_MODE 44 +#define SSL_CTRL_GET_SESS_CACHE_MODE 45 + +#define SSL_CTRL_GET_MAX_CERT_LIST 50 +#define SSL_CTRL_SET_MAX_CERT_LIST 51 + +#define SSL_CTRL_SET_MAX_SEND_FRAGMENT 52 + +/* see tls1.h for macros based on these */ +#ifndef OPENSSL_NO_TLSEXT +#define SSL_CTRL_SET_TLSEXT_SERVERNAME_CB 53 +#define SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG 54 +#define SSL_CTRL_SET_TLSEXT_HOSTNAME 55 +#define SSL_CTRL_SET_TLSEXT_DEBUG_CB 56 +#define SSL_CTRL_SET_TLSEXT_DEBUG_ARG 57 +#define SSL_CTRL_GET_TLSEXT_TICKET_KEYS 58 +#define SSL_CTRL_SET_TLSEXT_TICKET_KEYS 59 +#define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT 60 +#define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB 61 +#define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB_ARG 62 +#define SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB 63 +#define SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG 64 +#define SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE 65 +#define SSL_CTRL_GET_TLSEXT_STATUS_REQ_EXTS 66 +#define SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS 67 +#define SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS 68 +#define SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS 69 +#define SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP 70 +#define SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP 71 + +#define SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB 72 +#endif + +#define DTLS_CTRL_GET_TIMEOUT 73 +#define DTLS_CTRL_HANDLE_TIMEOUT 74 +#define DTLS_CTRL_LISTEN 75 + +#define SSL_CTRL_GET_RI_SUPPORT 76 +#define SSL_CTRL_CLEAR_OPTIONS 77 +#define SSL_CTRL_CLEAR_MODE 78 + +#define DTLSv1_get_timeout(ssl, arg) \ + SSL_ctrl(ssl,DTLS_CTRL_GET_TIMEOUT,0, (void *)arg) +#define DTLSv1_handle_timeout(ssl) \ + SSL_ctrl(ssl,DTLS_CTRL_HANDLE_TIMEOUT,0, NULL) +#define DTLSv1_listen(ssl, peer) \ + SSL_ctrl(ssl,DTLS_CTRL_LISTEN,0, (void *)peer) + +#define SSL_session_reused(ssl) \ + SSL_ctrl((ssl),SSL_CTRL_GET_SESSION_REUSED,0,NULL) +#define SSL_num_renegotiations(ssl) \ + SSL_ctrl((ssl),SSL_CTRL_GET_NUM_RENEGOTIATIONS,0,NULL) +#define SSL_clear_num_renegotiations(ssl) \ + SSL_ctrl((ssl),SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS,0,NULL) +#define SSL_total_renegotiations(ssl) \ + SSL_ctrl((ssl),SSL_CTRL_GET_TOTAL_RENEGOTIATIONS,0,NULL) + +#define SSL_CTX_need_tmp_RSA(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_NEED_TMP_RSA,0,NULL) +#define SSL_CTX_set_tmp_rsa(ctx,rsa) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_RSA,0,(char *)rsa) +#define SSL_CTX_set_tmp_dh(ctx,dh) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_DH,0,(char *)dh) +#define SSL_CTX_set_tmp_ecdh(ctx,ecdh) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_ECDH,0,(char *)ecdh) + +#define SSL_need_tmp_RSA(ssl) \ + SSL_ctrl(ssl,SSL_CTRL_NEED_TMP_RSA,0,NULL) +#define SSL_set_tmp_rsa(ssl,rsa) \ + SSL_ctrl(ssl,SSL_CTRL_SET_TMP_RSA,0,(char *)rsa) +#define SSL_set_tmp_dh(ssl,dh) \ + SSL_ctrl(ssl,SSL_CTRL_SET_TMP_DH,0,(char *)dh) +#define SSL_set_tmp_ecdh(ssl,ecdh) \ + SSL_ctrl(ssl,SSL_CTRL_SET_TMP_ECDH,0,(char *)ecdh) + +#define SSL_CTX_add_extra_chain_cert(ctx,x509) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_EXTRA_CHAIN_CERT,0,(char *)x509) + +#ifndef OPENSSL_NO_BIO +BIO_METHOD *BIO_f_ssl(void); +BIO *BIO_new_ssl(SSL_CTX *ctx,int client); +BIO *BIO_new_ssl_connect(SSL_CTX *ctx); +BIO *BIO_new_buffer_ssl_connect(SSL_CTX *ctx); +int BIO_ssl_copy_session_id(BIO *to,BIO *from); +void BIO_ssl_shutdown(BIO *ssl_bio); + +#endif + +int SSL_CTX_set_cipher_list(SSL_CTX *,const char *str); +SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth); +void SSL_CTX_free(SSL_CTX *); +long SSL_CTX_set_timeout(SSL_CTX *ctx,long t); +long SSL_CTX_get_timeout(const SSL_CTX *ctx); +X509_STORE *SSL_CTX_get_cert_store(const SSL_CTX *); +void SSL_CTX_set_cert_store(SSL_CTX *,X509_STORE *); +int SSL_want(const SSL *s); +int SSL_clear(SSL *s); + +void SSL_CTX_flush_sessions(SSL_CTX *ctx,long tm); + +const SSL_CIPHER *SSL_get_current_cipher(const SSL *s); +int SSL_CIPHER_get_bits(const SSL_CIPHER *c,int *alg_bits); +char * SSL_CIPHER_get_version(const SSL_CIPHER *c); +const char * SSL_CIPHER_get_name(const SSL_CIPHER *c); + +int SSL_get_fd(const SSL *s); +int SSL_get_rfd(const SSL *s); +int SSL_get_wfd(const SSL *s); +const char * SSL_get_cipher_list(const SSL *s,int n); +char * SSL_get_shared_ciphers(const SSL *s, char *buf, int len); +int SSL_get_read_ahead(const SSL * s); +int SSL_pending(const SSL *s); +#ifndef OPENSSL_NO_SOCK +int SSL_set_fd(SSL *s, int fd); +int SSL_set_rfd(SSL *s, int fd); +int SSL_set_wfd(SSL *s, int fd); +#endif +#ifndef OPENSSL_NO_BIO +void SSL_set_bio(SSL *s, BIO *rbio,BIO *wbio); +BIO * SSL_get_rbio(const SSL *s); +BIO * SSL_get_wbio(const SSL *s); +#endif +int SSL_set_cipher_list(SSL *s, const char *str); +void SSL_set_read_ahead(SSL *s, int yes); +int SSL_get_verify_mode(const SSL *s); +int SSL_get_verify_depth(const SSL *s); +int (*SSL_get_verify_callback(const SSL *s))(int,X509_STORE_CTX *); +void SSL_set_verify(SSL *s, int mode, + int (*callback)(int ok,X509_STORE_CTX *ctx)); +void SSL_set_verify_depth(SSL *s, int depth); +#ifndef OPENSSL_NO_RSA +int SSL_use_RSAPrivateKey(SSL *ssl, RSA *rsa); +#endif +int SSL_use_RSAPrivateKey_ASN1(SSL *ssl, unsigned char *d, long len); +int SSL_use_PrivateKey(SSL *ssl, EVP_PKEY *pkey); +int SSL_use_PrivateKey_ASN1(int pk,SSL *ssl, const unsigned char *d, long len); +int SSL_use_certificate(SSL *ssl, X509 *x); +int SSL_use_certificate_ASN1(SSL *ssl, const unsigned char *d, int len); + +#ifndef OPENSSL_NO_STDIO +int SSL_use_RSAPrivateKey_file(SSL *ssl, const char *file, int type); +int SSL_use_PrivateKey_file(SSL *ssl, const char *file, int type); +int SSL_use_certificate_file(SSL *ssl, const char *file, int type); +int SSL_CTX_use_RSAPrivateKey_file(SSL_CTX *ctx, const char *file, int type); +int SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx, const char *file, int type); +int SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file, int type); +int SSL_CTX_use_certificate_chain_file(SSL_CTX *ctx, const char *file); /* PEM type */ +STACK_OF(X509_NAME) *SSL_load_client_CA_file(const char *file); +int SSL_add_file_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs, + const char *file); +#ifndef OPENSSL_SYS_VMS +#ifndef OPENSSL_SYS_MACINTOSH_CLASSIC /* XXXXX: Better scheme needed! [was: #ifndef MAC_OS_pre_X] */ +int SSL_add_dir_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs, + const char *dir); +#endif +#endif + +#endif + +void SSL_load_error_strings(void ); +const char *SSL_state_string(const SSL *s); +const char *SSL_rstate_string(const SSL *s); +const char *SSL_state_string_long(const SSL *s); +const char *SSL_rstate_string_long(const SSL *s); +long SSL_SESSION_get_time(const SSL_SESSION *s); +long SSL_SESSION_set_time(SSL_SESSION *s, long t); +long SSL_SESSION_get_timeout(const SSL_SESSION *s); +long SSL_SESSION_set_timeout(SSL_SESSION *s, long t); +void SSL_copy_session_id(SSL *to,const SSL *from); + +SSL_SESSION *SSL_SESSION_new(void); +const unsigned char *SSL_SESSION_get_id(const SSL_SESSION *s, + unsigned int *len); +#ifndef OPENSSL_NO_FP_API +int SSL_SESSION_print_fp(FILE *fp,const SSL_SESSION *ses); +#endif +#ifndef OPENSSL_NO_BIO +int SSL_SESSION_print(BIO *fp,const SSL_SESSION *ses); +#endif +void SSL_SESSION_free(SSL_SESSION *ses); +int i2d_SSL_SESSION(SSL_SESSION *in,unsigned char **pp); +int SSL_set_session(SSL *to, SSL_SESSION *session); +int SSL_CTX_add_session(SSL_CTX *s, SSL_SESSION *c); +int SSL_CTX_remove_session(SSL_CTX *,SSL_SESSION *c); +int SSL_CTX_set_generate_session_id(SSL_CTX *, GEN_SESSION_CB); +int SSL_set_generate_session_id(SSL *, GEN_SESSION_CB); +int SSL_has_matching_session_id(const SSL *ssl, const unsigned char *id, + unsigned int id_len); +SSL_SESSION *d2i_SSL_SESSION(SSL_SESSION **a,const unsigned char **pp, + long length); + +#ifdef HEADER_X509_H +X509 * SSL_get_peer_certificate(const SSL *s); +#endif + +STACK_OF(X509) *SSL_get_peer_cert_chain(const SSL *s); + +int SSL_CTX_get_verify_mode(const SSL_CTX *ctx); +int SSL_CTX_get_verify_depth(const SSL_CTX *ctx); +int (*SSL_CTX_get_verify_callback(const SSL_CTX *ctx))(int,X509_STORE_CTX *); +void SSL_CTX_set_verify(SSL_CTX *ctx,int mode, + int (*callback)(int, X509_STORE_CTX *)); +void SSL_CTX_set_verify_depth(SSL_CTX *ctx,int depth); +void SSL_CTX_set_cert_verify_callback(SSL_CTX *ctx, int (*cb)(X509_STORE_CTX *,void *), void *arg); +#ifndef OPENSSL_NO_RSA +int SSL_CTX_use_RSAPrivateKey(SSL_CTX *ctx, RSA *rsa); +#endif +int SSL_CTX_use_RSAPrivateKey_ASN1(SSL_CTX *ctx, const unsigned char *d, long len); +int SSL_CTX_use_PrivateKey(SSL_CTX *ctx, EVP_PKEY *pkey); +int SSL_CTX_use_PrivateKey_ASN1(int pk,SSL_CTX *ctx, + const unsigned char *d, long len); +int SSL_CTX_use_certificate(SSL_CTX *ctx, X509 *x); +int SSL_CTX_use_certificate_ASN1(SSL_CTX *ctx, int len, const unsigned char *d); + +void SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx, pem_password_cb *cb); +void SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX *ctx, void *u); + +int SSL_CTX_check_private_key(const SSL_CTX *ctx); +int SSL_check_private_key(const SSL *ctx); + +int SSL_CTX_set_session_id_context(SSL_CTX *ctx,const unsigned char *sid_ctx, + unsigned int sid_ctx_len); + +SSL * SSL_new(SSL_CTX *ctx); +int SSL_set_session_id_context(SSL *ssl,const unsigned char *sid_ctx, + unsigned int sid_ctx_len); + +int SSL_CTX_set_purpose(SSL_CTX *s, int purpose); +int SSL_set_purpose(SSL *s, int purpose); +int SSL_CTX_set_trust(SSL_CTX *s, int trust); +int SSL_set_trust(SSL *s, int trust); + +int SSL_CTX_set1_param(SSL_CTX *ctx, X509_VERIFY_PARAM *vpm); +int SSL_set1_param(SSL *ssl, X509_VERIFY_PARAM *vpm); + +void SSL_free(SSL *ssl); +int SSL_accept(SSL *ssl); +int SSL_connect(SSL *ssl); +int SSL_read(SSL *ssl,void *buf,int num); +int SSL_peek(SSL *ssl,void *buf,int num); +int SSL_write(SSL *ssl,const void *buf,int num); +long SSL_ctrl(SSL *ssl,int cmd, long larg, void *parg); +long SSL_callback_ctrl(SSL *, int, void (*)(void)); +long SSL_CTX_ctrl(SSL_CTX *ctx,int cmd, long larg, void *parg); +long SSL_CTX_callback_ctrl(SSL_CTX *, int, void (*)(void)); + +int SSL_get_error(const SSL *s,int ret_code); +const char *SSL_get_version(const SSL *s); + +/* This sets the 'default' SSL version that SSL_new() will create */ +int SSL_CTX_set_ssl_version(SSL_CTX *ctx, const SSL_METHOD *meth); + +#ifndef OPENSSL_NO_SSL2 +const SSL_METHOD *SSLv2_method(void); /* SSLv2 */ +const SSL_METHOD *SSLv2_server_method(void); /* SSLv2 */ +const SSL_METHOD *SSLv2_client_method(void); /* SSLv2 */ +#endif + +const SSL_METHOD *SSLv3_method(void); /* SSLv3 */ +const SSL_METHOD *SSLv3_server_method(void); /* SSLv3 */ +const SSL_METHOD *SSLv3_client_method(void); /* SSLv3 */ + +const SSL_METHOD *SSLv23_method(void); /* SSLv3 but can rollback to v2 */ +const SSL_METHOD *SSLv23_server_method(void); /* SSLv3 but can rollback to v2 */ +const SSL_METHOD *SSLv23_client_method(void); /* SSLv3 but can rollback to v2 */ + +const SSL_METHOD *TLSv1_method(void); /* TLSv1.0 */ +const SSL_METHOD *TLSv1_server_method(void); /* TLSv1.0 */ +const SSL_METHOD *TLSv1_client_method(void); /* TLSv1.0 */ + +const SSL_METHOD *DTLSv1_method(void); /* DTLSv1.0 */ +const SSL_METHOD *DTLSv1_server_method(void); /* DTLSv1.0 */ +const SSL_METHOD *DTLSv1_client_method(void); /* DTLSv1.0 */ + +STACK_OF(SSL_CIPHER) *SSL_get_ciphers(const SSL *s); + +int SSL_do_handshake(SSL *s); +int SSL_renegotiate(SSL *s); +int SSL_renegotiate_pending(SSL *s); +int SSL_shutdown(SSL *s); + +const SSL_METHOD *SSL_get_ssl_method(SSL *s); +int SSL_set_ssl_method(SSL *s, const SSL_METHOD *method); +const char *SSL_alert_type_string_long(int value); +const char *SSL_alert_type_string(int value); +const char *SSL_alert_desc_string_long(int value); +const char *SSL_alert_desc_string(int value); + +void SSL_set_client_CA_list(SSL *s, STACK_OF(X509_NAME) *name_list); +void SSL_CTX_set_client_CA_list(SSL_CTX *ctx, STACK_OF(X509_NAME) *name_list); +STACK_OF(X509_NAME) *SSL_get_client_CA_list(const SSL *s); +STACK_OF(X509_NAME) *SSL_CTX_get_client_CA_list(const SSL_CTX *s); +int SSL_add_client_CA(SSL *ssl,X509 *x); +int SSL_CTX_add_client_CA(SSL_CTX *ctx,X509 *x); + +void SSL_set_connect_state(SSL *s); +void SSL_set_accept_state(SSL *s); + +long SSL_get_default_timeout(const SSL *s); + +int SSL_library_init(void ); + +char *SSL_CIPHER_description(const SSL_CIPHER *,char *buf,int size); +STACK_OF(X509_NAME) *SSL_dup_CA_list(STACK_OF(X509_NAME) *sk); + +SSL *SSL_dup(SSL *ssl); + +X509 *SSL_get_certificate(const SSL *ssl); +/* EVP_PKEY */ struct evp_pkey_st *SSL_get_privatekey(SSL *ssl); + +void SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx,int mode); +int SSL_CTX_get_quiet_shutdown(const SSL_CTX *ctx); +void SSL_set_quiet_shutdown(SSL *ssl,int mode); +int SSL_get_quiet_shutdown(const SSL *ssl); +void SSL_set_shutdown(SSL *ssl,int mode); +int SSL_get_shutdown(const SSL *ssl); +int SSL_version(const SSL *ssl); +int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx); +int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile, + const char *CApath); +#define SSL_get0_session SSL_get_session /* just peek at pointer */ +SSL_SESSION *SSL_get_session(const SSL *ssl); +SSL_SESSION *SSL_get1_session(SSL *ssl); /* obtain a reference count */ +SSL_CTX *SSL_get_SSL_CTX(const SSL *ssl); +SSL_CTX *SSL_set_SSL_CTX(SSL *ssl, SSL_CTX* ctx); +void SSL_set_info_callback(SSL *ssl, + void (*cb)(const SSL *ssl,int type,int val)); +void (*SSL_get_info_callback(const SSL *ssl))(const SSL *ssl,int type,int val); +int SSL_state(const SSL *ssl); + +void SSL_set_verify_result(SSL *ssl,long v); +long SSL_get_verify_result(const SSL *ssl); + +int SSL_set_ex_data(SSL *ssl,int idx,void *data); +void *SSL_get_ex_data(const SSL *ssl,int idx); +int SSL_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, + CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); + +int SSL_SESSION_set_ex_data(SSL_SESSION *ss,int idx,void *data); +void *SSL_SESSION_get_ex_data(const SSL_SESSION *ss,int idx); +int SSL_SESSION_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, + CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); + +int SSL_CTX_set_ex_data(SSL_CTX *ssl,int idx,void *data); +void *SSL_CTX_get_ex_data(const SSL_CTX *ssl,int idx); +int SSL_CTX_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, + CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); + +int SSL_get_ex_data_X509_STORE_CTX_idx(void ); + +#define SSL_CTX_sess_set_cache_size(ctx,t) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SESS_CACHE_SIZE,t,NULL) +#define SSL_CTX_sess_get_cache_size(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_SESS_CACHE_SIZE,0,NULL) +#define SSL_CTX_set_session_cache_mode(ctx,m) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SESS_CACHE_MODE,m,NULL) +#define SSL_CTX_get_session_cache_mode(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_SESS_CACHE_MODE,0,NULL) + +#define SSL_CTX_get_default_read_ahead(ctx) SSL_CTX_get_read_ahead(ctx) +#define SSL_CTX_set_default_read_ahead(ctx,m) SSL_CTX_set_read_ahead(ctx,m) +#define SSL_CTX_get_read_ahead(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_READ_AHEAD,0,NULL) +#define SSL_CTX_set_read_ahead(ctx,m) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_READ_AHEAD,m,NULL) +#define SSL_CTX_get_max_cert_list(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_MAX_CERT_LIST,0,NULL) +#define SSL_CTX_set_max_cert_list(ctx,m) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_MAX_CERT_LIST,m,NULL) +#define SSL_get_max_cert_list(ssl) \ + SSL_ctrl(ssl,SSL_CTRL_GET_MAX_CERT_LIST,0,NULL) +#define SSL_set_max_cert_list(ssl,m) \ + SSL_ctrl(ssl,SSL_CTRL_SET_MAX_CERT_LIST,m,NULL) + +#define SSL_CTX_set_max_send_fragment(ctx,m) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_MAX_SEND_FRAGMENT,m,NULL) +#define SSL_set_max_send_fragment(ssl,m) \ + SSL_ctrl(ssl,SSL_CTRL_SET_MAX_SEND_FRAGMENT,m,NULL) + + /* NB: the keylength is only applicable when is_export is true */ +#ifndef OPENSSL_NO_RSA +void SSL_CTX_set_tmp_rsa_callback(SSL_CTX *ctx, + RSA *(*cb)(SSL *ssl,int is_export, + int keylength)); + +void SSL_set_tmp_rsa_callback(SSL *ssl, + RSA *(*cb)(SSL *ssl,int is_export, + int keylength)); +#endif +#ifndef OPENSSL_NO_DH +void SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx, + DH *(*dh)(SSL *ssl,int is_export, + int keylength)); +void SSL_set_tmp_dh_callback(SSL *ssl, + DH *(*dh)(SSL *ssl,int is_export, + int keylength)); +#endif +#ifndef OPENSSL_NO_ECDH +void SSL_CTX_set_tmp_ecdh_callback(SSL_CTX *ctx, + EC_KEY *(*ecdh)(SSL *ssl,int is_export, + int keylength)); +void SSL_set_tmp_ecdh_callback(SSL *ssl, + EC_KEY *(*ecdh)(SSL *ssl,int is_export, + int keylength)); +#endif + +#ifndef OPENSSL_NO_COMP +const COMP_METHOD *SSL_get_current_compression(SSL *s); +const COMP_METHOD *SSL_get_current_expansion(SSL *s); +const char *SSL_COMP_get_name(const COMP_METHOD *comp); +STACK_OF(SSL_COMP) *SSL_COMP_get_compression_methods(void); +int SSL_COMP_add_compression_method(int id,COMP_METHOD *cm); +#else +const void *SSL_get_current_compression(SSL *s); +const void *SSL_get_current_expansion(SSL *s); +const char *SSL_COMP_get_name(const void *comp); +void *SSL_COMP_get_compression_methods(void); +int SSL_COMP_add_compression_method(int id,void *cm); +#endif + +/* TLS extensions functions */ +int SSL_set_session_ticket_ext(SSL *s, void *ext_data, int ext_len); + +int SSL_set_session_ticket_ext_cb(SSL *s, tls_session_ticket_ext_cb_fn cb, + void *arg); + +/* Pre-shared secret session resumption functions */ +int SSL_set_session_secret_cb(SSL *s, tls_session_secret_cb_fn tls_session_secret_cb, void *arg); + +/* BEGIN ERROR CODES */ +/* The following lines are auto generated by the script mkerr.pl. Any changes + * made after this point may be overwritten when the script is next run. + */ +void ERR_load_SSL_strings(void); + +/* Error codes for the SSL functions. */ + +/* Function codes. */ +#define SSL_F_CLIENT_CERTIFICATE 100 +#define SSL_F_CLIENT_FINISHED 167 +#define SSL_F_CLIENT_HELLO 101 +#define SSL_F_CLIENT_MASTER_KEY 102 +#define SSL_F_D2I_SSL_SESSION 103 +#define SSL_F_DO_DTLS1_WRITE 245 +#define SSL_F_DO_SSL3_WRITE 104 +#define SSL_F_DTLS1_ACCEPT 246 +#define SSL_F_DTLS1_ADD_CERT_TO_BUF 295 +#define SSL_F_DTLS1_BUFFER_RECORD 247 +#define SSL_F_DTLS1_CLIENT_HELLO 248 +#define SSL_F_DTLS1_CONNECT 249 +#define SSL_F_DTLS1_ENC 250 +#define SSL_F_DTLS1_GET_HELLO_VERIFY 251 +#define SSL_F_DTLS1_GET_MESSAGE 252 +#define SSL_F_DTLS1_GET_MESSAGE_FRAGMENT 253 +#define SSL_F_DTLS1_GET_RECORD 254 +#define SSL_F_DTLS1_HANDLE_TIMEOUT 297 +#define SSL_F_DTLS1_OUTPUT_CERT_CHAIN 255 +#define SSL_F_DTLS1_PREPROCESS_FRAGMENT 288 +#define SSL_F_DTLS1_PROCESS_OUT_OF_SEQ_MESSAGE 256 +#define SSL_F_DTLS1_PROCESS_RECORD 257 +#define SSL_F_DTLS1_READ_BYTES 258 +#define SSL_F_DTLS1_READ_FAILED 259 +#define SSL_F_DTLS1_SEND_CERTIFICATE_REQUEST 260 +#define SSL_F_DTLS1_SEND_CLIENT_CERTIFICATE 261 +#define SSL_F_DTLS1_SEND_CLIENT_KEY_EXCHANGE 262 +#define SSL_F_DTLS1_SEND_CLIENT_VERIFY 263 +#define SSL_F_DTLS1_SEND_HELLO_VERIFY_REQUEST 264 +#define SSL_F_DTLS1_SEND_SERVER_CERTIFICATE 265 +#define SSL_F_DTLS1_SEND_SERVER_HELLO 266 +#define SSL_F_DTLS1_SEND_SERVER_KEY_EXCHANGE 267 +#define SSL_F_DTLS1_WRITE_APP_DATA_BYTES 268 +#define SSL_F_GET_CLIENT_FINISHED 105 +#define SSL_F_GET_CLIENT_HELLO 106 +#define SSL_F_GET_CLIENT_MASTER_KEY 107 +#define SSL_F_GET_SERVER_FINISHED 108 +#define SSL_F_GET_SERVER_HELLO 109 +#define SSL_F_GET_SERVER_VERIFY 110 +#define SSL_F_I2D_SSL_SESSION 111 +#define SSL_F_READ_N 112 +#define SSL_F_REQUEST_CERTIFICATE 113 +#define SSL_F_SERVER_FINISH 239 +#define SSL_F_SERVER_HELLO 114 +#define SSL_F_SERVER_VERIFY 240 +#define SSL_F_SSL23_ACCEPT 115 +#define SSL_F_SSL23_CLIENT_HELLO 116 +#define SSL_F_SSL23_CONNECT 117 +#define SSL_F_SSL23_GET_CLIENT_HELLO 118 +#define SSL_F_SSL23_GET_SERVER_HELLO 119 +#define SSL_F_SSL23_PEEK 237 +#define SSL_F_SSL23_READ 120 +#define SSL_F_SSL23_WRITE 121 +#define SSL_F_SSL2_ACCEPT 122 +#define SSL_F_SSL2_CONNECT 123 +#define SSL_F_SSL2_ENC_INIT 124 +#define SSL_F_SSL2_GENERATE_KEY_MATERIAL 241 +#define SSL_F_SSL2_PEEK 234 +#define SSL_F_SSL2_READ 125 +#define SSL_F_SSL2_READ_INTERNAL 236 +#define SSL_F_SSL2_SET_CERTIFICATE 126 +#define SSL_F_SSL2_WRITE 127 +#define SSL_F_SSL3_ACCEPT 128 +#define SSL_F_SSL3_ADD_CERT_TO_BUF 296 +#define SSL_F_SSL3_CALLBACK_CTRL 233 +#define SSL_F_SSL3_CHANGE_CIPHER_STATE 129 +#define SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM 130 +#define SSL_F_SSL3_CLIENT_HELLO 131 +#define SSL_F_SSL3_CONNECT 132 +#define SSL_F_SSL3_CTRL 213 +#define SSL_F_SSL3_CTX_CTRL 133 +#define SSL_F_SSL3_DIGEST_CACHED_RECORDS 293 +#define SSL_F_SSL3_DO_CHANGE_CIPHER_SPEC 292 +#define SSL_F_SSL3_ENC 134 +#define SSL_F_SSL3_GENERATE_KEY_BLOCK 238 +#define SSL_F_SSL3_GET_CERTIFICATE_REQUEST 135 +#define SSL_F_SSL3_GET_CERT_STATUS 289 +#define SSL_F_SSL3_GET_CERT_VERIFY 136 +#define SSL_F_SSL3_GET_CLIENT_CERTIFICATE 137 +#define SSL_F_SSL3_GET_CLIENT_HELLO 138 +#define SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE 139 +#define SSL_F_SSL3_GET_FINISHED 140 +#define SSL_F_SSL3_GET_KEY_EXCHANGE 141 +#define SSL_F_SSL3_GET_MESSAGE 142 +#define SSL_F_SSL3_GET_NEW_SESSION_TICKET 283 +#define SSL_F_SSL3_GET_RECORD 143 +#define SSL_F_SSL3_GET_SERVER_CERTIFICATE 144 +#define SSL_F_SSL3_GET_SERVER_DONE 145 +#define SSL_F_SSL3_GET_SERVER_HELLO 146 +#define SSL_F_SSL3_HANDSHAKE_MAC 285 +#define SSL_F_SSL3_NEW_SESSION_TICKET 287 +#define SSL_F_SSL3_OUTPUT_CERT_CHAIN 147 +#define SSL_F_SSL3_PEEK 235 +#define SSL_F_SSL3_READ_BYTES 148 +#define SSL_F_SSL3_READ_N 149 +#define SSL_F_SSL3_SEND_CERTIFICATE_REQUEST 150 +#define SSL_F_SSL3_SEND_CLIENT_CERTIFICATE 151 +#define SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE 152 +#define SSL_F_SSL3_SEND_CLIENT_VERIFY 153 +#define SSL_F_SSL3_SEND_SERVER_CERTIFICATE 154 +#define SSL_F_SSL3_SEND_SERVER_HELLO 242 +#define SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE 155 +#define SSL_F_SSL3_SETUP_KEY_BLOCK 157 +#define SSL_F_SSL3_SETUP_READ_BUFFER 156 +#define SSL_F_SSL3_SETUP_WRITE_BUFFER 291 +#define SSL_F_SSL3_WRITE_BYTES 158 +#define SSL_F_SSL3_WRITE_PENDING 159 +#define SSL_F_SSL_ADD_CLIENTHELLO_RENEGOTIATE_EXT 298 +#define SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT 277 +#define SSL_F_SSL_ADD_DIR_CERT_SUBJECTS_TO_STACK 215 +#define SSL_F_SSL_ADD_FILE_CERT_SUBJECTS_TO_STACK 216 +#define SSL_F_SSL_ADD_SERVERHELLO_RENEGOTIATE_EXT 299 +#define SSL_F_SSL_ADD_SERVERHELLO_TLSEXT 278 +#define SSL_F_SSL_BAD_METHOD 160 +#define SSL_F_SSL_BYTES_TO_CIPHER_LIST 161 +#define SSL_F_SSL_CERT_DUP 221 +#define SSL_F_SSL_CERT_INST 222 +#define SSL_F_SSL_CERT_INSTANTIATE 214 +#define SSL_F_SSL_CERT_NEW 162 +#define SSL_F_SSL_CHECK_PRIVATE_KEY 163 +#define SSL_F_SSL_CHECK_SERVERHELLO_TLSEXT 280 +#define SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG 279 +#define SSL_F_SSL_CIPHER_PROCESS_RULESTR 230 +#define SSL_F_SSL_CIPHER_STRENGTH_SORT 231 +#define SSL_F_SSL_CLEAR 164 +#define SSL_F_SSL_COMP_ADD_COMPRESSION_METHOD 165 +#define SSL_F_SSL_CREATE_CIPHER_LIST 166 +#define SSL_F_SSL_CTRL 232 +#define SSL_F_SSL_CTX_CHECK_PRIVATE_KEY 168 +#define SSL_F_SSL_CTX_NEW 169 +#define SSL_F_SSL_CTX_SET_CIPHER_LIST 269 +#define SSL_F_SSL_CTX_SET_CLIENT_CERT_ENGINE 290 +#define SSL_F_SSL_CTX_SET_PURPOSE 226 +#define SSL_F_SSL_CTX_SET_SESSION_ID_CONTEXT 219 +#define SSL_F_SSL_CTX_SET_SSL_VERSION 170 +#define SSL_F_SSL_CTX_SET_TRUST 229 +#define SSL_F_SSL_CTX_USE_CERTIFICATE 171 +#define SSL_F_SSL_CTX_USE_CERTIFICATE_ASN1 172 +#define SSL_F_SSL_CTX_USE_CERTIFICATE_CHAIN_FILE 220 +#define SSL_F_SSL_CTX_USE_CERTIFICATE_FILE 173 +#define SSL_F_SSL_CTX_USE_PRIVATEKEY 174 +#define SSL_F_SSL_CTX_USE_PRIVATEKEY_ASN1 175 +#define SSL_F_SSL_CTX_USE_PRIVATEKEY_FILE 176 +#define SSL_F_SSL_CTX_USE_PSK_IDENTITY_HINT 272 +#define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY 177 +#define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_ASN1 178 +#define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_FILE 179 +#define SSL_F_SSL_DO_HANDSHAKE 180 +#define SSL_F_SSL_GET_NEW_SESSION 181 +#define SSL_F_SSL_GET_PREV_SESSION 217 +#define SSL_F_SSL_GET_SERVER_SEND_CERT 182 +#define SSL_F_SSL_GET_SIGN_PKEY 183 +#define SSL_F_SSL_INIT_WBIO_BUFFER 184 +#define SSL_F_SSL_LOAD_CLIENT_CA_FILE 185 +#define SSL_F_SSL_NEW 186 +#define SSL_F_SSL_PARSE_CLIENTHELLO_RENEGOTIATE_EXT 300 +#define SSL_F_SSL_PARSE_CLIENTHELLO_TLSEXT 302 +#define SSL_F_SSL_PARSE_SERVERHELLO_RENEGOTIATE_EXT 301 +#define SSL_F_SSL_PARSE_SERVERHELLO_TLSEXT 303 +#define SSL_F_SSL_PEEK 270 +#define SSL_F_SSL_PREPARE_CLIENTHELLO_TLSEXT 281 +#define SSL_F_SSL_PREPARE_SERVERHELLO_TLSEXT 282 +#define SSL_F_SSL_READ 223 +#define SSL_F_SSL_RSA_PRIVATE_DECRYPT 187 +#define SSL_F_SSL_RSA_PUBLIC_ENCRYPT 188 +#define SSL_F_SSL_SESSION_NEW 189 +#define SSL_F_SSL_SESSION_PRINT_FP 190 +#define SSL_F_SSL_SESS_CERT_NEW 225 +#define SSL_F_SSL_SET_CERT 191 +#define SSL_F_SSL_SET_CIPHER_LIST 271 +#define SSL_F_SSL_SET_FD 192 +#define SSL_F_SSL_SET_PKEY 193 +#define SSL_F_SSL_SET_PURPOSE 227 +#define SSL_F_SSL_SET_RFD 194 +#define SSL_F_SSL_SET_SESSION 195 +#define SSL_F_SSL_SET_SESSION_ID_CONTEXT 218 +#define SSL_F_SSL_SET_SESSION_TICKET_EXT 294 +#define SSL_F_SSL_SET_TRUST 228 +#define SSL_F_SSL_SET_WFD 196 +#define SSL_F_SSL_SHUTDOWN 224 +#define SSL_F_SSL_UNDEFINED_CONST_FUNCTION 243 +#define SSL_F_SSL_UNDEFINED_FUNCTION 197 +#define SSL_F_SSL_UNDEFINED_VOID_FUNCTION 244 +#define SSL_F_SSL_USE_CERTIFICATE 198 +#define SSL_F_SSL_USE_CERTIFICATE_ASN1 199 +#define SSL_F_SSL_USE_CERTIFICATE_FILE 200 +#define SSL_F_SSL_USE_PRIVATEKEY 201 +#define SSL_F_SSL_USE_PRIVATEKEY_ASN1 202 +#define SSL_F_SSL_USE_PRIVATEKEY_FILE 203 +#define SSL_F_SSL_USE_PSK_IDENTITY_HINT 273 +#define SSL_F_SSL_USE_RSAPRIVATEKEY 204 +#define SSL_F_SSL_USE_RSAPRIVATEKEY_ASN1 205 +#define SSL_F_SSL_USE_RSAPRIVATEKEY_FILE 206 +#define SSL_F_SSL_VERIFY_CERT_CHAIN 207 +#define SSL_F_SSL_WRITE 208 +#define SSL_F_TLS1_CERT_VERIFY_MAC 286 +#define SSL_F_TLS1_CHANGE_CIPHER_STATE 209 +#define SSL_F_TLS1_CHECK_SERVERHELLO_TLSEXT 274 +#define SSL_F_TLS1_ENC 210 +#define SSL_F_TLS1_PREPARE_CLIENTHELLO_TLSEXT 275 +#define SSL_F_TLS1_PREPARE_SERVERHELLO_TLSEXT 276 +#define SSL_F_TLS1_PRF 284 +#define SSL_F_TLS1_SETUP_KEY_BLOCK 211 +#define SSL_F_WRITE_PENDING 212 + +/* Reason codes. */ +#define SSL_R_APP_DATA_IN_HANDSHAKE 100 +#define SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT 272 +#define SSL_R_BAD_ALERT_RECORD 101 +#define SSL_R_BAD_AUTHENTICATION_TYPE 102 +#define SSL_R_BAD_CHANGE_CIPHER_SPEC 103 +#define SSL_R_BAD_CHECKSUM 104 +#define SSL_R_BAD_DATA_RETURNED_BY_CALLBACK 106 +#define SSL_R_BAD_DECOMPRESSION 107 +#define SSL_R_BAD_DH_G_LENGTH 108 +#define SSL_R_BAD_DH_PUB_KEY_LENGTH 109 +#define SSL_R_BAD_DH_P_LENGTH 110 +#define SSL_R_BAD_DIGEST_LENGTH 111 +#define SSL_R_BAD_DSA_SIGNATURE 112 +#define SSL_R_BAD_ECC_CERT 304 +#define SSL_R_BAD_ECDSA_SIGNATURE 305 +#define SSL_R_BAD_ECPOINT 306 +#define SSL_R_BAD_HANDSHAKE_LENGTH 332 +#define SSL_R_BAD_HELLO_REQUEST 105 +#define SSL_R_BAD_LENGTH 271 +#define SSL_R_BAD_MAC_DECODE 113 +#define SSL_R_BAD_MAC_LENGTH 333 +#define SSL_R_BAD_MESSAGE_TYPE 114 +#define SSL_R_BAD_PACKET_LENGTH 115 +#define SSL_R_BAD_PROTOCOL_VERSION_NUMBER 116 +#define SSL_R_BAD_PSK_IDENTITY_HINT_LENGTH 316 +#define SSL_R_BAD_RESPONSE_ARGUMENT 117 +#define SSL_R_BAD_RSA_DECRYPT 118 +#define SSL_R_BAD_RSA_ENCRYPT 119 +#define SSL_R_BAD_RSA_E_LENGTH 120 +#define SSL_R_BAD_RSA_MODULUS_LENGTH 121 +#define SSL_R_BAD_RSA_SIGNATURE 122 +#define SSL_R_BAD_SIGNATURE 123 +#define SSL_R_BAD_SSL_FILETYPE 124 +#define SSL_R_BAD_SSL_SESSION_ID_LENGTH 125 +#define SSL_R_BAD_STATE 126 +#define SSL_R_BAD_WRITE_RETRY 127 +#define SSL_R_BIO_NOT_SET 128 +#define SSL_R_BLOCK_CIPHER_PAD_IS_WRONG 129 +#define SSL_R_BN_LIB 130 +#define SSL_R_CA_DN_LENGTH_MISMATCH 131 +#define SSL_R_CA_DN_TOO_LONG 132 +#define SSL_R_CCS_RECEIVED_EARLY 133 +#define SSL_R_CERTIFICATE_VERIFY_FAILED 134 +#define SSL_R_CERT_LENGTH_MISMATCH 135 +#define SSL_R_CHALLENGE_IS_DIFFERENT 136 +#define SSL_R_CIPHER_CODE_WRONG_LENGTH 137 +#define SSL_R_CIPHER_OR_HASH_UNAVAILABLE 138 +#define SSL_R_CIPHER_TABLE_SRC_ERROR 139 +#define SSL_R_CLIENTHELLO_TLSEXT 226 +#define SSL_R_COMPRESSED_LENGTH_TOO_LONG 140 +#define SSL_R_COMPRESSION_DISABLED 343 +#define SSL_R_COMPRESSION_FAILURE 141 +#define SSL_R_COMPRESSION_ID_NOT_WITHIN_PRIVATE_RANGE 307 +#define SSL_R_COMPRESSION_LIBRARY_ERROR 142 +#define SSL_R_CONNECTION_ID_IS_DIFFERENT 143 +#define SSL_R_CONNECTION_TYPE_NOT_SET 144 +#define SSL_R_COOKIE_MISMATCH 308 +#define SSL_R_DATA_BETWEEN_CCS_AND_FINISHED 145 +#define SSL_R_DATA_LENGTH_TOO_LONG 146 +#define SSL_R_DECRYPTION_FAILED 147 +#define SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC 281 +#define SSL_R_DH_PUBLIC_VALUE_LENGTH_IS_WRONG 148 +#define SSL_R_DIGEST_CHECK_FAILED 149 +#define SSL_R_DTLS_MESSAGE_TOO_BIG 334 +#define SSL_R_DUPLICATE_COMPRESSION_ID 309 +#define SSL_R_ECC_CERT_NOT_FOR_KEY_AGREEMENT 317 +#define SSL_R_ECC_CERT_NOT_FOR_SIGNING 318 +#define SSL_R_ECC_CERT_SHOULD_HAVE_RSA_SIGNATURE 322 +#define SSL_R_ECC_CERT_SHOULD_HAVE_SHA1_SIGNATURE 323 +#define SSL_R_ECGROUP_TOO_LARGE_FOR_CIPHER 310 +#define SSL_R_ENCRYPTED_LENGTH_TOO_LONG 150 +#define SSL_R_ERROR_GENERATING_TMP_RSA_KEY 282 +#define SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST 151 +#define SSL_R_EXCESSIVE_MESSAGE_SIZE 152 +#define SSL_R_EXTRA_DATA_IN_MESSAGE 153 +#define SSL_R_GOT_A_FIN_BEFORE_A_CCS 154 +#define SSL_R_HTTPS_PROXY_REQUEST 155 +#define SSL_R_HTTP_REQUEST 156 +#define SSL_R_ILLEGAL_PADDING 283 +#define SSL_R_INCONSISTENT_COMPRESSION 340 +#define SSL_R_INVALID_CHALLENGE_LENGTH 158 +#define SSL_R_INVALID_COMMAND 280 +#define SSL_R_INVALID_COMPRESSION_ALGORITHM 341 +#define SSL_R_INVALID_PURPOSE 278 +#define SSL_R_INVALID_STATUS_RESPONSE 328 +#define SSL_R_INVALID_TICKET_KEYS_LENGTH 325 +#define SSL_R_INVALID_TRUST 279 +#define SSL_R_KEY_ARG_TOO_LONG 284 +#define SSL_R_KRB5 285 +#define SSL_R_KRB5_C_CC_PRINC 286 +#define SSL_R_KRB5_C_GET_CRED 287 +#define SSL_R_KRB5_C_INIT 288 +#define SSL_R_KRB5_C_MK_REQ 289 +#define SSL_R_KRB5_S_BAD_TICKET 290 +#define SSL_R_KRB5_S_INIT 291 +#define SSL_R_KRB5_S_RD_REQ 292 +#define SSL_R_KRB5_S_TKT_EXPIRED 293 +#define SSL_R_KRB5_S_TKT_NYV 294 +#define SSL_R_KRB5_S_TKT_SKEW 295 +#define SSL_R_LENGTH_MISMATCH 159 +#define SSL_R_LENGTH_TOO_SHORT 160 +#define SSL_R_LIBRARY_BUG 274 +#define SSL_R_LIBRARY_HAS_NO_CIPHERS 161 +#define SSL_R_MESSAGE_TOO_LONG 296 +#define SSL_R_MISSING_DH_DSA_CERT 162 +#define SSL_R_MISSING_DH_KEY 163 +#define SSL_R_MISSING_DH_RSA_CERT 164 +#define SSL_R_MISSING_DSA_SIGNING_CERT 165 +#define SSL_R_MISSING_EXPORT_TMP_DH_KEY 166 +#define SSL_R_MISSING_EXPORT_TMP_RSA_KEY 167 +#define SSL_R_MISSING_RSA_CERTIFICATE 168 +#define SSL_R_MISSING_RSA_ENCRYPTING_CERT 169 +#define SSL_R_MISSING_RSA_SIGNING_CERT 170 +#define SSL_R_MISSING_TMP_DH_KEY 171 +#define SSL_R_MISSING_TMP_ECDH_KEY 311 +#define SSL_R_MISSING_TMP_RSA_KEY 172 +#define SSL_R_MISSING_TMP_RSA_PKEY 173 +#define SSL_R_MISSING_VERIFY_MESSAGE 174 +#define SSL_R_NON_SSLV2_INITIAL_PACKET 175 +#define SSL_R_NO_CERTIFICATES_RETURNED 176 +#define SSL_R_NO_CERTIFICATE_ASSIGNED 177 +#define SSL_R_NO_CERTIFICATE_RETURNED 178 +#define SSL_R_NO_CERTIFICATE_SET 179 +#define SSL_R_NO_CERTIFICATE_SPECIFIED 180 +#define SSL_R_NO_CIPHERS_AVAILABLE 181 +#define SSL_R_NO_CIPHERS_PASSED 182 +#define SSL_R_NO_CIPHERS_SPECIFIED 183 +#define SSL_R_NO_CIPHER_LIST 184 +#define SSL_R_NO_CIPHER_MATCH 185 +#define SSL_R_NO_CLIENT_CERT_METHOD 331 +#define SSL_R_NO_CLIENT_CERT_RECEIVED 186 +#define SSL_R_NO_COMPRESSION_SPECIFIED 187 +#define SSL_R_NO_GOST_CERTIFICATE_SENT_BY_PEER 330 +#define SSL_R_NO_METHOD_SPECIFIED 188 +#define SSL_R_NO_PRIVATEKEY 189 +#define SSL_R_NO_PRIVATE_KEY_ASSIGNED 190 +#define SSL_R_NO_PROTOCOLS_AVAILABLE 191 +#define SSL_R_NO_PUBLICKEY 192 +#define SSL_R_NO_RENEGOTIATION 339 +#define SSL_R_NO_REQUIRED_DIGEST 324 +#define SSL_R_NO_SHARED_CIPHER 193 +#define SSL_R_NO_VERIFY_CALLBACK 194 +#define SSL_R_NULL_SSL_CTX 195 +#define SSL_R_NULL_SSL_METHOD_PASSED 196 +#define SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED 197 +#define SSL_R_OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED 344 +#define SSL_R_ONLY_TLS_ALLOWED_IN_FIPS_MODE 297 +#define SSL_R_OPAQUE_PRF_INPUT_TOO_LONG 327 +#define SSL_R_PACKET_LENGTH_TOO_LONG 198 +#define SSL_R_PARSE_TLSEXT 227 +#define SSL_R_PATH_TOO_LONG 270 +#define SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE 199 +#define SSL_R_PEER_ERROR 200 +#define SSL_R_PEER_ERROR_CERTIFICATE 201 +#define SSL_R_PEER_ERROR_NO_CERTIFICATE 202 +#define SSL_R_PEER_ERROR_NO_CIPHER 203 +#define SSL_R_PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE 204 +#define SSL_R_PRE_MAC_LENGTH_TOO_LONG 205 +#define SSL_R_PROBLEMS_MAPPING_CIPHER_FUNCTIONS 206 +#define SSL_R_PROTOCOL_IS_SHUTDOWN 207 +#define SSL_R_PSK_IDENTITY_NOT_FOUND 223 +#define SSL_R_PSK_NO_CLIENT_CB 224 +#define SSL_R_PSK_NO_SERVER_CB 225 +#define SSL_R_PUBLIC_KEY_ENCRYPT_ERROR 208 +#define SSL_R_PUBLIC_KEY_IS_NOT_RSA 209 +#define SSL_R_PUBLIC_KEY_NOT_RSA 210 +#define SSL_R_READ_BIO_NOT_SET 211 +#define SSL_R_READ_TIMEOUT_EXPIRED 312 +#define SSL_R_READ_WRONG_PACKET_TYPE 212 +#define SSL_R_RECORD_LENGTH_MISMATCH 213 +#define SSL_R_RECORD_TOO_LARGE 214 +#define SSL_R_RECORD_TOO_SMALL 298 +#define SSL_R_RENEGOTIATE_EXT_TOO_LONG 335 +#define SSL_R_RENEGOTIATION_ENCODING_ERR 336 +#define SSL_R_RENEGOTIATION_MISMATCH 337 +#define SSL_R_REQUIRED_CIPHER_MISSING 215 +#define SSL_R_REQUIRED_COMPRESSSION_ALGORITHM_MISSING 342 +#define SSL_R_REUSE_CERT_LENGTH_NOT_ZERO 216 +#define SSL_R_REUSE_CERT_TYPE_NOT_ZERO 217 +#define SSL_R_REUSE_CIPHER_LIST_NOT_ZERO 218 +#define SSL_R_SCSV_RECEIVED_WHEN_RENEGOTIATING 345 +#define SSL_R_SERVERHELLO_TLSEXT 275 +#define SSL_R_SESSION_ID_CONTEXT_UNINITIALIZED 277 +#define SSL_R_SHORT_READ 219 +#define SSL_R_SIGNATURE_FOR_NON_SIGNING_CERTIFICATE 220 +#define SSL_R_SSL23_DOING_SESSION_ID_REUSE 221 +#define SSL_R_SSL2_CONNECTION_ID_TOO_LONG 299 +#define SSL_R_SSL3_EXT_INVALID_ECPOINTFORMAT 321 +#define SSL_R_SSL3_EXT_INVALID_SERVERNAME 319 +#define SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE 320 +#define SSL_R_SSL3_SESSION_ID_TOO_LONG 300 +#define SSL_R_SSL3_SESSION_ID_TOO_SHORT 222 +#define SSL_R_SSLV3_ALERT_BAD_CERTIFICATE 1042 +#define SSL_R_SSLV3_ALERT_BAD_RECORD_MAC 1020 +#define SSL_R_SSLV3_ALERT_CERTIFICATE_EXPIRED 1045 +#define SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED 1044 +#define SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN 1046 +#define SSL_R_SSLV3_ALERT_DECOMPRESSION_FAILURE 1030 +#define SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE 1040 +#define SSL_R_SSLV3_ALERT_ILLEGAL_PARAMETER 1047 +#define SSL_R_SSLV3_ALERT_NO_CERTIFICATE 1041 +#define SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE 1010 +#define SSL_R_SSLV3_ALERT_UNSUPPORTED_CERTIFICATE 1043 +#define SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION 228 +#define SSL_R_SSL_HANDSHAKE_FAILURE 229 +#define SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS 230 +#define SSL_R_SSL_SESSION_ID_CALLBACK_FAILED 301 +#define SSL_R_SSL_SESSION_ID_CONFLICT 302 +#define SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG 273 +#define SSL_R_SSL_SESSION_ID_HAS_BAD_LENGTH 303 +#define SSL_R_SSL_SESSION_ID_IS_DIFFERENT 231 +#define SSL_R_TLSV1_ALERT_ACCESS_DENIED 1049 +#define SSL_R_TLSV1_ALERT_DECODE_ERROR 1050 +#define SSL_R_TLSV1_ALERT_DECRYPTION_FAILED 1021 +#define SSL_R_TLSV1_ALERT_DECRYPT_ERROR 1051 +#define SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION 1060 +#define SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY 1071 +#define SSL_R_TLSV1_ALERT_INTERNAL_ERROR 1080 +#define SSL_R_TLSV1_ALERT_NO_RENEGOTIATION 1100 +#define SSL_R_TLSV1_ALERT_PROTOCOL_VERSION 1070 +#define SSL_R_TLSV1_ALERT_RECORD_OVERFLOW 1022 +#define SSL_R_TLSV1_ALERT_UNKNOWN_CA 1048 +#define SSL_R_TLSV1_ALERT_USER_CANCELLED 1090 +#define SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE 1114 +#define SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE 1113 +#define SSL_R_TLSV1_CERTIFICATE_UNOBTAINABLE 1111 +#define SSL_R_TLSV1_UNRECOGNIZED_NAME 1112 +#define SSL_R_TLSV1_UNSUPPORTED_EXTENSION 1110 +#define SSL_R_TLS_CLIENT_CERT_REQ_WITH_ANON_CIPHER 232 +#define SSL_R_TLS_INVALID_ECPOINTFORMAT_LIST 157 +#define SSL_R_TLS_PEER_DID_NOT_RESPOND_WITH_CERTIFICATE_LIST 233 +#define SSL_R_TLS_RSA_ENCRYPTED_VALUE_LENGTH_IS_WRONG 234 +#define SSL_R_TRIED_TO_USE_UNSUPPORTED_CIPHER 235 +#define SSL_R_UNABLE_TO_DECODE_DH_CERTS 236 +#define SSL_R_UNABLE_TO_DECODE_ECDH_CERTS 313 +#define SSL_R_UNABLE_TO_EXTRACT_PUBLIC_KEY 237 +#define SSL_R_UNABLE_TO_FIND_DH_PARAMETERS 238 +#define SSL_R_UNABLE_TO_FIND_ECDH_PARAMETERS 314 +#define SSL_R_UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS 239 +#define SSL_R_UNABLE_TO_FIND_SSL_METHOD 240 +#define SSL_R_UNABLE_TO_LOAD_SSL2_MD5_ROUTINES 241 +#define SSL_R_UNABLE_TO_LOAD_SSL3_MD5_ROUTINES 242 +#define SSL_R_UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES 243 +#define SSL_R_UNEXPECTED_MESSAGE 244 +#define SSL_R_UNEXPECTED_RECORD 245 +#define SSL_R_UNINITIALIZED 276 +#define SSL_R_UNKNOWN_ALERT_TYPE 246 +#define SSL_R_UNKNOWN_CERTIFICATE_TYPE 247 +#define SSL_R_UNKNOWN_CIPHER_RETURNED 248 +#define SSL_R_UNKNOWN_CIPHER_TYPE 249 +#define SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE 250 +#define SSL_R_UNKNOWN_PKEY_TYPE 251 +#define SSL_R_UNKNOWN_PROTOCOL 252 +#define SSL_R_UNKNOWN_REMOTE_ERROR_TYPE 253 +#define SSL_R_UNKNOWN_SSL_VERSION 254 +#define SSL_R_UNKNOWN_STATE 255 +#define SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED 338 +#define SSL_R_UNSUPPORTED_CIPHER 256 +#define SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM 257 +#define SSL_R_UNSUPPORTED_DIGEST_TYPE 326 +#define SSL_R_UNSUPPORTED_ELLIPTIC_CURVE 315 +#define SSL_R_UNSUPPORTED_PROTOCOL 258 +#define SSL_R_UNSUPPORTED_SSL_VERSION 259 +#define SSL_R_UNSUPPORTED_STATUS_TYPE 329 +#define SSL_R_WRITE_BIO_NOT_SET 260 +#define SSL_R_WRONG_CIPHER_RETURNED 261 +#define SSL_R_WRONG_MESSAGE_TYPE 262 +#define SSL_R_WRONG_NUMBER_OF_KEY_BITS 263 +#define SSL_R_WRONG_SIGNATURE_LENGTH 264 +#define SSL_R_WRONG_SIGNATURE_SIZE 265 +#define SSL_R_WRONG_SSL_VERSION 266 +#define SSL_R_WRONG_VERSION_NUMBER 267 +#define SSL_R_X509_LIB 268 +#define SSL_R_X509_VERIFICATION_SETUP_PROBLEMS 269 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/extra_lib/include/openssl/ssl2.h b/extra_lib/include/openssl/ssl2.h new file mode 100644 index 0000000..99a52ea --- /dev/null +++ b/extra_lib/include/openssl/ssl2.h @@ -0,0 +1,268 @@ +/* ssl/ssl2.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 AUTHOR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_SSL2_H +#define HEADER_SSL2_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Protocol Version Codes */ +#define SSL2_VERSION 0x0002 +#define SSL2_VERSION_MAJOR 0x00 +#define SSL2_VERSION_MINOR 0x02 +/* #define SSL2_CLIENT_VERSION 0x0002 */ +/* #define SSL2_SERVER_VERSION 0x0002 */ + +/* Protocol Message Codes */ +#define SSL2_MT_ERROR 0 +#define SSL2_MT_CLIENT_HELLO 1 +#define SSL2_MT_CLIENT_MASTER_KEY 2 +#define SSL2_MT_CLIENT_FINISHED 3 +#define SSL2_MT_SERVER_HELLO 4 +#define SSL2_MT_SERVER_VERIFY 5 +#define SSL2_MT_SERVER_FINISHED 6 +#define SSL2_MT_REQUEST_CERTIFICATE 7 +#define SSL2_MT_CLIENT_CERTIFICATE 8 + +/* Error Message Codes */ +#define SSL2_PE_UNDEFINED_ERROR 0x0000 +#define SSL2_PE_NO_CIPHER 0x0001 +#define SSL2_PE_NO_CERTIFICATE 0x0002 +#define SSL2_PE_BAD_CERTIFICATE 0x0004 +#define SSL2_PE_UNSUPPORTED_CERTIFICATE_TYPE 0x0006 + +/* Cipher Kind Values */ +#define SSL2_CK_NULL_WITH_MD5 0x02000000 /* v3 */ +#define SSL2_CK_RC4_128_WITH_MD5 0x02010080 +#define SSL2_CK_RC4_128_EXPORT40_WITH_MD5 0x02020080 +#define SSL2_CK_RC2_128_CBC_WITH_MD5 0x02030080 +#define SSL2_CK_RC2_128_CBC_EXPORT40_WITH_MD5 0x02040080 +#define SSL2_CK_IDEA_128_CBC_WITH_MD5 0x02050080 +#define SSL2_CK_DES_64_CBC_WITH_MD5 0x02060040 +#define SSL2_CK_DES_64_CBC_WITH_SHA 0x02060140 /* v3 */ +#define SSL2_CK_DES_192_EDE3_CBC_WITH_MD5 0x020700c0 +#define SSL2_CK_DES_192_EDE3_CBC_WITH_SHA 0x020701c0 /* v3 */ +#define SSL2_CK_RC4_64_WITH_MD5 0x02080080 /* MS hack */ + +#define SSL2_CK_DES_64_CFB64_WITH_MD5_1 0x02ff0800 /* SSLeay */ +#define SSL2_CK_NULL 0x02ff0810 /* SSLeay */ + +#define SSL2_TXT_DES_64_CFB64_WITH_MD5_1 "DES-CFB-M1" +#define SSL2_TXT_NULL_WITH_MD5 "NULL-MD5" +#define SSL2_TXT_RC4_128_WITH_MD5 "RC4-MD5" +#define SSL2_TXT_RC4_128_EXPORT40_WITH_MD5 "EXP-RC4-MD5" +#define SSL2_TXT_RC2_128_CBC_WITH_MD5 "RC2-CBC-MD5" +#define SSL2_TXT_RC2_128_CBC_EXPORT40_WITH_MD5 "EXP-RC2-CBC-MD5" +#define SSL2_TXT_IDEA_128_CBC_WITH_MD5 "IDEA-CBC-MD5" +#define SSL2_TXT_DES_64_CBC_WITH_MD5 "DES-CBC-MD5" +#define SSL2_TXT_DES_64_CBC_WITH_SHA "DES-CBC-SHA" +#define SSL2_TXT_DES_192_EDE3_CBC_WITH_MD5 "DES-CBC3-MD5" +#define SSL2_TXT_DES_192_EDE3_CBC_WITH_SHA "DES-CBC3-SHA" +#define SSL2_TXT_RC4_64_WITH_MD5 "RC4-64-MD5" + +#define SSL2_TXT_NULL "NULL" + +/* Flags for the SSL_CIPHER.algorithm2 field */ +#define SSL2_CF_5_BYTE_ENC 0x01 +#define SSL2_CF_8_BYTE_ENC 0x02 + +/* Certificate Type Codes */ +#define SSL2_CT_X509_CERTIFICATE 0x01 + +/* Authentication Type Code */ +#define SSL2_AT_MD5_WITH_RSA_ENCRYPTION 0x01 + +#define SSL2_MAX_SSL_SESSION_ID_LENGTH 32 + +/* Upper/Lower Bounds */ +#define SSL2_MAX_MASTER_KEY_LENGTH_IN_BITS 256 +#ifdef OPENSSL_SYS_MPE +#define SSL2_MAX_RECORD_LENGTH_2_BYTE_HEADER 29998u +#else +#define SSL2_MAX_RECORD_LENGTH_2_BYTE_HEADER 32767u /* 2^15-1 */ +#endif +#define SSL2_MAX_RECORD_LENGTH_3_BYTE_HEADER 16383 /* 2^14-1 */ + +#define SSL2_CHALLENGE_LENGTH 16 +/*#define SSL2_CHALLENGE_LENGTH 32 */ +#define SSL2_MIN_CHALLENGE_LENGTH 16 +#define SSL2_MAX_CHALLENGE_LENGTH 32 +#define SSL2_CONNECTION_ID_LENGTH 16 +#define SSL2_MAX_CONNECTION_ID_LENGTH 16 +#define SSL2_SSL_SESSION_ID_LENGTH 16 +#define SSL2_MAX_CERT_CHALLENGE_LENGTH 32 +#define SSL2_MIN_CERT_CHALLENGE_LENGTH 16 +#define SSL2_MAX_KEY_MATERIAL_LENGTH 24 + +#ifndef HEADER_SSL_LOCL_H +#define CERT char +#endif + +typedef struct ssl2_state_st + { + int three_byte_header; + int clear_text; /* clear text */ + int escape; /* not used in SSLv2 */ + int ssl2_rollback; /* used if SSLv23 rolled back to SSLv2 */ + + /* non-blocking io info, used to make sure the same + * args were passwd */ + unsigned int wnum; /* number of bytes sent so far */ + int wpend_tot; + const unsigned char *wpend_buf; + + int wpend_off; /* offset to data to write */ + int wpend_len; /* number of bytes passwd to write */ + int wpend_ret; /* number of bytes to return to caller */ + + /* buffer raw data */ + int rbuf_left; + int rbuf_offs; + unsigned char *rbuf; + unsigned char *wbuf; + + unsigned char *write_ptr;/* used to point to the start due to + * 2/3 byte header. */ + + unsigned int padding; + unsigned int rlength; /* passed to ssl2_enc */ + int ract_data_length; /* Set when things are encrypted. */ + unsigned int wlength; /* passed to ssl2_enc */ + int wact_data_length; /* Set when things are decrypted. */ + unsigned char *ract_data; + unsigned char *wact_data; + unsigned char *mac_data; + + unsigned char *read_key; + unsigned char *write_key; + + /* Stuff specifically to do with this SSL session */ + unsigned int challenge_length; + unsigned char challenge[SSL2_MAX_CHALLENGE_LENGTH]; + unsigned int conn_id_length; + unsigned char conn_id[SSL2_MAX_CONNECTION_ID_LENGTH]; + unsigned int key_material_length; + unsigned char key_material[SSL2_MAX_KEY_MATERIAL_LENGTH*2]; + + unsigned long read_sequence; + unsigned long write_sequence; + + struct { + unsigned int conn_id_length; + unsigned int cert_type; + unsigned int cert_length; + unsigned int csl; + unsigned int clear; + unsigned int enc; + unsigned char ccl[SSL2_MAX_CERT_CHALLENGE_LENGTH]; + unsigned int cipher_spec_length; + unsigned int session_id_length; + unsigned int clen; + unsigned int rlen; + } tmp; + } SSL2_STATE; + +/* SSLv2 */ +/* client */ +#define SSL2_ST_SEND_CLIENT_HELLO_A (0x10|SSL_ST_CONNECT) +#define SSL2_ST_SEND_CLIENT_HELLO_B (0x11|SSL_ST_CONNECT) +#define SSL2_ST_GET_SERVER_HELLO_A (0x20|SSL_ST_CONNECT) +#define SSL2_ST_GET_SERVER_HELLO_B (0x21|SSL_ST_CONNECT) +#define SSL2_ST_SEND_CLIENT_MASTER_KEY_A (0x30|SSL_ST_CONNECT) +#define SSL2_ST_SEND_CLIENT_MASTER_KEY_B (0x31|SSL_ST_CONNECT) +#define SSL2_ST_SEND_CLIENT_FINISHED_A (0x40|SSL_ST_CONNECT) +#define SSL2_ST_SEND_CLIENT_FINISHED_B (0x41|SSL_ST_CONNECT) +#define SSL2_ST_SEND_CLIENT_CERTIFICATE_A (0x50|SSL_ST_CONNECT) +#define SSL2_ST_SEND_CLIENT_CERTIFICATE_B (0x51|SSL_ST_CONNECT) +#define SSL2_ST_SEND_CLIENT_CERTIFICATE_C (0x52|SSL_ST_CONNECT) +#define SSL2_ST_SEND_CLIENT_CERTIFICATE_D (0x53|SSL_ST_CONNECT) +#define SSL2_ST_GET_SERVER_VERIFY_A (0x60|SSL_ST_CONNECT) +#define SSL2_ST_GET_SERVER_VERIFY_B (0x61|SSL_ST_CONNECT) +#define SSL2_ST_GET_SERVER_FINISHED_A (0x70|SSL_ST_CONNECT) +#define SSL2_ST_GET_SERVER_FINISHED_B (0x71|SSL_ST_CONNECT) +#define SSL2_ST_CLIENT_START_ENCRYPTION (0x80|SSL_ST_CONNECT) +#define SSL2_ST_X509_GET_CLIENT_CERTIFICATE (0x90|SSL_ST_CONNECT) +/* server */ +#define SSL2_ST_GET_CLIENT_HELLO_A (0x10|SSL_ST_ACCEPT) +#define SSL2_ST_GET_CLIENT_HELLO_B (0x11|SSL_ST_ACCEPT) +#define SSL2_ST_GET_CLIENT_HELLO_C (0x12|SSL_ST_ACCEPT) +#define SSL2_ST_SEND_SERVER_HELLO_A (0x20|SSL_ST_ACCEPT) +#define SSL2_ST_SEND_SERVER_HELLO_B (0x21|SSL_ST_ACCEPT) +#define SSL2_ST_GET_CLIENT_MASTER_KEY_A (0x30|SSL_ST_ACCEPT) +#define SSL2_ST_GET_CLIENT_MASTER_KEY_B (0x31|SSL_ST_ACCEPT) +#define SSL2_ST_SEND_SERVER_VERIFY_A (0x40|SSL_ST_ACCEPT) +#define SSL2_ST_SEND_SERVER_VERIFY_B (0x41|SSL_ST_ACCEPT) +#define SSL2_ST_SEND_SERVER_VERIFY_C (0x42|SSL_ST_ACCEPT) +#define SSL2_ST_GET_CLIENT_FINISHED_A (0x50|SSL_ST_ACCEPT) +#define SSL2_ST_GET_CLIENT_FINISHED_B (0x51|SSL_ST_ACCEPT) +#define SSL2_ST_SEND_SERVER_FINISHED_A (0x60|SSL_ST_ACCEPT) +#define SSL2_ST_SEND_SERVER_FINISHED_B (0x61|SSL_ST_ACCEPT) +#define SSL2_ST_SEND_REQUEST_CERTIFICATE_A (0x70|SSL_ST_ACCEPT) +#define SSL2_ST_SEND_REQUEST_CERTIFICATE_B (0x71|SSL_ST_ACCEPT) +#define SSL2_ST_SEND_REQUEST_CERTIFICATE_C (0x72|SSL_ST_ACCEPT) +#define SSL2_ST_SEND_REQUEST_CERTIFICATE_D (0x73|SSL_ST_ACCEPT) +#define SSL2_ST_SERVER_START_ENCRYPTION (0x80|SSL_ST_ACCEPT) +#define SSL2_ST_X509_GET_SERVER_CERTIFICATE (0x90|SSL_ST_ACCEPT) + +#ifdef __cplusplus +} +#endif +#endif + diff --git a/extra_lib/include/openssl/ssl23.h b/extra_lib/include/openssl/ssl23.h new file mode 100644 index 0000000..d322898 --- /dev/null +++ b/extra_lib/include/openssl/ssl23.h @@ -0,0 +1,83 @@ +/* ssl/ssl23.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 AUTHOR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_SSL23_H +#define HEADER_SSL23_H + +#ifdef __cplusplus +extern "C" { +#endif + +/*client */ +/* write to server */ +#define SSL23_ST_CW_CLNT_HELLO_A (0x210|SSL_ST_CONNECT) +#define SSL23_ST_CW_CLNT_HELLO_B (0x211|SSL_ST_CONNECT) +/* read from server */ +#define SSL23_ST_CR_SRVR_HELLO_A (0x220|SSL_ST_CONNECT) +#define SSL23_ST_CR_SRVR_HELLO_B (0x221|SSL_ST_CONNECT) + +/* server */ +/* read from client */ +#define SSL23_ST_SR_CLNT_HELLO_A (0x210|SSL_ST_ACCEPT) +#define SSL23_ST_SR_CLNT_HELLO_B (0x211|SSL_ST_ACCEPT) + +#ifdef __cplusplus +} +#endif +#endif + diff --git a/extra_lib/include/openssl/ssl3.h b/extra_lib/include/openssl/ssl3.h new file mode 100644 index 0000000..baaa89e --- /dev/null +++ b/extra_lib/include/openssl/ssl3.h @@ -0,0 +1,637 @@ +/* ssl/ssl3.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 AUTHOR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ +/* ==================================================================== + * Copyright (c) 1998-2002 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED 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 OpenSSL PROJECT OR + * ITS 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. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ +/* ==================================================================== + * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. + * ECC cipher suite support in OpenSSL originally developed by + * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project. + */ + +#ifndef HEADER_SSL3_H +#define HEADER_SSL3_H + +#ifndef OPENSSL_NO_COMP +#include +#endif +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Signalling cipher suite value: from draft-ietf-tls-renegotiation-03.txt */ +#define SSL3_CK_SCSV 0x030000FF + +#define SSL3_CK_RSA_NULL_MD5 0x03000001 +#define SSL3_CK_RSA_NULL_SHA 0x03000002 +#define SSL3_CK_RSA_RC4_40_MD5 0x03000003 +#define SSL3_CK_RSA_RC4_128_MD5 0x03000004 +#define SSL3_CK_RSA_RC4_128_SHA 0x03000005 +#define SSL3_CK_RSA_RC2_40_MD5 0x03000006 +#define SSL3_CK_RSA_IDEA_128_SHA 0x03000007 +#define SSL3_CK_RSA_DES_40_CBC_SHA 0x03000008 +#define SSL3_CK_RSA_DES_64_CBC_SHA 0x03000009 +#define SSL3_CK_RSA_DES_192_CBC3_SHA 0x0300000A + +#define SSL3_CK_DH_DSS_DES_40_CBC_SHA 0x0300000B +#define SSL3_CK_DH_DSS_DES_64_CBC_SHA 0x0300000C +#define SSL3_CK_DH_DSS_DES_192_CBC3_SHA 0x0300000D +#define SSL3_CK_DH_RSA_DES_40_CBC_SHA 0x0300000E +#define SSL3_CK_DH_RSA_DES_64_CBC_SHA 0x0300000F +#define SSL3_CK_DH_RSA_DES_192_CBC3_SHA 0x03000010 + +#define SSL3_CK_EDH_DSS_DES_40_CBC_SHA 0x03000011 +#define SSL3_CK_EDH_DSS_DES_64_CBC_SHA 0x03000012 +#define SSL3_CK_EDH_DSS_DES_192_CBC3_SHA 0x03000013 +#define SSL3_CK_EDH_RSA_DES_40_CBC_SHA 0x03000014 +#define SSL3_CK_EDH_RSA_DES_64_CBC_SHA 0x03000015 +#define SSL3_CK_EDH_RSA_DES_192_CBC3_SHA 0x03000016 + +#define SSL3_CK_ADH_RC4_40_MD5 0x03000017 +#define SSL3_CK_ADH_RC4_128_MD5 0x03000018 +#define SSL3_CK_ADH_DES_40_CBC_SHA 0x03000019 +#define SSL3_CK_ADH_DES_64_CBC_SHA 0x0300001A +#define SSL3_CK_ADH_DES_192_CBC_SHA 0x0300001B + +#if 0 + #define SSL3_CK_FZA_DMS_NULL_SHA 0x0300001C + #define SSL3_CK_FZA_DMS_FZA_SHA 0x0300001D + #if 0 /* Because it clashes with KRB5, is never used any more, and is safe + to remove according to David Hopwood + of the ietf-tls list */ + #define SSL3_CK_FZA_DMS_RC4_SHA 0x0300001E + #endif +#endif + +/* VRS Additional Kerberos5 entries + */ +#define SSL3_CK_KRB5_DES_64_CBC_SHA 0x0300001E +#define SSL3_CK_KRB5_DES_192_CBC3_SHA 0x0300001F +#define SSL3_CK_KRB5_RC4_128_SHA 0x03000020 +#define SSL3_CK_KRB5_IDEA_128_CBC_SHA 0x03000021 +#define SSL3_CK_KRB5_DES_64_CBC_MD5 0x03000022 +#define SSL3_CK_KRB5_DES_192_CBC3_MD5 0x03000023 +#define SSL3_CK_KRB5_RC4_128_MD5 0x03000024 +#define SSL3_CK_KRB5_IDEA_128_CBC_MD5 0x03000025 + +#define SSL3_CK_KRB5_DES_40_CBC_SHA 0x03000026 +#define SSL3_CK_KRB5_RC2_40_CBC_SHA 0x03000027 +#define SSL3_CK_KRB5_RC4_40_SHA 0x03000028 +#define SSL3_CK_KRB5_DES_40_CBC_MD5 0x03000029 +#define SSL3_CK_KRB5_RC2_40_CBC_MD5 0x0300002A +#define SSL3_CK_KRB5_RC4_40_MD5 0x0300002B + +#define SSL3_TXT_RSA_NULL_MD5 "NULL-MD5" +#define SSL3_TXT_RSA_NULL_SHA "NULL-SHA" +#define SSL3_TXT_RSA_RC4_40_MD5 "EXP-RC4-MD5" +#define SSL3_TXT_RSA_RC4_128_MD5 "RC4-MD5" +#define SSL3_TXT_RSA_RC4_128_SHA "RC4-SHA" +#define SSL3_TXT_RSA_RC2_40_MD5 "EXP-RC2-CBC-MD5" +#define SSL3_TXT_RSA_IDEA_128_SHA "IDEA-CBC-SHA" +#define SSL3_TXT_RSA_DES_40_CBC_SHA "EXP-DES-CBC-SHA" +#define SSL3_TXT_RSA_DES_64_CBC_SHA "DES-CBC-SHA" +#define SSL3_TXT_RSA_DES_192_CBC3_SHA "DES-CBC3-SHA" + +#define SSL3_TXT_DH_DSS_DES_40_CBC_SHA "EXP-DH-DSS-DES-CBC-SHA" +#define SSL3_TXT_DH_DSS_DES_64_CBC_SHA "DH-DSS-DES-CBC-SHA" +#define SSL3_TXT_DH_DSS_DES_192_CBC3_SHA "DH-DSS-DES-CBC3-SHA" +#define SSL3_TXT_DH_RSA_DES_40_CBC_SHA "EXP-DH-RSA-DES-CBC-SHA" +#define SSL3_TXT_DH_RSA_DES_64_CBC_SHA "DH-RSA-DES-CBC-SHA" +#define SSL3_TXT_DH_RSA_DES_192_CBC3_SHA "DH-RSA-DES-CBC3-SHA" + +#define SSL3_TXT_EDH_DSS_DES_40_CBC_SHA "EXP-EDH-DSS-DES-CBC-SHA" +#define SSL3_TXT_EDH_DSS_DES_64_CBC_SHA "EDH-DSS-DES-CBC-SHA" +#define SSL3_TXT_EDH_DSS_DES_192_CBC3_SHA "EDH-DSS-DES-CBC3-SHA" +#define SSL3_TXT_EDH_RSA_DES_40_CBC_SHA "EXP-EDH-RSA-DES-CBC-SHA" +#define SSL3_TXT_EDH_RSA_DES_64_CBC_SHA "EDH-RSA-DES-CBC-SHA" +#define SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA "EDH-RSA-DES-CBC3-SHA" + +#define SSL3_TXT_ADH_RC4_40_MD5 "EXP-ADH-RC4-MD5" +#define SSL3_TXT_ADH_RC4_128_MD5 "ADH-RC4-MD5" +#define SSL3_TXT_ADH_DES_40_CBC_SHA "EXP-ADH-DES-CBC-SHA" +#define SSL3_TXT_ADH_DES_64_CBC_SHA "ADH-DES-CBC-SHA" +#define SSL3_TXT_ADH_DES_192_CBC_SHA "ADH-DES-CBC3-SHA" + +#if 0 + #define SSL3_TXT_FZA_DMS_NULL_SHA "FZA-NULL-SHA" + #define SSL3_TXT_FZA_DMS_FZA_SHA "FZA-FZA-CBC-SHA" + #define SSL3_TXT_FZA_DMS_RC4_SHA "FZA-RC4-SHA" +#endif + +#define SSL3_TXT_KRB5_DES_64_CBC_SHA "KRB5-DES-CBC-SHA" +#define SSL3_TXT_KRB5_DES_192_CBC3_SHA "KRB5-DES-CBC3-SHA" +#define SSL3_TXT_KRB5_RC4_128_SHA "KRB5-RC4-SHA" +#define SSL3_TXT_KRB5_IDEA_128_CBC_SHA "KRB5-IDEA-CBC-SHA" +#define SSL3_TXT_KRB5_DES_64_CBC_MD5 "KRB5-DES-CBC-MD5" +#define SSL3_TXT_KRB5_DES_192_CBC3_MD5 "KRB5-DES-CBC3-MD5" +#define SSL3_TXT_KRB5_RC4_128_MD5 "KRB5-RC4-MD5" +#define SSL3_TXT_KRB5_IDEA_128_CBC_MD5 "KRB5-IDEA-CBC-MD5" + +#define SSL3_TXT_KRB5_DES_40_CBC_SHA "EXP-KRB5-DES-CBC-SHA" +#define SSL3_TXT_KRB5_RC2_40_CBC_SHA "EXP-KRB5-RC2-CBC-SHA" +#define SSL3_TXT_KRB5_RC4_40_SHA "EXP-KRB5-RC4-SHA" +#define SSL3_TXT_KRB5_DES_40_CBC_MD5 "EXP-KRB5-DES-CBC-MD5" +#define SSL3_TXT_KRB5_RC2_40_CBC_MD5 "EXP-KRB5-RC2-CBC-MD5" +#define SSL3_TXT_KRB5_RC4_40_MD5 "EXP-KRB5-RC4-MD5" + +#define SSL3_SSL_SESSION_ID_LENGTH 32 +#define SSL3_MAX_SSL_SESSION_ID_LENGTH 32 + +#define SSL3_MASTER_SECRET_SIZE 48 +#define SSL3_RANDOM_SIZE 32 +#define SSL3_SESSION_ID_SIZE 32 +#define SSL3_RT_HEADER_LENGTH 5 + +#ifndef SSL3_ALIGN_PAYLOAD + /* Some will argue that this increases memory footprint, but it's + * not actually true. Point is that malloc has to return at least + * 64-bit aligned pointers, meaning that allocating 5 bytes wastes + * 3 bytes in either case. Suggested pre-gaping simply moves these + * wasted bytes from the end of allocated region to its front, + * but makes data payload aligned, which improves performance:-) */ +# define SSL3_ALIGN_PAYLOAD 8 +#else +# if (SSL3_ALIGN_PAYLOAD&(SSL3_ALIGN_PAYLOAD-1))!=0 +# error "insane SSL3_ALIGN_PAYLOAD" +# undef SSL3_ALIGN_PAYLOAD +# endif +#endif + +/* This is the maximum MAC (digest) size used by the SSL library. + * Currently maximum of 20 is used by SHA1, but we reserve for + * future extension for 512-bit hashes. + */ + +#define SSL3_RT_MAX_MD_SIZE 64 + +/* Maximum block size used in all ciphersuites. Currently 16 for AES. + */ + +#define SSL_RT_MAX_CIPHER_BLOCK_SIZE 16 + +#define SSL3_RT_MAX_EXTRA (16384) + +/* Maximum plaintext length: defined by SSL/TLS standards */ +#define SSL3_RT_MAX_PLAIN_LENGTH 16384 +/* Maximum compression overhead: defined by SSL/TLS standards */ +#define SSL3_RT_MAX_COMPRESSED_OVERHEAD 1024 + +/* The standards give a maximum encryption overhead of 1024 bytes. + * In practice the value is lower than this. The overhead is the maximum + * number of padding bytes (256) plus the mac size. + */ +#define SSL3_RT_MAX_ENCRYPTED_OVERHEAD (256 + SSL3_RT_MAX_MD_SIZE) + +/* OpenSSL currently only uses a padding length of at most one block so + * the send overhead is smaller. + */ + +#define SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD \ + (SSL_RT_MAX_CIPHER_BLOCK_SIZE + SSL3_RT_MAX_MD_SIZE) + +/* If compression isn't used don't include the compression overhead */ + +#ifdef OPENSSL_NO_COMP +#define SSL3_RT_MAX_COMPRESSED_LENGTH SSL3_RT_MAX_PLAIN_LENGTH +#else +#define SSL3_RT_MAX_COMPRESSED_LENGTH \ + (SSL3_RT_MAX_PLAIN_LENGTH+SSL3_RT_MAX_COMPRESSED_OVERHEAD) +#endif +#define SSL3_RT_MAX_ENCRYPTED_LENGTH \ + (SSL3_RT_MAX_ENCRYPTED_OVERHEAD+SSL3_RT_MAX_COMPRESSED_LENGTH) +#define SSL3_RT_MAX_PACKET_SIZE \ + (SSL3_RT_MAX_ENCRYPTED_LENGTH+SSL3_RT_HEADER_LENGTH) + +#define SSL3_MD_CLIENT_FINISHED_CONST "\x43\x4C\x4E\x54" +#define SSL3_MD_SERVER_FINISHED_CONST "\x53\x52\x56\x52" + +#define SSL3_VERSION 0x0300 +#define SSL3_VERSION_MAJOR 0x03 +#define SSL3_VERSION_MINOR 0x00 + +#define SSL3_RT_CHANGE_CIPHER_SPEC 20 +#define SSL3_RT_ALERT 21 +#define SSL3_RT_HANDSHAKE 22 +#define SSL3_RT_APPLICATION_DATA 23 + +#define SSL3_AL_WARNING 1 +#define SSL3_AL_FATAL 2 + +#define SSL3_AD_CLOSE_NOTIFY 0 +#define SSL3_AD_UNEXPECTED_MESSAGE 10 /* fatal */ +#define SSL3_AD_BAD_RECORD_MAC 20 /* fatal */ +#define SSL3_AD_DECOMPRESSION_FAILURE 30 /* fatal */ +#define SSL3_AD_HANDSHAKE_FAILURE 40 /* fatal */ +#define SSL3_AD_NO_CERTIFICATE 41 +#define SSL3_AD_BAD_CERTIFICATE 42 +#define SSL3_AD_UNSUPPORTED_CERTIFICATE 43 +#define SSL3_AD_CERTIFICATE_REVOKED 44 +#define SSL3_AD_CERTIFICATE_EXPIRED 45 +#define SSL3_AD_CERTIFICATE_UNKNOWN 46 +#define SSL3_AD_ILLEGAL_PARAMETER 47 /* fatal */ + +typedef struct ssl3_record_st + { +/*r */ int type; /* type of record */ +/*rw*/ unsigned int length; /* How many bytes available */ +/*r */ unsigned int off; /* read/write offset into 'buf' */ +/*rw*/ unsigned char *data; /* pointer to the record data */ +/*rw*/ unsigned char *input; /* where the decode bytes are */ +/*r */ unsigned char *comp; /* only used with decompression - malloc()ed */ +/*r */ unsigned long epoch; /* epoch number, needed by DTLS1 */ +/*r */ unsigned char seq_num[8]; /* sequence number, needed by DTLS1 */ + } SSL3_RECORD; + +typedef struct ssl3_buffer_st + { + unsigned char *buf; /* at least SSL3_RT_MAX_PACKET_SIZE bytes, + * see ssl3_setup_buffers() */ + size_t len; /* buffer size */ + int offset; /* where to 'copy from' */ + int left; /* how many bytes left */ + } SSL3_BUFFER; + +#define SSL3_CT_RSA_SIGN 1 +#define SSL3_CT_DSS_SIGN 2 +#define SSL3_CT_RSA_FIXED_DH 3 +#define SSL3_CT_DSS_FIXED_DH 4 +#define SSL3_CT_RSA_EPHEMERAL_DH 5 +#define SSL3_CT_DSS_EPHEMERAL_DH 6 +#define SSL3_CT_FORTEZZA_DMS 20 +/* SSL3_CT_NUMBER is used to size arrays and it must be large + * enough to contain all of the cert types defined either for + * SSLv3 and TLSv1. + */ +#define SSL3_CT_NUMBER 9 + + +#define SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS 0x0001 +#define SSL3_FLAGS_DELAY_CLIENT_FINISHED 0x0002 +#define SSL3_FLAGS_POP_BUFFER 0x0004 +#define TLS1_FLAGS_TLS_PADDING_BUG 0x0008 +#define TLS1_FLAGS_SKIP_CERT_VERIFY 0x0010 + +typedef struct ssl3_state_st + { + long flags; + int delay_buf_pop_ret; + + unsigned char read_sequence[8]; + int read_mac_secret_size; + unsigned char read_mac_secret[EVP_MAX_MD_SIZE]; + unsigned char write_sequence[8]; + int write_mac_secret_size; + unsigned char write_mac_secret[EVP_MAX_MD_SIZE]; + + unsigned char server_random[SSL3_RANDOM_SIZE]; + unsigned char client_random[SSL3_RANDOM_SIZE]; + + /* flags for countermeasure against known-IV weakness */ + int need_empty_fragments; + int empty_fragment_done; + + /* The value of 'extra' when the buffers were initialized */ + int init_extra; + + SSL3_BUFFER rbuf; /* read IO goes into here */ + SSL3_BUFFER wbuf; /* write IO goes into here */ + + SSL3_RECORD rrec; /* each decoded record goes in here */ + SSL3_RECORD wrec; /* goes out from here */ + + /* storage for Alert/Handshake protocol data received but not + * yet processed by ssl3_read_bytes: */ + unsigned char alert_fragment[2]; + unsigned int alert_fragment_len; + unsigned char handshake_fragment[4]; + unsigned int handshake_fragment_len; + + /* partial write - check the numbers match */ + unsigned int wnum; /* number of bytes sent so far */ + int wpend_tot; /* number bytes written */ + int wpend_type; + int wpend_ret; /* number of bytes submitted */ + const unsigned char *wpend_buf; + + /* used during startup, digest all incoming/outgoing packets */ + BIO *handshake_buffer; + /* When set of handshake digests is determined, buffer is hashed + * and freed and MD_CTX-es for all required digests are stored in + * this array */ + EVP_MD_CTX **handshake_dgst; + /* this is set whenerver we see a change_cipher_spec message + * come in when we are not looking for one */ + int change_cipher_spec; + + int warn_alert; + int fatal_alert; + /* we allow one fatal and one warning alert to be outstanding, + * send close alert via the warning alert */ + int alert_dispatch; + unsigned char send_alert[2]; + + /* This flag is set when we should renegotiate ASAP, basically when + * there is no more data in the read or write buffers */ + int renegotiate; + int total_renegotiations; + int num_renegotiations; + + int in_read_app_data; + + /* Opaque PRF input as used for the current handshake. + * These fields are used only if TLSEXT_TYPE_opaque_prf_input is defined + * (otherwise, they are merely present to improve binary compatibility) */ + void *client_opaque_prf_input; + size_t client_opaque_prf_input_len; + void *server_opaque_prf_input; + size_t server_opaque_prf_input_len; + + struct { + /* actually only needs to be 16+20 */ + unsigned char cert_verify_md[EVP_MAX_MD_SIZE*2]; + + /* actually only need to be 16+20 for SSLv3 and 12 for TLS */ + unsigned char finish_md[EVP_MAX_MD_SIZE*2]; + int finish_md_len; + unsigned char peer_finish_md[EVP_MAX_MD_SIZE*2]; + int peer_finish_md_len; + + unsigned long message_size; + int message_type; + + /* used to hold the new cipher we are going to use */ + const SSL_CIPHER *new_cipher; +#ifndef OPENSSL_NO_DH + DH *dh; +#endif + +#ifndef OPENSSL_NO_ECDH + EC_KEY *ecdh; /* holds short lived ECDH key */ +#endif + + /* used when SSL_ST_FLUSH_DATA is entered */ + int next_state; + + int reuse_message; + + /* used for certificate requests */ + int cert_req; + int ctype_num; + char ctype[SSL3_CT_NUMBER]; + STACK_OF(X509_NAME) *ca_names; + + int use_rsa_tmp; + + int key_block_length; + unsigned char *key_block; + + const EVP_CIPHER *new_sym_enc; + const EVP_MD *new_hash; + int new_mac_pkey_type; + int new_mac_secret_size; +#ifndef OPENSSL_NO_COMP + const SSL_COMP *new_compression; +#else + char *new_compression; +#endif + int cert_request; + } tmp; + + /* Connection binding to prevent renegotiation attacks */ + unsigned char previous_client_finished[EVP_MAX_MD_SIZE]; + unsigned char previous_client_finished_len; + unsigned char previous_server_finished[EVP_MAX_MD_SIZE]; + unsigned char previous_server_finished_len; + int send_connection_binding; /* TODOEKR */ + } SSL3_STATE; + + +/* SSLv3 */ +/*client */ +/* extra state */ +#define SSL3_ST_CW_FLUSH (0x100|SSL_ST_CONNECT) +/* write to server */ +#define SSL3_ST_CW_CLNT_HELLO_A (0x110|SSL_ST_CONNECT) +#define SSL3_ST_CW_CLNT_HELLO_B (0x111|SSL_ST_CONNECT) +/* read from server */ +#define SSL3_ST_CR_SRVR_HELLO_A (0x120|SSL_ST_CONNECT) +#define SSL3_ST_CR_SRVR_HELLO_B (0x121|SSL_ST_CONNECT) +#define DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A (0x126|SSL_ST_CONNECT) +#define DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B (0x127|SSL_ST_CONNECT) +#define SSL3_ST_CR_CERT_A (0x130|SSL_ST_CONNECT) +#define SSL3_ST_CR_CERT_B (0x131|SSL_ST_CONNECT) +#define SSL3_ST_CR_KEY_EXCH_A (0x140|SSL_ST_CONNECT) +#define SSL3_ST_CR_KEY_EXCH_B (0x141|SSL_ST_CONNECT) +#define SSL3_ST_CR_CERT_REQ_A (0x150|SSL_ST_CONNECT) +#define SSL3_ST_CR_CERT_REQ_B (0x151|SSL_ST_CONNECT) +#define SSL3_ST_CR_SRVR_DONE_A (0x160|SSL_ST_CONNECT) +#define SSL3_ST_CR_SRVR_DONE_B (0x161|SSL_ST_CONNECT) +/* write to server */ +#define SSL3_ST_CW_CERT_A (0x170|SSL_ST_CONNECT) +#define SSL3_ST_CW_CERT_B (0x171|SSL_ST_CONNECT) +#define SSL3_ST_CW_CERT_C (0x172|SSL_ST_CONNECT) +#define SSL3_ST_CW_CERT_D (0x173|SSL_ST_CONNECT) +#define SSL3_ST_CW_KEY_EXCH_A (0x180|SSL_ST_CONNECT) +#define SSL3_ST_CW_KEY_EXCH_B (0x181|SSL_ST_CONNECT) +#define SSL3_ST_CW_CERT_VRFY_A (0x190|SSL_ST_CONNECT) +#define SSL3_ST_CW_CERT_VRFY_B (0x191|SSL_ST_CONNECT) +#define SSL3_ST_CW_CHANGE_A (0x1A0|SSL_ST_CONNECT) +#define SSL3_ST_CW_CHANGE_B (0x1A1|SSL_ST_CONNECT) +#define SSL3_ST_CW_FINISHED_A (0x1B0|SSL_ST_CONNECT) +#define SSL3_ST_CW_FINISHED_B (0x1B1|SSL_ST_CONNECT) +/* read from server */ +#define SSL3_ST_CR_CHANGE_A (0x1C0|SSL_ST_CONNECT) +#define SSL3_ST_CR_CHANGE_B (0x1C1|SSL_ST_CONNECT) +#define SSL3_ST_CR_FINISHED_A (0x1D0|SSL_ST_CONNECT) +#define SSL3_ST_CR_FINISHED_B (0x1D1|SSL_ST_CONNECT) +#define SSL3_ST_CR_SESSION_TICKET_A (0x1E0|SSL_ST_CONNECT) +#define SSL3_ST_CR_SESSION_TICKET_B (0x1E1|SSL_ST_CONNECT) +#define SSL3_ST_CR_CERT_STATUS_A (0x1F0|SSL_ST_CONNECT) +#define SSL3_ST_CR_CERT_STATUS_B (0x1F1|SSL_ST_CONNECT) + +/* server */ +/* extra state */ +#define SSL3_ST_SW_FLUSH (0x100|SSL_ST_ACCEPT) +/* read from client */ +/* Do not change the number values, they do matter */ +#define SSL3_ST_SR_CLNT_HELLO_A (0x110|SSL_ST_ACCEPT) +#define SSL3_ST_SR_CLNT_HELLO_B (0x111|SSL_ST_ACCEPT) +#define SSL3_ST_SR_CLNT_HELLO_C (0x112|SSL_ST_ACCEPT) +/* write to client */ +#define DTLS1_ST_SW_HELLO_VERIFY_REQUEST_A (0x113|SSL_ST_ACCEPT) +#define DTLS1_ST_SW_HELLO_VERIFY_REQUEST_B (0x114|SSL_ST_ACCEPT) +#define SSL3_ST_SW_HELLO_REQ_A (0x120|SSL_ST_ACCEPT) +#define SSL3_ST_SW_HELLO_REQ_B (0x121|SSL_ST_ACCEPT) +#define SSL3_ST_SW_HELLO_REQ_C (0x122|SSL_ST_ACCEPT) +#define SSL3_ST_SW_SRVR_HELLO_A (0x130|SSL_ST_ACCEPT) +#define SSL3_ST_SW_SRVR_HELLO_B (0x131|SSL_ST_ACCEPT) +#define SSL3_ST_SW_CERT_A (0x140|SSL_ST_ACCEPT) +#define SSL3_ST_SW_CERT_B (0x141|SSL_ST_ACCEPT) +#define SSL3_ST_SW_KEY_EXCH_A (0x150|SSL_ST_ACCEPT) +#define SSL3_ST_SW_KEY_EXCH_B (0x151|SSL_ST_ACCEPT) +#define SSL3_ST_SW_CERT_REQ_A (0x160|SSL_ST_ACCEPT) +#define SSL3_ST_SW_CERT_REQ_B (0x161|SSL_ST_ACCEPT) +#define SSL3_ST_SW_SRVR_DONE_A (0x170|SSL_ST_ACCEPT) +#define SSL3_ST_SW_SRVR_DONE_B (0x171|SSL_ST_ACCEPT) +/* read from client */ +#define SSL3_ST_SR_CERT_A (0x180|SSL_ST_ACCEPT) +#define SSL3_ST_SR_CERT_B (0x181|SSL_ST_ACCEPT) +#define SSL3_ST_SR_KEY_EXCH_A (0x190|SSL_ST_ACCEPT) +#define SSL3_ST_SR_KEY_EXCH_B (0x191|SSL_ST_ACCEPT) +#define SSL3_ST_SR_CERT_VRFY_A (0x1A0|SSL_ST_ACCEPT) +#define SSL3_ST_SR_CERT_VRFY_B (0x1A1|SSL_ST_ACCEPT) +#define SSL3_ST_SR_CHANGE_A (0x1B0|SSL_ST_ACCEPT) +#define SSL3_ST_SR_CHANGE_B (0x1B1|SSL_ST_ACCEPT) +#define SSL3_ST_SR_FINISHED_A (0x1C0|SSL_ST_ACCEPT) +#define SSL3_ST_SR_FINISHED_B (0x1C1|SSL_ST_ACCEPT) +/* write to client */ +#define SSL3_ST_SW_CHANGE_A (0x1D0|SSL_ST_ACCEPT) +#define SSL3_ST_SW_CHANGE_B (0x1D1|SSL_ST_ACCEPT) +#define SSL3_ST_SW_FINISHED_A (0x1E0|SSL_ST_ACCEPT) +#define SSL3_ST_SW_FINISHED_B (0x1E1|SSL_ST_ACCEPT) +#define SSL3_ST_SW_SESSION_TICKET_A (0x1F0|SSL_ST_ACCEPT) +#define SSL3_ST_SW_SESSION_TICKET_B (0x1F1|SSL_ST_ACCEPT) +#define SSL3_ST_SW_CERT_STATUS_A (0x200|SSL_ST_ACCEPT) +#define SSL3_ST_SW_CERT_STATUS_B (0x201|SSL_ST_ACCEPT) + +#define SSL3_MT_HELLO_REQUEST 0 +#define SSL3_MT_CLIENT_HELLO 1 +#define SSL3_MT_SERVER_HELLO 2 +#define SSL3_MT_NEWSESSION_TICKET 4 +#define SSL3_MT_CERTIFICATE 11 +#define SSL3_MT_SERVER_KEY_EXCHANGE 12 +#define SSL3_MT_CERTIFICATE_REQUEST 13 +#define SSL3_MT_SERVER_DONE 14 +#define SSL3_MT_CERTIFICATE_VERIFY 15 +#define SSL3_MT_CLIENT_KEY_EXCHANGE 16 +#define SSL3_MT_FINISHED 20 +#define SSL3_MT_CERTIFICATE_STATUS 22 +#define DTLS1_MT_HELLO_VERIFY_REQUEST 3 + + +#define SSL3_MT_CCS 1 + +/* These are used when changing over to a new cipher */ +#define SSL3_CC_READ 0x01 +#define SSL3_CC_WRITE 0x02 +#define SSL3_CC_CLIENT 0x10 +#define SSL3_CC_SERVER 0x20 +#define SSL3_CHANGE_CIPHER_CLIENT_WRITE (SSL3_CC_CLIENT|SSL3_CC_WRITE) +#define SSL3_CHANGE_CIPHER_SERVER_READ (SSL3_CC_SERVER|SSL3_CC_READ) +#define SSL3_CHANGE_CIPHER_CLIENT_READ (SSL3_CC_CLIENT|SSL3_CC_READ) +#define SSL3_CHANGE_CIPHER_SERVER_WRITE (SSL3_CC_SERVER|SSL3_CC_WRITE) + +#ifdef __cplusplus +} +#endif +#endif + diff --git a/extra_lib/include/openssl/stack.h b/extra_lib/include/openssl/stack.h new file mode 100644 index 0000000..ce35e55 --- /dev/null +++ b/extra_lib/include/openssl/stack.h @@ -0,0 +1,108 @@ +/* crypto/stack/stack.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 AUTHOR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_STACK_H +#define HEADER_STACK_H + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct stack_st + { + int num; + char **data; + int sorted; + + int num_alloc; + int (*comp)(const void *, const void *); + } _STACK; /* Use STACK_OF(...) instead */ + +#define M_sk_num(sk) ((sk) ? (sk)->num:-1) +#define M_sk_value(sk,n) ((sk) ? (sk)->data[n] : NULL) + +int sk_num(const _STACK *); +void *sk_value(const _STACK *, int); + +void *sk_set(_STACK *, int, void *); + +_STACK *sk_new(int (*cmp)(const void *, const void *)); +_STACK *sk_new_null(void); +void sk_free(_STACK *); +void sk_pop_free(_STACK *st, void (*func)(void *)); +int sk_insert(_STACK *sk, void *data, int where); +void *sk_delete(_STACK *st, int loc); +void *sk_delete_ptr(_STACK *st, void *p); +int sk_find(_STACK *st, void *data); +int sk_find_ex(_STACK *st, void *data); +int sk_push(_STACK *st, void *data); +int sk_unshift(_STACK *st, void *data); +void *sk_shift(_STACK *st); +void *sk_pop(_STACK *st); +void sk_zero(_STACK *st); +int (*sk_set_cmp_func(_STACK *sk, int (*c)(const void *, const void *))) + (const void *, const void *); +_STACK *sk_dup(_STACK *st); +void sk_sort(_STACK *st); +int sk_is_sorted(const _STACK *st); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/extra_lib/include/openssl/symhacks.h b/extra_lib/include/openssl/symhacks.h new file mode 100644 index 0000000..3fd4a81 --- /dev/null +++ b/extra_lib/include/openssl/symhacks.h @@ -0,0 +1,449 @@ +/* ==================================================================== + * Copyright (c) 1999 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED 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 OpenSSL PROJECT OR + * ITS 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. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ + +#ifndef HEADER_SYMHACKS_H +#define HEADER_SYMHACKS_H + +#include + +/* Hacks to solve the problem with linkers incapable of handling very long + symbol names. In the case of VMS, the limit is 31 characters on VMS for + VAX. */ +/* Note that this affects util/libeay.num and util/ssleay.num... you may + change those manually, but that's not recommended, as those files are + controlled centrally and updated on Unix, and the central definition + may disagree with yours, which in turn may come with shareable library + incompatibilities. */ +#ifdef OPENSSL_SYS_VMS + +/* Hack a long name in crypto/ex_data.c */ +#undef CRYPTO_get_ex_data_implementation +#define CRYPTO_get_ex_data_implementation CRYPTO_get_ex_data_impl +#undef CRYPTO_set_ex_data_implementation +#define CRYPTO_set_ex_data_implementation CRYPTO_set_ex_data_impl + +/* Hack a long name in crypto/asn1/a_mbstr.c */ +#undef ASN1_STRING_set_default_mask_asc +#define ASN1_STRING_set_default_mask_asc ASN1_STRING_set_def_mask_asc + +#if 0 /* No longer needed, since safestack macro magic does the job */ +/* Hack the names created with DECLARE_ASN1_SET_OF(PKCS7_SIGNER_INFO) */ +#undef i2d_ASN1_SET_OF_PKCS7_SIGNER_INFO +#define i2d_ASN1_SET_OF_PKCS7_SIGNER_INFO i2d_ASN1_SET_OF_PKCS7_SIGINF +#undef d2i_ASN1_SET_OF_PKCS7_SIGNER_INFO +#define d2i_ASN1_SET_OF_PKCS7_SIGNER_INFO d2i_ASN1_SET_OF_PKCS7_SIGINF +#endif + +#if 0 /* No longer needed, since safestack macro magic does the job */ +/* Hack the names created with DECLARE_ASN1_SET_OF(PKCS7_RECIP_INFO) */ +#undef i2d_ASN1_SET_OF_PKCS7_RECIP_INFO +#define i2d_ASN1_SET_OF_PKCS7_RECIP_INFO i2d_ASN1_SET_OF_PKCS7_RECINF +#undef d2i_ASN1_SET_OF_PKCS7_RECIP_INFO +#define d2i_ASN1_SET_OF_PKCS7_RECIP_INFO d2i_ASN1_SET_OF_PKCS7_RECINF +#endif + +#if 0 /* No longer needed, since safestack macro magic does the job */ +/* Hack the names created with DECLARE_ASN1_SET_OF(ACCESS_DESCRIPTION) */ +#undef i2d_ASN1_SET_OF_ACCESS_DESCRIPTION +#define i2d_ASN1_SET_OF_ACCESS_DESCRIPTION i2d_ASN1_SET_OF_ACC_DESC +#undef d2i_ASN1_SET_OF_ACCESS_DESCRIPTION +#define d2i_ASN1_SET_OF_ACCESS_DESCRIPTION d2i_ASN1_SET_OF_ACC_DESC +#endif + +/* Hack the names created with DECLARE_PEM_rw(NETSCAPE_CERT_SEQUENCE) */ +#undef PEM_read_NETSCAPE_CERT_SEQUENCE +#define PEM_read_NETSCAPE_CERT_SEQUENCE PEM_read_NS_CERT_SEQ +#undef PEM_write_NETSCAPE_CERT_SEQUENCE +#define PEM_write_NETSCAPE_CERT_SEQUENCE PEM_write_NS_CERT_SEQ +#undef PEM_read_bio_NETSCAPE_CERT_SEQUENCE +#define PEM_read_bio_NETSCAPE_CERT_SEQUENCE PEM_read_bio_NS_CERT_SEQ +#undef PEM_write_bio_NETSCAPE_CERT_SEQUENCE +#define PEM_write_bio_NETSCAPE_CERT_SEQUENCE PEM_write_bio_NS_CERT_SEQ +#undef PEM_write_cb_bio_NETSCAPE_CERT_SEQUENCE +#define PEM_write_cb_bio_NETSCAPE_CERT_SEQUENCE PEM_write_cb_bio_NS_CERT_SEQ + +/* Hack the names created with DECLARE_PEM_rw(PKCS8_PRIV_KEY_INFO) */ +#undef PEM_read_PKCS8_PRIV_KEY_INFO +#define PEM_read_PKCS8_PRIV_KEY_INFO PEM_read_P8_PRIV_KEY_INFO +#undef PEM_write_PKCS8_PRIV_KEY_INFO +#define PEM_write_PKCS8_PRIV_KEY_INFO PEM_write_P8_PRIV_KEY_INFO +#undef PEM_read_bio_PKCS8_PRIV_KEY_INFO +#define PEM_read_bio_PKCS8_PRIV_KEY_INFO PEM_read_bio_P8_PRIV_KEY_INFO +#undef PEM_write_bio_PKCS8_PRIV_KEY_INFO +#define PEM_write_bio_PKCS8_PRIV_KEY_INFO PEM_write_bio_P8_PRIV_KEY_INFO +#undef PEM_write_cb_bio_PKCS8_PRIV_KEY_INFO +#define PEM_write_cb_bio_PKCS8_PRIV_KEY_INFO PEM_wrt_cb_bio_P8_PRIV_KEY_INFO + +/* Hack other PEM names */ +#undef PEM_write_bio_PKCS8PrivateKey_nid +#define PEM_write_bio_PKCS8PrivateKey_nid PEM_write_bio_PKCS8PrivKey_nid + +/* Hack some long X509 names */ +#undef X509_REVOKED_get_ext_by_critical +#define X509_REVOKED_get_ext_by_critical X509_REVOKED_get_ext_by_critic +#undef X509_policy_tree_get0_user_policies +#define X509_policy_tree_get0_user_policies X509_pcy_tree_get0_usr_policies +#undef X509_policy_node_get0_qualifiers +#define X509_policy_node_get0_qualifiers X509_pcy_node_get0_qualifiers +#undef X509_STORE_CTX_get_explicit_policy +#define X509_STORE_CTX_get_explicit_policy X509_STORE_CTX_get_expl_policy +#undef X509_STORE_CTX_get0_current_issuer +#define X509_STORE_CTX_get0_current_issuer X509_STORE_CTX_get0_cur_issuer + +/* Hack some long CRYPTO names */ +#undef CRYPTO_set_dynlock_destroy_callback +#define CRYPTO_set_dynlock_destroy_callback CRYPTO_set_dynlock_destroy_cb +#undef CRYPTO_set_dynlock_create_callback +#define CRYPTO_set_dynlock_create_callback CRYPTO_set_dynlock_create_cb +#undef CRYPTO_set_dynlock_lock_callback +#define CRYPTO_set_dynlock_lock_callback CRYPTO_set_dynlock_lock_cb +#undef CRYPTO_get_dynlock_lock_callback +#define CRYPTO_get_dynlock_lock_callback CRYPTO_get_dynlock_lock_cb +#undef CRYPTO_get_dynlock_destroy_callback +#define CRYPTO_get_dynlock_destroy_callback CRYPTO_get_dynlock_destroy_cb +#undef CRYPTO_get_dynlock_create_callback +#define CRYPTO_get_dynlock_create_callback CRYPTO_get_dynlock_create_cb +#undef CRYPTO_set_locked_mem_ex_functions +#define CRYPTO_set_locked_mem_ex_functions CRYPTO_set_locked_mem_ex_funcs +#undef CRYPTO_get_locked_mem_ex_functions +#define CRYPTO_get_locked_mem_ex_functions CRYPTO_get_locked_mem_ex_funcs + +/* Hack some long SSL names */ +#undef SSL_CTX_set_default_verify_paths +#define SSL_CTX_set_default_verify_paths SSL_CTX_set_def_verify_paths +#undef SSL_get_ex_data_X509_STORE_CTX_idx +#define SSL_get_ex_data_X509_STORE_CTX_idx SSL_get_ex_d_X509_STORE_CTX_idx +#undef SSL_add_file_cert_subjects_to_stack +#define SSL_add_file_cert_subjects_to_stack SSL_add_file_cert_subjs_to_stk +#undef SSL_add_dir_cert_subjects_to_stack +#define SSL_add_dir_cert_subjects_to_stack SSL_add_dir_cert_subjs_to_stk +#undef SSL_CTX_use_certificate_chain_file +#define SSL_CTX_use_certificate_chain_file SSL_CTX_use_cert_chain_file +#undef SSL_CTX_set_cert_verify_callback +#define SSL_CTX_set_cert_verify_callback SSL_CTX_set_cert_verify_cb +#undef SSL_CTX_set_default_passwd_cb_userdata +#define SSL_CTX_set_default_passwd_cb_userdata SSL_CTX_set_def_passwd_cb_ud +#undef SSL_COMP_get_compression_methods +#define SSL_COMP_get_compression_methods SSL_COMP_get_compress_methods + +#undef ssl_add_clienthello_renegotiate_ext +#define ssl_add_clienthello_renegotiate_ext ssl_add_clienthello_reneg_ext +#undef ssl_add_serverhello_renegotiate_ext +#define ssl_add_serverhello_renegotiate_ext ssl_add_serverhello_reneg_ext +#undef ssl_parse_clienthello_renegotiate_ext +#define ssl_parse_clienthello_renegotiate_ext ssl_parse_clienthello_reneg_ext +#undef ssl_parse_serverhello_renegotiate_ext +#define ssl_parse_serverhello_renegotiate_ext ssl_parse_serverhello_reneg_ext + +/* Hack some long ENGINE names */ +#undef ENGINE_get_default_BN_mod_exp_crt +#define ENGINE_get_default_BN_mod_exp_crt ENGINE_get_def_BN_mod_exp_crt +#undef ENGINE_set_default_BN_mod_exp_crt +#define ENGINE_set_default_BN_mod_exp_crt ENGINE_set_def_BN_mod_exp_crt +#undef ENGINE_set_load_privkey_function +#define ENGINE_set_load_privkey_function ENGINE_set_load_privkey_fn +#undef ENGINE_get_load_privkey_function +#define ENGINE_get_load_privkey_function ENGINE_get_load_privkey_fn +#undef ENGINE_unregister_pkey_asn1_meths +#define ENGINE_unregister_pkey_asn1_meths ENGINE_unreg_pkey_asn1_meths +#undef ENGINE_register_all_pkey_asn1_meths +#define ENGINE_register_all_pkey_asn1_meths ENGINE_reg_all_pkey_asn1_meths +#undef ENGINE_set_default_pkey_asn1_meths +#define ENGINE_set_default_pkey_asn1_meths ENGINE_set_def_pkey_asn1_meths +#undef ENGINE_get_pkey_asn1_meth_engine +#define ENGINE_get_pkey_asn1_meth_engine ENGINE_get_pkey_asn1_meth_eng +#undef ENGINE_set_load_ssl_client_cert_function +#define ENGINE_set_load_ssl_client_cert_function \ + ENGINE_set_ld_ssl_clnt_cert_fn +#undef ENGINE_get_ssl_client_cert_function +#define ENGINE_get_ssl_client_cert_function ENGINE_get_ssl_client_cert_fn + +/* Hack some long OCSP names */ +#undef OCSP_REQUEST_get_ext_by_critical +#define OCSP_REQUEST_get_ext_by_critical OCSP_REQUEST_get_ext_by_crit +#undef OCSP_BASICRESP_get_ext_by_critical +#define OCSP_BASICRESP_get_ext_by_critical OCSP_BASICRESP_get_ext_by_crit +#undef OCSP_SINGLERESP_get_ext_by_critical +#define OCSP_SINGLERESP_get_ext_by_critical OCSP_SINGLERESP_get_ext_by_crit + +/* Hack some long DES names */ +#undef _ossl_old_des_ede3_cfb64_encrypt +#define _ossl_old_des_ede3_cfb64_encrypt _ossl_odes_ede3_cfb64_encrypt +#undef _ossl_old_des_ede3_ofb64_encrypt +#define _ossl_old_des_ede3_ofb64_encrypt _ossl_odes_ede3_ofb64_encrypt + +/* Hack some long EVP names */ +#undef OPENSSL_add_all_algorithms_noconf +#define OPENSSL_add_all_algorithms_noconf OPENSSL_add_all_algo_noconf +#undef OPENSSL_add_all_algorithms_conf +#define OPENSSL_add_all_algorithms_conf OPENSSL_add_all_algo_conf +#undef EVP_PKEY_meth_set_verify_recover +#define EVP_PKEY_meth_set_verify_recover EVP_PKEY_meth_set_vrfy_recover + +/* Hack some long EC names */ +#undef EC_GROUP_set_point_conversion_form +#define EC_GROUP_set_point_conversion_form EC_GROUP_set_point_conv_form +#undef EC_GROUP_get_point_conversion_form +#define EC_GROUP_get_point_conversion_form EC_GROUP_get_point_conv_form +#undef EC_GROUP_clear_free_all_extra_data +#define EC_GROUP_clear_free_all_extra_data EC_GROUP_clr_free_all_xtra_data +#undef EC_POINT_set_Jprojective_coordinates_GFp +#define EC_POINT_set_Jprojective_coordinates_GFp \ + EC_POINT_set_Jproj_coords_GFp +#undef EC_POINT_get_Jprojective_coordinates_GFp +#define EC_POINT_get_Jprojective_coordinates_GFp \ + EC_POINT_get_Jproj_coords_GFp +#undef EC_POINT_set_affine_coordinates_GFp +#define EC_POINT_set_affine_coordinates_GFp EC_POINT_set_affine_coords_GFp +#undef EC_POINT_get_affine_coordinates_GFp +#define EC_POINT_get_affine_coordinates_GFp EC_POINT_get_affine_coords_GFp +#undef EC_POINT_set_compressed_coordinates_GFp +#define EC_POINT_set_compressed_coordinates_GFp EC_POINT_set_compr_coords_GFp +#undef EC_POINT_set_affine_coordinates_GF2m +#define EC_POINT_set_affine_coordinates_GF2m EC_POINT_set_affine_coords_GF2m +#undef EC_POINT_get_affine_coordinates_GF2m +#define EC_POINT_get_affine_coordinates_GF2m EC_POINT_get_affine_coords_GF2m +#undef EC_POINT_set_compressed_coordinates_GF2m +#define EC_POINT_set_compressed_coordinates_GF2m \ + EC_POINT_set_compr_coords_GF2m +#undef ec_GF2m_simple_group_clear_finish +#define ec_GF2m_simple_group_clear_finish ec_GF2m_simple_grp_clr_finish +#undef ec_GF2m_simple_group_check_discriminant +#define ec_GF2m_simple_group_check_discriminant ec_GF2m_simple_grp_chk_discrim +#undef ec_GF2m_simple_point_clear_finish +#define ec_GF2m_simple_point_clear_finish ec_GF2m_simple_pt_clr_finish +#undef ec_GF2m_simple_point_set_to_infinity +#define ec_GF2m_simple_point_set_to_infinity ec_GF2m_simple_pt_set_to_inf +#undef ec_GF2m_simple_points_make_affine +#define ec_GF2m_simple_points_make_affine ec_GF2m_simple_pts_make_affine +#undef ec_GF2m_simple_point_set_affine_coordinates +#define ec_GF2m_simple_point_set_affine_coordinates \ + ec_GF2m_smp_pt_set_af_coords +#undef ec_GF2m_simple_point_get_affine_coordinates +#define ec_GF2m_simple_point_get_affine_coordinates \ + ec_GF2m_smp_pt_get_af_coords +#undef ec_GF2m_simple_set_compressed_coordinates +#define ec_GF2m_simple_set_compressed_coordinates \ + ec_GF2m_smp_set_compr_coords +#undef ec_GFp_simple_group_set_curve_GFp +#define ec_GFp_simple_group_set_curve_GFp ec_GFp_simple_grp_set_curve_GFp +#undef ec_GFp_simple_group_get_curve_GFp +#define ec_GFp_simple_group_get_curve_GFp ec_GFp_simple_grp_get_curve_GFp +#undef ec_GFp_simple_group_clear_finish +#define ec_GFp_simple_group_clear_finish ec_GFp_simple_grp_clear_finish +#undef ec_GFp_simple_group_set_generator +#define ec_GFp_simple_group_set_generator ec_GFp_simple_grp_set_generator +#undef ec_GFp_simple_group_get0_generator +#define ec_GFp_simple_group_get0_generator ec_GFp_simple_grp_gt0_generator +#undef ec_GFp_simple_group_get_cofactor +#define ec_GFp_simple_group_get_cofactor ec_GFp_simple_grp_get_cofactor +#undef ec_GFp_simple_point_clear_finish +#define ec_GFp_simple_point_clear_finish ec_GFp_simple_pt_clear_finish +#undef ec_GFp_simple_point_set_to_infinity +#define ec_GFp_simple_point_set_to_infinity ec_GFp_simple_pt_set_to_inf +#undef ec_GFp_simple_points_make_affine +#define ec_GFp_simple_points_make_affine ec_GFp_simple_pts_make_affine +#undef ec_GFp_simple_group_get_curve_GFp +#define ec_GFp_simple_group_get_curve_GFp ec_GFp_simple_grp_get_curve_GFp +#undef ec_GFp_simple_set_Jprojective_coordinates_GFp +#define ec_GFp_simple_set_Jprojective_coordinates_GFp \ + ec_GFp_smp_set_Jproj_coords_GFp +#undef ec_GFp_simple_get_Jprojective_coordinates_GFp +#define ec_GFp_simple_get_Jprojective_coordinates_GFp \ + ec_GFp_smp_get_Jproj_coords_GFp +#undef ec_GFp_simple_point_set_affine_coordinates_GFp +#define ec_GFp_simple_point_set_affine_coordinates_GFp \ + ec_GFp_smp_pt_set_af_coords_GFp +#undef ec_GFp_simple_point_get_affine_coordinates_GFp +#define ec_GFp_simple_point_get_affine_coordinates_GFp \ + ec_GFp_smp_pt_get_af_coords_GFp +#undef ec_GFp_simple_set_compressed_coordinates_GFp +#define ec_GFp_simple_set_compressed_coordinates_GFp \ + ec_GFp_smp_set_compr_coords_GFp +#undef ec_GFp_simple_point_set_affine_coordinates +#define ec_GFp_simple_point_set_affine_coordinates \ + ec_GFp_smp_pt_set_af_coords +#undef ec_GFp_simple_point_get_affine_coordinates +#define ec_GFp_simple_point_get_affine_coordinates \ + ec_GFp_smp_pt_get_af_coords +#undef ec_GFp_simple_set_compressed_coordinates +#define ec_GFp_simple_set_compressed_coordinates \ + ec_GFp_smp_set_compr_coords +#undef ec_GFp_simple_group_check_discriminant +#define ec_GFp_simple_group_check_discriminant ec_GFp_simple_grp_chk_discrim + +/* Hack som long STORE names */ +#undef STORE_method_set_initialise_function +#define STORE_method_set_initialise_function STORE_meth_set_initialise_fn +#undef STORE_method_set_cleanup_function +#define STORE_method_set_cleanup_function STORE_meth_set_cleanup_fn +#undef STORE_method_set_generate_function +#define STORE_method_set_generate_function STORE_meth_set_generate_fn +#undef STORE_method_set_modify_function +#define STORE_method_set_modify_function STORE_meth_set_modify_fn +#undef STORE_method_set_revoke_function +#define STORE_method_set_revoke_function STORE_meth_set_revoke_fn +#undef STORE_method_set_delete_function +#define STORE_method_set_delete_function STORE_meth_set_delete_fn +#undef STORE_method_set_list_start_function +#define STORE_method_set_list_start_function STORE_meth_set_list_start_fn +#undef STORE_method_set_list_next_function +#define STORE_method_set_list_next_function STORE_meth_set_list_next_fn +#undef STORE_method_set_list_end_function +#define STORE_method_set_list_end_function STORE_meth_set_list_end_fn +#undef STORE_method_set_update_store_function +#define STORE_method_set_update_store_function STORE_meth_set_update_store_fn +#undef STORE_method_set_lock_store_function +#define STORE_method_set_lock_store_function STORE_meth_set_lock_store_fn +#undef STORE_method_set_unlock_store_function +#define STORE_method_set_unlock_store_function STORE_meth_set_unlock_store_fn +#undef STORE_method_get_initialise_function +#define STORE_method_get_initialise_function STORE_meth_get_initialise_fn +#undef STORE_method_get_cleanup_function +#define STORE_method_get_cleanup_function STORE_meth_get_cleanup_fn +#undef STORE_method_get_generate_function +#define STORE_method_get_generate_function STORE_meth_get_generate_fn +#undef STORE_method_get_modify_function +#define STORE_method_get_modify_function STORE_meth_get_modify_fn +#undef STORE_method_get_revoke_function +#define STORE_method_get_revoke_function STORE_meth_get_revoke_fn +#undef STORE_method_get_delete_function +#define STORE_method_get_delete_function STORE_meth_get_delete_fn +#undef STORE_method_get_list_start_function +#define STORE_method_get_list_start_function STORE_meth_get_list_start_fn +#undef STORE_method_get_list_next_function +#define STORE_method_get_list_next_function STORE_meth_get_list_next_fn +#undef STORE_method_get_list_end_function +#define STORE_method_get_list_end_function STORE_meth_get_list_end_fn +#undef STORE_method_get_update_store_function +#define STORE_method_get_update_store_function STORE_meth_get_update_store_fn +#undef STORE_method_get_lock_store_function +#define STORE_method_get_lock_store_function STORE_meth_get_lock_store_fn +#undef STORE_method_get_unlock_store_function +#define STORE_method_get_unlock_store_function STORE_meth_get_unlock_store_fn + +/* Hack some long TS names */ +#undef TS_RESP_CTX_set_status_info_cond +#define TS_RESP_CTX_set_status_info_cond TS_RESP_CTX_set_stat_info_cond +#undef TS_RESP_CTX_set_clock_precision_digits +#define TS_RESP_CTX_set_clock_precision_digits TS_RESP_CTX_set_clk_prec_digits +#undef TS_CONF_set_clock_precision_digits +#define TS_CONF_set_clock_precision_digits TS_CONF_set_clk_prec_digits + +/* Hack some long CMS names */ +#undef CMS_RecipientInfo_ktri_get0_algs +#define CMS_RecipientInfo_ktri_get0_algs CMS_RecipInfo_ktri_get0_algs +#undef CMS_RecipientInfo_ktri_get0_signer_id +#define CMS_RecipientInfo_ktri_get0_signer_id CMS_RecipInfo_ktri_get0_sigr_id +#undef CMS_OtherRevocationInfoFormat_it +#define CMS_OtherRevocationInfoFormat_it CMS_OtherRevocInfoFormat_it +#undef CMS_KeyAgreeRecipientIdentifier_it +#define CMS_KeyAgreeRecipientIdentifier_it CMS_KeyAgreeRecipIdentifier_it +#undef CMS_OriginatorIdentifierOrKey_it +#define CMS_OriginatorIdentifierOrKey_it CMS_OriginatorIdOrKey_it +#undef cms_SignerIdentifier_get0_signer_id +#define cms_SignerIdentifier_get0_signer_id cms_SignerId_get0_signer_id + +/* Hack some long DTLS1 names */ +#undef dtls1_retransmit_buffered_messages +#define dtls1_retransmit_buffered_messages dtls1_retransmit_buffered_msgs + +/* Hack some long UI names */ +#undef UI_method_get_prompt_constructor +#define UI_method_get_prompt_constructor UI_method_get_prompt_constructr +#undef UI_method_set_prompt_constructor +#define UI_method_set_prompt_constructor UI_method_set_prompt_constructr + +#endif /* defined OPENSSL_SYS_VMS */ + + +/* Case insensitive linking causes problems.... */ +#if defined(OPENSSL_SYS_VMS) || defined(OPENSSL_SYS_OS2) +#undef ERR_load_CRYPTO_strings +#define ERR_load_CRYPTO_strings ERR_load_CRYPTOlib_strings +#undef OCSP_crlID_new +#define OCSP_crlID_new OCSP_crlID2_new + +#undef d2i_ECPARAMETERS +#define d2i_ECPARAMETERS d2i_UC_ECPARAMETERS +#undef i2d_ECPARAMETERS +#define i2d_ECPARAMETERS i2d_UC_ECPARAMETERS +#undef d2i_ECPKPARAMETERS +#define d2i_ECPKPARAMETERS d2i_UC_ECPKPARAMETERS +#undef i2d_ECPKPARAMETERS +#define i2d_ECPKPARAMETERS i2d_UC_ECPKPARAMETERS + +/* These functions do not seem to exist! However, I'm paranoid... + Original command in x509v3.h: + These functions are being redefined in another directory, + and clash when the linker is case-insensitive, so let's + hide them a little, by giving them an extra 'o' at the + beginning of the name... */ +#undef X509v3_cleanup_extensions +#define X509v3_cleanup_extensions oX509v3_cleanup_extensions +#undef X509v3_add_extension +#define X509v3_add_extension oX509v3_add_extension +#undef X509v3_add_netscape_extensions +#define X509v3_add_netscape_extensions oX509v3_add_netscape_extensions +#undef X509v3_add_standard_extensions +#define X509v3_add_standard_extensions oX509v3_add_standard_extensions + +/* This one clashes with CMS_data_create */ +#undef cms_Data_create +#define cms_Data_create priv_cms_Data_create + +#endif + + +#endif /* ! defined HEADER_VMS_IDHACKS_H */ diff --git a/extra_lib/include/openssl/tls1.h b/extra_lib/include/openssl/tls1.h new file mode 100644 index 0000000..b3cc8f0 --- /dev/null +++ b/extra_lib/include/openssl/tls1.h @@ -0,0 +1,532 @@ +/* ssl/tls1.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 AUTHOR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ +/* ==================================================================== + * Copyright (c) 1998-2006 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED 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 OpenSSL PROJECT OR + * ITS 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. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ +/* ==================================================================== + * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. + * + * Portions of the attached software ("Contribution") are developed by + * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project. + * + * The Contribution is licensed pursuant to the OpenSSL open source + * license provided above. + * + * ECC cipher suite support in OpenSSL originally written by + * Vipul Gupta and Sumit Gupta of Sun Microsystems Laboratories. + * + */ +/* ==================================================================== + * Copyright 2005 Nokia. All rights reserved. + * + * The portions of the attached software ("Contribution") is developed by + * Nokia Corporation and is licensed pursuant to the OpenSSL open source + * license. + * + * The Contribution, originally written by Mika Kousa and Pasi Eronen of + * Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites + * support (see RFC 4279) to OpenSSL. + * + * No patent licenses or other rights except those expressly stated in + * the OpenSSL open source license shall be deemed granted or received + * expressly, by implication, estoppel, or otherwise. + * + * No assurances are provided by Nokia that the Contribution does not + * infringe the patent or other intellectual property rights of any third + * party or that the license provides you with all the necessary rights + * to make use of the Contribution. + * + * THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN + * ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA + * SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY + * OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR + * OTHERWISE. + */ + +#ifndef HEADER_TLS1_H +#define HEADER_TLS1_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define TLS1_ALLOW_EXPERIMENTAL_CIPHERSUITES 0 + +#define TLS1_VERSION 0x0301 +#define TLS1_VERSION_MAJOR 0x03 +#define TLS1_VERSION_MINOR 0x01 + +#define TLS1_AD_DECRYPTION_FAILED 21 +#define TLS1_AD_RECORD_OVERFLOW 22 +#define TLS1_AD_UNKNOWN_CA 48 /* fatal */ +#define TLS1_AD_ACCESS_DENIED 49 /* fatal */ +#define TLS1_AD_DECODE_ERROR 50 /* fatal */ +#define TLS1_AD_DECRYPT_ERROR 51 +#define TLS1_AD_EXPORT_RESTRICTION 60 /* fatal */ +#define TLS1_AD_PROTOCOL_VERSION 70 /* fatal */ +#define TLS1_AD_INSUFFICIENT_SECURITY 71 /* fatal */ +#define TLS1_AD_INTERNAL_ERROR 80 /* fatal */ +#define TLS1_AD_USER_CANCELLED 90 +#define TLS1_AD_NO_RENEGOTIATION 100 +/* codes 110-114 are from RFC3546 */ +#define TLS1_AD_UNSUPPORTED_EXTENSION 110 +#define TLS1_AD_CERTIFICATE_UNOBTAINABLE 111 +#define TLS1_AD_UNRECOGNIZED_NAME 112 +#define TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE 113 +#define TLS1_AD_BAD_CERTIFICATE_HASH_VALUE 114 +#define TLS1_AD_UNKNOWN_PSK_IDENTITY 115 /* fatal */ + +/* ExtensionType values from RFC3546 / RFC4366 */ +#define TLSEXT_TYPE_server_name 0 +#define TLSEXT_TYPE_max_fragment_length 1 +#define TLSEXT_TYPE_client_certificate_url 2 +#define TLSEXT_TYPE_trusted_ca_keys 3 +#define TLSEXT_TYPE_truncated_hmac 4 +#define TLSEXT_TYPE_status_request 5 +/* ExtensionType values from RFC4492 */ +#define TLSEXT_TYPE_elliptic_curves 10 +#define TLSEXT_TYPE_ec_point_formats 11 +#define TLSEXT_TYPE_session_ticket 35 +/* ExtensionType value from draft-rescorla-tls-opaque-prf-input-00.txt */ +#if 0 /* will have to be provided externally for now , + * i.e. build with -DTLSEXT_TYPE_opaque_prf_input=38183 + * using whatever extension number you'd like to try */ +# define TLSEXT_TYPE_opaque_prf_input ?? */ +#endif + +/* Temporary extension type */ +#define TLSEXT_TYPE_renegotiate 0xff01 + +/* NameType value from RFC 3546 */ +#define TLSEXT_NAMETYPE_host_name 0 +/* status request value from RFC 3546 */ +#define TLSEXT_STATUSTYPE_ocsp 1 + +/* ECPointFormat values from draft-ietf-tls-ecc-12 */ +#define TLSEXT_ECPOINTFORMAT_first 0 +#define TLSEXT_ECPOINTFORMAT_uncompressed 0 +#define TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime 1 +#define TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2 2 +#define TLSEXT_ECPOINTFORMAT_last 2 + +#ifndef OPENSSL_NO_TLSEXT + +#define TLSEXT_MAXLEN_host_name 255 + +const char *SSL_get_servername(const SSL *s, const int type) ; +int SSL_get_servername_type(const SSL *s) ; + +#define SSL_set_tlsext_host_name(s,name) \ +SSL_ctrl(s,SSL_CTRL_SET_TLSEXT_HOSTNAME,TLSEXT_NAMETYPE_host_name,(char *)name) + +#define SSL_set_tlsext_debug_callback(ssl, cb) \ +SSL_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_DEBUG_CB,(void (*)(void))cb) + +#define SSL_set_tlsext_debug_arg(ssl, arg) \ +SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_DEBUG_ARG,0, (void *)arg) + +#define SSL_set_tlsext_status_type(ssl, type) \ +SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE,type, NULL) + +#define SSL_get_tlsext_status_exts(ssl, arg) \ +SSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_EXTS,0, (void *)arg) + +#define SSL_set_tlsext_status_exts(ssl, arg) \ +SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS,0, (void *)arg) + +#define SSL_get_tlsext_status_ids(ssl, arg) \ +SSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS,0, (void *)arg) + +#define SSL_set_tlsext_status_ids(ssl, arg) \ +SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS,0, (void *)arg) + +#define SSL_get_tlsext_status_ocsp_resp(ssl, arg) \ +SSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP,0, (void *)arg) + +#define SSL_set_tlsext_status_ocsp_resp(ssl, arg, arglen) \ +SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP,arglen, (void *)arg) + +#define SSL_CTX_set_tlsext_servername_callback(ctx, cb) \ +SSL_CTX_callback_ctrl(ctx,SSL_CTRL_SET_TLSEXT_SERVERNAME_CB,(void (*)(void))cb) + +#define SSL_TLSEXT_ERR_OK 0 +#define SSL_TLSEXT_ERR_ALERT_WARNING 1 +#define SSL_TLSEXT_ERR_ALERT_FATAL 2 +#define SSL_TLSEXT_ERR_NOACK 3 + +#define SSL_CTX_set_tlsext_servername_arg(ctx, arg) \ +SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG,0, (void *)arg) + +#define SSL_CTX_get_tlsext_ticket_keys(ctx, keys, keylen) \ + SSL_CTX_ctrl((ctx),SSL_CTRL_GET_TLSEXT_TICKET_KEYS,(keylen),(keys)) +#define SSL_CTX_set_tlsext_ticket_keys(ctx, keys, keylen) \ + SSL_CTX_ctrl((ctx),SSL_CTRL_SET_TLSEXT_TICKET_KEYS,(keylen),(keys)) + +#define SSL_CTX_set_tlsext_status_cb(ssl, cb) \ +SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB,(void (*)(void))cb) + +#define SSL_CTX_set_tlsext_status_arg(ssl, arg) \ +SSL_CTX_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG,0, (void *)arg) + +#define SSL_set_tlsext_opaque_prf_input(s, src, len) \ +SSL_ctrl(s,SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT, len, src) +#define SSL_CTX_set_tlsext_opaque_prf_input_callback(ctx, cb) \ +SSL_CTX_callback_ctrl(ctx,SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB, (void (*)(void))cb) +#define SSL_CTX_set_tlsext_opaque_prf_input_callback_arg(ctx, arg) \ +SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB_ARG, 0, arg) + +#define SSL_CTX_set_tlsext_ticket_key_cb(ssl, cb) \ +SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB,(void (*)(void))cb) + +#endif + +/* PSK ciphersuites from 4279 */ +#define TLS1_CK_PSK_WITH_RC4_128_SHA 0x0300008A +#define TLS1_CK_PSK_WITH_3DES_EDE_CBC_SHA 0x0300008B +#define TLS1_CK_PSK_WITH_AES_128_CBC_SHA 0x0300008C +#define TLS1_CK_PSK_WITH_AES_256_CBC_SHA 0x0300008D + +/* Additional TLS ciphersuites from expired Internet Draft + * draft-ietf-tls-56-bit-ciphersuites-01.txt + * (available if TLS1_ALLOW_EXPERIMENTAL_CIPHERSUITES is defined, see + * s3_lib.c). We actually treat them like SSL 3.0 ciphers, which we probably + * shouldn't. Note that the first two are actually not in the IDs. */ +#define TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_MD5 0x03000060 /* not in ID */ +#define TLS1_CK_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5 0x03000061 /* not in ID */ +#define TLS1_CK_RSA_EXPORT1024_WITH_DES_CBC_SHA 0x03000062 +#define TLS1_CK_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA 0x03000063 +#define TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_SHA 0x03000064 +#define TLS1_CK_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA 0x03000065 +#define TLS1_CK_DHE_DSS_WITH_RC4_128_SHA 0x03000066 + +/* AES ciphersuites from RFC3268 */ + +#define TLS1_CK_RSA_WITH_AES_128_SHA 0x0300002F +#define TLS1_CK_DH_DSS_WITH_AES_128_SHA 0x03000030 +#define TLS1_CK_DH_RSA_WITH_AES_128_SHA 0x03000031 +#define TLS1_CK_DHE_DSS_WITH_AES_128_SHA 0x03000032 +#define TLS1_CK_DHE_RSA_WITH_AES_128_SHA 0x03000033 +#define TLS1_CK_ADH_WITH_AES_128_SHA 0x03000034 + +#define TLS1_CK_RSA_WITH_AES_256_SHA 0x03000035 +#define TLS1_CK_DH_DSS_WITH_AES_256_SHA 0x03000036 +#define TLS1_CK_DH_RSA_WITH_AES_256_SHA 0x03000037 +#define TLS1_CK_DHE_DSS_WITH_AES_256_SHA 0x03000038 +#define TLS1_CK_DHE_RSA_WITH_AES_256_SHA 0x03000039 +#define TLS1_CK_ADH_WITH_AES_256_SHA 0x0300003A + +/* Camellia ciphersuites from RFC4132 */ +#define TLS1_CK_RSA_WITH_CAMELLIA_128_CBC_SHA 0x03000041 +#define TLS1_CK_DH_DSS_WITH_CAMELLIA_128_CBC_SHA 0x03000042 +#define TLS1_CK_DH_RSA_WITH_CAMELLIA_128_CBC_SHA 0x03000043 +#define TLS1_CK_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA 0x03000044 +#define TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA 0x03000045 +#define TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA 0x03000046 + +#define TLS1_CK_RSA_WITH_CAMELLIA_256_CBC_SHA 0x03000084 +#define TLS1_CK_DH_DSS_WITH_CAMELLIA_256_CBC_SHA 0x03000085 +#define TLS1_CK_DH_RSA_WITH_CAMELLIA_256_CBC_SHA 0x03000086 +#define TLS1_CK_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA 0x03000087 +#define TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA 0x03000088 +#define TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA 0x03000089 + +/* SEED ciphersuites from RFC4162 */ +#define TLS1_CK_RSA_WITH_SEED_SHA 0x03000096 +#define TLS1_CK_DH_DSS_WITH_SEED_SHA 0x03000097 +#define TLS1_CK_DH_RSA_WITH_SEED_SHA 0x03000098 +#define TLS1_CK_DHE_DSS_WITH_SEED_SHA 0x03000099 +#define TLS1_CK_DHE_RSA_WITH_SEED_SHA 0x0300009A +#define TLS1_CK_ADH_WITH_SEED_SHA 0x0300009B + +/* ECC ciphersuites from draft-ietf-tls-ecc-12.txt with changes soon to be in draft 13 */ +#define TLS1_CK_ECDH_ECDSA_WITH_NULL_SHA 0x0300C001 +#define TLS1_CK_ECDH_ECDSA_WITH_RC4_128_SHA 0x0300C002 +#define TLS1_CK_ECDH_ECDSA_WITH_DES_192_CBC3_SHA 0x0300C003 +#define TLS1_CK_ECDH_ECDSA_WITH_AES_128_CBC_SHA 0x0300C004 +#define TLS1_CK_ECDH_ECDSA_WITH_AES_256_CBC_SHA 0x0300C005 + +#define TLS1_CK_ECDHE_ECDSA_WITH_NULL_SHA 0x0300C006 +#define TLS1_CK_ECDHE_ECDSA_WITH_RC4_128_SHA 0x0300C007 +#define TLS1_CK_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA 0x0300C008 +#define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CBC_SHA 0x0300C009 +#define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CBC_SHA 0x0300C00A + +#define TLS1_CK_ECDH_RSA_WITH_NULL_SHA 0x0300C00B +#define TLS1_CK_ECDH_RSA_WITH_RC4_128_SHA 0x0300C00C +#define TLS1_CK_ECDH_RSA_WITH_DES_192_CBC3_SHA 0x0300C00D +#define TLS1_CK_ECDH_RSA_WITH_AES_128_CBC_SHA 0x0300C00E +#define TLS1_CK_ECDH_RSA_WITH_AES_256_CBC_SHA 0x0300C00F + +#define TLS1_CK_ECDHE_RSA_WITH_NULL_SHA 0x0300C010 +#define TLS1_CK_ECDHE_RSA_WITH_RC4_128_SHA 0x0300C011 +#define TLS1_CK_ECDHE_RSA_WITH_DES_192_CBC3_SHA 0x0300C012 +#define TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA 0x0300C013 +#define TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA 0x0300C014 + +#define TLS1_CK_ECDH_anon_WITH_NULL_SHA 0x0300C015 +#define TLS1_CK_ECDH_anon_WITH_RC4_128_SHA 0x0300C016 +#define TLS1_CK_ECDH_anon_WITH_DES_192_CBC3_SHA 0x0300C017 +#define TLS1_CK_ECDH_anon_WITH_AES_128_CBC_SHA 0x0300C018 +#define TLS1_CK_ECDH_anon_WITH_AES_256_CBC_SHA 0x0300C019 + +/* XXX + * Inconsistency alert: + * The OpenSSL names of ciphers with ephemeral DH here include the string + * "DHE", while elsewhere it has always been "EDH". + * (The alias for the list of all such ciphers also is "EDH".) + * The specifications speak of "EDH"; maybe we should allow both forms + * for everything. */ +#define TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_MD5 "EXP1024-RC4-MD5" +#define TLS1_TXT_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5 "EXP1024-RC2-CBC-MD5" +#define TLS1_TXT_RSA_EXPORT1024_WITH_DES_CBC_SHA "EXP1024-DES-CBC-SHA" +#define TLS1_TXT_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA "EXP1024-DHE-DSS-DES-CBC-SHA" +#define TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_SHA "EXP1024-RC4-SHA" +#define TLS1_TXT_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA "EXP1024-DHE-DSS-RC4-SHA" +#define TLS1_TXT_DHE_DSS_WITH_RC4_128_SHA "DHE-DSS-RC4-SHA" + +/* AES ciphersuites from RFC3268 */ +#define TLS1_TXT_RSA_WITH_AES_128_SHA "AES128-SHA" +#define TLS1_TXT_DH_DSS_WITH_AES_128_SHA "DH-DSS-AES128-SHA" +#define TLS1_TXT_DH_RSA_WITH_AES_128_SHA "DH-RSA-AES128-SHA" +#define TLS1_TXT_DHE_DSS_WITH_AES_128_SHA "DHE-DSS-AES128-SHA" +#define TLS1_TXT_DHE_RSA_WITH_AES_128_SHA "DHE-RSA-AES128-SHA" +#define TLS1_TXT_ADH_WITH_AES_128_SHA "ADH-AES128-SHA" + +#define TLS1_TXT_RSA_WITH_AES_256_SHA "AES256-SHA" +#define TLS1_TXT_DH_DSS_WITH_AES_256_SHA "DH-DSS-AES256-SHA" +#define TLS1_TXT_DH_RSA_WITH_AES_256_SHA "DH-RSA-AES256-SHA" +#define TLS1_TXT_DHE_DSS_WITH_AES_256_SHA "DHE-DSS-AES256-SHA" +#define TLS1_TXT_DHE_RSA_WITH_AES_256_SHA "DHE-RSA-AES256-SHA" +#define TLS1_TXT_ADH_WITH_AES_256_SHA "ADH-AES256-SHA" + +/* ECC ciphersuites from draft-ietf-tls-ecc-01.txt (Mar 15, 2001) */ +#define TLS1_TXT_ECDH_ECDSA_WITH_NULL_SHA "ECDH-ECDSA-NULL-SHA" +#define TLS1_TXT_ECDH_ECDSA_WITH_RC4_128_SHA "ECDH-ECDSA-RC4-SHA" +#define TLS1_TXT_ECDH_ECDSA_WITH_DES_192_CBC3_SHA "ECDH-ECDSA-DES-CBC3-SHA" +#define TLS1_TXT_ECDH_ECDSA_WITH_AES_128_CBC_SHA "ECDH-ECDSA-AES128-SHA" +#define TLS1_TXT_ECDH_ECDSA_WITH_AES_256_CBC_SHA "ECDH-ECDSA-AES256-SHA" + +#define TLS1_TXT_ECDHE_ECDSA_WITH_NULL_SHA "ECDHE-ECDSA-NULL-SHA" +#define TLS1_TXT_ECDHE_ECDSA_WITH_RC4_128_SHA "ECDHE-ECDSA-RC4-SHA" +#define TLS1_TXT_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA "ECDHE-ECDSA-DES-CBC3-SHA" +#define TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA "ECDHE-ECDSA-AES128-SHA" +#define TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA "ECDHE-ECDSA-AES256-SHA" + +#define TLS1_TXT_ECDH_RSA_WITH_NULL_SHA "ECDH-RSA-NULL-SHA" +#define TLS1_TXT_ECDH_RSA_WITH_RC4_128_SHA "ECDH-RSA-RC4-SHA" +#define TLS1_TXT_ECDH_RSA_WITH_DES_192_CBC3_SHA "ECDH-RSA-DES-CBC3-SHA" +#define TLS1_TXT_ECDH_RSA_WITH_AES_128_CBC_SHA "ECDH-RSA-AES128-SHA" +#define TLS1_TXT_ECDH_RSA_WITH_AES_256_CBC_SHA "ECDH-RSA-AES256-SHA" + +#define TLS1_TXT_ECDHE_RSA_WITH_NULL_SHA "ECDHE-RSA-NULL-SHA" +#define TLS1_TXT_ECDHE_RSA_WITH_RC4_128_SHA "ECDHE-RSA-RC4-SHA" +#define TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA "ECDHE-RSA-DES-CBC3-SHA" +#define TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA "ECDHE-RSA-AES128-SHA" +#define TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA "ECDHE-RSA-AES256-SHA" + +#define TLS1_TXT_ECDH_anon_WITH_NULL_SHA "AECDH-NULL-SHA" +#define TLS1_TXT_ECDH_anon_WITH_RC4_128_SHA "AECDH-RC4-SHA" +#define TLS1_TXT_ECDH_anon_WITH_DES_192_CBC3_SHA "AECDH-DES-CBC3-SHA" +#define TLS1_TXT_ECDH_anon_WITH_AES_128_CBC_SHA "AECDH-AES128-SHA" +#define TLS1_TXT_ECDH_anon_WITH_AES_256_CBC_SHA "AECDH-AES256-SHA" + +/* PSK ciphersuites from RFC 4279 */ +#define TLS1_TXT_PSK_WITH_RC4_128_SHA "PSK-RC4-SHA" +#define TLS1_TXT_PSK_WITH_3DES_EDE_CBC_SHA "PSK-3DES-EDE-CBC-SHA" +#define TLS1_TXT_PSK_WITH_AES_128_CBC_SHA "PSK-AES128-CBC-SHA" +#define TLS1_TXT_PSK_WITH_AES_256_CBC_SHA "PSK-AES256-CBC-SHA" + +/* Camellia ciphersuites from RFC4132 */ +#define TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA "CAMELLIA128-SHA" +#define TLS1_TXT_DH_DSS_WITH_CAMELLIA_128_CBC_SHA "DH-DSS-CAMELLIA128-SHA" +#define TLS1_TXT_DH_RSA_WITH_CAMELLIA_128_CBC_SHA "DH-RSA-CAMELLIA128-SHA" +#define TLS1_TXT_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA "DHE-DSS-CAMELLIA128-SHA" +#define TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA "DHE-RSA-CAMELLIA128-SHA" +#define TLS1_TXT_ADH_WITH_CAMELLIA_128_CBC_SHA "ADH-CAMELLIA128-SHA" + +#define TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA "CAMELLIA256-SHA" +#define TLS1_TXT_DH_DSS_WITH_CAMELLIA_256_CBC_SHA "DH-DSS-CAMELLIA256-SHA" +#define TLS1_TXT_DH_RSA_WITH_CAMELLIA_256_CBC_SHA "DH-RSA-CAMELLIA256-SHA" +#define TLS1_TXT_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA "DHE-DSS-CAMELLIA256-SHA" +#define TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA "DHE-RSA-CAMELLIA256-SHA" +#define TLS1_TXT_ADH_WITH_CAMELLIA_256_CBC_SHA "ADH-CAMELLIA256-SHA" + +/* SEED ciphersuites from RFC4162 */ +#define TLS1_TXT_RSA_WITH_SEED_SHA "SEED-SHA" +#define TLS1_TXT_DH_DSS_WITH_SEED_SHA "DH-DSS-SEED-SHA" +#define TLS1_TXT_DH_RSA_WITH_SEED_SHA "DH-RSA-SEED-SHA" +#define TLS1_TXT_DHE_DSS_WITH_SEED_SHA "DHE-DSS-SEED-SHA" +#define TLS1_TXT_DHE_RSA_WITH_SEED_SHA "DHE-RSA-SEED-SHA" +#define TLS1_TXT_ADH_WITH_SEED_SHA "ADH-SEED-SHA" + + +#define TLS_CT_RSA_SIGN 1 +#define TLS_CT_DSS_SIGN 2 +#define TLS_CT_RSA_FIXED_DH 3 +#define TLS_CT_DSS_FIXED_DH 4 +#define TLS_CT_ECDSA_SIGN 64 +#define TLS_CT_RSA_FIXED_ECDH 65 +#define TLS_CT_ECDSA_FIXED_ECDH 66 +#define TLS_CT_GOST94_SIGN 21 +#define TLS_CT_GOST01_SIGN 22 +/* when correcting this number, correct also SSL3_CT_NUMBER in ssl3.h (see + * comment there) */ +#define TLS_CT_NUMBER 9 + +#define TLS1_FINISH_MAC_LENGTH 12 + +#define TLS_MD_MAX_CONST_SIZE 20 +#define TLS_MD_CLIENT_FINISH_CONST "client finished" +#define TLS_MD_CLIENT_FINISH_CONST_SIZE 15 +#define TLS_MD_SERVER_FINISH_CONST "server finished" +#define TLS_MD_SERVER_FINISH_CONST_SIZE 15 +#define TLS_MD_SERVER_WRITE_KEY_CONST "server write key" +#define TLS_MD_SERVER_WRITE_KEY_CONST_SIZE 16 +#define TLS_MD_KEY_EXPANSION_CONST "key expansion" +#define TLS_MD_KEY_EXPANSION_CONST_SIZE 13 +#define TLS_MD_CLIENT_WRITE_KEY_CONST "client write key" +#define TLS_MD_CLIENT_WRITE_KEY_CONST_SIZE 16 +#define TLS_MD_SERVER_WRITE_KEY_CONST "server write key" +#define TLS_MD_SERVER_WRITE_KEY_CONST_SIZE 16 +#define TLS_MD_IV_BLOCK_CONST "IV block" +#define TLS_MD_IV_BLOCK_CONST_SIZE 8 +#define TLS_MD_MASTER_SECRET_CONST "master secret" +#define TLS_MD_MASTER_SECRET_CONST_SIZE 13 + +#ifdef CHARSET_EBCDIC +#undef TLS_MD_CLIENT_FINISH_CONST +#define TLS_MD_CLIENT_FINISH_CONST "\x63\x6c\x69\x65\x6e\x74\x20\x66\x69\x6e\x69\x73\x68\x65\x64" /*client finished*/ +#undef TLS_MD_SERVER_FINISH_CONST +#define TLS_MD_SERVER_FINISH_CONST "\x73\x65\x72\x76\x65\x72\x20\x66\x69\x6e\x69\x73\x68\x65\x64" /*server finished*/ +#undef TLS_MD_SERVER_WRITE_KEY_CONST +#define TLS_MD_SERVER_WRITE_KEY_CONST "\x73\x65\x72\x76\x65\x72\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" /*server write key*/ +#undef TLS_MD_KEY_EXPANSION_CONST +#define TLS_MD_KEY_EXPANSION_CONST "\x6b\x65\x79\x20\x65\x78\x70\x61\x6e\x73\x69\x6f\x6e" /*key expansion*/ +#undef TLS_MD_CLIENT_WRITE_KEY_CONST +#define TLS_MD_CLIENT_WRITE_KEY_CONST "\x63\x6c\x69\x65\x6e\x74\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" /*client write key*/ +#undef TLS_MD_SERVER_WRITE_KEY_CONST +#define TLS_MD_SERVER_WRITE_KEY_CONST "\x73\x65\x72\x76\x65\x72\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" /*server write key*/ +#undef TLS_MD_IV_BLOCK_CONST +#define TLS_MD_IV_BLOCK_CONST "\x49\x56\x20\x62\x6c\x6f\x63\x6b" /*IV block*/ +#undef TLS_MD_MASTER_SECRET_CONST +#define TLS_MD_MASTER_SECRET_CONST "\x6d\x61\x73\x74\x65\x72\x20\x73\x65\x63\x72\x65\x74" /*master secret*/ +#endif + +/* TLS Session Ticket extension struct */ +struct tls_session_ticket_ext_st + { + unsigned short length; + void *data; + }; + +#ifdef __cplusplus +} +#endif +#endif diff --git a/extra_lib/include/openssl/x509.h b/extra_lib/include/openssl/x509.h new file mode 100644 index 0000000..e6f8a40 --- /dev/null +++ b/extra_lib/include/openssl/x509.h @@ -0,0 +1,1286 @@ +/* crypto/x509/x509.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 AUTHOR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ +/* ==================================================================== + * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. + * ECDH support in OpenSSL originally developed by + * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project. + */ + +#ifndef HEADER_X509_H +#define HEADER_X509_H + +#include +#include +#ifndef OPENSSL_NO_BUFFER +#include +#endif +#ifndef OPENSSL_NO_EVP +#include +#endif +#ifndef OPENSSL_NO_BIO +#include +#endif +#include +#include +#include + +#ifndef OPENSSL_NO_EC +#include +#endif + +#ifndef OPENSSL_NO_ECDSA +#include +#endif + +#ifndef OPENSSL_NO_ECDH +#include +#endif + +#ifndef OPENSSL_NO_DEPRECATED +#ifndef OPENSSL_NO_RSA +#include +#endif +#ifndef OPENSSL_NO_DSA +#include +#endif +#ifndef OPENSSL_NO_DH +#include +#endif +#endif + +#ifndef OPENSSL_NO_SHA +#include +#endif +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef OPENSSL_SYS_WIN32 +/* Under Win32 these are defined in wincrypt.h */ +#undef X509_NAME +#undef X509_CERT_PAIR +#undef X509_EXTENSIONS +#endif + +#define X509_FILETYPE_PEM 1 +#define X509_FILETYPE_ASN1 2 +#define X509_FILETYPE_DEFAULT 3 + +#define X509v3_KU_DIGITAL_SIGNATURE 0x0080 +#define X509v3_KU_NON_REPUDIATION 0x0040 +#define X509v3_KU_KEY_ENCIPHERMENT 0x0020 +#define X509v3_KU_DATA_ENCIPHERMENT 0x0010 +#define X509v3_KU_KEY_AGREEMENT 0x0008 +#define X509v3_KU_KEY_CERT_SIGN 0x0004 +#define X509v3_KU_CRL_SIGN 0x0002 +#define X509v3_KU_ENCIPHER_ONLY 0x0001 +#define X509v3_KU_DECIPHER_ONLY 0x8000 +#define X509v3_KU_UNDEF 0xffff + +typedef struct X509_objects_st + { + int nid; + int (*a2i)(void); + int (*i2a)(void); + } X509_OBJECTS; + +struct X509_algor_st + { + ASN1_OBJECT *algorithm; + ASN1_TYPE *parameter; + } /* X509_ALGOR */; + +DECLARE_ASN1_SET_OF(X509_ALGOR) + +typedef STACK_OF(X509_ALGOR) X509_ALGORS; + +typedef struct X509_val_st + { + ASN1_TIME *notBefore; + ASN1_TIME *notAfter; + } X509_VAL; + +struct X509_pubkey_st + { + X509_ALGOR *algor; + ASN1_BIT_STRING *public_key; + EVP_PKEY *pkey; + }; + +typedef struct X509_sig_st + { + X509_ALGOR *algor; + ASN1_OCTET_STRING *digest; + } X509_SIG; + +typedef struct X509_name_entry_st + { + ASN1_OBJECT *object; + ASN1_STRING *value; + int set; + int size; /* temp variable */ + } X509_NAME_ENTRY; + +DECLARE_STACK_OF(X509_NAME_ENTRY) +DECLARE_ASN1_SET_OF(X509_NAME_ENTRY) + +/* we always keep X509_NAMEs in 2 forms. */ +struct X509_name_st + { + STACK_OF(X509_NAME_ENTRY) *entries; + int modified; /* true if 'bytes' needs to be built */ +#ifndef OPENSSL_NO_BUFFER + BUF_MEM *bytes; +#else + char *bytes; +#endif +/* unsigned long hash; Keep the hash around for lookups */ + unsigned char *canon_enc; + int canon_enclen; + } /* X509_NAME */; + +DECLARE_STACK_OF(X509_NAME) + +#define X509_EX_V_NETSCAPE_HACK 0x8000 +#define X509_EX_V_INIT 0x0001 +typedef struct X509_extension_st + { + ASN1_OBJECT *object; + ASN1_BOOLEAN critical; + ASN1_OCTET_STRING *value; + } X509_EXTENSION; + +typedef STACK_OF(X509_EXTENSION) X509_EXTENSIONS; + +DECLARE_STACK_OF(X509_EXTENSION) +DECLARE_ASN1_SET_OF(X509_EXTENSION) + +/* a sequence of these are used */ +typedef struct x509_attributes_st + { + ASN1_OBJECT *object; + int single; /* 0 for a set, 1 for a single item (which is wrong) */ + union { + char *ptr; +/* 0 */ STACK_OF(ASN1_TYPE) *set; +/* 1 */ ASN1_TYPE *single; + } value; + } X509_ATTRIBUTE; + +DECLARE_STACK_OF(X509_ATTRIBUTE) +DECLARE_ASN1_SET_OF(X509_ATTRIBUTE) + + +typedef struct X509_req_info_st + { + ASN1_ENCODING enc; + ASN1_INTEGER *version; + X509_NAME *subject; + X509_PUBKEY *pubkey; + /* d=2 hl=2 l= 0 cons: cont: 00 */ + STACK_OF(X509_ATTRIBUTE) *attributes; /* [ 0 ] */ + } X509_REQ_INFO; + +typedef struct X509_req_st + { + X509_REQ_INFO *req_info; + X509_ALGOR *sig_alg; + ASN1_BIT_STRING *signature; + int references; + } X509_REQ; + +typedef struct x509_cinf_st + { + ASN1_INTEGER *version; /* [ 0 ] default of v1 */ + ASN1_INTEGER *serialNumber; + X509_ALGOR *signature; + X509_NAME *issuer; + X509_VAL *validity; + X509_NAME *subject; + X509_PUBKEY *key; + ASN1_BIT_STRING *issuerUID; /* [ 1 ] optional in v2 */ + ASN1_BIT_STRING *subjectUID; /* [ 2 ] optional in v2 */ + STACK_OF(X509_EXTENSION) *extensions; /* [ 3 ] optional in v3 */ + ASN1_ENCODING enc; + } X509_CINF; + +/* This stuff is certificate "auxiliary info" + * it contains details which are useful in certificate + * stores and databases. When used this is tagged onto + * the end of the certificate itself + */ + +typedef struct x509_cert_aux_st + { + STACK_OF(ASN1_OBJECT) *trust; /* trusted uses */ + STACK_OF(ASN1_OBJECT) *reject; /* rejected uses */ + ASN1_UTF8STRING *alias; /* "friendly name" */ + ASN1_OCTET_STRING *keyid; /* key id of private key */ + STACK_OF(X509_ALGOR) *other; /* other unspecified info */ + } X509_CERT_AUX; + +struct x509_st + { + X509_CINF *cert_info; + X509_ALGOR *sig_alg; + ASN1_BIT_STRING *signature; + int valid; + int references; + char *name; + CRYPTO_EX_DATA ex_data; + /* These contain copies of various extension values */ + long ex_pathlen; + long ex_pcpathlen; + unsigned long ex_flags; + unsigned long ex_kusage; + unsigned long ex_xkusage; + unsigned long ex_nscert; + ASN1_OCTET_STRING *skid; + AUTHORITY_KEYID *akid; + X509_POLICY_CACHE *policy_cache; + STACK_OF(DIST_POINT) *crldp; + STACK_OF(GENERAL_NAME) *altname; + NAME_CONSTRAINTS *nc; +#ifndef OPENSSL_NO_RFC3779 + STACK_OF(IPAddressFamily) *rfc3779_addr; + struct ASIdentifiers_st *rfc3779_asid; +#endif +#ifndef OPENSSL_NO_SHA + unsigned char sha1_hash[SHA_DIGEST_LENGTH]; +#endif + X509_CERT_AUX *aux; + } /* X509 */; + +DECLARE_STACK_OF(X509) +DECLARE_ASN1_SET_OF(X509) + +/* This is used for a table of trust checking functions */ + +typedef struct x509_trust_st { + int trust; + int flags; + int (*check_trust)(struct x509_trust_st *, X509 *, int); + char *name; + int arg1; + void *arg2; +} X509_TRUST; + +DECLARE_STACK_OF(X509_TRUST) + +typedef struct x509_cert_pair_st { + X509 *forward; + X509 *reverse; +} X509_CERT_PAIR; + +/* standard trust ids */ + +#define X509_TRUST_DEFAULT -1 /* Only valid in purpose settings */ + +#define X509_TRUST_COMPAT 1 +#define X509_TRUST_SSL_CLIENT 2 +#define X509_TRUST_SSL_SERVER 3 +#define X509_TRUST_EMAIL 4 +#define X509_TRUST_OBJECT_SIGN 5 +#define X509_TRUST_OCSP_SIGN 6 +#define X509_TRUST_OCSP_REQUEST 7 +#define X509_TRUST_TSA 8 + +/* Keep these up to date! */ +#define X509_TRUST_MIN 1 +#define X509_TRUST_MAX 8 + + +/* trust_flags values */ +#define X509_TRUST_DYNAMIC 1 +#define X509_TRUST_DYNAMIC_NAME 2 + +/* check_trust return codes */ + +#define X509_TRUST_TRUSTED 1 +#define X509_TRUST_REJECTED 2 +#define X509_TRUST_UNTRUSTED 3 + +/* Flags for X509_print_ex() */ + +#define X509_FLAG_COMPAT 0 +#define X509_FLAG_NO_HEADER 1L +#define X509_FLAG_NO_VERSION (1L << 1) +#define X509_FLAG_NO_SERIAL (1L << 2) +#define X509_FLAG_NO_SIGNAME (1L << 3) +#define X509_FLAG_NO_ISSUER (1L << 4) +#define X509_FLAG_NO_VALIDITY (1L << 5) +#define X509_FLAG_NO_SUBJECT (1L << 6) +#define X509_FLAG_NO_PUBKEY (1L << 7) +#define X509_FLAG_NO_EXTENSIONS (1L << 8) +#define X509_FLAG_NO_SIGDUMP (1L << 9) +#define X509_FLAG_NO_AUX (1L << 10) +#define X509_FLAG_NO_ATTRIBUTES (1L << 11) + +/* Flags specific to X509_NAME_print_ex() */ + +/* The field separator information */ + +#define XN_FLAG_SEP_MASK (0xf << 16) + +#define XN_FLAG_COMPAT 0 /* Traditional SSLeay: use old X509_NAME_print */ +#define XN_FLAG_SEP_COMMA_PLUS (1 << 16) /* RFC2253 ,+ */ +#define XN_FLAG_SEP_CPLUS_SPC (2 << 16) /* ,+ spaced: more readable */ +#define XN_FLAG_SEP_SPLUS_SPC (3 << 16) /* ;+ spaced */ +#define XN_FLAG_SEP_MULTILINE (4 << 16) /* One line per field */ + +#define XN_FLAG_DN_REV (1 << 20) /* Reverse DN order */ + +/* How the field name is shown */ + +#define XN_FLAG_FN_MASK (0x3 << 21) + +#define XN_FLAG_FN_SN 0 /* Object short name */ +#define XN_FLAG_FN_LN (1 << 21) /* Object long name */ +#define XN_FLAG_FN_OID (2 << 21) /* Always use OIDs */ +#define XN_FLAG_FN_NONE (3 << 21) /* No field names */ + +#define XN_FLAG_SPC_EQ (1 << 23) /* Put spaces round '=' */ + +/* This determines if we dump fields we don't recognise: + * RFC2253 requires this. + */ + +#define XN_FLAG_DUMP_UNKNOWN_FIELDS (1 << 24) + +#define XN_FLAG_FN_ALIGN (1 << 25) /* Align field names to 20 characters */ + +/* Complete set of RFC2253 flags */ + +#define XN_FLAG_RFC2253 (ASN1_STRFLGS_RFC2253 | \ + XN_FLAG_SEP_COMMA_PLUS | \ + XN_FLAG_DN_REV | \ + XN_FLAG_FN_SN | \ + XN_FLAG_DUMP_UNKNOWN_FIELDS) + +/* readable oneline form */ + +#define XN_FLAG_ONELINE (ASN1_STRFLGS_RFC2253 | \ + ASN1_STRFLGS_ESC_QUOTE | \ + XN_FLAG_SEP_CPLUS_SPC | \ + XN_FLAG_SPC_EQ | \ + XN_FLAG_FN_SN) + +/* readable multiline form */ + +#define XN_FLAG_MULTILINE (ASN1_STRFLGS_ESC_CTRL | \ + ASN1_STRFLGS_ESC_MSB | \ + XN_FLAG_SEP_MULTILINE | \ + XN_FLAG_SPC_EQ | \ + XN_FLAG_FN_LN | \ + XN_FLAG_FN_ALIGN) + +struct x509_revoked_st + { + ASN1_INTEGER *serialNumber; + ASN1_TIME *revocationDate; + STACK_OF(X509_EXTENSION) /* optional */ *extensions; + /* Set up if indirect CRL */ + STACK_OF(GENERAL_NAME) *issuer; + /* Revocation reason */ + int reason; + int sequence; /* load sequence */ + }; + +DECLARE_STACK_OF(X509_REVOKED) +DECLARE_ASN1_SET_OF(X509_REVOKED) + +typedef struct X509_crl_info_st + { + ASN1_INTEGER *version; + X509_ALGOR *sig_alg; + X509_NAME *issuer; + ASN1_TIME *lastUpdate; + ASN1_TIME *nextUpdate; + STACK_OF(X509_REVOKED) *revoked; + STACK_OF(X509_EXTENSION) /* [0] */ *extensions; + ASN1_ENCODING enc; + } X509_CRL_INFO; + +struct X509_crl_st + { + /* actual signature */ + X509_CRL_INFO *crl; + X509_ALGOR *sig_alg; + ASN1_BIT_STRING *signature; + int references; + int flags; + /* Copies of various extensions */ + AUTHORITY_KEYID *akid; + ISSUING_DIST_POINT *idp; + /* Convenient breakdown of IDP */ + int idp_flags; + int idp_reasons; + /* CRL and base CRL numbers for delta processing */ + ASN1_INTEGER *crl_number; + ASN1_INTEGER *base_crl_number; +#ifndef OPENSSL_NO_SHA + unsigned char sha1_hash[SHA_DIGEST_LENGTH]; +#endif + STACK_OF(GENERAL_NAMES) *issuers; + const X509_CRL_METHOD *meth; + void *meth_data; + } /* X509_CRL */; + +DECLARE_STACK_OF(X509_CRL) +DECLARE_ASN1_SET_OF(X509_CRL) + +typedef struct private_key_st + { + int version; + /* The PKCS#8 data types */ + X509_ALGOR *enc_algor; + ASN1_OCTET_STRING *enc_pkey; /* encrypted pub key */ + + /* When decrypted, the following will not be NULL */ + EVP_PKEY *dec_pkey; + + /* used to encrypt and decrypt */ + int key_length; + char *key_data; + int key_free; /* true if we should auto free key_data */ + + /* expanded version of 'enc_algor' */ + EVP_CIPHER_INFO cipher; + + int references; + } X509_PKEY; + +#ifndef OPENSSL_NO_EVP +typedef struct X509_info_st + { + X509 *x509; + X509_CRL *crl; + X509_PKEY *x_pkey; + + EVP_CIPHER_INFO enc_cipher; + int enc_len; + char *enc_data; + + int references; + } X509_INFO; + +DECLARE_STACK_OF(X509_INFO) +#endif + +/* The next 2 structures and their 8 routines were sent to me by + * Pat Richard and are used to manipulate + * Netscapes spki structures - useful if you are writing a CA web page + */ +typedef struct Netscape_spkac_st + { + X509_PUBKEY *pubkey; + ASN1_IA5STRING *challenge; /* challenge sent in atlas >= PR2 */ + } NETSCAPE_SPKAC; + +typedef struct Netscape_spki_st + { + NETSCAPE_SPKAC *spkac; /* signed public key and challenge */ + X509_ALGOR *sig_algor; + ASN1_BIT_STRING *signature; + } NETSCAPE_SPKI; + +/* Netscape certificate sequence structure */ +typedef struct Netscape_certificate_sequence + { + ASN1_OBJECT *type; + STACK_OF(X509) *certs; + } NETSCAPE_CERT_SEQUENCE; + +/* Unused (and iv length is wrong) +typedef struct CBCParameter_st + { + unsigned char iv[8]; + } CBC_PARAM; +*/ + +/* Password based encryption structure */ + +typedef struct PBEPARAM_st { +ASN1_OCTET_STRING *salt; +ASN1_INTEGER *iter; +} PBEPARAM; + +/* Password based encryption V2 structures */ + +typedef struct PBE2PARAM_st { +X509_ALGOR *keyfunc; +X509_ALGOR *encryption; +} PBE2PARAM; + +typedef struct PBKDF2PARAM_st { +ASN1_TYPE *salt; /* Usually OCTET STRING but could be anything */ +ASN1_INTEGER *iter; +ASN1_INTEGER *keylength; +X509_ALGOR *prf; +} PBKDF2PARAM; + + +/* PKCS#8 private key info structure */ + +struct pkcs8_priv_key_info_st + { + int broken; /* Flag for various broken formats */ +#define PKCS8_OK 0 +#define PKCS8_NO_OCTET 1 +#define PKCS8_EMBEDDED_PARAM 2 +#define PKCS8_NS_DB 3 +#define PKCS8_NEG_PRIVKEY 4 + ASN1_INTEGER *version; + X509_ALGOR *pkeyalg; + ASN1_TYPE *pkey; /* Should be OCTET STRING but some are broken */ + STACK_OF(X509_ATTRIBUTE) *attributes; + }; + +#ifdef __cplusplus +} +#endif + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define X509_EXT_PACK_UNKNOWN 1 +#define X509_EXT_PACK_STRING 2 + +#define X509_get_version(x) ASN1_INTEGER_get((x)->cert_info->version) +/* #define X509_get_serialNumber(x) ((x)->cert_info->serialNumber) */ +#define X509_get_notBefore(x) ((x)->cert_info->validity->notBefore) +#define X509_get_notAfter(x) ((x)->cert_info->validity->notAfter) +#define X509_extract_key(x) X509_get_pubkey(x) /*****/ +#define X509_REQ_get_version(x) ASN1_INTEGER_get((x)->req_info->version) +#define X509_REQ_get_subject_name(x) ((x)->req_info->subject) +#define X509_REQ_extract_key(a) X509_REQ_get_pubkey(a) +#define X509_name_cmp(a,b) X509_NAME_cmp((a),(b)) +#define X509_get_signature_type(x) EVP_PKEY_type(OBJ_obj2nid((x)->sig_alg->algorithm)) + +#define X509_CRL_get_version(x) ASN1_INTEGER_get((x)->crl->version) +#define X509_CRL_get_lastUpdate(x) ((x)->crl->lastUpdate) +#define X509_CRL_get_nextUpdate(x) ((x)->crl->nextUpdate) +#define X509_CRL_get_issuer(x) ((x)->crl->issuer) +#define X509_CRL_get_REVOKED(x) ((x)->crl->revoked) + +void X509_CRL_set_default_method(const X509_CRL_METHOD *meth); +X509_CRL_METHOD *X509_CRL_METHOD_new( + int (*crl_init)(X509_CRL *crl), + int (*crl_free)(X509_CRL *crl), + int (*crl_lookup)(X509_CRL *crl, X509_REVOKED **ret, + ASN1_INTEGER *ser, X509_NAME *issuer), + int (*crl_verify)(X509_CRL *crl, EVP_PKEY *pk)); +void X509_CRL_METHOD_free(X509_CRL_METHOD *m); + +void X509_CRL_set_meth_data(X509_CRL *crl, void *dat); +void *X509_CRL_get_meth_data(X509_CRL *crl); + +/* This one is only used so that a binary form can output, as in + * i2d_X509_NAME(X509_get_X509_PUBKEY(x),&buf) */ +#define X509_get_X509_PUBKEY(x) ((x)->cert_info->key) + + +const char *X509_verify_cert_error_string(long n); + +#ifndef OPENSSL_NO_EVP +int X509_verify(X509 *a, EVP_PKEY *r); + +int X509_REQ_verify(X509_REQ *a, EVP_PKEY *r); +int X509_CRL_verify(X509_CRL *a, EVP_PKEY *r); +int NETSCAPE_SPKI_verify(NETSCAPE_SPKI *a, EVP_PKEY *r); + +NETSCAPE_SPKI * NETSCAPE_SPKI_b64_decode(const char *str, int len); +char * NETSCAPE_SPKI_b64_encode(NETSCAPE_SPKI *x); +EVP_PKEY *NETSCAPE_SPKI_get_pubkey(NETSCAPE_SPKI *x); +int NETSCAPE_SPKI_set_pubkey(NETSCAPE_SPKI *x, EVP_PKEY *pkey); + +int NETSCAPE_SPKI_print(BIO *out, NETSCAPE_SPKI *spki); + +int X509_signature_print(BIO *bp,X509_ALGOR *alg, ASN1_STRING *sig); + +int X509_sign(X509 *x, EVP_PKEY *pkey, const EVP_MD *md); +int X509_REQ_sign(X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md); +int X509_CRL_sign(X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md); +int NETSCAPE_SPKI_sign(NETSCAPE_SPKI *x, EVP_PKEY *pkey, const EVP_MD *md); + +int X509_pubkey_digest(const X509 *data,const EVP_MD *type, + unsigned char *md, unsigned int *len); +int X509_digest(const X509 *data,const EVP_MD *type, + unsigned char *md, unsigned int *len); +int X509_CRL_digest(const X509_CRL *data,const EVP_MD *type, + unsigned char *md, unsigned int *len); +int X509_REQ_digest(const X509_REQ *data,const EVP_MD *type, + unsigned char *md, unsigned int *len); +int X509_NAME_digest(const X509_NAME *data,const EVP_MD *type, + unsigned char *md, unsigned int *len); +#endif + +#ifndef OPENSSL_NO_FP_API +X509 *d2i_X509_fp(FILE *fp, X509 **x509); +int i2d_X509_fp(FILE *fp,X509 *x509); +X509_CRL *d2i_X509_CRL_fp(FILE *fp,X509_CRL **crl); +int i2d_X509_CRL_fp(FILE *fp,X509_CRL *crl); +X509_REQ *d2i_X509_REQ_fp(FILE *fp,X509_REQ **req); +int i2d_X509_REQ_fp(FILE *fp,X509_REQ *req); +#ifndef OPENSSL_NO_RSA +RSA *d2i_RSAPrivateKey_fp(FILE *fp,RSA **rsa); +int i2d_RSAPrivateKey_fp(FILE *fp,RSA *rsa); +RSA *d2i_RSAPublicKey_fp(FILE *fp,RSA **rsa); +int i2d_RSAPublicKey_fp(FILE *fp,RSA *rsa); +RSA *d2i_RSA_PUBKEY_fp(FILE *fp,RSA **rsa); +int i2d_RSA_PUBKEY_fp(FILE *fp,RSA *rsa); +#endif +#ifndef OPENSSL_NO_DSA +DSA *d2i_DSA_PUBKEY_fp(FILE *fp, DSA **dsa); +int i2d_DSA_PUBKEY_fp(FILE *fp, DSA *dsa); +DSA *d2i_DSAPrivateKey_fp(FILE *fp, DSA **dsa); +int i2d_DSAPrivateKey_fp(FILE *fp, DSA *dsa); +#endif +#ifndef OPENSSL_NO_EC +EC_KEY *d2i_EC_PUBKEY_fp(FILE *fp, EC_KEY **eckey); +int i2d_EC_PUBKEY_fp(FILE *fp, EC_KEY *eckey); +EC_KEY *d2i_ECPrivateKey_fp(FILE *fp, EC_KEY **eckey); +int i2d_ECPrivateKey_fp(FILE *fp, EC_KEY *eckey); +#endif +X509_SIG *d2i_PKCS8_fp(FILE *fp,X509_SIG **p8); +int i2d_PKCS8_fp(FILE *fp,X509_SIG *p8); +PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, + PKCS8_PRIV_KEY_INFO **p8inf); +int i2d_PKCS8_PRIV_KEY_INFO_fp(FILE *fp,PKCS8_PRIV_KEY_INFO *p8inf); +int i2d_PKCS8PrivateKeyInfo_fp(FILE *fp, EVP_PKEY *key); +int i2d_PrivateKey_fp(FILE *fp, EVP_PKEY *pkey); +EVP_PKEY *d2i_PrivateKey_fp(FILE *fp, EVP_PKEY **a); +int i2d_PUBKEY_fp(FILE *fp, EVP_PKEY *pkey); +EVP_PKEY *d2i_PUBKEY_fp(FILE *fp, EVP_PKEY **a); +#endif + +#ifndef OPENSSL_NO_BIO +X509 *d2i_X509_bio(BIO *bp,X509 **x509); +int i2d_X509_bio(BIO *bp,X509 *x509); +X509_CRL *d2i_X509_CRL_bio(BIO *bp,X509_CRL **crl); +int i2d_X509_CRL_bio(BIO *bp,X509_CRL *crl); +X509_REQ *d2i_X509_REQ_bio(BIO *bp,X509_REQ **req); +int i2d_X509_REQ_bio(BIO *bp,X509_REQ *req); +#ifndef OPENSSL_NO_RSA +RSA *d2i_RSAPrivateKey_bio(BIO *bp,RSA **rsa); +int i2d_RSAPrivateKey_bio(BIO *bp,RSA *rsa); +RSA *d2i_RSAPublicKey_bio(BIO *bp,RSA **rsa); +int i2d_RSAPublicKey_bio(BIO *bp,RSA *rsa); +RSA *d2i_RSA_PUBKEY_bio(BIO *bp,RSA **rsa); +int i2d_RSA_PUBKEY_bio(BIO *bp,RSA *rsa); +#endif +#ifndef OPENSSL_NO_DSA +DSA *d2i_DSA_PUBKEY_bio(BIO *bp, DSA **dsa); +int i2d_DSA_PUBKEY_bio(BIO *bp, DSA *dsa); +DSA *d2i_DSAPrivateKey_bio(BIO *bp, DSA **dsa); +int i2d_DSAPrivateKey_bio(BIO *bp, DSA *dsa); +#endif +#ifndef OPENSSL_NO_EC +EC_KEY *d2i_EC_PUBKEY_bio(BIO *bp, EC_KEY **eckey); +int i2d_EC_PUBKEY_bio(BIO *bp, EC_KEY *eckey); +EC_KEY *d2i_ECPrivateKey_bio(BIO *bp, EC_KEY **eckey); +int i2d_ECPrivateKey_bio(BIO *bp, EC_KEY *eckey); +#endif +X509_SIG *d2i_PKCS8_bio(BIO *bp,X509_SIG **p8); +int i2d_PKCS8_bio(BIO *bp,X509_SIG *p8); +PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, + PKCS8_PRIV_KEY_INFO **p8inf); +int i2d_PKCS8_PRIV_KEY_INFO_bio(BIO *bp,PKCS8_PRIV_KEY_INFO *p8inf); +int i2d_PKCS8PrivateKeyInfo_bio(BIO *bp, EVP_PKEY *key); +int i2d_PrivateKey_bio(BIO *bp, EVP_PKEY *pkey); +EVP_PKEY *d2i_PrivateKey_bio(BIO *bp, EVP_PKEY **a); +int i2d_PUBKEY_bio(BIO *bp, EVP_PKEY *pkey); +EVP_PKEY *d2i_PUBKEY_bio(BIO *bp, EVP_PKEY **a); +#endif + +X509 *X509_dup(X509 *x509); +X509_ATTRIBUTE *X509_ATTRIBUTE_dup(X509_ATTRIBUTE *xa); +X509_EXTENSION *X509_EXTENSION_dup(X509_EXTENSION *ex); +X509_CRL *X509_CRL_dup(X509_CRL *crl); +X509_REQ *X509_REQ_dup(X509_REQ *req); +X509_ALGOR *X509_ALGOR_dup(X509_ALGOR *xn); +int X509_ALGOR_set0(X509_ALGOR *alg, ASN1_OBJECT *aobj, int ptype, void *pval); +void X509_ALGOR_get0(ASN1_OBJECT **paobj, int *pptype, void **ppval, + X509_ALGOR *algor); + +X509_NAME *X509_NAME_dup(X509_NAME *xn); +X509_NAME_ENTRY *X509_NAME_ENTRY_dup(X509_NAME_ENTRY *ne); + +int X509_cmp_time(const ASN1_TIME *s, time_t *t); +int X509_cmp_current_time(const ASN1_TIME *s); +ASN1_TIME * X509_time_adj(ASN1_TIME *s, long adj, time_t *t); +ASN1_TIME * X509_time_adj_ex(ASN1_TIME *s, + int offset_day, long offset_sec, time_t *t); +ASN1_TIME * X509_gmtime_adj(ASN1_TIME *s, long adj); + +const char * X509_get_default_cert_area(void ); +const char * X509_get_default_cert_dir(void ); +const char * X509_get_default_cert_file(void ); +const char * X509_get_default_cert_dir_env(void ); +const char * X509_get_default_cert_file_env(void ); +const char * X509_get_default_private_dir(void ); + +X509_REQ * X509_to_X509_REQ(X509 *x, EVP_PKEY *pkey, const EVP_MD *md); +X509 * X509_REQ_to_X509(X509_REQ *r, int days,EVP_PKEY *pkey); + +DECLARE_ASN1_FUNCTIONS(X509_ALGOR) +DECLARE_ASN1_ENCODE_FUNCTIONS(X509_ALGORS, X509_ALGORS, X509_ALGORS) +DECLARE_ASN1_FUNCTIONS(X509_VAL) + +DECLARE_ASN1_FUNCTIONS(X509_PUBKEY) + +int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey); +EVP_PKEY * X509_PUBKEY_get(X509_PUBKEY *key); +int X509_get_pubkey_parameters(EVP_PKEY *pkey, + STACK_OF(X509) *chain); +int i2d_PUBKEY(EVP_PKEY *a,unsigned char **pp); +EVP_PKEY * d2i_PUBKEY(EVP_PKEY **a,const unsigned char **pp, + long length); +#ifndef OPENSSL_NO_RSA +int i2d_RSA_PUBKEY(RSA *a,unsigned char **pp); +RSA * d2i_RSA_PUBKEY(RSA **a,const unsigned char **pp, + long length); +#endif +#ifndef OPENSSL_NO_DSA +int i2d_DSA_PUBKEY(DSA *a,unsigned char **pp); +DSA * d2i_DSA_PUBKEY(DSA **a,const unsigned char **pp, + long length); +#endif +#ifndef OPENSSL_NO_EC +int i2d_EC_PUBKEY(EC_KEY *a, unsigned char **pp); +EC_KEY *d2i_EC_PUBKEY(EC_KEY **a, const unsigned char **pp, + long length); +#endif + +DECLARE_ASN1_FUNCTIONS(X509_SIG) +DECLARE_ASN1_FUNCTIONS(X509_REQ_INFO) +DECLARE_ASN1_FUNCTIONS(X509_REQ) + +DECLARE_ASN1_FUNCTIONS(X509_ATTRIBUTE) +X509_ATTRIBUTE *X509_ATTRIBUTE_create(int nid, int atrtype, void *value); + +DECLARE_ASN1_FUNCTIONS(X509_EXTENSION) +DECLARE_ASN1_ENCODE_FUNCTIONS(X509_EXTENSIONS, X509_EXTENSIONS, X509_EXTENSIONS) + +DECLARE_ASN1_FUNCTIONS(X509_NAME_ENTRY) + +DECLARE_ASN1_FUNCTIONS(X509_NAME) + +int X509_NAME_set(X509_NAME **xn, X509_NAME *name); + +DECLARE_ASN1_FUNCTIONS(X509_CINF) + +DECLARE_ASN1_FUNCTIONS(X509) +DECLARE_ASN1_FUNCTIONS(X509_CERT_AUX) + +DECLARE_ASN1_FUNCTIONS(X509_CERT_PAIR) + +int X509_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, + CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); +int X509_set_ex_data(X509 *r, int idx, void *arg); +void *X509_get_ex_data(X509 *r, int idx); +int i2d_X509_AUX(X509 *a,unsigned char **pp); +X509 * d2i_X509_AUX(X509 **a,const unsigned char **pp,long length); + +int X509_alias_set1(X509 *x, unsigned char *name, int len); +int X509_keyid_set1(X509 *x, unsigned char *id, int len); +unsigned char * X509_alias_get0(X509 *x, int *len); +unsigned char * X509_keyid_get0(X509 *x, int *len); +int (*X509_TRUST_set_default(int (*trust)(int , X509 *, int)))(int, X509 *, int); +int X509_TRUST_set(int *t, int trust); +int X509_add1_trust_object(X509 *x, ASN1_OBJECT *obj); +int X509_add1_reject_object(X509 *x, ASN1_OBJECT *obj); +void X509_trust_clear(X509 *x); +void X509_reject_clear(X509 *x); + +DECLARE_ASN1_FUNCTIONS(X509_REVOKED) +DECLARE_ASN1_FUNCTIONS(X509_CRL_INFO) +DECLARE_ASN1_FUNCTIONS(X509_CRL) + +int X509_CRL_add0_revoked(X509_CRL *crl, X509_REVOKED *rev); +int X509_CRL_get0_by_serial(X509_CRL *crl, + X509_REVOKED **ret, ASN1_INTEGER *serial); +int X509_CRL_get0_by_cert(X509_CRL *crl, X509_REVOKED **ret, X509 *x); + +X509_PKEY * X509_PKEY_new(void ); +void X509_PKEY_free(X509_PKEY *a); +int i2d_X509_PKEY(X509_PKEY *a,unsigned char **pp); +X509_PKEY * d2i_X509_PKEY(X509_PKEY **a,const unsigned char **pp,long length); + +DECLARE_ASN1_FUNCTIONS(NETSCAPE_SPKI) +DECLARE_ASN1_FUNCTIONS(NETSCAPE_SPKAC) +DECLARE_ASN1_FUNCTIONS(NETSCAPE_CERT_SEQUENCE) + +#ifndef OPENSSL_NO_EVP +X509_INFO * X509_INFO_new(void); +void X509_INFO_free(X509_INFO *a); +char * X509_NAME_oneline(X509_NAME *a,char *buf,int size); + +int ASN1_verify(i2d_of_void *i2d, X509_ALGOR *algor1, + ASN1_BIT_STRING *signature,char *data,EVP_PKEY *pkey); + +int ASN1_digest(i2d_of_void *i2d,const EVP_MD *type,char *data, + unsigned char *md,unsigned int *len); + +int ASN1_sign(i2d_of_void *i2d, X509_ALGOR *algor1, + X509_ALGOR *algor2, ASN1_BIT_STRING *signature, + char *data,EVP_PKEY *pkey, const EVP_MD *type); + +int ASN1_item_digest(const ASN1_ITEM *it,const EVP_MD *type,void *data, + unsigned char *md,unsigned int *len); + +int ASN1_item_verify(const ASN1_ITEM *it, X509_ALGOR *algor1, + ASN1_BIT_STRING *signature,void *data,EVP_PKEY *pkey); + +int ASN1_item_sign(const ASN1_ITEM *it, X509_ALGOR *algor1, X509_ALGOR *algor2, + ASN1_BIT_STRING *signature, + void *data, EVP_PKEY *pkey, const EVP_MD *type); +#endif + +int X509_set_version(X509 *x,long version); +int X509_set_serialNumber(X509 *x, ASN1_INTEGER *serial); +ASN1_INTEGER * X509_get_serialNumber(X509 *x); +int X509_set_issuer_name(X509 *x, X509_NAME *name); +X509_NAME * X509_get_issuer_name(X509 *a); +int X509_set_subject_name(X509 *x, X509_NAME *name); +X509_NAME * X509_get_subject_name(X509 *a); +int X509_set_notBefore(X509 *x, const ASN1_TIME *tm); +int X509_set_notAfter(X509 *x, const ASN1_TIME *tm); +int X509_set_pubkey(X509 *x, EVP_PKEY *pkey); +EVP_PKEY * X509_get_pubkey(X509 *x); +ASN1_BIT_STRING * X509_get0_pubkey_bitstr(const X509 *x); +int X509_certificate_type(X509 *x,EVP_PKEY *pubkey /* optional */); + +int X509_REQ_set_version(X509_REQ *x,long version); +int X509_REQ_set_subject_name(X509_REQ *req,X509_NAME *name); +int X509_REQ_set_pubkey(X509_REQ *x, EVP_PKEY *pkey); +EVP_PKEY * X509_REQ_get_pubkey(X509_REQ *req); +int X509_REQ_extension_nid(int nid); +int * X509_REQ_get_extension_nids(void); +void X509_REQ_set_extension_nids(int *nids); +STACK_OF(X509_EXTENSION) *X509_REQ_get_extensions(X509_REQ *req); +int X509_REQ_add_extensions_nid(X509_REQ *req, STACK_OF(X509_EXTENSION) *exts, + int nid); +int X509_REQ_add_extensions(X509_REQ *req, STACK_OF(X509_EXTENSION) *exts); +int X509_REQ_get_attr_count(const X509_REQ *req); +int X509_REQ_get_attr_by_NID(const X509_REQ *req, int nid, + int lastpos); +int X509_REQ_get_attr_by_OBJ(const X509_REQ *req, ASN1_OBJECT *obj, + int lastpos); +X509_ATTRIBUTE *X509_REQ_get_attr(const X509_REQ *req, int loc); +X509_ATTRIBUTE *X509_REQ_delete_attr(X509_REQ *req, int loc); +int X509_REQ_add1_attr(X509_REQ *req, X509_ATTRIBUTE *attr); +int X509_REQ_add1_attr_by_OBJ(X509_REQ *req, + const ASN1_OBJECT *obj, int type, + const unsigned char *bytes, int len); +int X509_REQ_add1_attr_by_NID(X509_REQ *req, + int nid, int type, + const unsigned char *bytes, int len); +int X509_REQ_add1_attr_by_txt(X509_REQ *req, + const char *attrname, int type, + const unsigned char *bytes, int len); + +int X509_CRL_set_version(X509_CRL *x, long version); +int X509_CRL_set_issuer_name(X509_CRL *x, X509_NAME *name); +int X509_CRL_set_lastUpdate(X509_CRL *x, const ASN1_TIME *tm); +int X509_CRL_set_nextUpdate(X509_CRL *x, const ASN1_TIME *tm); +int X509_CRL_sort(X509_CRL *crl); + +int X509_REVOKED_set_serialNumber(X509_REVOKED *x, ASN1_INTEGER *serial); +int X509_REVOKED_set_revocationDate(X509_REVOKED *r, ASN1_TIME *tm); + +int X509_REQ_check_private_key(X509_REQ *x509,EVP_PKEY *pkey); + +int X509_check_private_key(X509 *x509,EVP_PKEY *pkey); + +int X509_issuer_and_serial_cmp(const X509 *a, const X509 *b); +unsigned long X509_issuer_and_serial_hash(X509 *a); + +int X509_issuer_name_cmp(const X509 *a, const X509 *b); +unsigned long X509_issuer_name_hash(X509 *a); + +int X509_subject_name_cmp(const X509 *a, const X509 *b); +unsigned long X509_subject_name_hash(X509 *x); + +#ifndef OPENSSL_NO_MD5 +unsigned long X509_issuer_name_hash_old(X509 *a); +unsigned long X509_subject_name_hash_old(X509 *x); +#endif + +int X509_cmp(const X509 *a, const X509 *b); +int X509_NAME_cmp(const X509_NAME *a, const X509_NAME *b); +unsigned long X509_NAME_hash(X509_NAME *x); +unsigned long X509_NAME_hash_old(X509_NAME *x); + +int X509_CRL_cmp(const X509_CRL *a, const X509_CRL *b); +int X509_CRL_match(const X509_CRL *a, const X509_CRL *b); +#ifndef OPENSSL_NO_FP_API +int X509_print_ex_fp(FILE *bp,X509 *x, unsigned long nmflag, unsigned long cflag); +int X509_print_fp(FILE *bp,X509 *x); +int X509_CRL_print_fp(FILE *bp,X509_CRL *x); +int X509_REQ_print_fp(FILE *bp,X509_REQ *req); +int X509_NAME_print_ex_fp(FILE *fp, X509_NAME *nm, int indent, unsigned long flags); +#endif + +#ifndef OPENSSL_NO_BIO +int X509_NAME_print(BIO *bp, X509_NAME *name, int obase); +int X509_NAME_print_ex(BIO *out, X509_NAME *nm, int indent, unsigned long flags); +int X509_print_ex(BIO *bp,X509 *x, unsigned long nmflag, unsigned long cflag); +int X509_print(BIO *bp,X509 *x); +int X509_ocspid_print(BIO *bp,X509 *x); +int X509_CERT_AUX_print(BIO *bp,X509_CERT_AUX *x, int indent); +int X509_CRL_print(BIO *bp,X509_CRL *x); +int X509_REQ_print_ex(BIO *bp, X509_REQ *x, unsigned long nmflag, unsigned long cflag); +int X509_REQ_print(BIO *bp,X509_REQ *req); +#endif + +int X509_NAME_entry_count(X509_NAME *name); +int X509_NAME_get_text_by_NID(X509_NAME *name, int nid, + char *buf,int len); +int X509_NAME_get_text_by_OBJ(X509_NAME *name, ASN1_OBJECT *obj, + char *buf,int len); + +/* NOTE: you should be passsing -1, not 0 as lastpos. The functions that use + * lastpos, search after that position on. */ +int X509_NAME_get_index_by_NID(X509_NAME *name,int nid,int lastpos); +int X509_NAME_get_index_by_OBJ(X509_NAME *name,ASN1_OBJECT *obj, + int lastpos); +X509_NAME_ENTRY *X509_NAME_get_entry(X509_NAME *name, int loc); +X509_NAME_ENTRY *X509_NAME_delete_entry(X509_NAME *name, int loc); +int X509_NAME_add_entry(X509_NAME *name,X509_NAME_ENTRY *ne, + int loc, int set); +int X509_NAME_add_entry_by_OBJ(X509_NAME *name, ASN1_OBJECT *obj, int type, + unsigned char *bytes, int len, int loc, int set); +int X509_NAME_add_entry_by_NID(X509_NAME *name, int nid, int type, + unsigned char *bytes, int len, int loc, int set); +X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_txt(X509_NAME_ENTRY **ne, + const char *field, int type, const unsigned char *bytes, int len); +X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_NID(X509_NAME_ENTRY **ne, int nid, + int type,unsigned char *bytes, int len); +int X509_NAME_add_entry_by_txt(X509_NAME *name, const char *field, int type, + const unsigned char *bytes, int len, int loc, int set); +X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_OBJ(X509_NAME_ENTRY **ne, + ASN1_OBJECT *obj, int type,const unsigned char *bytes, + int len); +int X509_NAME_ENTRY_set_object(X509_NAME_ENTRY *ne, + ASN1_OBJECT *obj); +int X509_NAME_ENTRY_set_data(X509_NAME_ENTRY *ne, int type, + const unsigned char *bytes, int len); +ASN1_OBJECT * X509_NAME_ENTRY_get_object(X509_NAME_ENTRY *ne); +ASN1_STRING * X509_NAME_ENTRY_get_data(X509_NAME_ENTRY *ne); + +int X509v3_get_ext_count(const STACK_OF(X509_EXTENSION) *x); +int X509v3_get_ext_by_NID(const STACK_OF(X509_EXTENSION) *x, + int nid, int lastpos); +int X509v3_get_ext_by_OBJ(const STACK_OF(X509_EXTENSION) *x, + ASN1_OBJECT *obj,int lastpos); +int X509v3_get_ext_by_critical(const STACK_OF(X509_EXTENSION) *x, + int crit, int lastpos); +X509_EXTENSION *X509v3_get_ext(const STACK_OF(X509_EXTENSION) *x, int loc); +X509_EXTENSION *X509v3_delete_ext(STACK_OF(X509_EXTENSION) *x, int loc); +STACK_OF(X509_EXTENSION) *X509v3_add_ext(STACK_OF(X509_EXTENSION) **x, + X509_EXTENSION *ex, int loc); + +int X509_get_ext_count(X509 *x); +int X509_get_ext_by_NID(X509 *x, int nid, int lastpos); +int X509_get_ext_by_OBJ(X509 *x,ASN1_OBJECT *obj,int lastpos); +int X509_get_ext_by_critical(X509 *x, int crit, int lastpos); +X509_EXTENSION *X509_get_ext(X509 *x, int loc); +X509_EXTENSION *X509_delete_ext(X509 *x, int loc); +int X509_add_ext(X509 *x, X509_EXTENSION *ex, int loc); +void * X509_get_ext_d2i(X509 *x, int nid, int *crit, int *idx); +int X509_add1_ext_i2d(X509 *x, int nid, void *value, int crit, + unsigned long flags); + +int X509_CRL_get_ext_count(X509_CRL *x); +int X509_CRL_get_ext_by_NID(X509_CRL *x, int nid, int lastpos); +int X509_CRL_get_ext_by_OBJ(X509_CRL *x,ASN1_OBJECT *obj,int lastpos); +int X509_CRL_get_ext_by_critical(X509_CRL *x, int crit, int lastpos); +X509_EXTENSION *X509_CRL_get_ext(X509_CRL *x, int loc); +X509_EXTENSION *X509_CRL_delete_ext(X509_CRL *x, int loc); +int X509_CRL_add_ext(X509_CRL *x, X509_EXTENSION *ex, int loc); +void * X509_CRL_get_ext_d2i(X509_CRL *x, int nid, int *crit, int *idx); +int X509_CRL_add1_ext_i2d(X509_CRL *x, int nid, void *value, int crit, + unsigned long flags); + +int X509_REVOKED_get_ext_count(X509_REVOKED *x); +int X509_REVOKED_get_ext_by_NID(X509_REVOKED *x, int nid, int lastpos); +int X509_REVOKED_get_ext_by_OBJ(X509_REVOKED *x,ASN1_OBJECT *obj,int lastpos); +int X509_REVOKED_get_ext_by_critical(X509_REVOKED *x, int crit, int lastpos); +X509_EXTENSION *X509_REVOKED_get_ext(X509_REVOKED *x, int loc); +X509_EXTENSION *X509_REVOKED_delete_ext(X509_REVOKED *x, int loc); +int X509_REVOKED_add_ext(X509_REVOKED *x, X509_EXTENSION *ex, int loc); +void * X509_REVOKED_get_ext_d2i(X509_REVOKED *x, int nid, int *crit, int *idx); +int X509_REVOKED_add1_ext_i2d(X509_REVOKED *x, int nid, void *value, int crit, + unsigned long flags); + +X509_EXTENSION *X509_EXTENSION_create_by_NID(X509_EXTENSION **ex, + int nid, int crit, ASN1_OCTET_STRING *data); +X509_EXTENSION *X509_EXTENSION_create_by_OBJ(X509_EXTENSION **ex, + ASN1_OBJECT *obj,int crit,ASN1_OCTET_STRING *data); +int X509_EXTENSION_set_object(X509_EXTENSION *ex,ASN1_OBJECT *obj); +int X509_EXTENSION_set_critical(X509_EXTENSION *ex, int crit); +int X509_EXTENSION_set_data(X509_EXTENSION *ex, + ASN1_OCTET_STRING *data); +ASN1_OBJECT * X509_EXTENSION_get_object(X509_EXTENSION *ex); +ASN1_OCTET_STRING *X509_EXTENSION_get_data(X509_EXTENSION *ne); +int X509_EXTENSION_get_critical(X509_EXTENSION *ex); + +int X509at_get_attr_count(const STACK_OF(X509_ATTRIBUTE) *x); +int X509at_get_attr_by_NID(const STACK_OF(X509_ATTRIBUTE) *x, int nid, + int lastpos); +int X509at_get_attr_by_OBJ(const STACK_OF(X509_ATTRIBUTE) *sk, ASN1_OBJECT *obj, + int lastpos); +X509_ATTRIBUTE *X509at_get_attr(const STACK_OF(X509_ATTRIBUTE) *x, int loc); +X509_ATTRIBUTE *X509at_delete_attr(STACK_OF(X509_ATTRIBUTE) *x, int loc); +STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr(STACK_OF(X509_ATTRIBUTE) **x, + X509_ATTRIBUTE *attr); +STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_OBJ(STACK_OF(X509_ATTRIBUTE) **x, + const ASN1_OBJECT *obj, int type, + const unsigned char *bytes, int len); +STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_NID(STACK_OF(X509_ATTRIBUTE) **x, + int nid, int type, + const unsigned char *bytes, int len); +STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_txt(STACK_OF(X509_ATTRIBUTE) **x, + const char *attrname, int type, + const unsigned char *bytes, int len); +void *X509at_get0_data_by_OBJ(STACK_OF(X509_ATTRIBUTE) *x, + ASN1_OBJECT *obj, int lastpos, int type); +X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_NID(X509_ATTRIBUTE **attr, int nid, + int atrtype, const void *data, int len); +X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_OBJ(X509_ATTRIBUTE **attr, + const ASN1_OBJECT *obj, int atrtype, const void *data, int len); +X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_txt(X509_ATTRIBUTE **attr, + const char *atrname, int type, const unsigned char *bytes, int len); +int X509_ATTRIBUTE_set1_object(X509_ATTRIBUTE *attr, const ASN1_OBJECT *obj); +int X509_ATTRIBUTE_set1_data(X509_ATTRIBUTE *attr, int attrtype, const void *data, int len); +void *X509_ATTRIBUTE_get0_data(X509_ATTRIBUTE *attr, int idx, + int atrtype, void *data); +int X509_ATTRIBUTE_count(X509_ATTRIBUTE *attr); +ASN1_OBJECT *X509_ATTRIBUTE_get0_object(X509_ATTRIBUTE *attr); +ASN1_TYPE *X509_ATTRIBUTE_get0_type(X509_ATTRIBUTE *attr, int idx); + +int EVP_PKEY_get_attr_count(const EVP_PKEY *key); +int EVP_PKEY_get_attr_by_NID(const EVP_PKEY *key, int nid, + int lastpos); +int EVP_PKEY_get_attr_by_OBJ(const EVP_PKEY *key, ASN1_OBJECT *obj, + int lastpos); +X509_ATTRIBUTE *EVP_PKEY_get_attr(const EVP_PKEY *key, int loc); +X509_ATTRIBUTE *EVP_PKEY_delete_attr(EVP_PKEY *key, int loc); +int EVP_PKEY_add1_attr(EVP_PKEY *key, X509_ATTRIBUTE *attr); +int EVP_PKEY_add1_attr_by_OBJ(EVP_PKEY *key, + const ASN1_OBJECT *obj, int type, + const unsigned char *bytes, int len); +int EVP_PKEY_add1_attr_by_NID(EVP_PKEY *key, + int nid, int type, + const unsigned char *bytes, int len); +int EVP_PKEY_add1_attr_by_txt(EVP_PKEY *key, + const char *attrname, int type, + const unsigned char *bytes, int len); + +int X509_verify_cert(X509_STORE_CTX *ctx); + +/* lookup a cert from a X509 STACK */ +X509 *X509_find_by_issuer_and_serial(STACK_OF(X509) *sk,X509_NAME *name, + ASN1_INTEGER *serial); +X509 *X509_find_by_subject(STACK_OF(X509) *sk,X509_NAME *name); + +DECLARE_ASN1_FUNCTIONS(PBEPARAM) +DECLARE_ASN1_FUNCTIONS(PBE2PARAM) +DECLARE_ASN1_FUNCTIONS(PBKDF2PARAM) + +int PKCS5_pbe_set0_algor(X509_ALGOR *algor, int alg, int iter, + const unsigned char *salt, int saltlen); + +X509_ALGOR *PKCS5_pbe_set(int alg, int iter, + const unsigned char *salt, int saltlen); +X509_ALGOR *PKCS5_pbe2_set(const EVP_CIPHER *cipher, int iter, + unsigned char *salt, int saltlen); +X509_ALGOR *PKCS5_pbe2_set_iv(const EVP_CIPHER *cipher, int iter, + unsigned char *salt, int saltlen, + unsigned char *aiv, int prf_nid); + +/* PKCS#8 utilities */ + +DECLARE_ASN1_FUNCTIONS(PKCS8_PRIV_KEY_INFO) + +EVP_PKEY *EVP_PKCS82PKEY(PKCS8_PRIV_KEY_INFO *p8); +PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8(EVP_PKEY *pkey); +PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8_broken(EVP_PKEY *pkey, int broken); +PKCS8_PRIV_KEY_INFO *PKCS8_set_broken(PKCS8_PRIV_KEY_INFO *p8, int broken); + +int PKCS8_pkey_set0(PKCS8_PRIV_KEY_INFO *priv, ASN1_OBJECT *aobj, + int version, int ptype, void *pval, + unsigned char *penc, int penclen); +int PKCS8_pkey_get0(ASN1_OBJECT **ppkalg, + const unsigned char **pk, int *ppklen, + X509_ALGOR **pa, + PKCS8_PRIV_KEY_INFO *p8); + +int X509_PUBKEY_set0_param(X509_PUBKEY *pub, ASN1_OBJECT *aobj, + int ptype, void *pval, + unsigned char *penc, int penclen); +int X509_PUBKEY_get0_param(ASN1_OBJECT **ppkalg, + const unsigned char **pk, int *ppklen, + X509_ALGOR **pa, + X509_PUBKEY *pub); + +int X509_check_trust(X509 *x, int id, int flags); +int X509_TRUST_get_count(void); +X509_TRUST * X509_TRUST_get0(int idx); +int X509_TRUST_get_by_id(int id); +int X509_TRUST_add(int id, int flags, int (*ck)(X509_TRUST *, X509 *, int), + char *name, int arg1, void *arg2); +void X509_TRUST_cleanup(void); +int X509_TRUST_get_flags(X509_TRUST *xp); +char *X509_TRUST_get0_name(X509_TRUST *xp); +int X509_TRUST_get_trust(X509_TRUST *xp); + +/* BEGIN ERROR CODES */ +/* The following lines are auto generated by the script mkerr.pl. Any changes + * made after this point may be overwritten when the script is next run. + */ +void ERR_load_X509_strings(void); + +/* Error codes for the X509 functions. */ + +/* Function codes. */ +#define X509_F_ADD_CERT_DIR 100 +#define X509_F_BY_FILE_CTRL 101 +#define X509_F_CHECK_POLICY 145 +#define X509_F_DIR_CTRL 102 +#define X509_F_GET_CERT_BY_SUBJECT 103 +#define X509_F_NETSCAPE_SPKI_B64_DECODE 129 +#define X509_F_NETSCAPE_SPKI_B64_ENCODE 130 +#define X509_F_X509AT_ADD1_ATTR 135 +#define X509_F_X509V3_ADD_EXT 104 +#define X509_F_X509_ATTRIBUTE_CREATE_BY_NID 136 +#define X509_F_X509_ATTRIBUTE_CREATE_BY_OBJ 137 +#define X509_F_X509_ATTRIBUTE_CREATE_BY_TXT 140 +#define X509_F_X509_ATTRIBUTE_GET0_DATA 139 +#define X509_F_X509_ATTRIBUTE_SET1_DATA 138 +#define X509_F_X509_CHECK_PRIVATE_KEY 128 +#define X509_F_X509_CRL_PRINT_FP 147 +#define X509_F_X509_EXTENSION_CREATE_BY_NID 108 +#define X509_F_X509_EXTENSION_CREATE_BY_OBJ 109 +#define X509_F_X509_GET_PUBKEY_PARAMETERS 110 +#define X509_F_X509_LOAD_CERT_CRL_FILE 132 +#define X509_F_X509_LOAD_CERT_FILE 111 +#define X509_F_X509_LOAD_CRL_FILE 112 +#define X509_F_X509_NAME_ADD_ENTRY 113 +#define X509_F_X509_NAME_ENTRY_CREATE_BY_NID 114 +#define X509_F_X509_NAME_ENTRY_CREATE_BY_TXT 131 +#define X509_F_X509_NAME_ENTRY_SET_OBJECT 115 +#define X509_F_X509_NAME_ONELINE 116 +#define X509_F_X509_NAME_PRINT 117 +#define X509_F_X509_PRINT_EX_FP 118 +#define X509_F_X509_PUBKEY_GET 119 +#define X509_F_X509_PUBKEY_SET 120 +#define X509_F_X509_REQ_CHECK_PRIVATE_KEY 144 +#define X509_F_X509_REQ_PRINT_EX 121 +#define X509_F_X509_REQ_PRINT_FP 122 +#define X509_F_X509_REQ_TO_X509 123 +#define X509_F_X509_STORE_ADD_CERT 124 +#define X509_F_X509_STORE_ADD_CRL 125 +#define X509_F_X509_STORE_CTX_GET1_ISSUER 146 +#define X509_F_X509_STORE_CTX_INIT 143 +#define X509_F_X509_STORE_CTX_NEW 142 +#define X509_F_X509_STORE_CTX_PURPOSE_INHERIT 134 +#define X509_F_X509_TO_X509_REQ 126 +#define X509_F_X509_TRUST_ADD 133 +#define X509_F_X509_TRUST_SET 141 +#define X509_F_X509_VERIFY_CERT 127 + +/* Reason codes. */ +#define X509_R_BAD_X509_FILETYPE 100 +#define X509_R_BASE64_DECODE_ERROR 118 +#define X509_R_CANT_CHECK_DH_KEY 114 +#define X509_R_CERT_ALREADY_IN_HASH_TABLE 101 +#define X509_R_ERR_ASN1_LIB 102 +#define X509_R_INVALID_DIRECTORY 113 +#define X509_R_INVALID_FIELD_NAME 119 +#define X509_R_INVALID_TRUST 123 +#define X509_R_KEY_TYPE_MISMATCH 115 +#define X509_R_KEY_VALUES_MISMATCH 116 +#define X509_R_LOADING_CERT_DIR 103 +#define X509_R_LOADING_DEFAULTS 104 +#define X509_R_METHOD_NOT_SUPPORTED 124 +#define X509_R_NO_CERT_SET_FOR_US_TO_VERIFY 105 +#define X509_R_PUBLIC_KEY_DECODE_ERROR 125 +#define X509_R_PUBLIC_KEY_ENCODE_ERROR 126 +#define X509_R_SHOULD_RETRY 106 +#define X509_R_UNABLE_TO_FIND_PARAMETERS_IN_CHAIN 107 +#define X509_R_UNABLE_TO_GET_CERTS_PUBLIC_KEY 108 +#define X509_R_UNKNOWN_KEY_TYPE 117 +#define X509_R_UNKNOWN_NID 109 +#define X509_R_UNKNOWN_PURPOSE_ID 121 +#define X509_R_UNKNOWN_TRUST_ID 120 +#define X509_R_UNSUPPORTED_ALGORITHM 111 +#define X509_R_WRONG_LOOKUP_TYPE 112 +#define X509_R_WRONG_TYPE 122 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/extra_lib/include/openssl/x509_vfy.h b/extra_lib/include/openssl/x509_vfy.h new file mode 100644 index 0000000..fe09b30 --- /dev/null +++ b/extra_lib/include/openssl/x509_vfy.h @@ -0,0 +1,567 @@ +/* crypto/x509/x509_vfy.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 AUTHOR 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. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_X509_H +#include +/* openssl/x509.h ends up #include-ing this file at about the only + * appropriate moment. */ +#endif + +#ifndef HEADER_X509_VFY_H +#define HEADER_X509_VFY_H + +#include +#ifndef OPENSSL_NO_LHASH +#include +#endif +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#if 0 +/* Outer object */ +typedef struct x509_hash_dir_st + { + int num_dirs; + char **dirs; + int *dirs_type; + int num_dirs_alloced; + } X509_HASH_DIR_CTX; +#endif + +typedef struct x509_file_st + { + int num_paths; /* number of paths to files or directories */ + int num_alloced; + char **paths; /* the list of paths or directories */ + int *path_type; + } X509_CERT_FILE_CTX; + +/*******************************/ +/* +SSL_CTX -> X509_STORE + -> X509_LOOKUP + ->X509_LOOKUP_METHOD + -> X509_LOOKUP + ->X509_LOOKUP_METHOD + +SSL -> X509_STORE_CTX + ->X509_STORE + +The X509_STORE holds the tables etc for verification stuff. +A X509_STORE_CTX is used while validating a single certificate. +The X509_STORE has X509_LOOKUPs for looking up certs. +The X509_STORE then calls a function to actually verify the +certificate chain. +*/ + +#define X509_LU_RETRY -1 +#define X509_LU_FAIL 0 +#define X509_LU_X509 1 +#define X509_LU_CRL 2 +#define X509_LU_PKEY 3 + +typedef struct x509_object_st + { + /* one of the above types */ + int type; + union { + char *ptr; + X509 *x509; + X509_CRL *crl; + EVP_PKEY *pkey; + } data; + } X509_OBJECT; + +typedef struct x509_lookup_st X509_LOOKUP; + +DECLARE_STACK_OF(X509_LOOKUP) +DECLARE_STACK_OF(X509_OBJECT) + +/* This is a static that defines the function interface */ +typedef struct x509_lookup_method_st + { + const char *name; + int (*new_item)(X509_LOOKUP *ctx); + void (*free)(X509_LOOKUP *ctx); + int (*init)(X509_LOOKUP *ctx); + int (*shutdown)(X509_LOOKUP *ctx); + int (*ctrl)(X509_LOOKUP *ctx,int cmd,const char *argc,long argl, + char **ret); + int (*get_by_subject)(X509_LOOKUP *ctx,int type,X509_NAME *name, + X509_OBJECT *ret); + int (*get_by_issuer_serial)(X509_LOOKUP *ctx,int type,X509_NAME *name, + ASN1_INTEGER *serial,X509_OBJECT *ret); + int (*get_by_fingerprint)(X509_LOOKUP *ctx,int type, + unsigned char *bytes,int len, + X509_OBJECT *ret); + int (*get_by_alias)(X509_LOOKUP *ctx,int type,char *str,int len, + X509_OBJECT *ret); + } X509_LOOKUP_METHOD; + +/* This structure hold all parameters associated with a verify operation + * by including an X509_VERIFY_PARAM structure in related structures the + * parameters used can be customized + */ + +typedef struct X509_VERIFY_PARAM_st + { + char *name; + time_t check_time; /* Time to use */ + unsigned long inh_flags; /* Inheritance flags */ + unsigned long flags; /* Various verify flags */ + int purpose; /* purpose to check untrusted certificates */ + int trust; /* trust setting to check */ + int depth; /* Verify depth */ + STACK_OF(ASN1_OBJECT) *policies; /* Permissible policies */ + } X509_VERIFY_PARAM; + +DECLARE_STACK_OF(X509_VERIFY_PARAM) + +/* This is used to hold everything. It is used for all certificate + * validation. Once we have a certificate chain, the 'verify' + * function is then called to actually check the cert chain. */ +struct x509_store_st + { + /* The following is a cache of trusted certs */ + int cache; /* if true, stash any hits */ + STACK_OF(X509_OBJECT) *objs; /* Cache of all objects */ + + /* These are external lookup methods */ + STACK_OF(X509_LOOKUP) *get_cert_methods; + + X509_VERIFY_PARAM *param; + + /* Callbacks for various operations */ + int (*verify)(X509_STORE_CTX *ctx); /* called to verify a certificate */ + int (*verify_cb)(int ok,X509_STORE_CTX *ctx); /* error callback */ + int (*get_issuer)(X509 **issuer, X509_STORE_CTX *ctx, X509 *x); /* get issuers cert from ctx */ + int (*check_issued)(X509_STORE_CTX *ctx, X509 *x, X509 *issuer); /* check issued */ + int (*check_revocation)(X509_STORE_CTX *ctx); /* Check revocation status of chain */ + int (*get_crl)(X509_STORE_CTX *ctx, X509_CRL **crl, X509 *x); /* retrieve CRL */ + int (*check_crl)(X509_STORE_CTX *ctx, X509_CRL *crl); /* Check CRL validity */ + int (*cert_crl)(X509_STORE_CTX *ctx, X509_CRL *crl, X509 *x); /* Check certificate against CRL */ + STACK_OF(X509) * (*lookup_certs)(X509_STORE_CTX *ctx, X509_NAME *nm); + STACK_OF(X509_CRL) * (*lookup_crls)(X509_STORE_CTX *ctx, X509_NAME *nm); + int (*cleanup)(X509_STORE_CTX *ctx); + + CRYPTO_EX_DATA ex_data; + int references; + } /* X509_STORE */; + +int X509_STORE_set_depth(X509_STORE *store, int depth); + +#define X509_STORE_set_verify_cb_func(ctx,func) ((ctx)->verify_cb=(func)) +#define X509_STORE_set_verify_func(ctx,func) ((ctx)->verify=(func)) + +/* This is the functions plus an instance of the local variables. */ +struct x509_lookup_st + { + int init; /* have we been started */ + int skip; /* don't use us. */ + X509_LOOKUP_METHOD *method; /* the functions */ + char *method_data; /* method data */ + + X509_STORE *store_ctx; /* who owns us */ + } /* X509_LOOKUP */; + +/* This is a used when verifying cert chains. Since the + * gathering of the cert chain can take some time (and have to be + * 'retried', this needs to be kept and passed around. */ +struct x509_store_ctx_st /* X509_STORE_CTX */ + { + X509_STORE *ctx; + int current_method; /* used when looking up certs */ + + /* The following are set by the caller */ + X509 *cert; /* The cert to check */ + STACK_OF(X509) *untrusted; /* chain of X509s - untrusted - passed in */ + STACK_OF(X509_CRL) *crls; /* set of CRLs passed in */ + + X509_VERIFY_PARAM *param; + void *other_ctx; /* Other info for use with get_issuer() */ + + /* Callbacks for various operations */ + int (*verify)(X509_STORE_CTX *ctx); /* called to verify a certificate */ + int (*verify_cb)(int ok,X509_STORE_CTX *ctx); /* error callback */ + int (*get_issuer)(X509 **issuer, X509_STORE_CTX *ctx, X509 *x); /* get issuers cert from ctx */ + int (*check_issued)(X509_STORE_CTX *ctx, X509 *x, X509 *issuer); /* check issued */ + int (*check_revocation)(X509_STORE_CTX *ctx); /* Check revocation status of chain */ + int (*get_crl)(X509_STORE_CTX *ctx, X509_CRL **crl, X509 *x); /* retrieve CRL */ + int (*check_crl)(X509_STORE_CTX *ctx, X509_CRL *crl); /* Check CRL validity */ + int (*cert_crl)(X509_STORE_CTX *ctx, X509_CRL *crl, X509 *x); /* Check certificate against CRL */ + int (*check_policy)(X509_STORE_CTX *ctx); + STACK_OF(X509) * (*lookup_certs)(X509_STORE_CTX *ctx, X509_NAME *nm); + STACK_OF(X509_CRL) * (*lookup_crls)(X509_STORE_CTX *ctx, X509_NAME *nm); + int (*cleanup)(X509_STORE_CTX *ctx); + + /* The following is built up */ + int valid; /* if 0, rebuild chain */ + int last_untrusted; /* index of last untrusted cert */ + STACK_OF(X509) *chain; /* chain of X509s - built up and trusted */ + X509_POLICY_TREE *tree; /* Valid policy tree */ + + int explicit_policy; /* Require explicit policy value */ + + /* When something goes wrong, this is why */ + int error_depth; + int error; + X509 *current_cert; + X509 *current_issuer; /* cert currently being tested as valid issuer */ + X509_CRL *current_crl; /* current CRL */ + + int current_crl_score; /* score of current CRL */ + unsigned int current_reasons; /* Reason mask */ + + X509_STORE_CTX *parent; /* For CRL path validation: parent context */ + + CRYPTO_EX_DATA ex_data; + } /* X509_STORE_CTX */; + +void X509_STORE_CTX_set_depth(X509_STORE_CTX *ctx, int depth); + +#define X509_STORE_CTX_set_app_data(ctx,data) \ + X509_STORE_CTX_set_ex_data(ctx,0,data) +#define X509_STORE_CTX_get_app_data(ctx) \ + X509_STORE_CTX_get_ex_data(ctx,0) + +#define X509_L_FILE_LOAD 1 +#define X509_L_ADD_DIR 2 + +#define X509_LOOKUP_load_file(x,name,type) \ + X509_LOOKUP_ctrl((x),X509_L_FILE_LOAD,(name),(long)(type),NULL) + +#define X509_LOOKUP_add_dir(x,name,type) \ + X509_LOOKUP_ctrl((x),X509_L_ADD_DIR,(name),(long)(type),NULL) + +#define X509_V_OK 0 +/* illegal error (for uninitialized values, to avoid X509_V_OK): 1 */ + +#define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT 2 +#define X509_V_ERR_UNABLE_TO_GET_CRL 3 +#define X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE 4 +#define X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE 5 +#define X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY 6 +#define X509_V_ERR_CERT_SIGNATURE_FAILURE 7 +#define X509_V_ERR_CRL_SIGNATURE_FAILURE 8 +#define X509_V_ERR_CERT_NOT_YET_VALID 9 +#define X509_V_ERR_CERT_HAS_EXPIRED 10 +#define X509_V_ERR_CRL_NOT_YET_VALID 11 +#define X509_V_ERR_CRL_HAS_EXPIRED 12 +#define X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD 13 +#define X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD 14 +#define X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD 15 +#define X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD 16 +#define X509_V_ERR_OUT_OF_MEM 17 +#define X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT 18 +#define X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN 19 +#define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY 20 +#define X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE 21 +#define X509_V_ERR_CERT_CHAIN_TOO_LONG 22 +#define X509_V_ERR_CERT_REVOKED 23 +#define X509_V_ERR_INVALID_CA 24 +#define X509_V_ERR_PATH_LENGTH_EXCEEDED 25 +#define X509_V_ERR_INVALID_PURPOSE 26 +#define X509_V_ERR_CERT_UNTRUSTED 27 +#define X509_V_ERR_CERT_REJECTED 28 +/* These are 'informational' when looking for issuer cert */ +#define X509_V_ERR_SUBJECT_ISSUER_MISMATCH 29 +#define X509_V_ERR_AKID_SKID_MISMATCH 30 +#define X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH 31 +#define X509_V_ERR_KEYUSAGE_NO_CERTSIGN 32 + +#define X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER 33 +#define X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION 34 +#define X509_V_ERR_KEYUSAGE_NO_CRL_SIGN 35 +#define X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION 36 +#define X509_V_ERR_INVALID_NON_CA 37 +#define X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED 38 +#define X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE 39 +#define X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED 40 + +#define X509_V_ERR_INVALID_EXTENSION 41 +#define X509_V_ERR_INVALID_POLICY_EXTENSION 42 +#define X509_V_ERR_NO_EXPLICIT_POLICY 43 +#define X509_V_ERR_DIFFERENT_CRL_SCOPE 44 +#define X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE 45 + +#define X509_V_ERR_UNNESTED_RESOURCE 46 + +#define X509_V_ERR_PERMITTED_VIOLATION 47 +#define X509_V_ERR_EXCLUDED_VIOLATION 48 +#define X509_V_ERR_SUBTREE_MINMAX 49 +#define X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE 51 +#define X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX 52 +#define X509_V_ERR_UNSUPPORTED_NAME_SYNTAX 53 +#define X509_V_ERR_CRL_PATH_VALIDATION_ERROR 54 + +/* The application is not happy */ +#define X509_V_ERR_APPLICATION_VERIFICATION 50 + +/* Certificate verify flags */ + +/* Send issuer+subject checks to verify_cb */ +#define X509_V_FLAG_CB_ISSUER_CHECK 0x1 +/* Use check time instead of current time */ +#define X509_V_FLAG_USE_CHECK_TIME 0x2 +/* Lookup CRLs */ +#define X509_V_FLAG_CRL_CHECK 0x4 +/* Lookup CRLs for whole chain */ +#define X509_V_FLAG_CRL_CHECK_ALL 0x8 +/* Ignore unhandled critical extensions */ +#define X509_V_FLAG_IGNORE_CRITICAL 0x10 +/* Disable workarounds for broken certificates */ +#define X509_V_FLAG_X509_STRICT 0x20 +/* Enable proxy certificate validation */ +#define X509_V_FLAG_ALLOW_PROXY_CERTS 0x40 +/* Enable policy checking */ +#define X509_V_FLAG_POLICY_CHECK 0x80 +/* Policy variable require-explicit-policy */ +#define X509_V_FLAG_EXPLICIT_POLICY 0x100 +/* Policy variable inhibit-any-policy */ +#define X509_V_FLAG_INHIBIT_ANY 0x200 +/* Policy variable inhibit-policy-mapping */ +#define X509_V_FLAG_INHIBIT_MAP 0x400 +/* Notify callback that policy is OK */ +#define X509_V_FLAG_NOTIFY_POLICY 0x800 +/* Extended CRL features such as indirect CRLs, alternate CRL signing keys */ +#define X509_V_FLAG_EXTENDED_CRL_SUPPORT 0x1000 +/* Delta CRL support */ +#define X509_V_FLAG_USE_DELTAS 0x2000 +/* Check selfsigned CA signature */ +#define X509_V_FLAG_CHECK_SS_SIGNATURE 0x4000 + + +#define X509_VP_FLAG_DEFAULT 0x1 +#define X509_VP_FLAG_OVERWRITE 0x2 +#define X509_VP_FLAG_RESET_FLAGS 0x4 +#define X509_VP_FLAG_LOCKED 0x8 +#define X509_VP_FLAG_ONCE 0x10 + +/* Internal use: mask of policy related options */ +#define X509_V_FLAG_POLICY_MASK (X509_V_FLAG_POLICY_CHECK \ + | X509_V_FLAG_EXPLICIT_POLICY \ + | X509_V_FLAG_INHIBIT_ANY \ + | X509_V_FLAG_INHIBIT_MAP) + +int X509_OBJECT_idx_by_subject(STACK_OF(X509_OBJECT) *h, int type, + X509_NAME *name); +X509_OBJECT *X509_OBJECT_retrieve_by_subject(STACK_OF(X509_OBJECT) *h,int type,X509_NAME *name); +X509_OBJECT *X509_OBJECT_retrieve_match(STACK_OF(X509_OBJECT) *h, X509_OBJECT *x); +void X509_OBJECT_up_ref_count(X509_OBJECT *a); +void X509_OBJECT_free_contents(X509_OBJECT *a); +X509_STORE *X509_STORE_new(void ); +void X509_STORE_free(X509_STORE *v); + +STACK_OF(X509)* X509_STORE_get1_certs(X509_STORE_CTX *st, X509_NAME *nm); +STACK_OF(X509_CRL)* X509_STORE_get1_crls(X509_STORE_CTX *st, X509_NAME *nm); +int X509_STORE_set_flags(X509_STORE *ctx, unsigned long flags); +int X509_STORE_set_purpose(X509_STORE *ctx, int purpose); +int X509_STORE_set_trust(X509_STORE *ctx, int trust); +int X509_STORE_set1_param(X509_STORE *ctx, X509_VERIFY_PARAM *pm); + +void X509_STORE_set_verify_cb(X509_STORE *ctx, + int (*verify_cb)(int, X509_STORE_CTX *)); + +X509_STORE_CTX *X509_STORE_CTX_new(void); + +int X509_STORE_CTX_get1_issuer(X509 **issuer, X509_STORE_CTX *ctx, X509 *x); + +void X509_STORE_CTX_free(X509_STORE_CTX *ctx); +int X509_STORE_CTX_init(X509_STORE_CTX *ctx, X509_STORE *store, + X509 *x509, STACK_OF(X509) *chain); +void X509_STORE_CTX_trusted_stack(X509_STORE_CTX *ctx, STACK_OF(X509) *sk); +void X509_STORE_CTX_cleanup(X509_STORE_CTX *ctx); + +X509_LOOKUP *X509_STORE_add_lookup(X509_STORE *v, X509_LOOKUP_METHOD *m); + +X509_LOOKUP_METHOD *X509_LOOKUP_hash_dir(void); +X509_LOOKUP_METHOD *X509_LOOKUP_file(void); + +int X509_STORE_add_cert(X509_STORE *ctx, X509 *x); +int X509_STORE_add_crl(X509_STORE *ctx, X509_CRL *x); + +int X509_STORE_get_by_subject(X509_STORE_CTX *vs,int type,X509_NAME *name, + X509_OBJECT *ret); + +int X509_LOOKUP_ctrl(X509_LOOKUP *ctx, int cmd, const char *argc, + long argl, char **ret); + +#ifndef OPENSSL_NO_STDIO +int X509_load_cert_file(X509_LOOKUP *ctx, const char *file, int type); +int X509_load_crl_file(X509_LOOKUP *ctx, const char *file, int type); +int X509_load_cert_crl_file(X509_LOOKUP *ctx, const char *file, int type); +#endif + + +X509_LOOKUP *X509_LOOKUP_new(X509_LOOKUP_METHOD *method); +void X509_LOOKUP_free(X509_LOOKUP *ctx); +int X509_LOOKUP_init(X509_LOOKUP *ctx); +int X509_LOOKUP_by_subject(X509_LOOKUP *ctx, int type, X509_NAME *name, + X509_OBJECT *ret); +int X509_LOOKUP_by_issuer_serial(X509_LOOKUP *ctx, int type, X509_NAME *name, + ASN1_INTEGER *serial, X509_OBJECT *ret); +int X509_LOOKUP_by_fingerprint(X509_LOOKUP *ctx, int type, + unsigned char *bytes, int len, X509_OBJECT *ret); +int X509_LOOKUP_by_alias(X509_LOOKUP *ctx, int type, char *str, + int len, X509_OBJECT *ret); +int X509_LOOKUP_shutdown(X509_LOOKUP *ctx); + +#ifndef OPENSSL_NO_STDIO +int X509_STORE_load_locations (X509_STORE *ctx, + const char *file, const char *dir); +int X509_STORE_set_default_paths(X509_STORE *ctx); +#endif + +int X509_STORE_CTX_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, + CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); +int X509_STORE_CTX_set_ex_data(X509_STORE_CTX *ctx,int idx,void *data); +void * X509_STORE_CTX_get_ex_data(X509_STORE_CTX *ctx,int idx); +int X509_STORE_CTX_get_error(X509_STORE_CTX *ctx); +void X509_STORE_CTX_set_error(X509_STORE_CTX *ctx,int s); +int X509_STORE_CTX_get_error_depth(X509_STORE_CTX *ctx); +X509 * X509_STORE_CTX_get_current_cert(X509_STORE_CTX *ctx); +X509 *X509_STORE_CTX_get0_current_issuer(X509_STORE_CTX *ctx); +X509_CRL *X509_STORE_CTX_get0_current_crl(X509_STORE_CTX *ctx); +X509_STORE_CTX *X509_STORE_CTX_get0_parent_ctx(X509_STORE_CTX *ctx); +STACK_OF(X509) *X509_STORE_CTX_get_chain(X509_STORE_CTX *ctx); +STACK_OF(X509) *X509_STORE_CTX_get1_chain(X509_STORE_CTX *ctx); +void X509_STORE_CTX_set_cert(X509_STORE_CTX *c,X509 *x); +void X509_STORE_CTX_set_chain(X509_STORE_CTX *c,STACK_OF(X509) *sk); +void X509_STORE_CTX_set0_crls(X509_STORE_CTX *c,STACK_OF(X509_CRL) *sk); +int X509_STORE_CTX_set_purpose(X509_STORE_CTX *ctx, int purpose); +int X509_STORE_CTX_set_trust(X509_STORE_CTX *ctx, int trust); +int X509_STORE_CTX_purpose_inherit(X509_STORE_CTX *ctx, int def_purpose, + int purpose, int trust); +void X509_STORE_CTX_set_flags(X509_STORE_CTX *ctx, unsigned long flags); +void X509_STORE_CTX_set_time(X509_STORE_CTX *ctx, unsigned long flags, + time_t t); +void X509_STORE_CTX_set_verify_cb(X509_STORE_CTX *ctx, + int (*verify_cb)(int, X509_STORE_CTX *)); + +X509_POLICY_TREE *X509_STORE_CTX_get0_policy_tree(X509_STORE_CTX *ctx); +int X509_STORE_CTX_get_explicit_policy(X509_STORE_CTX *ctx); + +X509_VERIFY_PARAM *X509_STORE_CTX_get0_param(X509_STORE_CTX *ctx); +void X509_STORE_CTX_set0_param(X509_STORE_CTX *ctx, X509_VERIFY_PARAM *param); +int X509_STORE_CTX_set_default(X509_STORE_CTX *ctx, const char *name); + +/* X509_VERIFY_PARAM functions */ + +X509_VERIFY_PARAM *X509_VERIFY_PARAM_new(void); +void X509_VERIFY_PARAM_free(X509_VERIFY_PARAM *param); +int X509_VERIFY_PARAM_inherit(X509_VERIFY_PARAM *to, + const X509_VERIFY_PARAM *from); +int X509_VERIFY_PARAM_set1(X509_VERIFY_PARAM *to, + const X509_VERIFY_PARAM *from); +int X509_VERIFY_PARAM_set1_name(X509_VERIFY_PARAM *param, const char *name); +int X509_VERIFY_PARAM_set_flags(X509_VERIFY_PARAM *param, unsigned long flags); +int X509_VERIFY_PARAM_clear_flags(X509_VERIFY_PARAM *param, + unsigned long flags); +unsigned long X509_VERIFY_PARAM_get_flags(X509_VERIFY_PARAM *param); +int X509_VERIFY_PARAM_set_purpose(X509_VERIFY_PARAM *param, int purpose); +int X509_VERIFY_PARAM_set_trust(X509_VERIFY_PARAM *param, int trust); +void X509_VERIFY_PARAM_set_depth(X509_VERIFY_PARAM *param, int depth); +void X509_VERIFY_PARAM_set_time(X509_VERIFY_PARAM *param, time_t t); +int X509_VERIFY_PARAM_add0_policy(X509_VERIFY_PARAM *param, + ASN1_OBJECT *policy); +int X509_VERIFY_PARAM_set1_policies(X509_VERIFY_PARAM *param, + STACK_OF(ASN1_OBJECT) *policies); +int X509_VERIFY_PARAM_get_depth(const X509_VERIFY_PARAM *param); + +int X509_VERIFY_PARAM_add0_table(X509_VERIFY_PARAM *param); +const X509_VERIFY_PARAM *X509_VERIFY_PARAM_lookup(const char *name); +void X509_VERIFY_PARAM_table_cleanup(void); + +int X509_policy_check(X509_POLICY_TREE **ptree, int *pexplicit_policy, + STACK_OF(X509) *certs, + STACK_OF(ASN1_OBJECT) *policy_oids, + unsigned int flags); + +void X509_policy_tree_free(X509_POLICY_TREE *tree); + +int X509_policy_tree_level_count(const X509_POLICY_TREE *tree); +X509_POLICY_LEVEL * + X509_policy_tree_get0_level(const X509_POLICY_TREE *tree, int i); + +STACK_OF(X509_POLICY_NODE) * + X509_policy_tree_get0_policies(const X509_POLICY_TREE *tree); + +STACK_OF(X509_POLICY_NODE) * + X509_policy_tree_get0_user_policies(const X509_POLICY_TREE *tree); + +int X509_policy_level_node_count(X509_POLICY_LEVEL *level); + +X509_POLICY_NODE *X509_policy_level_get0_node(X509_POLICY_LEVEL *level, int i); + +const ASN1_OBJECT *X509_policy_node_get0_policy(const X509_POLICY_NODE *node); + +STACK_OF(POLICYQUALINFO) * + X509_policy_node_get0_qualifiers(const X509_POLICY_NODE *node); +const X509_POLICY_NODE * + X509_policy_node_get0_parent(const X509_POLICY_NODE *node); + +#ifdef __cplusplus +} +#endif +#endif + diff --git a/extra_lib/lib/android/armeabi-v7a/libeditline.so b/extra_lib/lib/android/armeabi-v7a/libeditline.so deleted file mode 100755 index d78b58b0f1dfe3b8d4a56e9e7f6a11252d956dcf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14036 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 O^lQj{Ut@rp-2VZXhi<6= diff --git a/extra_lib/lib/android/armeabi-v7a/libfaad.so b/extra_lib/lib/android/armeabi-v7a/libfaad.so deleted file mode 100755 index 82c2988b6e6ba9587397eb6d40a40da1cde066f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 206248 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

9!v*>r1)Is!l_N>M}d0sS+;p=VM0< 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ð+jSIrOjI9!l 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�BY};Cli${ua=0Y(R+%1N%k(Iv`qn~^U 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 X2H*J6lN0vJtk7$a`^31|SYH1NlIhQh diff --git a/extra_lib/lib/android/armeabi-v7a/libffmpeg.so b/extra_lib/lib/android/armeabi-v7a/libffmpeg.so deleted file mode 100755 index 4793189af04ed06e9ea9411ac1dd72d863ecc9b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3804304 zcmd444SbK)|M-8IVQjWxY#26%(J+igZiZpxW;9GGqhanxWHh`n%x!b8sFs@&DwRr6 zQ7V;cq@t)*ii%RHRLcMPy7s!R>wNe3`Fwt#-~a!3{C?-*?KQPqdt0K(=Mc&mVmG zdE7`45*H`hzjBfYRd_+7W$7<7y^J;OjuflB!YR*+9MsPJ6_J*oz=i*Sucu}5_|w*uQk`YQ1-%Kb{~DYOrhUjWUW~ID&(b+mk7UK;PoPL z34S~)kSF0!@=ubk1g?ZMbQVZDlKePudh(o90ka+PmoorR63muHZjJUY5$dlV@FM-=`cWd_dk?q@O2aj`9`QhZ^sJ3}3-7 z4xDHMKA3nP@+$GXk@5#B&v#S?;Ss6$-GH4|xa2PZ=WEgr6Cb3qNq#TzzlPT};7^dg zhQ2lezlZz_%J(_NuYz3riMQrCnP+cszSA-$62Bk%?naq08uv5g%K@h&KQ5BYug zbtWyLEO~E0(?`>icdrqbv=jbD&S&{a2mz-Kv~!TDI{XF_cfwj=AE_K?d9Eh?KDu3| zdEdk1O=N$SbfD(_scqRCCb(`pbm#xqz;nV-)yWwnuP%9m;n9y@C^AGM%Lek6DsB~U zJ7`?^q-uFp$$x|V+rf|FSxNJ!^ZXO}-a+PH_|@l^4BZy+s%qVZ&mZKshetH|W1u-j ze7eG$lU}Q3{tVtMeiF)Q8HtMbBG0GEYXI)2ivJMl-@u)sH2vVa$fmZeD9XBG*t}+2 z6O>lcwY43F@(d*ZMx$K>{tCZH@}7fF1NhxQIj5Aq9`d9SpGlb#LV!!Ch)nO3H=Ex_ zn%9^35cmY}4AU|mP*{0*KB;ovO8g-49z45)D`5`5a-@GFe=6~(wfxzXzd&)y01pNp zqG_S4$*&t_ybtUxo=M0x1zI1^EsD3E{QHRC&2t0!=fE|?Xwsi3ZVt~>jqlgz^UwrA zTRPN3mZuF~Vc@+0(t|3yiN6t8Cck~a7V|u(IQLUVE9L#D)PY|PbzTCzrIufXw1m&e zyQw5+r)KCE51>ze4*p zv_F8ehG!$_Ln(7J(2>N;^P52#5j-bD`zUb<3-oDE3Q6Cr>2Kh3kH`$K4g78(E#Vln zM|rk~PaB?js-MT8`w^UV$gx-R1b>p!{m%0ue4KC(cq{k~P=3xupxXd!8^3(g_fnRG9XvDO zVTM9YKMvk<<$XZq9!cI!)O#xFVc>mD`YFW`9{yUs$*%*66`FsamMidu(EbDM2-WXu zgJ?ZvdQr5WG#K zxABZ8?*V9j2LCVe=9701@mk22ujT!wyh=D>w??^=cc;RekbhjucofrtK=?owWNYvyb4j6$w~;ID-D^GYY+FUh|^x-B$eCKKY@$zKY5HqQht z<0SEM#3zA2gy$=o|0(GU$n}s>uQn>jTkwz&NZFU5{{}oWyhY+>a5@1i9p)SSMk^n| zISuY3T6VD7f#l~HysxMp-&VT6NXM&8&B^;m>1!+e3oZXeeSS*WO~4-w-=Rt;W&ELh zhZwR+zJ!CCH%)OK(lX}ooNvfqL1liPykLG~6@NYQcOrcY<*nx#NIDn3vBb~AyD9nc z@LJC^6q*NAt}WyZfM-XQ{WNsdp=m~XqAeM=1nv;h2Y7zMvzF$|V+FkLBJTs9Kf`w) zv}NG;6|jja+W}zjX?X^z8!e-Fzw+D#?kFHn5>Hhf^`d4GU6UU8pAmY$UJ8c#FSr>sTb{H(GFY%XQwf%lKl6K@Q!n-so{XG?yAD65l} z_YCm4{9XlDLNNIq;oDx}vw04p?3Z|s15d)OJnt(dOR%KLuL!M#>BJXPRy*VfA};$+ z5*AaApT;HKU+dVFGHO#sXK3n@_c`%~=CBLK63+`;_!pWD=&d7g3d3{gIHzD{@?+7x~-X&aP*?lItP!E1tSNu;L$uSdLy zcnJAf$kZB~!#sai`Oc{f6-t$RnRI7<6*Yf2eBL(NySBEOBhMOOS16+{d|&6em2&P; z{4nCj$#a4ao)2jHgpn`s)+*QU$aMj{RMm4k#d{f^KfzBzvf}=tuK3x>&E8xE?om~+B{h|2b$a4qrYvAtIa?2aKxK(8m zx^lpam9D0NBe0gG_)FeSBQFpBKPqiArJV)u$>1CTR*qi_g|9Tq9BA-p1&)M7@Say$ zC4B{)p44Nb!qX%Tyr=RLoL#^=fb+WI99O=7gR_LZEPl-dk?;xS?;*Vi9xb%JB)bQNeG2`p z$k9-Fl{a+b@P1wS)`Z^xg&&3H2aVTI+IN5#katA$3$%RU(~bCp$Sxs)va1{Qo&~R! zT1H>s6T!UQ zxJ%)&R%JT?>?eLH3ZF$eJ;CWl`der_gZCG|Rx1A>Evp^rM${_+Ui+0-8u1M(TvL@- zlJ7|!_`Rxa@B{Jj&=kUdBmAx@y^>m=5?KlEyU6f2zpe(aTHuc$Z!)xL$Z!Y0pOtYo|QRl71EXua)0hiu)&gKSIU=@`EVvMd}?xUL*3} z;%A0D<@Fo1FMx9k_!6R^DJDIf-^cv=k^h;}z76gt#Fz40Ks=l0K$W2-bP^JjPe}@U z0PjOhBm%34+{3kOfA}}n_^-qzbTRbeQ{E*I=3p9mAD-6>t(Auf^HaHc@mv7EyTJKO z@oq!@(eQfQpes^*;W3E(B;=cdOmj)E;Wv%E`=P0&vIW3njLP#pux+G&;aA_N#|!X? zQ@y+gtQz>6l%}zkcai6<%p`q-(teT1I{d+{ zj4VG&K4sK|#~GDv7<4m8KdXFuL-QDUH}h+ve128=KIBq7aRplQo5%#gbUxK5}B&dnk_{H_;Xgtj$&@8LHeoO2-cGI%*OW3=8Q4cL7S zkmoclvm*TFX#AYgd`4a`WH7^DiZfDiDl0sI=T#8DGxT;V@jb|vsde~OpZ(z5M(J)IDm5e$k!siG0Wdn;=T|sU=gYB$? zM>gfJHu42lgS-mleF#nyEl2WClGmUV?s>|}1m^{CGbm>~v{5_{8FV{|A0z*=%JnpH zCsc*sap0|>pUbZXv=1Bb3Bb;R9KrJ&eiCA}zQa_O7UVqv?+^JMQyo;ZF&X2OMv~p3 z8_aK@k@p4hvy^Fu)yl)n`@bcwRsX+5oc|+obou|W)K33_SEK&`|NjCGDMehdRQkV3 zR{d{~{{wFOe*@pIu%!mhJx2V0HTu~9D&l{E*Y!HMt*?`J>^gb>P1gAT2HC(hu1>kR zks52@=KSwR#BJ61-yk3HFK8aTPX3VVFa90SfUPy+5*<(~?IdqxjQCGs6$p>~ zC#3&_@DbGE$^TIPrhie-VgG`z5d6e{0W-6AUWe~K6XCyz2VIBP^~igH$F;rx80sm; zK?5^__;W_uj6P!~O2sFXN*5XBS2E%&!Mmdr?)8$z(0pRhnK;4Z*Z&tV6VHsl`7iLd z8u=|vg6qWBkvG7=zYdC>wdFcE|0wdiJY$(R{lIgw=9PYQBcmKRPFPIj%yoDQ{FLUG zG4P`VaGg-4RNl{}(w#{^RVwe_C7Ua7^S_Yo*?&h2?D)Tdx1v7x!*{vCd$-~@EJc@T zq-Pm=kn91ZpM*yi@z)Hz%H(}Xx;no>#OE007-(+vafP?lXALc<25CRdYphR~s8nQv z!aI_`rj(rDD6CGY{8B8ewhI3V{J;2x@@q+6OQkQ3zt70OsTA)p17^~#{}=ftju}5= z@V(Up{Fm`R;FHL&C*}VLZCRD$T|=H9h~HwA=M?dl;uuQ}Ya@Ag8?=J^tC4=2_z~r` zSo5O{cz5Dcw1CBm_msjrUPp${jl9Ojn#z&!de6bv%Or0<@rBHgAG z{5|p_H1FF|u-2M>Ul{$1a9;D581;~>7|Q&XJlLF;A@6Ijl|VbupP?dE+fAf z{0pQf8F>Z^H+qQJtC~6qpK!&WTuQFzG=JQ6_`OJd)3na5;1yYFPr@newDPO~{Jrb& zaq#51+|Z$_gCOTbCz>4cZH?0k3*1=iYtIXKR90`R8{ zS)F`&ehys(u-o}HH01k~^jgwQ6}c|yK_;QbkAm|su*0P9qZ}tJ()hRV4+0*eyf1_B zE@>yc4Bpo3$o{s2z_SSaM+}-=cugmNE_r_&w9Sa8z%Pa8w+4NLfwSA-Sz zLMY=#@_$m=&$T}7_4%$oo9a_|9Wlyrc*knJC0$#~d58GVM!thP1bC71C{VuDH2sB9 z&i5Ms(Z~}XlgxU+Kaaet;N+LW8>wYa|E)ak0&j=XM;Ls*qV9dc3Dvx2N;lFd`^W3pi5Bxe z9tE0u1|Dff837t^fedeg^OC_kUCS#+88gA#1Z*I9PPj<=tby<3zoc|d+I(Kp^1e1R ziC?0O9`IVE@GmH5nU=NAd4lsj@Q--@1ny9tNBC{l@6f;*2qC!8W(Pc{UNFjny& z0~SR7DDb~AWL^#LPk`MGzejkQp)ct>4BYQX{{liCmAeh;exxgCnQ?|J-QkBxJl)?0Iz5H^(I{fys3&4 zZ^*aIhztD!OT;IC4)I;CbV~vUIFeIn>)4&?HP$d4rc zAbG)x-<7z8uPM9GjxpCIFVc|xW|iwA&mQ2U0DlAcoA4V=l*eHh7HV=Y$)`AFQz3dA8TMz!g>FZbf<;c$xhERGDUwKNfgrgC|+m zS6ZJ~{6?C8S)WfB@(P}WRR-(y^qk7&yO^_qmZC2Yd&4E48di@bu%?lKeXS zJ_eS=uLr-EQ=Sw0L30EAk10&@|AgN_p6>$t8{FnRpX6CtdEN&8ZjDz(?vD-m zc7r$F(BlflyB+@bmXhfRW&A<@UVa;)sV{{So&YZx8FrB0l%Ir={9ac2$H3i5IZ>p4 z;<<;by04U9m9Po!uZfE!LDvUf88!%q*@W@a7cSD)GXt?y^6XrB|YR=&cQlfJY%R>ZgQe?$Mf2m0IljKZ&d zPxSG4CHq?zl9oBF6RHxK+ZFv(tz_3v;C<20B||?MjcA{hp8oc;S#tVfoL!!@Zy(AJ zqkOS>p|9l6Jg>8#eZNl9h3G4m3x(ppB^}q8dF!!o%cuG{I0XIGuWe0(PT)7fZ}Zw% z`#l>;w_nRz_O)0_DuEBFhCKu}vEP-K@@H}oIqjxq_B}*NkE~AlY?!1d{=5#<|7%bF zZ?mY+ixIAV??FGQ=e+if!ya}VjI<7_JVz%XUs^jYFVI?+g#CZq&VHv&?D6NJjD=6P zLsDt)V5{xT*zd$}Yhy@>yw6twP|1_G@if|ZQ60B_gPH7|{KAv(H5i3mi*@ZS4SPy@ zuDMlc^AE7Fs_oTzo1a&cuPI| zZ=X*4^r~%LVp1pk((b_?A86yY?~e>30nf#0eFLlw@VmUFiGAiK`hF^o{j}Pi{=zem zuWogFKT-Jo+7Wv#^5n~^StZuBMfZ{v@3QJhXasD@^Tg=REe2S~RwD z@s|QGKcD(t^r`+stXsp8uR~ee9|`<8f(INZ@9O_C4u1~cQPsMHUIjiWmHu>dh;;!x zNzcch#Ntm-vz`8~7X7PB6Z@M6qCdGqxnqW({a&!(2f)t>(my9*UwbMyvqlpa{P$_6 zh*@6yeK7|5fCwvJ%X^vj+wpK4OYQ&&ehT)tr=n+ntFx$2pBDC+g}^fzT+Tm|X!nOI zR-pY3YOInCi*4* z@atyS=Q{zmd_pfBD|NBQKa5SFq_u$--PYEZ)s=LH=TCpXiSqY*_Hniz<5Rivc6$lG z2{%BYU)Bl104Ml#R zoer_aV;|GjHg@~(s9Twvo~vcanWL0{4S7$7SF+2O^wMt3aiW7KppN}L1WDKFLVaHjw=yVC(lzPd0Y?9x-Uj_W>(&1Ni-!1l(XPHydUAgEOeOoh zMWG)~|INB5)LwT>I+XqzQ@ts5E2-aV6mz+5ZTmj9z{g>K`Qut>eFLnC^uKJQ|82ss zmJbTG;etO9`^*Y#Ce38)s|@XbzNm$LRw(whvOfLwzVdGWk@?mRHmbxvh2Ee3pRuWp zU0=a}o%Xn5^uPF}*z11$o#MCLK>Hkzb=yn!uTQdBQmF9g82TeGgUMc;@Nd}`d0+JO zHHD6p_-eRq{{pWw8+}~x*=J=kUPmsZy*4$r_f`ddbPD#nKH561{Evw}-+?{T-voa& zMxSl?_Z8It?3hTmKR+~;_No{UrxN{qPW_UWH@0N&PWb2EP1pFTrSc1~9%kS_{CO>V z9VGC77|-I_aC7>@N?x&93lYz5kD^x8=V7n@2dM9`)(xyn zz=eNp`oqCRUVo^7y&X3EwS9O#HPVuIBLsg7`gHMih@%y*n1@?_x0>284r)$PXB!?%$*OV(I0(` z?+iP@1Fe(IiM$tJf2%{v8-YF|j(hUnharY>NEQW}z~%j${E2?{T`fr$rqUi;L+m@^ zlKx^P_Oj2L&z+@z#bZwn{pDyFX%P9RGG1MN*^_ra<6U8^V0*10{2H!je10$1?k{$E z*z-aBqZokbV+!q=o$s~hkp}cP7F~((7W|&*`y})GVdziNr?IcoEDjz0-p>3d>Yh6G z8Lq%j(Jq%Jdi?%e!FuIoZ@#yP{(JC#um7f?pZMh-{_~6I&)>z`@8$`=GE_3&=r511 z!(YAY)u%U(BsmcOrSi(VCr%K1{~mv}Z$JwhF8<;*#;*>KdgE8(os0(^!(IRUZInYT z^=17^x`;)4kkxbX4-+gSUg%mIl$^rhD~G z>1SERJv@GQF~5x{$Dl`fBJZ^%)YKU%zz;q#C)=J9R$?!-H`TQ9Yt>(QS!_08{Z^yFkd_vx@Oy*!n^da;E=(u}!d;0o141HB; zV$BCG`Z3 zP;6qIrgr-a|Ca5Te-?Y?cgInm|I$l0n1lVl)6klr^ed4+x1FEs-+u_C|4jAdJ9`7; z!xN!aGV>a#U(MFoXHF$|z4GL3tZ)9VZ5>d4V1S>f{(nxS%fAhL(v$pL`xr-m9=0Rc{+@%-uf~4z4S)Ry{`5e5Z~bt9 z@g=W+E$gz%yRH%Kk%>RWz{DOV_F-sV6XUjD1omBgAl6Bv^zfJgKD{i)x#6#q1i4(lcg^wuGQvO$WqDuA~ zq(9j5PQ-p%*LK%G8(0sXW&D%=F5}!qLS;s(*4j^l%M^6w!mvmqkiZ^3{L9%BK14*npeMmz_+o!-iyHt{tTKj z;gL4BzC^yy+hbqG{8{#516uPfR_#x+KfG;0tSisG^ylPny!N<4KRa)%hsuou-lB!Q z?$hrzF^w;qlK9??F`x`Lk(_;MVj{|`Rt zj>locIOKf2hv{4>)GGZ6a0}2(f5Omtqf$7w0T#F zu3?>w#UJsKsqD!Myl?~lU0`wI9T~_BDJ4G;^Ze@hyEd`eMDFrTnWQpYK&q zzV67Eu-;oQzOxAZ=f%4IXnhL(v%a@q7f;7KV2t0D#xQ?4)7&mk^tp$jC;NSmzucWF z=3q5V%fE_!r81wdMcTHn4AwL3m&*Bz)bAn6&tZN=v39yQ^+}~Z$(pW6|44qs>mPsi z!X7&Yx%|H#kG?y3>%A4|C*VW)DgQ4=A#eEzE5NUWznnSxGvCcq{u2>&!ssgY*`UaC zBlSB-{iH2K-gekoObu`Taw&lEFUzx^9n(P6AokXv4*K3)-hO}4t{?tqDi*xv;b`tyt{(~SAzv3~fEykM&s zxrF{2{VDC7*B(F4q&}=qo5M@!L-DU+`xA9PEYMnmy#y4*+UpCUU)L3W?58^Icc32g z$KT3XhoKkvldM-x^AhpQPL01YDlt_6%w>`yT4+Vpa+lhf1lhjQ*6 zdYhk>Qn>^k2mi>PP3&)Th`eviL%z1yYo!wSNDL!pj3?h1{7I-E>rid)$M1nZ`$tT3 z?D{sxAMIh1c16qIOvMUD=U7QLJj6Pc&wO)3th;})eHrru_6uaZk^1_8pU?N!3tvQH z@4x%I{Us;{dpKU+U5~d3WW8bR_t$8{{B)1k9xsqS`J9)Ikop<^>o6UqPl&($EkY?j z5Pxyxeoud4%s)C@Xo+S@>K7^fe|EH8AHn~UdEl_Io_$tZioan0Ayw;hJM)uV_CpUU zeLV7~FNn0_RDVN~m@ggh_J?0+hW)+GewV@*qu+=^DnVM>C-Y8*_a@=?_kX4QRrH6# zd+WIROJ=^^r&U>Z{Z?&0ovr8}#{40)2ko`Kl70Rt{BDb4yk@;4^_BD-#;-(U zJ+Si*##1)c3l-iOe^JDEB<&~T{l2D*hm*baa0~oLy8jK@{s9)Q&md zrIHopS5jW!5d8n)aLXS%m-4G(pGiHMxcie!hBH6AQq9^%Jq2E|E&hI=*S>j745A*Z zY2S$zc<)>3FGV%1wJPsTR4jD8w;uT6X8c?8diM7{1^*7($9J~8yFWL+I_=5%z+RBO)*Qu`^W}v4e%59Bo$&Wj|KeR<{U>67PLTe47yjm~ z;cpt^sC?Vn*!M=I{YO#X2`_o|-9$kF7aCdx&9?0kdq6U%w`xf*cV?Xtp5C0I= z*j`tOeDX~>Uyh&KKkmmr@4JY7`Pr-inK2^=#->lUi``Qp}e>+^@vqw>0 zzi_Kq`TaxtMKQk8&20XY<{=vU|M8j*K%YUz{?romk$Z2T>#x(Xp8)I!wb}Grv9~@~ z8(4`{NXo0$2!ICBUo-qg0{$X~xaj{~8a8!Jth@dn+uE{D^P~edez3J< z4CDQ0&8;m;zgOhNpNsyaJeHEyfxBXDe&D@xKeg78mwdF8)FefKgS5&emO`H+TKURcMzGbH%yMkD_;I!T!l`>3*n_4)c( z_dIhJ_8c+Gn-9EAdmLc@%BgQO^f@nuyXUvl8NW|#_w0WtCRQ-h&+T6qR?~i)W8MAv z_SjR#$uP@@+#=7YQvLbI_3URH^V+ZHAjYes;Z_#%3jSEyci)TN`tZKqmgVbQ+4Ube z$eUuw`_D-FZ>MnA9^)8)cJPvkQ=j*wp)`m+T}Xm|<4Tr~xRm!0O(jWF3^HaH_;slZBR>qSZ z3%vGaDQI10zE>WY*w^pyyHc;Vb&|Bm8^ip`2}1u9?ODWrZ;3sISclMima)DZi2a{n zKIz#1eY4Ov^RaMfh5wlq=#Tv=)L`?!y)WZ=jbQuRj8a}U6VW2${Oed0?a`9)5IqTe z2KJb>&9lehdB7Reoc{ItFqywrw=#76O6Y)n82dZJ1Mn}5KV;kdu3*@k@xQoPJADqp zQhuS{jY`u0q%i+k6X@RjkAHgx5El=>C3-@8Z4Z<9tugXnv4D*b0jh;<4&XK@xXFmyr2>!wt#!q8?aXbC@DDxGc!pF2>K4Yw}8`A$GUx~J|v1_3}jlQoK z{l7&i`My}l{AFuncRmz28hh#(VI_x^&<~!bTbTdFu>V6s%9Hz$iN=0P zee9$7DUbdh>^*Ey1Z&z7{MF2ttR3Ede%(^`arYqP%chj{ z^{bN)f7Tz_3V*2@k1@DOVo_0KTQKW@1J z|1yJp5Wf=qg?Ew0pGtcPzslvP|5!h_{l+iGo)^cu`>lW6%Xn_iJo-xEL#2f{TuFy4V!ha&^Cs{l%~rn^ z_m_8{WKb&eqvQ~)K<%M(4C#51)={nhqolJ}MZ5Qv5Y-LRzHRA`sjq~){^i?gG}pu4 z_&t{STy9nqdps3;KSMv<%>IY8kEE~l!Jk#E>)t0j&eXvP!v9PT@HNry`uXV_so%$r zeuJ%9*k7?>e{cAJU%OG;E5N?Ho6UJ}CcLEnCs=O;uz!+7TFQSi1^&kQ!UX(p=wJ$^ z{xUv(&U|UlJa0TZRZ6~Pci?Z6qpWSJuTk}3tU=^&H;3`0ZH$$ya32HJ5yo@WV9V1M z`zYc9-(DS0u41pJjs1qhchf&-M!Wm{v8Be_T4V4Z#{SAg?9(^FlXn*Vp@{uqn$a%r z%T~CODDV~|y>=?2(G)MJrWp{8dr zZk(Uu$=48m%Rl$(lZ}0xJ>jMO=s$@ABi!{}v##`i&J*L6-^=r9?;m`YKWS<2$Eg2F zpT~a#D1D(fKfmOo{@8bt^2^4*W?zl4nmic^ATkM7X4}nX1IQE!`Jv#DC!7vNI=6ndf3jG5xEj0FrGihJT z*l)kD9rLfV9>2fwH_PkRwa@v5{!iq&VC>g)0N!V99d|zX@<`ap1xq~p z_^cD{ZJc+Wr@bbe^z_q%`AY%kA&&mHG2SH^_a&d4zrMuz>!^ zCOT@g;SVjLe=!KqTz2}@K;~P|$GQIfBPtrSpuF4v_l`p5f#LT1%ff%lP}-mKr6}m7 z{)I`*AF&VAV%x{x3+SIlf4qV|ognq!nt?p!YS@4KOZeT0y~o_x!o3gIW{>{me^qv|`0!?{sTho=$zyUsZ2C(x3j9a$lnEe+62L6PSNI?$Nhv zj6eT?`(Lz+)Mq?)bL3X`ca`6I^ci93bE*&fX1~Ze57>!50#W5Pc7vF8!^pwOjEY!XDyJ#k&5XGvj;Vi?lbmBH!=G8D`ke!1@k1 zf%En{M?a;WkJD=MckAGqPa2dF?*MsgF3D8S<_pP_A;v(-pQo|M0=<*;--t`v!bG6dSV?3l=+UZREnG;05rL6z5js1ZuqOWy+u0QyO_KGsv z>jC;l=6R=o{B$j%pUkJd`y0UvI zwtFJo^N_1ODgSa)d%sxp`SBX;?~o^NZPvG!#^gX*a=+n2(vd&JSyAK&zPyWjI@Qm9 z4^8B6iG0J3d-l=^``(e`^^aXM7=O5LMl;*`cx@_a?jJb%*~NHg9rozk(4Us4`MdT1 zurB&D&M)Sm?;P$YIP^;z;UA~x>ir+?M@P_JlgrxQjkon%h5r49pCx}cM$&U{MklOJ zlBkEIU!}bwX|Izi-}l&ehZj6~_EVoIV?DN=`sRM*!SARKp$5@+Y!dQuUnz{Z%s)re zWPX0RoO_=C)nxqhdoAqszUcG48ng%d2YbL5c_!XV`*L4xn5J)A%X;QD&t7sVe~)or zAv~J;a9$zh3H?s&;q=hTuK!v{e@Zv{Qy%^A^2xRqW@oo&Kgv&OUDlmnZ9(5rhQ1r( z--|YR^{qmBxsh($jq%5rZ*ELye$%(A{eFSS^9bXu6GT60gBdU8M!WOlckoXU#`shd ze{}GLM76g->kRF6;=@q;?{f;j9QtRB(LYZIVsEoNdwYE}^m6GYsiZ%&!tWGM^4?du zzuLaXS z2L9Fr%6r0VugciVj<>z^p~cLH7RFi|Ri3+hQJ)9mELndDzaOKpKkO+;;WyujJiWuM zFyJEp2Id3##{I(q`J~z3%250b_?v|0Ep&bvVBH^sf0q3ezY_Ylva!d>-u~&cz%A}0 z!`9}%bp`e1epsreKVd#*CB|6O>XpD#5j^dpH-A`#eH< zMt?MuyQ^phN&$V*!FN>nx^WQJR z0ca5W9y$;GH*ZYICGy;Wd|7iD-!;90@;5$G!-a3h-}sF2wl)3na(r3$K2tyRp2GgB zjDMp4bJ&Mv%pX?aD9-0pwZFqJ@b@tNJnoxa1x@Nd8@)S0OhWucaah#{I<`>A#!*u44ZU9x1O@H^#4UZ@qc!9{Q8<{?BpjG4e^z z{#wqUzq9|6sO6to3;q#r{8@^NZy)QMP~swQ+IsAP_eUc&{Sk(m2zzPozIC_3Y(+?C-3x-`j_V&Na^CTK2$S81uPn_=n8B z-gwe$5%bA!8oTFdspu<_@zK%GQl@I>jr$VoO4;|P(X{X4@>a3d@BCd1WpNl`l(b)n zCEwLaz#lmFe6lC)i9F}&*V11r4Xn_W52ID{bwWh>0_0?4gNhU-rG-HihVjk`e&E!j0Y5sw1>QR zIqkjj_P2ecevb{IJ#Njl|CXJ=-$vdbV}Bw5drC0c=T_uTH|)Px3jY3VEq6Y86Z|sY zCz-g^C%zy4psTmux#4c+v)o_H0510S43UU{8rEj&DfrEK`Z~tvmp-*fIzbxJ(#l9t789R+I^tpll znrO_&*UiB7GQV{CTTu+~ zf0(a@c5hzq@-algQ{5P zmHvIkudBv=@>JG8h1_4mtZn{T{zNp0y$yyweQ*_bzqidj^k?I~**o;lqelHcM!%us zz4M7}OKCs$GlJkH`p-k&3v2=;YkGe){&rD$cRtx0eO@xwr}LE~;^ z?fDn&=>&m4gZ@vTe;;wt|8Cm<;Pbiee#i*wlW3ez2H(Ma@Aqo%ec2u(@VC5FCTbP^ zET_LD8vSJ^{x5r=_x|I!#@NdzP3*tfAmt6X7kgyAj@j7s!476aF^Ty%b?%2 ze19ZX)AMNGjbkER|MD&VCVm!5^ee%C8-8H};O}3O-qRXFV}5uKLvP_*0q%NnI{G?W zw}!i)@%%>o5&leq%s=}xUS%;}MUWPGPGHYTM?HHuE#pxtP7HgL@gTbu`g+KNPj5tj z=Kc@e)Naq7)Tek|dH1~j3ZVbA_sJpTUF_ptH) z^``##kGH(@n5V%nFxD@Z7N8&WNpslxsm%H@a*X%AiV4&|i|?J}Yx$eH(4Hf`_bF!K zZ{j~F@4i2}l!n;L`D(J_FP(}%V*f2u(`D@azFFd=?DC$${)@4Hr~Qt!VZQskSD$Ni zlzq(SBb9zE{_xV2NZ0?iS%$qV^6YmB?UBf)Ue(rb{w~+qK`@}K8guY5|#@nY^@01n(f!21h zw~V<`J-dEe??gV<-_HA=d#5no6DUX0+efmV>kw}LU3fcQl z=dNEjG^c*tPlzZ}f}awMzKr$D3H$Mr-?DufrWthTyz%Spp&+2Q6zu~;Dm6kUI|5*5J9e2Ijzq(}=Q@&H*t=Q*D?)%3h zpy>0)O!WIg9eX`3=``f;zw&e}Bo<#lt^pDzXd0)zB{>1uxnA&q?`uA>QKll&q>9Db1wFG$zZ?0;;pC|I4 z5Ph=0m!b99f&Nd<^}fIHeh6vfKEapx+YDoW=+qL%BhL4jCfW7tUdsOOSj2wMxyCMh z4ehgho_F6c7I?(leBUCnguYdO^tsu)kG~Utw$^xmr|bgkllT2nw7do2=e_Rv=S4mM z8l?ZB7E8WgChaZt9f|$L8t3~R&|eb%FGJy1%MsBa^owb?Jqdm`BcWeKMMGJS2u$qd zRrGP5{RF3ddSS?gFNWFkL&5Jep8A^i4`}~k(-pGfm`yh|Vze?mCIoFB;U*!1%f9QL`v*$9RFV0WJeg(f?U;5u6Jbf=)iM_Mmf|=R)F|=0{=R0|tei8imsUH3s<}cHX`AZ=KL#T0{pMgCk z9Advo^owLuXO~N(7#YXeeR8Q`^S^C z@4mEpmQVHl3-+3|)RQNDKK5$7-+f>N{fGD2q*&qCjPWP=zF2p?`V095b-nkso}#@n z=LNgp*O{Ko{B=wv_x+5o^YF*q2a8mBFVY{5Om1iUJDLB+AXoAfKX?6Kxfbg^zL$}x z_|Hs2Ue2d5TU#Gf;kToIJG*_wKNsRp^PjHb&Tkr~fv7?B^-&`FH|~R-!cU~}y%MMW zLg*jo->+*;!!JsG7cyR?80Se1Cpz2&&UcO*;{W|CxcXtM%PRW0oHb45P0GN($@}2o z3cp1wke~BA5lhm~(_Uw>HwT`(7Jab3mHG+%Fi&e-taa4CBpr?2N3y>cr|@s_2OVZd zyZaN1;pY#(Y=yU_Kl-@e;M8wpE9zV5+1n>Au{UG=9g_+FlQrD?TkEh7%kXD!55OOe z!+)VSk#FBX_$?20_iyg6kN@X;VorVDVf+ov_3Wz=<3%?2t20!-g)`_MoOgw3ItqWb zhxL4nrXQw1q-6!!-(r^XxEg7#<Nf{P90_Y`$uK1SBP50X$$crOzE?$`oS&gS zTi#B+Xy4=Eu71YPqW%}S?;KhJ{}Q}{NR-S!DX;tn`~}~e>7exGOO1DjZifDjD(-&h zDjcPGALepn)(@weSTj|=x%h`ZFM9q#z6T!0{bWa9Z|1Om<~+EMmNyf{#P9dkt2Zvf zpH*_+j|i~JqQ7|7XUi4;>mc-Jyq|TB`F0HJOR~{Vu(fqO{fql?QXkRRUw2Zz@qLnS z)2Pom2E{0Whgd_fhs%H0w8Ah*(MQK-@C$FM<0JET>|q+4ey6F2z*moA{nbC*I;{FT zH4J?A<5N|>zDwc9{54k7t!b}_f8tzzooJ7E)(e=8E#ILm>~}~lt3&M){#zRHenVH3 zM0<&RWhXP9Pif(f&xfek72`br+goY>GLhCs7>ayPG=Z@O>A$PV&z|eq=OG#**Vv!? zF@g3o=HGAA9!?PY_1*9{#`#q*DpqLh&%8#%XMGXP7*|q$7WyeRz8Ct$LfV`4?KXIc ze0zhbnlV4Eh95e}{7k-QFYv&2_!r~8WCQFu{c2O3Oo_gtu*W^Q;nqIY|GApjJNwH; z>hHr))wK5m-1FZb;a@z-&+=*cwQ2vNo_sGt``2>hOMa-abx`4bF|-KAJJe#!^Aq|g z&ME8K-)`*R-0#{c9Z!SkYjZOGdYX4WEF0U!%wI$RY0uY@`)YGPcf9I65C8jv&+fkh zPmjQ!xW9P>UZRh$kTcXc@Awt@FIC88l2gKOe>U?azIS<6>l4<8^4iz40?L)p`(a9Z z7DT)ApMsH$PxZqsuH@PLKgIt=8RO%ioAB2MJpcI&`j042r+~lor#HH?{@{Gc@&6w% z-bOLrq86K9hc@_EW54L>28@sRXPVE3Pow>gavuV<+Udv9PXgcbT&w9`OR%?1vG%wi z^>5vm`fjT1e*dWLYV@&;^J(-h@RK5+zbD@r(N9nGqy6WDOyE7j-S0!ZP#t?`y#zV+ z3AR>6qQAZ^EYxAwuWb|NWB1gweCS2^r|{gk*y}%2aWwm;dFj{DcUou-_kEjp(Yq7G z9u6&KePEnVOs74ZAn@2k`sXK}z8M~@s8QZ{crKd$wxqn3huw%gQ#vBQaen;NSo|&X zC&aSl{{(&QY3rTW{Y-y4YP`?zBkgnEXrC)Oppy74_P>|ONTg8t>>eIp0{4*E_v?l*C@%u3-rpt91p zT#i5EygZ$>Z9n+6gqGYt)U?$aA7RW_>P^MplXmp+EA$?3bgm~|36lJW=Ao=1%KjHh3w80(*v2$pjf z??-8Uep!cq;e1}o7kVH5eAqGXeB&7YW8?5D?s($Ee`IXreN3g_L;E>F?DvOZ*f8UB z6mj8~FN)A0@Hpm|X*rSBd8MySLl({O`u7?9L4mOzd=FC(<$DwiCGveh`Uu~56#JF*8x!dN_$PnrCH*UJ z1omF9hWovrv&@H+`5vR#kHE*GkMtFF-1kY7@ONvC_luiHFdn}KGrto4O&GV+S)Zh+ zJbxwNAB_1x7xa@f3;(V9xv~iVXY2=rp&#Ej73{x>B=Sz}gnb+Dr`(9W^)c+N>}u-A z`+xhiez&&5-y7#Yozehk5Ph9veSXDwzxE>iHSdB?`(ubzy@2|0A3O+LDZe-VEy~zG zduJ&2V!W@?Bbxn8_9GqrcE-OI8}~oD;lK0xdglxMVZ71Uzo|<9JIsEUqp$u^*zY1Q zy&3-;_rBM^wlLp0lIOwM+G2myTMrh~4h1dzTz@oaCH7#f=Rc@|y&31vOM2lS(j5Nm z8`FNiY>)r)dH5T?Cn9PTef)sD+s1nE8|d#z+|LpD1^y51mt^b*PXLg{OPEPIpUSKa zq6TS?1$}7Gga)p^z7zdL8sozx{Of7n&r1bY_)i&+e`UW?_A|sjgBWj)KEV52YJY3< zuov!ENw*RFyX(vP*?WJGSC6fn*`ECOWm{J9SnvDZxg)Xvy5a75*yHP&UlnmbNcsKE z{5_BTpbnZ|#(0%xoY$WRUNkY(_4lXoKQZ{948@;{y`M~FzcipkK8ms~aUb}S!q1gu z{APVkx3T39y@&q6e!7pe)HnS$#>1^O-TOQuNe1fVzAGA-e27ee`&8R4QP+&@DI31k$)Zf9cJ7I*iF6@r2Kzq z&j928MMLHv7XDA#OXeRR%6M3_y1PI73ifsMU2lHyVLjFh?3auE%l=MH3^m1A|FkdV z4}-hmpN;#r-R969ysswqE%Hyr{vsa43DUnL-Le3GWBA9L8Nc{Ijyr$K%fo-t|1fX6 zzUMOWFWtQPa)Y+ikM(@A%|F;$On=z>t@pjZBHE*n?-^v-@IdPe+Arh7imtu0G;o9H zYi%z5&-fl@80DuK^PBmD(a*4|?)P6hE~dXTA9DIvH2CSp-)}j52kkkrnsuUSiTn|w zNMn9682QdJ-*e`3bt~b&$9ewbXBui7=Ydjx(br|*iN^kFZQ3jTZErsEAod<+%%}R} zU;A+1%$a`-i^V_iJsgo&+VhWP*cbCb5lieTGoJS0{(O{{*O>94Xuc=Ui$3OC^BdXU z)ewA+s;xcPA7nQD`}pMu<9n`$;D3Ve-K8sh6aDW5=krcFp*{BXu-AUk6G-#@r6};F zzU|9XAKvfWtMmhbp9Jpcqs83+x!$$#pZUxW5yPerrG2*1K4O0&Z#U+LhcEanpA8SO z(txKd_Sz5kW;QTBT@t zBZkR-UYI+7`lvJh<_oX?ZOg{LjPt&S{~hwD|KQ!1Ju?aZoOdUwytxY*Klr|eebv+V_Ep#q@B2n6{AYWg4SKZoxL_R(~=1r7|_R>neuc_@ZY6#@ZbAN+z55=skpIdQ?>xU7j81YM9;^JmtY%ropJ9Zm-+jzS5{>p>%=j7qKtn4Z zzb*RTN&R=@ujtlx`Z9Ex@JrP6iII#KJ^7xYroTsVXa5PY|Awv5KeYjS;Cm~Wg-yRH zAAh&RyHArEgFMCDS1Vfrf1@VzqvEpe`rs53{~e6)sL8JH+{vu(n?_opI5*)xHxhYQ zHnH;2pY*SClz%cX#QpnIW$EupMt>hi`(5RI=_HkB|3v!Zh1%9O@PyxL=1VcJc>3SR ze&6OxHMmn=0*|GDqE*%@BDyjRs?n>wenBN@y zA=tVSP=Y@k{u#!8$x8bB$=NO3@3{_bKzlvot*0ZH5AHDTBPR`HelaD~I*o}+{RZ}8 zepe9X+Fv~scXD>5dmht$ti^ptZ@+-6O?*!{(c+aG>>F?}x{Mj|{{QjjIu&-^Q)-WwUuo3#)%=dYe{(Jhv9{Phn zX|eY%*g>kXUb@`}K!eCzwlel_tgnBp?Lb8y{>CHagqiCV_(!q7fcPc+^B7<7cgdth z{?A2m8iZc{uB#IyJz)&?!S@TR5EuF4N8rD!*Kog|v3I_V2j2c`ohkIk8Qy-(%60fx z=4(mNOL@&;nrf`aerSljj;m}PZCL_eirwwteW?rTKYzuKY-4?}L+Klgqs`bqqFHQt z8q8yUX_TMC__4>hPm+S&#a*Gb)Sv92KZZ`>y*BL+H7S21@AJ#wJr()(RHA(2KG5Bi z-+}uk)3p3E*+jCv_wRZ(p}kjn`w_p=zA5~DG~9~KuLbs(#eJwaP2bWK|4^%`eScQ; z`9AG&Vguum*0)w?(mTBI_gVB&%=uRUf_pCc1I z`<%QGe8$Igl}FYYYvaB3GfO=y)$nIC(9iO+72NUQSH`bB#{JLBcQD_a7iR6FABg_e z4#Z}bdh?Mo)c+Dn+@|GCoP&OuZ__Mx`?bqO9`+9%`}|}k>!FK2O@~-*Tcgh{o`3tg zl)bJ`q*~5tG%=f;jYrhX7^ife1RNLF%9-G6MvLxEw-|E)|IQLtQsyx%N z^J4aAgiPpD5h021X{KuWJI43;&tl#Acpv<0jNxBTVK}Fazpv#tmG&{tC)(Agf3D^4 zJF5N{EXE%j`(0Tr*l%S&5;k`EVK|ly-k(0G>5JG)6!%HQ9z?#E*5Y4{_ZvqJr99*B zsm04gMuYe(u6p55z58qj$lPQ2n{@n4fU%z6ggs`x*;a;e+djguzcj=CUYv|QE%wHv zHuvJsIp1>ZVblcd|I1u!wZG7ZSVuEh-&N#3JpD@K??00MQ-}Rz_)9tj|5${7bm-3& zF#ltI8>8@f>#;xHcL`AaJu3YHBa>>1zj%pq@{|3n^NOFq^T0Ixo2EbQfjt@Pi{Lc+ zH|KQ>i+1^4AXvW3v+n@xYY+Y_8Mw@6-@`u~;k?n|e~x+7rCFZ;D7wqCioawMgI|*R z7SzJN8NCq8=HC-|HsAM)*K|Mhoxa)Q{}%JnlkE2vDLevu+?V3#>ZcF#uf4yL`+n8) zjp$DUF>3mYl-CgY3vAl>u1e`MgDYW*g%}Q~d9QDs^4|)w-c&6(^Q;@3+Lw$DbJWJB}a+@Au?? zMhs7bw14Gk(0@mNqJc!-)6k#h?**iiBl4WV-=wksgjv|>+}`vTV?X|*roh>MNdhkZ zVd+Nde;%VG$onL>^u&K%#oN%{0&fH3JsrI7M;^z%_ZZ_(I`ut!+>^Hv17`yF=`-Lb z^asXa&+BTs=i&QCQ@>YoaoQ#NE?)_JV}Iy)3-tYg_x<^$@bTU5eQ)qR^cPcu`Gwl& zTX!P=fg0}jte=AQH1@kfwfsXhSWmHkkV0DYb4Ld2UG7gg{~*e}z7M&4L%sLk_a!r)6?^+n%Neh-_}(ks+m>e! z{rQ0LzREzx_w>8H^-`Cij9=Vuj{;xh3GYQjgV@7C>@TT%fRz9;H3uCB1t1;)iJuXAe+p4?sp(eD)j$<+I z{A5FIHt;{I6%_|o22ktfJ%=icw0jDJft_+JxOph4;%mc;nO{8HS8 z)b~jlf4}qTdItZ7JtrFHR~6eZ{u$>XY~@&2+LyHop_lsB0pDkgUsnb*|K{&E9Z>jh z9T?w?_49e`DciUoaU4Zo{nOhIiilu6GLP>KDShAJ*lPmc^Vj-+g?{}vdHNgL1N&e+ zb?haI^bRgxIrGKsiTKwu9{$fc`1gz6df=r@`VaSSL?2S0X87$Byw8-R=^@?m=bX<) zs6VMNf$`bcuf204<5M_=5X3*e&-k(Nd@c9>&u#UPhwm*p_4#WA{v?j?WhlRQI@5o6 zpC%4^X^-Oz@W1RorIQwU-iGyML;eAz4}a>_=LW{NtM7R44~=GiFri1372{VzzYTwz z_%?r6MEN~LdmS{+@2b(BM>s#jP1xlX4n)7~|I#dWI(Iz$4tnGNcKTyd*$DT3Z2|s1 zb$vs3{F^3@L4(*^*_qgbq3@Sz$Nz`1JAjJq+Yh@wO>a}0P~|1O7E@HBRCx)j1@8Rs zo4<>-BzZLDt&o%?Bq0rT7-j}$-ko9Q&J5hSH@KvRDqRa*BvOMFD^{#%vC>LfY^kD> zhE`f>N|h>&m|}~DR;*~SCDq^Wx4-+GGXvb$yVn2znX}J6`|PvNKIiPS&pwBq$oSWv z_>!FeWc;K*pS&BA@{;=@Uq64jEc-|9k9R1qzbpHr_YcT;E~fvW)c^MH_$OoIQUSEQ z{>D#8eUb6?ve|ZgoP0%&KWPti%Cye^V?Qm&(@)9Yr(ycnj7xo#_G~xPzxS(hJ^UBH z5cF@a{;;Gc?N4b^+VTl0|A)x2UwSR zwtfGSl+Vxn)}a0j$ohIC&%b_;76kt^y~E!x%S(HpLw@V>zxaElefa%yzsB}{=_h6X z|D7c}zO+5jBiq*^+t)_?l+>q_$ob;OzaaH1^8J-x_?P8;EA`per#Hi_+?J2UUjJ^X z4|2UYC%xYx2f~@0--cvb&u{7SABoe&&%<%BI93|NIxd+$^E~*#PTBrmyS&ww#=AP{RZ~eH?>NAiah_^ z{UK?uf8h&3fA^pKty2HLDC2HO|GVV;@Be9i7?AC0`4ci8jN|JYe!Y}`=^KLaen0;^ z<@yu(-b$w&4~u^-EU#gi9*mryE@k9xdlal)Mk4t|$`TOTbrF`X&Ms1V+pO%6<(&rJ( zPrj4=`7_@hyO;EI{l8tVXP5H6#IVG-^d-G<`Tj*O@pt}p*?wu?w3FU%|HmYM(ut}0 z(dEBYwtq}M0$=zIZu*V1zlNm!)ne(j#D2fj|Eoy-|J5m}58oo+Ds`MownBOR#aStjFLcC?~i(j0S?U(QO$YEpg|G6dk!9U$! zzbgA{SK8yg{`G&CoX_NZ*~9jKl;dSgzW+8PadrFuh;Gl1Eyk8)TF?KnVli2rFPBS| zS}d7NWmD7n z&eyYrY9d)5@DZb-AD#`ZHwMp@k`-C`^C>mW{PdE{%~T~1`9d;3mk+Yv9JcUTEvuUq z=C=RMb6ddHr!qc+$#fxAEN3%5a_?L6Qn6T?`(&8kBHj7(bMNL; zbG7`(Y*JS8I@qezLNb*pWGk-+lJn(EN{UxQvQx*ohw)JbMouigQQ=Vn@&};Z{o>JHeJeC{s_p< z`G9mK?Y3WH>+jiYO>ZKO@jX6Le%d|DPySxGkpzOUrnUbE1dO4g;~)zt=t=!)~B=3gV0 z?T5>l#Tf{SEi+JX(F(NzDNpI&%+@V>X1ZVjzI-zS^Dd^&$kuDILPlfy+4F?~%d*TF zkQll`Np4_9zW?o`5JQ8BFmvHLNH-R5D^y&rCD7-upL~;F33Xw0vaY{mB}XoX(_O2IVf1dFPO>Bq~;5? zWH4K5LAqFu&B$4%s#QYk@JvugtKXvwy2DH=X8LW})%(K7Qh(i7(V(C*`GsQ1igPw? zNPUtOW%W#~=`b1jDa|kmmvcoqRmmnL2YOAAQq}6Lzh&bG?6)nwkgZg$_Gsy9Sy|@f zcX(>hIWzgWl$Dh21U<;LVkQguxopg8qx&gI>VY$zuT_(JoZF>BQ`AtINX`^(1^m<_ zDqYE!Yo&^1vyz(2l!_L)n$6nw&1GdPDsG!36Pct1RBOq1a)qnA&Cblb!zeRgo33YY z`%#^rc0Y>q1@}Wr)BUKV#8pDjd+t5zv}(5<%VIXRp8#O*?=doy3svxrTm zOLH^%*?CDL5?IKmv$7&hL{iJl+aWG{)6TlS-sPpFV)K#w*jqVjEoLoSuqvXb89&4CdKZm_WVP9p9mjf@m8Gua=VnT=nbLfvUX(gf zoUdmqtn_WZY%87qpl7^nDwthP7wzPj4DvNizKYpeN-k?s?Ah9YTR7YQMswUyH>=V* zkkh*y5qb@9XZ*bEjJ$;SJjgPY?5te9qzXy_Ng6J0Q(zb=Kc`KLnNp?bu2Mn7a-~!& zrAv}TDjgvFitg+wQ4mCpAUa7Am)eoxyj^)s`nbeP4NnXu@jg;kXLl`jYB%oHLSnUUHbnG>#Uwi>1} zTMsu`T2B4J0@jT3SQ?uEDaHdU`^N~H7pOXuGK08+nBbAG#g?zZL z^O60VUq}S;3dKS(TyHTRZh};~N~!ubEVbg-%Gq%D6boUQ$eo4XjAAj|Sjj;cUJeVm z7^#o)JIsu5Q-qXp*&UBNN)cZ)H+1bVlRIJXuPbX{XNZx9ZOhjsPF|t?Y!ksu* z4WrM=vFEpIZaxez&4$HLDuxB5=a5t(l0OZQi$zn&%$xXhxMMVqgvce>ugXGR4>ZSl zJZK?=?MhoQT(DFRf7c>$-iL=sEf?0*T3#;K*?Kh_W~^2WYhA4}pN*XLYH~&L zHKtY%w|^lWo?zs6Sc4aekw~Sm#xJ}Jv-3W34tg(FE5CyGk<;V*YV^eXzPj)(%*gw2 zkq`3=aXX%)=P4;zxt9BDmo{3ZVe1+J?vkoa=~Pwj5lfXMS5(PHx=^Z07ld65x!MbJ zy0FZZHcz%LSLakkZlG)VqO@w{TC8)l>E`Cjsj(uh=9y$l&YIGamE>xvSsDe}{*+mI zsg-1bG*P7?!IW)EW01>QQ#`qC(Nv{{(lkR#F<)YqPt=7; zJ1Z>>D9MI2hgn_YoT}W-%Z(iKTzz*dX$*TVCB5yJhH=xHHB_%3ja%fJC;t%h`kNNC zt7~IgI@O`mK6pXXjG2 z`ASd=f(**C3#4U9%aLk*3R*4X#ynND2D!GQU5K@6<%m$-e7UQdOUW_ej=neX;AUFe z>UxhTZTG6)Kn%E}#Pvw{2K{^?ypzr^Wz%o9YsPj*Fy*#T z_UH8cjGJW%>z$m=((;`vxu2R!bJ<2qZN?RwE#^u^YEva^o#F5E(z7Z>plu?#?Xv{k zN^N&)(sBW*<>mO4jLi63O9@X0E4S_kjk#bOBVsaAb#tpZ>0^EC>yAdyJ|?|ymXg;!X$xr|qg37?Oct~% z!67UwsL3sG!D{@BT=lg_P>vg^1$K87)MH8CZrj|2e_Hy3-$u?oky(qvj}|dA%?oHA}kc!$~PcUu1f7!eQxZ2sxESU1I)H`sA#oO{KWICTS7N z$xOOhbRDh)wBJT{m-V=5Ci-nPJ`ZwP&CW^hoMhhz4QM5mGeeMR%~m+|Wc_Z-tU@$Y z7`+lm8tG!H?6*wL8LqonGwQNu$DW>MBnQ$8v!3g;bdu9T^RtuE1vM>K(wa2Uv=+?H zXXUn(+gscH`n*7@ndMun8`qR%zFKV#>(tLFzV$US8d8+{+z_R)Af@IMWKVrnA3(_|$|k(O!*$JB zr`xNb%4uot~E%t@^) z)={k0L6QlwDEq5n+V}Ja5&R`I2#~H5t^Q>>vUF9xC(N#penzTR%E#vA$wyHdrB&@g zcl}kI(j-l}sj=lE4`TVd`ccGNrQ?&mu6V` z?L;Iu5XFp~W~^N7ROC`{`45tKBiUB4|C~qNgBvORV|d{*=cYZ3Lj#GW#8}^gW$-6 z40)cZJ?_zVKS8#0pUy40Ae|d@(U<0H+B6I2xT~G3ZW7TRKlz7!4W}B}T#IFOLQa*M zY-51LurrTb0dv{9mX9_Vzb2*Ne^<)|dH6QtZcOyiq1_%z8EuK<+rj! zBlG;U-1taufwqbCv>kJGM%Hc@`#FD=cdfwKY|&bL(!xp=?3W}gXAAp@rI}31x?<*P za<`}LLziUO(6QXu$=V&)kvT4^wHVwLP&57{s(&V?hoH=rhKbxxRbvJBTwfM(&loLT zEik*gDr8f7c<`W;3vOhNo^m-vx4a z&^hqk1Z6;&9cKKN)#(kJJk!bB6;LOF9NP)L@yC9kkjAY?se)gl>#>gcwo0ijte{`xDsl>AR*<5Yf9?V1nstfY` zJwHvOj93~dgExXeNm`#!+Tf$=%(Sf0&Q?`<(4XudNN8cZ-+gi$OysxIG7_L9eM$XI zfmQ8^_ls$=)oHm*)#`FU>AB9W%7+D4nW7F}l3qpKYVBSw%A+vZ&+;fb>{=r&OQ&3V zuW8w0K4Hz0b`F%@2kX*VNuPZ;uNq5FS7hLj&xu^C<*3(gypPf#Zw}R>d>X1_9W?4p zp(Ga|sl9TtkRIvql##SrVuf0IKOo)GG@Y$HbSTG6DlJ!4t3$y$BjJ7p8eeY5lGXRq zK|$B%s=9|{7|C3w8iZ;LI?|$hBv_c;7>VUVno@Itx?0`x=~C%!azP46vMS?kf`VwC zr=v1-xQUf2hq~@!Y09}qm~Nv6WTeF=!_)j^s$4F(4u4sp)p~#1pgC{}xxRdv4BA_| zv|ItCYgEQk=yk&dls_cP(iXJFkS?B*GkdL+s-~0ERm)i9CQQ0H=jLQ+q&=B;Cs0kq zWx-WSIY0(xVp7j+SsUA@^;2R6zS81_83O4cfM{tja-zcG@4^AI=NiwnNu3`(xS_0 zn_8FCIZ~E>h@p=x19WP6sgG94?9lkcTBcL-97ocT($kB$j$jKi?M9)H1&P>{Oti;D zlZf0LM`OB+iXNfSP`?wO36m~|57M-Y&WTp9q`$FaNC9KHa?*d|w?sPCePPH6Wv(dW znA|ZfxtyPyt;nFp0D#GS)<|5^8aynbkFCrmZ!m6(^d2-X&N7 zrJw~H>=?QCYc4EJ%AMz3(PU)+gq@blCGGQZ2WnbFb8@|uDl1)E(jwrIhYZb>Ij)dg zSC5REv%M(2J~PsN;-3!50A{^Ol{3m*HB!Z!*4CVbCu?$tdNN^KT}t-L)jpGzs{1-z zk|=Sa49ISIA(W!K5t%^dvaXt11%-p24?&Ok}>`Q)GGr`Z#!r!0S z@98&v+9H&@)r>x6h}#H0cWAm0Y0SCZBKHjz#Rl<3V@QBBVx;5VMtn8Rsp#m4=CFZh z!gRP&Q@nag$0kJsHxMQo@?`IQ zNEK5u`n9nvQW+g&!*XtD9urMtE4BF_^v!4#nuU7%8P3r9?0S7Ub*F3`B}rE0xl6FJ zsyqn_CS*`-!$df%aipY6$c>cbw;L(RgmlgLG~K947p@~E!xJ4Pz4 z+-J?|kS4bloeFaxQ}1-tDD&jBSI+higw9!dminHd1nLiwj}vUpnV> z#I0L(QGSFI`J#Dx%bRAoRK8-A(CP)3(iHcaodb)`Ll2ftMhXeZC?4j z%do((=w%|@P4XVsY?xaf0QtqjF_4WlqUHu&x*WMtk^GiXk*+3&tJ9H^E-b7rwQ4%t z3^!iVB_OZbgxkIlEq|2sUO7s_vf zVw2xt*~mnAa&p5g-O}%ikwZf!!p)S4u%zG5MWWSHb4fRh)1^_@fvWE3$3mnV?_+T~ zJaJ0LOb|<2uiSaz4T^Z^w<6lL6MC7Ay%aw}Acy~`BCHA?fLKOQD4lLLuFu%LB(+7M)ywi_kD z-m~LX3MPzQnv0ypgJHvNQJvIhvT~>8i`k7NX13hnF1!n7Nri4Ka-QG%MWqF)&pU$n z@1Tw-sMdLrVG;2`p^(3vk-2& zMwwx3dbp5;L{705havcpI1IrLL;S$~FhpK=j%Ln}n~y|b@OpEIT&-pJQ{%#nj*mng zi1W%zLs(PJ{hhGNj(d_cw$zCF=+4N8&J8KN9k!VEv%~FwVzPC9Dmu zcSKt%cBAIY&PLwrUhn}nXg(UC=cX@>IWB8kg_m!A66bW}XVSYmTg8WZu48+}4 zBNF0{x=27njI!L6Fi)>V{->O^_-PNAqzkU%-dxjOYRiiZ^pk#T>7TAoTi12IC>J<= z=Ifp~T9{>2PQ1;*k~*=pcS`ynsxEpMuKOZ7r?fDjLoT%JH3xI0ymYYWFX;=EF<#n- zAIYFb9guJzU0cqxa#E*j+6n~Z=h6*Jeay}F440?Mwv0Va(oxUSMd?OAT2or;x9dTcV@WOwt_wA0SJ-6!U2!HR|M^}?7b-&{ z>@832+LRHvR6$akFUO|`4TI(o(`~SIbcB<= zi*GelF5fc1hle+k!aM7Lv{dZlAodI+oYdhGO+h-=KuUX>(fc~-_gO*Sba11e>0eEk zJv45R&T}(-56&~o_`wBFQ}YF=%3hQg>ZPRJ^-VGo3H2AA z#!wsUWO;Vy+k*5vxbaUCk5h1Sh{lm80khU&ZE@!G$xbzwpRuPf7SxcCbqC1k|_N76%Oa&zgGMkZCX^LSUWEgUO z=7VH2nb&-2iWVfV%q49@8$xV3c@i$$rOO488iT^r!^bq1JGqF;SYRE_DR&t1HcGfL zJj}6Jt_WvK1$kbqLoWOnaJj}s0=4P{3F!I#b^UcP?RHu6ojr`RM0tuG?)-*ODV<qEX!4M-ajaiDZq1eqIZajdYzZ_Chwp$7EdDvs+`sccfm+a17hPrq9Xv z_4yCc=(HXD+Knl_9|alFP)zsrxf4XgoJ3?sYGKw@U|rFsqxj!t8Bw9b-DL~x>e)03p*H z)ObJe#@5<2EXKmD1B6SEANHi@T)7F>@|Mw03ytHO+$){#QkT*zkGnYi>`8o%y?SXOnPo#QTlK|=Q6Z9$sKmd{|ZASAe21|e>9Wk82tLRT~6rzL)L zT7S#4A|KW5A^*0dwl!pp8Ydb=5|JQ{p&8L0&2mb<@L(4f8J{etLY=31lLxeseQ24~ zU>#Z&?plK1_+6dJr)J}lDS8h$Amk{Rmr<&2$env3NWRf2>&eTiz9)4uZ9QJQ)0N=y$KH!xrK8lNTe zC#3!XH-ubs{mg9nB$kaZe`dCwwfbMbIA2e9{r#Vu{rc0hzfR(>o7Np{(hK3w#ea4q zf`po~=fgjdZACRPk!X0d;G*HpB@n3#F5{8)Yh?&B z7G05_VHt~TNi;lK0zLz74Nd!|IS0)ZCdff_hEK6M2hs3o4w~xqvl$6i6fGm4pxZf- ztT)Vfu5jEE&yp)!k@)+zYCp{gdBX3&E>mH>_{-a#}b=0Ob z*7U#)XX<^d4PEoIBIiy`P)bS{sOp;pyc;T~MQNqmcdeS|ROHS}UXgpUMEJ^sK5Plr zsa-45oBa8gtpO|pdF>6`(nOFxi&he%HNAME;TIni}S z3gI7St+u_ka5PiThDKv?f_?w_my=T6?2^$?a(3G)U#Ds=H@^+$gvxUi55o$85B9&Zt_e{KjWISniS53=nxZPS= z_>A1RNmEkVHkyQW;S5-*>m7nM_vAed3l8S{dneZhvR1sU-tC&87-d&6R?$9$7`f?k z_iolU$@zym+|UIJanq)sw$uDs?(7{Mn~=L_$#G3y^^`VlPRE|+Vzrd~lDFIBrdtAK z?4q`lX|mdlLy(S}(oua4$*0r#ntnA>9}wsUMW=&`s10G7WAaP7rZl4blGmj9#VBzN z9Qe$Ji|NnL`h%!`OtQu3i(3mqf5-bi527dfKM&)-d7TJSe?9Q!H^CBbKKtyoE#iBI zT&>h8nx-zmbrxy&ked!Vh@!K#*N18CO0XOJptoAKZF)X017-EAR$-rkJn) zN2Y2~*etrU{Log{sb_Pn^7v7#k#Om;40~B+=Sz#8*HVAbJ|xM+56L@JZY{wR8X4J} zl+WoA>MN;#TP=7)#okfUP)EzT!{kh1H)>KrCJKJB8xva`Q zHz}21dS1VysbAN#yCE5{Y@d9UeirL5ks78C8ss^Ier+~mwa2C-cL$LOskB51nJu33MEZw%SWY{ZUy+eJre2btr3xv9$e z^;iXRwIzChTCm&;%gIB|So)0|P0xn9SQElVb6YO-8CP%$@x5zyIkYr#?^9{%xp9RN zIXhUX`b-e+u6EW{6{N^3w49U}8T7(jNiH&C!XFPj+S1JGPAa%h9J9)%lb+9z+wySx zo|cl!rH=5OqmgFY99_SBBcU{xkq_}S=cH*Xw3C+Yll5!D;k&UE-?Jx3{i>jQ+fly_ zs~hM0i=|#!<5Ma{ux~2U@-Di>$ot!Jo2dt)Yns{T72Njg7enkRo}6pt=ZtNcMVE5X z1+vyqwGh|U^3u8^bK~{6J9RW<&bl?Uo$AjgaqH6D7JrGgN9S1w2}ThFHD0g`UA?lPO?VjSwV7EqyUVx~PAQ_;g{nR(t5_P9yI9v6oV}tnsx9 zHrsX8a9xoM+GsD`UAEuC{o~J8*4u57wA)`#cfQxVX#u;wxo0q88!1|#((!Jyn=@uSAL`u;cWSPD1LN={1hxufLSV3*8uN0fHd`Ev6|UP8ixN5XP&vn%ycy=#*;%=Pcy z+LL5SN*bY&Qdne3V7}5}B-C z6Dl&=Ok0>f)E=Tn(k;91>(~a^(=Pq2U?jR6hLK4-2}P#eGjs{iCXJMa+Z??uYkuk- z+0wjx>del1?j>bAn`xL;H7@DYxFFa{CWu*CkP%yYE(}6+?ToT^t$$ro26d%%z(=-N zu1VX6?=$Hfjjq$~dj$64z3y?DBX1JBE{o4z>yFhRK8X-?>ym(Mv1`T#neaWtRp|hh z#(q8SQ_#*RDFAuDGMT8m&SK4;gi0;98PV{HbY@r*K}?Ai1o|}PGs;h61%W=6Ea`G1 zU!!Mp8gm)RkCnfcifxdb1myL@oa9BTj_e%Qe6~ZlE=N{Vo8G#ueW;ySq`lB@-BETs zU~AXQxGc-*hbpOaY-R53;2ON)8AsnKlxj>vI2vv(+Gqgj$^|D@kpT@h(omc8mb#y5 zP5xLzOU#c_(hmqUHCN(xz;lsv&rWss%i|=y=u1zgyn7~}J)&qOSjzKBa8NO&eDo{$ zu3C}Ca|twrMV59w`kDdv%@SATXXFXGK(2Q6T#1MHzCDsuVsX^|##S*)uuIt6N;->wu^rJ$XpuavBM$&J0LA z4Y0?muD{2A(#vDN>E?0a^zGP$@7!^l;d%hHw51QvZVD|s%+y!ZghJ5i-zUiYY zb+fcL%-y6mMzzaZb7bpClunTs(s_Q4U+CEsb@j5?v-A8h=Wcvm_I%hoYqKqX8)l(3Enl<4NW-NPx+nVn^NU(e8lP!9iADol$DM{)rPe=d z!XkcG*a^$+3tNHog%?v_llN}*p3x%9SG}Z+e2*YNOuS>yFTnSOGU=b}BmCv<=3 zN56X`rR`2b7InbRDz2Vd6?WTZIo0zGbF7thxVB74rxq~nN3R;r@zlm;6GyD zU>I*0bts=Woc^v%rt($!Ztc@KW2stmAZ?AO-3Jn)nX%4SS0esSL_Th;*Q0PyqihtN zN%CzSd4!^mVX_+8a=?Peet#S}DiymctipbGzH66KRRr zFwmw`j2kQC8cwpStRqNo+33`AFS*&#pP^${%gRcXd0YeRRHkDKB$X#S(%Os9hd$Z0 z5?9`oX{-qTFpkM9omT3u_#_9?OJNs4c}C{$u5GrwM`ocupB9U=&Xag9T%+2u^1er~ zY#2Z!c^KiUhW5h7WJ(%Z)&*q+C$pqAYYW+$r=_{*&nc`{JJI60RNiMe5)v%w5^`(O z1#N~qR^9qFd0Qo=-?+PcV6a=8y6%F9t3KQfD0MrSl}Q$Z%*Sk1(i!8%f`3=j^ml7+ z?Cl~u8}dxZS7|qc4wd{z`+`JRMsBYA$cBEDsCkZ^HiL5UX-T`Bh?SZ)NBs?fRl>#~ z*Jq*M{+9C$G3Sm+bHax!?F5=G* z8Y}pAm`g1>i!Ohkrk};2fR~n}^D)R@xY#FF$3kHipWA>SNp~J&`>fRL`EDf`XU(Jz zzLz1(QmON6D<>qq$#COE^_5@ilK39`n&db`iRJ!9k0v{(>TlPI)?e=NxBd!lhy2&h zG%&m|@{hl5aXyk}F~VD<;PJPH`^VoF-#`A=iQw_KPPoV4?j;Sm(A(d$VsNnR<>nCk z>lHpwt3mX4QzBNTktnW^qXF7gWFNeduQzAi16cR190r08)U65G5JtC<3*!MKoiGhy z#FNo~a$#~^8Ga{Qm{w0|uE>3@`^uT_;%HHt7VJ5vyy=LP`!pYZ~N@RSHyxb`l z`sP4;gwYh3h{V*7LAxBg6Knq)8%p6mo?_oiu~$K@LNd=@ymnVKJ?rRq)?8K77qZl!RER`_dt4?Xi zD1!9c;%r3@MHg3VmJgFZB;m8jR{9NU4!8TOAka3_6+uNh)Ei$9iN4u1V(JZ?Mf!1LLYzu#e@!CbwMkS+px*4+|Kr60s4+;&yCO9*wFAX~2^(ewH+ z(N{wa(AR71)>+HP2fVQuIz<|KBO*^_^~=JsNO1F)p-Cd;{+`IJoCT};J*I?oYJU9a zSI|5+E`6KfT-R?M_Auz$X5^)yIeVV&r!p1GhFxYE927nf)=1NG7};3u=(dJ|1vffT zW0r%V1a4H0hG`R9HaEI#t)|1-u}Ooaz`M4SWdq{=kLazh7P=tPdNeF+bX(5 zt)~5>4M~SN^=(;=7=~(furrwkyM6jhP;^!t~$!$PGEDLFjqUF{UM}wk~+~oCASNYJ}Apr|NSRseqzbSqoXO=#&u>Gu*6Yl z<;4X@cZ}bTNYK-L6`AR(Wh5Xhvq+%!+3IH(BL{)|OCkC{|ah2FD-54P{XF)no zts$b{4NvOV>}mE^V+-Za^aHf=CXM})dk%je?%rgK#E^5RomyPX={L1f-2IgPSR0^c zDY(Luy5+m=8bVW~=VH0joht>4R+hg37$#+x3bLg&*qsJI&GyD%by*50Zw5bRtz`{JDIiUH)Jb zF)jFgO7^A?am&unJzd)V{#YT1Xy2D_T*?p9_Mw)#5A+v()@-HN5V0Y|Wuqa8zbD|{ z2Xe2GXXLLlNyXQ*fV7L4(np1I^Awr-^6Ti-fEz6;wcv-|SHDMI(~o^v=pU$+KFog@ z;OG2@g%2_7w-}JWAMIvnFNRJr@56%5(6E?>1QW8aWz=g%_i!d%o_FtzR^RI%4zfIt zxmO4ibe58GS9p3{K}(|_b#SnLh?3Hkq>rR zWtWY#p{wqMtZx^7w|s`I8qIm1Y;UkleKA>dK)w#4B@@#p^r^~#e0o{3;<_qa!>_7! zS$b*pn`Sy*yT32i6x1h+OH%!x)k@Q|mHy9cLQVv-)db6alV7i;{M}q#tNW#4vi;=5 zEn#zQ2~CnzB)u?Yw}j4hzbxf9P5J7Ryfy{(54>*9y=>2GzxsyUhZAg9unoZ+&8SYe zyh;wk3Aap`yI>B>umx_JaC0P@+g{xwnQ(JhCM*dTP4|=*oc!m`SCp}vs}-7kyDFkJf8F; z$oFtH#KwdBny7e@$w=|JAPvjbT(uU=l(U2XEzJ!7Q+f&fPwVvZ6SDYMGjdNN4{Rerzf=DF zUp1eaiv$h3F3CuCrDybMfkaLi?pdj8YPgbedG!M+{fWhWYdR=n{X;UDXo=ZU(k_xe z$1NGP)gykcox_ z>Muloc7=)LOR=8~C*P%HMXuA&u3Z=V#B9slOY;*}C@;_bRNAua)7ko_of~;28TZ)@ z1H%H;J?A3oK`-5U&u!hav$VM(u|Kh}ji=r%7+e~WG0v?A8UMhrhL5d<(cv^$CqdJNjFDx0fg)P)XafT z&6Kw_Urx5~Q-vUd6<%I);8Qc@?ZB6p?0fx*nery@%S#S?YNou$`s|YW((FsS(_W~3 zVV~%{mv*MkdudNuqSoiOFPom_lf0R+Kslp@VI)qeV>^3(mvEQU)qJXz88)wo%hlX z)OnHp_w;iizV1K$zDO{~hC|5!fB77Y51XFXo>=+jx7>)@5Y%9fw)0aJ>8RAd6VWtp zA(B!>{vM+IIjms0=)7qAlkjvQU)GTqd<-R$P*sK&*gEB-_@AC1HX&pg+ngs0Hq8i^ zc;V|Q!5SMkTgOexSJ>?nVUZSFVt865T~1PkhpvsXp5?GqG$4{Rt( z9~i`n6eHhOdTth_7!V)uJN-p_PSBS{Kl`@Je}XTJPprJq|g*& zI`94xh-+iguI+!L1KX)ZFU5%Lv1g+s>R&%bSaV)T;_GBXyWu~X&v@iE=-E|hFP%@} z>y^aw^CMgNOoWC~cy|6L*Kcnaup^#XI=cPO&JGXuXJ?1&wz}xwr3y+U43!~p(SszM zA)%2HXbP8uK%TMt@@<$I?l>JkC^b$}kq;^8SUVp-oS~o2dv=C>F7Men&j!jnzt5zu zA24|)*u9_?&5Z7i<|H)iNdg-9{Nm4SqDFpZ12y=$&C~FvjkBnIGPbO->|C%7eQe%} zKKTny&&2L4G{la4MZzZ#e0RbJgr6l1iZJ}xgpZ`3FD}f;qYwE`qYsM?l5e^KMn7la zqX%C#bqUD#;M2dYT8fF)S|fhx^w$)I(Kjv_i!H%@DPvi7*FsN&+r^C@Di_Z_?O-K+gcNr&vxv@CeWF3hyxXZ?Jys!af|rF`U9OF5wz( z;T|608D8NX#@1Osc40U6U@!Jz91}Q*LpY2hIErI9juSYEQ<%XV7O;#ptm7gs;WDn^ zDz4!=Zs9iW;4bdrJ|5s99^o;b;3=NrIbPr;Ug0&~;4R+aJwD(gw)_FN|5~vP+pz;X zu?xGg2Yay(B9L5nG#W5Vm37o_!%wP@+SjHOGaS@kr8CP%>*Ki#-a1*z18+ULQ_i!H% z@DPvi7*FsN&+r^C@Di`^8gK9x@9-WU@DXD_!~Vw>Y{fQg#}4eoF6_o0?8QEeV*&?p z2#0Y5M{x|taRMiC3Nx6)0+z9cbzHn+{PW;#Xa1|13bhdJjN3| z#WOs|3%tZDyv7^6#XG#m2YkfX2Kygduoc^|9XqfSyRaL3uonk$7)Nm&CozKstl=Uq z<0`J>CT`;{?&BdI<0+owC0^q#-s2;_`nR|)Vmo$XH}+y22XO>PaSX??j2(Z_t)~yy za0id@0`IWp-*(G&VGcL&01xp9FR*3PEuX*~Zr}+H{W~t+$RBd<;1OQn!@uk1Z*4ix z@CG~nJr}-)V}IC9FX0t-{`)Sx8+$R1gE)+%IF6H;!2;HB5tnfl*KrfKaToXT5RdT` z&+!tk@fPp#5npY)?QF$%?8I*D#W)V)FplClPGSZNSi?nJ##P+GW4yvg?D!8{e&aZX z1zf>xJi<$S!1h1l(&@ud%;6fY;|6Zx7H;DX?&2Qq;{hJx5gy|Sp5hsv;{{&g4c_A; zzWNW{cC}##c403L;s{P)26I@$C0xce+{7*1#RELV6FkRjyu*8p?NA@F9XqiH6F7)N zID(^C$3@)1UA(|o|B+j73$|h$6F7(&%wYl7aRWE;7*FsN@9_a2vFAT_`RT<8oWvDe z#RELV8@$DiKkCx!#9K(<#Wrlm z4(!A(?8YAK#XgK<0tayjM{pF!a2zLa5~nbOIV@lqYgorcT*4Jx!wuZR9X!AjyucfL zz?MJe%CiG|Fo7dDfpuKOC0xc8T*Wn9#|_-XE!@T(+{HcI#{)dXTfD;ue8kv)N`1i= zY{fQg#}4eoF6_o0?8QEeV*&?p2#0Y5M{x|taRMiC3Nx6)0+z9cbzHn+{PW;#XUU0Lp;J`Ji${u!wbB`E4;=Vyu~|wz(B9L5nG z#W5Vm37o_!%-|+&;WqBzF7Dwz9^fG!;W3_I>_1~Wu?1VP4coB;JFyG9u?KrGgE=f< z8EaU_MO?yVT)|ab!xKEkGd#x&yu>TK#v8oFJG{r$-;t&qw2#(?yj^hNb z;W}>MCT`(2?%*!&;XWSVA>QKyK4R==+3(nbt=NX`*nyqcg=MVa67JwN-rzlU{z4({R}?&AR-;t?L> z37+B^p5p~x;uT)w4c_7%KHww1`ZI37w_qE#V+VF(7j|O;2XPoja16(B5~nbS1*~Bm zmv9+ZaSbyLgTl zc!{t6OUe~nF^&lw#0=)Jfa|z{$9RILc#jYGh}}n&H}>Kc6JEu@&Q(z(LGl4hy)B8@P$bc!H;Rj}Q2W z-Tw{cj=eaJ6S#t_xQ_>Th}U?7x7dD6Ib$ad;|Pvo4ePjw+qi?fc#ao%iLZW+^2Sz- zV*&>;gE=hVI&R=59^(m~;ypfK&!2Pon7~O~!BsrKL%hLT?D%5 zC-{Ipr{ojIaRQfd1y^w&5AYDL@dj_P{V%%pbYLeA;|SKUj*GaBJ9v&4c!{t6l3Py; z#xa3|n86$ta2+@B7*FsXAMg>o|2wzd9_+<&oWMz3!BsrKL%hZtyv6o2$`Lzp7)P*% zbzH=4+`(Nu#|yl~mcQ)Q*NSmWU67H|VM@dQut9v`s#!lmDX<2ZrKxPtq5 zfY*3~?SGB(z+oK08rE?eckmo9@YVn5(rdvuCNP6JT*nPO#uL292kicz*nS+x30%e% zT*ZAnz#F{9_DjkEJ8>9Ca1?7;#~s|obG*P;f1Pr{I3_TIIV|7?ZsIYX;3?kY13qH+ zFH&AOjuSYE%eaE8xQ_>Th}U?7?f*07hr>96HLT+{?%*z-;{{>1HS6z9s6F7(&%wYl7aRWE;7*FsN@9_a2vHO~G#aB}S8yK> z@DQ)@25+(bhV92r9L5nG#TwRe5w~#%cku#S{x`Rt1P)>bb6CK2+`vsd#uGfndwjs2 z|J|*x7bkEMS8x>%@DOkC7CU~~r8j~#tm6*u;yGU6t6R5x3&t^l8O-52Zr~=K-~&El z&);TyaRMiC1y}I^5AgE5?62)5AYCg@D@An*?t_sQLN)4?%*z7;3dBLzbOZ7#W*H#5Hpy= z0VI8+|2hZ^W zFR|sprJKM(%wP@+xPd2liVygRJ^!yucLG;%6%X(RJN}-F--#nw!#XbFHtygqUf?CR z{C$^hE5$r*A zxP$w6h{t$>=Xi;?c#n@5`v$fb+p!b7uovSvh(kDvvc1@bo!E`N*oT8SjN>?o8O&h~7jYR^a2+>s8+ULY5AhVw@e;4_ z7Vq&9W3Sj=Y{yRQ!d{HyFplClPGANLSi?Fl<0`J>25#dn9^x^c;u&7zHQwSKKH{ri z$M#|yc49a7;UJFSI8I>!>$r?-xQRQsk4Jcl7kG_#_=qjv=Th(~ygCwPiyc#ao%iC1`yH+YW^_=qhn)K_f7PVB;N?87)Fa2Q8$6en;J zr!a>FEMpDpxQNTRf~$Cp57_q`-1a1J1vhZ*o80_O+{QgT#3MYxmTz{;4dDoG;1(WW zTdRw|jn}yM8(sKGoAVT}@dguLaPtRo2+LT<8@&4#7ys&8o!2Fef{3aLP@@>uz?ENiny8O>N>$r$(xQSgoE?y6A-~(=b$<2SntIyo@4aVNM=?T31 zvYURuwuGC`;o7L1-ozc;$0Iz&3%tfVe8iUTbLq8X7xrQThj9!iF^4r=!d2YBZQR2{ zJi&9k!dra6SKsgQ*@m6igK^x#13beU-1%KDon73+13biQyun*+A9KrhU?&da2##V6 z>$r&9xP!ZRju&`|uYSO-w*^}$riNc#J1_iud?{kJ$Z#EFF3s}Y))^QQnaRWDT3%79xcX1E*@c<9;2#@guPw@=T@dj`4 z4)5^+A2IgBuKZtN3$|h#wqpmb{-|4S4cBo4H*pKMaR+yC5BKo^5Ag_(@dQut4A1cb zFYyYm@dj`44)5^+A2BvT`CtpSVjH$&2X;hjC2cAP(U$j^HSc;{;CP6lO4o1uSC?>$r$ZxQr{fifg!z zo4AGBxP!a6hx>Sdhj@g?c!H;RhUa*Jmw1KOc!Rfihxhn^j~M%L_BXa*E4E=fc3>xV zVK??*FZN*^6F7)NIE*7WieosA6F7-en86$tu#7dV<03BMGOpk%uHiav;3jV2Htygq z?%_Tj;2|F2F`nQlp5ZxO;3Zz+HQwMI-s1y4Vr$-;xLZjD30McPT(X?VFq(pz%tgbj*Ga2 z%eaE8xQ6Svft$F6+qi?fxQF|AfQNX5$9RILc!uYAftPrN*LZ`sc!&4+fR7lPVt-=` zwqhH$V+VF(7j|P0_F^B#F@b|Pgu^(3qd11+IDwNmg&E9Y0n1p!IxgZ8F5?QW;u@~w z25#aOZsQK_;vVkfAs*o|p5Q5-;W=L5C0^k*-rz0X;XOX!BgRtfcWl8{Y{Pc!z)tMK zZtTHc?87)Fa1e)Z7)Njv$8a1ca1y65gE=f<8EaU_MO?yVT)|ab!*$%iP29q5+`(Pk z!+ku!Lp;J`Ji${u!*jgAOT5Bsyun+%!+U(dM~qFg|FH#Iu?^d?13R$`yRjGhFpdcv z#33BU5gf%a9LEWq#3{^R4hvYu8rE?Umv9+Za23~Z9XD_jw{RPGa2NM*9}n;lkMI~z z@D$JR953(^ukadg@D}gz9v|=#V`=s~wqPr^VLNtUCw5^s_FymeVH^`Uh(kDxBRGm< zIF1uIiBp)t92T&QHLT+zF5xn+;3}@+I&R=5Zs88@;vVkf0UqKJ9^(m~;u)Uf1zzG6 zUgHhk;vL@O13qFb!+ysWY{fQg#}4eoF6_o0?8QEeV*-b87)Njv$8Z8CaSAh-!vdDE zhIL%TC0xc8T*Wn9#|_-XE!@T(+{HcI#{)dXBRs|vJjF9S#|yl~E4;=Vyu~}b#|M1G zSeE^bE!c`}*p408iCx%@J=lwV7{>$-;t&qw2#(?yj^hMQ;uK~uhXpKS4ePjwOSp_H zxQc7IjvKg%TeyuoxQlzZj|X^&M|g}Uc#3Cuju&`|S9py#c#C&+`*otk~jvd&EUD%C1 z*o%D_#{>@I5Dw!Aj^Y@O;{;CP6lO4o1uSC?>$r$ZxQr{fifg!mo4AGBxP!a6hx>Sd zhj@g?c!H;RhUa*Jmw1KOc!Rfihxhn^j~L6b-?0T-u?^d?13R$`yRip*u@B>zz(E|s zVI09x9K&&(z)76KIxgZ8uHY)J;W{4U37+9OUf>npVr$-&TRV1O7j|P0_TeZ_;uPkv zfMwjq9o)lxJiuGL!v}oC*wOL=1lc40U6U>}a+Bu-%t3s}Y))^QWJaR+yC9}n;lkMIuf@eyMMjyp`?AP(aQ zj^Yw7<0`J!u?xF#0w*zpIV@lqYq*8m zxP!a6hx>SpCwPiyc#gMthxZsOQ|{P`9hksD9L5nG#VM@g5-#H^uHibK;3=Nt1zzGE zw!NeLu@k$n8+)-2CvXxon8N~Y;WqB#9`54}-r_wz;3M``Tz=y?h(kDxbzH<1T*V_i z##21Qb8M-)^|fLxt;W$p>6lQP(H*p(xa2K!e8gKCq@9_a2v8(3t+k?Fr#{>>y z8Ed$ROSp`ycz}m^j3;=CXLydWd6%zO*otk~jy*VpBRGoVIDwNmg&8d48m{9eZs9iW z;ssvfHQwMYK48~^+pccx#XgK<0tayjb6CJSF5(g{;|lKKJ|5x`9^(T(;;Z*Azb)8` zLpY3MIF317!Bt$x4cx>n+{QCJ$4k7zYka_ty31!Lc4H6rVjsqF3Nu*1GS;w;i@1VY zxP!a6j|X^&cX*GF82dnd#};hGHtfJYOyCd><0y{dI8I^?>$rlexQ-jRiCcJv=Xi-% zc#U`1@sa(5-PnV@IE5K3U>R#z$3@)1T|B@;Ji|M@$JkF$?%06|9K>N9!BL$0|2cUd z@VJWW?tkw7(`vQYYb-#q)#Ta;B0!`|P->;9VQnj*5)rR$K?JDH+Bk`ts?E~4dELZm zt}NLWwgihUh-2*fI&m5&xQ%F>)=5mW1_6f1tpFuagVW5tSC-ko+L-fadLt@O(r&%>xYI4P=fSB5m>z zd4!xGPm@#RS@Jw-_LStSBa>t!*-Unk-Q*^6GucNDlSj!sIYN$-v*ZObx`lc~R+A~R zg-ny}WGC5A4v>4uedHl>j2tI5IZ2)+XUUr0l3cZ9J=s7uk|{DnZXmPdMshQGm^?xr zBaf3K8c9DC?edHnXFnNT`lbW0)&yq9b zd2*Jl?=Q*UKsJ(1WHZ@9X334@X3`@2$N};gd7K;}Pm-ggy1yhxh>Vj7vYKoq+sJmZ zgX|a*8}lo+s6glH4X)M>dd2vXSf}yUC5@CUP@5OdchV zlX-H4oFZpQwUg~g#>oU(P1ch2WGmT5wv!!XC%J*N$Q(ID?jvpT5P5_=NluWOoFdPX z=gC>}0;vW{^-GeCWHXr}TgXl1X0ng$CkMzpIYN$-W8^q_nv4#Xl4r>o z@;rHgG#@O~!IZWosljJBlNuDP|d)aSff~+T-$X2qQ z>?Svp1LPiZn9P%7F@-Uev$4E_{B}4mIE?Gw= z$yTz1>>@Xk1LQvP2ziVgBQ-fgULdRYm&&gr8_5*eL3WXw$Ubr(d4xPpo+LFnL#n@E zKa+K2BiTZx$u4pe*-s9UN66#kC^3z4E@_etWDD6&ZXmN{Ke>lIOdcgi$!a*WjE6nT~m zeW@g0HCabCkV&$Y>>#_yEV+>!Aor0+$fM*ja*WjE3^_|)Agd3R4uL*!9%gd8Qu$SHD`jDCgkk=0}a*-W;P9b}fY z$Q-$c+(#ZIN62yVG^xp1GJ3cqPYr33b!0QyMs|`L$S%?%bEHikCXbLK?uNlX-HSoFJ#jSyBy`a+u7MC&^KAf}AAJlcB$-d}M;G zCF{u)*+RCG7fAKpQa&N_7)0Wb#Dmc_Z0GULe(z%%6;s3DP9%$p*5C zOpz^QmfT2MWRBcN9wv{HBjh-#$+P4v8GWiGZw*;TCdp>9jqD`5$c>~$=17}7OdcVR zkt5^`d7hjl)ksOM1X)AYl1Z|WY$4mpPBKGoBsY=$>|6#ELrzVDgS!1fz;$AIYsV!wiMqc50M=wOV2yW3|akL z>3I!VOP(YrNKH`j~pWRk%!4+WS$%$Pm{A`_4i8h zG?0zt1u{O$`jSbqiA<4cvXk6MZYKN4A<`y~k$LhYIYCa67s$}5l00#;maHdJWGk5_ zGh{c}M-Grf+LmTVxK$TZnOX2>kLnH(bbk%!2mWS*QL zH91AjlA(Vr$yH0%kqu-s*-B=}E;376>#t`Cek8v?d=iO&%df$Wd~f zoFr$+=!+$}5@ZcoPd1WmWINeOc9R>)O=OO=$zk#sd7K<4C&}~V1ya3KlCOqrAzR5D zX_JS^BV?W&A;-x{@+>(+hQ`@XWDQwQCdo#!m24wB$!>BZxrrPgbEHiUlgG&8BpIY17Pd&prjPmYnN$@66Bhb4KcNt0|MTgeVGLvA29lLO=sX_Ld`G4eP$PEL~N z$qS^KV1JSIWD}VpTgXnbo7_zHk^SU8(k6$=Jb98FB_~KtPLk)z&_A(1$pl$T){*sO z6WL0p$#ybBc9GrWW^#ZWBKMHPWS$%&C&<&}6nUNu{iq~=l#G)JvYM&Zs4jqD^d z?X6MMfQ^eH1(G>$vU!`Y$H3#4P+N-k$cF)L z*+izu7P6D!(^U3Nsf|};Vf&D^q)9fBtz-w8Avchl$pLa7d5Anr=E*TqlT+kbGNdUNSw}XINwSsf zAiKycxse>|5Ki|iwZ$V222a+n+; zPm&Yl6gfklC*y8OzFM+@Y$Th=G?^i@tA#>qOek!&H;WEZ)K>?d>N5NVS~$m8TFIZjTHljIDkUMb0!AZy54vYu=t zTgY}YLw1v!$bNDUX_JS@W8`silsrvNl2fEAP)^b$8^{*2o!mfnlUcH#+(RBFhsmSl zD0!MZOU{yssggV@V@}uBiRH&hk zf&WpVX76~fy8IrcE(kxWl)4lAvQi=8Un>F#op7b0>V+RSRDfsCMBk0o5UF3#d-vhJeZlKORsUgc}2@OZcgP>K1MesI2f{Ky4Hr3aCxO@1R|U z-wP;9SO};-VJN8jg>Mh40bzYm<%G+EYDoCOpxPtM1l2y_eL-al9|)>L!aYHCScrZ) zB78BZhK2teR7ZtBL%#`s5md*8OF}9yd~ZmN2$zS{N#V+n8Wp}jq{f7+Luy=z{+S8R1P~bzXQ+Sj`ImPgq?LekQEchrkEIDkS`R zSVe`8hgDqoov=y>3t?3)d^N0Ugs+EHt#Br+Okr(A)d}ApQT0OTUxN_(mlS3qs!{kv zL^TP&3q2KnKcZ4X9Z@YpH=JWaYLUjs%uR>*npRG_E zgwXRY;nyovxA40aDl2@YLTwbPsM;iqM%8BFlBlwTE2FAU*b-I!!VgDPNMG-V^Z|dK zeo#ke{@%}|mZ{(~54szlA8<1>$Nh`pj{7J|*J6DoT!ZT&zsj{#x3s01V$I8Md%fk7x@UgP+a9Q|pS=cTM?sVtl=3wM=;GiBk9vT(XA+*%e+m4%zi!pX95eOcHn3)hr|6J_COSy+{YXMb7N z{$=5*val`-Pn3nn%EBkh!uhiBv9j=RS@>{S*e(n2DGTSy!u@4ot1P^!ESxP1ca?=R zW#NvpaJnqqS{6=~g`3L4$+B>LS=cNK*OY}5W#MR9Se1om|Ff+9%feG-VOX$)1QO97)b}q|Rz7|#6-DqN)D|HMdZD(fr6I1hZm1o{6{y+Vi_%HpM__yzR>-=xs z_15{{^=tB9`)l(5(}&(V|4%&h*7>j7{nqjC*tBtgc0;Eg)VU`g z^81$@@N33ycS9))&pN&8{BA#BKB!gR^0C5L)NMS3=V`A(r5Cc~CbkKj7E>Nv|Kz?<#~+ z59<2$y}rGr*RReG`X=HWTG8tde-ZC4e?KYZ<(rp?=p3yQmOG@&dqh>uO^^WKiC#mY67&Q zN*#?TH9Aiz^Aa$jRNH)|PU780{GF{(YV5+?+z|en@vizm=jJ95&Mke&Z^zhGYK<36 zKB$p=QTGz*+cjQ7tyvhu?PH zle-J&Z?b%`Gp)-YdkC^Xwlw6QMA`EE&3|*KXD!l>y)EF$xE5VAOsg<{O`s@OAZZmO zO(!fKs;usR*A`dhZ6|JSaSiBOQeFRQVEKSH(ktEGgpBDS$h6f9<_Gjcrv}_)e!vYS zPy0r)*G;M?rm7yUJR`QuNZC&P6#>u4=L(Webo~m{If(ktfGc=eKJ4U4b;g z=oqkf%J8_wqZAG~slwzJz%wwN=kUx^S`==`5|l z`G^zGBOinli5^!eq(xZX1@qcD@{hIy-SSZX-O}FA&dn`S$ipz#pic)-rvd#)v!x$t z@6~pN?R-9;(O+5yuDn+piJnW(A$~Awp}n4%5}nAR?-Q9ZKasSMew|LF2V5gz=}6|q zLL!CoGkHIhc?q`W#X<<-D8o^N;|#|UuE>197$=w+^{W`JKzKgGRR{;u-$(slEX+@j z`my{=sOO7?Kt7N0Q3}Tpp2u(m;Yji&wDpUHdC9zgNpidxHj*d&N`@~%ILvS*!Un@( zgtO37so%`1>t8)`=K=r7M-TYtesa4j_S6`*9s6>Olbr3;B?o;Y@gVy7;X-|S(7*7T z7{5ueKdd>{EK{H9 zX~frhFd4C+dAe}Z1A}hVT(84R*Z5~KR*t^sfd7-NzScUmPesRSAVIi<&56S~g(d!or@#OOb1NOnF>MYi! z{UfLg@{+mfCx3j4`^!&k!@B`j>L>ahPi%v2S_!!WZoq`j*RAn`=81yXmJrJNIoczH z{DR1D2H_}V9ZgC&`u+(A4Th!tE zsKZ{!557@{lfP1jLoKB`$b4#ips!5+?U29kej-d-d!;bovo{qF`jU!HzW`{V9KWaE;$>{TSm* z?C!OCc3v9e&(wdMIOVroDeq4C0n2_W0DBiQw?7%M?Gv-_TZ=J&rTzrQ+o`#^A4MS- z=GvI(R4Bi~4XV?HVB*DsXSLPTG4rY=Mb(I)V09>JH5H>PNLnyi3WPy5A38 zx&`(c<5|5>2*Sn%^Ct>HRgx`C*TR``Uzy{66?8WS`#V2B?nl;b)qy2jb)|;Qz5#P& zZrq=}|8hTmVym9L{!)LQgL%&$_bVU5@AoW3f7k0^W*l?0?L|@lAb!u@SL??PZq-rb zDfwN3d@Hi`T4j6uz%csh)wdV(p8f3GiuuY|nSIY9#CeyVU3a-3%)S$I?jYu*cWT2L z_iNBj0m(y;`%#n|N4_$iL?)HlUX)4NQskX|y4Ig{-tN!-!4>}OXKVZj(pO}z)>Za6 z^!jSd*$vv%`~7IoRxL8B`~&{%b8qu!e`ldT>(}_z8RU~}(6c8N`SYN+ar~*|HvcxX zUoFZAq1>qYkaK8m?)e_*l@Y%Swoxzq9CYB{emQsMtB7acxJ;c5z`y*=GG+P8RM+!Y ztK*Z))Y0dzR_$QN$THQ2KPB{*socq{)me9$YId-1!<;8}yBm9uHndAK`Zk5WZ7~P^ zRfdW+qm7L=%Wb*}dzXymHp0fPc(BJ!hD&Ql8SC|T9PnqeJ?@2EkNf(&R=9KTTZy@3 zMNyABkdNqB26;!#9{0SBbprIg6Xm4wt`*PQZRk;I(BF_o`KkSW%kX}GD2;u>i6MW? z{$6q1gdj(JX`i0?;wfh=^`sNC>vYxdReHug;k4NM{R#6)XCn2y6S9};@bHy*e$v^6 zaga;OI9!YQS;az#7gGEE9P%1N+%fYhCxCo{#eDL}_oOpno+x{E(lHWku2QSLyD)CY z%x5tEZNz)lsmNpRuCbQ9@|4qzGGx%vKP3UqwYdiBYm}8&^5wvjtcB8}G@2~sMx!0P}XVUg*wCk9icclLU z>RO$``xM$-`X`t`Ug}9_%zhUAIs$*owXpBk=~?wO_6aJMLmuG-=1$UmVhw?$!}iglQbhYlHgrs%>N=q_|YJyX;J>F1f? zsiI!UScyO{L>EK{0!w@JhIDD}lz#XXJHlcFvlz4V9Jl>d49USIUFs1HalI{3d!-&54ZqD~;a=;8k^z32t{=q>f) zN%YN%U(t)lW$uGs#LM(T=97%M-+vkFj~v=o=F|n~w=w%^Ck(x5K_5sT&m4rESdKsY z8Q27jr=qSs<4iz*VkxYpFdvJq{MWl@opb*VT|=ItYm#44$Dk)A-Fn_hLpMtLl`p;% z9g=q!^+@zl^hoq+7P|O{kiT2}7np}bKY{(l-`OXYsnh?AF!p_7mx9ojFzgie|7VQk zPoX0gbnK1iF_j;~oZjhRts67cC-Kg{QT8gLhe~a^ES|J+Q24@Szw!=yJgewy=q&E( zWzQ~cluf~B0-r%?oq+Q47t8CE{Rmu3WBvg4sQ;20cebX%^!J?*)_~`w?Br&#+c&DB zoU%Sg`AIuyB!icVydn$smXHJSAfxR4Mb6V#FH;+^$te0WQD+0~E^8l2gF44#&o1Lq zq0h$V=3bLE6QVCtNsJe)dnDe!p&f%rBXPyYIR<|M*0N3%b5=sxp6JM+`_A2b9rEG*_M#}aA;tSw2 z$x~!8)Kil zAoFLC#*n>qN_1eY*s0$Z+xMr;Yom{V(@i?TKgt8}To6ZVx#ZPVezhUCwfzqCg-^~990s8i@4@s0dWu|L-?L>mVo z>q5w6)T0fq!@6)4-n~<)9d=%Pdk^Yh`gCCqV{j?n=Pc}nq;5&9%`EJPu&0P*Gdh@m zq3}EKKfnjE@VZo+TaCD@ur9w0`GoQlNZ;v&*A8gW(V$u=d%2kSF9KNi1oLt1qkG+f zy#4qcqxR!Q{+XkapX6Jf=Na@z1={YSuL5f%??2Gy{l~9X-T13AKIzSb(f-B0hHivQ z`g!NmVK0#Cb?=k(qr^9qPKjQRPC_r9mw5|)|B{i4 zJ*m(hrFH#UPxe4ls82kJwnKZ!*ff#@?(aa4f+n6N0??UJ=qu(u$Rqv%X(QPyNZYIA zsQ(P=KJcBZRTO)k8nmzUYjsNIP0@9Y-=+GS={4|mVXdE8@7CU7uWr86US7LY#^)Vg z6Xv;4o$`!Wy9d2r0DTV{roB-1LIKNm7Jd}-G}=JqsA#YatQ97nAy3)suSwg5 zD9R6}!}^QnRr=qN*2v;a06s?}{vj`feU{`WWr)87_I-(JgrD;sYbn-jzpc!NivEtd z6#N(Y9&Ox&z5nuDAy~E6TUu8KpTK}GV=;vG53AMA#l4Z#U&?>-!x8x3I=w9@`xl6} z{^U|UcXHHQUuQcFbxZZji1%$gmwnT*xw*Yh;`avF542;^HmDZ(0AWL9oQ0NeL3u-H z_cgFl_5uTSm9Zn^U3|8oY9-Gdh4q4@={>PU_bz}hEV<7&%+vm(Z`e2cAZ+9}UPoDV zKfqk@?W?gi&tV_1MN2=4uMYn1MZx@~(l-l5HniuJMm`QVWv5pq`jC2YGL%|^u~mw* zG4=W@0oV}4+l_czBwpx5uCS!KLBsYSua#~b`P3+NZ78#{=);L*)?+XAj2D8w#ojrH%NQ)8pok3QFa)kvOOg3%Z+H7Mo5oP(dWodru}>_Bga4?_M3##x0% z5{#8o&Vnu4t4vfumtuPCpsZ^xCv)(CUzP1~8nEVw*^qbG_L{JsG;+w-EXgdgH{=F! zj)MIU)&)^Z)+{C2MaDo9J`apvGr!g~t$W?yT4_7WU^}j8?Q^7V%i8SKmBV2jwL?0F zbXAZ)3H>X!^YDJZA%`{W@J=^s%bN8bZ$>@mKzCvh^AY`*r{E__enoE&3^-r;4I6zw z=+{Cw7p&Kw%4+!P0=gm*)Dufkzx9we3%iXx40X@Kh>3T}pbns(LDcaI*n;_Z2b&#> zDC9keyc1u+nj32@^OUpw(tgK8-YTInj)QtZKzmZA_z4v9nn4+3OaH5!i}{bO!yKL2 zhBCH0(cJy+Fvdg@V@l3^WKNnocC~84pXf(DbR*Y;v1y~vP2`LAF17R8;(Rk7X9VcK zU>9tP_-bcUSci-LSol+D_cVM!Vgr+7r8ZY<-Nt)u$IRdB8Y$ab(7nyM;ghy=L&jbm zv-j$d6~P|!F&)lTp#AsiN`zBrdz>XKnn2#lLVh@VtIJ>yu>6!G{zNm4JwT#fpP65> zf$$l5JxjLgo&^sVLgp@CVazUBXge||1b(B(39f{Xu;_33q?ZX`jkA2aUV5eN98L}S z7>`AJCcdaz8*}IJZG0_$%OMH7V=wBCf;%0^4dDv)- zn;^ziQMVB^tL)y-o!C45My~6U<}3l)zt8uQRWHixY3| zb&Q5B&b>A8o7bH1?rpT4C5>0=^);~X_`M$XeM#L?Jq5p$Wju`jPkSggT8Vrtwbi`@ zd5OO$jxxQjV1OKP~GN%36T5mm#eY-wL1XxL=L@FHM*7zZ~UA z{#PK*Lc|GQtPAR4pgwPw{mpgzCi0J<-DUkJew#Lo2aH+A$Y5QJ@gG1tWBrG^-tBFK zZPFm9$lUSY+D0XJ_-!&yu?Lkhq}<0)hR7gt zA4XW@ed$eQ{yBax!I+o*k*t3)m;cDbZ>%3;mxDO+#`Z1aCa`~~{n^}^;rCT}hkyG6 z@MEW)%kl1N#1UV3ANHXJ>M4H0AnIyk->zVnWX;t5rgvW`dnae*<>_{ny=#8cyPak4 z>fZFOuk78~Z(Xep;m^c+YaATHpGxA488)%nwBR?eU=u9tn@VTu3B0RTat3{`mbpmU zLYX-~p31>rxn84w*pFqj)Fp(talFGiTub`WS}b=}++1(se8R-Dt0X@oA!oIv{EPO{ zTI<3#I?^RpfsOc|=JWM`E7=vvC!F1`zsJ0=E`MIm&1Y^!y+uyQSCrGXokfr{ zj`{@B*jFcpit+|C>vRO;Hk`2^k7VqF5y&YritWW({zp-B$PcGK3Lp27A2GM+sM+Ti z*S6-+RR~`tdyZP(-HJ<#(p^$|U@9sAvjWhs;eIfGUPYcZ5%*^fsp`(PAh zh0|SnGwLGcNEuPoCHj9UCu*S_tIvP6tej#W!;gSIjVhG&XP2p>??CkYQN_lisN7E2peJUM%}mQc)HhLSJWFBf2I2khO{Nd zXj1e@4Z7=!W$yQ}S2`m)CGoN-H;}}+Jl55+7m>aQ$o>d26!-CxHZkb0mb??lJA=ML zxi3mzrqi&6Iw*b|m3SC!FE$Hn7rg&Hysu6^4Bx!Wk)?i#WN_YQZuP4(TmAP!mT=y7 z=BwjV^VOj#+}_4t-;~tz-FOGRI|HAP%Ech%@U3fSKD=sWF?|AcNx(N?4q@H(Wmm>@0PXiipQBEa$8%Dr z#Xp-C86;m_HB&4H`nDEl`zxKQ>~wtbPtF~@E>o;mv(zPzzBX+y{=DtXy=TA;{8q1v zHgkfB9w%g4PB_`)xNp=iwNl1%VCVJcI+o+!*>x+=wy(Q*{|tNFG<-+-t*)|gCZ8NC zs4R3Dvelpsqq2s^`C>KZ!;m#FIc$wO`%(T4kkx^lBDaJ3OMQdb(W=Eif8)2Q)NRtH z#kR2RAl9b_?A)UK&Tme~AiLNdv3HfZQ@+Hp>>Vqk_9_4V^RP>hL*B_fv5V)MGPlaT zu)xkI&WdeN*Zq9jM7w;>w!OKW?HyeF6NxbuMde36WQY5P~DolV<$85G_7 zspv~;qpQ+B{HdilnsHua9N6YF<@L3a(7({y;(7u7zxUEl|K!|PKK<-;E_TJV%#U-` zc`tu6^!~CF*dO+Kfy;W_vFi$jN8s~+C}`;1qKfH4)ofATZ?O!GaeXoU#dgK~i~SPz z=MnhxWL`?a&ZUd<(GKiUW0;P;xzEk_B4$X>&!#-sLGNko#Ukb|>}PSW%)fnASUwPOpD#xH$e!&&_>J z-GKXpkoz}KM};<*F>F_@o9;(_oT{Hriyf132xW>%{dWCpNiXhSoSEKHm6;AK9>H3B ze>vQty*}NyFm@{DvE_FNWUBe$>dp)}>%u)F6CZj~1fn6O|~>si33S$4Is(YM3J@(nnTO2dF)ej?12=60!U-72*b$DNi_ffo$ z;eFMc-q+*(C3qjl`+0aj|4r{3@IHZk4CY+;BgJ0XUai=z8+!a&tV^Zt7i}2YD)w!( zYn_Zutj#;;mFz|IsgQRg>~hf`mWH1VZ7Ay^*t~B`e&X8?T3G*>7?<#=VXghV%xC@g z$$BwY*s`ui!=H_L#`gM_TRNDNJ4jnFC*0wvs((6Hk?YZR)xFcn$L=}%uXZ2&0^78@ z?w`)7#V?;bSheDf=TYbt){*(+jtcBX7B&m{R;c^6?Eh5N z*g5#)za7N*l>1rnM2}X`%VHZ}mpvC)d>`ty#&OV=;_H@myR3QC;tABVWRHKQ`iuKr ztWRCp=dQrLH>^R5_k0#S(C;qzi~HRbU+;ClkNUTAEdFlQ%m?-2pH8n^TpF9O-!W;g zDD)weAN0TaFQv6WG`ZiG@vIh~JO?{qx zU+-(;#}8nSEawdiuJ3WBEu~&PH|*3~mTcF7>pqG4{mHp1^qbUA{OQWX9XKdr>&lVuVlEDG^LXcO!tvH{mduFGrk+;YeZ|~LpJ-vFx*WrJA zAI3M@bZ_mo+8DN--J7q}OOdbiT^#l7KpK3#=6poP0`}P%VaoPa>}z!g-YxY&p6Nk9 zk^5b@cxH^g3#KtYnA_Zn zp21!5jvjZ#&CpZSNAy%(_rf`;v*@W>Ja(=kxkDS6MgGJK%*+|uT)i1+e2@z(`zdg)wM2J0Nu5q<&h%doYo z>cw-Sd-md$(_i|)@@Ywfeb=``RX;eVl3R=Q>07cxOI%5>s(y&)wkPp}3DoVn7tbxN z?J12n)M3SM!VXlufOSE3`iqNG({ipV`HEa2$h6?kaV`V9iZAFKwYzxFy*7&bOK^hx z_xHWU_ZKQk@1sR~3!l6yJ?}=Ia%L*uCd#@V-#obDN5T2IBjX42;%l-V59$4rV%KE9 zKLfeCuucwSZD+$0`Q8BeVJ{U#KZSAb9x#Url9x(8e3^o87iY?1Q@-7dxB>G3WR`RB zH49-Mf(FjbZo-Ct@G*g2Fh(ocPkequ<5nCu?3g4-vbD`Ta&Cn{sb}ANOXY=@oyk z8lSv#fr~!vai4)*m43Gt^x*tV?zFAL*;v}a+T$Ud-S$@C48O|!NKuEym-FP!Pd*;7 z`o9r`{K52A{fPJ<61XRmi?~(EQar=npwR}n|8ZAwT?ZTU!t-B${sd%sO774;_4TKU zd4%lS+-R{q@5b5!HVX3Hv@;h_68??7wx)5QJDTH}%p>6MmZ+LGgiF(@DcVUjd)ZTGvFl8^mJh&)i%iQ1Y zT#Il;SZKRKamf05xJ#4Qg_7r#+&Om zHY56i`n^Tnp2NFh-I5pU){A@UcX~M6e%`=6I zTI>BI_A0+rklAc;FGW8}++57Sw+7e)BTeqor8;2u>VJ?l=y%Ce@(M67xpVpslzAQ6 z{T*n(^0qTGWo?&{w!71NM`qi9wOyvvcJKlHO4~j1?yL2!Sn~uiE~M>3=*K`3VXUo< z%!`wxfJN2xxE7WW;Pr;GK81WWZn{c<4zqBKfQG zMw65mR8^_554CQJPxvhOww>`N_t-%-{d$zCmMH~9K+ zuGx?I18cbSM~drBSzF4zXO+TTtmOWyf~gIrN?E>2_sF^dHUYL7bFYl=1?gK{*@vKg zVI!fFcou}6dFsPYov2E#(_#})pQq&Rk?1R)m&P6J-nGy@x$iHwtT^_vTU;4?6(~dE zihWvwIJnbY2xII?UBc<@__pFsk@=-b+)bAGALGcu_gY1pjQKt)>13=uCTWpZFj0CZ zc}iSaU&*?lcrV%3p2E3n;BmAU&R#oV?;^%$ykHLFK7%&TLT@bGy-M!)aS3gQ_!`He zILk0~A(&i>bsW~Xuzi&%PtK{8`V`i?1s7}5*OZyXyzRWbS?+hw_xPDdKz)Z6fwX=De>U983oECzG$gBJUO>J^qsj@9*&Z zqFo=WKjn0z?qkSjS7lu9KG~pmMSHY7m-BriF;G0?zgObm8T#3g_0z@lzlZ0!%An45 zZPyPqU8y7RDOO~Ap+jF5zx^3mXFdB}+i4rdcOiMC9j?&u{d#R#$ehA?Z@N;?E=Rs; z$ZtpVP=%pUhBx#6Q%)t?OTHI)?m^r6LY308Z`ya+5-sO$yKdX6ztFv1?}?ducBPzk z_h`BAS_#=&@Ls+HYfj*-EO^R!7;z)0OKnE(z8=(HsH)U*k7Ms6*XlOpIfL|ar*>Cm zM2FKm^uDfo-I&I2e52Np^NO*>rjtM==xf@gHqIg)bT3B|HvulX7tqz(#0~5;BN9)aE_qP zjP>ITl6@S_+^H+G&+3c!EpWH8*q5e-vwftgLmeuRPVNoJ*?AMr%q8vH+VDSB;SBw~ zE9}*xD++B8vqF#yekZg;-!RtpNMDJxa^_#5?s1@tJFu5tWaW`J*5Fu&?v?W3uf*O8 z`9gQ^K))7s0sScVE3no?`Y-93rN63+otPH_&{Zpiyo`+=?kw*R-Mm=;4;AMPwJ2h2 z^4jqZd3$S+cV9yGc{b+m(mMT1@Rt?KV>wTyhn@8)jG+~1JH-Dh$Y!E%qwqW8yV<>e ziDy;N^*zufNw?<~%=>R!g1&`b2jmV$>E6v>zb@mhR3{T@BF3k@Cdh&NerIG|F6)^H z&T+$ev>ncA-8v|&Y z{JHlpyTxnA?_V}w;(fd6cfB@*@4qSLox1shUK-)zea~89 zNx!Fd=@TFR5^Th3Zzh#@Rt9lSm$KaUH1_kkJ~y4Q+_tRc#x3l_ZOg40w%j_*S9WR; z-)P`IQQmU*Wbl1Z!gBXz(GMxhJ!;|GptR+l%;CH~W4YrtzKzUU?!@q*-(*?tND|+9 z&&1(n#JDC8uZWRAhSK_PYw_In-zRC za_<0rBx}lSU% zX8Q{Grys!{&_Z4Yz5&L!MyWbIJui+qcdM>P{p%rXAhSeI-rA#|FxtE}w1s@mOD{nT>p%&V>8)<~vq-;dH+~hI+>H3UXq7jPH@;e!ASzJC3@j z+!y?7?~HqH17ygWdi#f3FfZ)&8_~|;^!=Dy0(u1XTKG)J3uWW}ci?Pd zD{Sqf*cYR%pRV*ia`zUr)lz-Ssa1Ht6KxR2?IZqh{;~PU5A%z{xctLb?=WqUo?+eOuUzeDUgv){`Yo_rIx?rmH3Z+`T4Px>xwLch#_UfXAQGCo_jq`ZK+6LsER zT)*`E<-<8Ji>R)^Zw~l<#j*Tr@gyw^Fnq5_5zlcZ|Ev;B%RL6Ue?r~xZ)PC5$z=3 z4207%{_fYay)iEn8NgUWe$e+7-wHy;3f+!0VryO>SmpiVyQ@6YMmn^S+=<9!s&&{epqKvUL3lf?XL2k`JmY4t@^uv`~m1vzfK_jy2~y7XzPk%KPqd9#vG!DO|h3z z-HrEcdB_hv`^AR>Ucl_v2k-u%*O?MqIiRXR zhM{xTQr$n2f}M_{J$C9%#b@>SA5$;EzGcB9@FZ9pA-Q(Hg z72e_8p#R11F2{I>&Y>Q17L!qfzF%4C<&gH}2<9z}RU?P8@w+Cm-~WRz^lKSg5;r=0 zjjn`_1=B1HOWlm(Q*Sj~b@?PDG|7XMA2|dSNPUJ+| zsCA8QN4$W!UAN$OCEB_l=_T#@de|!1J&{53ed^D`$aB!Y=TC3(OuVni?$lZ2)rE9o zC*)jVst185-V#w9wI1gZ}v22Xr^`FkqkJHgp`e z*T5L)&JFqxJ#~pUc^kf~#C!R6&q&nin2a-}oe;_q`}c>(Ab$!vh4E1>`C$Iogx}k~ z_d)MFYcBDe>Ychu<`&iCY)FY6*Ul!eThhqfn!g`=HjOoUpB8=k;oU2|%q95t1m#rb zEJt+7NL-_{k~i9IQvx;tbyvve<~u2a#RIsE+QC zx;fY$Ir2So2g+BFs{^vgx2`d}PoMcR>YhMe$Xlr;I)?Ejb|Lc{J9N7e-RW_RVM%|D z?nJ&ZyVO=PSAG03X-}j@{?bm8f6VGfetp_O*%`QMS_9tJmo+CyKlc^plJW z8TV%n%UYt;HnM&YpRLqqAIjEYwnrB7pzk-^=;IW02j$BDSF-{04rF&i7Gyx*%9?uJ zVti|r?Qtp<>WcZiRqgPL>r(Zo?|1Y-@3%UlV+O|Fo`kgfPCtsgl*0NDWuJX|tCnxg zRlWyn#)nZJ>YCc>%icov6|Y{HTQnoSq4}kA=};bbIMJ7KCr|G77?$lE#Tm%OJ9z^* zOO~^cFa5)S(|ZH=A^|OHu-%Vbqbo9%Zp{9uer^eD8phIl;1B7yZ0L*J>9|)v zxx7WM{#san$F>~I&u)bsz$y^|18mVe`_ugxC1AgxU zE1}o8+lph^dptScld_D&4=~<;;KRSI<-Y%#ccMJARNlq1tx^XV&U-&%7#xrit`T9 znUS)z;vY6_$eSw38*Axv>JGt2+p@#in3{W~{njwP@529ih3_06PyJUuxFfdcZ_4s1 z=7D-konyFjv-%47ycS?zi2rNlXaecrAC~`LMan;fbfPQuDcFqsOVHIm*UUm!ay!8G6nmlnCY5sn@DIci_iB~@A;$U|r}}FHjTgz3xmDxZBZ{`A=`P#54_wOh3-7v{4&n zSvbcK8F6p4Bx8qHQIv7-8!|>9bzz+1e*&Kx`LJF5|52X#ob3$Zyd!Aa&hy{39XY#|vy>ooQ2e)5 zXxl~wAMW9uI{yy*Uztxg=v>7-E#J&k4def*bKZr$(V(CE%bi-j85}a=7;m@(iFo42 zAF{A!gI`_dsad?2J%{YyrLUryJz8bpPeT10vRE@`zlya2_RcBX>%h10fxPX>w~6AT zmAeV@e~@4ghr^JCtvgURpdV15_sX&V^pu?9=l4yXh2lDdZB6UTV@ zk%4DLUoZLyeepcHF!mJu>hZ)nZ79pj8A`W^4&tm%^fZKT-C+aviZ2}BEjh69dkv(O zySTE>2&H%Va*sFwxo{U7bKf0a5O;`i?iEA7qI}%#Nuqqnymi5LeMw&WVmI#UKZL&l z{Oy@~2y=A^apay>$gGA%n=; z;Zx3&t8C|)--JG;F(xF>OdZZOuokzl=fWN%l(|!fafTAGI&?7iobFKAvnR0kF=1a2 zU;0J*>fdJJ-_PU!u=+>aX)m@v+I=|Z3@FS?DcpTRo28L+Xgc0(<3c{Awq4IpUG2 z@U^~|A19o`H#38BsV|hC?}Rf?I#!w@XG~)^99ZMsV&8;~8(zDtI{u|k*8G0*-6isy9PPV} z+7uWM^kJ4h{0wbKkWXV&@032D^b3?;TvZx0T3mF*c*t0Xz9@h6otzm|<&|&-KI7Xa zzFTL8os|~lFz56uPWtrNlq;N?*k{DSC(w9U1z(DE#n6P|x~=$vVU?tz(_D-l7iPtIy4nGKoLy{UCK4@F)JhL&_7$Z}F5zyjG}R?%PFW<2g1PKd?0yUfG7t zn{~a~Pn*RP;sf!+)B^G_SLKHrG@oV}Pn4ae?AQQ(meo4xGo|lIUP0q~NtcbKP!tb; zrnFV*^v4#`Gkjl2XZ=3 z?UPO}JM!jDZO-NgCOTuuH<7ki$Lu>};!MUFW63r0{DX_exqQdScRx+-F_M&Lv1c6m z#s=`8(=T-e#&k`={zF!0b{K15NWGuZ%10V z&M&P1?=HR-y~IN!c_%zo9&@lE8Lzzpif!IO4F6Poe)3gYI-J0J`Bi7rF3oq^V-Ib8 z8C#RjIsBYq;}+(el?Nq{WQBJwuB#gk4kKPB62RTfGA&|Gy(L&Dh*9`0=V z-0P2s=VVxrs>+~e=UU3DnFQ|sQEzxe-!f7n5%hret13-@Xp{xkmY^M8v!W3E(hj4JC4 z;U~ti9_JhY;$v7hZ>yjWmCZy(=k+vGz8fi4`(3fx3ED_I!&-|VU&7JsGZllip?n2( ztYI|oaprI(lG#= zSax?Mrux7kk=u>F&bhwXB6Zo1$RXB)qgdHv% zqzvMd=|hbz$(!k!o65;F^8^0kBz|ed=10=~ehj?@pGLCid-yur^60MkK3mdjJjrjZ zu^TC`-e4Ri(Z4clyw)7gqUCJ-biG?wOgNpFoa0_`DdRuW?Zk2unRnWqjZfhl!B5t? z^BjC3^4;M3!@j0C>`O1SOWAuYXYih#ZkDy)!GCGdQ082T%jfgm zeC+VNOJ+K~m*2O_X~d4e9M!xS`Lc0Ry_;d2h`!S(vvcw}Zpgy71)am#-&6F*71#yi zz(%%8=SccQN4`wadWnTjsqb?WoaqH(1)%#?u}RKgtmt0VZ|ZZ2Fgu zvrDD-t#GDh_1#J6dM7&dMb*|G;C!bPcOVmqj;E6LXlI=yb-<;dd*21nv0U zz&9K3rT?Cmy(jNnI@0DGczo`Z(RtrF_-%+wMCOO+ujwgxle!Z5m@|xT<(F7WzZ{|O zb)KsHFB{K*hoD0&-|M{mFN|quptB%5&pgMiqrViNY!=&{3UXX$03V?5B)^2ac;O&; zXl>DG+pcW?F?)@d8(8CA3lCqHB@P5WZnw})>^|>~8-}~7fj-t3t@teZycfSQ3x5@7 zOk(R9mOa^-%DdU5D?T9#zIU8F+#QxV*=ZsD#ZzXvjl2t4I*0v4XAZn-CU116@y^FP z*X|4>-55C8S+Z7gd%0sJ`&dVw~>_x zjgIPa;C1nYY|>e1%#lp^mcY&Gbkfv)$N9tEIPYHk@X3&;l2BUZ>+dZAq! z``BzZQH(L~=N)2QO1UEaRhSIj@kvsC)Lvdn;Ah*PXmF!NVh!v#>()um*b%c`_4#V@ z$p4eTfAR{nxR&oVCUkB=y?wG%`aq|15AD|&5&f4^e}aBA?atEvT@7xTaWKrVoG9fM zC@W&D@y7mUw!4TiVuGV&VJP2Qx(?hW^XlLe;V6C)y%IdtSE7jl9TmHy`!$Zh3np|k ziqMkzNNX7RbQI5Xn10n5n$Ehgf!}tn%e#yIQ=i>W-)T$@(0A%H%>(P{vjlw>EASom zh3BUv+}+uA-l8+-xDVymc@f)k4i2pI>AHvaT7L}W$Tu?K#-O#v$}r^dqvToCJja(0 zCUH4eO<}!gtn(yejuh5;%J(4OiLS#2ET^bQgB}_`b@|E8qWBy)%y@c*ail)dIJ!#xK>rRi@{U7Uk5cdRGZOBi^X9lmk@3UG zlPHXHG@hcAp)sZV7~=3pJ^j7|oQC1IDyFM+Fvu@DM0nQ5lI9)hjLGDdS2V6_<0y)5 zqH)x~oWR~jr$Rdp+$_7rLRU7W7_#jR=89u>r}qjn?ahHsfBYEBJ3Y-EtdW|fcP0n4 zmR{i~K1cTO)&lDZWTDnMk+j;nihjQd*@T}ge-m>*zO3|3@ZC+`@h_pv1-=W})-U1y zg8esPBOI{ZG`zP2eIl*C&fo0l%-l3(rjnd_Lp|vv|J0RE^PiRbP(TnZ`&oU(dJm_6e;8lvU)yz6++jDTJ%T8E@^EWNivV*SWo4k zNqUX9AWO_bp&G-nm^!tOY<3aZF+iMPzPi@5NUO^;UxHUXb4-%-#{3rV${*UL%8yQV zDvzEFtv6OK+rZgI=mD2aMGu%d!S`3owk_G#H~{_flN_zd6$7QUSi``^N__#|Wz6V( z$U@JjY{i*0q`E7^(jljgIWaMi$Huh5ThxU;xu*@8-r&5uuJUTm0K$jJK1yflTJaMx zftgL7=E7teot`p}%$fw>(T2=;$4oL#^M(`S9Id726Zex^gN)5lqfHnF&)K4 zX?)N=@7;CEzY-hRgdVuUk8e@j8umPR4?k3Mq& z8m!g9Rq=#Npribs+B10&dLH!YnfK~aF~?tLr8tY+xW&sZL0?<)3twNG80c$}Y)`3y zv6ujlaOy_q@-MTWmi1L4TjzLRJ&ATjncG*CF8{(wj?NNMoQtoo6c~d!=~)T-34c51 zDX8s7PFGzwdPk;DV2rQe3@B)4Y{c$R?_@VnKmD6U&zz+Ck!x2xz&PZo_1w!pKG`t~ ze3#<9zSNEE|J_6!26=vZvQw`-7BQ;S(ZINjq&uM2z(0yib-}&P z3Oj8%;uE2Xa1B|jN(Z1#8)dZdjrPzc!S%8mCPDLvBY&0ZQQSx)K4*>L>~-LL-7kHd zPXgz*9J&(om1MH!tw!O6Gzba<-?l=(b7l%1!9wH#*9fC=frT zC*@oYz8<(Wg2OQSSM>A1FTq^Xl-uZCx#1+AURPcVy{;uz4L-k=dK53xlxHjt5PL%0 z13c)24Prv`rcy2I_c+{*>S7 znFV;OfQ;GD=GVQXo4UJ+TS9ha{Wh}BE+R|FBfhbamyJdGn6wbQ(8AOC1u<`=nMDJB zSw(r!@u$#~r}R?U2h+r|w-h#c7Cz!(l+%I?l&;9xflg}*nTbDFwnN=zA$j!LTilnD zhxP^AwRk^``mgL`oHFND)=xseL*|gyQK-s=L%jR^#!1-6h*@Gjj}5>hv_Hx7l@0JJ z^SIg|eM<30s;h}I#9#M4aI(|HZ|RJORfeCAZGv~27nH7YmG@-oRyk^$@>MoVMpWOa z+%$8v_$Uny^~fF7ul7sNh><4QmXLf&Bi{y)RXiI8hzpu&m##V&{g-#?^ad|NS<}78w)DYhhGQ-;08yLZN9XF4=F^e}wHZ^fOee0{6mtv@>1Swz{2|0gPW)i#8{TOGBor zjM;@Q@9=u!S(66isHZeL10C)0&SB^*c^S7GXv1Vju^y63vy&S<#cZo@6jP#eEOBxA z^iF2`Je}#-0o@Ocwo6yAuR-$FuvsgTPcm0BR<|PC*1qoq-}>X2{NEjU zqSHYh&G9d9JQ0~0K}P2B)ldg`N`GnrK9P1W{*2{(J}kXvxpOE=oO$wOhXbK#Q``~% z&!L@KKZnq3<`^50tJo#yPJvVSgYWdsv-eywf+0ynh8cOd3P}0u;9)SfN-@@mq#v0;e99!|S@87p@t#GD zbN9IM&N$HzSy9KjLU>B&uS*UihN=siuP!aVM*gQh@4#11a+1__)i~%xn-q&IIrYlK z@lM=0$+_y}@y>x|?X)9;++rNj2CZ2XQ#cvb`j!@>(e?19#Pdpd6Nd9Y2 zOgnrqeLy_XS*q;7F2lRJr0MfrOHyN=ItSKxS}RCLDc4!fq6W*kVvko=Y0j4B-{UF@K#&o3znZmYtSp8 zum2lbWgoXoFVlBz#Wmi`%dkt3#~eV1vrnWAjCbr)(@0BzXWXvy=VZ-8_^$mq$6@YQ zzti7-zpKv`UnqPvpJZ=n_rEWq(=RM;@GSiM32?7Rw~517!*adOmCQHuZTvSW{1SP| z+Fn0qPIu!;-m1#hf$jAAc*PP{pBY%S?t_L}rEHhQu5 z^>Q9tFLI;TyF_>U1iJnk*W>Zv&%p=q_;~E!Ch-91;f7W8rpXtQxX{JO8n@*mz~*WK z*X)iur@)*Sa#x)nci-A|ocq;C)IBjUv)rdI_@w*Dj&t49j2Z5;qvx;Ul7LdH#&ahRU#Ad%rczt^dk#?(ttd&OPJPQFqGuhCA{})4h8{ z%)RS`h#Or#$6fZ-nQksS(;a^C1#aZX*qS-#+dnfglw}=k6=lCJnXHxS^6Q+lj8NGq+*vkKD}cG*DgR^%dvjkh z-?J_P(~C#yti=vz3^@M&|I*;0bUIt+eL2FKO7Andp7Plx&WkXxm$J4R;n=0z(e>V0 zsqS(Z|0b~pnw>h zM`ZfV&T7V4Ew*v#!FFfx;IG}K+wIaR+mVTkrOS4(9^-s1#U)ahc_X? zTEf`j&5Kkj^QKiQCUA)K2=Q|MS;UNUo#jbP)y|>ulf+KO6=SvMD&i-9(r)~_`W(6$ zoE>Rqv60f};hbV9jkxg9Q|DyLM|OH}CZ;_Cnx?GsNWCLwGdzPc_pr4Y<8G|LQVd&s z_4v%*{oM$^OvjInFoJIss|E`mQfyJwLSCoDEB)S!&}3*@gf#hRVmwv$(Q|||XP2sv z!CUo*@>SeT+AveNk@vI!=P~lxq;BQOQgCz_G*_;@O?`2-1kv`d>r)TTx;&2^;Q#4F^M$J zEAmWhaydS-zY-#5Fg~)IJhynE8O!}=LiY_&w(8l&87~Q=n>$vzqnrU7N*LN>&%Gci z=2`Yw8tEH(ay}>h8v(yqvTF>y&K~Srz!9EHT>}rXPoMI_7WX4q6A0I#Z2VadkWY7~ z>RZZ*hBLN_Oo)=+EPuC|np_SO*C>4BBiB{bmhi|<@TE=GEu?k&Pvwb^qYb2mXOKqS z!rdrxE=YQ<7Xc5Sr|=IOX=hs^y&BzatsifL%^lm(a!+w*Z}TpF?)N{u0DsV2aEGS! z`yu(8RF==L@Ur^dKi@T%(S0b7h~H}cS4aPG1_OO}v3R&iJgod5f{$wDC{9s4So=<6 zRp0$i{PEx9erjGO&)d?Sq6 zSnzu^zDM~!t(@jj?&}*o)ihHX@?Pe==-})3>#`Xa1rK>yJ=+FeOA;$L%dDP{%sB1h z_sS$?z43=Czw$fA*^{Lasc>0wlVS8HGnMwg%c;z4rd*e{O$Z$S8{e4hmlb_{n$b3m ztJ=8zCGR7=%TcHQEq%nicUUy=$Daj$%sY#mck<0LzwG+B2e_$iQOY#aYTIJ;kZ$KE zez|#UYdXUR?R++*Myf0@V#}CaaeXZUpKJOXUVHGEgC7aH7G~@r|)7G zXZ6s&FY=9HSIhc5aDura#<$wvPJH~Cit|+dS{>gA>UbC)umXIF%C6(gGvTPS-8A$mxRG`U z&*%SO`scW-K8@p0+AjV6IB=(bn42C+f_v|`yPUd)eVp6&i&qn=P29b@g1c(5(J?0| zUNmON_HLK*Mu)S5v6`pcy)$;A)AT#Vv%W*T%Ffbns1N#hk`Iq*JoA0M)m2s*_)Z_# z##;Mf(ly53ulECvt23mMKd;6Z8`uB!HTAhazKB24+2$Hs8fV1Szz6(ip)LJtMK)X2I!-H zJ$RDAIb5023EZ8VU=KiJehqY7;6_YipW+k08mV`$>F2+(-i=y@%U&9H@z!(Ps~cvy zSC5_LnpWCHK6Ac3;}qWi<4wd|!OwL$#xUb+dWN-Of!JZ@l_pzpo(oH@v`Mxa&LS*b z2HYtAMPJlD3ljG=WYCKW_#Ui3v+sqwbCSPBhW^$IJHPeJ*3Od7a7ygxgilGgp7Vz9 zT8)1RS&MufMwzv9OF6%pyP)v(kQz2DQf9rXQg;oDZL zr`$??oLlOz0Zivv@sk_MKI?_8XT9OuSC{H`tS*Jxk;|OLZaUSn+k_+K>wTyVoH#o* z!kqWLdia-lYo~bg`aQ2!u7C5j>6B-}Cv#|b;mqS-d;af?KN}q+b&EGa{8J>J$FN<8 zHEfJB_7_>#8ol1B^kovfV(2YR{1z>e)Ei=+@M#cPU24J)Wj5uhe|c$MW2Itn-m;l| z!kf@ym!zw6e=oZF6X-jf^-g_l7BN1+?L4&xYl9AbzMP;Q(T+N5w0rwp*rlDNx58g_ zuR^9tuhjaf-j~NK*f+&F^6>ofQN*~2_n1SI(72cO`~6Y)t+#@A$|svnYmq*-pYu#B z?}VVG=1R%Cc;l*4o4v9;oH?`I=_za8OePf=bQ9Y{2x1{8_{3H|-6Vy<-@B6DxLN*Z32AHfUoZ;E(OSrKH{O=M7I^U0QKk zZ^cZ# zeol(k;1o-7t{{8o5=N)9zkp7e%zFpyF61n7B-!Py7{9KvHk5GEe*YA_wIS2V6N|Mj zk#G`<%PL~;CU2Z^(^}jz#wm7|&67>m6Mj?oo8k$%-(TcVrp_^Zz% zThR-&mu$shc*^K5ujS5A$?#sDW#TZ0uGd#yG11T+k5S$~fy|I>6Z{zPJ2LB{(sS5y zl>RX3pExVxUUWtWvJ9C7O(e%yi*V)*^F+pWbJP>V22#hF$iJXIrANr~dD5TIZ(!yz zACJM{FJ=|IJ<|-zoU8TvzDNpvhQ2c_`VYPdGY%5S2!lIlbk9ww0a{SE!B~>M8XHI6 zn0W2%vf0EFT0PtLocG+c=RDSez0%9T*JMrDY=ZY`hCQ0^Msn87p(g68>RJW*uFo^m z$fqQdB;v9nJlo$oXbh9k%I zjAhq*VQBZ)iH85K!(eVBy^i;~Yha2IB{m3tLO-{W$sH-;4U%csF&G!d%<_KtIRV}g z#z{va?xsm+-P@~uNMoRN6k6;NKG0)N!xOKr4Tqh?lui$P4k~?kV3T_HyEb?SdF1ns z_~vi^J{-r@cjA+<8p|K^mH)SLG1?L7>L2yZEb-)!eo&0z1*EYCX_jo63#|L-!oZ&Z z)|w>-JOlVYfQJE}3#>DL;=n2o6H;>n@^%(&n`z7&y%@cibK;uS&${=*Uz;(PB+-%8 zSG%*@N=^Co-hDp*UgVhUv(P#V-E3bhg)MzKJ`3hP)ntlc(&_aV{Z1kOOJ zuH!CpxeuZlTKH$b$$lVynb68OtMb!m=-edwyXdQ&JL2~R*Kzvq5eq+5Kh)Z58tiGw zfln5jllHc<-Wg7P^+Vcl=tRCvWwc-Ap}!7Cw!%}Aqv7KAN`$pUguI;l=N_HG-lnC- zA+=rKYwv>67M;X8kw57_i$A{ATYTkKPy1kX)@w44{IWS~s!+f$&bpiS#3?&w&@RT! z{L~tcy_CLA!aDB0F*%3zYxTZ@`IdCaKIVYAr3=wX{5`VhJF}1_9lV?SQOT3JCGmvH z+X@Y4u;$WwD+J#&o=WsfnDt1sjyC)6Cg|O~lI$Sqkx@54>O5DvisY2$^$zfPB3kX! z1bWOx>|cotoR2Q}8FvGE(CQCu^=6zHb?3Kr_~S=98v4c>SJUz~4#Q@#sYJCPdv&wpQ_b34A{}F5-UT#OiN!k$BsLI(L%A zSt{Vai{GYkJbN^-Q~7q08%L=>2BE>RvqrdsXI5b=WI?SwdOeI0)zG3LDmhzyl!XMj0hW(5KZexC2e^@vq)~;tygwFZ>v`hKX4r_h1 zFBCSmt;LqLwg<6!p_?|=N2w#u)BC~x!NaT8DmIwdRU8C*AE7+SSJSGF6Q54-ht`B@ zzhX4yPnVxb_Mr{3g+b5FJPCf^r}VlEx=b4VBrE+F`y%CUz!tSRiCxU-la3Wn+_BC( z{JEa8_5*G*6V9gaa;NWC6R=Hmaj)Q$r8ILwntD|pxVUE>V?9YZuOizU8ynayFxNDQ-*Osx8M(eB2)|it{&f8atdZM!$_f zZq1q)bq_qcWKPPQEY5MM~;3b>Hv>?y4 zAdl{X`(ThZHAovE?UdlV3G`FFRlxVV#rx%1cQ{A!L#Vt(l9$x0{?c#lm-sAcg5Se8 zi4^U?2PoPkN}P#iRnHnUjL*5sdjtCPROT41FTW(++WI)_ohqM<;QQg!e;jm@KR%2O zas%)%;W>mK{5mXr%2T)xk#fF99%DRbR8x+0Is-YXxp@@(&F({gs`1g?z+e0wx)%B7 zsU3{H1JHYiS+(u``7eye6nX{gIO%E{7xU?Z_egKxuAy4`c+y73eS26l z@jMwT=n?cGbc=8|qSk|xz+XJLcT%zRMc^7f4dB@cPK`tAY^ChxA-`oWi4Xa$@raEx zOnuSBxSpu=$al*Dl)QbC1OH#+|3}sFznk(V&)0LDu3wQhE=c=kkoF7G`q72d zFEzT0=C!t|4}QR2pYv$nf9g96pDW*rZnVRvTW1RWk@~P*AA+}heNVj7&2N>bvLpvS zOj(+1^>^0;Rr|y2MeJ|pzcKiCK0DDkvXJw=`Ip|6X1Q{72wK0KX0#3E(5ZZ=PPw{|fLM0sJ!XkpOmq4+O9S zygz_{54fki3*d)=uMOZI11}BW9|A89-~r%;0sL>k^8@%k;5h+&H*iM)-vvB9fbRgF z8o;*$w+HZTz^wti0k|cA*8?{O@H*f`0N)H83E0lWhENC0;M9|+() z@csb)I`EzVz8-j20Dld5djMYx{Ad7w8Ti2f{u1#00sIBvy8?I#@a6!%9JoJ#7Xhyh z;Qs^M9l#5Lmj&>rfv*kVi-4B~@I2tf0h|F|7{H$Zo*%&H0nZ8Gj{|oEa0l@80G0KW;mEP($8d~E>#1$b!y{|R_;03QWj7{IRr&kx{3z;gn)0^AY62Y{ysa0z&7 z0KWv>9>Bi?ZVlkQz%2p%Tj0h3eik?pz`p^G1n@54H&3h5|0&=%0{9oeM*?^o@PPm> z0`Cvtp8@X);75RW1@KRRw+HZpz>fy-1Hcak@b`i558&?s-xa|30B;W9?*R7)@V9|i z2k=(l?f~8lyexn>0$&@zw*W5<;6C8R0bBrH7{F_Q=Lc{v@SFg?5x66OyMd<%@N(d( z0sIZ%_5i*CxHW*U18xc6uK+g&uzXtf`;9{nUH@StcHf7LWCCpw2j(7>>H-VmH&CjN z0XL$M?!Z|xhsn3VBC~@<*Rlq~cnC##FaL{4w@KTges87@f_jYE)O{5AQJyxx@28AL<>$K?&phdSDQ`RJ$5elmZ&3su z;{ANyALM;MX?O9i1DsY;|8B}VLVg1{DVV&A`Cm<*Hz|t+x3PzB9N_D~vxPENlee3+ zZu0LZJ%eX@Hua<^^B&4t76KR5LH_-;We;gt-bZ-f4?G84Qk1covhD$H;rj!;+d-L2 zFlZ%JHaP58TPdT+w@WGW7|%J>ml7@bu3u^Vr-0{^mLPwDZw<;#@%@A3Uq(F(RR;J> z6)yZ|fcKM@pe~DNH)XW)znXF!-Yuh??L5UF#;FspPi+_iAvVrMr8rdg&yGoXI zJ-Ym{6RNfdt&gyO=^hWxb?)~v@?9CZZJvW& zReq~caqiV4kB#0K{V4bR;lHx*6@71uc6ivO&S2qtUSr-bH@JiC8nXdKPE-=$!7F zeZ+unI)99N2`ku^{58dK&_}k91ncHba1>tX>h5hOZMX5?U^i@nc6+m1z2kVN@9MIg z3zS?@-WAl3O#%PjChr>7Utb*marXc^-l)koeuOUX>mRUP*^*7llwU|TX4A4u`+25G zOH=oQ%p2hE3NNh-Yql8H0?qy%2|YhMSeIn4d4Tf*@Dwg>;4qA|`vN@RmeJU{s<@1- zbJ@G)er;6MUvz-_gwNjteD*=#bNH^?uIjcHbd%k1jumx%Upn>=GYwB*+x_4A(npeC zc8w(8oQoY}RPi})wDDhk@UkN{TF-f7$Y(aLlYK6JJip(AT`|+M++M>abTU6U0Td|POhdr@Rp5JxU+WJq`bm$9`EJXNVG5pX?Gp> zeEIj*rHL1v*5!0!S5SRMzKX{#>eaX3;aRhp8ss$ws_(axp2VNqKwYvKT_PL0Y_Dlz ze2rDuQlRg2Xhz)$d}1NWSKNqb(qe6l62BI1u~tQs(|e$eacB(ZMTs5}>hxo;uq|qg zCezhEjljcN<0rD%tuyk!+NG0dlb*}K#bm!dVl+N5s=Dr$?NV}J_7Cd)cGTjzls`v) z1N*(;uL!2x5amaLw2?u%SMV+tqXP=xxSq6EmQ=5I>@V0wh$)aSwPt@3ZJ&X*Em|}4{RwItG~dOTlHXNn8b9LW z7RuDSCwW(AGhT94o{>NMDBo#+mh!&}to=`dMSC-`z|~$P-E$>hlV~iP&I#1r01efr zNlP&ebFraeqa#*9wlV0tPy9^`H8NnHtN2CHII(PncNg^4*w;6t#}m_6U_(&fI&Kp9 zBHkbQ02%bfrwZ8u2AauwO z!wEkzPxV3Z@{tqdaot7(o549NyB!p z_4{T$eY5iIzG43N{TRaIVPvjkjo^-Km$zAE=y%a})5ya7<6Y1!gI(AkccVM-hj!4X z2~+8$jk8N@Lm?-^TqJ$PVs1wU`E$GGb&c!!&;QqXz2p4q{3O4Yd{xqURG$1!@@vUw zRr71j1or(}%qOxxFGfF5jH>e1p*Q$_!5y}W6;=!hxMIs=-o>{1x&MHssSNVI`#a31 zKctR36-%qW(RY5#34YrN&?(Dv98cll_njY8i*81_H9akn>G!_%KFWN1Tsw?!K)4{nn32YdgXLVX9DsVq{Uu-L7p|SEPuk;i7QI%hLl`oTDADxq5KSpzr z;)U8?sLJbxl=DN*X(WD!cmraG7Z8`Qpsi97e_~~a*4vQX+dLz`4VyP}2jwa6@=?@n zL8s(1_}-N7Sud)*JnMKW9;2S`5`O-w-q(2=Iwbh2{sjGfDtuBavmV*dlw08~AJ4hT z+!Lu7BKGi=8%gZYAQdc21iD`?Zce@pj%*W!D0kBX6H{DZg8`?+rKEz1AIl!!Ys zbvA9u;6D~WIIhl#85*y1gnT(;@a2ch?WMnbEL|RskK~%v;LD1)__k^E=8VT)zUeH( zFC)!3SNVV7n@7km_yBMVaTJ0}z*Ydi1l$_HzXNUy;Jv`@0sLFwQ~*BG@ zAnoP%Q?}LbO@&`S3ofdoNWO<6)w+KM{73*l0X!%8?lIs@06z*mKY$+qekfY~_WQt( z1n>`m7m{Z_@e$t$U*n!j%>5fD>Mq2p4O_OsY1c@WT=*YHyG`6r4=uwFjoCi(p%b^8$Hwg`eenbXnJ~9BYLdNej@A7n%&_w# zLE7uUFTB6{9=X2nq1HX6zYm}5zJi`N>}2f1)MKSamzgX5Ilqni>lt%DfEHaLyL77V zx@Y_nuR(006TV#Y6ufRY$oXVHamx<;XL;8=FjbNe*L;#n)CRVoMpwwUe^APhql9iJnt;C?||>5 z>%H%->YRG`t--j)i}VBfBWx7xFw6J&9Qr|V{G!Dfr^H;hZKhioJ;7NQe!|%X9%uJl z=ICrM&51KuOFiQ4DV@Vw>Y?bK(x?{O)!J}EG3s_W)pg)Phw_SPe6n30GLC-l@}l69 z=Dl>Q`FcOV{9WwwzD1nh{sGR!xT)vWh2XZq>G6*BJXzYD?eQisZ_x(s_GM1s9&*)B zYymOGdx#P2Vm`l-m`&C#$nE!%X7W^?*}zKIJaDdJc7ycug7gT#&j*h36g_m#_@)LH>v(9jrQEn9xCU`?vm^Z%X8y%6zIh%Evv(+eO|@yc1u1$Ov?6W@67OB%_PYd@VljAHLm@uW`0~VBjNO?+}k)z&VjadHj?AmB){;_eyeo z8f^g=|F3cOL}ST06OHuQ6Mesx*4P7QZ}kQiZS~IPY%kwlQd@5q(66ye2!GinTBok@ zCXY1^pTO9rjp+QwPQ7n!MStSG;zTwe$J&{P&EKKpu-3Dzba}=%)|92YOZWE63g|ou zdekQwFVI%$uDf*y zuQA-n0JNZvzkY00S!dNZrr>3Zcy9VSL^+Bn-%I&M78oDwZ-I3_5%U)Q@h2- zqihRP8AB1ixtu)0{d33})(@M`{@9wbfmt&-%TkCA^!{Ds@yBqn|G**;X z{Rz5Y|G-2^>?6K#=vZe}>o&nJ34TwvAQ#d*D$vr8Eoua>DET6nNgp9Dg74I4th1UM zs3)E!77<>&A6^?~RP}?ebJw|e?$hv+&V`gOR`2w!_)_oY@@^ULYGoMUKDPB~Z)uR1 zIor=Sn|xQ3Z^4lA^}Y58E+xG!wWeGvBY~VH_UusVU3ouD-b+be4`0l`xoW?1W=u2| zrzaXK`S0hyo&Rb4`*zdRGg_0C=oeS={F}Dz4&FS%9S7Y8tqEoHPj}R*|59qo5TD3- zMDl}Q@~N<6rk5**i?!b~o@_vQ@R<-EApT@Vh&7)biRz&kv7X?%qS1%4W^x+s@soN^kc&G8Z@Pow7Fs9`L*V&(p?|qV^;p7XIu=U$Y z$QtK_EqEFJ(p;c6PRp}Lc!FX|ZmZN}z?;zFMeY4%{D1Xkc$&7Q#m}_EwC&RRt;8=C z)_7U^P~$(#JCk}8%WylfvFQL7Ps_ew7U?^Cjkn^0HD%4&50ghY##6+5jpKYab1!yd z$|yeTuT!)}NksA`GnOZ2JWm;&qxYgyMcL6ztJlmc9Wof#D+~7PVoy(+i2%xh&yOVQ<)^Scy zhI`J40nz?$m80*aCnac4KCrS5Mwe zAE54}Zg^dbDRo^-9#g?B28?BN@o7n~?|I;tzm?^}qqZpmN=g2$F} z=73^z)|19v2F*JA$V6Xkr@k0-iGM#zUbgiN`xm$ejWTrZn%XMc(NXSYZ79-~yv^Af z>~$X?9zAE5biP!Gd8;pMIDJfzeTM0Tl9!eXrs?#V2DadAc`a#uX4na(E-SAM>wR}c zHrYnz2gQ~)W_30>eMIcn|4%th#0je$={PE9&Uoes@SYu_pSTO9W0c0;A}3^B>a-xUv zj(6ew6706j3s%0gV%(DzovSey8^P@H@b78xLGqXW{)I@2dnSPAHdQJip5xim5ay|U z4pBWxuj9%6r-xF{4j#_kRF%n+z1nY|unS(xgoukx%WeN4Px>O1>8<3^kHb8pXL2_= z&m6yP`rKe|zJ6cJZ#}OIp38z~cko;pJXZ(LLh$Slo*RPaJ;C$-;5iUH9}J$27IzTR z7s%L4LpT%F5+s@cQ4<)Wl=O<(H?{$co(l`rSy%ovr znw}-SstMmN`}oTJ*f8X4yDrt>`L?~zt=@Hov6NHrR$2|-?(7rjio{V_8!M}m4PMts z`h~SrAy0mby(POpp|dB-ZRABJ`*%mE&Uk@w1uq@TJ`T^$EBym}hS}hMmex+hpObgQ zF5N}XI8GveIY;7+`tupnd`I8!&hIL{vGV*(m(=ociRw&XH#Z z4_^zOdzPGEDokQMn7zeWdj|KG=k9h^I%B;$%JJirDNE%qO`l&rio6tF(zzc%SBz3O zv334abJO+Vs(q?mJ{jKazvBGT>CiTl8q3%oEgN-weiGPWJ(pTuUT&^(x{U@eJY{`F z?P$#Rc?-z9)Y{-Ju{SX9aLy)lF^j!r-JPKMLg#=lAGxt|E%|hhLDE5w1E2Juad_{< z9mpc)6Y#CY40coBQR{KeXddgWw#Is*<+F^lmHDxr$}nu~`Plb0-_JoGQJXA%pRMXO zp)cF+NcOB{I$WerPhetTXtnHR0y(1>~Qa%lTzPj#%cegqpa{rQt; zh(p5{+DaYb7uiH*cMK)_Dy$QHJH+B4{?1)pA2Qy=@2qdK@I48ukv8yv5;L-N#ALy@KYjFM)yd#^Q z^if>g@nQklQCQ)&Vh{r%ih&8rS*$ z2c4m1F=oPf=tAtj?oC>my3Oa;vsI779!J)U4V0(zrvG-hYCoMxeJicoynHI}ul2<{ zUF^$0IG*<1)c2}!)0$VMOaA*y+FR4_m*Mv@{XPOdRDL6GySf*dzCDz1`n|;lV~Vya ze+PBt$(Jnldt-@z?npAXPG0WcRnf#4OCpGo5_8a8{tk?!)k35n9O? zFM9a+7uR_A|FcSuor8n-8F|OuN?TOtDOB4{^X;5Vhiv>a``h0O52^3bqjeWRvtp)Az4@gnf6enLw(+B+;6VD(kqZFz0wJC_&8Kk;jHQ&_UXZ# zCEt51ye~cRI^HpcO4puRl~3Adv6M9NOB1wL|F>K0OUOkY%rC`F zpf4MC>D=S1JUlOCG`FA=gpnVLBR(x;?91n(ZoRdhF)-IXh2IZKR&ZaD;#2OSU7Byh z>GhSBdh(t8qzU$qY|!uA`pW%!7S~s1V_#`;*e7Y-=nQ9mNA~t6c;1MuJz;#VG?{Oj z$m7quxo*zPFyh1EE6Fj*_Et+eCcF(_ZDNm+c)FfP9DP&Rt)zksHx7d&&<%zlgD&z2DEiYLXsd|DEh(!+AFIFTa9mA&q&?l-nBbK=hWN(eg4gC0#u_QP4&4`_#M*N-(Bho_BD?0m+B<>J%N+Tb-(=LG?s zXOmyP3*iz@EoaPk`*Y@vl3CKLYHb-uThLz|{zLR9wu|P)l*1a6{UWkyGk+#^e*J~o z1BPFm_JgN%T=j$G(p384%z*yV!&KKKXf1nz@=9M=KpRcwG5CI;Y^s}whaA~89s>8h z?f4ieOSTHlC*oDfxDzQeR_re8d^^UEJ3HIWdic?Ubve!{GQM+A@PB@8=6BD*7V2?miy-1N+>ofRhiNApJc`#**E(j z-)KD$J=B9fgif4e%sSsHhl=Yf_b^WCt?GV}qt>rWI=|B__EdB}#@C=#93F4s&RTyj zJvQV9aE)6%jKP_}jKLy%dkn?`Yq118W$^9&`fV-UO}-cO`?qfm?vq_q^4BzaD#Bq2 z`c(sE$JKVmv&wpawUx&D>|o3(=0-9NyYZ%{c^Brpp4X63#6_ITcxbUD*Di4{Vm$1h zgv`#M_ng7mV^39O^`7@u<#!UElU^hJB%AN|WdG1UJ)I|jEzZOKbx6K0*T ztU1`s-ZRP3s?6`HXkPgube9Yp3*DP?-5x%pL;jl6sp`U#H|?qynIm~Kj55w5k7Tjv zC;pMFZDdc@y`-z}!;Iy#{)e%gKrSjDcUPBB{~yNd=pp$|CZEPvJ+fS5`wVzOWqg42 zx3q^*u_D;$B`^K^?F1m#&d5OpVzFM3}$Jl$WhiGh*Kp2B#H8odXZllGzixSAW4 z|6%g#`F@^8u{xhL()KoZ>b<04`+7U?_k+9*JR9f(eRmq;NaNvd(sT~5X)JTcA|Iq@ z`?~E(A^-bX@Y_*iXX!lnQ{PE`twX2q{@hhbH?4`grf>p%w8=?#0v{Lk_8)uvM*dF7?#ptj-}`8{jS4 z%>-{>mjLgoKBoEVN(Z@Hy7jHW$qy1QP@6+Vvx}ga_E4#O(PPt)?`5-Bx_ET;kaWd! z_9vsR>^adh(W?yEYvC!$AL^AX4h4K*7P~9LD`Z#iS2}8MD>YNrKtS6?;JzUpb!Ee; z@t*V^VmT{Kv{Un|=8p(tP5PE}Bk_QlL_bRQR6hI9!TT)utJbCjZ5l_LE~f8I<7)R# z#!nMEPtreI6#WuALujKNhLPf$_x}PeBX)6q3VqddDtZ$9zdOB)bxX#HCLeche|qq6 zxX@YFSr5@PGB7K-W*mCuJ<@wW<#rnL!x7T-F3emd+~`}kGi$s5LLL5{!St{8#;QKf zmD$;eJ$?syZ%);fI~jl97hhWr?RWe?K4vyGvr4gtO@XMeuHb_UM=X8sRE_t8Z%kqCOFw)i3CcK7DkT?$61m zKB&=Od2S!_{>L?X459hAhrItj?`yObo$n6fg=a(8V_M^f$aiZHCJ7_ZxFw( z;o~ko_!wn~#%H0Q%C_n2bVhIGyFvRRr@U)PukqCq(j%Gm zr3cYfM5`x9Yg}a9kHRl4(7q~z*7<9~_00XkL+7SR4_wRdY35e%MfzbX_J+b_^4faYFU-zy&|9o-q z@J}hvuuc(UutJy0% zIWs@Ae8qd%YYty>cds{itKkm*5Fa`G6Jg%anQo@B{XzLtPY?8s5PtL+^!(8G(&b_7 z1sTDZ4`n`8HX@;!X3Cy9IO2kte1D$ijCM z7k)s)TJ(c1`ZYD7^8wS^{$Ray3He%BXQU<|oAA}2WrfO}?at%h=AS&~*wJ^MR4t?)kCltPkTR^EmOL;VffK@r=+-^c7uAWM1ta+pavn zi4)M6Tq|Fm<)2r{v~w|QcJwI5M=14ibhUZz@z9UEc>Vo0lSq#OpUCqk&<=T4JvYR9 zx>OLKC+SN==RDu+Z21*7rR=uB~|_H3)KB0yjK^LBYWZ5 zw2N4Z@?zelDKi3&vcsuNt<#MRK2&)2SNe`}W4zOMpT`zSA01i+UVC}o$`k$kP!XQH zmVfbD1bcOM>{jny;!hUdz&+N`$RsweJ|~~an(`cYOn$IAdB!?*%})`B@_wS-;zt3_i+=t@*nn3=8Qt>tJ%5Fix|y!jI4q^!=>ymu@56S)T#}u<)$0J?rQo@MccSzBM_9|C zgHJEwJ0;Ho-c4ohN%LO12xq|f>C=n!1^lv*_qyvrZ4(}Ea6h!39|E5y3tHvDvryI3 zL$vqzyjOc~Mvs*4QDE#IWZkGSDSG@ic&}I#*~eAZAA&N+QKoEN)4+L2K8oJD&98H8 zke(*Jmi8XfW=@wq@}0DiLB82T(h@;hW=Pr~v|FJ0fc3KK{|CPp4*C68erJdL{u95Y z6V&p*&hJ?8?GeG~h>BrYiY^%00{5p2s zYk8;fq~FS;_pgwiC0#!6q3JH^Q;YccgYpu=dwsK?cdEaEGPKV61oY)h3twN)(4U_T z+CzM)-=57r&YAL;m~(aiM?7D}Su$$9-r3dPn}EM*$IBo4w_aq|r%NGtG;a3zXG4FE z@-^=skFVzg$ZF)lp@9#-L)&yvXKPUBH&re?cp-H*Z{h4^>Wra3q%%6#@Z9or8@|o3 zRsx?eGF!ORQJ-RM6bq&Hji8KS7JQ9tW4!w`pH17p2@ZcmZpXElGa@F=~L-CoZbDvS4mQ;gk@^1G_ru#b~IWS$`YE9o-NjnW=T*;QmaLBBYx zySx=2SHn95-a7xN#=n(gRsLoE_WN~WfcG)%Pebv}=8&i0yd+z_FGl{(dw-1&582Xl z;cBP#`lzS6Ro~=*)}tv)IFD4BnJWIn1?Q@8!;ts#jrufz7Dl%EzWmQ>`%UtNtXcm0 zzxM5SNc$#pE$1Qa)SS2=$$is1t1^nYB(AiDq!maLUgDd3hp!2-zaZ3eVcxK=k4A;- zo`5#l+!k+1w%WH3qjTx3h#HM<7mfJ-lfUlVLmZU=#syM$Cr0ox$`-11* z;Q4&;+!H*X4W2uA8u@A&(s{*?e&2>T2cNoj2l;-ke0DY8Pl0tWn(TS#O#V2e3>UeL zz6D>vZ$AjW8_;(J@>({oL+kSz{wLFiniphe^v_6TUU-}{zD(-#o84c-Q_6chb8Qp(V>l2sKMvy#am^jIdF<=}x9$M9(ZO?M@O&UC`en)^S-+_b z@hsyVJeofWFH^4UEs8JHIb=F7f%_!OnH+O(o_J(_zPyBV* z?x`Hb2duN}q>E0$Cp`@s`u6AxZ^LiHUMOtRqA&NvMI+YcdiFX+>n!vI(i)@-r*6dm zpgap%w;R6w_mUAk<!)PB0O;}3&}2kaM1-=y!6$-VM7_S(Hp??A!9 zhZ1ivh=+Iz-iL38qeo6pGIv z{qdYbC%@%y7QpNB5z@aQ_PJh%yyf1u@^<<(13e7Gb|1qwB3fd1J$$r|JDQW#c_;J7 zDy>`K3y1m9qE6GY-M^nj-5%?BzWs;p>IO&g@eAZpzb|0E%@5f4gnFU(`pUphitxZ_ zSGISQkLGAIJcGS&HhyKsh^u*WxAAys2JO}SmasC8k$Sv*?8KeE%oJ}t`q#n3OIQ=u z#`L}XR$EQ>qa(}WnIZ4K9lQ&1c789+SK}?oUd`S5R_#4JswxLcJfWjs*Goa#9-gux zaF!Tyezg}W=Fv&Ht1DUXbtCzE5+i#m&yr8FTywkl;3nFq``KiFi6w8t*SFkT?dx3g z+*Y2d_p{LXcG?kJs$rt|E&`zD(KB<;dw33A^{%>Iw3Qb^&|gn{5SD`gh?m{ z(@y2x!6;`mG?NY^9^{;YseH3^m|-MSC%jGnb46qN{dds5bx8WmApP@!tX&t-vk*L2 z@D#78Z8rpI|H@NiT4P3X%g9&fZsi%xyBKRk#TNQ9&ZqM{H_iH6^V^lTGw$JSUyop% z*XFng`oy#xW!bi?G9SKe>#Iw%TfA%rJsMf2vcC}2e-+OreELeeC`elvJTD2J3wYM% zw>=o;3uKn#KY|dG~xF*_^mvG)lb(4@3l{=_P#OT zpBgQi;VZ@Xw9!|SiD8#qj?wShQ!bgS{>yWAu+D0pM*qHPo#1I49Q-A#|qstcT8l2Q(L0#*A_s^F^$98@#oeakj?$0B3U&SMQHGwWEnS zM(x+W`HRqT@NpfATU8pbdQ3FC%^ORa_Jcq759Vw3+>3r=DM$ROHpRG8rG+ujM69r> zvzkw~?@WifhzlZi7#q;@zaTGtWF}=V;atn{(2tm9t%+6lCBxxA+Vlu*nnr(4KTG@M ztM>qCzS3N!IZJspXQ>?dB~GCa_k+_(zr@yY+B@_s2Ky@+FU|S!Cx93GWR0q=>d`%e zhhL%I{vr7v9FqT@cjX@-zs`<%bV&Ytg8al>HSc~`{=3Nk4EbgEtnKd>-rsv!alZ($sWld?P)fse>P)KHbli^89DU+ zG;;|0ruO{H<{UAc2}hUztWD>cz}Ig0(sdQh5evXa{beSv7{!`1iL=SqFK+*(i4Evh zc&&QZli`bMx3dc;e2k&GiZlltoQIMK)0-;I5g!+r=d4( zJr3GvPg<06B9!r(%A!5e=dkJcduf#CV31DzqbZ|lF?gt~W237!#^u`EM&IovCUdW1 zMl;|^|LJZ_-JutyY~9JyXfQ7jvzs6;d};<6hCOi_&j|1QGfSqe@%mn83?wsU#Y$i! z^X2*ClpYaPP-|1#-L8kqfOk0 zq4>G!;3s>Z_LQaJwFG`~*?+^db3ggSqt_h=4#azOz+d|P>Y_;Z-n;jU;}pL(*gF`!*2X@?oBQQ}78(^J3qKEt@a5ZHiU zB||gRrEfl>eiKjeJ7iwy?qg1)Z~Qgsa%`>I^D^wq+7GduDTDo@4|(t$xWs)_6pD!^ zCQ~XgzL`u?ec>W@YjaTuVmydOqsDZCnMs%!i<=h|Z6(PtgiKD=;n<|nq;r`WCKHG6 z_ur?=pzplj`+d*wJk2?E&OUpuz4qE`t-bbIYrA%{VDy+vz%sJP--IsgzHj13N?b7c z&k>pA)%yK=zyA~b+Sp3!@iVRWSer=)U~Q>7iS-zYOcH-Ia#6S{ZRJ^m^-%CDY&fzn zi!U@XJ~n$@^{pDGFs3pg9s(bbjamL?4nE>B#!u_iv1aUC#iR@kfUlbuhJKw1lzWy5C+be{|F=W;K4vI_XB zTFi9||I`xeDbZ3MTNV0&<_tW^cYnio>1>%jilp)h+l;sIg-p98&F4eep1{lZ1k(#W zK_=G|9Q1mE7pY5l)ILU|a~bxq(B4v&b$8JITf93&qT%ZPhWMQFg2=D7K8Jr+7XKjT zJw}})k-DG1qc~~pp~!Ez4Vt(?eSnVO*V}GssPR`~f4FP(#lCbYy(d2&eb1Ir)0*`A zW0Y6_b$>qh@|$EYz9e5}7(h~aoEZz+guaT*RmV1R3;Ogf)wj?-J{nJ28PAkC`8fad zsk|4y;7Ho zA&jN&|73KM`Phs$jI~_&3A8)T*+6VNejC(B&UF*VSaZ+HcMdWxQTQad=;C*;_M{ja ze>>M2=bp0abC{#@#cb$b1Mlb!J`AqKPn1hs{eFu270*|j@ABB2!yfNO)2Wql>~qYo zYo%*8HKL12FMPr}8vO`98juUziocgQ#N zl~=HdNPptb3G-VI^Xyq*9f-VAN;=rb(wobA_FeS@J*J}98@j76^aasAw`9&D16OuV zF@xYFgP&o)`ZCw-xhvKaevDt`@^W_l*zrzZ6!KD0bZ?d$p_>WCaoQ;e!m}IrdVbZcnotn{d5;` zoQ&sWYlAtLM)jO-aJaySZkmkWp5_U7f16n5l(pXY0LIebGTR$`gK-zE(mC6S&zUZM z0e^fI|BNdeEdM3s=u7x%X#Pu{ieJ{jBh{W_WKS}3Y=LhxF0Fk36X<^v-+r8LH}LI- z4}AM);QayLHKfS_2JTh^>s^$w`|t55L%V5kr8eXjzeL}<#C-y1En}ePlX;%i^ZxMn z6n?YZ8WO$?-s~XX= zZgNU_d>-KJw)^p|-0rQJxD&HZwzLE|+o9JR>DOfFcnbJ@nZ8U;FDs)vvEE*LIBIns z=1iMFF$;=SsJAv9eii*#v2bZGv{glm?q+z$R>iQ278GYG|Hek%OK*xZ7V_KM6eTw~ zecN<4eyT7}u5bfm|nE=LB-56!C+@ zf0lE|_B4tv(2;vQa$HR6@N9Gi*}3Eg%ewx_hT<4A$5b9UwoS6Gk@H!eWV{-kF@gNO z5uoE<1>W z-lO&e|IgH(DgmKX zy!&=)zsoI+W$r76Ml#;+)W3I6m zs$3Mk@h)h7X%?Fs__sMrKHkv5*&-K}^E?{?K6M_twP>05Rbagd{qa`nJBQ~tU`zNI z*U0G3fe9C0{ANe7Yv5DRtLB3Ews3ot7@{g{*nCS@$W|mfIBiPqUMd;S^^4%}a<12L zoy8SDx~3(xa~btt&a(z&!xHM$x?>>nLW%e}bnKVC;pkpsB{WBo>EK^$&L!Y2U6ilQ zB7X+(%1@p-2CVESZZ8Z>7{D(;P^6S8@#o_SNJ^>JB#=s{xDna=C|-N65soqfj!Utt}BrUWfgmR&PCLesy{yf$bIEBY&iu`w`+)&6p9V`q!25 zCGNzW?W4R9ONy?qc|4bTuvs)|oaRwC^3j~l7pv5BFJpd#%3H1v-yag5=TlDci0Sk+ z@HW?fgxDxOSAVF}jPpa9>*y~NMqW$~kOzYf@;+%iHdgAmi?ZveLvb!|)8<{k(N}>( ze$&0&$DL45Rex>;jtt*^l5)!{<*uMy7x(DkL$@-HcY!nc2TBK#pEiDBXTGC%{Ei*6 zuxrjQ-Du5O%NpAB@hYPmhHcE!eV=^tHBT-pKhE!CeItyX#kyioeE~m=juqj1WLP)v zhlzdFLuLwR=X;c39qO%*UInl4vW`ecTLHMTDh>R`2iC^NkSk})dC}w$68sauRh38l z+kYL~CZC0H?``#9Lk4{%tvDd&;v{b$v~*xR_tEp*HxhaL?fG73OGWeU_iFR*<~Vgp z7aL|C>D@f)8vnbHU%XD;>2}3X%r$m~dEmL4(+b^=dANpk9_}{wn*^}d(ysih$pL2CvK%kk?ktb%9Oq}S z6Dl8{=H^s#1pR^EqBqUUck#*o0%I}LlYCiNItTf3{CqiAv_gOC`x$d=dTr!?lCN5O zYB_5-#yd+M%=8N6rS#NLmw6aFw82rq^M3*jn3&u?&sSWyV#0+Bbh2a*F}NCM$rah^ zBaz6>m&r!?R4I4s$`p99zIpfrPx|7$ha=!HnnK4wPrQh{4~lgWzR3@^ zXDn@KEvNltt>;)5BpWjuf*#g>4cHsiZoReoFus&Y+sd#G#pYYw8yG#fxGpHzoPkti z?ESUjT=ru)m!EJ{8B)&A8jbhl7sGTBjg70LFTw8?QXPUoxD2YTjxt$j4o6 z3kJ>OIP@et_mu}j9-MQzyieC@Uy(X!Tm1ieaGWk`FHZA0gy->h$ydOfiD#(~{eSMH z=LU7wym*Vteo!OdTXjEuXCB{0>Rx4D&GDtPNsmw0&3^kf=umv_sPS*OKWJwiAsSX3 zs`}gLtW=CPZG^ccCh@K4+vqva;DEEMG?KoD@6DM-+cd{?=IQG6L~Psa5i&og@?ACV z7FtQpv!Hv%dH{R!UwHnm(%&=x1nW3-i;!>j1nAB~)iD>&W2zsV5C0;>`DehlaM0+G z<0O45YboU$-SrMKdr0uv(2@AgduwT)DNbkd#PPw&_>)hGjt{1sJ3i1_@p!-fuYsGL zhK@XcCb(Qgd3*r;9OZNWP5Ij?{{ZFhqMUr|HMdpgO5&Do7heGv%I_$AAj`@7xDVPJ z<0C)DA}eIm9D|$~t98C?Z}Td)aM{5f{4^4|(C!_hpThqcv`2o)vVLoB)$mNbeIn2G z8-C23|0Cm=HD?sd4kx|GT;UJW?Ui%2ntNDhoXciVjsI6{_cx?#^-CupK2P^Z^FGZ%Z}9xKfK?>hpnq6<_p@2 zBF~_!bD3KcpP0I~BpZ)SJ?evOq*~)wbG+8b9|?O)qT~L-26uzby*IXSD|HQfGwzrv zz#52=bVwBp$?4iOEkS58uiQ?NqkRv3beM5(8gz34^K&n zPtNw!)UUCbr18jx<8ij`!K)BmcSE880gC(6ZwWXHA;es?By?YBAO z4qL~-se4Rc;?^2(_xLT|aAc42CkzSJ1aKdvobKNp5!xjGlWVnK=T`c%v_c1}?;gGp zJo4R0K=YdWg285QQaDmw;vqGZt4oFU#0#(s>0LGNMqKARQbuh)1}qK&#J z4^mEc6zS~3AA8erXepX@I^zAjlRZYX)T%QHfomquv{xbi{wVObgKO2BX75>ifVBPc4zW?R`gwl$F{kZfv@BbDG)vsF^(AcSSC*{|bj`R& za?mTfhIoW%sA^{?2ARD^a8!_w%-$gXEBFUKH4J=1oDVBi6Mx@3ws7n zn-ZR_5l!z6P8zx5#0BkxgPgTt+x$-Q%>vHAj&Pr#zgBK9I4?x}PjXHPuvU4`$|oKU zR{rqe;91~Iy6mfFmHVbIcr;H=K;pi{+iHP9JVh|KTg%X|WP@=_Pp5l>HNd3%FN+=u zl<5n7ScVI`OG(C7-)jxtx)PshYy>*DF;P&C9q^G_;W_Y<4(b3W#7-U+jr&(Zmy$E` zv((7V$RD9+s_Qy`9%&#l{T1#p)k7oNR;A%)M3wFROir6|dwm&|dE4B>TJAlpb z3Hh`yMaK}FF7MGtf=!ec50MYYS9z!Mjm~m&=5{yl@8a3f<$FsDdB23enf%EPlZQ6d zk2?eddxF@~4IgY5F8acGK8gD~+H3vWCu@)8nv!tzF#W@}w#qy|KYV^3{kfQR&EoTG z{aY$!|Aul)K2hV}TKSFKZnB9BgU2$TI=$L7`wsM3F#M2qe!;kEj5KafL(|oLtZBqb zJbN7fHtk**w%bd)@Q+oCY3I&LJ6F+e=A$uxR5}C93ri@St86EM?MCC#iS3)SJZbNF z+PgDN-_nVxjLabGJ~G#hm*wA${~yPV^!ezr($*PgSnz{Qbcb+>6fDCnqJJ zMs(YJM=70O7F+}@`u%XF{6m%NgIq<6dbff5R%fR6JF(k^&qRY)14j$^9dMX)$hU{M zAD*zgbUx4Z-70-oDZhgI{G=LRdnQZH)%YzUzM(h32$hr_T79$0(UA67yQSPx|Db3* zTgH}?oQ%Iq?q9+=s<|Qju;xq3Z>u5Cx*IvysCwYbi_fd|?>qw5VG41DHia)w!U$8(6<*C@+4z-s!#nRcn~j9euW0sB+cLhoSC>ljgj(e z@Oz^0`(bR%nv?1i&wOASyyBDN2B&i;Oeeq0 zbmq?W@Q&+8|AL$^naz)>agO0UM=>X5dH++e+q1WSAG1tGBTusW+AiN)hHuvMBa0oh#S{nyH_RpNL zb3U-~evaYyvr7@mEx{J%fd}dydp+ZSs4`FD;I*xCPa6l+ZY{9iK%7LIvz~Kc!2i?u<2ziF{t{&v0H zV$B+Av2HmH`B~v(i{UMIR(KioI{Gcz5-rMB+0OkE$}U0P%J1#w=1crL@Pm;30$+&H z;uU&#$COZ(v{GJsa`I(q$jc|NP(DU(k-PZzU9Q5v=1@a=d2k!K5Y)HH=p;?xrV%_< zb8v``X6E5_`HtX~3LVj>_xM(eo>gRlc$UgzrR82_j7YesIUjd0#hGdj;>wDS_{?VI~F z@2)9*7}>WUISFpOXiDp!**?RtN_GsZz@8BDM18*;pX)ltG64>;UvEV3muxMazl4 z`@-KprmT32*)xQev~Lp^E|9UIj3Kw9`F)M9MgHCuU<#}(r?wT4YXZ@ zy-Q^jL*(+eiS|zW8GH2by{NVR@U>Indsf%s#|++Pn!Ndf`{Ur?dT_9WbLS)jmLeA< z0|dj;##+DndpWc#TuNq$Uf6#~%D%5U(u}{xUNm?GbxCg)KgwIcQ1{R8dG6xI?Q+a;ygR+x2^q;&I3=GnX|D zx(T)#(T=fM(QomGam1C0FDhSh{UqiZ{KmE#{jN3J08iMd)3GRY5T%~zA!kM0ORtD4 zKW5_HW63dT+xXV04e4^c3nJj?tJXuoXUTC?ppV_q!B2loP6D0_H(C>Dtt#GWXdat2 z{C4bqo(bRJP5AR)g@&{jUFGkmfG2EXU zw#NS=AMWB=swK3037^8_9%6P>?g`q8Iv(xv$9h?7@T2H~de;y|e`ZZ)WHkL!9xeD^ z>Fqx&Uvy}5L>90v#*PV$Q;Z%*ZbSMY9k>;L)0y=7KH5+nDx)?3$D}*u>1)CBBda~X zw#c4O*WOZ1f%Po&NOUHhDeJPf!v3+aAAg1{w(6AHoXwd%Chq=#?BFY%`{Tr6CABXf zbNQ}6Y+Lhkfc&x2+lHIjd!}!7^zC=xMX$AIbuUV*M8KT=mONqJCN#aFXc_L=W=WY0u*$MVm3^>5IU)0~lx0f6h}Z zr5P`c5wO#J*S~|9gz2Y;bFeC(r$9H=v6Kx$dm_p$T$AS7|6)$*&+P54r0o98cGgp?gQGL{ zma_J9g9H3NdNJ#=j9c3EY0=7je|Y-d(l?NC5evTz*|yU3*}*0VJ|dKp@4@gyzOnLU zD^)5l$wL$Iy``HAtkZMkD(-_;mh3GJbnPwe=XnkLYx^l*%N`r~e!W@XEY6yc{7={@ zu*X41wUT|{Pxf;8IoKY11vg@2qfRTc&Kp?9v+QGD-a^mJJ>ZERm4{ThP=_gp4ZyFb zUF+BAiIfTDM7DGg+oyQn6571E0N?IoorF#9DaN?Ew9CkrycAor!lJaj5PrZehhUbA#<2{Zwh2lN7P_{a+MUSFO%}v=RKE!w8 z+l}btjaJ`S$s~MxN7s|bLwmFqx}z-lqb+8|y zGSELZKWvu7xr;8@dxJ-qcr5&qHP^y#>MP$!M@GMUk~)1;M~b*hVl*R^PJO8&>&2H|WgXrdOae~uWY&1mlx#up0&G)?wHO8la|WGkrWIV`6XaVtU`X`_ z@JQq!zTz3aXWpZKZWF&0ZKw{jKcPNVzSWr7DZc01pXpo2Gcr)}$;imcJLc8<>Sb?Y zoB1}!w|Vq>=DK)oZFaLKnWg&hTRrkCjc+={T{Ac`^4@}^3(qCarJur$_H;Bh;clHuIntZPeuw9p3{D(y#kX7fya zuI>qJ{pT>2Ag^)N8I8F)WpG)74+t0g@NL^4&w|U0)=k<+&uU-ifQ5|3ci4|)-K{b9 zYgjiQh^1C~HO>-GIy3XqU%2Wv~n5+q5l;{%Z8#l=LXGell}d-x+#^rrIiW2tV3N9X}B5 zS()X?a>3YZ&aOV$6^gCIib2|13$i(L(>EH8`+nb zJPjT*8~Q2$Uk3W(Je-yE-_B{DA6 zy+o}O{Z_r}>n+zf;occE#@>kDcb08yfHEl`+j!EpZt=bbymor~I-7V7+JT479Ruu) zCHLsc#Fmdme@bpLbA+~B&8usD=~-$6U393?)&AAB=$}?{1bwtp8-sVu7-vl^h47_) z6T!pYhitd(n{bA}d-HBB3i#H;&`|$hap}E~0TWd|l=6*YSwm8xHFfTy~Z- zMCF%UK=&Zt!|2QUrZ22J0dH3f$Ow3Q^;=|x;YV%A>?+S@9L#-Q@|1eT=YB|^;}*W= z4Q}ZN)q8wczhAxQ%$9uSxx>#;-|^o~;Q6OJ*{Zd7LsTGF=LC{6eK6d8T$^fV*>UeD0EhZl_&^#YstqWJG(+7txz&S7SSc zxuG$eJ`C+LrqiK4(Y@$T^-WI|f+b7T%(BU3F%yWZ&^|DT;wopC(tXvzXIn?lRX~D*A)URP~l@ z5ubL=ZFC2dkC4797Of@6T+Vw@@n{F0rWi_%nb9RQKZOtQfZX0D-z#wA>%E!BWiglT1-GO#MOANI zG3O0DB0s5X@r`}O!$;ZZ7?MAce2*7*Z$LMhU&1$V^GN!zl(t2WwfW^}@1d7% zjysG)?j|oyomC&Wcz%T!&vtqV`V^(Vzn)rwAX!%&8BW z8z~SI*R7OtsF5rf=|M zPgK5l#&dHsW6+jn3~zzQGv3nqs`E^>Oyub{TzB?K-JG_|IHlI226G`=s!aVE)wS z*|*Q%T=qXwT@Z!2odwnPfpfX~j(_v*k+4LE`pHjB@w zAJ6=~Yy^UDzVV$*P#=1GQgcl8-cKKBn>xT*cCq&x+E(ArF|-k$XQAK2)1EtgX2pKl zQh5jekB-lJV?_VMS29NntQ9gL-F{rOnuR{l-vmpI|SS?(IIJ_WrzzXiWc#^aG) zCHdB>ZjF=1NII8bD6w}YeN4Q`;O)xi4j-)8TmGr?Zagv!SQ>>N*_V$W>o-*|^F#6U z;`7Q?Ae>U)nYOj>kj77P@^p{90^z z1=cEm1h%T4D!t##nGEzuzwG=)W$@rD<{uq=kKiVk#gSutSGCJ%PSgJr}Z*$rc{oo>b)Ie1)M$ej1udW3uId+&SyP*|6Nh4`8yR_wolC374siST_DPX-oX zvho#QFxBD6j?!7G%@z#L6MluCYX77gi9Xf;zterC&H>46*5AtC8==lYlA0f&p>lgI-brUiMnBKx}(6V^_FC3y-Qq; zoAdTOFMrp$CFa&1^)=!YyoA#oppy?NzldOAk{SLa9H<@XVd~p^>nX?m9(?0_PqRi! z)27ylrk~s++v0-JtcUoWpl!>#(X*V5UUBME=sXXUz6m|+d_tW~_+8q??gzd-e*^ak zaur)vL+4>i0k$^6wAv1S@d!XKVuEb!AEdT$+F88aK)$krx$sIHl-WvcJ)Jno&L zzk+Dt%JM>sy-H}s&`cH|BJHQ5OUb9O7Ch8|11HscxJ}Q{wdB)c&XUdW9{#F%Tg?wW zJOdh}t_ImjcrHGW_|IcU4ra&)AsY(%S!9HA-Qic{x^|80jy^^VuT>yNDfkyGjkK@% zZ(*kweLPwW^UiWsf`LhK)trqt7)_5U_wbG}858q(=B^to@VnmSzPN5su>OjDcGX4P z$To}pEsMRzgxNP!z9knG#~m{{*A=w0mT^*R#*$NJY&O+3mfTlkmCs^$8GM$0>;XpE zuw@_8?-%%8%k^chvh7O0-ZbWXtF_Lu{z$Di$1N+3EUD_xvUA)59;DmxYMXEtWBnt2 zM$h0yTbK~rG^aIwX?T$AAV>Zb+N8|f&oQSpR^T*}aZ9JO*IAQdjyu$q4)yn`Kd$Qe zvsEYjEtH8{p9N0J+D?J?!?NU_gQq@s_zmpx`2U7E)$_{dgH5?Wjtu-3CX>bcit@7#0tpP-GN@-ky`HU22MN8z7+oToKr0xvTsPbJUrnHc*2SzwB|s6 zoZ-`u!Jp*%8RT;5^rr5eRVF5(+@JbcDZ%-&9jre)bIXydS>fPMZhlUZw1P*ei)cTh5*e@jcXO^kwAF za3^Q;;Ul-3bG_xeY;r+mpt~G2o8B;}97U~W9?DiZ$FJu+Z>G!v__dj*w0S^yh%v@0 zU(dPSRr}&2jQ?)(mPh(D|tncLqM112B(+>OtU2~6~TRam#`50yO`_G2|Wy;O? zFCoj(BY}%C`V{Y_ThyjjfrE9yk!Qm*WnV&e$VdJH`jWz)XBS=na>cQx*%NmzFW2^M zAJp?&=7U|_j$I_YkGOxik6Piq+SmC^e}>0t-w``+$w7_^hFa*j!CDS1f#dTw`5t;eh=KLl0M|@Vk zE~8A$RcKq6oS}U10=6shl%w?Ju7lX=;Y|z9i22jm8~$(of;hK6T3)bZf?j2-hrI;Hr5eyd)4qUC>0^_^=m z2AqFFU5)OF_$uma70O35 zwAYUfv=2Fx?j;tP+}3>ar*qgxL|00zt2N^)SUyUf7Xp{gSBY7B2Gw8b5~m^yL@Uzq zzn+elqr^qkGykRg>)E}A|ISw)sV4ac8JOu;7ch%Q0QWZShcS2Ih3kWle?QFSak*#; zc!k3h^(m*JP3{);(b$%w#D3!shP}(k4*3ku5Dusl9~N@YtwNs&$0MHU_U@A|$XKvm zNZvxZI`Hr@t}2tDU+RSLUedZuyGcvZ*gYrNN*Xwxr9UW%R6zPK)`coiY9YA1|xuRMNM_!?ey6JqsVPTsTLh_h>9W@gL#Xz(1Q(d6m0b zHqfTI9Wj5w-P6r{s$GiBt5QziVAE*og$`=-tVLM^|0}=soLsE$or2Rq8)v&I;AgmSL)eCJ<3m^J&M}n>bR4+A)JJCuk&Wrk8YE<%IqINCt3%hr|)Tcr)rXtbWa z8Omkf5KR*kJPujxz_*~o#!5Nmz`Y;2ruq~3`u#8J8j*HcOY<#dGn5m}AKc6QNwF^V zsK>dY94}hF^v_IoHTq%3Kj_|TU_6K)*WYHKZ?0bE-eB1@=pX;CL{WUSBdFtDVS7i= z&O6H`C$V5xT!PwHd$gNDh7@T}bLZj8+|U~2B6RT&u0bw4ZVhrpbqzvUa;o^BvF414 z!%siUeU$6XT=l*3^N6lT;6t3CY|`2n*v*~jW2{|TJ4^PsHL@ut$MU;@_aCafKdJh@ zZB6Nyyg#LWj*qQo)yX_>q+C;_++Q76ZXe~YIAMrLYsgxUEEk}FU6q6J9 z?eP9oy>I9&P2}F1+);|Ot(E>V2Ag6sTu)i#hwlrd$2B_SSIw+7dYf6tnDwYPhBaf; zN_37WIMjLBCNE;9H#kM(tK9a=`C7O89j&(``oi_SRrxo}{=e34 zX08;V^*sCr9xc1A_{~kS7cd`XUvI(ZLHxW98-K#nvqgSmBl$a0_oBmh2j`+IiO>Hh zbf>*2GynMxd;giDwf#JAJWRcsSE*03_7?x3O?=_?-cH@>AsaXLBd@itlkO5DCxc|R z>?w+quJ?L_ul<~0~sT+ezJ+Q*ks zbG^~QN1XYf_(I$1@rMg9vc6nF8P6ZK@xOp)vF;jDy^7UP-Jh=1>xn1PKjolPJzB#H zUz|HEp0=-ZTDPZM5?0-d?;vA2)1s@Ka_|=)ysf`b!;ph6|G_cQc>GmmEFPpx&%PGxRqPAmzeWcKhWfrfcv7$7zrDmciT{3? zxf=2%@^C;ChblZPE4ndj$uRzI7Qd@8ebV<9qIU`(i=gB0nYb3WbTMTt`I7Q}tDZ5& zDx>;;$ve|d{{G-&s@w3^P`@~j-&LOaQPq(P`SLlsSH1z|1ujCLdF;j5R<;1MXtf5s ziI<5kdS8WiQfDvi)m!+xvZg(l#}7>BCBc_92LByjJ_k80xEg57uE*9$y)pEZwVFSS z)%j|RJh8I>s@zkQixHP0o5e?XcW!^&|EP;D(x35dm%jped9uCmDdr{csQ(8G%Y#F} z^9R}zEQ0xXzAs+)2a%GUc;=9gQApN4SqT^xtu#)6s7PgNKZ%Wlm!& z*=SRz@*SMSxXQ0yW2^e$p+;we9}LOIB0^vETyWi`zHo2OO3T3$;=4<-e`C`)0Iq$@ z<*y&xN1e>bIx;j3M|6LzVUMX-ndtYR^+I^&lAD)#QRe`BX>RE% z_Jbv#u2FlFmU;cD16mInUAMj!UwHbhSc{I9PVZ`HMLaRh75XYkCy9<*RmMJ2ZtiF8 z)t4=6Z#{(`WT#h^RW|A9d)d0y!()kSqU(L64l!lei!EnounrikKJveF!ujJruE_7R9jR^hP@VrRqU4bG{}9@deO+zv$)rOa~;1OGtT%$!>`~G8((713a8b1Jq=nJ3onfFthyH7 zaNz@{jG3F@a>IqogJ;zb2Ol1M`mw1cyYZ#H_UoPHL~cz`EV#b*Nd&Lw9DBg<Ed>XIa=0tmh6(XO8o2EY0`mQ4=Xg zPR!CB>F3|lJ~8~p>{WmVlSjqMLc2VV2!|QgJIojA+6w-*YAhSk6Jj~(y$gI~*8!`b z`-RF8bU;34HBKc)cSOCnVSAg`m*^l)r^ox;Gw2fNVXf$4s$V?D?kCoR@1&Dyk08Rc zD9^M8lN?T3p`G|TzJ1~AZmF*}il1+Hu=@OoUIV&xUybVS@{Zd0o}9YN%sJU<6+5T7 zr}()Ens3xor3d-H$R^4fXCty~2>F4WnWOUolad!b%nbt{{$0Q0nGGz;^#JcNJW=+x z;3efKTOZn$Xj^+yg-Oc0yziYFd>;qgouva6e5UfUO9+?PSizt8p`Ak>6|ngegCqWr z&AVy;Bf!rd2lvL;M&;BG?Z>DevXz_j^w@VX_Ht(q`(Qi0%KYBLoHG5;{FV%@_BVWf zt^C=VY|dK}pNeG}16RIR_-&fKe%Xhw)%`x{8JAN>Pig~rnC&MEu8oXK>KrnYcij!= zMJlCnysmT(JW+PLBx8uqk4}@7|6h~#3s;gOdtr7%(6Jr619Z}1_YLZtghU~S@7-cx z$7jZxKL-CE!v|!i6D_=kj&U({3J0PC?T=kn*;6q4GxVW`wS)FgB6TmAT-Vw^(Yzm+ zu&cCxG3y!Tv2x&9@G|AW8|HZ&AGh68A17Xv+;EJK;vVr?+GrO$%7Rre_Y`})j?D$H zqoZ%IXLiBsF)(io5?T0X;pX?j&E8Cs?}ucMw3FbKvC=p-La!Plvqx5NOB*fAQ{S`~ zfG)5{`*!+9ysr999p9+D8QU!Rk*F8ClrPLii#mSKZ_zFL8moS2-dXSETzg{1!@(2F z9uBV1`6L<6BZ2qEWY+;t_>c{PL%-gI4s+rDqQ!dV>4x6mUyvhlU})reBWEYvM9u)M z5m*N$7qz^fw+?NCw?bE};Rc^>7Mx*B!AHqip?o|x=Soy_s;SO8>J-0*{*wBRy;%A) z+xQjLvqx$8cAl79aF+dfD2K6OM$!9_Dc=ZeVAl96*3AK@|IRr`+kQx$;5E@tPE_Ka zyuW?-H!73*%FcHNd4C9drG6jcK5d0@={RQ{QO*d(Y-=9sy+xc|J^M!o^bVY>J+%=d z22JmO%JXVF)3Gz@+3PAx+Xb65#PFdO&sa&0VXLV7MgB7G6^Cf-Lf-md)5z_fVqe?( z$cJ8hD7bqxXWZN5nL4GTG~qkqNh^XwsrA7Z&aLtDCNIP6(i6lPALcB{sI_kJ@8B`Y zYoUA#iGE<>c>y1VfB)w4^548w<4YDPulpB&&6pvt66}lW9GH3Z`w-_mOz%@p6>v+x z6w`dO(;H+mp?~wA{t)sVbgm}D+ZdNPe<-LKPq zKD@UJZs{%6SIm~-15L^wm*~SzoM$h~npbKoa5frs=UBHbCU?|gLu2zwJ9&1~c{Tp+ zCTG;V(ina>ze+xw!-IqKmJSX|Hx-Q>%f!ed>iSvgb-=SzbkB9j8R2-kUhO-1UFZ2u z#yuCmlfwzxt*4(CLa&M+Rv*xRx9ul}QLs;_(EN`oIFK)Z;wS6qM<%24*Z6aIhF=i( zbNtI0*H~WnSNoT8-$r~+tEJzw{m=7TgyU`}kV%on(w+EN9!+wwb`3p}*o~I!i=w4?8cEG#@hLvHTHq zp)#LG=V;)3#_E_!MxP{`3pw-DMtBwo{65NK}mp-m}K2I^@$))^W zY;s=Blm8RCA^ANDvXfvdEh?Wn{ET@zi*bCJdUS4QJN+5M{rvOd{`~VYhG$H%dV|lf z-W3joOU?N|;2T^0{iK=y3;k3d_7&=fuQi=!e_3ZKuS$^DwR-lSmzT}#YC|7p-dY{y zKa*oc`x4r3mCaVT*Sb)1cLZ=YBS-aKzjaQJ_H|OUA^62(J>Dx`S+e#*zU#~PmQUnd zXr0YepK(jmv+(NtrR7$a-^{5R7aoyAp91HyC8-YW^?a9lw0=-7UOjt?-@>cPX#DT} zxXw?SXU?%r<~XyCdRyIxf(h#Tap!96|HFCK+Zfm`2t1jx1m3@r!;qG`?oN@cER=2jGYAx z8n?%Q+3ur%1>ocN(Ys$PZQz;ZZ1D8kN`Je2^o$ov%}%f3iK}_1xQ-9qv*I1`M1#kI zPk#g0Ft`A=UtvyU~jQ z>;9G(OU37(LLZpz6EgqZrLl4w=qvtiLUmv~1IwE~f_tn0g#WVFu{X_RLc?ym`wzs5w{kOWr zviFmJfbw;W!N6(6csm4skuy_tDZAhGz*?LT<{Qu&M6|9otLXofABFPrqly7XE@)iw zAqhJ8{YB<3bKXzZ?Rh87{Q3sZG}eF8*icV8)f=qi8Gaf@r|X4gS!)f6)=7ALL^*bE zERqp6@YtkdKm$53+7pU2HQre$a+zLhD*Tw1E@R z{lce0+4(eWwH1_8W}(?DS002}PMCXm2JhgjW-f`Zew*K-Kl!I}HpehbDo=;W!uJemEkB?RU&3nGZdiEzRR*Jm{JA)oYoAT}Yrs$9H zRSZ-L|BXEFp)X%NW$aIRm-$QlNTRqdxB`EPRnW0R8S#16V7|v0Q3p9U>Ju-9`9FU7 zJLV|%66oX&{GazvLI2)8vCe;F!exeEtd2&#HDh*oJEcQAo!&*KEhfJea;0UL@rOdxO&db(Y@R7R&$43zzu+dd^k;x;u7xI@@p4;#a*dEVleO{^*H9U+}=hQ@!|Y zmolH{`laiUWx1|$H0N&K2|U|@@BX`5yh|o@db@78*xPmPjUK+#o<$q4rWSiq{5%TV zvD>nys=rLS`^MoqeDdoSU*a|J-TDnLdRiZkvR0v^5POvSj2F>*D|b)u;+k8$ z@7G%UVtw}n6X9`lx77IKZ%X*1wp`&KSvsz&lZ|;)~%vqcB?Hb5oFBzI5CwP5vWiV4V z<5A%lk3TPA#`wsj8U7OH!rI(UZ|8|Oc=y{{GtTy7=$Sjuy}>*AZ0uCg8+kTY=La@@ z7?>14sxsIrn~tw%ZFZ-px{j|0-Q$0&hrQ7xv{$x@&@K5ZcTiv9Ic!?iS-&3j*$6y^ z7*E=hzS_c7HqW^5QdDgCBFVKTJ6)j9Zb>#3yZFYTxybIXQ-*cls+rv1%>9*I=a@Pc z$?gkYkz*Bm%@W>yly_g?DtUMfSN7?eVtL?7hjP!#U|*iy1Wmla?x5dY$cR;TW&qn` zpvZ+&Tq>7!v_x=a%u-1KF zJL8XQhkBdvEjE4G@IPpSefH$XsTY5%J+VrC-T#C7kTc1Xs1KRFCsC;{|39ej%N6*( zM15AJzD3k$Vgz!?+N|_bts^ceNAi;YW6;I00YHng)5TJ5bopp^bUV3_EcOR$ZYvBb zX2;5P2gCTss2=&xs1C`!+lMKa)jkz5S;QOaS*_M9rf&En_j*RXrCNvlme^ApvteD5 zg_3pGy(t|m%RYFRLqvAsRL1g`Y_IXHlWKj-8RgrVjQ^!w*f;SNdeg~>mVEiiiHCR@ z{DZi!;a+EiYj5pD?lbJI)#E!PSt}nR$=A?N+wx^EeX?Z+^z-w7opb!LjDvXHSAI`UaMm!o|1$TJEBE`j&s6UBb5D$; zDf2V#r&sPz(3pVFlYzauuYVN39M#n+dp5cO{B@iBeUfHheK#@K%ZQ&=3@7JdQ113` zA3L&NF)`q7mP3qp8eYP_dGX=L@e2yqF-Id|d~dbx-~U$Qo-Jb^HGSv@rui2n{rMMM z4$sM!u(yxF52PtWUvI~zESyAh?v_~2-D>Bt8#_0CKjU=&U?y-$$6a&&Y3TgR%lCbo zJtbg%6_{hdr}lN`gzdWiKo>CfOTIv>4mt(vgyF(&)(ua2!&`Wl--(Z(_G__WrgoaE zeorITKf-V6M*1D)K9$lQb4U3>=}+`y1Tw0YSRQELfZ&OxR+O&;mgyQR|T_t$aXP`UpdaN?h0p8tmXah3baRfc`*Q^|oE1%8L;tbv;v3!K-79aZBqF0VDu z)xPYn=d#9_m0t!e;O9ac^<1@f{n8uIikmG1r`dm2Okh>-WZ%Nyyo>#M*@3Ws=)1*5 z>~MVNF$ZG~ZRV9z0N-q`t<1?3_ibE1t$NXGu`?&D_0@p4UQ?fJ#q03bj{DB3HDs6zkA9No+fmk! z50A1QcxOG!`Y2zK;o=1eZ2vLFV>+-l>e zeQpJR&d-C|@zdZjKM$rpd=)a7tDEtoMXvW<XCJB8o$@y5hNv+r{w z{`yY)MD$S$zxtmKYRz1W4IUYe-x1zpuZM4j`~UHjTl&-!tXXTs=dCAWyyLoO1p63q z_1OydZ{|_v`A>*$m5&$Wy)ONAQxO>@)KF(HVU_$1ZR}k+HSH^LWVTLmK#S4XU$w zCbGWkn9^NtrTnn96Z^31Kg-%}DSygU@kjm?KPOn^w-fE7E?_nOU^#e>3oQAy*pZdT zcx~|R`B7slRlLOC{D%3TSr_a=4?k+{1!m9R?{H1Azist-;2zz0vloYUH$Q&t$i{d* zdp)lIja{siAH9co&K|EX9`X9RIVZKb86Cdc1HYwa@H|2NX3Z;|o^Q6=>F6WENhtTP z)80*~4p^-Me7KK417FDJb-tR`huyR(Te{|-Y=&Ei6A|1A;L<*vWV!adt`h%bu4sOt z=O2&^5e}>Vp$YaW#n9cDP!2kcr;VDa@GR# zlUBw9cDJ+?TvzuJ7HUkh%ro|A+9@l&hILaZmhCwd1r}W`*2(e@U6{q@1nwKbiTp(4 z(3@2hopj3QHL17~?c>8Yx5@5v@h7?%^WI=$p^LHQicHUfzt4l$#^OVP=uUK&q26e= zXHYhjiRl4TCXTJ%f!5BVFaM$PyvxvT$CQGhqk-H`WXuEJj`5FshNjTb+f|NsGvKrV zc_aI-&N0F-s+7oX3NG4-9#x=S&R5gq_iQ;k;S!53<9smkn({&YpiSLbKuL$#5pewK^c%uI@w8a`nG(W~pyU`aYpQ7D-p|{+}KFQ2nZ&`aHQEwoK zX&sXt2*!IO;pb})kGyTASL-#Dr)J}2+jGbKbXs{(eqp1m<%e7QP6A%7XNk$;o$ZZ8 zO}O5_13W6$G15nF-9C3rdJ8d^ImVFwM*3yvc_`3%Bci+Q?7h@)UgbseZs|m9EVA#l zLEjPZ9nGTS;OijUr+gue4vw7FSw0Q-biWhhytC>3$UyuXI!}b|kb&}>kE~i*c97P0;SNeC%`esmgo%0`|DVsT&J`dfRc_%&NlhEjQc3AjKbFLw<>b-p!-pDxA zM0-4kb*^-5&%+P@TlSIm3}^b$#uR)*(uEa)c&U6urZ_9e*Ax1~h?X42S2hnTBOcpP zj^ql1=3GhE{Lyr$7o7y`^joyt3g0e#Ea^99nHz27luc)RyRc!f6}c=N#*o3PZ$sDJ zUL=42pzOnGzFWKc3{Q6ASRdztWHg^Q1W9NwQ^X#tev_+J{b(=Z161K*s z9j4uD);G#)5V^d&JRI509A2gz1$#zh;N8%RY}GydZm`1s$d;kKfCkpQ5wD}tpH1)U z59eVFiEr3iBRD6P5nxI6QFH8B&f)tbe=*S_b;abnW4#g7_D9jRuG3z~o_&+bgYwar zTymJpQ!T3;1!rfCoa1jkr^Ab;3*HU~7@!y7@VA=3j9EJ{iU&CEL&1XG?78el*EIA= zj+Y{|#a{K_7JvJe%4*MVI^R#>xqM!y^KAq^_|L`{Y_|XH3hzGUnN?-&y{6q>_Dm@6 zkhj&tou6-lwC*r_qRL0eQPq`uNAC)&{h^d zOX)(`NyYQ^@6a>E)AG0JJ1th8{wJInW#t3c+C=>w$-euD)Ek3+C!XqcGPWjW4mji1 zDo^$mySNft+(6K2y)+oN4h$BcZ=3rr+Ke!+SD|+-Mjpz4Li@*YVtL~E1A`F<{NGM} zxi^AQsYv;kFYP<&cDIAS)pq{UPU?6oQip$R zuF}To@*g7~(dWF5)A+kHcWn8B|63cm<$q~o$?`&E$t8Usy20(>Z?&Dfq?0<{(pYI8 zO7`t|jC~?-D%?u;eY0Hj@*em-C*ujv9oxzGRlL_5Q9L-R2-vZ;0b`E3a+QhHM@8p?yUxsfwrt}!u z-0t)QOZk(G9*K;8ts@EB&dj#SoR%UhZZ`?Zt z!MYzAf1)38+-M#2IYRu0`SD&%cmW#CYCP5jimMd=#_sZj_^>U%Z|aK3Gvb~2t$k|rx8P*> zH2DsAU+?q=d(lrt-v&;rEBGWZDkgerANvyM+O-c)^9$*sZ_!WXHZwZVyB8REZL&O(#$CUoMt+PgO2JmPrZ+VgF2FCF_% z%B!w+u7Y1@-hcTV*S~3Ui+7A%FE`C|OB3g{kZxVAH5dL=d85(3kL_| z+}H3-b$q%)4@vl<>_u_XI*=4l-MoCB(3%IGX6xfCZ|U-M~>G92l^_`<&61Up+-vPa)B~)Oqoa>dTPqusWOavGEz6kUxK|H zd(EC|JoeHX9}bqTeK>fXoD4NNax%bYH2yZUG$Q@Lpp&oifvf#?@-Z-$O^O>5Eg_tf zCiesPm-AeHaq@xGTJDnD*Oi3n#UF(|%m;iF<(Y^-Asu3;Wgf*MX1n(Y8=e7p&vNm(xAL z24LO|-6(F#c3oe%(!QU`ym%?K4LU?gXuiPs6s|=-$IxpY>%L z8wmY~0rP&(3%{CoVnR zvtw8L8R9UMKV<}VNn{xI%non*qu5Fri)q*{727QQr>qBq5wsJv3f`X{fo~Ka0)G$E zj%cO_*&zF8hxaL9s0B`RP3+g=n{znJhw;p_Zpq&RKEnQ0V?+n&yOYQMY40jMN`KUz z;9wn6KD7b|wzh3*PwO4o-Wr{Iz>oOkgIdp*>w)2Cg6TL|MK5Yo@V>^o54QXLARQZ+Y;w56fzQ%jyhyE&8#lfnt$}dHZr@*Bi#ip@WGE{}<`?RNhJkt-p zdvc3y&dVOV1zYQDp)bzcj}VvTwiv-9nIj)c?R&RXY)yjWci?h5`_Bs}>0GR=Y{>8q z&u<&(HSsPg(?J=_4dLFVd&yJ$RM}H&YMl6f{(C=t(f8QhhV<>r)&XHg4=MMy6|SUOkEU=JP^$X8>=a zxIXxdr}N$52NvhiBE#GIda%K;ZZB|Fv(;nlLh?Uwtln~Ke@~!&>j-gd^0R5juSNbc zS_f$kPGHV9JZ~K-T206p;-s$UY~l3!v2D)Uu{$`M4%_h97(QjySY`)%>0dKO7CvRo zE_&GxawrrtzS@s_Zs~7BK2A-(~ujKRqukQJYF-dF$mX$k^vv0$!6`otTu@YA(9d{{XqBXM0 zE#XYBMs)TBYhUr*r#8Y*QurHA#f|3cp{5u9pLX$qdpL}Lklc>JtKKJ{u?b1$aR$v8Jtt49k z^XGfgDMeGFt(A-N3i=u79#;`?i!1Rd!A zw1+A>#7}(Vq=|9=la$vUsn%!c#v8AkKwg@UgwLc`&z%_aXSRjE`Nrs5=mJA?TVwu= zv!x5nX1!r0C-Uv**>AnHd4_q$q)lGQZ=GkSGWd`;#WVZRO-K1PmiB5hehj^=7C2+= zJ!X%@W`9I<3U6Mu1iGm1@!r_Teo5nYU;8B!*e_8Td@44I2eM`wQahJb`hm}&ff3z) zXl_f)pVl102<@Ba>~Wb`8OetH-7){lZ^iw&Yh(VTt#SWK_^t9NNOnyB#3lZ`)A`N( zV7y9m&yD%ByJz^9J#mRYebXiWCx38>Kbv#?X5jzb=y0A0xP&JKszW%Pj-RedA@e=@)0(3aW|joQ$ac)~2r1)iPt0eHjll0eJMzF1Y>` zjJwJ>qIc?avNOs*rmT3KV7Q$&ZT1OIB$tT%0&K=uV+9`^{T1HnTdjHH4(BOh_pGd8 zvFAS!^o^3=SjOalX)Zi~-SvTBgSFkrlFK*K2EUU!2MrsfV)ciu7mW|6&G~E9XA5ZK zMD}y5zvu8fP2HN0t*Hls)lu8~wW~edg4YZm6+Bh>ul=-E%7f=s%4Z{c|5EPF95FOJ zx3ug3A?$77qpGgG|8wRg36lte0h`8D4{sVR>Y&t8OLdTFQE43kt#7TP(n^)qX=}Y| zQ3n!U3~``hP?MxNgL z&*yV8`|Pt{*Is+=wbxpEZE(oUk1@jO=^krOvjtpCzXt3Fwe|_t;=}bVNq^Pvg;Ae% zzP^e6=x#QhS*$B^W)YdK&K+srioJDeCUuMEs-F9K5APA5?%ffM1$&Ub!ieg8n=bpT z)bZq*KDs(Dr+ciSDb0a!o=*29&yi1{GI`Z5_+c}SRor-r_SP|`7Jbs$7`0pJCNsug z;N9F~T5NYm7Z(JN@_w>?7WXu+3W}szJ^-!{Mdde8)^e2@)x)}NV15$ieUCI>1HVIh zG2MHFwth%IrhBY0scQWL@pmodeUZHC*B7ICfKI{Cn#?gF?mz!ODmqKkv1IfegXT3SQ9OG{Q*VRL@$$@}4YC`@-mXvU#}so`h%)KJj8C(km^)#^ z^D|mEv}Onn3#0O(H+|Pp{^!S|Gaw$_Q>yS8@q)}FyrE9_!aFKD?HEq<@JAn6S6%x$nR79>RTOoPeUg7%VY4p!TKlu zU;LH@oe-W+{BcM>j~q}2`>p0~((Aj@YwhjeUHLLm`XN#J4(b|8U7ut8<`JGx_#F5Y z)!jn9k{7FtICWUwh=> ze&}&uk@VQXnttyjZ7cOv`>lPF;57_*y+HaB=}V*+@1ik=4{LsZ^oQf5_H84b^lOr* zaj#CiC9^mwUc8p~pYyBxG&sMO+7{*0SfnGI_)qd$)N#ZIFk1}X-OC>3J3fBco25%B zezM*VZLBWv!ADzosdG#k?-K1-+eN2kOQN=m=X!v0wMSB#yQ4JbObO$f;Y^~^ts%{< zD2?FOC0NkLD(nX0?49c4A^q+o?z2(;+oC#j-idh$pAptEmo(>-W;b#M)meq}_lTDb zuI6ePd^`&}G5M5muD%TI6^_V`OM4~B*hPECDc)KaY$UyKPvLV33-=WMJYnIR!fk{P zi}20r0VetmZb|QX9AhEBu1y&`4o}5+btKnw_CmTke2#E0D|#jBOJuAMz5_$@pz}B5 z+mT!j{6#lJgVNL^S|V7VNFDlJO#KbOK;cD%ze2hM<5ovp2YI#6yMp-VfI%6VVm&Yu ze5!bH3h=pwbT#mOtv&c^fYGX3$_qS9-edVahGz^9YnUkuzOiov&qbs~#@45Il`VZLuwFFr(~5H1^wpvEZ%x66un6DQ8zC|6=V+NiJW9OjGtdj`rKg zq4s9wi;Z)z{7M%f8^gFY?+y8Zl5OEIeq~$8-5SX5T>sdpY^~jsRW|x7_?grQ-fh}o z?t9Ob{K6*LFv{LgJ}y`fXwSY}J9h4O2eLVo%|lxm|Au^DYsXyK6t@zd%NeBN(02Tk z#@w~G?IzhH#LL(Z;#dAm`R5^D1K%}IM&}kH1H(TSZMrGi>sMj39@r#k?|-9nlW!Wq zqxx-i^z9w#EaIgB_GO7&OTIbf-FUG??F#vgug&odJXxj9tVzo72ZWOTKWjx zi?$Ovik(Lf#6I@m_2>J$tJ8^?BEp%^fiwCp-!MC~zk1`=UhpzC&HpRDyY0wd0qZq$_#)lU z)ycUOv-dW4Yr?AkUO7MlyvZ}l>VddN;_r?Eu-NF4kM{r*;HgmhN=Zg`q zd*q)WUUqalDZ^RZ`ZoR)uw8i8{b>~M9J%f7arGCx*~vRNX>6S=U?6>q&P9znjq_uy z3%l>%;ptqYjji+Xr@M|* zxyl%LlS!j_E58a~AP>AtstSh`_k`4QPskwjmgooeG_cRz?QHRKY02$|`gNs}jSY@X z9Yd*OsGVh;bBy!(=fj5~4)A)27H*3Sy<6LO=m;DV{Occ=CY$Zl#r{=_k8tjX#HZlDDYx@ygmovW(Z@4Sgs&;V zB*#3-%AO26c=m1yWB{@!{lbu9zz7F-p!sXjo0BKav18xx3I_Bl#<+lb!YpDgm+s{16$^3MV=_hi$nf+^h#DmR_H zKKRB($mdC;J+AgBZAIkp#f#mQoShB#>lb^-R<>&odmCe2OM7F$whq{9&Rt6%6nEO| z+DjrY20r3ZMd!2*h^IK>Ve#SELUnLH&)0r9=QCH0T|j?8S;ZoA>SE(_R%IPaS)xe_ zk0*Q}{BwV%F8J za6~jfdX~FryI`sI$QQWmQHRow#iYr0FEB9v9${m{n(hjeSM{jQm@^CePjou;V-@wP zeBqSV!8-J?f)o7No)+4o_Kl`Jb)`o>N=z^UG zci=lz9<-LdO36RSK0tVLg=|A3xr2CVV9}_x{$qs~gCu=9!g-PYzKHIbv5@Y$u+Yd7 z{}Sa#&b{eKzH9xEjPc_=F9yxU7lTBmD|m3N4c$?G>5Ozo!*mZB>G9IJo&{`b>2E){ zsCtHz&fJ+`HNroy8jc-uBX<}K7aqxn@sZGB>7pm9{p>RjEA0vff~Pc(+k;ObWN1FcUQ{lG}{ z1MzImwQ`#)2eMClnxhHEv;K)ip70Ex<(|{CAV8+tcYr#e$A;&Xjdt3B7p1>0uuU^I zj8#fwyNWb|Z$0qT`!e1IuNbg`HgIM%gb_Gsd=?6xRi3dPoLAoW@70+p<_Gx&&$&^( z+&NiEMD=2W20xYaQLdSKS=0I!%^zdwPqa{c)0COW^}wmN1n1oI_}Bx-8qzD_YghGZ zpQXL6?9Re@*A;994^D=joP8>~j&YNH$#hzf>FE0);w8_tQ``lPo&6C}d_D2id!@7o z@8?{_r;!W&1^uq}@3H#L=3LVM-N#&^K9%)%g(*w)x{OiD>)29T-N1!8Q&VJL*~4Bl z(^ZiiQt+|TC4Umy3;Y=N`j}?{!m|m_io#zfJUa@1pKv$ry{0~F z@1pwh+wS+?efwj#JoDDQd^3GH3UqOxuxZaF@4#?u$|V>#~=qHs6i ziBY(Va5f4rBYfcxLcUk^D&I89Uqbx(hs1w^_yxqDb4dJj;)}#jJ|zBh;=fJ&jHoWb z49E z+b*DO=MldzDknjBW|aOc!o#BQnS{4RZ8(GQfhc|=;WwlB&nP|$pGtUll;#w|yUVj^$6mt_;M8Cy-}G*5`Ld>12}9a8`Dqb?5(Vts00tZ_8(w<4t3=hp&3hf)HyHoi^J0+jlDw+ko6P=ST@W=H3 zxsU8MO5O|fB^$vVM}hm>qHr(asZn?z;ez#>*QfCQBWSJq{$DP0uP7Pe>NnKy1J*Wg z3o@;AiMF#hYUsvCA?YRpTdOqKAJ&ZxGw{-$$pRLl@!DTX9;vf@ z;{f4CY=w7^)P7NWLU;sVF_^ggakXYY{!jS!s(&Ea;i1di{te)E3veF>>`Yzt&%UMl zl>Z?9(GM-}J>m{6uRjhCmwCWdnc9b5Mw!F9u^*%z>URz8(Aa3L6piku{X2O~*-j`Q z5Dt`&4*h}L|8e%dX<$KG@#VYOLu;=gK27_M5_{gcpK13tpADb*HP&K&B@Y;NZigq? ze2t^^IfTLUQF~3_*{kThLKOzOSC>u1_9F)5QC|)K!HOA9Wq~>E zuFb1ow2!t6ht&6ezE8B^Be9uLyCvIL04|(^JSan*4d4{}mNnJ3^-~A?Q-dE9N!J3t z90#5XXUUIkqZ4qab4xWAe729JQ{afEfhAUfO5rBN6?L8oNqSKq^afi|jb zl9QcHob1cZ{M0{`CgD$bZ*~Uxj?OO19+$ZTKMp)|Bt-6b^4Kl5;_5!phs zogP-1bh5>sw=`66cpP8AOK6`R-5YDO@1(Dd>CF7$;=$F|nRCWiHP|#s|C7H{Mkl;jSIo?#457 z-M7IB;YPI{?fprMEoiv^Z^*B}R~xqI&>yQ9`EOYGt0wI;F9qjxK2`Q3t=-Fmv8Cm~ zAkG-2oO$k=K`B=@Qi7cYEK|rj4`5H11lG!XEwWbS9foapEA&!jC|-GDq*cE2C_g+0 zt$Vym_qSwLJ_!H+Kuc!+gW8kp-bu+51$*6VBRGtwy~aNUekPDrq|`6n=cqp3|EGid zM>(#cW9D8Q=APm;_a2Gha4o+xPse{!#&#xgvjrdQNFM;68u!82HeAe^O4;JrIdtNb<01oqj0(XnwyoG2vf%N@$ll0~jwt?(*(Y?4S6a(AfZF zFPvkm$QA*9A0Lp=U+PXf*nra($z`U1BQuI!m0YQ-GPRrb^-vG>pH6u*pevexpCzpJ zCTOe5{y1&axn{vrc9HbK>%A?$KNqE+MEa@BbL@L6uW`mzws%+3AHh!fh0s+HGhvZD^o9Gbytna~Jd}fEl{up3obY%typzXA87I1tC9MxQqU1%HS33kU9!86({{|n(a$-~zL=flS$ljuVx z3oNJkTliHuvSrZv_B(zxe&?pb{8y7-?=yKfG7{jK!XK(&tv0iw?9Y>@&FZS0MO#D< zejU9}GUu3Ge-rO_-F&-##;9nV~nd^Tfs|5^Wy(>ylhLanqh)CeWwlE4S+zOaVeXXQaASCn!0o`iVt#!_TB zOX-Vjgg8@4TWTb??B-4e#wo!(s|QZ-P5y~m$1>n;DT>2K^*)0uu3tT`B;OeFkE=Z5 zA7ZrWz}?|_3Gk{}yna&U6{l1z?4z5|Z6^2)ZGPt(en&Xc?>y_>Mg5`&{qbkv3pC&F z4IWqp&Ei~z%8+bN>w2Bqg=`kv*_7&CMSaruVRvuj%{QFMd7f$OgAKq<{+Q)^Io%B$ z^IerB{*$eOxp6I*^Pl5a^^J*}{eKlxcTucQT zr;RtrKA*nHf3JLVN`8Cs26)IaXIMT5e@I;_=cv=AyImXXS3Vx54dD*_ zX;YK6m}hzLImYD#>Q{eNUTk!`_ujZ6$fl+-Zo21jT`=^Fl#x{(uXpg^aNgTaQk;B1 zT`+VkZNzpQA9Rw{mVC}!_}))NQ}BbsSn8YNft7zYc({jez|XA9X3PqN3thn?@Ih^8 zD2eA)82X`9GHrxamJu;%9@aVZTQX@Ytgs=cb)K5=3iAOd=X)z6NWCx?w+~Rse1!N zf8nQ*>F)|^pe>TqS`*+uz=3}yH$@Mp^KI?m(i(HV4c}rh@E!W?S$Xa}2Dc>x7Ec20 zd{}f_d}hMo&Pc6c^f!@tsy9J=KQ@XM@tU7X_fyTgtgCkRS^QPynG-HtA556fo~4_z za@-@sIXdy0(hqW%c<)%|l+IwNOwoXeZoY;}~cd>wMo=dA`oW8fad8%$jPI(7$I^_6naSj`)xk z)FN-afOBsj>PSo82K9}66a zUH3i1r3xpz3e_x;BxOZN_(#xHjk`DMK`hqTVC?px@`=k7-)j4VVtK*b$LoMfK8 zi=TMgjp8Pz;r%%02OnVi4IO?MovlgFJTvq4H?$Ki!Tw!QJoskf?L6=x{sR~lkQo4n z8sH;1)gphGSb!g@!U)(1MpgJE1fR0{e!2L-?X&2E+BqH=2|i80>HXKjaYQfQtaf!{ zgEW!#)aFh?r8Tx+_^18+O5_5RMcX{tNWMFG39_qV<-llbfBtanZY}D8zu=-6)6Y57 zHFZGzpNMB)T7iC@A~^F4{Bz<3Q*)8|IQ6rT5C7xs?$bW@w#Ee;sRzFftQrQC@%%^1 zzz<4P#%k7v!oMhk@p>SUx#K~8AG?UYMLev|->v!Bufe<0vz`T=()_jQmz`l=qXWzU zmpWj1STttHEH+72qr0dYur0X)Sj|*<#Bs*Z`!wYVRspcIoLuD;!v|Ai$QFGT4Wt3A~+)pqGurJJZdr2Vf(>Cp>5Je+dN zi+}cZ`n|ut4ZYa@L?lx%V@=s=|B>hhr32LXCVe-YcZ}h&)Kd z)9TLZf3f4lNxN5tYewt!P&S@-zB$G!^Gy847;D??kPjC9e*IVCU2_%aHs=W0-?*rq19i@K~?qOx0pgJT25xv)*pFW#;Cz-|RjGOiq<29zaobDh?CAkwg z32v@FeTC5`*OJfNLz3$Xs_TRej5jEra;tTXrk*76 zeP8UTd<@uG+|g2%q0ET%%i>Xzl&QIR()U9-i}3b05q<*4&|e<#)HvFF!+ylz)Sl?u zpZPWr&d*&3Jmu#h(z}hmgS|L#bOvGfS-jI-0X&+H(|&z*uj-xPurKF5o2EbTgNl=0 z4qSjY?5a%Rx4(6LpfeEq)<(Li#4X8mu|HcGaPf+vl?wmqRoVv36+T7qErsEX!aZU5 zWu+;E;qSge7E_ITxDT^&9dhHryvq{d2YW+x3j@I9n z>@vm>+sm}RhkiSeDN)pPPrQnLWos_qlC^U}y9ddXkEYIgs|X*z!-F30v7H-Pi%X~U z_Y6Y509{Pu$0;4d1mObz%k(#+xBzgpk&l^HsX1w+&f<=x>Z~*(m%1<+qJZ z`In6IdTs0D{^6%+U6B8sQar|c8~gn&$m?Vil?Fz2tgXdy3*pgKR_J3?{rE4H8MXT` z2b)_b8+VPBrhnY|M73^WEe2ebV z%hPU+k>D-3e;*n@5SEWH<`12|GU&SvyC~KPvxd=s_8iSIo3o;fYs^`0)&v{)#4~ff zgXq`qqnu{paX!?msLVU|KqJb+a~FEVL!IK+q-znsCf&NTPAGq$+xQQjH+Y7GM)Y47FU-+-OU9H=+Ai8NIlxsg5&=^jM?kmF{~ zF|<&2$3J8~Y~WeXb1zRP&wQTScn$~tR=KpxE|<0(&O9XCsB`&~fJ-6+PfXh~jO#?k zz#7)|#=E7kU!?PQYy9ZLm!kGo$Lnvl#DFV(5i7!JuzgC;4VHw!9V8y zHI&-|F3zwd3tS!u*N!P9_uoXHRG<66c#O2e$S>b(z{f_;U~7*lxW-%_V9YYt z$6Cle@K81H*73%h;WU!Hdh5%Pz{EGYl ztyDio+#MvN^N85B`OszCZY?!3r-LTGOZMzS6XN=1E~H9VyN45hM-&e|^$+m=&FEd{ zm84UR(|+4xzl|($6^h}*{2+2 zJrytf9{zhQ?2DG8!|BH+8Jn#>Tls;5>YIsw=xEX`*|>3JU_+95x0`Nh5DnoYMS0Di_|)C=^XU znNO1Unsb%re(=I1XjSAxBp=QP=`sGKGK=B+Uc&DUA%B*B{G@c(rzM+Z|8u-$ou>8b zbMULO%aCt|+MesUGkeEdEj{RMSg#s*(meMf!_yg0?e!%q(;Q>Y_;!(fSAqQ&G+u3$ zzsWN7?fgDCQVeYgL~CTr+`w;|$0EP#8~Isa%iX0Nl$}7=&b)7K=?UjwJ!vG987mp& z`M-K&>R#qN<5@!;RhzZ1FqW#b_K>ubNIRCaX09;y%A>KDuJgTLm;4<0-aEhK{|Y*w zy@UP^T*-L|o?+#x%`|?OvgBjjWkcGO!Ot@5l598``#5VJBI%Hi)Ocv!&|SL;?u3^d zLo#_A8r*;!N_?c&g-1CvBK(mYRNv#s_lKj$NwW54pzWXH8P9V94|2mk#;NaA9`s9n z=kZ+1a|sW~XJkip{IXB#V@&!S9`-GL7w~+7N4%}RAERH|{&7dNyIruyKN{y=*t^)^ zpxUnQG2&-B#lSu!9WpwTKOWJe;*s^H9Hq~4ro{%nS{LOg8TvL}H#e+8= zX@lta!1O9pZTmwM-;lO^YxE#^uB<;)dO?f))T1`&oJ^ebYJ=vt?$9f8Zbp9l_Y!`( zT6Sx_U$4BRvFq3alTY=yq)Ahr{D2p2p89%Ud9%c;FONt0l~!;W2)jr5ru~-lef*9Y zy#;*+Pwc$(&RrGxX{{@A=L=&#VK=hKG%`YmIm6g1ZWgq$_n#pxxdz;ly~F#^F=T(K z-|(B|dmVA&SI?BrhCJ!aWZ4x2^WZ7P7b)&`!oq#lH&656eC-v{sWSeXYB=wpH1VIT z?EO#WDTa9-SGYS2KSo$-z7hRi$8Vi;FFdrx+K~lD%L3^h?YdlJJ#AB3t%W+XaGPZM zIp#5IM6wXt<{v1A_TsX~kZ$kh(!tlyS((8gX^)^Ng7iezn z*&EU6>b#zH-@*L`XQ)SYiVjSLrr>X&PyJLntz%yy-Gjv4Qy+6vrLP;^eIngO+4aWG z;0*G_66=g^P4pyHy3#f6@97G@sP>Der4KtIIgiRzUE|27GZyl_-D_VyvYQzMvXNvm>V;7b;K z`THLa?sq9i^0}Tv@(zyjvL2Z}?kDX*(lY0p4=u+5Hxws)5WY>ckax3}vWoCtcOm1= zQXh2CGVWQF6^slZq0yiI(z)p=$mNn8R=BzcBckC zB4eU?0&F-7vPt(n)tJ36{vO8N+beuAXEgXuxOsjq97Flw*1XhMieK%Yzs2yWG5ZqT zXMxBGo)R5`@{G2`@8;xhFSWBB`#sWXJdoM;317h%gKGzz9o}T(>htg_g>}Jq$ZL3F z_EDD+o|p^Q0nP6u`M%CRLhUZnM$K!{ePsG6`5j=LZx;Seplx4b3`q~)8p?D(6U~qy2_u&a)7|NG$>Grq$YF^6;tqWwQ`1I%AH}`SPz<0)_inK9TlZHGm4)X?k`{+!~M+-7lmt<&UB0wuTy|m%)(bN z=F9_wpPB;-OIFuE0$Wz=oR}XhxVcxLye_$CW7xy z?$B&ve9?`dv$nRg&q&3b8E!oD6n5Cquc*(b|1jLgFdh#ZTX*pu?Xu;XCVA7EDt`Q{ zyeCC@MYoqAODd*|?jqzxG3;}+4$p-~eSCiD0oK(Ab~>BY--ma$Z}wuGjf{8y*3dO{ z;whaCu8zSZ`mgyVdLx;T_IVeG7p6~kfwd@qk((?$<37W^hB3a^SR>uq^hlTb%(-g8 z`Z-{2gEuIvoBg6|7UI1sl|-6R>BY)7KY{)bTcN~A zaFqS9aEr2<+vOKmcD2;4dUbB`<*tMKFTXLAvB;m)#!2+!0`}$f*W4kGey$rhs=V>w zoyt=irE5|<6)%~7wI1n5x&;?(Hh%hIXum|8_vk!e5nDXb{)QqtZ;Np#bOpbFXE*oE z0M8=y>9Lo?JSyAZPei|}c=RagHO39}eFiWVJPso~i7CDmd?%x~5k04%g`UcOie_IrP#(?;R#BYq^zZ}IQSMcW&Um{+4uOwdes4V2( z`|pUxh56asX=#jdvcF4J&uC?I{vVn0O!A|@G3~M(>3|ooA1qcLZL#(*ri|tE1Nq1H zEbEWHO(ea($D9?tsw+NXS?}LSyAgQIWE@v~Hyp>dW5!rBjz>nuvoABovUq=v@GKbi z27WE>t~rOYnM*V)@_9{M8*#=Ci0~AgK1i7TMk*17k&&fd&g}GrZu2&kuJ;?Z!kWa}$&d#8wyfdifK9<{^82e>@%MF!edMCD;^D4Jn ziOQ1W=ef6Y-%A?b16J)kw>@5TQ&#ctst-r)>*xIY`e4q_*9YsEZ`#Yp;Dg44ld*2r zhRm8??HNax(8=ZD`Fh~%!Q0s$1@;NP=sZ5Ep{?*tb#Z@$fM4YodK zLA$q|x<1G=7v4Q_e#I(XR}oLBy~9T0rSEK|{fg6mZ3A%=9Atg;Wh(EhdCzo*->2}t zgm+^rO<46Hmty{`G`4^V&7mxE8`fUgTg=SvfF@k#pQkjOL5i24L&Ogf4x{6l#vHV* zTl|j6tg+lplE@Za;ezT`nG5*dTGo0u(~aW?1R>kGik}RO^5CuJQzPpKcwmy@aI zUU0q+nh_^X-yWoI`n|faBe96+^X{4)Bp4pil0kSM)y3%8{RX$D{_Q}TP>&wty zW<}rIJga#Y^Qi7@p@qAttkn3YLR|R{iZ%*SwA~UISIcHL=^p%x%&d#@I zv?g+Bm3ES^lxuImPiqzjmc8o@_T)gf{1V?4Q7!%^%!g{Rg2Pw9@q?$!1~}*C7`uO-5r!udF0wC8GUnRnRq^dp;M>dWsp9hJpuAQO2wcI04*dLHi}25RID3 zIC6(cuhwhU&c0lUc*bu=7Mh!3AC_MiTwWwii7^(9bG8JhlkQ4zPV`XY03B+su0_JF zztYEz)R%KUEQ>KVWi>e1sZbv4ai3^*ZC3OmOsD?M;G31%9*p7p4H@vz^zE+R%Xyy# zuOawoK5DQ3_G)An#J4FOb>R=NcN*_gfXkcT4*88=ehGeqJ?$cX^@z_XD2^w?-gNYZ z$W~_%&+|rmtL4;N){7U6v0CDm)x@v(^)mc(Ifq;hUQ>K0daa6NY2vfRV=|YZ^CADK zegARHrxf^D zbSC0=8W}tEMSFCn;~?|xf4h^|Mt&q4hgRmT{97lmv#u%c!fu8zcWG4bF0Q6yAJI98 z?it@geEOLm>z397>sK$~>I! z@{iHL9in#RA4C55PPR&rP7BhiF$wQ#*BQi}>>GAoxjq>88vBJDelXcD$alJ3WE`bkoM)BR=G@;Ub;pjqsj(9fsFAE0X8^XSkn**VrUG zu{v|N@iyZZqKPx&)Zy#FFSB4;ji*Se7zd>33}A1d8(N^8n6=!n{QJ@JVMmu%*X@X0Dcqxm+U zZ`FPzSo4mI+Rxr)lXUUb_N(pErQOg8AH+H)zlx%%${WX4^!i=!DGfPuuRU^(KCPqi zhD-gA(S}s!kG*FABigk__)J^8_?ve?C;u2&w5WlPDE|KFjF zC2vj{f5C~8_pS6_UT>&leA7j2jpqg8JEh~5ZjOC8?m`dtUHtWEf2gxSjHmQz;;(gn zGeJ8~ps!X@dr$6fQMeR_k5#xk43Ad0Ck&5J78!D zGnV!?`d97>zV`#2L0uJO1b6n7iSoL@=>5|8Fra>w+fokogZt1Cwifa4S88XU)fM~> z|0#9kk#0-*v|nyQm#B6(rSA%c0c*Q1)WI|UjmR?5@gc*2pTZAWB|8#bD)wYe`0Eud zA?$w^z5Fn2Me6FGc}w#_@|$GT4m*deHMcNmj{3*CpHiQa)T=&Cp)U>4-g^hdT-9^0 zT?bz*ALEyKI!npj=ffAHi{ozUU>@gdl~#O=d>9sg68a~UZZzB7&b>y!b8dKFa?-Kl z*p$S9OLF%ez#7>JJX%V5mF^eB!Shw%b=}qRI_x)rU2!4wlle?vBvYxT?IEqwnKYzh zzYR|v{)wj9&!YfwV;aR%as1WN%28a389Y zB~RJQda#%EK)7b)DMi7di#;K-FV=%P#=jxYov5NGjO~Ljh-duhS*eBrYl0&>vy-`v z{G-0ap1c5$4(%5I*DPCL7vl_`h0mdQiSv0n_m_UjoDZ{{mx9zI%gudQ>){ja)6T5uJ|G7gBiloW zeqTG!7kRpQ?&Mj@)5WudNBgEuo;!HhXZJ1SS->-&r-Mg%C-ThYDe}PY8oNb!?!GxZ z-{ZN32fNZfc<#P`Ghb#X*f@2qS zA+38y9puCDZJy%l((RQx;0g}{-E$iy4<5@n*^Ez>4*^~u_yMoBS9>1i*ZaRwF7(mt zy~GDr{Z888kJgfRD1YEMzR8*?9KTKDXvWa>q_syA67|C^#_U8LupQ04%juPXex0-|z6{DFY|+D{r+=zo9;JhmN&25Fe>AWS#NG z!OUhdVQtWzxUm>`lwBBD zZpq)rd&85OSI|ssQqtr}l%dCj+Z<>ybN({gB7ZvSzxpaXtikR`co^r-)LWu)M6bep ze2Mi)bmJv+j@P1G`Miy5PDXJF;^hCfhjOn4H^Ddgl^vl$~b3i!atMx6vyOjhMpUqK{C2GkR`wItq*0%4LQ!g_ONEW@`Xw*G~DPk9ON;~ zg#>#V%^UbEuc@1Lz2uHcjPDANAst_rxd+*#`DX62b_ow=9thv|lBXUx3;*m-mKrxd z&e)eI55GT(YssumvX_mwWELfLcaiQp*L}fzu>sqgmaW({@Oov^a#jwvKRGXEY$BZb zj0bDCvxxNpUQhcE>PU?KaF1~&V<-8){R(Reb~JVQ(3ejeWhTgn^S)rUp(6`eJLd=J zcKYhNyNq5u(ZgQ$lO?|%ym%LyZ6C=Tq0L&0o?R54Ssn$SE1Glr`a3F?^9t?R5?CW& z3GAN5$T==!UTz84hg2k&+d|p)k(~P>|1YBa^(FT) ztDryGq_`&J$@Bglx&n;VXTef=xwIbWz3yP-{dZ{)!^N)67YKKf-{d!_|KiPKKSDGZGPLb zv-~L=`Th7={^S!9_+0D?CO2^hgmV`2bV)@r(qXh=(ot>fvpMre`J-7o8%U>f(EF^= z@5f`$tKT`v|Ijy;yc@J%DGEm(ymoG{Qj8VH?gM{jcl?)8d(eM zb>3I&;~?rpmdAN4_*%m3lgwFX-MeM@SYX#e-v*np=G+0{s{Q?3($+d*-=;@A1oD)J zMQ7+opW3E#a$)=Cnl`>nn`h`7QDJHb>uo z&bLJLO?;2a*~GVX!f9}`g5MVLT=xh@%$I6Ak0W1gX`A>!Pj)1dVIa@(^G8_wmy%cI zsBSKw*`I_~K--tcu!)iHt_6G-E-B64(xTu6(kN|fH1^LAXwz8IE8WTg{psX;wLitk zXIoeFy`69IL;ABI`ZkAev+U3p%*_Mpm>tE9?G-_xL{qR%e=YD4;>H7pC=O463o z9^h;d{S~c(PNbmc{z)eN1^%(%tHvv#dy}xK)ZVB~G_Op4Xp?AuadUexZ!_b??=m}v zy$NGaI&|56teM7^e;;W-r0o}YgIOb&vQ|>>aLOEB&pYdF61Wc4K7+m1@bSdIAlOp> zO~62P%T@!pdv`|f+j(z=jts=(3s)T6FB+zN{}!eDJ@1zf#;#)W7%P_z?Hk&drJ9JoXI58CxiP1FZP7bg1|ievCEyVas8T3I3U7z2gV02@jEP z;(#?l`Lr%FKetbS_KVIZkbQG!GBmv8eVRRk`1Jy`-pVtt(FN7vpW;I3Urk9m@I|g< z0TwX15ZqAOZ;-aeTHSlu4&-vcOLyGXSc`j^@0^um9MKhzT!0@%&U)i-7XDr5XfN_5 zH?XX^Zt{j~@SVb6UhieysOAUPxPKvBFRuWPTJ!L-8Q@1dGW6553wYJ$kT0-?v=q?& z^6T(Bn&+s6_I}Zw8b|B!G+%vaD4mDT9(*8h=N#)V=M}t$y9=TD@cYak@dV$9@`)cw@-Cb8op+D7 z(z3eee#p+>;{N z;_4Ga-(m0yUJ5y$Z0N*qtUj^Gc?jxKotfpqFnGvK|3SH|A=(d&rOm_e?>!5fD)C^N zGfyD5O$Z+{!UyinXW!l!^zKz@`O}vFY%uIMm;p@kVv!RLXd4|7qzkCjb z`ykd~aneF`=Y7C zNvl2%8$fHWC5>dSv6peunWCdUO8HBHat_^aC2d87v7&1?| z^8p)^XTz~ZUfC@BLVP6|KO&&2@pG*-HCfi`Jo$^r@}l&}UQ>dL#zcEMBU=TJKZC3$ zk;Vr#K0*(S*#^(dnD9JEKV?&-vMlB~w*5hE5n2O&#B;25e6zD5e_L&DGSlHgSNxY) zPX%{$iKflJiP~@&aIdv*(460{K6g;|!2T-#(@|b*r5+Z2RKKt>>67gnb0t-io9{}0 z@_vWlz+Mm-#nbRHO6%k~-^sf(4}Aw~N_L&`ttB{UJw)DN{@$Mv?enk+lZ{`Dyt_x2 zJ)1U}JrwPdAAfA>Qg%9lzCm)iEO?vqYKhBfjuydf_RUr|W5wRN23^B}(ObP-y2H$0 z(R$hA`~g~(E3OEx0nVD&hjT_gNqfa-T`M^z{G{f6s8dt@ku4jxWm)R6Gt|#q!Y0{I z6z0QY&WDCh^Csk(19@l?dB>72XRQeC0Vb`4??<=1ig28fXj`^&{UL3W%;Tu~o%l5}i&+M&ARDfnPP+YdhkL@b?Hk zoXz}JTUDn8E`i@ErBVOK4xlj;uxlAVfX3AF{TtET_~#Wv8qsAoV}nvrd|m0BN`m={ z5rlUpeM&H&4w42tpyoLDo*$&XSZ+^{aM}BE2YLg1kUe9**IIlvNNO!9K|4AYX|B#q zTJWyr1o#UMm$QD83!i3T(_H2}PZwaef< z{rbPORe1N2Z|RWk{TJVab07KU@(sA`=bLa2So=TcS7lxazU8y{;37>mkJ27UJ_|i4 zd9RV@5z=lRGDG&c+Z88&d`i3PIWu-fmeb^-?{!`a?CfiSm41zR_!=ZrY(u4?ywsEK$|^7MI@n)IN7VwIv@O}p zEDmm>KhjOoj^(tYT|Oz`3ASiW1TF?Is(q9$=pOoM^gzskNBOS4D!)xX)o05J`)dy? zn*Pp(Mh#0Z4%){7D}0oJqs=wIqn5O>(aU8|(3nmy9)1yJ!8;(wTpUcNO`OLBU#IU{ zbx0d-j^NxK)ooLsMR~FEYsd=;C)%0!z?<@oeh$5Ed}7gCHmcn{fRDO~(OAFESQa$a z|Q#st3Kyt5{m@8UW2owVRVDbAk0QGBiV?K=3>EIO`4wmUe2yKARP5%^@*c<-TDcs{K|`{dF+ z!OTJzvM6-$l$*}p6R2$IU$rJAfYGp$Y{?c@ZkUH%B{=YVXsUeE2-cFjDE&yaBcH2i z&n7xQoH%{|1J<2c3EFqy z-=Fh1x4s{lGB_c-PgmztpvxsMpN6L;|K0RcYZc?xh`nI*)dkiCzF$>-6*}Njz6(vD zpEoQ)x7-!nNguiM%pZpAV|>1tgbuI=0!GwNTySJ`=7~Ly*^g^avWD|D(nn-TtGg+r zGpycC@yvbU9d(x0{493@mDa%{Av>|!gChDY-HkWV=?ru?-Y{oPFy2}dWDiHL?MQEp zteiOM2GaZ%N3;hUfcGHUuQtt5y^NQ5C&AaDUU1pZaM$GzO}*NqaOaH!&xUVH$%{ls z_Lkd&EOS_T0@XW~^QJC(jW+7ZkWTx|EbpzvOWv(|msv4aI4L>O_fMKx#u(EPo4PB_nIfWz{WL>oQ!Ti_{sN7~$}@x#tgG{#PE z2^6-{PqO#0I;%d)tr5TP6|Ik1_~c-|SwrW#8s9ju*fEw}* z#L`=OZD(2q*~9VGH2Y2(WA?+cleW{}s?dg0L^rgbv)J$1j*ThJG=B(iU6E(L39ecA ztUNZ^TI-p!i=nX^1NJ>Bd*}i;Njq+)@0!QVUn5i2{FU4Zo&h#tx+zaMkf85z=cQiB zBl4WN__p(x*N>*Yjx$*U=yRO3A1Nd2g1_OOyAFCHIwITt%jw6AQ=tpk^~+Yn$^%pA zm)fd*?2VGcvu70@OXNb|+iGXO{4M6RhH+<7t|RyYI4|8vf;`flwDB;f+$WFTOuwdc zzs^>j-PzM_+8y#X{lHxD)$*M5`d|pK*O(^MhV-58Y|;oGGYws2{RAExJ{7^9HrljT z?NHxNV4j-wpY+<7Ini&@db-y}4%7(Ue+RgV&(b&9g(=_B1M(e+;NDD}mB9`p^K`Gq zK=uY3&{b{VY@Y5B6#p#SC9A}|#ttnGZ!9{uXfFB>#9(1```VAh^jX^X;jW$rBiw(7G(edP7C?%JR&zcwh2TOxny-m1Za z-NBxCz$NHZxo5~*63kymdn{->axR@~6wIsZ1Vkb=mhyE6pzJr+wuSU!?Io?2Y*38- ziTDfBsSKSpupMkth%@II2(#XN;MepC!on5#S1uCPJ|>yj737&$SAmP@>Y9zu(#WsA z@Gv&l()x=m?Ms@|*b%M>x`C;FpWF^?3z}Oig5M}y3d6r7thi0lZ&}}R;kREAZb+Y7 z5nO?h*$=Si-7cBG?9UXZyuztuw&ZQSqU3cxYVF@S>S?b(`?NPibKYS;pL4-ubm7Dc zr*%J<@@uR$*Zx~)xv+iII5WTM5(~Uq@_Z|O@bx78 ztL_3%w9Z3*AYSN#Nx~=ilDH}y>GsWu;V;uj&IP&z#@AW^~`_(bVmex4-FQbM*W5=_X zapG>c7oO&gAWwxnJbkifG&F$m()bIXr!Z#vJzL|L4dc!uoDh#+V&73JwX^r}k+p*= z_$?@MUmyLkxzoNDd&x(T`zFaRnJ@I#m)!S=rJ;WmjhV{Uc-J{oDnl4+=}1Yp3tGR& za%P!*wrq~(eUiH`c>1Hd6YN)|U#3!c8_WF4ZZApL&R`EGxh21m2(y5o3Ymu4XtC2XFgSnjtTugcCLrzNSgAbS$-7VZjKRh3fBQ_%; z@5#AWjqic%4(90&?>^wDepUUH$J4H77Zy}(+7c^qzT%8}H$HR|Zs&jje6Pko zUPQ(M>|)SDaIRVM59zs@SckPX>)ulFGw@W+ihGm!4F2Oc#rT|0#enf_d@xAn@2Gy- zGlROVg3c?E7kOAikIJ~fPnWRo$S-ooP>*anYMsg8ohfgPlYxh)Z`zB%fBWBMtrI>$ zpEoJ3Y}dG($k?vsY2z%OB+oHCl-Ktuo-gpo_UtGg>56n`0Ub@rmqIVU+t4)%Mry0t zc|7eL&YmDny;a?8J^l=9x`8qL((<7r+{@QXwy=_R~^*D z9@>Ww%gi0d-cq6 zA#uu+BCWA4)y##yQ9PgIfwwU-LBX$~usqm!pVpWKy-C{9U8)u98DmsvKHuru~aZ&$HrhgaP9l_;8 zJAxk)ukrmh<2kC+jE!%6ey84j+X4?hG2r{BqVMv1{4wI|!MEWmm;I#KWb&^BO`E_o z^)uX&Gl4ZtXYBLfVj5qK(70F*Kk&3ELEFGN@Zzo@&whSqaR>9xoZ;Q1d0HHiH!>Qn z)r}+R19@WEMc$KF+@ZXN?mtRC-DO@tFCtmbEUjH-@nl^U)6AB1<+0XoMK3Lxzr~$VX~wKg^tnViMcM(rSjd&|H60AgEe|F# z7Q(v=`Az1Q@m+Mn_1nZtBX>zaL$ighO50GKFBM8GDm8*Uur%l2Y* zA?r`<>8e!gZ$SS$0T}(2Jkl4`I65~B3~9&J(5qVNWRJV+zo<`RkBwII1lp=QwXGcX zeU@;fGmsozb>ZhU3BINtlcCJBY;oI?8FvtcE5`*PT1z9oLklclI-^t801_tm%5M7w?ld z{qcpTD(8=)Zw`88Xp-z6bbow2zd(G$cIEpXuozeebGeyugr{6sQT$DOuhuVmfWFGe zUiIx;1HL`Yw?FVrI4XVR`@;Qf$)93D^DX>WL!T0yKUlC&G)AXkRY0tJ~mkevY^!zB0cu zr4YvblDMhFU2^-vN&yI%xlHK9w_x#K%1JI#53Vd&p=|08!k z#`8U0$t3t%M?8Lz!}v0L>~bldF9V-%?C{bDL&NIGbO_V7&bO;cQ8TDr!4gT9U4d|%Ky;y&7Nxesr%$8tkEmh#b}Q{aU46|W~| zr4Ha5tJVS@R|`hOGyjboAH4VmZFJKc1Nqw)A16Bx`J$5C$tq}VzX9H*bPDHP;jPM)GokwZDybNsZ%f%ZutNl9@TfL#D zFEw{(Tzac;RrSD|jG>*G`ED&TvAjhdY+$qxjpek*FZfydtUHY!Y%JNxb(1<1Fqi&~ zWKSqP#dqA_yiT9}-^Q#>J4f&E()ks^U~8HC{Lv3^cKsq>aM(-wJYy{$mvr3wxFUFw zIkG#+eU-qcs(Y0`ylY}s=S2~wYjJfQ& zxJOX?3hMsZ>~V8{_WsTfeadKj)F#cj4WAUBeV4&k@v*nCPHGJsIBs`AJ2Y<`zHgwt zr`5mumfB>&Z)jgoS3+k@KDAZr`)SNUjThtZ-!N`z@KV9+wXG!;JM;NUmbOce7VkN? za%{|6ld!-k%AJ+QM*)75=BRHy#h`p;o&VRHZU4RN&-ZWqZq{FsC%zl|9p;jqiTiU3 z>w>?0d9W}1Ir_mm|Kf5em%5yK$A9@OfB*ew`MC^t#i9>flIsfA(#D(0%+VhFCluvF zY!y0=q@T0M$DZHCpO#?CJa2>+#}%fXL+@l<#zuZKwTD^E`-lPW3wf7}bZT*3kjj%6-)jX>GwNn(WphN9o&t4YiQ$r z9s3mY*#5txx7L~7e$v!gMfV*C{%wxrr_|Y_vA>KtYo!_~NBi1*d0n!lJU_`j-PkV9 z4|aoZ!o3$rvm0EFWop5XtlzMB{#&}gQLu2KvC_FHO%*?v;v+!wQQw>%>{6qAO7}eJ zCX~Z5He(GfnKk!5#ugh#+7-j^n%X2>QXjyDIO7J}%h(goT?T=C4?g^8Q%Uic`j-M5t+lbC?5XLS8H*m^QpR6* z&(*HRJ6>MmW*PfgF7>v}HE!6}?{w9!S=LjrpFL z?z-Sv;%ukBBD}COODo0hu3+V0%YERCcDGajC%a4DmQ2a(&V#2#_5ua`*Ef!GSH|OR zJddrLg%5U>fqX&Zflod+*|XTa?t9{SE=AtG!2LhKZ4h}&g>^x99{(lX>r9(x(k7ih z=;`S|_mcBAS}UGnzrS5)7pv`ejc#DNcPf3DnGW%1wnKjC(9IYs ze~EIpmca?9D<~c_$S=C^_t4i4%DK<7UE%0`EhF3_X}T$M?clj?H*vE2_$uSDvvr48 z;=P-4wYJ8vX;L}5-}wN(Ji7-sxUIqkD=c>`X;trC*e>_i?eG-e{rm{Gql_-OJeOa1 zCgQ(H*{X*BzIa4B!_pk4h*K2al+2`!N*Is+= zwbx#2?X^|s3w&4Lc?tTr=pnlexd|57QmRme5|8!P{k%*y!bnZ=`l5um^1-t&!^r z{31m2qUX51&Z)<)aERvzNN-LIm~o}NS-zi78hh!@xXD2u%Xp5$^Jm%caOj(|@L|>7 zqfKVs`8v-!i@h1jv*0bO6aDE%??S;ue&rF*jigpMjlBQv z*Fr|0l_BrVsuS5ZggpDncSoD9cvrfIOnLLWqXW!Kl4r{sNi(tLty|pN`DW}~Qs7;v z^qLn%R#80AP^z!8G{rbzyvzkx5qyu*cE9&o>O$Aa90E_x5M!QkEFXYPT<2z?Ipncg zhjSgUJ-3i%C5o=*C&?}$V4qv$>HrUN?=N}Z09>IQKFj#ihEl(JUGcT*h>;R5^@T&J z?xEdgUbxED`)Bz+WH0hU>|Gi~j>Nu!uD5##IXoUJ%{B63#JS619$`)0p>_8z&4tUd z(6e*BW0kvy9#T7r#bON>-2>ok4zwa!u#Y{Lnj0SPHs#&yR_or`R zzhX|5T&?&@Cy~EOLsKYQ>3T1jVVvSi09%%J9LIOBV?P#8>#@a4?so3}8~iCtOul#6 z2Wk3setA6o{uX?@TIRxcN8`tncS&Ze_ldxT#*zdLSjvwniTzH1tKsV}uz@3c&_s_Q<*C#t8;Wok1# z`9|bM#gwTZ%sRu=m3BmDi(Jk>_AJptvD*t3i@#2T^HY%7)DB1TM%ccKxn)r~1H2Y;hTxCd-}1u1 zoB>w!3A+vfODruI;m>*6mhJa4Hf>E^?Zjtv4-vO@#G1j_VJ#F%(N^MBS;%4*@4CTl zxKu2k2@Oa-SPI@g3LnupTuK?5Md4Nho^yZ>DN`(?`-?4U!QKrYsMoq){eb+C zoxy&u(E6eOzAd!BdN2KV9dV78=pArFo4bx4-)+)_hb1$*ja`lWmWekS=xRbY7KU_A z?JVhRfUz%ekJq{ue+R}5a=qc7+T&D>U)sa_2>lfXKF*J3jzE_~eeBoYr!>7&Kh)75 zH8yfZiZKXJIC=xRXMB_J0edRWJN(`ECugXhOLT7dzLoY$rzg)ofAWjgR^UVR%j zW}Fs@)jf!=lrdXN`&Sm&W1B0MSFdHfqT6z4yZlnlq?`o&qz!-T3E&JJSyLm=!XJF1 z$)>MD;9@6zAI|qU;rhMCr(1T01M7j0v6i&@y-xsR(%I^*L@zGgdM7@httsMy7w!Va zwVvu7SL$&hsU8DIG=U!7-oiXMPjPSe#fs1#z7ta$KJ7Bb%%0N;=kyvqhYg+CgPgrm zg1(#{XRrNYd2jKhGI6_{2>SYiMqh9CYxgF>KZcv~3Gl`kd6HRvGw$=YLr--j^u*ND zkYn!_@5UAS9GzQi)&IM1HxaF*IdkNh(f#TV#dFmdu^seAc1vY`i!-!rb}#-JozC)> zUN4NEUwTL3;_?VaDrRa`vbw6_t%Z08_|%J@Ap=z zZ=fB~%?+%{+MpfXSKjvdBRbp1^n42G^Qq55N3L^dH0H5y4h)dC68_Uuy2o3&7#w7w zqe8L#guWePFOc3|dx>f(t9AA!uSqo8BA>bWE;cq3+gi7@vRNEGzN<2P zPxU+5%M{eTZ4Pq7|_j)NME5dM{V&< zcn5ZqeX$I2niwlJw6Pbwh#$aU;kmR!B%@wOyJY71Ovv{^j+AjhRVn0*^uxkF6 zZRgitMdnU`e`s6$Cv2}}y;z(WDfX5}ttR8Erm?8`SNqVuUT2|a_xt&ShUZ@DzAAZ- z{c76xYv>WXNDbdBP0vZ5$Ch#3m@=@3#3w6;IPhric)eXLvk#Fq@jtd1dkM7Y^P(jC zKpIkop{frS>-;9!yQ}-nRHsFoRR1u#T6F#+DqHoaeAU%M9ls>~r?g-D4P#Tzu-cED zW~Gl~UoSt|2cp;q&L@Ve_VT`%!Zu*_d*^*lXI#?PCG<9v6!R9mlmdGc*K}!`_w^|q z6{X=H;hA}bdp(c+S*1>|=C8!6Kf~{L#a2}x-dAHay_nnT?aWgLay(->?qoT)qO{ff zLkih#+CSR-#dD%L=AA5ZEd42;lUDXS4vw#PABlg`J)hXG(KSE)gY0SSx0g?O?<b4 zP1}C69i4Cvxs7pe4brcSs}%I#*oJLm%{cewZ`QjPcg!~9Nb>Aa=X6%i|L$yeE_nDO zbMnFaw!N7Vju=O8p{tM|O#&W>ZLW-8#bbNXom{pJdwl+RcsO>P6}!vK#RC>=$xHzp zls2;WFjM|5c{RWNj_Y2&5q)W2PK0x*q|?!ON+44m?Brd6d7{woeF)fziBo=*Jc560 z-R!%2N@diMPc*5#R)Ty9))eHsfOFm@J98$KW35^LW~|)hrGs;O@yU%(I3AceFZ;9V zi_8XZ1ba}7cFA`}=kERhpM>JEi~Z||wjVeRyLcnt9z^FV8G0}0DJw3w4Zn>duc}`c zS;T3owe~0JgI3`idT9k7n8?1zi3utm{|G)5J%tYBTjJn=<1M6%kIl7NlaRK6v_8^O zY5#d4&v~BpZW;G`T7FI+I<(VqTZ>wc7aWZx=~&da&!(lL#@|W&3|S(?JIP1FO_%zQ zYbep+j1t$jn`gxgwuLw5>Vr1t#{r+@)Gx3vF4=+KIDFFqFLmqBc?fC<-vy|m4j*;>J|__1X9W5B;`Z65^Z!iDeO4u8)D$WDRp_TIoNQBHxxs6 zKiMKypzI#t2HqPt_Pc~14@LJax4=&*cdqKptR1qm@>9CZ#N%ry0#n*wYauJ6ci2cg zukMQ8A4yqVGrAnf<&hbyoFwgxFh)O0dC3%hED6RPG^(@{NmKpu`)IY{9oYMwEdKU< zXQKm|J_Fw&^surQX-)Dy@GUvHEwsU#IZyb`xbwhwzUZ&-?-=BoXK!BdZb#!L!CFjl z#X@)VSCA#;e`5Z$7C8KuzB{dZoeOX`|3E) zZNfC`1#C&Rj9(i(C4pHnXEcVR=zt_=iB7|zd5ZH+pQAs5S2UE?myzG&<4T*$ypNAV z&i(`ZB$^OT2Zp7~3)lbVP5HG==KF}XYB&OZMJEl`J;UPRqwIgczsBgoo6&tG8K1=( zYrk-~C;xK;kKoz|Zf7mt;H4iBUN3VMAHlMs?u2vT4fc-m?bdAfPfa!MDfC&?*nTc4 zzYGw6wx=)`YRve4V_VoelVCikER}OHZH?spGr5{)Od+l4imz!5%Z8@8DmFOa8DDes zMrR8*S$IH^m+AgulU~_gF8mUio=B z4xiTff#U7^Z$^)F0z8_rF5VIwM1JEZydSiDn{$qR(;7puLFC$CzEBKsWR+cl+2EXU zCR){=vNV0G`Q*pEmu#SzckSEn@#f5yzr!Mzb;v%^co=?SGsh(*XJyxyZ-Z}4pKyPQ|jYCp(l{;OXp~zLv4~TNCH0gWBLW1XeDx5 z7jqqF6efsA!M%0giZ`t_oo{L$*PK2Vob35;-v=y{N5_AHzFz^4xx`H%$4johjIv@0 z&dkQ<60&YIe(w!D>t1VM&DEMKIiCqV-y-)Y^tYOKTYyK;<9R-wclFRq{oh9i{O>Mt zZ{>Y;Uf^8Sre-rn=eg*1<62L2!7&@7cp_&l@@_Kt)O*%hajnJGN1Zd)9Ok93 zFaN)J>90wv^3v)&@e#(p(kQ>Yld-=Le5t++xQ&D3yP;pb$6wU+_er$rTIefj#+>#D z&{sA(PrKVwtlZW-G7&!L32ZkLQ~1LZt9MqKd6!swcTj!=zr;grQ@mRf+6%v7sHb4< z7acKIFi$UV!}d~#u`Vr;%MwRa?$#a0kvl-<90b^ELZ`WcM^>|KiK< z94MT8^nnxCR%5CXFNyLNfQLr>>m2-X!hD;w(ScA-5}1USV?MPqoX2J<{wbPV$oKQ2 zjAvk-Lz;YD(p+CmZ6elg=foFND<`${j@Z%VPmwQ{mfc!>(44K#91CCPy=bUDprPxy zN+zM6xMI*Gv9Z3+*s+LNCOQ&+E(8Z>L#NJB+f2VnzOvO`?4|PO7LJdg4168;B@^P8 z^IXPxJeTJDlaxQ6v_6x4rs{k5v7h*|v+~OB_uMicH+pu`>%F5WFPtwvaa6we(A}(U zmX4`A6wnR)($sw^-%cDuH~6EYv;Vc`;&K>zk-aWbrI+GA(n}-qoKG(UL+{-E9=&{p zIzz$PkJ@K_ugZ)qaMysRNn_Ht3Xg}+YhO@)nCHo3o|iI4Yg6r&3!y*8=)|UcaXoF^ zcqQ}b9MYi22x$@MF|>v{CdL=Imyk!k8S<-;y)%T}PcVpfLwv9Mu(eYcYs0T&^n=Z}kW1N+QTE?T2@lwa$Bz_ATX`MJ43E>br05F0cE}8Yi2^7TeI^wDaAP{67+|G-P^(*k>c($%2d`K_~@X+Y6eeX#>f(QChM-66zhN1ST)Ix zEt4L`CJ@7?zlV0nFH6@XdOI80RptFs<&5F2kAM^TmoyJ{O`2Tnn)EQwN${t>z@|(8 z=|1D$k39^(qe>Eb7aU{PK&GE<#$JN>fi`ipiQym`{m-vpZwL3x1r_;jXdc)Tw)X41 zb(PP#c}>zihoB>sxtTo9*WNvlvhcl3_IkIf9^zWd%C z-6y%PD)VW*fo=G)Y986O$I5(~kE$|XGq8`9`I5+6FQfBR`RIB^r1Lf7t+?KtbC)E& zHK_Mrs8@2v*t)e=zJ)!dkx+QOZkGfTd>K?1F7N59w_wL!FRfe%^ zfMtVarEc~UCLh7tYi^s>gV7`(YMDbd9AgGoC}~w5u^aj`}3` z>Wsog(7JR;bajrCMu1H;RLSJR1*( z)(#b(I_7|U`vjBfxQwx)_JrBvzJhaen$X|W3`%da!+VhDC^26d)9`@#)t5X)|T1Jlo$J7ID^8X2fh7&0uR_ywqfIv z&dcWsE1f9#skM>)nD?5QPjG14pQP>by;7gaZ|pxvQ@zACHhf;ZMLv<^s7G_|&|1nc zbg|IzezmOz8Zh*veg^l;4Zm3E-as3UcprUS$2-QWnX_mwJYv54X>fe8^03yXz2zkK zSj}l4IL6AfJwG1Z|4KqBeF&;u(D;T~&8`E6)HbU%YNM)7Mc2gc@kgFJ6T2lePAPp8du zk(F%ft?EWDrJpvCE}2g9LXw}6@flx9zBP6$WRXwu-L>L*`b$5ZMg%f{l7o^_bW{Aq z4-d(%fIZ=%UmoFpeAjF@lzRnP`xP&oeZ`9q8@-P8SuJa`8rEft7q&Q~3xDn|W z#uldmT@vNSk+9rD+8uGpP+}XaZ-jO~EzQj6y zwshaF(xau~1ib^#6DgE;9hI8mYo^R`_@~RizLl8TG4?;p$0wd&QLZm^N}&RjvFQhN`&|)^_0sVjb58~JsIo+ zz}&#zo9FJt4xd5ymk0j^_5d>%MJd0A_QaqM=_emiU&7b4&W>d_IpcEQa>NUyM~~U_ zopJbcNbmSV%Ksy9#^FcoM;WN%Y)ODS@hSNUX)lQM3+#{SB~IIj{Wl<{{2VsEgGXXx zEn%O-<_B(>dl(DYnGPQ5@A=l4x6l#MpOc8wm3XG5H~~I-R2aUAK4u`Cj#R8P_L$k| z&N-{cD!z;?qVKm1g-X4Z6`{OibBVWeXmZ(iF`jtEa(h=2h=tX>YkZ zzsmWq{9a_}h2PPyjA^q}DL*~_?E^C!z@^apx^20mS zf9NGCo9}DLtMB9&EL)sa(!8SYsU8 z1O^l5)Q5p`1xJ)Ueas_}*aG>n#^sl+`Z;fg^4LesHO{x%!#6#0hP5PW8N0H@IKifA z;H;xA?0h4#L3W1L4Slu1I?CEGykbVD6GbO}6VICSg+u9?Ec8p#iA7m|EaP1b_2tq( z9lpMRf3=C7K-pQ=x;b<>s>23;#<=JW`jdY)bY}L>3*W$grK>%s32Tzt$ul}pa~98l zw?K8X7MZVW0ecE?=o~q#(B-WLz6fiph}AnRedRdvMk#}Je_Y?K?&utf@yvILXs&aT z-pfy1d1bqOJ!r$(lwAvK=WrG7s(bQR&+BwPRjrr#5SnKWhR5bNcymZMb%c6`1Q%uL zojXt8r-j#*W`D2jP{NbOe+M@8OZ1*G08fl)UzlkVwuhI;*KFE54OB7c&x7llndifs=}3G@i$KT){NXDT0}t!57_wh7KRGW0QBSKyI8 z8iY%YTlyqUa51+;?cyt z#M(xcWw&MMQRr{5z@V@uRYP`+!lDTV2BSA zzm9LTep7iWS7qY6vH$nrZ17Jfn|L?Ey=-r?YeqG`@+O8o`we~itrwhGV93A&fuoLc z1e1I>WHVA6<@+g9-^-T>`$O-dbN#&Hi|QlMboNM{Hw7%@SKdgdFeF<7x}p7xi1k{N zg15p4;Rn6xApgM*`a8(q{!j8ZlmAZgr-S@q#y0uSBHysa)!du0pKWAbOjB>}ZfE(C z#3qA(j!WGGk3k+~9oYbVh|V=nYrG=z@6&tvB~)$tOrT8(@mj`MuI&}`-HD{-KH}du z>VBqwAJ+X@{{2DtL~fRU{~z2xo7{$;jj?~u2FWC@^ajL#C~u_ym8SZkFJSqdx&Iz{ zHUxQ=kIA!|@Adrt@9_s~y7e5tKIL6BMc>Rb^q1)Z4*@Q{{n z2!1}18S92@TeiLV#-3!^zcTmu;KVI>QxYC0`IhlhzD)F}ISRN{pZd01CI+*^eR&%1 z_jLL&y!a3{SlTT(WNTxv!At%6O#6fSj-d_eTT>==i9Q%t1MOqrR6Gp9i473gd^lO} z891BAz&SmD^Eu#XhrVi4>xT@_r#<>k<3sH^A@~lPc$2MBBhrS&W4+MUFQ-%M(f^Xgceto0#W5#z@1jqM)op#}W;;&D#cHWHP$4S?> z@RX4(ZC2l^%}LrUIzS(?UwylZ_sv(+M(SLCBzm-z?@Lk3_pb!?ewKRw4?avvJA&~p zo`Ozn|3dP@VT;s1*UDj{=p5+V! zwOuyq>O3AP@U7;$G_p|!|I!=96W|^A9jwKEC7E1u`Xpo}cn31gfY+7iayllgcIxt- zPMx)W=m^>%ekFOVaS(l^g@1Kw6Z3&NqucC9lCMz&+C?_(javAAQLaNim8tXK;6sT2vf%mcb$&aTZ=15`Zt})4UTtf=_X=@WIH$)` zS}d>gRESreUq3V)#EnszHs^OB0~k1^&(RvF9y*a+oep5X2-xR*&xgHzoqxWX{7uId z?snSMh6nsMH0RU?{~T@YITRj|O-&nOv_UZgB=3F~cm=m`Z{#b!mH#tq1los>E#H~; z&09aD?;i@ z0lpe$_&!I%-(+YqH_z|)l<0%L70y0924@zsX+3aX4ct|nNnX^qf~h5-i7x10?G+{aiI}_)mDQy2~D1>b?(k8vS{q{7&Ep-Hsr?jZEQ(zvBpeV5FI!>VfZ>_~5cHNOq{R*~f67 z?|(oaJk^*Zej@U#VzGf^WcPc$Fti)BNyiVwvR8wX_trqQnN`SD@E*!4UB|xU!HkKy zCEXf4a|AJ* zqkSR2{Gs+YWsFWNN*&T8G-g(MGqlzlTxrI06qsYNmBWmaqoS$RlO%7w@|UEQU>s;p z)cV!LA5FtsDO+ok&D1ZwLxZ)|+p2r!3(c9t=$#mXrmAZ`y$|KttHw9F@71?OKi{e# zty^h>e%cD|CHKee3s@`ndse|ue}METbqjAl+6exM6PBQ!SZTd?iKDYXi{&)9(OPbL zq0e)OP1!ow#~Gx3-s}8+*Mq+pI=z~J-ie9ASX*V{Aqe-s5-x-C?+?nCK1SvL%f;xu z9m|v*a?);;x>Tm>Q$1;7FTR%V^V<3CpdR?uNL1@Kn=|;}1;U5MST(Mt(%yy-iht-{ z>+1;j?cB3YY|>fK=X3uS_v5(#6!)5M6en>3_pBqD>KWS?F{YMS#fav7m92dS>H`xa zHUr+$o4gypufFlmZHZ_9HJR5qFy`di3-y3?i+?eHD13Tk9ckXuQP|LGrwVn1hh2od!96^TPB`&gkTx$ZA z{nKTk{j4F3ZbWAhYk!8(j{vXmAE%!${#ew#xUJod1hyZG{;ATFzB&KvQTKPi@#%bx zyWlp?itA{1Lj_+i^|s(E`enUhXrCB-DaMTLr!k(fZCokd8o#)$#vM)Wa_0y8!IzRY zo3!flBHE$)zD_y1-Vt1H=ZanrS=_|292k2hz1GfaZxhZP_hs5CALsw#dt{iAMb-Is z#`+=QMdJuv)Ke;Z_VPM+Nl^aP!8OZuc4wV?(~TFpxz)6B&~GDS!Y%Qx+Rg#)wfBD< zbZOCt)wXIqrnXAoG5e!+rmc&EwnC7^Kk?&PYV1_~1+ETYe^9Uw_Io=hTkFxuiItxE zueq?&$TGjt{x8NLV<&P?Fit{@L+O0RCqnS4v^(C`8M=L5G=ct-aS}-v%lQdhCooo1 zO83W5JMaFo$}&2;F6x@~PvDvrz;y@j6$4SQRAD}YcQ=!sc?nq#% zWYt9i7n*iyc^;sF;6|gm|-uB_#x*~w`>^-+Z~R41)#I1!i+u1{L=esZk4>B zV$QP?i=8%X9y1eN-d}-Bx>&_G3uVwVCj1zJmc}^x+EhX9vJg)lGgi%hS@f*6#ct>n z84B>A%Jd<`vUlp-d3{O_vM(iZNM<}4`Fd#GHtvXg|mu;8-EHRp9Y@DR`4ftY0Ucc zocEJ@%_pq)HCiifBE%6uQD9mpf)gW=ufFE-b@Hz#Y|#%bd-J3cubgg31otfth zAAArqgZ&llb+4h`1o`jo`w|c5DRK5N zw4rlT#tm*3&uiMlzKy-1-HhdhPN?v_BfIEBw71$N~}YzOp=xH1XNamJLIl$aETm zteKkPz}IfU<7rzuw{=oW&_1orB%^+h_6SztP-S8~1%?Nl>bdZTc$Z|3P^>=Umh75O zJxTa+vw`P|@};yZ8I*qu_ZkO_G{1iOJ(>~>vj*iKv&M<$6yNJ|7yC$D_|*R69$=Vm z6OX%lcX>{#ztULR>K#!mmgn&9V1#`<@Lus+*`#a9Qv=O>6q!YB!ao00^?XS51kBw& ze>Xmh0nenaraccSelfBLJ{{xm>G+TDYM*}brCY$h9es55JqdF2(r zz2^iUx1!^!PfIg6P&r>CpX4Zwb|k8g|nx4)0}icd-@wQNS4 zmF1^D={zJC+yP(N&HmU>u~<&8i=sd7_pDrzvv#(6M;6k^$OW%1%RA=cx-@iESnK7x zV$??)W;pKg`LufwINS5&3(_)nzo-45IlEu6iYhZHa}H^9NmJZ<^iRFwTYnc_W!N8u zzE}RxDaNgIybJAa?*`skoHM97MR67^hc-I>-a`5#n%FQbIS8H-SNuMsSH*8mYbDtN zma+F!el(g(hHe(V9QO{!PBk7#8?;fIV(-+v%|r5`wFWh}US<3Y7BbKFB{WaX*Vun- zMQH^QFW7fut@qL=MBToQyPPBKH1X*7zG?iOz`gd1Dc-bVSG5A;6J{U&0%B+|_88}y z!`m$60M-I+>~WHA6aIsrGjl%a@T)Qi+11T=Hzxl0#;k-d_sHLdzKv947S@nQX&rng z+NjIG=kxG+`dqTr9_p&eNr&n4e$lji#eN9wDaJ?~`VcR4@5Adpn*Mt}`z6KBYdD z59Z$dv&==Bqp_>5U|(*c*E^KoRc8GYZ!2x|dImRoGqW4Lz6mQFBOm71^4#socdXvp z?7T4LQAd2g%0HV6__SNQ%H!bK;N#@JmUTm6T6j`U6+(;UoU~BMn#`KPgv(1 zB7R+nIq?vCqBSp01n-N~o)SLE({`7)$`p%4u=-ocLauig_oR{U|&; zL_WpVY_Jltn>Q^2hIU{RzKqRo4F2G~yIkQhHos-BXiML5$oRJxeogo(#RRs{mflG!`KYUGpXbIfsK{9 z<*7FEC6Kef^c|ljq2;Cw-$-uP-ZAyPzA@v6ano41*EaNb| z*HO1*=iK@4$qq)Yyx6a&HAh)_@KHjR$V#qUg($g*GuXCz$VB^=K3wZY(xlVIWe>7W zhR;iORm^JD5#c7G9h8ARnRw(ET0X#s?ZdXY|uX*QhpVeypW!nipHJ*|UZkk?(T# zot33edDp}{t))co!M6K52g^xIKjG0T!7l@ShiFu5s>WdKN|sSSn04eBy4G4S1PoF7 zJTilQwAkOL(f9JLQ~C+PeSIkB3RjGgPIN)NQGBA5M{SC&^uN~}lLBYb%f1f(lq@kl z-R(&SPhMB$rE=J7$=48+i!Ed*%33)%o3iOQ0Zkm_T(#x2sX#kIdFstTpX67YHW#;g z?;y{L_Ku^RC8yWAH+)R`Dx-s;E{8Qf`vZjckB_CtVtE4J-#)9>{o-l<_mb77w^U=c z(0Ak&uAjaMe-pt%IUMq8>I#$hnvd1Gx1h&UU9{1xO(z#WQQ6Bkigz04`)75Yz3dce zCxXq(#N&NhX~bKX-a~XF+1rdA^3{XKF_zMOr?fz1&`i8M1JA=0j}`E zkwo6#hpIB_C~ujqx#J)AquvXxsZVG}Q=i>mSq7gK4NFHT8R;FX!gyLYEL~wCCBD7E z(6wkJCg@^y-%J_6O&r6R4pDITfn~X2?fy6=M`@EHK z@5IK`eMug+Tgv>Q}M0x zOHZ|v?{$A1^e-56U#EL;gbgCTAVG{9qmLEtkvnqeW9bu(JNW&?2zWv_JJM+XFL-sv z=&Pg;kRIW$!1*lv)2urzeDWC2FMLI1v$h*UcUqTY^NfeAqumyjhpgAY{?#zgtf!mg zJCkPKiSZn>?x}$$iM4*T+YVgJ12rI~$>wtd*tz6^H;kxFzY<=cH*^!` z`6Zsk-}UYV?#0h_FMOma2gYumU*!2<tAGI+4aQF`lyRJp{)DW+(&Ky9K*d2 zXf47X#$Yds*6_9I2Zo3(Ze$^?KcZHLr#02OaShJq9n+n4t;D}Y=!&HJkdZm#o_7{7 zYJZI6+(sLDlCj7)xNy$Kt~O=ro*aakFk zkGRqo2Jc73zl&;bv79Cidn!Ei%8BtjFl0$%>}!15q$fz%n5YlkBHi?WXkGpm?=ZJ% zZqfR(YO{<5W8oFvtLzU__AF>!ZBRRBS*vQ4K9%&UZ-wfT3~uL(ibX~~$JHG1(Iv(Q zN9QvQ)UMUOBH)EaL?7+s`3&%Fim{goo%&<=$HlDP$~!s>I+Nk73ctOQ#p5=%bu(XG zS)K#$>*ZVdK<<)mFH!tHGT;+6sp10>D^dv+i%&@RuQ<>N(Y3w9&GVh~n^RJuirHgH zTWsDnBI8A^70gS_A9gXccqe2yFMnPBXGi3i?C8 zLVRj`-O;OqYa2b3=uLg17-F&s!WZ`4NFJjP7-Syf{dGJa8_z2)jNuCpnDe}guJ*El z-^znLi+|i_(jE76LAqiFiO*lf^Ui-C!$1BX$cI4)cvA~^!tjN4%a2cXabD8Tj|8)fAzF$`S6>U2#_cG7u{(q8t|C!98I#hmD z?wvZOEngjTznJ?4XVkcto-rF;p1%ea?_!K~YHdx7XVUw^RzkNgKcZokl;J7ny&A1s~q;>AuIQoIsR|`8v2%s^gm~Xr+f8+zh|JqE#Kt?rpFU#BFP7Vbt6;eW8|@Nf8|M6Q zX!#~&$(zsd{b?|J{hbk|cduS-e7!d!6!cVcwJ=ViJ z%gT~=Nx3K0{f!>0`-fUzALb3vhSnq+2jT2L9}EAS9{lz2ae@apz7kwN!_~AsFZleq zmOdNF-{{LT?X+F+>3jsqN65l)&GQZUZtt3NHC8SwOYfz9;>hE^eY@z-^9jcP$0@&- zc+j<0kCA(7@lTHyJ3YzY@{hcRG53+S^G!L(0TFl$zG9sBM&5Ij7yco6=^*Dzn!La+ zUj+1K{yIftCCz*$oMfbTBL)m|jK)+byUvl!X5}6NpO>5Q^1`eJ_r+OhQy=vVNXHbR z%&|Dr-oy;Dc4$I}6JjntSvbgNDl{^_ps0Ot#d0Q3OtDmNWdZW>&VLQ$f8f=-7}xj% zy-s{~j}vD4CW92qvfkYl$6yWbgVA#H8sCE!oS>rZi*RbpjPU+ll z5<~4h`zG>lQ*G!g@~7&Rtk7znm&;G8cQSdx3HrH&4TSQ_#Kwu1s6UaZV0$4J_7>Bo z7=Fu9yI8(_=g`nekE1`z-0z9zn~5QFdDqZTO{&A0oZw94;iQpMmT>OxDeXz8CcS+q z`3Kfg`5o+6As(Ew!&~tB&`@oO>ztvX5YOTC4zI4bgK@OO8+y#=b0zR4dGTje`UvFR zCE(4n3SJL9HO>5H*0R}xH#ed2cA2}7v{v}Jd^9Gf3%d8DrAweij1dsDV$)_?IO z?~}6?H{dkrLDyAW#Xod^Bln@~F_m^?wN=0qwT~eNNxzrpK795u6>P9xH}`v{{+#nm zo@LCebDo=mZXR1~J3Qwgwp8f=t{2Q7s;h)%)ydxPhVQ7WETA0O&oa4wPqDz83;o#3 ztdY#1=;|tT@>bIV^)Y(ebGe`6=>D_rdEDz9#n)2n;jfptvNJCtPbhT@d!rQ>`YNrR zAWLj-ywm)05!Y~IQ{_VP+6BHXt*+?I74at7WM!wR%dc~is-y5wjtTm^w zwcE_&=v`FyiWwcw^i;pMqN8JI6ndSm_q0j8zgfQH$j;52gFF_Ok3&zP664lECTF~1 z5Aay?ne%BhckZFxhv@4=-OrY0Ylrk1WBM6mN_{ zA67#A(VWZFq`3fk?rq?VHXGZ9_GpjfMZ+1_wpLGC3Otg<=TnyGI>WW^mt*E?WY@_7 zf3nko-VEN9%!*e0*fnGI7By9U(T!V%;IBqsgzVMp>#Wv$o2mP13tbVqte|7{KQ6s4`weO<|z{oSKJpODT-@JnZ=_K4r6Urd^% za&?`&`GRfUMZ{v?@OeKLyL?tAeg>J0{ueKykKw)D!?mdmL-Kpme&P+pUUybw_beJ6 zy1|v+Zy=6%b-(c+iJ!KG@or*>kKxgM^k;W~>o)oic>sUC0dL}miJu0)P+ZYd+e;VE4!?C;CGpa+iab+vJQJb@i|$W%4U(q_9{F2 za`v?^%X22;)K({2P;AUAT=ufW5B-Q36X;dNU)sXfzPF!K%!x(r%u>I18qZ6e6_rzI z*Lby$anovZP9k*CN?p2FdqP(JD8@_;Iw();{Yk<55NrB+r#LTUeR4khpOAmnm1l&l zkx=H+3TL`~q9*n4LpsY-`wtj9<DRD5lS^u2cUN-5W%wtg&UsOn^@-)!|k9M|eI}{h6aZ^j98S2yZpOG96oa zSK=PeoD+TaA>v!s9oU>f&zAXkCA{5nH7=}Dzc+L&@6M__F!Uj=Oj|XWbmT+r(&-u50u7@y?dkPG`&Sr#sSbU3&{-6k2lV-)8LS;yWSwE0qdETeIB> zoGBeig&nn1G&DWcGpUuI!G+aP*>oqd$JCeBipqN3r{M4GX)Wj;oXkb1(9b=3<;oha zDXy!z3a=jkuYV2UD+?_ec{}gNk~!F=`4O8ww5&bT+JC5XOuhhJ$hZ3)Y?XpJ1n<0q z_&l*0J>EH#g&p2m5#nrMQ+~$nVVqv1If61e;p?3<*r$k{y`iA`u5cGH=hV?pI=9c21cv8?&L-dc!X!t-X{hW=c^d??DiSSY%(Eia|-!X<1aloN&@EF_P7Vsr-Y zt?7R6jx6Uuf`d@Dv$BNyB<)A+-#jQ2%_QslcqSFestgBm^kYCM>F1#Zi8zd$>XNPJ3E3!+x?+MPf z$wK!z{AsQRmv&zzs&AaTD)52If#!3a;(4!;M+Thjck+A16Rb;4EJTk5kOUJ=81QRm)c!6hARK$hs6> zu+WA#C+Ii&+4L!G6}+OC?cxQ#y%dv%W%X_M_iFb&pR@|kCanxVXM56`#joLM_Hg_x zX(=vaGq~(a+~@UVg^!L(-(auTLHxpw2`f3*55I^UI_M?4%SS!&pF@ek4sQY9AIxqq z*Msw>-1ebFZo8-R%?^AdrG5X>9! zS=m#*$~)Od+8pJ%MDs-`!}^3V9?7KgH6J0L#(X>1x$s$i!#?~b@gdm+HBX+w^W?-@ zPy8r~uStfvEDc|aSnN;4J}LjLXU>(p;6Kl1T`(8j*GZHq|1gzts>6e? zihizg>+{8sbn4j>aWoB0`SaY{@c)K9V$dcGp{^)WWLhiY}^=ut{a?n z-BxK`H*~&^>qff+#Ugp8WQ5YhvRx)<-8x9~DZks;muj@Xo&D!S{BYH^}j z`JrCs{+@KLS#*|lE9;bK0zA|gUCr&1vs0yh@4U~_x1?{dqUa$nE7zurGorL*7U_$q zgKsOu1Rq|DFxZ#Sc@S5XUuCQ^IvmaCeTiPLhxEJ39q8xp_YT=Fm37uzV#0q8S*eFA z(d=cULn~?Z0p~}sZatWPNoz(ok$#DD9`Evg0-W-nu?mk?6f<=jHpoTR#%}Bky&>-9 zLoy2-hUz%@x%EKV(8l+fN1$uyE@kVW9z_#i=FqFW;`z!MruJ;X-aOzdsqI?`^% z6pv=$<;hpT*#*I+re*Jl}i!BYP>E zn3~L;54TM*yiLB~Gs&m?@~;eWevbHi8#WkyAHl}JTKXyNZI^CQ@AYjBeCtDeBe|oV zepOw29`Wh&N#ZTOUF*w)k`oWT0q(4RZxB3Y?2YCO$0+LvjYG*J2lKnjpSyl^|GVI& z0A8=Wv$xWNjMSGx2aTL0KTpX?wfF}ehpZyGM`tMLEWBN`SNukNM*L+FeX`Itu^6>Z z-j~S}gC)aWd+J%u8mb4`;F04y%36cU->g9V+;M}&^4jNHI4WedGp^9#$p1n6{eMT< zQS@zRQjg|+(URtV*{Wtb;EFZ(7obu3qisVbNpr6?yW{{XUvwim`m*%N%A6uTvL$Rr z#e2;e)ROZzQMT54C&4%LEZpBl+5(l!x#bb&vIgQ`H`w=fvj4GV0_CXZwre1*+ffA!oye&Q5E z$C)&9L>AZsemxOdeVe$HDpz#AhwoHR^?g0>|BLrJGf?@I|A3xpui7tMM2d_T;Q_uV zc_CUL1}<$CAG6i#7(2cAyp9N#|G#{B3+0I~Zw7CNb-?)U$*)>x6K1v6PHSFy z&wgG*-->Q#vBot1$YXr+4%-K?jWj}|_kI(40EbcV@+S9+*SHvdrRP_9*7cR(`YUtw z{UUxDr0ou_iEMvmS8%^Gxc)4-{v^0Q6IyuMwCd&RP_lgatd;k4PPx@Xx|A=?& zXHm>Abi(X+(6?D1*6(tE!OUVgZ_dgk)|YkJ#5B*yO64xnpg-d2(|57??gwd)_62I* zreBz2{d@T=%jZ?;-{W4s(z^dH_sw~DK)S!O>4Y85m7nXb+|%N zMZ|u--Cr{)-e-0E7T2^KIHY%9syiV6b;SkIy2``^tzUdVZLyEtd0+->t2^<7<17UD zO84+uXhu4tP>eI|fuWygeR~IO)%Et^nlo3wAFd11ZsNLy??ofVpCw(y9t$td`1q2a z%JFyUHeLrRP^7^l>P6VI@>V_md+AWVZM+c>DE7n1`IgHt!2Rs&zmA zBWyKU<`?4oSb1y!z#@A}DDhmE*(Zp+r*Wb=VZ%54aR(l!hS1;UtUtbC*-rVv(Gx1Lw7Ql(0)h`1EDl@^6hQ-@br5Hc%;q(ReUD#$yUu1tcN7KYrKOC zLkr8`m;cn)WgfmR@XAktmnisoD7fCm)q+N_$4JK8_u?$}x@C**>8{g(c)9WSmkn zd+cX*RwU~@$$QCVW)4S3srQ|yavl+~QkZX&rGE50{oYJR>)U=WO&-IO7)z=bzh2My z_d=&tAKzB!RQtU2{!4-<=a2VZ?vKRg72^D3t57U24q3ZmtR-HzwYHyc^my{qT?((1 z%yDb6$7=?@*9&Wi_o21^eM9zF(PPp+*&3b!N4KR$-?(mSox5OSjjQ!7GTnslK{G1% zwG?YhaEWeX;_2v4u1nRqZKul@=!){GJU@H(Hd9Zlqq6TG8aJlwBY7`7xn#M>V6iOQ zcza2DapE47)_Btce4iX#Q^EC=;97kjD{S;yNQ)Jb>#fx$|8YD|XT74bP6)oYgX{6Z zwK2H9`ta!fDYVxr7R&QPRi8!piv{i2==Q<8U4qBaPsfkyTb+Gj#i!U`GV>MV#obL= zs{aGD<&~yw(1p%zy4%@!l}{^zzrR;_mTgY z>bxJgw2yaaok}Tp&3*HY|%aFUb;CDK}e6(g*>n64RmbZM^FAQ5x zaSj7IrIn1;Mdi!I8|k;#Z0ULDy97>(JGxJBHVAPmq$9YK_5D#}o(Uiv|1-F)4SZpx z|D8fPcU)lYpYEWmu!l$BOUj|*HUXHsXXEQ>*`0~ zZf86>gPrUZk^dHBjr8h!T~*diL7%rAu)Dl=eAt;q|Gf?D@25xnyLM4FbewS)BJ-*b&xS^!b#z8PUlZ;9nY^My z(cq8Jk$i@J%Y8K9FShv0x}mpjevfwz@r~N8z7ihrWw9bTabuR2%E;0p}Oz{;Q*XUe8q9C%R)ls@^|G+Ofc@ z`_YGd8u&|a{S#O5osG!((-;q;eQeoHW5?UqXvYcU7k*8B;J1p`Z&G#}ZP6ZF@zFUp zwp@Oi8)QF^+8yi(>A=pq4|?5)?S7vZvG;im#77Io^5t+t9^P;T>j=L+;tTRi)!tq9 z+&J~@`#Kcz`Ga`HSpM*pKl^l^N8hC}(F*_W;@&BBdegc853OBN@_F(3$rRul%S&H) zcXa;~d=rgYoEOa4V&3~Ev1n}TSe_Mc13g5z*ZUZ-sV_oB)>REfx9L&j|Fvu2H=n5N zyh1$cO2ul4r`O%*jr#Jcd!zlwHzM0t8y#0Dk#)kal%`C&kgz zV`~s@Eld2nn>nM?dl3Cbo^#uE?jOKLLd5Ff0NR@0lV?Ia<7(WdX(Q!%?cg|a8g>-; z0OfiP-)IbcI2bp&KOq=PHrG+c&!~0fdhDI>kt@sWb?+r^xK|79w&#)ma`G+ldCJ}g z{XTg$xW2;G%J}bI4$^+f_2vw6aMn+MAxM9o>n+(ozEQh`@)oWvTLu694$^gg>urTU zzA-M-T~41s4BwU&P6!==V%0=5D?Dto1ND>_qpm~_J~SxU&?SNQH1nwX@?>z3VJwLk zr|r(4pGdor+YaMIxY+u>v?`A7QF;(VN^|ik^c6Dxz)?+{j|d&jes{Dti+=4W`X@xc z{L6=n5$tEwTa3)bo=$x==%C`EMELN0{x;v}z241$Hu)LaJQbK56YtIYOtkT)G0!LR z?YybA?(5jnmf05?I^fK$GIdU*tVu;^V=goi;@ZyjSjr8Jf&FOmF9HwL?dm*{iM($H zM@jH-qLs?lkxYj#`8HejtKgTev3>35#e*F84?$TggZvu1YqS5zYJOXnvcmB z?~1ZuuhD!*e(6W^p#krsZxR=p@<)YJ8y=gm+#@vKYmYhey^+<32>=anMp`k%81!Pa z@x^bqS$hVP)=&5iKgr%au74h9nRC~iAL%?>%bZ_p*I3q*ytBU@tib~RWh)KefwrS* z##;$L7}jA%PlZ27lzJhgrvKZQ8DDtX7+H*dD!0jd>j8fqZspPKa1q%TQ_z^2D$-U;Dh0-&n`zwor7;Hxe>B(2sZzj%HlfF-oE;{=+ zXj;$BJnPyNT=l+M_9X7L-cR6ra?E)2RePpNMCG~ws_hn7fbENK7^lBsoy&p z+$1OXG2B$=LkrQXL5ryb{#?+b+N84uB$wKpqgIn*4Rfv9w#oZ5@YVpUIU9hyQS3wy z0&^Yh+)KH8@zsTX{Bp=A-IjZ~pSMI_e27h6hC7Fu03kJc~Ks(q(%WeQ&T_&C5kYnyK;Ej>nDT7HB4O5Z=px`S&YKj{sYKU3#^`K1e7 z?MXTxpPwjciH~pdK7KtkdnxUePLlo#6`{kN`fKIz1>^fGHQ5cs9l}SDewqxtd-5f0 zKbySijs2e1#_-&MYgmJPg}6B4!IDqTA??u#_?ic4_|(MTQW`OV7JtD1t^wKlQTBr7 z&eR%ue)$dX*Rv#uJ)FJUSvctXy?mOyn&&@(P#34olAV^)f7;8T=N|5twD_@kG}d9D ze9sH{XR*LexTO9{%F=uz;GOSZNYgwa31HU-9p;`R@yPO?zPAJ zX%Jm}`O&Pqg6IDQ?0c@+=G6kXbXSiy*10!K@xQ&AZ+}ewWwia;iGJI$znQjQ*XFnV zTjbwBe&JYUJgqXo-?F3pGOp!&?~WjEu+CWM zKB09+;xcGhYeTcHc4_0j5aW;7fMvb|Ust(PbRCqxoNuGK)gFDLz9gP>nfsVzEap>a z|ND<%v--PhVMCr@4(E$&kq6d~c3PcWJ45j2Br!NzOqrY`oF9EdeoUhGICQTub-Ia- zQ*<{0<9{H7MS&6hpoueA?cZU>M2`CPEP45Lp4lH%iE-Xit~C0F&X<;*`M@jEEjzB2 zaDdy74OEq<6Q!-*FR4Rk^!!$S_xYmy)<@c|eh<&r^4!X^aDFxSHfOQgJWFq-G_AWH zoe_2Cw|(5uDDrtzbWHwBd4FiJpMO60I`1#xoU$TaN5K;!leV z@5;F6@^1EB#EgMYHefTA4ovg7_@(;RD&V7bnO{fjeRW((9U425bwuAcP4;PxK1F|k z?kbC{FPt3n-grMmA6fwpq^nTA>w|FtziS%K`uK_SPW@?>up86PuhOTQ@0GTk`^E&Z za_CE~g%bAciuzOis(w_=r>{T{te;1=1m#KY-Voe#2Ej;Qa4$PuS8%U02n@cdql#}s zhwzZ~+eY`Fe~RWC)?fJ*PGj2~uSofQ;HGb@&rdgeDrs$gBxyZ-F>=ATl2$PTKb@Pj z=7cTFo`=lvNq(PBT624oR^pqy&GndrGTv!d_+k*k?SJzRr`-VDA$sHX3&4_%oVlvKhAN#_x!xa2&ZO# zl79t#$9NS_sKz&#PZ`rU`|X_k?USq=uvYcU$Tj6Q!IuFp_8Z`9>&rFo(Pa}* za@jT7n;U;;sy}8AJw%*^Ja$iLSw0YdAYD4|W^kso>7=o~AK3=IO826=Eok3L^n1sG z5BV+USZ9S8Pt8_8cp+{CIDG;Busm^}w=B)PL7qs~aW_PwPLh1Pf!)eE@J!!U-bFb! zG#RnsJLuFD6Gl4hXra@wI73bOL%DA`4fZC-N`0#$UCDn^MiTmFFYJ)sKdEQ>X7Q|A z*UoPBzK9+is_KPoCh*Pz~6C1$zv92!GLB37oJ7DfN3_ zx`uXBAAZyZC!Y@L`#AN9H=Rp*F74NGEMRO^j*FnL)WwbGenhSt_%TdW*#f=8M!uc}w`k z!Vg{(yx`Xt%<7ZY7QuQ7b=y``Kz_)HH|0j(LEM+|Cu*+^1e#9pjp`Mi>S@omz7U}E zwtNykBEE&)RC~VGh;J!hmZLA#^)VAbwP zW7x{BPp_$V23A=D(MJ!?VagB725ii1=1hCff78d!A^I^AN1k>qZv=cJV^Pw>~mv zPa$zo>f?+e@?qEJ;XU9&;~_e)r(fUx4ZMvjwSS7*POb;(sc-KODNi`F5vtM;YW3YPwA{qhy6ue)i(wx$1g zJ-eVWlMkb~CH!BEwd^t`*95i*^&cF@iLFd0RVQ`5a(`4Nrt{s=kv+;OSBC5r|3bam zOQ5pHQ1*qHN%WpAq4-1xK5^~UKb|^aOwc5DOP*cN`X-sFlXF5FiBJA0@Jl!Ii1GO< z^`#uU}POfiXi)4U0eJz0vxz3>dU#4t|;PimT6gaoM6$9=6;vHUjKK7JHJl zC*>Y;7yJxc#DOwdXIhmBfyFAhlg?A!jHl*|=7Yn$W)E6L^GLQnwTt{4r*DK#a^8qT{2?|~@I8r~ zZ60eNYa#Kp+`FG2J+zVQ zRO$YZ7#(6NHieG^lT9v{7s03Qzr($F2XouJf7rZdzJqJ_l`^NIei~S5H{iXl9~$$W zXjFd#J*QgUeb@%j8JUnPjes4sSV_2_$X?B3@fb1Ak__c`G*`*Y??XYeQbGLH3EdSzySx^w7r zL&QWD-1Q)Qjfr2%^;Ts6kc~bA?bQvrw$77dEq+XAJ;_Fb4{8va587OOxq0FaXwM=> zUp@zwG4UBC&XNJ&u`*}LIMA}EGiBfbnODNp!8?2_k8FrfM6sjxlso<(Tj`q1Bie=c zY~2UWrOVB--0ifrOMdDvPgoF~!Tn@(XW4y34>9of%5>Ju>_*0Yq0hUPKmG@EhIkFp zoP6HuSF`0#k}jlr;K#E6O?s0yq`S=$eg{^2U*}%BEA^1i#@!CCU*){MSBb0HrLtFb zjvjiXKa$rElXFgIw#UT{^2} zs=F(Y-@Kka?Rv=d#fy~(Su)1d0n5lbO#{8*R)gPsFb!PmJRtR@z7)j{rya&{=oxfR z&c`Zi&pA91c^15HgnoN$D|#2pM!)guug*6*TzZ~0wyPqT|LtCQCoqX0Sl}5OTZ{1z z6<5AYU3)nf=~ZNe{gMZAz{C0)NIoz;n=zJuSM^B8>!*Kuu6!=?EzZb-E2p#KWUj1O z?iycvf6ttSE;O^p*Pg)3&Ttouwr>Z2+s!$(Xu$ej)hn~r>R?ug~PV0Qh z_yB9-#4cO~U2iH!d1I+7jDee!i;tOa8^JsAhx8Tyv)doOzr?vg^iy)Ju02(oH)CINaHdju@b!qQnkNi)CDv7ldldy2k==N+bAn=*OI z5HrTvK(CNra$)elxwbg#=Q!}pxKCP+4~w!x|L{W2;r{A_p==L2Q;{_e+zx~v z<9wWScJuIiN;&f4Fjnw0*&$vKJsCRP6rRI1aSQ(Cz^-*>JL7sB>q5PipCsByMo zXO@>V=e!_MB9<0<6aPp-yUpA;ai5VNgm&KlC3qY+y+`;sMNl^$D-oVz-lGPF9}Pg~lL+u(>MR#Pu$At4(l=zGe$JNy=Mdp+$q z(8I*{(th~?BL~OI2f}!{vC{a=#$oLn$sy~V2fx+#joG`xCCGrwN-L55e)wj4VIW)r zzm>fMzIQA#NXvCqysHlne>qy$HTSJTfA}lf)?9f^G%I-Yd;ok5F#mZs4tWIGbDPPZ z$@_Y6!(0x2HfVB-63eIg=lWmVp|W}6pCbG0dhR`BZt0KG)zifsYim_5EcS<2F;=zt zp>{6-M*Ti5Tu=||Ncs`J*EhBCy|g;M#FC7Gl{i7ZkzS&8Mdfd14OCrQd44rzMH9F1 zyX2_)K2ojk^SsL)_3o_dyX$y&?*i&)ADLty{kbcnb@MHBhHq`eR>%Jn8(J-w|M~pu zY?&1ERJuf>Jb)c?k@WlhcJV;?G0E=Mf$*Gnbp){jrDDL7b~%@xv1L6AO2~~?E=BAo`-rTU;7?tZKKNjoHXfPN zR;gF=NgnuAUQSdcxE0-);4lBya$^@%dzkyVk_3z&K`Klo-mf-zrDwgb8nlo zXEyrFk%7KT*&)Wura$xHCH9aTf0}2{^K7f&Vou<17?ht&^Ym-{%6=-@M|nbYCYa5+ z7~*5HNhF~q@$^4k7s)oz(c|NxG08Tou&;{7goEyRTKjv<`fc)}L*J92J(bbiNaT7v zNgM z7mfAr`b>WXo57*$kx4r_>rC=3b0VEPDe}kG=6K;B#8-fiHncVi|7Gftucd&@A=~10 zCJ&PK@$`qRQ|LFF(RJA~OWlv%Lz`K2!q}wXDtHsIKFDM7N<6!rdDBx_d4p(Ic8p7c ztJ+TTM%$hZt|AuYgykoB@3`9a3&7+!S68&B&?%i)Q4Y5&o2PrD&Cdi^w!8kc_UYcN zD^~cEzDPaLkYG%d;papBvTp^+q3W1|cg42L=UxvSiR^s`-(B*8D_^HB^2@2N)2OSb zxYB?4b1VF>&2jy&lfR`NAIpj>@9bgw%`5#`pIzZQrTL8Y;^6DZ9xDnx{>mb>L%r~ot#g@6y>Z$ho(X?_OEOcX zIofETtuE$yV^00KKXjSvCFZ(;KeNfee|d^n&s5pOdOA(hye{B>2>2zBeQmea=x%f* zVq=lB4%fY?IMe+F;<_}KYGXY7iP1xSjHgv#P5@g18oO#XV?hk5#$q~SA-PfW)7JW8 z7nR3$jn>3H_K%Ex^r}4ecg9D_XIE9eK128--tfw9gG1#0{f>2Ig?+{c zuV^N>ALDpME92ODf;aKTmHrup75+Q3^D8IcK|eRR{`@@rwAfP-F6z2hQI{K>^jYd; zoI6-A)vtV^zjC3AjLyBr9C;{?yEQm4AXJz5z|F>bb*Ty^(K< zU6puljW5_lzfR_AbY#)OhJ#1b)ug*u`?I=M`3}0Z=;s^I!m3h_zj^>#$gHf=0y#>u zms3Zn@>6IbQNaGpc*Jt5e?cJrvhqs$MBkKW{HwRE@VkLsegTL68{9gVGgmepyfOtX zLKmWIN3=*kW`RG4HE7QjFZ$}sJ{Ow>G!h5r$^oOe%rrg@+eQB!wDONLtrez$v#?go$C zmErCm5O0jWquA>`@ZMwJ1zaxnq93r{xYWtGWQ136y3c-*GZ5&%>julgZ(6=p-s|j^ z27IgH?V2axV3%YW;VNg{AO4oTqbsq!i$6D_OXBMtJO$g~9`Kr4(c`P#ad*K(z=3dm zn7&BwF*v7u9pw-4{UPw9I;yta!2!x_x|99;{m5RddD`ozJh{w0e@apI0N}vq_d_3b>qJ#0t)Jd106BmVuo z_Rz?lj{b(MoK`;V6TyK^yVBjjbujTW(%)91zpW&H46^V{^6c_Eh5KuvU&UoBj#B;* zwI%&+)7?BTZw{ZtZ=tpv+G=+0GrF7Yy&RraVJ@*}N#~7P+<%+<@&3l)@$@anGn<&o zxb|>4uK$h`!11-@6r!Cy^r0C!#CA9ra?E?#6u$QH$ObGJ{x^LTJ;^^e8$Cua)Ns^T z#gXj7N1tDstiJm;@Aj=EE@1`n3H&eTKgC>;9;0!X(l+c&XH*=72fxcj>gQM_B@e+8-h|V|G{YB7_>?7hO*oIs5T;J#To^!~Phq-pR zzJTwt{CfHV(ofH`pu@a>3+1*wW-$+WS6mq*?k8PW z==KlitcpiH@Rdn+&W(Q|`>8rMGI@Dz6KE>cC55tO;}Yr5t0@|Mt0_ zcHyP4T&P2T!GDe1hYkeF76*30jWf3CIPV*Wl%u4s@*aD!*0@P}CmZqK!q?-#mdFwJ zj{PT*jeF3ZXG4GJS0mbA%ouEye7F+$p!MHBni_W*7JY|ZPFnPLT4GV*v#&*}~gU|iwhm6nCz0Y#pPM^^q zMqT52rj$!u~?Ox2i<+9GX!~#N#X~rfEZKt8-W}aEVa5rV_!b#XN-hrOBdg6RwCuh95 z{s`}M9)j$`H{~A;N8uab+Bdc_YzRH%f&@r<;!Ira1p|Ls5B!4{dr5t9AUk-VA zW@PhA@I2O9@-6JWmh);D<%>1vskhW~b|?G`pD;F1{9DW$rUpEeZw_}o{rXKkP!G5} z%)a*#`U^SiLo9Vq{Lxc5BQFP-N4 zE_PGt0|}?(@0g3eo)Ir#JrnKrJpKCfv{_^hNw=%5+k#X6PuUS=JDdUE!4Fnx&qjMZ zXLJ9r;Hvcg$VaR_pEp;pJGd@Zujg}JTbqqd3!W@p^1XaJns(bvagk25jxNm_NS2tfRA{Op#G+kKYG&-jgQ(Mx(xh9I`iyJj9E^3>)^rAwet5_ z#TCXba0l&ZZ9iRQSjVQ8JaV^tarq+T2d&8g377SP@9f)3f!e5j{}sMZ;fqoq@Jk?< zTp~YR`um1wT|#WOmHt8X`V6i=H{p^%@qqOoKCklhG%J8t_~cugbTW&l{EDIn<}JGN zrtoU&uGy_?XCJDJWD32%uPW=nw|8l6kT3IFw5@kG=bbF!z4nVBzopArtCE8buc2;_ zYlrLWxYqL$*L%30K-ot$Pi8U(&|Q20*#Oxt>u@d{c>d37KklUreKa!BmuMp~GdkZ8 zdSo7;H&B<>KEW}UKHN#!B;)hXtV;$qWa^oG*BQaqlB6x=tI)e|B8!-N3t5zB|9PSA z*#mABE6kl)2^$-4wLS9b#S$}DnDZDiMQomo*(KB~o*+1MKb7`BCs?cRFXFwPA6xyM zQ2jlhUwtFE&3nGn?>RhY?FryFI=gwlp2bvlC@ME9*@^G;T)xu}@GgoEcZ1J6uf3KS zdNwQ$jlQP$4V3!}@89CQ!qK@G1@Y{4Ufk81V)9b&Qkm0ve@+#*F~)G1`h}N}U&+sE zSNFuQ`w8B2wifT-g?$(OYQXhB#9AwOv_@;}p017=Ha*swr9mt5s`%uducAX`8E2l^ zd=s;p4&sF=}jf{P^2r3Nt!<>`7KWumI$4)NZ(G#xXJ{IeK{jj^; zR~)JhjV`IeqH&Ym;b!2oz_t4Ik6d5K_rxstqNQj5Yjju1Y7Vr2z|1#rs`C9M*<~66JmkGXP{yI-GoPme>PN%-xu}8l&=Gmz{EAg!U zHrGD+=90Z@47_ImZyH!N#{a@|=^Y*5poWh#!Gq}=cocn4rCn^&Bdy)o{P}OdJN}bWio_n*l?zU;& zy2evSfQk4*Wd4;|U;jcT@7 zyNLN}WxdT7fuHB|=}SC2Fr1@5JNR~-Wn-(NyoEn76P?K;pWtlzIfL?#P)4y0(k~T9 zD}T`<>QlcJmzx3yb-*bc{2tv>I$RDMDBo7ZhZguQeQxsP7ybw7uI#&%y&YK#-2hqV zSjKEp5*(p-j!YrvTLL*;z8UEk=n?Rzp2~R25*#4J18&#z zE4#y;{KlPgSU-qM7)oxmUHsTXxs5Z?Rm4wXL&-SL;yjDXC#F4{%+L5S_$1o6e^>Q> z3in8B=`QZS$!~JZc&uPNgahG4{TCjD19PS#IQTwx1=+Wflu=xzo!v0Ji2GXn$WQ36 zWDUiSy!)(qhR>mo4Ay^mUS%rnU5;!ZS^!S?1+@N{?BbUNlhfqD7>elbPd7$331V1? z&m$f}?Jyq?V2|*IdZe>WTAnRUp3ghv4V_J}Yd&?l;6}O@v^W^aBc1-Ez$3lU%f>1$ zWgp@`4o^X@-w$pKKbwcVqOGb*72S4fo`Lt+kSp0}q?Db9&9GDPz=K=Zudu3m&$`z`EZU&Uz32*A zZ_T73E6|upX5GxUtO*r(MWA>LwNV6K{npNRw5vSlv%r*wR@!JkLHVaX8u1hCmMsgb zdqLnWEuGFU8RLcMztA}2B6ybq=dHBW1fGr{+pPkYdcDVz&)&;IrH( z#=O6ld)~cW-&NcXRr_`Nm^oCy&R4EJe~oL0YtbvPY&>q8yOH&9@IU9wt6WSD9QLMb zUTr*o$lbV*=QVyXgLzz|wGw5dcZ%k|!*2o{$UZUyTHJBT=%Hy%G4c@5MGXXqWdMw8%AVmCMY(^;u( zGVd++hsPN=>3eb7E?SXK*T(-F!&V}lHmP#?uCT77_iY{PyScLQ>B|4FJY=f>K=vT< zRMj^4=2!H&)^@ViHqVLk8if9gEM}KqHn|Myc#o_!ayZU91uuzPFNgVTl+q^cL(Y>16q3Xm^U@Lx@$*D@JR7U77s-xtGIqLFJ&u5`DqHEr0gc@EN4& zNB#U>KY3xVzkCU26)br!Sl;3KCw8=YRv!Jbw8={jJnGfuR{7)d$dtM5*reHioIMcA z)*%0``ip!ua*((P`DnEk{a))3~W3 ze=~OMMCmT%ThEX7`gta&;SprCJ?^uN;eglVaXuIJYuU54_R1eBd-fY;)*|* zSbdw04=Uc??e~0;m<;}vV$B!TZLMIxUd!*RYsD0B zs`HTdoQ(}0{J-57_{fvw$&H)^?lVkP5^!@`)YU|b9@^3Qkm~L9#tc<-iz6dF2|oiTXtM(E8Ri^TEVmAT#N`HKx9IQJ3Ub*;{M; zL~_f}VrQ}C@Adr>uRl966KUonmN3`*YP#6)cqZG4XU6VBb?;rR2=lz81; z;Z}_iXR@HLaZauF!geYqrNt^?t0vB=u`J)Z>q~xUtky5yhF<@+3^Cj4uXJQ2B{inUk&F9Tk96YC^r$U{pVz={p0 z(v(AP9KbdO-0>WA%9ynkSTl$EjSr5wF(M!KzkSsL?j^qTM$vMD{9GGSF;9A@>XdA* z_{msd(0lgwZ+eoO>a(u@9maJWG^71TD);sES|j>DiMd?KK55&7XMU&9BqKAAQc6Y*b*@;S;2cgUb4v*~A|5Us~4t-;!30WI4( z%F;KBT*vTQNV_utrgX-{baNKx)xZmF)XnT0Rt#gtS|3hkFYHS^&tQ9KVm|4c-!cB2 zCsg?n&ozIWh-2ExwQ#JqbUt*Fwql>|tIV&$*C*f_kIwpEW+Fz^QAZ8>B$*>}G|U9mLr$$Zbci+vYaA@}s_4_}Sk#GlbGDZh9E z>n(ka6Ox1D+7Mn7*^|P7xyZKo1*c`eH+USm62F`yf4XcO@L>=8IrVs%ZWHHtz~lT~p8Xy_ zrS{)S2G^Rf++$x(j{kgbSjzOjE+70!7e_ur#f2TruEVbj4PXyA5&UaUg}$?yQ`)zA z0?!(=-!=64XXxTSL*@w(Up>q?=&WqP#Tht^(T32o)*+9sGcsD!n7UFK*~Xwd zmB~b9h~F8h!GX+5K1`ESnf!NAoxNjVkUl)Nzde-2KG!0;f8#2~u$Zq1C*s|UPj`b| z=Zc?bOg4od(_XPczJi@7t?@Hs#~5n-ZZ+eF93`Kx#+2vH1_6ANEhiC)?rF3%A2 ziw*w(V>$%P9b@1-y5HhQ_0Zh+fC-;+@C5f;KGSOLxUSW@iQi@X&fq`8|GsNmt=ar* z?#H1s?PU_JiRWMsU@y!|jN>Hnhvr83T8zFmi7%XbWhI8cCzf{~id!Ww>A3zK>MwMo zy#}^*V-U;td5zGPL!Z&7ed>6!S#l3{Rtj6nZxLmjDHO#z55I>s15M|wf$h0a}V%UsXgFTJ^Pw~FGg-5 zJIntVnKw?%$8`SV=rlI_zbL!25qL7$-Vpo2NDV&8S6a)ocibA%xlrsQvRK=}m7RGh zjJJ3B@(;Z&OOxB{8~iITh2(?T4m<DMEADn0`CAl2m?GflRH$nNvOb%SLm(hae zIxgZ_nOtYIVZN6hhpZn5hmw0^)8MCt{8hXHjG@+uB7H|9JaGJp+_o@1b%Si zH|z{LC~x7{o=bn60m)Rz$Y#%#;BX(GfGw7FVViu{6Wo||Zq{Y|j@YvlC!1j0;*3e> z89r-BXMnvTEgRW;_|<+r?bS;ZIR7pCQu3)hye8WdBL>V$V&i8XpE`v$$(s(p+!&Sz zSl`R{K--b5to`uHCwDFMCSIwvK1F=JXkB~qMXS=m5|-?x3%zl~G%0>8>0Ct&aYVn3 z&~KS!5Yk(uUx{y6W!9Q9d-zzNQ#0=|a35#zP~Fdq%}nF}Bx58Rm+UAT+40DU(kWB( zHVi+;*r*J)@wDaA{ZZMgh`T0N0p;p>E`OQk$hQU_48Jw>V7P<1VsaMe>7N^| znGM-{hV3Hllooi<{-k3H*b7;!CEq z2yj|C{`cc6Rf-{ov96ma`qc2rp#b(3iCKfb}r{wAPxvOpHV0 zyIy%SgS=+F>$x|_a~GdKtmL-0rN9ZN4Vc66O(M7{#! za}y5XbLmt`ym5)~A7lnLB1f;TjIt+H-#DdcuM4(VEk{_*%8(dt~KgCBf*4^Rr zv@iWsvZnG;i@sGZYI}j|<{Tw*h{N+_(|x<`oZ4O#wVh|5Iq-?cC?3M$TIJ9q_RAKU zr0$ipn*e`mGf`p=gVV1c)pk30fUo$9$$_W79gCn?I=kTd%8wlbKiad_mKg|JS%c)e zIi2xSd#j-D`NiH!yu_RvaDxk--pYb(Z-vz&h_Ct`P$$|`=>xR$^j7n?VST}0o!86hP4g7L@~wI z2=idX&?oB-@?F}29z^%COdtN=1^)Tuv5p}()YkOdJ4O#VyiewPJco5#^YMD-W-T7U zQ6F9C-CgRPWLqCi!xxgAxt@02hg3&e<7BP$KBIbQtIgDPtrv4RzqPP}Hu2LU2e6K} zT!g)=ac%FL2pzpRdF|dZbV8&1{eFdjwo;wG^c~%U$ zG#}KFzhz1Z`DUOugddLx#&K@3@?X~9hwmeA_w(8aF8tw++lw!1X+YdlOJ4F3b9xG} zj$=)3V{ScEty}%9a|_ViN^flc)%RrnTJN-K-KM|Qdh4inJ@w89AKD|RGYK>v@a$kp zrZ-$e-5N{L>L1icX!0a{2b$9v=JFJNKSP-&aDPD=xr+LJPr3Q{9I|}F+)mrO*9B4h z$15&{V4apGchL1kZG13dpFO%GGUo~ z5r&`HRlKI)YszmeS>v6jcE{v%Azo^v!{xkDU~Xgl7pSkUXkZV&zX-oohW}=M!JNQ1 z&U~<&*7(-YFR;_}hoe?wMLZ&kEyhNYq2Enw$-noaKZo~*e+)Hv+7D&9X_G%$xm_E6 zK)nAB>P@Ue=DR;UmFqp$uZPn+*7?&OTkG53AmEmVOX7W%{(|QO=yCPfPgj=stB&hv2n=)hhoYT&81M${+`-AahNBqz%N>Fb;uR5wR*D&=&zFEr2KLq{P>`hIS8wbz$ zgW49}Gw5_>#-BXn_g)|QUC9v=CTUB&2VP?00bcq`bJxIwwl?f{lG|B>({rlwntT!4p8X}~ zLh0;>ypahk`aCCxj!HYR0=O@-e{CW;Ho$otIJ*{X8tyu_*GqzP+U46PCje; zns#6?c^V2m>>FR`kKS%?WIxH~@5w(_tzT`<$fs`pX(L3u{De{|Jt8r72Lh= zkvv&IPRQRMPG(I7Ugjx2{fyf~KXg4Q#@Xsx_vJTWzn`h|i}-fq<<2nSbh74lA}@4? zjkIH9hpD@sU)9gvK#c)Pz<%lH%C&7n8+Ms>rs_M?bCt2Jy}kI0S8&}&n_YHpe&xST zpFsIV{^;o!Vav-w-zRuAQ4aUH$ zVmYLfo0u5c?9eR_V*fGpM|-utjoxW7#(VpqlRoIATX=^~x}cLT=%foe=@LyrD_z1j zdHofSex~%^vD^&pY(T zGiBGp_AHrnl0D$YYxXyu#i8MrYZ)KnN0Qfwp6Mg=p86N~%efzGe`DWo@F|{6qi@8p z2lsJ(a29k{q|YV}gL%eWi!s+^hqTBc9V3TyoV|)Yv|nc}u*Fk^`+uen8t>*RO~^iL zAtPvwRvn6$SPUGWpw3JA{RQKkCf*fa-^OhA#myTu zr?fXXt21{mG4z{tUJTb6p0K|<_B;o#GczxS$nTuT0}h!hiksDQ=3c;k_blF@K@MTj zyPee;^iew)S_W;4eH)o>>?zo{cpl>#{u)}?x?;}DebW>2@s{8LFZIPTUERFvlRRcY zU-8-A`WlT*=Q=jKr%UIWG%&td2OiB@(MxV7<_m*XDfMyn;3p_-94KqVsrWX(*l&(e}7l!qNSu_(qp97W^}h;_zUrvD-h0 zoq8d3w)~9x;PP3@`y6g>UkS$toONLb?aGHdlfLV> zop~ah)bMf3nD>hJ|IShOJGs~V?_{0TuVT3*XRNKRyYlZ&M;1{Wmh^Ly3555t|HooY z`xmY2tUWLCp8dYzT>2YxdN#o0HYBp^HpgyQclYy@NkTIThqVOWy^DIkZN9rW_>jJ1 z4r$LXw7CI#-jHzmHkU7q&Y*|hIqr&S+`v8YI=SDuwwfBdVA(S(d~HvJGk z(0(|@rkNNGGq)CNAJ1T{dX1fEFrn*==G|iD=^2zyHOVt$|K(Ynm=TRNcBetD?TI0H zCF}cg=&61{yb^x}-+VqZ`kMBS*+Z=V@a#rt-Olw?w131#AJ-YYqn~6ga9-&ncBfnG z9Pj$jrMjjsVvSqW*OgrAcAdz7GB4R?v5$^>W`cElCVbJ(_8Az78y=jJ2L|r#%&V*k z?6=YW4Pbm$Fg_vqW3B&rVz=e%)cbcc9~568y;JL#a5hi$fu92#K)UvBj-Igx5uG1; zKnI|__~pNRI+7JrJfBi3vENa9aa-dj1EkpJNC zZd`aL{-|ZvzxP+Z;WvJgMBbk1F>L%ISz<2m?kw6C)X8!B>2i{OZZ z|6ft==fE$%B3@$lw8C4OfY~XsA1I@}OA%jD9=GHF&tLgUBKJ$`HRF|T5?^62=pzqB z`F-bDD=W(D`%~(lom+{2x+ecE*1jF$yvy`VD`k4-m5xi4y7g=_xSTlK zS&6E$FxW*~b28LJy(adM`NFk{d1kCzT9E5f&kW&XTI7qLs6E-D;kCS4Py2kQIfhJ) zKJxZ^{F&*Lt@Uw{DI1mRRPHO*m5oQOD?OX-1wD6TTVu`2YfmyfYQU^n;9`xzEA7g+ zAL}X&(+BEZX!dRl^34H=Rr;&;Fy}fr?_v3a;p78R?26H8PsKmaJg-x1QXYO*A{H5% zkdLALecfRaxLff-?ag|_8P0gowfvqS2%if%fd=|3r>tQg2l+U)r%KP{(|L3i&l;kA zIPC34w8tk(8+HqO&Q3&cp?=vkvAechL@vJMFaByPb;%c9+h=>m$24xWn6D@nSA1J> zMY2VUCs;$Y$+IV_&vxrsHhLyqjCK2v;*WLKIC0p|5D&2(-G_OPzs+&?!Y{U)caHn8 za93u$=r?1iTyvK_M*9yZtW}S~leg~9%KyG9v|KlMi@0gY0akuh7^iQIF2D5Y1isbY zIN?GzxT{u=9(skGTE{Yvr3Y%=&|0azKxLlmnfemN0J#3^JlA>C*$JD&_PO+*clu^2 z>lCy?{Kl$q%USpj%zj6BLOwd9!|cb)_lF;)y(Hx&+n&w$x>o(mm@hixLN;<}BVC>| z0b8FN+&eQTo*AsVjQKR=`Z<^Lq_h2%IX@a7EO>8!W%MWL#~yj`GlOB=C7up>K0{9X zHsXXeHrh*&VGm7=Iywfh^Eq8%Vu1c|Hr|CrY))RZmpMB`-h~2oHme`|Wmnjk*B%6N zvN4a^7@s*g_D`VeNM{&pYpum{+SX0Tn2U}*8T@u2^UcqoKO*yKjHmt~8e`27#avEa z23>oD;cR?x7fi+O_e`Ic$PJ>mZ65A?@xn?rkFHd{koazVz`*l>-Q}&F*6msOb>Rg+ zQJfgIo%f6n=6LsqvJc2MdSBBtueB_lllZfF*fFh5-tMW75>Ij&_TnG=(x;Jwf;qsG zwWRm4K2moh*KNR>AiwSdz$qA6+4DbK^)G&`)oM;yRtAH>5}YX7+pgH{8#5yw!z zk+S3YWPJdEyF{QOOThq`=8)vx)zP=`5(BiUF-R8tMAX{*D6WwaQzGPtXf{YRnLa2U~b%Nro%Zo`FB|qv{*UuSthq-?ViV7x=Ym7?_GP}+UM<}#ucPu|HCuh;Yh8gK z@2<(I;tKJKN!kNDh4XhLyBN78LtlVP{k{0=h&N#Oj3c+CQss@|$L1sg&Ib+t(Q^Zb zvT92)Rcgm0zk>ASKNC}V>(VF}@;|La9s$>aO=EU$UqtKRHLYi7SMODS6Y)Pup4IsL zlNYG0rb;9T=^HZ){18=<{G`GWtIhf0R!?! z`UB;?;rnuX!*<@kA2}p}uFxnON_oAB5fQH!pZ_55XN%{wZuFs(Ns3j){xhO=QLtyI zkK6zzSEFX#+Uo#p6NUMhJpu;c!AA$ zD4$z%hW+p4pE=As`Fr)P^bvi3#h7oM!d>Cl3PZB7r88x6I%mmSL^;g?rb7 z`}}E(c-GX%^*UepjA*LYoNX+*(exX7(cbrX6>h5#;UHUuy&pQTjD6kp*XSA?IFwCP zpPf`Kw}p49>a&}{0DJmnH&#^le`FSst^SN;h4Bi@g# zg!rcRZcjc=$L2g;zGbZr$ao*tQNF~!Rq2}0F8dFN=c>xjIm&1*nb?aG@t>Enca?fm z?%m0G9L5VK>rT(ZFLI!?1|RVn)1MjqD&CG9>+JLl_}Wxnk}9K*HXbnEFXL?U4x}#PC8fx9NOPOoO)=NiRJV7www!= zdn?RXB(R+UQ{b`hMq_%w9lH};^VnWH0ze>dI4 zODKnf_-Up@KApVA;$p?io7h-5maYNtqbZrf|!Kwd-`7hPccQvXaWDDzixtiJs%Wkoy8LE=L0#_oaaYf&e% z-vi{AX=V*?pzH-JqH%66ZN$!nzmsR@^31Y!nrqR3-p%8gU48bb-j|4(r|eg&-%Ib) z{vAEr%roh7qQ^G&{OQ>M&vbsZu217yzbW^wa1GbF>hn9fPM~}0-HFvQdT+T=TenxA zy<5-l-)NniO#fvUOH^Y_uoIem^snNBXW!mNWc#>1VqE4+hw+5!D0crN+;0N1MT1=RztzD(IR zY=tw>!wwAfgdY80AB%g6JHR)&?OVhyN!Cxe(Ow}7U0ifZCa=puJ@~O4*FP(61=3lykFtzkxtsFMZmq5@p3T0eEr~8~OMSh!>6TW{ z#{O}{dd|NQTq#CeFesL-m334!qjglehIELK{XW9$HN4+Fv)y_HLYu<>ZSz`jue-s! zIonG*;gg>oF#Ep*m-5<(r`yWY$vl!DR`V+6BCnS=hm7Ilv(a_pLzEqIAK&?46i2AM z%Fw0Rv-E9pKh!zVbJj(0qW&^Ji~Zr2c%8SUd$qUzij%x?11r3L!fy4#OxIt1TDLEH zkbIELpr`PC19*9D8E0$o%D|u`kzrw#{oJG{J ziu+m}*wjYMK7_)8N~~Cu0o}mtD~DHVzA!iTOJ+&A10jBrwEDpug4ZrGc~TM!28T62 zG7it_yYTr==t}YsKH?VT6=hDz-fL__s@t4R1OG$bN!O40-i*bVZ-sM}*Er;@fnOa1 zy#T{tU7^<-pFI~|X3nEIHJ8U0Oxwp4&NaEK1)uh5$cAcL9R? zOASB2&k^6vSeO{XJnLW%oD@W--X!GL=63Araffw5dKR|m4DoFLuKM7a)M3g97tFm% zf^uEGkzH1@?>g!>xXv%ESOxMmQ;-F;c7ReYf>XB@Bd&y#tAbxMh+m6pEyq?udx}X-2_9#KU!J>Cu>&p0yCX$%8m-GQcHkPEFn6?1f?w)# zGQG-CW$1|UG`doeJVT<1IDGFL$n{Q{e0y2Gg$GKWO_X~MTBR+X%7~Y#ABVf1_oo7b zo)HtsdQ>EaOS%gBiQzZQ4eGV68-l+8*FoT#J(qKYPJA#t!kO2`js<_aP3tOfzW&eT z!N&g7%-YqMTV08>PrqRZT5$Tq_QKlAZoX?BT3eB=Nqe8f8>PEzpGXsBZsNP+HCD`z z_t3A1k8TdXSMBSU;rDtbe}LxHxm9{SA6WHV{s8qgr{}Ea%!igH7hcKQ^)AXJi{J-3 zGPzaAMUlo1s(IVYdM?@!Zkw?4%z$=Juhz{N66=QT2ilh%LvZhFebK)Z9P9eGT@k!{ z8SAOYTKFGFlz({w^&V6Bxv`s#FaJCgjvKw7vj+Y=tm9k_t$$PeJN)>ZJNzqml2df& z?%>LH&Z%ji?p->6^pJ4fTmtrj8`Rn-t~#y#a&^R|Wmro`Tc3r;F7)TomSBHIg&44*5! zvEESk9IiF@XK}6X&R{%rRWCG^s-MiWan#fZ<8`$0E$ofLS4|h43_hfb%AeOvAC>>%Ca!BX%a?%nHp%kL$qSK_ zGQ|k?`MLYWm-iQrs?V<0Hv*0`L+n4q#~;t$%R0L;9KSSzqlr1dzKrzjshh)+;AB1f z3;b8Ik@!F&I|1A;(%P~nLH`sp-})ijtdUcSvMmYzyTkM7Z^nVXirt>^@xj|;luub( z`pB0t*iqJ6V&ZPLH(&#u#u(-6egiDe!bi22pr_*CU$?pE8|F-RMc-&21u+;~OE&U5 zb{7l1TDrb$HgOC44fdMGoxS*l*C~HyOFs6;|6b=#*H^u0G&{uH;V{3ViyZQA$(R}%waj;C@VZ!EmOh6XYhASbvZeeuxM=52a~(BxHfDmuMJORKJGbz{JvKxzi>6@JoVY^AyL_rc+YwmoWxiTevm#p zipN~&PXSlj>m|Mlj&+9V8pRF|oEq61OJ}hMjP;-}hg_N;Znd)f?}La3K8TO>%vLL2 z&4HRhM$wwCJ?`wwMz^$f+0}QNOExgfW1QR2(*=k2qGyoF64f$PnYKR^GFy$T#2XySMnR1N}rYuH6)Ui=QWLSKAUl-U;oQK3S36B_C!U z`n#QRH2zE0!B0?5^-2B`ZYA#u#yso5gR~);IZr!!b}#qmLGP58ERtTxTBhg7sOhu0 z#uuL6KpE*L_?Xk|M;J+DBG}CSpz8HL#!26)-CdMlM*XtY)t)`av-WD6&vHGR>z|H! z|1{48llCd-8_A6|eEyC#_eW#OewVWIDf>LnH12BifANfc%cf6Txz2HI^jhA3jr-GM z#b61~&?N?~f*1VjnED>z{e`?k#u~9==tN7@-+Zu$XOii}*Cfx?`mz|hTjE4(>Y@yC z4RN|J0HgdpaoW3u@6A{Uukeoo_4w4YTz+HT#~tJ^%HKu#rVq4Q_DtKX>tpAQ{F$0J zu`?|5t~PJJ1guBmJN&WpCRY8PzNPImqPlAH=5v%koY^FL^dJfay+H;N1wCecC&Idi3wlqdb+W8INv|-EBbu0R*#^wsz zR6YA?H{Krcm9e-6w}AgwK4f?a_-GyjAM4DZWD@3xp%F`CZ1`l}*c)Z1Hs1k<+Iq1H zhsp>By%RihtN5(JF&3Z3hmHMFGM?52y9z698~DcJQf)jz8|tUzLJw3B$6=r$oBcGSQ19psq?8E%A>5Ij;-=L4nKgd2m7yfgP?+a|exaNr$Z_g}4g3ktNW1DU5ne^wOds~yKZ7#7e4 z+GzJF-f3J8BeToKtg+Faam7!QlL>-sV83_QR>4D^2J*u+TLL%{BeZw<)SW8{f6b++r%6;NYa(*lNSiYdYEPPY<;|2+8QE6!J+!m6wMwJHgJ7ty_E)ieMfMUzbN()a*IPO? zE*|TXViMSU1THo2YWn82#P=_&>YK_}Bpcw#%)5H<)5N*a%C98+k(btg9N1;M7rf^K zmvUgsp8d;D;!nuuD|x<~4ey#GTBR-9`h2j&=?j-38#I;s!eca_8(w*{oqgju#zFig z>)d0`zqLAvAE$lMRCA`=jN?mxj(i28^CoQNGx>fKwi@*%URECt7+4e=(d3n&ALYz2 zIimK9wy{UT-;hT$2ZrO$zYl9)#F>)Op*`8yBu6xnPe*OaW}D4m&jF_g%01zCXnh%@pE?bJTV!92DV z<*Q@MkBmx#Xu z?_BDb(QVfFpwY#rS5lrCYh)Qbpp8ASqVX?L&y3u?q3k0|=!fKunZze8%CNpcv-R{} zXKemdankTz@(;0w-DPMF{^p+#%#l2QV{l2se;o6UhUbo9PvD61?T9W#cN!~wa~5T% z1792Tm8sgI#);=MhJWP+d*B7pc)auN@mOYffyN^mhXFGV7Xoj`82q=hCeH@$(Tk&$~~(4_y+tn!*1uSu1X5b8*qk`QX{%*|;&!I%ua>wsFk!v#MoNW1fAG zveh^&iE$<6C7W@4yXDM8TE1?Ul_!|yWw*MZbIr?*;d{6F$ud?}QclMYqhRFwbfen9`1Setr`4to#Q{nzuMjTtYidyGV*U1$T1d+^6F`R zNgtD}pt!k=WE1DU;r24uIsBgZ*2r-e&M5RJB|F~Bm?ogBdvC`cJncEZmMj18G@TV2 ztzEY=J{?2-m1T;t6wl8i!#JFQg6tt1ewKP<-*jlNRoB$FlKK+Rs%S~}s9L?+ql!&q zO(S(G4o~(w^db97;AnR^FPvvb=lJ~s?`mtV^4Y~$i=g{KwX;?7nj6{izOL(m==y5f zmmOUDWvu+#P_cxvODo5%c&(+}Ao(urM^<|D^m^!Usm|HmKLvS3Ftu= z+O>wr7yZ}z*w?YE4Or7N;sy?IRz2?m+c0xN;|$Ky>hBC-S3N^tX1wT+&gdTJ3>aJ9 z3*;gEHaK_y+DvCz->Q5e>)aonbN1*V`1eQ}n6)omvh+C0C^x|z+MZLDkFo1)6+gU} zvW>u5%Ci5P?`4l}uy0_$zt@w=c843W2inByq-f*nMdG2X{nVGjb`JkZM|_jDle%r> zlSX_?v1fXQ`>0p^CeJrBpuy;E3ys#${zNj5$jrh3ECp( z5_{Jhm78^Tk8g86;L&Fzif1jye+XYPys4I3#V&%+f)_l>xf{|U>+thk^CfVDtf$yY zJ$sgMt1Fb?`-_dgPtTs_nSNUsyK&VyqdBc--xp0+eM-8oXWZ%-!yjLP3`rf$`ISk@ z%)&o}vR`Xk0vNWnD`zHp2-jLSq;o3HPc)Qe9Z2(B>%i0VMh_v^jpR;-ukc*9koSFp zx--!kQW?b`8aa%)oYUId6_OVxIFKVABhzE#(&fzYW%(%Xkn$#%opRaA=BqQ+?Rm&9 zd3+AguG()Zp?_tFP5!w00NrpF7;F8u5_nk!ua-YcJZ6Pr0vI2i8E(!Th1UNMxKf!U z^4%2cT65r`l&uBwuyMQ%7#vI8}mEBZyVofF4^D<-Mn%GIJ#!cvn4#c z-rx;9(2uHbIJoKy$>7En$w2XTonPq)8i)A3ql0)_*Z=-^#w%uOm@Ep`cUMbW)2A-`1sbEIKL$KUp-gYsR8a1*#lchQ z9X>JBEgzqo2(-`e7yDi0EyEgf!6c+0@(Ysyo*mfSVkt8lQij&|?#4&X->&sU81lyZNl zGtNcBDPr4`JlA@Y%eaBQX)E4A-c!WL_9Os5=ek%?jfo^Q#0N|JS#`iy2++<)gF$3(Y z!e7#IUm0FSKet$$!Yz%B-oOhpyn$2~u}|x~+$`1}d`ikerao*0PQg;2Wt|f|z`|MD zVI%*7<1p)#`o0Z#WOp^=#<*(Sv={rN>KNI;_YRE_{PN`L7(Ks`G0NsE(=|r;Ea0($ z*6;f)^dj^OjmtsSmIK(a3dE7$%y{U`5ye6yEBhLc<;A{mV=C@>tWBC{GZ}*>@=!H3 zJon}n`YHdN;=b-Ha4wM3;|?I*bLp>pWBxiZ{TXyw39k-5yAY(ozgFJi8wnTzDDVO_4;6|O-)Q!I&e2+cvs zSeg&7-U2R=`4fC|4&(pR{~A4X!36fcmt=dCz8%Fqi9bkRqmGTNaj>T)!E5NJdav9( z@1<;l_$ujf_@dUR?kTr%PF3zVuj%?`u4{bYAGx03HdR{BM)&w`FKZHGDwuPT4M_a! zdVS0M)3-P1TX3c8dWReZ%;7&*&+JKK3yWv3#vi-ZLw+-MLRWoa4ocTkPKFy?_Ksuk zA#Nj1Jw^_q1FW5WI!|syeG?tCC)nu7L)Css$F@qI&TtxO#zrzO=lYUGHFw}C*j@T3 z8sB_&!{qqPu1v~_Po9Dk*iQ&+hRSoo^8UK^|qjl>rG;BfZ z?cg$#!3H8-l)WV8ytiymyd9d#1xrZOd134dW%9L32>Qtikb|XqR|4 z-lvGc7sr!!)lq!pUkU)0wM(M|A%WTsK#*@4ES~woT}VwmXA)tX;On z*_hDGoCVSQxPzR@H}Pxd_wW<;YsH%_%?7443*{_*02C>2C~PD1BLWbDhD( zdW8S+XQ5N=r=9(yxqb`Ulg=s~5M6Olvi67R^Ut9VjjeK}Y7ZPd$7c)%>8nrQuxmVf zPv&d$+_lK`=PPqE{F>s`{@=oxhSSiusbZ{iSt&wqFjm}0c6ztj9T#5OWzen)w z;d{+5`D`S|)D208i0Cd=9j8>Db73;9>3nkpTsBi)yh!lZ!*~;R->~Qpeq>@=>vH&j zsKcf%t=F+U^?^6^{#}+c2ycqkJWH@RD?N*`He;nefXf(qZzj7YDLPz6pY?7(?KYtM zqhGct=1R0AcwE5`90vaEU*V4d!;@9`pRB=8dpiX`*FGt=m*DzFuH}!&Gk2tW%qOPSve2C}cY62AUjR?AgU1diB<)yu((spKQ-GzO(_z#t($MF5(=#@#vPhr(gfwMcCs}j&0!8m?oef@hssXgn;THE(#%-J*?L&i*VpWruPO%D%^ zUr{*`SfZGaNd6P=4D<||_W6|_t6Y^u;Mp=di*d88w;C|}u|^o!%H-$#zjVC|m=x8S z|6kRYnVz0@Xk?JdIDvv06cw?#M2SnJ(J_*Uq`8QwtTu{DA~9p)W{oki=K=#bW15SI z2%(Ldutt+fLK2r;Y=lH&)I~%?5KUDVmBAsnlWcZF+-&%NzE#~i>wka!JpEMFsZ;0j zp7*@B^Pcz6E;C0Psk8q6Z71-ZKc=-A`RU20P;&QJ@Gno_eHuhw=@#PW;k5J|Xe9o9 z^7jfA;brI_o%1?u&0(L$XE%7-|1RDiqb$iZTdEWGre9CAx7^xoZw}Yl)onfY`nM<9 zo5yw9gV~pm?H;f<&XmuiWC7vLLPz@~WG5MVF8E;d{I_FmvIG}#H>X8id} z{2<@<2L4lq_6o4(9xdY*zSSDj3LXkamOu}xEXt?Nh86h6iND}?u`8Th@7MKSeq>Df zRmZZMe4ATM+qdkikYTG+o64~U0^gDS_)bTRfG5h`UtPHvRBQclkfWeVdJ7^a7t36 z%PK?nO4GCK_@~N0*~=>P+gzIO7wy>!Zm2z#ZUiBfn@$Y7=k*iMpLy~f?G0RP z^_J4`z_zyD(o+lY+hAOE7IS~?$#=AmdSAxHukH~qWIfnF1KP5axDqGFy>FY$7okbmCXL!7CpOY9 zL+4D^zRFp2)Ja;zzrK1x=TG*|;Jhk(o41i~j5FUN-x1h&1?4Md z%l-*EH}a(uihHf{kh$E6HuHhB3A6{l7B9j+>XVU|oP9}j8e_OSAAHpMM>z9fzs|%_ zKMpNZ40dP+aO$hu>J8rZlGCmj8Q3p2kpEEj7fxLnA41TJFtnnHeu^H+25S_+1^Ox4 zc|HC3^!SLYxhy;H3zO#h^I7k%0q2Yy_z3*;E=HZ=rP^cmedMJVS=);nfnC>!TaNZ; zdcBWRCT9oZ8)F=Piab7#qh95i$vZzTH)F50nASGnXYr0YOxl-!nSGAK;RnbvVd`ri zjy}geJ?W;BZNUADRo>Pzuaf_LE9DHM48fz~Ypi+49D4yoZ`3*|zK>hp&^*nNFArT_ ziEW5FTl2_cq-jrrU^^&&itlz`9XdMsv_CWi?9=2E%m=^qlCv@2>x~EA`wHMO{h!e% z{gd%M8~v0q7e4rS@d2C&)xPE9PKfjgz)<5pu`d|+RqVUV ziRSRjoqU(I!Z>S(BRNL{!C!oSYhSamyuQWA@V8EHF?I~crhP}39 z7|*ZS8cWGK-<=f1j}sl+_0QOq%i~a?Lng7Q)vpM1a!;nuxhWmcY{5;mXit(f^)1a= z(HX~=V=C|b{aFTj3^*5RL%&J}XE92jS}}d1eQNq1cg5a<)4X@0-I8K`t=Q{*a9@jT zFnD~Y#>8bC6S>Rd+^SY45U259ocQx{!`%3*iB!I!n~4^BOX6^tb9KtP1k=S zj}h<~^ucS;zkT{*3Xds!)R%ZKUZH(n_`Ein@r-2bE%FhU4F>vtnDO)X^+~5NZ zwrG#^!vC6T)U!D6^XV*Yr0=q$7wR@0tuEN?N1?5K=)cKcWXin1Usv$@1br0j?|_c_ zbPF6-yG-ymlB6w#Un*Yad+U@RBmc=zuwP~l{o2oa0~o6;Ggok~&{%S2uz}yGbxEi1 zSEsoiLIw{bgG<)ZxDFc6IiEs~*!*+tD@10aF2StQL%M9(FY!)x z>!*le)3X~n&d?qp=>S`g-Gsh>=o>-XYOF2xuV#MR{!ZDZZ~=IvHr8tl`ZA^Sc$S}v z>eb$bdSIgZBGj{!I-Yu&xR0b)+Mv2a`QZJUSv~f*$hNUNtv%ph9U95uYG*r{A1rv!~8zuOwLH9Z24?X zfCu+MXRSWs5Q7(@@v=9lY{}cQ?<5O(&!!&9GyBtf7)N8^7U2VUj86Gvg$GpVzs7nn z{gU%KZ8y`<%uFz*Mh^S{ezEjMTQsRA^8`8@eP>MuIp+o040|rw2~K1PA>v}SbZ{6?uH)wcHqwK{vmd7(!9nNvjH689TgbTAm43XLZ$CN0a5qx^#{Z-IFHwHQ z#zc%R_Xo_=eauhoX$jL`$x>Rse4IAd&}MY?My)Z-q1;O-cQ)nD{y)mSnR0iLPwNM6}yoHHKFI97)BBK_O=T0yW zZzC4sGwkWpesu$#PWB2T4L@f-nA9a%DVf1%6Fiv6oRBZ2psXY7c6XwKsQcdV5*2-gzjc{`E!t;~6UkKkF%ed>_? z{3?7lw-eXQ91_>;a(p9Ir_MwtZn$6nALyszrYZex(Y0LAf6X(GXZdItsU;=kf)TP& z$`0p`1<#V9Yp6#yN73VHsos$$dz9f1QTXJ@sMT|NXz4?vTFT$ZuWmK+iAzvkuM(u!=a#~8axmygXd-~Wbvf#}0&V5#&h=^4`JSi$oWo)tg1 zp(tOR&XVF^`THh`6{3DEht}w-GsaE!{C|xy}iF>%Rk7G2t4O*7}9u`BUhzqJRHxcu9nm@B`v zdk3c)8R*)PEmMsBu@>XcKW9(hzGkE4oRsnBIR0t;@1?;>uGt#+Apb$~+5A^jvu6oB z`2uuTTn?vKMl_j~kvaT0l!eh8Pwofp94 z+oZ1;lHOEKe}eSfkn}Uk>Dx(H{gO!{oGmV#|Bqck-z#G>gZ@8EJJjAQXzvwsp$W{3 zfc~o81*brp{c`Ao`l5b3LYm6O577U1I^XJDGvly?cJu6~PbsG#zU$QSEa^NCh(@d^ zs^1wmody@c%OdHUzr&gla~nGB$o3Yu3eGb6qN|@~upR;4>)j2c>)ec|F40dsV^EZ5vWs}g_nP`t>nY*Ab7k{>^q*&=Oa89&b z@9rl3AZZ7~!5)Ttd47@SHu_{xukx%Q?{d;-kQS%?_dsL!=YHw9zU=(V6E)Ume^2^) zXm!P|^4>ZkGPCSpvVm#-A*jVGvXf+f?d`3|P&eD}+oL8xw`z);B`e48zPQ%i^pPw5 z@9}Mo4}7(&w7=se-#=6zjIr#k=7Y}$=2HDqmLGsZBa9HOG~#J!vG}#pMTcYQ-ecDS^EWB0^8FQ+?{gFEtIFkGN?NP6 zjdNW24!p~c9cN44{zu@h@4h0MMEdpR=L^YS!Ato@qzu|ses=-yj6U|w4Qcbaq^0xV zA@EV#fMc2u!jVdQ=kl$-Sxs7`=?#1_w!y22oewOoKiBl% zwdIiUCcfb%c6YH4VYAoOwADNPoIo!9E8i#CDnX&me?TS;TOV?k^QnrOIurNuy z1azik8rqx;&d!;z0DA>8?ZP(347%5J^LDR^GGrTtd2TbNPc7wGl>ki7&m-ZtuuoA>zo=;}w&MHz>u zMnCMW9^2kutMaToeg*i7;ajS)6kNAbM#bi(vNQ&Qy=0pNWkTx)Qhm@@`meR>xcOzR zRjz&N<%hkv-DAg#Tl*u%1H{e==++z1S*=gP^Wv>#y{Xd1lOG`t2IYzGJsr7m%%Xd) zn!EacnvE6wcbsZAc9y0ZI}G;laNofH*x#Ft&HUT=xAI?ove`&;mdM@wm;YC@(Z_W! z|0Dc;e3A_aIBFeq^Cb_ncCo-g-&xDJyC(D|+!pA!vIR(v5sv)gPR2M7?74qV_t;$j z#5~fo$sAGK>)Fhc6ZA)E|4N<^X@c3Ya@tPPh^?+U>A(Q}eBUK4qO@$mVc)W!_9SUh zr4@+PUru|1v?`@#WE&3h5%8CoN7wsyJk`0CJXzWhBaJaToJym&_gz_%AEmC+p*E05 z-$?#RkuH1XUdoGbmZzDR=kA8jN@vzu{}K~FDBh2uES))_`60SC+oHVT57^lh^IH2- zv`&i+?)$}AP82%-On#Qrhg>9IhN`w%$cnR^P+>Q;Yj8}>y3z4x z#XoYT&{$~mPMTx9s^NzFx5;C? z)wE6aQPIs$PC##CE$Xf`x|RXY%dNNfZhy>9gX0lspT@hgJ|nqkf@!QBkNyy|m}jYA ztPlK!u?A1uLfDolWBTWU=M_9JPEuD|as}&kreS}X*g~4OdFE>*iQRn$r zw3d#Iv9U0PwIlHC@%dcy@7tI9l%6iQqVsCMaIZ+3#W?C&y55UC>t6bu_={+P))BSN zcP{5#zj4kmSF)h^!Jp2%++Taw96bv@C)`$j@|YaAf6wgjYgL5n9m<#c6w3f48GXFs4Z z$pvc}W*>GP+EI&6DcU2t`z^m6i=8hEuhG|_L&USYUVGLWMZe{D*Ff98&AgS*q1FP9 ziQZ(XpEkrYx7z3PtaA#YlsA;#8H~mLX~Yyl4p>Y1JISN|R`|`Ycqe{ylP@RCcXlE3 zh}Rlpb9Vmc4|yG9@3-smEtX&O4`>f_ptQJ%UG~lg`^B5_5v0wWF^^0ndZPPpa*zBZ z{f2jvo$V2ibFY}Rvu*ZA;A4k;QNa6_^=oIVc7V3|5q+Gj@$C@Lk6_5 z^@>+ur*7N*us)+0)%%95 zbId8P&zy6%@S)(o^*{6tyJs_PLk=A%lzCnSZ~mc-HwVeL`UCuM8t*zu*ZTc$unUO} zjnz16-dV&KrX2=t6)ZA*Tj8S`!|{B37vH||*FRmK9=>31WnJy3oTrq3x7papBG5tZ zCk!);3DsC?x!?RB%|`6c&Bl!XZZ@WoC;Jz8FaI8RX^hy_bGQ!vC;XPb@N7npnU#fE_EU zJu+Wrt&Q@2FPdxF&}*CcL(-cAUv|mt;^#Cwu6;1-zxpnDYbR^;!aZ*)>sRzYMVu1R zV9l4mGgt2A47xC7!++L>+pfW%{1@IIIqUfZF=tHcwWGrGh_ULZ>i-D!@3=(!!xuV- z;YFe$ks14aeE$OHpEbdM&Vc_|@SiS=`BUaUPo8z^`0dbvblW!HM@;se2x}_RF_6I! zeXvo{HpM_24V{<(?hAe!esrFlBzD{m^;=_H40wKJPRV{#nWInBzk8`;7;u(6-QdT5 zK(FE3rtLc zQjTDrO9wKj;BJ6x5#SwxcC4nnYbdYUY?CgwR&+`{w8{4chHk;<`+&3PMiVvz#bQ_a z4aDX+dPx?mL?4xN^TIRFCGx*gg zSz#t^OBNr&CyF)pNniKn0LdA?kGlC_f6wF&yJzhB{(AZvfrb%i?KrkTACG6Nzrf5) zZooG~azOx>3GBa}HRK)pqu+Zsk#`sKZn@d*_vs?tPbMCU^##q3U1o++2BG6$iBnjhlvO_Y5cJQThBE8qDxp)7G?)0?n=2eC$PT>+0R&p{&tU(acN z1a??6ALxFcE7z_0Qjwwjyw>~i4sR{zQD5J;QDvNu(2p7D#*#lOeg3a0#7&}2{#ic4 zu_XSJe8+mgfc)76Bjx?skiNXlH_y-)`LpR=g%-M`Px%|M3OCky zuz8(#Pf*q~L*9L3NL?@UejD$%4tc+2$opUN{z2ZqZ+n~PFuskFwIa!Y2j|JJF^Kvy z4KyxqyOQArTg}^(Re`Ma1oJ{^k8zd!W)y%qGMxCE!+uW1Vqwf!7l$WZ&UxtWP*Wv;n|h39V|e@f$vv=&nn?N zJidy4WR)j}?uC4dj>H;nXGwDI9NsH`s;w*sTfJV6^m^=6k~2k5Z$tJ)H*zI=iKm~0 zPpHk;&}Oq}lpamtOHaGyn;m6cxPdmy=JHtC@5xF!?7ycTf+zO6fMIWA}4^_bGT5NMw$zSz9MqM{im)5<+@8tUhZHC@2aM86J z_oseKI~KT__mWMtHn@my&9=)+(yhAh?69Mh$2o+%KZ!mTN4Ebpd?!WT2r--$3m}!m zSJ{WL;s56TzWIXN-dsF)20Xa|-n|1pUF4tSen0$tkpEr$7ybeLS%2;i@_zpx;qUw> z^0#cYTJU-j?i{ULBUMwwY~Fj}VJzkr5+>CeI|_9B<*;O}k^o<9xl?0}C~@J2ZB z$H}LTV@DkLDd|JU;W+8oUk6@GJ?z7_j!EwdxUw;Xh^w4T%U6)~%KX>tKJv*YLvWPujM@<4o&42B`#xNT zyZi`ro`urnr|P`ZzSACU=m&9rWVXLE@gg>BYL* zomuSd3awu4j0E3xmcSHf4)bUr#s32SI0^Xr%0#Z`@jsV8eoxq4je)cIL)Qkz^M|ha zI?Xt)WBDHd24lF6=FeU*WMlSY;{&RBrL{z(eBX>uSB(|SSLu#R8DI5F{7H7IkJB$b zzx9~_=U5xY7J^RDCRtT`w2(IxpBlJ{&R~c8UwbJk<*1CQl*QWJKqU?veR(p%_tJfY z-{_c6O3#cZSF=XE&HLvTVnie}C3G4;PMLT@f_me$tsZ$*wtyyMgEtabo?#=u8abZ3 zz3{XiXOzMF;wG<-7#WHCyH7+obJ9q3GG5*Io^-QE_#yAZ&Dipj4|$dTDsFKHW2QPS z=#9>$0am+I?{l`|TLo_^U%m>OcaM`-u&rjyTlAi^%KL5QcLu&y$=uHx zmKn%`_;%g(4m6LyewBGNeHnVwM*R1gN3y-kr_{*d)1B!p)ucB0K2s{!FTahrOW=ci zdnN(TNIm{nyc3+&uKTDr%Cl&P)^_yGQ_zQSIZe+yc-A$_wcZH$eTe&H`Tms3<^BJZ zuN%1z{eE-#d%fQ_2|E{ZgyyDw|IT-k@BZ-}c=F-bNXzo9tJ1Rf_svzAgM5?c8=d2) z=c7EsJN~udva`U0*VD z^2bts?H`XZirA0~1rwSa$Ny+xG2%jNtD9MZchcvn>!hg?w3C(Gr0%l~e1xs3%_kKbOd3*1vX zi!NoE)NL|%yw1H`Feul#pLPuG+j-@> zSF3N4qN{VF$UB^RhD$C~o7;J(wzL8lJ;w?UdiRp1HWZM90$b0f{-epw-iI$C_67F0 z`4>mr%tfv4QDRMM9r+seZrZfXPIW|+7V`@kq_fFr~-VUA*V>-IF)W~j|&dV4GIY#p+8qcS69`2L16 z6?Zz4?Dl#1ZCA1<0NR#>o*+*VQ)Hc&n;vsbyWoyYrCnmWIu<;beKY}cw z|8+pGj-9}k0x=Q}NUkufZZ8C_(>~dmv@fB)Wiq8n8jpM4^!==Te7a}P3F07>T4=k; zcleIDN7yfa4dvKewNEgAZuL8>&&edHzV(L z|EBnx>yI58i=VF1b1d6f=e8IDt$kj382>~O8w=%!@mEs34&@VkM8{^+UsLzxxulp^ z8pnHp`D)T?k+U~&Ju#MXWt~R*bG0}3Q<8V-o5oXTD`}tXZKS;meruns?*GEQ_TOs% ztmI+szZH(kP8-FCM6vId5eR{O0&7)<@9T?9Q#lt4lht7(%{XR(FSsN*J7R3;|2(mj z^vt;p_NcjCrRC-Z@3W-oJDuytI>HNv@u0U{`DmZ-=Ud*>DSF=|-zwxHBNxcM!n1nD zL^!t-`GECzcbw|Zz?ZiVb0KU4HOS@>O zcpkLrNy+6+L*_>#u|BjG@R0l^X!mc)FMRXi%=2qJD|V;e-2u(2==V2^eiZ^5ndM&Z zZzx~)@lC{%Y=y4|{EYodhmHIu}gH`h6%zP{#kCU9c`cr2X!AwTV_z(eiiT`5F+ zwC<6}Z}vt_V%(SuV~vN82}Y6R8gG3xY_B&>{EP6NWo%+a;i>X*B_=NZ-S*eU(!Tt| zUd-O+oq2&^Pizx(6xlc<%!Q^xr}y`?#+q-iQ^2R34Cyh-2pMboH5YIEWUy!Gd(d>9 zkCvtmor|V9(DO09yV^xg*`>azp1M5c^W9G1kSspzHBzo@kQKRJy5wNXuh6XnUbKXG zzTyk#2bnL%9Y$FYkzwpnOfu3)&A;4jqxyh;csT|!F+rojB|6eGXkuB1`LcOaKdNA z$Q7KemfG^L_ifT+jF*vH18lYCNgHT~Vr={mJXL#lZn3l#+Qj%IkkzGcgp!;4y}iC~IQ}e!VC_*lm*hJ6 z)9K8gmTWI=L66A_zQMT;fq%d8B>qOg&9}Y!^SKg-NONU<6|5W{A8zZg=OD`qHsWoI z^Z09^OD;st*IH$Wc?o@DJiGBd=q!PghnEmXZ*i)d{^3Jmb+A{d+wWf@yHdE}X0X35 zX&3KY;E2!8p}Yq2Yo6D0jZ%-!f)fm(b-p}O#k`sdO^zDd-d3C8BO{GeZlu0RU~4o| z9V4~RIK#N=yCiAI`0wSZtNqP~SzGyVg1VCUAMzf2e*T2~{=_pA)T?$bre7vwyO2I- zC#y|`mwn{$YyYdcYq?^hiHuZ7|l|w&;$&m5d4=hZCul(Qh)w z+`AfEXhoQM!U=0-bjjrIsCZh2It6EN;mLXf`%;m3TC_9SN1t>CHDf8>qgdbJH1se7 zesZ={)X*3ZV+nkvGWL`|?A;5_3QpMC;*tDMDEC_5Cq9!$)*=5KuG*t0JXSwn<-UqC zn=;rv!4M;prv;uCg=MTHu3!6 zkE7vS8ujbmGwvt?cd-4Z;PP40^NF$0U(Am;>hmp=Z0^dDBvn9-aP zzpczG@m0}R&1LmdG(2kYPr>Jb^@rczr?so1>%-U3*TtLWiHCw8f!!iw;eY7!$@%Ua zqw|L*JZRJ@ zMdSV(cs+Wn#+JQ*=uz0ec0EP?inrtuTUY0#t1s`_ZAedKH+rMK3SWcvnfN@wqwSl9 z{|EAFwNcn>oRcI z;cwuxulc}oW25#(NFLi_TK4{NMQk#GPq+4|iN?)geDs~h$mD!MeZRi^J!|=K*&Bgr zbR2obZviL96FE^Vk5-2{G*ZtUlLEjyfQw`1%Jo>N|XXU@dyi=u5ye7VZURmQlQ zIt=Kx>Qzium8t!WvB?|z&!~Oj#Qx|W-uvhK;>S7IbFKVy|<41lTdR`@D8RC{F0I0?C(2Eq`U0-wZDU| zKmXwg%&UnS2V^Oeazo}KUmy4+Hi&rb-V-T&Ri;^b@5ce<{rvL$y2hPF9_ahXh}AtZ zLEh}-AfIgYI%`^IL@P$Wp63+w?mC|@H59Z~c%AldHX7Jw62)$N4zXA?wz4lME{pE5 zHO5nRSIMy1^T62ZtQ*d#^2SqdjQT{sg<}ci>A{scE9VRDQTWHb$T^C$E*WRu#8bzi zIlxS^6XSu6YZ^AL{ma|FXL@yeg89HdyO07In1+ssnHil zvc~Mg9I)q3m49=NG-Ir?-rN5w8ALW;ogK~Ga7O)HV}>tI8r=>05u&{J@Fibx=M==d zkV&A&kBmCc?ph8mkY9TPFxEgfxwnw{&-~qq8-Yjmyx*OW&wLCS+Qc_1!8Iv)x^~Zr z_?df7B>2~HpFD5RiG`#u=D%cYrzaXa2+W%D%zM#t=r%kTo>Xv3)F~d1&W#=YI>#uo z29=a-N9+;w6$=<8;Cp@^_QXcg^asB$#_%wC{r<^+@FTSGLfUwd+Q?qK7;zCItkER6 zCi%x|chkn*v~f3W+)W#IpIAuxV*X1w_juH3Vtx2>f$eGx6UIt(g!kj0)YFCp^X?7S zLFB)5pJkEWWW`1e?R%C@Qsb=s&Z4gk$f2XYj%~BA z40C92BsJa>|HS^}>l$jSkz*~bOh2)|?+SeX{WYmwRaR#yG?sV(&?aCLPZaSf<9mH4 zoyI6^^&WogTw8JUmQ4=U=A}DAJL2`)`$vCE>Qf5)4`;8-t}FWf^U>IKfdON5lF68PaLE=-7P6Zso>XL0py8OVJR zc(L{;SA2U1hn@fSH;9{)F!J6vK1E!;+gCZKzH7RBh^y0??sCRGPha}jLzJtsPoa?dS+>jHJb|-LCp_ogOf08y)0*w+$P+0eXuII0IAP(Xw)|7ws&vS%&cH)Sj}|vN z<30zCTDr<+P$QR3 z2Zv+EM$abw9$*O!!r~Rv8AsV<#LG7TKNHzBX(Pua*Z03QZf+@2+<^Za;|JWHTM8Wj zr%q%3CyJcMm`Pw`c@bVptkA4%EA6F~^EhYKj=~pjaDAUYXi;5;bBm#YI``JVKBzUY z6%&Y|0bEuPLu1_DiFVV=8drEu@{W>~nOhJYM^Yb<<;AwcfB4<%s$>D;{9MB{9ExcHMXK-R&oP4&zb7QPVXL`r^AD6 z?oUr4bHGb}Dq3Je|Cmcwrr_2A&$=vs=3!lteRaH7yrQ~P)a5({*Bq;J%8|>#Eo{CX zGzEXZ4o|kT{|hI@$2AsarqdP=F)i@2$l0_>=>iA(ecg&N5uf#A+J;6bPFUPXQb&$< zwb764I`7tov+Pq1yWLxvZ)2C8Wv`;0M&=>!mgVDpSlz-tjk6Yxx1Si(?u^dZ?xRiY z^*~-8Pg#oF7x?xNZ-j9dzYS-wktKIielT{bLvqBetEp%8KEIv`)Dy{dht9YKegeI* za<^bZTIVg@G1fk{;{|tVJ!j6>kF|$CL7d@+Rm|<~(wNNUr6T@7ge_NdWa zC1NOmCzq8bM}s)cM|gKO_%kLIE&XD?@N9t_HL+DBlit$hl+XC9{IgX4h%%03Z!SgW zZSIfAr--s{xtqS<{k*HbpH1ICaz?u|mVTS`7aWHl*zR-Gqx~RbG9yZRPUqd^oP7@O ztSo&&=eYT9<|$=po}SG-oqDVC?DV3u1C`6d+W_mK>v!J&^qvowL_gbW2QTp*9Wl2 zjljmR)!!>rpX%XyV3hnCLRPrcL0g)eJN$VbO4&}BSfU~LgY=(7vPW`r+)Q1{9^40JmEO2281x+iPC#f*LoQe9c=tKJDIA ze9gPrc+IQkyn{qTyJIx9J37k=2`=7FKIPFf`cz{KU7^L??j1>Ydtc%Ed#%^NdG^=U zcQ{X6#QF|;fz7zw$Gflc&V>HAB5So%M+bG}NbBTXf^?(I7t*|6$@?zets+nN2i}W@ z%4Yg9W2X8IOKT0?-sR+N<(rQeX#?fujqTnQe5>{(rgu1IQ>T+Fw<&j4jk}riV_GOj z?R$c6zRCBG^ZmCzP@hGf@A3Zoyzk@v4?gf-YZ*V}{Z8Kfh&(_3!25~3e~h+H|L)ZH z{8VK-kS#*vr19LycqV-QvfitQraeBNu`J?8lVL15+sY&+dN_+7*mj`bOpQX%(pV~H zk>V~~BU>vtr8N-N-bIhtw`QhZ_r3@X=;Ym9Tt6c|o!RJ}#(G02Rqf9u8`(C@cSpD; ztW~8W$kFx5Rjj?t2X5FF3iG{KaX#|ce6Kn;&x=3a<5cB&#~ONwbbNojSlc|WX7gGn z+&9l(LyzR)Pj?ajuQ1Ou?(TL%`FZqZzE`_*tz%L~ly7RDx!;Le^SuP??Gfax*iY|w z44rL1v0bt>y7j73u8J`-(rz>d?=H^srsMw_QCYM%UtMj3gPvKS&b@0KBi7@@6FGDu z;#e16@mh@6y-=33I5?9dUY~O;Ylqj;Mr`W|?bx<9A4_ls$V7|28(qh+r(vln}OS*vGvS!XD&^zJ@WzPf=vp)+Quql=}j2fZ0wdxYDf zZOFzoz#>9E$!Z$ABW<1D>y60t8gFQ((v!STq+ar>C{r;;V>$Fo-i5J=?75J6$ha?S zgHN-r*`>1E0z6O|N1&zQwvq^~q+wvkrR^+9wzc%N%ANEO7;g=#ozP z3u5!Y@0T{owgHTXBj*ecgR}S@4agr@>qRp(AK?emCw1Ps?6|CV4a}r2o4RVKBSu}d z#lyZoN}OlK%TDa&Y#PcMNn1X|yL$38@a_!bu-~3W(nTxJ%pUee@!mgU2D*6~?}ziQ zYDI^WcoCl(i~H18C&~A9Ir8z%>1{z7!^k^=yfMD3re6kgLFd%`7JsTfSd@H^5xm<|v1X$*Rfd>aPG?{!WRtNvf;oA7Ns^_oT7dFtQLN2%K|I2)Y$ z&(6@#mQLp!+Ms$T@a|mFqttyK@2Y{dY$KsI##FGTJ>eYuTX3Wd!)Q|M%s4uYn<#Q7 zWTw5OJxd0*k?6cl{RZoi26mh|@Mz(I+c3E@s^^a#D#FtvK7s-v#8Rv}?kn1P5t@EmjTV>m5 zv@+|k9j${-Kj>h0j4w<}u3YHbi=iL>net1FU_A&OuXKw3V^=s``vQe`W^qMn(~|La z1LswRz)|hvuqd}7+fF&y#i|1xs#33Db_VrW)Y)QbpYI0Q65xO2mP~7;3$Iq} ze`*7B!1@2RA>DO)IW84z8p}$XHZ&tst@Y3+214dFI#Z%?G375*-;jN<8#Nl}$KpE; zsrHetQz!oc#SfHRrZE%jq?6?({{TZ`BKdm2@>#5-7dG?@E(vJHm9#&?9F^}qecVF~ zzkMne(;JKG|Du<#OmlwVky_mg=)h4(4m zPyN9AR^ES<_ZO2sojm_Q9s?OFgbWo%hMJS?_Ga>Gn-RagUABO`Om$e7_ZQw%?VXi86p~|ZU ze@Bg8g*}Wp8se-aA2#6gkbLkF_a5qFY@OxiO7A7;(y1K+*0WEo3Kv2>^R5y}NW?UCrUGiXoK z@Gj0^l5a>Sa&ag6`}?}Q@tonx7NYeA>G0uV+SU5aL)h9U^buR-QQDQ$nLF51+7_3r z{PNP2+2A3z)DfTPa;7e3o$rdmJkj2GHe|nWUpR;{E&p<0CcYO!=MQI|z!r>OGW0Ce z_K;Jb%0~m6KrX8I8=@oo<^PIpUopxDtzY|g(-7_V&x6b#Y@UK)vTX?bie>mM2Y%>hg5Oz!-{-rX6tMvWzhtqaG(HCHVqPW{SBSnLiw|3>pa>(eWrAF;Q-^GO0ch3^Ifv>9g=4PThu1A z$_}Bk8EvfF6*vPLJg7={+p#{@O00*_%{F>XxktR^yP5CUTukFYe=^S*o}49Rlx;Jz zu}LNt3>A-@m~QbLbn;Bbx0CBR+BZviA#BF-Wsc?6*fGxDD-ugaYm!OT0dF5$FFo^q zU(XErdR?(U#9U2U)Q!xdn95b0r=(}u1XnZ!-;2jIb^m2)M*-zADs61knn>pL+yR@|87-M(rWq<4@F?JD~eWu{V zgg)x&D}-l^hK3ajrbV3zyI{7^rihjFK6sAa>CK990q?MHF2(vT!?uw>x^y3H+xMd1 zwux%nRBRiQI-Kx}wDoAgIh8cranq1hk*n3Nm?8g>1%BP3i4Qm}^bs2s@>0%Y0Jr!) zO|&CIKJ8;5)&;(M%;`R0McOMo*V2DOIBh)Wo%Y8n-%lfkFTn2F1?~>RxY)Pb0!zU_ zXF*hf#}O-k^rn5-$!P0ME$nY;8E2n9qTP{QWEu933Bd3&)&$hX$=FXsLj;c&(j^F zf$v_JGX*Me*~Ry|7he%vex!Qn%c;qR8^)%yg7jE2@c$go7*C*&O@(dVS=fcfq!OhU zp99|1ml(U&79K{7)4l95XeKx-nmI`{GwkmPid%iaW%rhT#oGHIUeBn_IZb;CK3sO! z%;P*;`VI_*W3sV=2NzEqqj}d^GED3ryUELYA5P>^+oSYjx(_Gd!MMuT$^a%>FB)Ok zK3*tR#1Z!7jY(k-=gK^Gm!V_-p1ogT8-Kdu9+wz^rAS{7HY0eoaewInCz$JFth!PN zI&o?&u)#*5^CGF|!3WVBmWh5qW2(_D#7liW$JbX^mhdAvPRzW4r^@SndM90L;rKEQ zqTONe&Vtr{i2D|<>nX2+w)uEW|0nQo>id7s?HKu4!*bh*e^H^mqPa0(wA}0hw-5C1 zpbZmggX*vBGnz^pq;GBIT`lQhXxrI?%uC?+amsAn-E3?v27XHNpG>uKRt9w5$RIOh zflHcL)yxZ(v7$`NMIYt=p}p|`Gi(_4=2woM8ulr-!P0mv1yAN7?_zti%60`hu6Rd7mYA;S3qls8(Ap$c4X67RdR@ZvW&5leE62` zeb{MTCo>{TI(7PIsEwyQ#S+q*n5nbG(Ib>Mf-Y$)W+pr+2fzDM@)gGRxqf7*l6+S2 zLArPubOYHvXea0YR<-Tv&r;SCXAtj0G)2#pyDTd@3~fqs-UaV;2A7cohZuLQYilpd zM7~RauOIs+dlU)<#XVu)CvhXW{}%11&7~)}YLB_-jrP}VWUthtP-+It>X zUzXV0yzG6*j~4zH(8)UF+6Z~;7>DrKhx#jN;=O`>0@zFUtH4z-#kMsdxchx&Y^Afe z7#-;Q>O12AT>GDpFJ<6&GZ#26AkSXxKnqjEq~=?l7a@B~rpQ`tk@Z-vT90~;@d^V^ z#`87Ge~mp^udTyYqWyt0D0eaKZzZpM5#IeScAd6fPv>B47(I#kiO(UnAo<+MhkL`M zN${_&$7FYyQ>5>dAsB3V`CMD)&uIVUtuqbwhi~)7(?;#30w49uE!#>gQs~GsfO9w3 z)%?>}H5>V#2miZ&)@;~6h0dT;j=JG}8S_CiYKPjvYxHq&)rqEw4Qp-cmpm8FALuuY z54qLAc6r&SgZst?=-?#km%Tx>5Bh}u3XKJRf!-yVFxWR81y7*YdnCh=k9B7Iy?o0b z-RS))5AT}1w!dcGT4I`U-ZcYP5qK54~^8`9NL8psdWhHw;!WC*^Yz{ z;tjH6qI0Z;R=DWx0}*43*KWn&=Ucp-HQSZWl*p{buR8~Q;9PZdz<9dgq>*EzIee5x zJZJBL2a2}tnF<|+hW?otDB@v8mU)qtzFa(NP|i)z@CaA4kSoQFRrU=$8-=yD+NWoo zb@*-CjJ|m^3S6|l8Rq>@DKCbvq5QfV4DBggTk=S2Dg?T?)^g-?D?TTCtazPh)Tq&` zOaBD#Ro@=xz4|+v{^IxCSmBAZ(}@&cJsM6gU`!TxW^#cSVb7UwD{I=|Y$tD|cz|^n zVr3*Zd&5&5rPgA*7tUt9P&(s9G8t%G#;b~~bRw~wlfbT=#`hwep}ZnxQ7&-z*QT{+ z%)mCldM*3h4tT?iaH)9;u!Fy>#1|bc)^K# zxSwvV_M+G%(#AUAn|6;_>_eek^=Afl+vW7P0i8%bjY;WW*gwoP_MfpEyz5%=Q3NJB zQ&9MbU%{)|D|Rn)H)=88_(t&;E4}VtO%ecp`Ixu5bvytMjpLDywUAEo( z+s)g(F260D0iS`Ev<2(#Rh)~3zcg!J&^r2eZ>rZ@c>{56saNw){9k$Qg;waj>_*3E zPZxDczuPe)*au%}^NZy+7x-3t3ggL@rA3r)6bkO=DEHpZ?eMK2?y$az<$zIYv-iw} zOP%KF1*Z|4`cKMbu=lIcVjrRUeGm6zxmUmcnfq$ieyUQh`8J(qbcgV?4(AK0XMZm{ zV$S%&2qTG)K(a967V>_KJ%_^OnS6gq-<#M!dVN3Z+t{}}rn zpp*5S|E2v&M~Z7$N6|X_n_eAjC<$YA3BO2Ro=QN6kK*_Jd@9)cXhS!YPc$M&nF|$P z>B3TfXKuBrC&0cMj+y*~zM4R`HL!WvC96>K&4IkTJ z!99oPCacp6@w{eT!O@zY&d%Ii6S76)?n|;Cz$$$2IrKrT)g4uQ82Fp);?g1Bc*gEm z{|vj}p6aVDO<;{#{xk;VMU#8H3Fs@e=+lc^`uih1i*|&0PODvg=-C$Z(%$14#XX+M zHI&=qRgqrJeVjD4RrautPiE~S`Jk7z)|NE>$dmq_yu`Y8?t8sIfdeZ0)8Ogd@b60B z)$djGTljVp@3gmn=)3#M@2=;aXzzIXmHt4UFP8JnCr>TqWVkjn9^=@9dLMgg#v5FV ziBb#r5WWZ>gyfrE&&8ei7#OAd@a@4ihwL+)xj@{dsn8kv9xrf)Xrc3T=7_)l*MP6@ zrVq-4UgBhd-@pE&tnaOnUSz3Sgl$TGf@ug>aWhI_7Xj`NOVlQ>0O5PjBiJockK72|MK6-mZli2Z3pMPW~ncY%{e3dWN(()WoO`FCTo#uhY?zZ z?vvx*h@Yr8k6YNE#nVIwRhH=8Z1(2PZrSdg^(M4ewyP}iQ;NM8*a0o*TR2VG&;X+# zy>nB4B;8tSBEQbZ5gsazQhKP9u@CnhWFKRvGbVq~3r*~FWQUM`(L|onNAb^)Qy!BJCb(~; z{52mbIBTX{W+Q8Q+Bf<&`V>W9kFrN?I&d+kAQzK&9k!Kds>g1k?C_LsJ6NNe=Uhq| zQPv*sj~0m8z0Lb7u!{2j{!rR(C=w$AovHzN`!+VC)Be&3#S6GrX9)Yg-_c7|7X1eo zWUmlyiRJ|N4&;EH$A%eC@&Dj;BWXRybe@UqI0m*)$%5L`DP1Nyi}vS;Ro&5T&xQ}F z{pdftqsgR;d}E@S-V*Uvc=ww`r;t__wHMBrv#=t74|q@{M4n{-?~2Vt-*yv|u~n`8=M_EkDbLv?f_VUd;8DBr}1ZP9!(GG?6x{A6iq=d`-0Ba{$daZwax47%ybU z5t6m^%?##sWlme*%Dl>)#^22>9`fdYG=dMyo8HGSY(=j*dzw?P4c9C z|0_5szBK~66rb1)O|#wEtaW8l-A6;5H;2qfTvP0&&`{>QyZMrpp7fY7Ws5EwzyNyd z|JX0(|EAp^z(o8(vhIdD^r3X#V?A}3Sv=^s(*Tx1I}dtcVEe%~iuOrf79T*q@MYc^ zeqH`Kl#RooOJkTH@RPNtb6*D!XN{G9FBkzoYMerQCHG4Iq7U$=;JJqSFPj#@{&CP- zJegRK2DI(}sDEO*EA$rqyX*VJrK2Avez4k;EPNP;T|d;)?kpM}aX)WKuAJ`#JTTa& zti8#SyWXW<(QkDBwUN}T-qo~)c7?^0#2>|vbOvneUE95De|J^M=tGu_z^~h|6Ecr$ z3(&%8+r35WB5nq}#@^5`yVh*pHIY7tano}GTXidG`K7{-^}zfQubQ&bMzB_~WU_3f z1!p8vT3GS61=Q@EhbYHFaZNd9A_uBKVGn$MXdE00oymQwe1C-Zva{U*4rzZRcA3T+Yc}{1$Z56o z;|=mNx7>6No5ont1^5&5PxFJlSB=+dZgFm}_@(AaD}56GJ<1*?l_h@*mG>*k5zSH_ zy`N3KH^?KuOx3Nr;(f%i^7~=Sul;|e<5w78h@7wQEB4u6^S#=Jz3G4D#or}9v7A@> zKqddP<@~=U{{;G@cBx)7Q*cFN1ot<9iP{0oT_eXeFCUD~lH$3(7Zc5V#McAl$1MM2 z#TF`J+sPQLl`!6Opp^^hAA2-?dN7#V?HHL3-O zbXRe#Yplz#rOd{T{~0@sZC5sQ13e61-S`q@`a#PqS>WbxnS-sg=Ty!t2^Qi*X1>N2 zp9mHA!?X5dTiB0nPw5o7sR@W7r1J*nJJ?s+*<**;;u|=tz+-m2=?d^)^>W^=jzDut2#|FJi>9djBYw4?S zN;2lh8Ds3X1Jg(!iYw{z*w5kJw&CE-nt=8;LAU1cpTPN(DgIl(Lu~7(n|=CRp*taP z)^H{7?oU7O6o=Ki`_Ce_7WO`^X$me{Z%?wmuQm4wGC>rXAd$z;B)g{Zl5-hz zKCQWyh5v(NvfZ+V0dM0BC}itP?%#ewxFk76@(J;%od{zYO~Lo*V=eSRJkDY)C3A*J z3t+Lv8@eAuvJAf7vQuq|-QRmc`)O{G44hp9u4)~QIRP9c_vqa>|IRyjsLIwkCT5zk z%mn=j{0E-*`+OMK36Ip4hKywA%S!T#q&4S+vOyi@>@FwF zUYT0nCHCf=Dtt^&BX1Nx(b=;4cJ++hx)!qRcZFskgsZQk5g^E>ZvV} z>DWeTi+r4pfM;scGGqqPEB*t=zD=B6{+h$f?yPdZ*ir2!v-qM#RK#AuaNgG+HK-vf)7cf z+H)z-MgjceekS*dKWP|UQQ{n;TN8^??Xm(oqddPM4?dRzW3skyr&nFS;92i3;9bOG zKBV{q52ZCcyK>|Uq+{#$^E`WP08{)*p44*F_R5KbT-k4eWMLnqPzPs!;nWLo3(xvn4)JgU&E7Vx8_`ZrnmHa>ePKT?a=qK z2da%bM=K6Pj&r%YeOaKu`&dzH3(!9DM;R;mC@WUc5&lWaQA{?)*ZTsoj3vj7V_XMk zmE)L_S2~P^FY5Klpr4?d>68&{tRM?ucLMs&6emuM1?Y zEcq*Y;a7j)yES|_5*j6X);1g;d}C#47bZUc~IpUSpE|OUbl5pZ9`+ z`e`R0@Z?{V)%fuo%WU>``Y@BCJS7h?}oNL}X z_A)mL4T~7iQuLx~belv3`G)nGFzYiR)?1cAv#6V?j-CS_GSc*)`a|Ge1M^q3N^uip zQ?S^tD18aIV5_rTpANu}W`O^qO@C!hwPd$?8^-Oie|cZQSyxR2iC<2%*HyLKih=Ys z+OD`Js#kET!nUq;JL<%i!yHd@UXc&eg40i5>w$$}UV+8GHwjL*e2fR4`X+wDMxeJw zm_z^R$Ds*y$2RpN!*{$l>CbM;JZbFZ89#aMt2OpU7jm4vfzEGHx<$I^RfKf)-?u}u z-q|32Od0GQESb4r+{G*BbB+P)-ag*Ve*##~Yjs<{sk7rU4tk8g?=^~yF%!Irb7j6^ z!^iiE{>Jd_dxH8@j{3)1tY414WgqU7M#gr1+JsD@HPME)joxhQA@*&~cflXlWHx#| zYOmkNjo!Ad4zT<7I>vU5AmEP-kjRCk$dK>-_Ld2E3LbH z{Y3eCMftj>e2wL|d9&0{?2^&U8o!_49MaEg)lb%s@M-Y-X+kd=EbR0}+3{HWVtk5Y z3QpR_<^#OdZ}qbdcnik|v*-!M)!qfj_v&w+{;FL|%k|$_zTQ&4-dw)w{Z{hI=VvI6 zUkHxhM|#7Mbm4<^iwk&nH}8zcn~i;s1^lUPAvBBm{weGd%dt<$MsH!e63!|PQH-&y zPI1lzb95T^g^Pr1;K94}cRpu1ipIB2z6`vb@BD^&t+t3qtz*xZVGFX!yCr3M6l{-UaD?d2aceSf1Eo+$$#3 z1lHh`w}I!0<*`3)NWOSEUrRY(70*^V-}9203YpTk!ShssIg39SarJzhN%L+tYn|`} zeBz1I41WTj+{ur=(3fE=x=KG(U3undc2#LwA7>e%2Mrp(bfljM9|X^7*di)+ z2o&SSPhp3U4FbOwr{U^T$1k#M`p&#N{ zMR|<&l&`zX*JsPupK)zqT=cDY=~n~;Xhh7?-h%nTK7Ynk?~zZykzQ|*Zz_FxwA`25 zg;&_^gjb7Z>g>V!4)mc>z9?!_ER`m90eCQ(GT7Jf!1)0_BKtxM*Lq9Uw^Xp7K|EJ& z3Fq~WJs7k_>ufdDA7V|Rrp!OI_qvz1B&6q=_xDHoIJaRe@q1}EG6}LX=amqzvc=Lm z*nF3``0*LYS(?X&jbBHB{ngJFoRg1YV=3Y{lPBKEckcJcOmkncex%cW{d?!xT3g;y zmtc>&uI={Me?8IXZ3j+MEa-jCX5g>$+Xa^j- z!1(*@7t=b!A84m<%eM>2V}|5La47BTdaVWYFv*4JVl$YZzdgq|eko<#^?~xoQT}bD zXFrhMRIXR{d)Y9CwrM2qdP$cJV`%y?(zB$0mcF*#9mpU(=QkTm3c(1@X#^3lG z+{cQ<7Z?UF#wQEgqhupwG4#JIGDd-aj(?hehH+rNn0FfP57rs(uJ0L=F$S<>`#xE$ z<;26u{r%W-?NiC;T%B3<7sge7W*73V1-pisnD6_gjTs#(jjo&LBA_(-vDnLHV3Q+h zq2%Rwbn;5OYZiNm(ea2M^FpkBwY`$G)#ypIaS!Q3R|(+i%dbX<{oPrHPk(;Y z4ordTj~^|=)aocP2b{6AOFDOWnqa!;J(z0$6YyRuU$|QQdc#HN9rxJhha<~|WZV4g zFl>VOWq_+;>6Yx->y%$UZG%+NpYq;^Gg(gnK8+^zXm5wc444?632;A+Ib&XUNfC#=W`^xjOqbyPCdN z=Yx4w={NY|Fjp9N>?|LcOR~#OV64WZL!|@HIjnmvDPfl$aWJ`wHIsQRvL+@3|6Dl6 zYYF|oGb|Xwqg<1i_-x^Z87wy3YMM&w0*s zp4(yl05aVRg|67#8$U1fVbglEK4^4k^3BGN=!XgFZy_FM+T{;@1Z(aw#7IvZzh+{L zWfb-voIN_UH|$c~#5~)nC-(qUd9K_BuLK=R6)S<^=fSsb;f@PEDzSFToD-|S3Oa0M zIoGh4rua+nXJCg7K@+it&Y?dxJ{K0UV+XlU#`?)H>i{}I?6*M|{Hl0=`sx*aI*$MV z*=sC0-)||{UPybc^jXgxg&DQs_#@ckfCtFaThnFB1GdN%wm(h3cV-3$o|YV_rDA(W zdS0lR_=Dy7z}Ib!Wv&%n<2>J9!w0FJDsN9Fh%Y4Avo^=z_ss8svFd9Ae9*p|aoNKw z$YTeQxno1P3cSFUkTdPIT4O`t;qKdchn5Wi+ued~`*AoaTV3!VuDLWY1YTNu!o3wY z4%Sw1e^NY)ZGH~h{Cr>C_~>vx5boZP!Y>5>iW>y4i4#2Nsy${raudcN-zMUo1-b{` z$<3%27vPt$;A!KRa7M!Ma`?Drjla*;x--Mf)%rxtzv8-){-v=?{aqjG28QrFh44OE ztLXWfuQYp!^e1U>UpRLxbF$eNL@SpU;k&5IaX(y7R5$Ejyb}K%VvH=_h0o3|e6R3Z znSOR}P5vKWz!!JNomxw4yk2KzttYF!x37NYvpm6nbfjt9*sxq(Gjym54m_2|*RRRb z`T*~th1^xRFlw_LwfP`z60<~Yp515@-(Iyj0pFhSYr-~T6Ia%3^p~;~P@B!PrFNNz zj;o&Wht)=^+!RYN=Sj_X0a?S~>M^VVQ1(jWi<&9(4LoV|bIY2iy))*xwPodHUJ6>9 zDSX63KD#@fTU{RkUg(Z%;RNe$x7N^Vejkq)$I~jiVDOK5##b2M61%!=jOx!6mU$Pe zjX57N^*;{Yu&06>@NvLUv4Bp*3v51(|C;EVG?u8MtbYNUUlZ21X?m|dT|!q4Off}`Jmzkh7h4FB{yukhQzdyBmx2|j>- zlH;5W&Dd{amzqS*Jbpgk+m_XC%pQ9sMw|oP%SC+M(b@yFM=`f%AAp{*UuYiYn0h#e zUoe6-j13ZN0lI{rfr+b0``HS2ZxoRI4T7J=)}V#`tflBa8i($H6no_lqqG0lTaasw zFt(u&CGxj>Erb2u>cQ1slYQ-9&^qIL&)LFuiGi9O1uaG{jSMY4e_8E}`;imQCq_gz z=`|Nd`NWAZc8$zmjP-v|WsaQwx69lHucUDaZ{SG|YF*Eqknk^>*zHSxF4??jY&`e> zEjyBpt&zKEjd9kr^Ez`O>&DJDb_OwkBpU?}jIAx_ZRX*LcKPU%*Mkl`v%iV+$0qDO zIMd`LBUxws{qDnuuABFDR?O?OLwVVs)A0J)et3GxYWj`NMe>?A`T*=3eV7EkO{M;> zEU}j|33H}}&Ob)}f0v%7$x%Ny23ONRy_+)u<@dyQ)qL8q9LWRvbtXcu(;qxND(Oj{ zo#Ib@P`la#vXSg;XiCVt+weyVvwdTsGh^ZX<0)tTSZHhOB;wx?<7+H2o5p4-t5`J9 z*P7W!fZby%pATio#FizQ^`*(^szrUQ*mXmjmLh`(0KB8VMC+%0d0Jn%6WdO)t8*aH^sLJ{a?IR z-rGaFP{mtTS>l^O$Gd6&gUp%qM9siWZFYOxf;=%n%61sbwLD{6uwmp#=;4R_<~)8| zp8M$cYVfGFHNltZkNTmugg16Rf&sAjlwjb5FaW+O#VoWeogLSqmzIx*VsYXdX7!q} z?6dleJrHXv9k(_dP@Ew$*TYvJBZNlPv?m&QBmF;V{;@-sNB1+tk?AG! zUMs}J$d3&Tm47+oiIdMN3ja0)ug~MX6u!U4dy2kly;$Y&+g;?1McN@&X~dbB4U+Mc!Ky~m&(CT8xZ z)JOWEwb70*-jVpzroY0YU(F>ATy4uQdjQ(;P||X1pP>%%VB6MpS`E9RbHJImLHAr> znWTTRF%mqxfT!>^r*+1hDwgM|*!i4>oliSMw_s$R3wAL}{Db_Uohlhi%6+<`Wi^8WF5PR*s5cf`cWzq)p@>SLccc3uklPF{Q>r3+|+o@?K0#Hc#a2X@EF z!V%kJ5A+%T&?)c&=fg+Y)MZgVi4JrUduC?WGWgewhb+Bzvf3)LN06t{MiYBe=2`M& z*3^p6!rS2=Tx1R>!P~h_YQr*ZG=mrTje5Vs7g2Gv)nCiXGd{)!e!xeqlKrSTFO=ak zI3wBUZA{ErXjt@j9w>v=L`=Yyw2L&OSy=m+L zg(|WwC)}T2AOAva%h|-1B<}W>mW;RcyOX>PR*x6QURU>y+1Wch#b%CqZfo3g<0)?- zSlu4pdn{bq5F6>GsjKqfYOgXP}1{iSRLd zX1;)a=mqqdvY%b)q1Ox)_xi?Dj~yB{eFeHj{E?uOd#L9~^D{Nk-965bfwN?VX=I=+ z$UlA23}`Fkysx28^sIHkGj;i!Zwk80>w+y-%6qoQtvv$F-`E>~xqTY6gL=O>BBE0T z@39v62<_jqLm1VHIob;S4?x?W5Zp!oRoCUz^+(zf-=q1} z8F2}7+f?iWKP3yn7KZ*yC;w^IWxSO1&lyCAskJwl_v3lR!yy(VvgUVIpckSGCppS8Dm%q3&U}9#@hZj9P7ppIF zkU@)1R;2tJK>b;4Zm2KkEEs>RfY%`{aJN=IlS$dmk|{ z-|F)Y?G*0H7H1Ld7OMlnLT^BRqQS0vw6}+Q^bq@kY<&{!-A&vdAX_A@>!d?FTel~F!y1LJ*@-O(2NY9h){ zxn%En*S5rS7B?ChbrUd_9C|f-wP=ohHv{|oQ|uu;Ep*=Ek6eCBuPL6&QJd5|QT0-n zk)!e3^a~$3@h`j3ck6CT>ASVxnQ>5GjM#sDo#7m6zq3<@?=&``$Snk?RvX?jX0_Im zmW3T}z7;!Qd=g26@3pfeF&~*IjXK&LrNOt_Ii(qUU{g+MW07s!Io1+;N#2?tXU~aK zr`c=mtnH6hdY1J@9-BO2`!VX7OBr`GbsU)fp)j7B_%V$m<^q=jvFBO)b`E_N{Q7=i zV--0s0l#g0@8-AOckrH%-tXbP%sE4PV5P0&_ef|p`kHtKf7SBn{^S|Vq0&~9Hd=Bk zU{)rLGvZ!-A5;3fdOvAL*^9M5T4ndq=CZqEto8t8%k*a`Cb|GT1PcxZh;!d%> zewe~Pt+}+wTS&aDan1(LdhlLRf9@=3j<06iVOz~kxF?K;u9im=M}_uRqT}<(FWs^F zb27H2Mf%f4ztm5CTgY$P_vcUP4+`<{+duG4Hr)E&fYbl*?I+-h=;P&MlJIVC53V?w zvteF51!qHeg1Ci^0eo5pIfmk*op`>NtW;})HH`i!ly#4w{P)gEa~}R-@Yvh`&QDQ~ zVjaKXbBcWJ#Mq}XM|<8}!>@tQtAx{NWTFTH-LXk4g6?{n%S3 zggCA9pTj=-Rs3xR}O=NY2=gsG-Qg&BIWb!E1b6y$gZd5 zba(Fh11II6mz)LKTju32mB-z6Aoevntj)_T6t3s=F7JUq$h^}}lhiIGD* zh8F0jY%5l>_pO@Ih^z^%t3T1>C1j*;E{W z{@T{3p_}0Q`1Qk9%a0CcENCZtl*%N>_YE8UBeeT4cp3U#hq8^CW1FVR>M+Jaf1aZ&Pwz{1mpv3fLA3&yc~QCpaiP{>NtSjO6!kG|#|BwpQK1 zB_S9@IGP~eTyRv+uWD_$>N`G8dLInmm-DV~|H|{Nv6A0x-?Co#VO8AqjJI!W-s}50 zIuGU96y@EZ^5wAnTHdEw?B}H4!TZ$ceKqfbqipZh-(C2xSfxUJH}INrCi_Vio)daF zd&0%g`pw9audUszzVl7=QM&Y}zPf76ZeSU6SB;VX%Cn@)Z>6czB7U{G<7%wzA@)~@ zgT&uBi}+p4&EIp+yz10F>bi?i^*utn^3zg3mt7I2k3+s9x~eni1I)qF^08N@Y7U_{ z)5`-vY4F%9SM*!)(VvaQ71v4Q(EP5|SkOUk=9_$Pl8(h1MXm#1-o=`_v2^Se#>N;z zzoEOEEL*izVff8LuU`3N_xpU_R0u*#b4w>Pt#%LnNQ2isXwhS z5WF5E?pXzYr$O+gfX_y0AaGp#K#Bu_&QT7qgl`!ZtwDGBg!JSI#UEzPlD>O7yo%DK z^VFP<i6XBT_TgAWta3%@|>c%3qt z%0Qs@?x($JwAV%bEu6`)?O8RkL|eea;k)3f->fb3Tl2Akcs8Pm%M@FOXP=30V;$5y z31_<_-fnFy<~@8t+JESRnI@jyBksMy`Y}W3f$sEnp6AwP53Z^Yt-XPB^9P{=#8M%C zCi3{b>ql^>+=!SrqRc*#kJpDvd+?Kp)pr*53@3~(;X4278@WrV=(Zjyy75t^W@vkp zmw5`Dhd;TJIBTaozr41yS{)v$?in7HCtsd?g(UoV!V}FKOZ>f|Y;{;?M|7e!Y`{8L zyV!hQWAs=JU0&(V&<;;~OvTK^0Vz`J%V z1h-_Hr}WE7m;IpbQM`nA6lom^-o*#O&vob?Md6P6gdLgL8?`SQUWm10K@+T^@$KDf zm;bH~4TL`-mf8m-16qI|3O>5lu3b&oDH`0?8iQA{a=V@uFJaDN;Iw#yvs4%RS&Val z_{{Pw_)-4s5%Ya}ME4g;cK9fIdlJ@>-HvJkb)c+0|px--b zKjxs*tKb(ZdmLvSdZ_!nSy^xu{5j%0RTJ*$%&-U_3&k<8xbw#v>bigXFmdFx4kh^tSV&~))5CjLF= z7@cp_&-eznwuN~ZQGp++D7MfCYZEBbMn82PlHN}~1^hh(KJ?SH^C@7gv`0uAStb4gaNUM%$nwyEpnu9#!ZT%tG0AqR zQMdenMb{KxR`GEDg?2_(K3HFaeclKsy^5c?{A%b^ zk})dg!Q+fgwn4=9tBa;j6Yggkqx?iJmc1QojZJ2%rAX2beMk4 zL^i2lCrkq7BjQ zmnXbX<8CLzuYHZQc+x&doX=3lL!U(hM86Clm6yyV;%%WJZRjeXUD&F_FVip9z$)#L zTK9Hht}i;G^07Q~Q~*wv*GXDe%7PCyv7b0^0?T&JwUW7#mP#-#(UU9aZ+jJe0Qg{G zQ#_75+^tf#oacva=c#~rlKW5mQ(WwE^iO?(pF|e#+Ukq&roD%Ip0H=1`SZ)`ZTMu! z|5x!$e*cwnoq07fK0}wFm9ZTACA2;PERSAfMQaVa&@A=>W%+ta?xQs|$Dagj6kp;O zf-gLY?&oT%xIbWD-^;VsTn0D6n`DXc4}z0|Lor-Wn6WLHkZ)Lw5B)M}Y!8}yfOGj{}@u3s#z+M1YZ5bXnkvELhT*k4`|+Iba0E(5QtfY&Bu2J}I;rk7%OYUi0t`aS}?NXg4=i?LAu zIP6XD)%eSdm2ca4$FCGQlv~>feDqD}dTx)N>!asg(eqB8x>HkmHt@cL7)N?vdtADH z4@AHFc*=&f6y>{(-x+(ADRV3Di=*$K;hjCt|6SA%m07~Kajfq=Jhkd9@mtSNMo;DW zIPW&G0<_kfqhfY-$&2acxEl~fmc(F&9H0`Hx7?G&hGU$ z(4|WwyI15oekjA4Q(H!zvE%xHf3~qJ9v8v!=hQ9OKSw@|wUJltOMlWqKH`>!@^$u8 z@|~?UgslR)bM!G$A5&Su`2F=?Mz*K$pbz0^V)icWCqrtl%ALNV6*=|~x8kY1HMpbx zI(+Uf(i>w`yiuk78{af<%HQA>bPpnOyWPlX46MFP9_)3%^J{C@vz}G%LB7eC&~oO& zUksUc9^sp8r&V8T2lZK;m(Ue`?k%DHbe{Ka_<;xMGr9`-JZx26o1*a%f37ZkTJvY* zInlVDi_!)n82(Gtrx*BbU{;n)f;d{hY$-AQTc}UEw$HPc1;eYDGr_HaBOboJ!XGb+ zpOqP}xZ;J{QfCEswOi@M&@JsznaMp*ml>=r$Mct#p>g2ZcVcR5 zL5;S~-qK`y;xYdtZX4Ut%xH8Yz*hHqsmv1UUrLPc%;erc^)%}Ex2O)}wHGLcploS1 zSJGd8BCGntJBMxRT9{iNTnc>d1J5G6xta?sw?r`0n*Lk_x6ek;&qPnH)0=s3tofUw z?>8Qo{z={&YrT=K^~9d!KYST|p$`r*uWZ`O;Q!Qs`FLP1SPSmJIL^97{+W;S*DAQv z$AfLIWY^dD6BTedv$IGm`fl?++roJsvJ^i{R2m zTIGZ^CrUesw52Dcof@Szk#;k1zmD{DPCNwuD!^SZ&qjIvOf1s;3FSvbX}=>a@quu^ z`1yc&nK=yZX#Xu*N#miul=7tUJQ>%BDP zwoD%H{m90SnePjsJ<22e4rTDfe8Lt@_aM_tiQ;cU>3+=_D_xVsD-#y^2) z8~dfsM#{sw|Ep<>Xh(Zu8@QgNZ?W8mz4+wi-mS=L{)5<0iql~oai9<8Us?OCWSXhU zI-`q<6fDo){@iDh{*>%R{?zJ4oPis%d*n6l%hX%I-l{Nq z)ed+E_^L@Rdcx95FI|0kI5zl`AU?<)iWbl8Pl7AeFWSva>hZYq$g?Z#w-dP^8#=G} z87&@gJ=q=Id$Mc4`1aZX#p6(0;J5I$X3D^*qfcCEOABBePi9J)h4!9j@f?ivr z{5@ZMp{5wPI#b5oTRdyqf4gU|Ub)n3+xwOjsNdy?o{ zAA+tA@~1sRG85z_(x1xan{(i9;Djs+`#kpT*zVbN$we4*jk|35y{0}Lez8bjq`!&{ zuJN=Vw>apR>2ud0zA(TtU4D6ZcA5Trz@qY#An#$9%KLRC_U9^oO61Kj-yU?**mfia zeyKG(oAf+s?VK5mzqcFSRVSYm#b-Kg6!Zz)(Ai++JkQVZIm0I4gEZo#wt%wI_|e@>0-zI{s4HZ zJwo{U8gfVV=?(q|xxCKY;9y!fd^u~S4g8d>S@;RQJq2&PS9TFC#8I}bA#kt{erG2* zw7TAw75-jp?rK(f)jgd$O8A4s+>ZKEM{)tTb3c!r->r5Ve3}=H=^XNF z-3SMi*ThZAZ4B1NEbcwS-fHw+!Nbt1Hf+2`iAF^K+RD`U`A!SiVvsWA9Z9@U+jBoY zD$eP_5pY{`rui2xDE60RdhST%);aJD-1?}g%kx+A)O-qm+gGnV{0zUb6$4(99V`zP z1B09XPIn_|JQvj$Q&)aHw3IsHobjjT- zmY~3#3BI#|ndag-bh=s1Bjcs-e&1y5;E6BNY+VHH*hwFD1~L9-Gq>H=7I23;sK@3$ z?w--TUfh{c@0*VEIIRrE5j4>BdeU*f zSz{dy*a)xJoi^Sp0-twMZZZ6rU?v_)cq1Gg{v$q8{MOo28bO(i{zmUF3a;RW@K^XG zyfXL%j6P0%8Or6Y?ZLDvI(x=4t*Y}4_f$X^rhD6i=N$G=;$_Zup`p1u>V+aP$Vb}V zeHZq5*A+Nhx^8VK7s0#8vw;8WIp=uNk8Nvdf%gGd&>g5R@O<>U$7{kSXcGOBJ^`D9 zjx>1-MfRBj@ps(q0e9ve6diCcEPJMIXw~nJ9^1RNWrUX>RGzS1^~I*_YU)*Av=(DU z@QFT{cA;U7c1NgP{2@k~b`4E4cP(jOS02%fA<_yle|QnTsDeR4ek>K_4Wvt+@P9}b zje=g+ZpD8x!MKpm>~5p1=%eU>Xw`52%sc^aU=4$WJV^0VNEywj|;ZLjn z&PLwXht5c4wSKOEzR1Upv)Vz?pXu3wvC>&hr!V4>?d%Q2*y4`$Y;S!#b!+^)sMqWj z;H{kv<=qzRS>F;owYKB@Y0c|fiuWXcP5d?Ur*)&X5A5rMvyL75L^Q8v{U1HHd$BbT zDE`=A7`{E)KhNXayZI*A zjsiZ7x(|TAvNKjY?;u}$o_k@56C?X6)x8uxRlFB5$m2`g^D5sFt#&jPjZHF0 z>CqF&Im=@Pet7}ol8jR_QOnidgMAG+cw5%4+w3LMPpkgN7>CBMu~)%q?Sr%Tyve&L zPGOR<6ECSg5<6bWXMgqw`r;PqFF`B1X+vXf!1k)BpU4zA_j^7%dm~$rY*c;B45ACm zvS#TgK3>5uCRvB1!;ZG;kdJ5HrOVeEx54c^ILQ3h;*3Lm`QwG$i&5Mj{L^V+jGj%v z%K}G)&o6^-f1cdrf9icReeEfqW1RZ_8sD!XhG4hxuPxM2CZ|)JeXJAWliin*Odyn% zO4qEipEvb?)W|2AiXZiwoKRleqwm10p_f-))w!3pQss@ogUCjugV~QfYPQu^-_QEJ zr2}4#Jh~szi+pw!ze{CzMCH078QFIIrZ09EXJz^_i89K!Ir^@3uix@3-^w?=Z;9&A zoa^@$^s&hyer8tZ#G)C)$Fxtd&XEm0p?;>Fa6C>0e_wZ{(Y1)Loeuv4ZAE4s?mJf= zJ8JeD`Ru3pHizHsRm!Me-oD^m;*pEzQJms9K5g>zY~in&Kk(1^u+3tPde9}wZ{8oh zV>^1VIePyB?@iJBy}aAbK0_a^+&*)zwpb&v@;>+(qx{t;}zz)!`E(H&b2+Zn~N6rGS9_es|A0_Nh}^PBza-+P6@#gkdP@&|yP z`NCuIUWrm)(Dyd%2Fiu{d~gz-0(T5?*9-lIZ!q}Y2E0V8K2E>Y#*@&ehAbNXxnmdW zRrY=7o}ctDf2aJ%v0Y$n*no7XKdtmb_@MU`?_*f^V;koOew#ki7vh=)N-s=E`rX83 zyu!KIALk4N4(-if+wEUI6(5(=6Mo_Ri~SF@UF=U}jMJgPlPK3kz8rtzOH|+di$fga z++zAL_P9R$`u&1y*dO97>MS_K8HjuS@a5zzB>Mhy<>6f34t+t4-XULd*)g92j53@d zl=ocT)8L!h6OS$(&bDYgQ=|5QCv?v92bp8p4M=9FGx?;bK4fJbnhWi7-+``upM0wC z8QRx#SM=N&J*(04Tha5$==ntS{CA$RZBg0BdCx`f4@Kz@@^ttnA1~#3gx^|=mRZ|j zOtu6xn>b>Ud$n4erz;P8-<4->f%T*!^B(m@wieo_&!k>`>!*%Z`iEY1D|;1u zIeRSMX98zEZ&m+Y@QU{v^FKGU2V7rwVR2G2vC zFgD<_pAGGKZ3wzfms9Uh=CQkx-tM^NJPeGIQE*!j=-@?Cy)n~rV;J4B)jGpi1 zIe&0fP>9OEJNo`Ep4aic47_ApvLH$y{ypbOeya|pVYFr16I?~ZJ>!iN4L;o44;$U0ARpXfw$&)82{tY+|uY7RcpO1o1^J?tt;61V%J%Q8lb0?dH7pYTo zmf>j?!#Nwldm@@+?WanAmT%2YxR(g8v`+Ha(4;EJNBGlT{wi@w6sIX*jy6Vk{X6)8 z1N29Ae1$s30Y}j#)-Lu|AH8vx9GAIBRPCTqN8k{Rs8X=e>oo zK1tovriF4-$wCz)&fFU)zM%+DRMx!}8(8neCxFLFIsHlG9(JO%At_#k=U9B5V{z{L zOO*PPYoN>W*~dO`{n_BU?nGHpTH&p9B>$V|ueh<-yMn$O9keUn?i$%ab?k@M-%7ee znz84n?~>=w#Fp>Qb7af6IhZ&3n;ggI)!w5uMSbxCdvVK8I4eGLcpvr=TE~6kv1xWT zBpqZ|>bLFm!RPYs5HFtJ>I3pH_K)y=Ty9g6wGkheTb>jyG<>84Z@WTle&Db7Z}4n( zJk~9L%vWQ5eouTFFdYwnseJ0Q_R1URGrE7t>pGlD*q01E{>#>PSQFg;nd_}vRp45# zcvfXcJ)<)&V>?oQ2KmQ^WXA1Rzhe0MCE+iOO=6bYI>FI#S__T%4SPfQ_kQNh?SuBMdTv~X_FVt@ zae3czeqv~>o%?-YRlPpoxzV!Ap33JWZ?Jkj)nirr1J#9Hz*e=JI8Ki!x<6BTMC{hD z0yc$Qv=)$q|7z^L!L{`Jz!}7q19q|nn#wv|m>;N5EkVziYwc0O8`&kY{*ei89@hEe z_jjzqMq_J`Aby6%S1eMFG2YJ@i>zUl)qN2vTVxLJX?%Cs3ussEDP41{^e0yX8{rne z*GG95kS{_06Z1ZLTwdsaX)pIT@_v!Lin%MiopOe7w&3gTvuW@(Db{|GbD?A$YS*a_ z1pA6B#S6R<*q|suXtS8-0C}HGv6!ty+U{O{Z@SkKIVIQEBrV2Bk}!azH3Zn zJ1h^~ITcL;W#@Mx6 zUSHGo%f02r9&8Bz6y&g%$RT6CgdJ@tyqULAUn&V$v7S_H)I7VBPgAytO0J z-j<%*y|p)SpQ~em1CkH!3r18{c}>nb@4TYt=iEI0GxwR_R>|{kaew`ae#4W={$|xk z=mC9`F4`YLj{9wB<49ya!m}s%E&ipcxT1E6VhtcI#?+3)_*b7cXXs$&fAA zzk@tYF`RWj*9h#Kx|utjpB?%>k-7inDcEmTnM-2q?Z;O}bofiuZFORAK_20U&Ijj? zU>0L@M>;f#5Ff70|vWmShyd9^9nFfRsQzstA3w$_HC?<#xz z8ho))M>#D2AAh6#V}IlOm-Su!c0&BJzy&MYWBS5e1Q)?e+m*ZO(;16mMC0dJTg_i7=j17PtwrK?Skgt#82IJdrVMf{_>nR= zu2?ygd$!9u^zy~%q@r=j&u`T7*7wM)H(-0Z&R-1Kk z0pC883(tYF-^lW=c`c*U{}6ByPF};>5Dx2{_{Ye%NVtc*$;3C74)j=bAN+>%Li&Hd zH^ExT-+cZKEb6o#)6@jrH2{R=tUx~B)RqFd8E#h4@62N!b8A@p(*^M*Xl(0JkI z+cZB_`VD?+e$3pEuKCjZXs^}${Opf^IX}>{R%n!&8_kt`DK$Tu7tK+k9L|&G=pTS} z6SM(3u!=qAplG)p!9so5$Juv3wEI;0BHR; z<>_03JyG;WxMMr6|Ln=uA<0%%UsmU_E;kNcNfQ5vd!9~5E~dRUjIS?R)RLlKRrPC| z@h?+3-G`HO@ZWOsrfi*g*IhZMIQARg;4uzf2b|ArVev)(bUMmmJR3NT7-^3pwkMJ1da0&Z%^6rIFUPzoj^5JKmqRP0P>A+%?^{oSoD*fn@bidBGB3)ABd5_T{wX2`N z13ANPom=i^{Ar%%&i40z^T1|cVBWEJ0G7rc(8MiwLm8(7E^amRRlxTTy2lyUBq_lWPUFyAp--y7LhL7P{DRw^ZRq4jFh?2a-Fd*4 zHF8jM!#^W`PGLv#EAVyp|Ji<+GexcN@b<&AY-}I8UZ_oj?#HZbefnh9f5~lyX9;FI z1L#Hvf+eMau_gYRq0c&7-5VoLI64q}^2Xt5?s{Zp>w_i0u|!_^wZ$j*dGQ!`|7rfA z_jkpZcTeZd5BVqYF1o*lHIbyR?L13mLvw0N3a0Jao(Hj|sJOKNKIxUyesOqFmN}|I zKhagnmR|m7_W8@bSQb4>o;bw7{>T@G;HQQTpNH>8f+sq<7h~3kYE8V4JZ%UwfHV{50 zo;y&luty=&t?%&$jGy+y;Ne&9zW4BTCGH-}4Pf`i8InFN2BvL;$g-;R&l?C{#_n6N zlMj8{Mff2(Vf{-==s_W-Xp3%v>L-tq^vb&c;-`X89+_CMfMHatGj-SD{l80GsAmR+DbL(-F~`aRCb z9du8x@C2LVwDh>@?=;TccGhieceW=-l-$wyTc+?)96b%0!5;K}KjIHPd`h&R|2n4g zJ!a4Ile|mLHLb+`1ZBksT7Mv)>qm~?cc60`IPX*Hz!m+E1kH}}WVSARZz*WHz~ve01gb-u;@P~g`h z`ZFK+NhX6$Vu$ADpYd^91)6W8#uG)#W~9%TLpKBXT&_63vb)zhJMlQ;F5f^vz31A1?gY3 zrp`vr)1Yy;gS(ak4@^H}Ie5~%!S{nYKcb&IyB+)5*m&$lB(H;x#&#~p?gUzfOz1qu zqji|Iw$ZPWiCNpmdy`!i>beg-Yf+TOXpeR73_$h zMNJjb!NWCW=tDue0qfx1z;P07wt1TayJlsIwaoD_59eQ9&|>wmN)qyQJq#)C*x~UozU9YIy?3Q)Q zhg0BX2E0swr|)4cNr&EK-{fNp-LZgrm(uS=v>{p~T!wZa?^1l*_=^jGf#}!qxP9Z% zW9gs3|2OK{bCh}<&X;%hgLnO+8QubCAlOYF$#K;dy77)%J@ya!V?#^Sr&~SFo>9NX ziXSP1cNP3cp-I$9{hLhLO_Y_sRJI4I>vR0Z_v>Jj{aM|G&>{GV|F#^@$b1Fg-*MNn z^k3~R=cGZ|r(7f3sa4uf+PrPShe(sXhUUAC@ry244-Xs`Ey)=_{mln{)*R9h^rgF} zXEz4Zn4|WpvC}vBFS|+M{*j5;)OnkN&GDpH;M+E*&#Ms6Y+G%TCwg@R+AJB)blSTo z-s5eacZMgKNhxSqT1Ch`F<|IpgK{wsB~ZCz;6lGx|KWF^%_b?DvA&0u6h3J_6xPMR1TUZdL}ydR(>ZOVpn7m{-sTdY4{@i8FvjS_OZh~Kg1T(eX6?0 z=foIctdH8lNJg)7s$}@m%{bPEU_N-5<2l#d{mq^h>C}~;t%Pwb?SlNjH^|N!JiHp( z;B~@xT+oQ;=pc7*zHtRIW_)YF^A*>x^vs-rFY-g&l0SB6#pEr+vagoz=PGD|?6LLE zc{i;x+HbPXrr>SJjYa$7k-l8zv<58hz?Pl*MEan;XJW43*ehv`Q;+c{PEt=cON^=C zi+?Nl?}vv{ol{M}=hi-GbkuI`*Yro<6$4If=dv4uk6*~Q3TJTUstp{`-j`uszC^!9 zM19Fx$gwy_=^jGcA|9#RTer)cB}(Nwc7tb|So`qglNnR4f^F|0_Ue_N4%^PEdc5-7 zuuZ%TeNVeT9nMz3S@*lcxhnZw&R*4h!*&+=es%Y->eZZNtJoY^_Z%OK&}1qA$5}U1|Dm>pQ%F#dr1Zah0S0-{kJ}a4y~2 zROahxe&?+IU_0sZ4Onu?y}^>@_Xd}t7m?jY2Azm-Zeo#rM0b|5x5H-{J(%Mz3)DyH zKeEhGj^9)Hn}{CdPw%50=DS&V#duV9;&FPJUw{XfMRLGYbvb;C{+LT-=rL?qCgI0s zdp|HS`r_GrL7ez6IjTWaUj|p?ibe zy@g-+BnN-bC(E^uPdmpuHf_lN_}7W~_w{qU)Zl<*BW6ydBWV*|fZjY$|1IcC8)Nt$ zbCw`Z&;;UcU~AxKs4E5D+pMiNo++MLo@b!jxM)h!*Ztw$*q5A1U*G1^U*gx`S5Qko z(p&pj*V*2&uATnJ?ssbw?myeZKc|N6M_P9rX^sR>^}~t!@lezchkiUlKTdUC!Z+ll z6YjM?_DY8K-;Hif{kecAd%Niq{f^V;IQ>n&1RtrGgei9!z8PPuN{XE;Ojqp+UuvvZJ*2Vz2BeqNU;KXe9Nz2Q7ed0O% zX0N9{GV4D26fqbwqx%BIa+O@N0Y~Ab`mi8^qi_;=afh9KDVRAq;ak9SK6hWlte1kg z`_lh&t~Qvm`+|?0*<@h!k7wo$%;N68z>Z**ex$GVv1!aRc&2&oWS+ZN7bnr?NZQE& z<56m>k^gVN*7yRU?>Y}2q{|A&(d+`(LD!cr(o1b2jyk|h{y<$)FsAa4wKb9vt)9QSL7cZDB;m8}oJ6ar1>Pl6h5}uW+8)qj^$XFwKwV zYP9!KFotnuotJ`EjWNP^tPvxvU7<>CACjJ@*5vn2mDG5LMx{A z)SBI1FY~S6Wm~r@W+^@#*jwa!hi%GOl#da6G)^6A zi>2TzuC(SYKE3yU@fh&--s|@6+P?D@6VR*O$N9_2tpfJYQR3H|bGl<<;lbxX%krEV zfa65wcAfZe<{H{o%T_t_WqXIa%D@>|ZCiP}mtuX70LHKP?5+*|_9%O|?0Gi^>*2@L z=6$Tk7V=!HH0UsTGHl($xOa|4-l(lp!C~zWH`8AEaKFY2uue5RJh9MzK!p zw%*#g#4gg^HQFcDXYo!aS;UVfeU$Qndn4H!h&_x<-klO_A=aql{=jz1LuS3P2OrTI zc5bTko%DI=^hwY44(ZHtK0Fz9+W5;JRBSBqWxB)t*RA5~BVH`BqsbOYm%P3JZ(L&U z$Z@7(pBE36D0-dn(iiBA(Xcs*G(}wQpkoD*Bn# zS^l+}+;(lE1O|r09?L zp4iD+4>|dT;4fE1o)FP$`s?rbE&9CNR(L!5qxcN?Do)J3Y}JfVC$zG+|?mc=*i;H^_TE%&lcYyPyejhsIN&yo4! zy}_-(((oLDYYCcDk^UW?gRvT$oE%SJ9quh_gGuG(^&IPe33#=iap}A4+@_q1o!Ina zho+2tlmAG=e=KppLwFU*#7@E<^j6NsvIm_GfAvrAZ1$(Hw`*L-ChmmiXHAi>y|SFW zQnr@MlLSY?&bLti6R>E|R%~Yd(OL98)R96q&wfbRyG;YZ;9;LmOZ{iguk*6J=S^Jyx;>nZd`9t`k?R4Cy$on+uPiu_d z8wD*SuWV0C;Abj#H}Bh-6P^931H8?F7ddZxa7O3PgNajqZrZ~Z%HRn$smYh2i@6GL z86@sNE`)7!_NPIU^V8t%Lq9eBQGJvAp9bgl{gk^+@2H)({-@yi@}L#|EY-E9HYWRn zU<9;&Bs57r67m5oGatD!v;`S`t89V2)!S=e3dss$)xGdedkue@f%mkz4{^TQqdx{e^0bM3r;YyW z&H)bF2X#lhY{^>sSXb&Nuv*4v3EO4O?Jj3!JOn+-U@`ccN@WJSitU|sX-+_K;9vg7aVos8xp1wO`sgM5@;V-HfBHuJ7IZp3JK zoo`>FU7gE*MV?*%ee{s(_!xCaFT03m!1vks$QrsxS<%F6@E4Q(;1{InyXt%qUku@? ze9L4%|-SG>EW=yMXRvv(t3*L_^-?|z^Q(n=*_TL)e8F?*ZucRz*1h}i;32RL-u5vEC8$Kkxq0NzOj}9T* z)P7%d@KXa9#xs`ZMiM`WvFN?={TaU11uMRHMDT0pDcEl0yJY^-0Axmnyg>DmPL#op zFFs)2SqWhC_FrDY9d?bF;W74p#UM}4UsF@uPiw)ln&N#b_NRT_GHjWNBZ{5o@v%R( z=V@){tT0~aJZ$x^;$Dg?-`ee8HD12t^Vk>Xja~>Z@EUW3e}IX}EBT96WUq%lX@3*^ z-%eeUo5-(S`^DS1dud!*=kuk0m$PB)g{G|q=1yX#w87vsa5#Gr!H0CVw#=j@TWy8bg zJmLiO!;f1Bl_!CnWRkZ2%?aB=pY@RVE!yLr0QOnx|7w&bUuT`Wlm=emQ^1*kr|N6i z)(Uo#Ice;`#l$aQpC`{UBa4!JnY>B9#S*#xBoj(MD#0)4V*)#62U&yq^+SH!xomwB zzmXdylLn6PSENmJ`q{(!>xV8NMvx`nt!$kM>zD*wyGUEm;|)t^@}Q}EqsbdX4*lu> zI(ld#dA@GGBYPBFz+3peH)DN+i~oghkwyGT)@EFGAtv@D<4k&%A1A-<3+L<->i%!fM6;A8d%WY* z&O9zn?R-rAoJKqNxu~6UXutb}GN+zU=I<$U)%gj3*3{7d=GLfhQ~B;d7jKMyU&e2n z-tJida1SI)Cl_J@V5D){+^W*1|mZrt^2?!Z%}I&Vw!C_4WFlG0w*0{O z*_t@Y@Tqq*wyq8 zrP;-vX>djTw^M{`*1_-cT`?B0CFls{PS?~F_f~o_@zU`}`b-S}x&I~FXyktB7RDz2 zP5m!tSJW5Lm)PX>!*SwJ*;Xs^$}Q4aj)j&J%YI<2^p_SfH{=&?L*M`WYsnIbv7mmB z>!~a5oMhbBzgxC&%F7voK5PRXHoRb)yVB&<{I+8ssj=%!S^|%M2rP6~I%4gteStnr zbq4BXcSXG&7^J~{^-1k}YLoV!RU3@W8n1bz{oD~)$r|#@?BOGv=Ft z9Wt%q^dR_vzrUS(Zogez4S%vR_$>W||Dj($LN`JC?sD_}(|_^(x!~K>q5LoLUAX*9 zbSj!B;aavTS$@8ru{RILnHSljeVf=azirhTps&^K!2x8z_UIMH=HbaHJwb+8%BpYV z=*`1>r|AqS+?ZE;oA8tQQQ3qwvtI7RE|7Q>n#14adg}4KiRoHxEdV!ZKvWv5tC#53h&9zbwQi6GSIi*F%Plv zn}>Dpx7sZ`^p!Xhz2s9|QLE+I!@5V!Dl;clcv%bHb?VC6p7PFG2D$rhTUl?&hq1rn zJolx#@Kv#}?xW3VcE}_D`+K2_4ZZ^&wQ+xpXh;t*o%i;HKkvN>|FVe}`Inu4kuRQs z{hF;&HcarstnWB^8+WFtT%yQbS(HtyNd5Eb_qJ&A0T5{rEhA#z;~;R zFMCw~Y<^FV-Y?}nAH83~d*j{(wKJ37YG>97?M&yp>>uoe?q@;=hTI`;BMSqs7V$e{ zZ3vFx(=C`;*$shUCf}}jZjPt@b_x8jc=E;MJw@ zH*76_#~D;~I(~dMNg)Xe%Vu;?f4!Co{C-3#&^un`~}V`&Xuc# zuLlJu*&l0eCj-k_oO#RZmj}nD4*BXoa5grfg4^%#eNnnyg};rr0tfc{Y$e!N?G4JU z$m0fkvGqeYKw5#iw2ye%-oTEvN-m6Vu^aEk??82^{(STvBVA`_oulQ8AidfJl*bA= z$ODJ&>bgMvgpT^^>phu_w;tOB^{*NF2EX^{5d2jP*k~Ltum+}D$d8L#sjFQ72k=jG zJQa9mv%U3k%vn2fu0}k5d?eG74{MF=fPYY4#plnmCux13$(W{5R_X2V5Ek=0o!`=p z<$0!fcJs{e)cXJJl>Xr875(*-z+KIcVs-riI#Y#D6C4|S+8OdMB>#Vtrr4pH*No)x z?Jf*rZ}MB(4;UkMO^;(+_joqD{ek_t-p9Ra@8iJmaq>LyujE-|Z3sFT<6@reJQLLU zGwPgwLVF{k_Ff`QHUk>7?haRH+7#cjLRg8GQJa%>Opl|FajJFkDfLO_#(b?DRvt9oM{wfYUlHyLDxk&I94V}FVBO@2+#%{eDu z2=AJ|FfCpY+@tSm*VM0eX(Q|xv0#eOFYu?)cYMhpr^qEsUR<(A^)*gk@VDp~m>!NV z#_yN;ZI@jCCCW;cbZ%#O-^@REUCh`dBVrHM{tIvPm$D+=Pj03E*L^VtU!V`9HSV2Z z-u?ffe&cged~?qKb80x}r{nL#e74IsM02jW*IlBGdrU8vegT-FGkE|R&10;a4MkYC)Et@CmQ{box6mzn|x$kt88m|z3n8$ZUOJWE#PC; zi1@^7-zj^@LTxVfN$2_dkt^#Zcf9ST~`b>Zq<3<{dJ8e=KQ14&FNhB z>}UV{YO1<1aPpyyMz|~Z>ORu)j5R^!f>U1YyMen~W-=eQJb(C}rjgM2`F?Yuzn;vy zk8)36EknM9wC zsSgrAMsh^?p^F|Xe-rR;)OUB3ADh;LqPLb+MYQ{i8Pgt^V6~s$Y32CaHM!GT%3p&X z%XaP(=;uY8(__q;&F`!E{nzO5LTIe?w4xWHv-x-2Ywp;S&yd!K&S1o3Mt{q_?3^VG zPJa zCZGJsIIBG|o#%3XkKy@t>&iFokddset*UeSb=dM_A0u1^j~D>(oLf`O1nuoQw0R(2-ibdyjwe)eq*0>@V&G*L>;X>ckmp`Q+twP$Z9OV zQJa(-LA$_Kdvq;cksTfF7T{HAQ!zzkhvU(f?yp7mO}ogPX;(56bZxa7`2~Xy1A|!h z68gD4_~2p5rLg7Ydx9}#8ON>cb1Bx<%iO*BQ{tay;T3+$oncW!mC zue>^Vxmj!WgZ{$uvcR)e2iPsKpKT0AzbEF~l}qbM>T5mAHG5hN*ybJ9IzH*F-`eWb zoA*AeAK#`QA7-xf9wW~fem8JJd-O?~BkB-d{54$AJZfDC7v$fE-+fxRBb-p3N29U- zDSG}fdfvrTIslFR{Alb8HTDWJDB4ol6#dzUF8L1fiiT!@!(EKM3%*io+D0DYp;Oj) zuVh@J$zAx&+2g|U4*cmv_L~N7_A|CF#u~;zp5xD_?-uidzk$36{6+g&+6S)ExrZ0I|6^H_Xh>DqFYn^YW?2E zZ}ltYToTe9zFigdu@O&Ex@PrP=Xv#2ecn%b(O~JvR8NAr(SAIcw)9(dCaCiw>e|WJ zG@mwj{mnLTv{a~LTaiwA$hep*&0DJK`r5CW3+(aLJK%4yi{Qy3IHb9gELn4={0`3) zb@oG#i~Na)F?x*Rn|h4PG){PltEY7P$E>R1Cm;%G^DWYCKraoCBRsi*{CfTY{ztN8 zy^GE$Hs+8M(lFtuzF)z!3w}cHv(=8p8sPVq_Zd49f6M#uHATPD#$F>>H1-)AzC<)y zY2G=ZYX*!7pWf|PJ#20@I|&S>Q`{8Mf?!y`3lmbcjT1L z{D@C)ca{eZzYCm`u_dZIJTtN{pEp2 zAqiZKEerd6x`{mZACfP$=l_toSD6>7w?JF3^4rLi*h9ww6QldA;HyZU?~+H)@9<23 zTiD{&!GGp!*?xV0DoX!$^!z5zPyX)cq1a>(d>#lY>E>65)4zXJ_$%4;H;AV$Um5v! zsr;kl*ZD{9U*TQyCcQr#)%PWyk~Qhu7o%_Y^OTHA-*)I7SfsL?7lEf>*p=-!z6g?6 zDUV_|{3I&7k>@nYG#vCVQTp@n06K3rvHu`r*sF1lacp0*kPLG+t%S`4zK1#BKC7&G zSm2}kHFm_(^Ss;|uF1>59o@63btwC+Ce~hR5E(ppqkeeoGyBZNMi$ldm?kcJ`pga;@PVMv&gZSRT+=$_4Im z)A?eH>6>`w{eyjh2i@3Lf_5;k7n%Md{~uH=WW@$>Ywt7PuxE3^Ju=VO#4F}=>w}>t z>UFjlUx3++G3WFvj)bwZ_%Tn(YV656!(r2{IY4fs^=9^v%sd}tPRE@e3=8MAPSHO= zu0wv%nhcK-@s8ZhYj{LE`ld6y#w;2q`*tfY+-1K(@ADddm~VxD&j2%Xj~`{t`3w1~ z)|q6hHn@<{USj$JE;06|bGVZW{hRnQ)t6`7T2H5H{4VQ*eXVS-2=>3zYQ5E7k-T;C z3L_64O}f%nk`|xtw)T_OAEiAE4ia;1So)|eeKP$~U&{k^)g7a3!dm$k>8T<#mOPe& z%q!b%;POu36r+41$DT5{>FEsTFrH?f;r}}9(JMW8-GiyY@UAhk#hq>$!8}H zviGdrI{X%Rp%`-^d-aCA_;&OdErU03?zxur?GD-8Lpx&a3NKr|3;Eq$L8iJIJDlrk z@hWzf)xII|z|fbDOja`da9=R?$xg5L-;BAPGFf7WYm6-px)|&n4xBGIT`T(8%K0C^ zSYo#mCpkNKyO}r1*bkyD88TJzM3pfVcW1GxP(`E?(&=$~RUAVa9h?sLOrt&`9{So@J^?Wd(1Qtr&#m)L<9C_g!coChIzElf#5=&&B9kSpj4cwd5KZO`;92E?;H$twzom=4 zmGT!${!9Jr^H0d$Bvp`XZv|^_L$IMo`wr&@*8VVkwzGZo0~!87%79I7oCw8jPT5K2iE}hNPyPB)WMTls=w zT^qjC?E5;~=ZOnPz73R@yl38+aQ>*LL-$g`+a7eX&@*uGRQi5fQuI*rfQ`Wod{Z7z|9(mP6Rt}7jXDMUk5Q+w8PFVNE#H~Y z_f1*juuX^8fle5D+>nnYC0hfxWXHXt(`Mb7n44Rh`QD`O*uHkLMu7d+6u-4zL?=c> z@7O;R$5h{q?O|GZq3x}&kmppsErhqx@4D~=+HMu*7{0~e3v>fMt|OM;aKPLFlfA=} zK0X6&5gsb07yj(NVs|N~m*!rvy1oYB}sZxP*)&6S<&H1PseCcOJ4w69Y6291zD z=Nxca<$+hotCbi}9$zi34>vsT_0a$M=&@$JGnD^9f6|hTiylrCe~L^)`?LkVJuKf4 z=!?Nm@^Jn?*hsryX~lwcb;h?RRo)cbK;0>1nTj!_{aoX?f%?_&Ye^H`k&f|G(YN1E z4%gsE8K?66M!(BpKac3W629M+ihF(FZUS0%kneG4kAaWu6XsAhRmCP3{i5wjCTICE z^f1_D*^)2kv+{G#`?B3y*#m!NafdKiIcmnXrU&1Ia&1j;`&!z_t_ieW+=SN2 zCUh(V^~7hhh!KZFg7)~@Q4 zo>_P^slqxfvzAy-{aVL7TX;_8Df2=1US z|JWZL1a39yTaHivGU+#yrhAx<|NgI0xe{qzC#1Pi+CPzoknfnqzxLBRtpa~-{Ox;d zr#Vk5#*6k)(P*1^qR?;?r&Vy0ZNc*~a10vF8Tc^>#}g}|g?-sR)+uWw@A^ICd%Xm7 zSbB3~(*o^(1^h@*UVEwdG{e)e2HM#V?4slt8;BPn8Im_d`m?4^_I<5=-9M2o_O0a%U`ax?~hOQD85b za?i~n{(l+VSO4F|dQjX&y>~IzyM^ylLZ1k`2n~e>8vO&bu4(F;H~faFMtxJG`fueu7rpoJej)aDql^wEkG&=5P59|m$j(*nGwKKHdOh$? z99OSZ;$AuGmOaR$?-}81?fl|=bh8uPn(j;9$z918b>8rQS$i8eIjSn}zxr*a(=#L; zGLdl-NhM6;2mv}6ce5CwBT=IS?7R{%iyaJ@)hMkSG>bgi$xPm7$Rrs;7!pzlC<2Rv zvb$^qw*!fUkjS_M86#?SSIQYCFV3#Gj)>&>{%&=LF@GPQ|Nry(&*xK9)m8WP+;h%7 z_ndRjb+z{(oa7sLXXq=BjU3-Z;pM14WQ5!r_`-T*L-t>Wa+E_X$FqC{lfob5Ny!Wv zOUXOy*;8TJnUYQUvTghad?%d@=E}*?%##tz#0IRg1G@YiG^_s9)$BbvIB{?B=kzPo zCA>n9<8Vi>!+zkSA!uLy4CS{5JU+{Mb@u~qB?gbmm`YyJrgWtibt)EHi2K&6gd3+m z?PJoqszUp~s;D@9@m!n#JLzKJ0oC}QTkYR5>n`TygDO|`YTTZoeB01|j98QSFflgz z9+w`LG%j<%Yc_jn>1T>`>Es&t&>HqYuJIpIUf!GdiCOX7CFYz``F+PN$?L`swDUxj zWGdFa^nRa%y$(%<<#p>AHSAy(Yb9Jn+hL! zfPG!p^Zslfzg@i7SkB|y**<>T%im`6O*}$>Z*@0W$zM#croZO`Yw?&1to2-JF41um zI;QQ&{K)RKL-Pr;7iS*d^?KC4i8YHk2kQ~-shiK-!(3qG4biFc>{6a|i;M2MKU7X5 zU3!@38KjqPQG4m8@SH(*K(011;3VhB&)n#bpvQ`jc`fpZ_VH?8 zW&bp1C?^Ws(RIhuvM0{)YAo(eGrZW;7UR<+e;)B9Y|O^T{3P{q^~-no^mj*ir+1GC zW90dP3t%;d$5{dHW(z2=UcqMtQ^dB(r29~)agjzaxOE_6)9oU!`RQ)9CT z&MW}n{m9h)j0^fms~`IAKSE!mPg;tsOc{pHSl}CLt}}QfIi`Y3N$^7JN%a*_)jF1S?+tJsNwW-i>VlZyCd$ zbOHSmaW3vJ6p=UGNai6|_95WBC&n5USRT9xTosN=4os*oz~jbWzkR%$_|TQ#7Cc00 zLhNHvI>nA&K$>tGoXD{DNdKsqE8C=omNWbRMLAcIM)F#vEM)6P613H_U3iqsdhsE6 z-Bx!PGVp-?qoT*yMcJ#)8ggSd&w_b9`vGTK?W1K!qyHmo8M81k5iM(*FL*5a>1CD; zLR8YG|4Q1)q@51|Po+%R6IEu|rYv}q+9|npCVqF4$MhRJJE*(btodeg?u6=#mh1a# zWuz&iBC8H9BV8_|@Ji4Q3x273>aF$|Wrv_uWLbQzgWtu05#Sa)pentpwDZS?PkGT$ zdv6HZQmn9020bfsj^q{#8zH=+VJyGHA>!oHmk{rx={3amt@A#>x9*RDGpswO@-3WY zd~@)<>_Rt|d)}44WN=BLIPl&=G0pdk%{mO;h<>BL@|-RZw~ln$Gh9#1O!=?KKczc= zh;kQ6XGXh>k7=SOdx$mpqN3SfOxuEQ*BKc1tSS_%z`JU2ZqVeN>!D8|?|jeaPVA^Y z^&37xJMy$6?^o)UUPj-7^5%Q+j>N!-V2@2Ww7_Ex*?{h?U-gp~esO*Am%QtNPU23d zJ51*rI){os3yFA-jbj#hCH(Vt*zs>GTP#{El17i#vtB^~e}$Rm5` z-Vu9=0dr~b(aRIw{7c)}bH1wd$mO5#24c(|_qX?MJGa?w&3F12gcm7J*X0@qc=yZj z(WCGOZ+))QuY!)(q}REz0{*1P6!qvGM_5nxX?zspF@pT6m}9KP4u z<~RBSu>iIMp^IN{1-BG$M7Xv--;Te#aO|U{mSl^&3jJO!_GHNh@SR7h3X+SLx~zTN z5Olm3-oiengQ3)U@_!h~d5@te>k)i>*l%pk)qEgiJKr~a*4*cM%n^yaop)D{Uylrp zZijQA7;na3d(zV9Hrvg~)vMMgr5_IwmxSLgzm1+TY4@_AIR;CJ^yzO{|i*rI^+8m=n$UnCy#LPz;e5e=N!c zCOkuX#S`ESxS=yYI`zAc-}0M7m#|Um-k^=MOdI7(6!4&h_Xq8~szknnn&;x!45i2T zDSr5B&jiBviJ$J#u_baGR`y^eSb^c{c=jEa2k-efKYlvnq9&(PJ+B7;roDlAz zA@4;GlZO0OTht%wjD)P(bJgB*`~U3SnKqT%6QMnl2jZzN0}p;D#FwOhkJ5jYQ^_M7 zwsQ1?SlP0xi2qL`eKaeW5%;|SUfPP)Xf=S_{ZYxvj4jWJczP@TjH^rHpVC#!XYq7C zR2sh+9ZR&gcg`%%U4(8mH%ad&dx!_h0BRUiuBy&Zr zCo8`bk^y#02hAE4WG0ujTFdzmzAukgN@KDLpDI5(QNxQY;-}gH&fG%!D#o^{oHk9`7nK&;M9_d=E+}5h+NUZn z9PRNxW#|N6McwLG;jFZb*GBQBVSJBeZ*gTqu7*E=OHZ)YxnDkL1D|}RZ`SK?_lGk0 zFRJaNQ~IIl(zHwPWegJ<;|EMV_!F0PN1@dJ`0AJXi4G%NMVejZKB9ktU*prp_Z{VT zd&}<*lmv&hF27mpImN#x&1R)>G9}4rI@joV=F-GpXp>^7$zBw)kNTGf@|f|fS34Om zNOhk4auZ=|W9h5q_R0<%%F9m^y^4K{EBl&!lC_f7q*c`}S7o!@(}j{;ha^vpcMvv+|gK6nD6mcY4+y zp)_rYWIu=QaG{sXIuB?~_kQ4f0-sXBTJ^(+Jn8=;^dkm;*7$^gmFArpz)*Hvkb||~ zLU0e9rrq?%6J4W^I2yHy+eX^omeYzSim%(2( zs?v>SesH#2VmZzKMxH8bzL~EQl%aIr<6XMI-YM)|No-d-L!7ZYSn&(6*#n!PJr%f$ z)?;a>IB5W$1(V-%$=YFi{D{`+dL z@KklFY`bt(2|6#{$U5PYl+*lM_D=~eg0JeV)F+))r7dd5>!kZWI5tpwfz`)#jO#Tn zhpW5h0xSO8309i>Tl*(iQTJkee!#Z^^-`DkHoTu0BG^NiM`ahZq?;J`PM5#+S{wC$UX8gS22S%U2*&WAst-nS|ZW1rVmZrA< zJ>@?c3i>QMth8w%Wk~K&8u)mk<1eJShBOBa{|V|b=TWNc8PD{s;eD9)WT7SPzY#7i z1eavb%kZumm=H&$B)+C^pX6I*e6FOgsdAdiclr9rhx;R>t3T^ons?i&?+EQlk@qcd zSY^t`Uinm)%2ECgkk;jU<(<-{cy}N9_mSTw|GvMHe(uoVKX%sU1 z)()=qTzRe)T=Ti6a`ilmu1@#r3#Zb4Q{%lDdit6AhX#t*qpa-kQ>UCsVj_HE%Kq_L2U)F{58cyG{}BC(GJD8ro?9&-+8fic6(Fj7-7W4W1_%gS!`* zf?bQXjAF^@EH&}SR6*$$Yfn?B>YB(L8A`X7Sf3=8@~nEL*H?ZkwIAEaj$UJ1pzWHI zRcFN?NbQhrJzgMwCViBz7<9=RuFZeZecSjBKFK}CysmxGlv%8y4A$O{n0XXjg%;s; zYur5PLX@!wy!bWG>E|x9P9WU8R&{}uLRMay-t8~VK)*k~retD=Np7|?r5JnY!_xWC zzUWl5?;6>wtrQvqjT46ip6hL8?C4X`8G$T8`e>tM&7eP$fyJ*wKW{6g;MvbpclX|) zZjEzh24_0$-R*Z!pXv>_(?7rKh)^?NAw&bY`rbXMM%Q`w(Lj$vPuz$fNmg z7_e)Aj)gnpG-kv(oW%G~q(33{)TmySg}xX3z~>^{T#`IA$(lPVhJH(Hf9|yHW^l~d z9v``g?=?2MFMIDX#Z^$-DtR=2nlhZd#@9vlzX_~V|F857ejEi4TEPK)70~Af@Qu)( z4)IF#*A{7{bNM3q7FA%3pO2M>Ry3Y`59OTVa=y#1srjT)buiA*)5|gBp>V3j4Q1!~ zHy|tAZY>s6&3I`IzJe-KUoCdOrI?eDbk%G;|M{D=(zp z1aP^P_i5~^vd_u3y7hwRFfPE$X`8XruF<;th#v#q9pt}Q@^-o?X`5`Nu+ zla(jd1O3WqytJN4IwR3*K+g-IHP;hAxJu(fzK`Q0JT-|;@L6oSg*4xP!WnnacbYSJ zKTTbeo86rsxWH9@rz-A!_7?nouwN*C*)6wx)T_>E|2caolWqR?7n&bofEe2$_Ly!_>Snmkvx*M6|Xt2 z3)xwGAaWISJ!Pg_yw>qLE^BmItNCGUbZWc$r2eR1>QkjJhu}e4+kH!So4AfCuk--; zB6z&=tG5k2D*cxojlPuxW8`t~TjlRj*2F#Hk-Q5}alCD$v&u3;%w{|omuHRNIpYDY zX*`TREg8sHl{Ei;RvL6?W}KSnFSuE1r#{PtpA?XLDCg|+kif!9LcgeeUID*QtWI-=mgvfM zUaqxUUWua%o($j7Iy1tY5H`5!6yJ~ju`t4NB@ZSgmqQchpOzdcJ%i4fYB9bC_*agW z9~!*Q_<{;QW?9e;?UPJCl04E8U>k+s;`3M#kA)^P>ta@F`{;D0d9-x;te^eh+@>eX zXJl3G9p;QI;j`pY%`avj8~V`ti>^9h^eFHJ@$=~pdsH&g&2Xn~`5@4zVqqNiKm*2TP$l;Y5W_MW32y#_%nY+ggN(8Wd}w@?Lstr5~m5)>iGqX&6IYb`pF>Zj5K! zI9uz$DalNdYrk>g?c-!jl@fV1j5vRF9HUOaqT(j%mc&v@W+eCA8&kuzM#!qOSjAMN=z zb36D^6pxI|+1V?fPsJ&e?ppDc#XpI|7K0Bb6pziKu4p;G=1tK_WIX3FlSlPvK34hi z4;OEjkIPp~Jf)x=_0(U7|BcQ{j?Bmti)4-2OA}6Eg9i>3JA5wvOy9*P-tJfVPrWt4 z=puJsOMf!L=lO;orP2LqjCNkJ#vlEw;2gas>e_j&+CAUwRb2MT;2FA0RMIcIl34NO z^kYe1Nu%|@&SHaBJ)OmtyOi_ENV}Z7+7V;lmuq7K;G5)3!CN>KqD`_}%*Kuo3gCS} z{N(DVstkV=oM)DGn|j`2h1@mx$DR7++s9R|;$=vN2?0;ZwR)FM2YYfvOX6{wlUj<{ z=k~Hs=Etp^SrK)2rYF1iVQmx6^qQ_zQ1b|fsMc+1Q^}R9Q{%7CeSqHK8*T=EJbKhaghsQLkY@?c0L&QW6_f zGLPMSq&XWg0^Gv|=6do4vMqU_`Ji0Jm-JZ2|@xwbD3 zf37X8Wvmt;4+rgnMjI-1wu+&Agu6T4^Kt%?L4_MyVYM$x;i- zI=d!*a~>pppX<%yIl{M3@NFMw@zz-M8TzWw<0pIy5&6e%mHI=lhefPNcVuFkkc;OP+q+e>!gbLi-jzPQ=doV9vn3;v_cC1~H(nLw-ewzyWl(=F_N z)K%<>@r7{XIrsD>zM?un!XFma_vjpBP^e+WHBtOBl}( z^)t@!-;JfdOfz!x+~SD>`x@r7xM9aB=2x}!vgZb$-!+n{6DJDW{5Rl}eHnDB(8oX? znUeM*10Ia>y;6ULUf2VIO=N-b9YBB5f5#stSk@qM4v^8P+ss*2nxiv}Wg2;HWP9&- zg(u8g;=j=69?3#ci}ivFFB*`nYUb{G`MPOdK70Xnfa6W}Hb0Nwg#1r5XLU>dz#qCE zKPmCvdi)V2m#DrfdsRtx#K@HPUY$=B9>249dUl&Xt+3Ufmg1aE^by;aKktSM=t7`f z&XDv6vWJW3Apae)4qbCLhLsaHPe!eQ{dQ)8@tOH|UFAYRpUWxGF{ zy45DxUy|@b`9HhRLY!yayRH4jc#d-HPnCevDEa!j$j@U9-~ZGojkirqbL~N+j!1mU zx>zI|$nWtb+JCoDdYn;qj`ImpqgYRr)0g973WhpkJ49W=4c4ZK9(%uNuRK4@Grky- zo$ABZ(KL8`1$YMYJScjyb8|{|VM!^qllHITy4#r(VVuIifq0?rFrAx7A9Nn_Cpd@H zM$Qs_-pP4*>Q{wcucY3kjGg*%1L@QTop(3j5HFr}Eqe4lk_#H?`_|?c0L}I0e5qS$ zllZEgzuTO_xh=led>aTIF1|$_Zxrt3Tr$?x`GB4ki%Dm}?Hm?zcbq@jP4ex&cp$5M z?6tR#50YNrE9pi5N+bHe5Bk3kxxb#@gT!@KZ1Tx^{{rV;P-zBur(^7OC$1vkt+!dW;{El{V zzr5z>Cx>%x*KFu`02xke6TxyZ-+saRN;DbPxn9sSKyGNt>Ac59+B>{a^G2jyJcd1L zw)ENP;efa1ls&)GyvI2ztYuUle3Et|ccwaGE9{OKGGi=iuZbC&r){E5oui~WM4Rl@ zj?JU(8XwV4t=;Y(y7GQ^;Jy186VAZW*xT$aWlgV`B{CAW?pCqR)r0vzC5ujG%w)y+q#N*fqu5$U!E7V_nIw_^F!8hFk%zC&(OyljqlAFy4K6#dUB(w0YruZkgCd%?K=vWQhWXKqAv)>?>8cWp0rJ?!p>?1y2X^yVA9ciz0p~dICx5phExNhbm z?r;BRxNhQF!j$O8S?XZx{r_TRvDJ=Y>G$x6?2{fKKm*E}wCQ~h(euyyu- zlIvP7&EvDVuI6Iy?*BN~EUu4neU$4XTr;_@;`%Vx46ZcSm0VYFeTZv1*9W;S=lVOY zX7rf|tVg*?@N3D?D3$W#3nab3vuKCULN_i|0*n#k42bph7| zF6>18HrF_=^SR!`HI}QDtAXp?T%x1%xUduTOP;FZ8pU-k*GR4;SDp*})n9&T{{(9$ zvR}F^`^hg{`!#NUi#V5g(fA_ovz(lV-79+d1GuF%uvOTK?7bDfmMQ)bx)9$?WRW-FrGwNX`tIS`l#>eda>y77 zW5W()iiWr?d-gWX55-sYO+3`_;yGRuXNPKkj`+*Kx_zNW6E|g%<{QHsyVvgv4d(ZU z)OPVG@hb5ti?h|GE86^q_ALf{DncI7tmtTL&5?89ednxX&J|pk&tof7EwQs@2J$3U z0&|_QacCU=@#x0P+)w#t-e-M8K40gNUQ1i!^kMefr#nB+@8AB(_(&K3>rbaUOPntm zE!S<~TNxhdL|SS-{T_JaNZRq9f8+b>4*53<_q~0NPqTS`lGo+^5$a(My%t(>5v&y){yi~a^^JJ94JbUXvrVWa1f zY`hTqsK^U~U8r3$h2kbK|0a=Xm=`N}5X^0~&t}Y~I1yyI&?d@1lUA|>>DN+!!SrR3 z*UJ4Fe&?76-=f~neLvv=m%-QRH&w7C}gm(Ig7Wo5j#8F%Ru z-r{Z>UXk&LE!xntgmZV;<1j4uygSG0b@E zgkKu}m|R&OpMf_4uZxKZ6mzw14(u;g1>GM*$Ns~z-o0|aug`MPwYh81%eUfl?-Y;! zjI*4;8LgipQ||6PG(&x#@4bHQx-h!T(Y4s{c3yFJES+vSS9m44pqhNSap?VRVvQM} zX7fG^C!HlwcF380zVD;z}T!m<-_#E&(KfasyP1OEpVu` zBaM#F%C`82mNc`bM{Y}Z1Z9Iys()zRti=+nRr`+|n_wO2WgXgw{{yyajhXbPwFPt{ zTAKl{NVdEtrEPs`Pm*``&R+c3iA|<oe@Il6$JygMs}yBAAJOVzl{7z*=J~`-|4HJHLoNuD~4QvKG#^F(#F9 zI{SW~v6rOLH)3Nfsmz^<4|Qcr?47ae=sh$ZzZ?0EL#KzvH^-WZn;4=#(bdD>yv%B1 z(uo%W+fk~#e+GV&n9dj`X-_i!OrP{i1Hf!1@Uqg_qk!2tz<@HfCZ#V<@g%S^@3O>o zFJ6rMy+PQ@s7npf8i@zxL9r z58|PMnZ6qsm0{)pGwSlpyWAPL9sM(y1gsPhp0JJt+sr2~G09l(>{Pd)mtczY*s3S=zprLoJ;53n9-EI&IuH!;k~w}$TVmyPW7myhrC+e3R@>1o3BeI51Y&>5@G6@Bp!{Xk!Q#tz2%PGck= zI>i8)3Xhkp01*=VuhTzft8H_=8~Lq%r-6_8M(ns+jc;s}_gTK_Y|)A>QTu6-3P(21 z{>D5yD)47VSr-B=9etsztGLXOpV0M1Vn7`H9O*G`n?0bFwdn93eCX_8T`C`UeV0vF z{+!i(vo`HI8K#U#7ju8}kBae4Yflb-^GDc{f-^s2;22}jS)XMuHuYEbj~xZiWcz@& z8q#OAtp}apdufaIuY%M4>GJqZq0P07pZdL*_HMmF|FyI!h8RgwU{`L5b4IS&N%46M3TD_NFzWOeE#&o`I z;l23oZRGt1&yo>dp&vux_|Nzo&)T&6R9( zx>6LoRTTcIa;@YRzm@MQ=O4MNEt;FO791jPSdTHMKFBq#G{M@3)vlduDp%i}3D(2h zmv3%D32J-km*5v>uL}DTv$P?DpMY?jd1K}`*rP?Anrp)|?(WrG8lj!q+Y^JfL-_e= zE{*bC`fSM`tZkqV&f%hcn*VLu_FH1=S!rWyNPOrV;$Nu@@~BTwvIl$wzC()JKR_Q$ zTQamG4gZFhFCKRnzD?AhgC6p#dk*tWzVG~U8?(Pbu1oP=c5ne-X?l2*Mhcdtm=rp`1BXo z8+fAs#m0bKmBCNpJC-*VeAQSk1OAmcUUo}qDke|^0FWDR&y?o+i(?0P% z)-fX;uMZnAa4Q~T-#|@QFlSg6{?Dwlb zvhJSEd8Il76gy3SV~+i5g|^Z(r==9cEN$&OrvMLS{TQ*}HPCsj)!BD7@fBpJ8Ot0L zf~S84ndM8gZBeenU!2z%U02p^ERrriVdA``+9-1?I-yH=Vi!{x15H{ngnt{!}yHwQpiPzGYJxJH=ORZ#eJNQ|A-wfVEV`_f7i9 zq>bJQSZ<(?viAsA*3$PT+OD|VoxB&`NXAqAgI9qYJfnYdMmoF&ik;uklU5(+d)++$ zj&Gv55c`r2LT9YY`p0HD%RclK@85aEyzbTo;LQa zQhirj30&yco++*Q>NEI(rCUlF=_%kB%+(F^d6w>qel$2=-+>Ijru5*CRc{5?7n{9r z@&i7{6^;tmH*sz2s|9x>oMmkAow4{DGT}fBn;|h0R8F+OSzSZQ0mrbn3@v9vxtx3c ztek(K9JP6nvVKCl8W}^`y)s88ShKhUrzo;Rhj>UkI_inw*GCQ)ABJ}SoQq#;o?&E61j|_d|<-R$1%o8aXnU|FYn`7aQ-API#$@_pRn|Maj_M8`#j%W z%IQmsHs%%op5F&ZbBK4-#jDbseew``apa{Gzn3EOtfUR9KgW33ywmdvp6kocckn!) zwulbaQpalQ9k6%#2hwe&uQDeL=0scPdc(l+)>PYQ%>hSJyJGT*>@IMJ->omSjpkd7 zd+ZQnexT4s--++*>>BOnca1*b?27f}cX71DrNy4*hl?sBL|auxG`rm$>_X1YecK)6 z+qXoLPod8{-l8$gg|>@s*!4n>(uOX_>&~^oU$(jfRoGbJiDAl&fI|q(?D5^} z4xDqi*nLeO|vwy&tNNpUb%4LoP0yS#wp-}@bny3$Jak|9&k0r?_noh>KH*-= zmC1@1EmXaoJ&y-4=>8%$dtjaePo_#HXUw&aeDHqy!`KfjIb3{{JtW|XKfenYfvfAW zTduHn`K8g8w~~B!@NMl8$6-p0orzOM1rIB9HT_t6-yr|sRmZ!M^-xy2(c-}1rw>=Mdk+`R6`12~BX z3Qo(Rwab8$fe+;fj>2L2lxdIf;5X?TbX(^_qj})>0Da+iV}|FY;5ol%rQ3Y%DbzX~ zKFXZB!23A$E$)&()Tgv}{~!wGgk%w7)F3CeyP}!uBsOs1wwOLlrEbN%pq&RVByHRd zS=5vl+Exq0Tw)495Jr zVuX4grK}9)2#3%KcXr=Qe;A90D4%)CtoeE-Gro)~^IiY#q!)aHJoAcQAudWzZLu|1 z8b5;0N;}kU=Cl5u$AA}owCqlIKx3MElwgfr#hbG5W9rJ2<^*$=#xlux2=)=dvdjnm zmhasU>zsS1xRidV+#29C0Pc-IKhr3<0xQWL`nH4q9wXg}EORUAc43P!xJx@k^N9j9 zPTG4&=O*FTrtNczW0;fg`iYjojc}N@U)jts%@#O7o4!h96l+0dm~*c z4pPSl$~<9!a=&WqAalIixW{R8Hm7}Y*A;*L_UVm3<+tYT3Oyfr89f8^Z02$NkQDp; z4$V<%_&^r^mT`*Mh=Hl~h;ZhP^1P;f#9D8TMK>tiHE|+<*T1oEsVcP&n?^_POmKF6 zSx(;oY@9rBuvv>)-~f5quMZBk`F$r@Z?*68*XQr?3nL1}JiGDkB$iN*v$rUm)m(*s z@ZeI)xO3HxUY$!a9sJk4IlU{0rLhCrF*HQqmRvYjw zGIhV8x*g~gU1S6~Qgici)7R_e=d)*KewVMf0A-;ews%$uuAvb9Lgx$b3rmh2abgN@)Gc_jnZp}SLC-(bFqaCW=$Qx&CgJ&AZGNuMR#IA(DLGgDinbGTgMJRcE5zpn z3x~XE7r6p{E4zCWc_$a(A%*+=6!%yE#9Wt}!`y}sI=WKnx;0A!T4&A?ZR}A! zGn2sgy@!jpqHl=t8#+W*yFs#NXI){7ukn$ev;5jMPNK!iSmBcd-^qCJlm_7JSq?Pz z1pWlHc{!KHne}Qv?FiOHz^p=hqWjAG0buYn=^lXxDAu6(#ZG=}zwj2u;z4V-{~$7_ zV5xCffvl;qc;i3cKE8fP`GTp&rBa9Bt9rz9w03!!@^9gJG3B;V?jp*S95DYclsz4o z!rwjYtKI-G{~2{H=UtZkPyb|sHIr-kixaHHKgLeRv&H4UFu^)dKVREhpA@1^PYlNBMb2lZ-`@y{piI_7~aU{hHJoV$wqY?VH>< z`ukdR$MP?bA9w=Td=T7kW$jjfP|PdD;)WM|vjh{l1hjx`Q#gW61clmdE}!+M~8;9#H!=cSTb7_Da_v zT}hO7X|FS|Y|vQ((^HaX%~=+El$0KI1E5$EmZOhtA@rpTLKr$op@!kIU z@C2RPsl1}$(VsbeTzhM@ug1!0Uk&<5zD*S_n*FJYO|j1ZCGeqNYES8M+9rFC)^yc* zXQYMw7JDXofwCTmxNU-u+9_S%`$%8W2TtNyyr{8UhQ<)x^G3C29PiMlBDb$GWBrGx z!ReeMc>^0l8}!3|NOQ3dH~rTyE6u*#v{T$pUNe|wKY$SLG@fDLr*?!X|FZwY#*8kx z27DA9zQX!J^8Y|&Us1mmBX>>%Z6OVPI;wnC7}J>*Sn)XdFQuy*n{A;c$ajo zCgvseS~=N4f_-|Se6D2Wo%dVlV~ALjt$$?yQx|0M5(7us8(yb*h;`(NPwL6re6fdh$|xxkiIKak+Cv@6_y zIdie^qkBr;?4FOFC1gL>F|4e2H}hfkIsg80S?W(HHQ(Tt+N-iu=5aHQ$na;y6rkK7 zrU1AavK;yL_v2J`{K3`1KKw4m!N5O9+`aO6So9|t4~@kFFP3*gqA@Ewrv#mkVoaoi z=od`Qnh#tz@`bf-KWX=ZPX|d8nVFGZV}aT8)`(t1G5Hm*LowUX%NU?+j*O~8lDm|SK#=4=A#9MONvwq?eodsQ$d-BW`z3$=IZK*w(Xe;&`5#xe%A`HiKg z`KG=+^(3(kGK@F4rnp4)e3vfsLB3aXHi}KO>{jvQh4Ld!RJq_(;s3e!_#J5eqc(#1NKqg%1d>A75Z}KnL?S4!q9{GkKicX*$C>a8wl)x z4r%_ZZ2NBP;L?B3^B$!<`N2!>6#T@yW?iYa&-2#ttUj>TOsGsV4^sa4{|an;E633e z{EgJkkbRT8^3oR5UU+`PFk7^tbKL`d!XJNuO@co3B(ZOxuRnmjM142{pVWCWHoBFI z2ao~DqcV@cizC<(6vM@P2_9Iu%kLqr1uYyQjcvobtX8*&be7fZegix-c}dT{N-vUH z;+}iyt*kMcy>a$UrBPSjS{#@94EQp)csFyq+S0_jp&K3>qD=LdGe4e#C%zm_P4KT4 z&cK5Nmjn1%sUIp|^5}anzNyq$K%SPIVI$AD+x;5)8%IWrx@~@ezOqhcZ=cpPPO-C0 zZ=azo&S5t1BFW8eNBRAidB2R91WGI0+@0n3D|tVE$ouu>_g~1TM#yt*>gv)3A={#E2YTj$yr$MWkGJbp&IO>~lgmoo; z%v;U)3x_KB%3AYG9FiK&4hq+lXgMJ6tY{`PGye`3taP-EY2y z1xsQjt3JbrXv0N+A-!ZUwGZ3Fne>%5j~((3`P-z6{)IBoS@kb^bb@v406HjS=K=2Z zcVZ{!-O9%%SZ{IHb0gQ2kCbI<^skz?J#=l$B~J@4v&_x;Ri(a{tmAiZPQugdFRpVq z6Byoy+~6(eT~j;ulGJ8b^OojV$tl`rBia&fR%~H8o>!L7I09FW&SHEoW$w!GEZdkz z9Z!FKjjwrC@-q4X!@v2rM{&}Ix!?)0FT_7t4N|>!A;Z4=yg=NgH+)gMG)6_2tJAr9Z>LO{0T{#yiNP{eDTF_p{e# zDR#&Za%nSVFGYT7r`+H?syW`%*RJtbjK`)orNzf)kSN=9y?@m_MLwH+-{)B}n~Uu; z{JEIv>oTjwUuw0)enz_lLws_*mwA?dvi!tCwWEwL*YcVpCp8vT#9@wdIgIxT+9zJE z^Y+wstzD!?%#v1m#hbWCxhroK_fP*r?6}4wEBhmDzlnP!m37tTI{a=dYqh%~)MCaF z9@e1xWLFW~HMeQ}M_5ne1Nb=C+4r5iyR)x~Hne{!I0wy6={yS`IFrR+`#QGcF+VkSqAA2l(>_?u3!wt?Gh-&*qQ*vN3g3pG z{!(nxAuGw5ZIoSLZz<)}VOJCV+VF0RvbvC0RF2L9m(ECQV!Ney<-kZV-yz(iEWur63V+lF)vtL&ZFP88$9*Sv z)paR#eV+Ukzd6mRqGjYE{pIuf@N?lB+&jS%{O#OY<{|l~vfe2KnJ-~rXXZ~} zR-0?XhX}ZHKM%MI7Y)zv;tWa3(Y!8N)4qDO`MvO$SUYR00{n$}Mf*UJZ#(PL*cR}A zh;kNfg=Zk+o#7=~n+vyv*TQq*wqiSl(f!+c=3d41onFVtJc0*US^ke7OTl`1aBP`q;z^`U#xybVHyEz_nPeYu#La9k5@j>`5 z=lunHbVK;#hV5qd@Skh^Gqq-tT~qzgSjUp+Man$*{bijW<2s54C)DQ<{jch^K9!x4-||jhb3Oe=S4jWM@JPeoG+uicXTjtt(kq{MW+nY^ zRYnruMwfWdlo7ISEYhbv*mJSfTwkQ$7h10Tjm>+?<{W6wmg;59qr6x8KaiHSS-<+1 zu)!tz`ngk_ukz#Ie2R_4Ka;`Pl?N{=Uv+7{D>{{5b9t?ZKEd&3!BNEdi^K9#i?-`@YG z?X{mKK7j?l-`wHfRwsYC1@yx@xJmHLyB=l>Pv=%>A4nB&8Akg7>cMKhn|!o|K6qvw znQrsHavr>Zc4E(l9v3N2X=inw_LA=}rT<(xz4Sg+$u-De=)24P3vKD>9Y$G~_c4E? zHvz}@w4y%>*;kchPrJ&%D~RvA-jQ$S4MtAT`apFxr-+Mp|3+8xmsNB0q~dpq=UhXb z!eRK-o*w(4!BNQx#1JcuV*I4@Q6EMk!yEpS;>=@%OY>N3%7@w7bMP?d6(NhuP753x z8hO^7^BdCD85!N^xDJYblKj>j)CVlopGyDK*GRc<%q@>d@81R-)JNg3_joXeG=PU@0=`sT8JTJY-O9FgbIWs1Llx;);@TN|0jOgmb8firr}1LUc) zIkT2Lim@hLMtFQjui~st%We(!t$*fuSGsKNSO2WmKe<3=oK9I8=GNKovVaHoAv#B= ztaDs+7=1J2FSvb!^m?wfIg0_lfIjNrO2#10Z_N+4F$RM3`$?Dk{se33zoJLHG>}{6 zTM_A^Z4P~#d02W8qt}N&6&Epvg1>xTw5DecIw;+W>?Xo5*69beADuM}+|7L2dkPwmzGODvr8|k{;44m`ONnM2_UwsAa@G+t;ZPs9$wnrS{}B4sF5+0( z?DGW|LM(J2`d zqU+DqTV_2czVQ7+tP#6{7$#p79nfdiUigjQ>-Rl`jUbsR9g!RYpHf@j_h^;zt(4!U z^sN609mUe{nh&*=4x^WL@Er};c!bKFSA2_dF1)d=B$;(qrp;kss)P23uA6Wy;UtQ=o!|3|k z1-I+Hs6%W^^w9XoHT*}II5<<9!OywHiSShI{nt8W0`S!Sf1CR<$5joeK--m@o>^CXdxM4viaC5kW9Fy^8-V=sMLeYO)BQ|kg~pgcBO&)JlB zbAkP1teJO4LayZSpTfH&L#qv{vwKSLtg(zwxvN(`%CEpn1s#v_8BFU=VAtU?EYAHuuY2S2^sj%uE(U8k4@7gxX3R{G>6_&B!TcPw6* zjSg#DpL9<;FLPL-75K02>$VRS2ge^SR{RueiD{@kis!J7n2P>GyjgadLHJxGqL>%u zIMv`%E*tnXoy%Ug$~bq@f6=FvmS+`x3>8$$jgEy@_OPI-vQ^ri+5=CdhK`G zC_LFn{*}~0|GgFP`~+obO*PG7&Mf2P5%B~1FS>8yeKqTW+0?Z>175-hhWfJ_Is7Zn zr_G)CZ_{&u&N=@CbHJ16H=e>K$iyD+;?C9cFX%V^d4iSW>Orq@i2Hoz3y0^X?_yJg zmkg&LFiG&H!@n6gC}z%Y!P&H@N$sMn zI`)Oh7CM#kv^Q;5yKs4Kak|5A=qk?o3LU7?TTcV#Q}f^f<20+C`O9IN>AhaPpv*;~vbTEeA z;G_7}KUj4v%oZ!Qxu%*;7-Z)AjE6uDq($Z3p{{p?RY_ zg9Z~J(rQk$3aow2`*O?=e%BU;6Kid(Hym8G^6;H@Xull4MK*uI5jr_4AEPRGSPp#K zaPaNp!*9R)8z}R*4mHvxx>Ts=}zE&uiqYlrY?`4IAn5F*yqCe#i57GuDC6@d9|B*1FUDK(6^A-z#%}QwrYEjvq{(^$_im zT)^7JZ36CR%LT*|NJMNGzeV`i#BpYQE1j0;;Tzc4H8*@7TAfCj%QNtv^j*Cp;F0jl zSHAx?d)=rbTA)p?+O^obkg*gm72h}n517Vtt+k;v-M$CC(uPvRDWC8B(BWdHYnPeR zI%{j)pCez%=T^G4dmrEA-bdWD0sMVxx?0_t;6OLe@)??he^90TC*||ib&r2@3f&oT zm>S)C{WNK})kfUK1$eUy{s+2)M{1{Nj=iyX4RgXYczOFLf-zl@1n+JMc~;u-mRfE8 zsJ6C}c>TL?|HaAe=S^~7_be~k1^z=5y%!A*#2uNDs>-yOhMHbddJ z&S-FIa$H$(B@5nUPsQ<%cg8F^HN57xr<{wHoN9$WW9S>J8JG6{>R(!8UOvhC;Anjo zcslFdIP@mHk!(;Stnc)>;H7*>rhl-(-x>+K?HAI1Q`eGHrJ6TRCExt7Q|Rh%P?_0_ z22Ks9%_`5PJpHZ%)+#URY;uD#AEoR~zWc+lr!w!2)VPX8%~6fWr;Cek{^rh7h;zN= zkB)7E`S4TT9qrgjh-*?~2R=_4SB>d%#!lm=yL6<_5MNefbg|*_bG@11X4N5h0p(XM zX?2@czsunJRmg0HcTL8(3!bI@F>9Fzre>MPTw*q5SGxzoRsOzntNaRG{2gr(9SHaT z=~#gKY2LNqvnHH-9J+X|{QL|&ZGE<_q;=Nw4_9F?y4$Zx0+$r9r_S#&cTHj5+QEDx zy}>^c8(|vtNM|p9Zw>FtH(ymFLAG=_~W$FL|EIe3<)Y?D#R}InAGn zBcb(Mgg7IjgRCW=pber2KL%_xhdo8xt7wb*tNst|GkUoGX_OO&|4(=C@!vCiLrL*d zZyUFvG^z~qj>k5+9q_oFADC?7(uiI}CyN<_bExB9!JhI}cGZ&A2KJuDCGd;aOiY>?949_z3H0 zcRjM)BJ7bG*9hMhv)@bmW}>zeGImeOxd-38u3W&ko@^iItInsKaej4fv-@;@oLQqD zz(&!hH67!wedK-c#Kj}f&p9TJUBC9u#P}AIk9 zJWGcuT~loQ*4{egn>zMbg&1Qd(xXiw>a(5VD*U44 zn=BnHF>p2xz9m26dEV{tN3Bz=D~5Yv^gNP5!j^M?#B!c^E86Cd;Vf|r`*;qT*4jk$ zA=(g))PgV59;h<@Ix*4_AE{rl&$Kptob-~PALBl~5Xi^bLLd`Q2j}IFy#$$&SSkHe z&mHGi#`^`@FL`4P@Y8rVlV&k%1a$W$?ahT>CB^~|t&0{}Tl~fNR4RQ7=>_-I+$(9N z8)-#`Gqycor1|P)_8C2OzU0I?vRj_PrCQEl0B4Am;f!Q1PE=xTnEk-i6-Q?hmEHs& z25b}!Po3Z5KYR&t;T6b@v`sn*bZ+>~1@h=kO7pntxxqu{mgs_iJW2X+VVlk*q8oF) z^~gqbuF~A-+3=4AyjNWDXqNRDG!e}(uJ|f8hd58{lGVi~3t8Rf!ltG5s`f%DzPMtU zD&~;ZemiPv-A-Z$?%4QFEb;%v9{fdRex!BxVxGlU24nj|Hf0za4EP#(*`g))nA~u>-CA<7vee z!-tP^V9GRVqemM}o)Ef$NqoD6=i~5g>sZ;(0Y zON72`TRX|@yRQPSKP251v_ZP_FAvxJhD@G?H{}d}{TF!bLyx?D`jKx_j^Z|H%vzD# z1Q*djF5l*l1U8b}{sasvx&W&SJzrN_>@NCYImmlXn_qYc+H7qr#kwe)^2Iw74mv%? zsvdbpezvR+`z2q$qaV0Y`zkt(E}?y!FP+=nCEAG(ot1G$$)+P77#bVw%T~T?nP=5b zwNd)jcuMuHEA_J1Mf_g2Qq@s~e1?v7V=jZOzFm8Qhy_9)v^J<=|3)s^=9k!S`4IfA z8+oBUcaC?%Zu}K;X)oUX@siqq)s1Z>#WiYAo#Q1bI|ARc@~j=GU;6h^@1kwA!RWc! zN7$`>CfpO~X=~8ahMbQ=@9ghRIp4Q9m-m8^r;n>Fm1AOMTEKZEG4vlnP638fQ}F4O z^Aqj6l7H+6mBE_HvJeuNxk{baUeyP4AEBRQ9cc7(c|V%}== z8-D1_Y3V{2M;`56NnkjuVXu$iQh~=0=*K>ARQM*|jEt4QCfQ$!eTSW-VKRMh%xj+y z@gjiDbG&N;RyOUb0bbbgI}JSmpQU`GOn8cPMvJ_@Kb~%o&TJC%{|aljFTI)QQnElF zeU{$r9B5p+h+lx)FTsC=Z--fjeOYs?wZos`1iI;s@HNfJ&C*pfc5C0l#sm)$f7(+F zWZzY9oo@Ir{9?tAG`E_+{LD`Lgmz7^Tx7R1`&J8cOU5@FSc#X^rrP{P^l@=!m;W`! zQ#McfkO);R@DK+(LkmT}3$!n_(}M5GzGB(S&_`%Zb$wC(LDD;Yg?^uyLLaY&FFV2f zrao3vkL(0T_@>{o*PtUTX>ZqL?piBFDgWJ^p+(u-!Zq_f-uujrk$pL5WR$fxHkwWg zUA_ES*Jia|nqOr8nxeg@RcU9u@`LM_3pUr#4$ZCd&kENp@UUfGI2t~e09M8~n|%V} zRW^GBqVSNY{aM#)2Zt?eQppYO#1R2Jq0K#7KgSCjT=8eyhDWFJZlmcpYZuzM09Yq2 z=!5S%n{kTbw9*F4+T^oVN=z>7;+z|EZv4Ts+g?jPV>c(SaIVsq2iZHL{;0p~Q@&8; zC4eD%z|qFng7>objntfg9Tq%&ME$vsy}0}7vki|KVQ|p#CPNF72UVBWF!FDUrsyku z*hoFt$Ex!>h?1Q`8_yWR<&t9h^dS{vNK_3+1= ztjgIo_*RvKC-S{KK|Dz9&(PV7vb)=|>*Z)e)+y@TTBWN6e?l3J!F*5n!9XU?><`Gd zkNz9sCGcMk4%H^L*KI*jxP+`eQhUTDFA1OOxLqjbQ8NqOa2>+JytweIG}Pm z;7wM01{;~RM{*DH($Q+ZE1tl+fGhdn3G=*(DvNnN%sNK4iWvEyDz7yOp&L>8*eV+8 zthSP31}T3q{#Ii5Il_e?woIijYK!_SdCB0QY<&0#Sb4|$5wMKe$lTO1mOjd7|1s7y zYA1Ha2G$zLINN>22f{Cc=S2pm@sTPipU%RG7o1S)rER0lyjo~OmrGr`%m0;fuyJ8O z3Hmmg_G6q2G@(VR+}#$pU3$2#;hhwa5wvN+Odad{}!;9jnPUYZ?le3 z94M{r#5-cx=RjI?R@4K2h8zdK@as#VJa^5fIcF3+VdNyzSY>$;m_$OU1Y|zXQ;eJ_ zZ7A#y)(A`SEqym|lgwveYtqI|+6ZYy3;$A1o5-#W2j^(c(K?a2X_tQ<_@{ia?Amj6 zmM`two6g{4myx5h1#VckUh3)`H_0PWr7r=fSvH`TOb|2|;JZ#_%q!57BBgn4_U z$`W3in76EJv^ER@@7cmlXx1g~ths@GW(9M}*JzvQSaq5>hk4ey)U7(T*1U-41GK}k zG(R(Uq=Ge>aODf^N9xM$_PgjymqX009DT`dc8#n_yTZ_h=uquhKaV!1Ge&14TfT)H zE4W@>h9C66JMfNrqR4luD?u5mPySSPBnX+cusQHpJ-zKyxsnM?6y|dyizQ)*}eK#*ObDAU~WyM z?&@vKGuMd*fo0jGN6VD|^{ISv4Ph*<@s#2>sJE*;P8uF9Yd4+L-T>2+?^jr9J z4{aN`Sj>fpPe~i)pJ3!`@@Ni|JaF6nRmYPBVid4PQ?St-BiI<(BZuA>xX33)d#}DA zeuVxWG)wF(r`MjaO8O9K)uyT>{&C=e?mbI7{1smg#?FFIOy~Om->QLi6?JKziSk}` z{}=meW>c=lM8DMrm3^G|%gXj6&1v%gTaK?}>#8mO`XyWZZR=lfci!?mYoSHO>-gS8 zEU~fhsL5GkiY4=E0XKl(=Cv$C7mxXZ`OXG^@!@l==Ug-`Vr z;9s&8s4epGKR{blzhZfdUh!FMI8tt#=(U@2B#Y1Fz1GS~qxa?v2j0)(z0MJ+yw_O+ zN-x=7=QuPX>sG$m=&kgPbyI^mr4*Ae`bGWf&s~%OZTB0UFm{Ue%d1c6JX(DVbi|xjyTz}W%U&aW zHFDfT;QBLX<<-8Q|5M&q$*Z|zXkB*+Hz%{Tj=6W?cM z=I^mgneSAgU%YpMmFHT@YdRCuW%H<1HoEr$J|6#$?)w*j2%wv@d_Tu=2pq;)GRUQAIHesL%w^?%2)G$$@hEqnl!=(Z-=pRF&w-GAn{_zrX+c}a92xOQmXfEL>ERnoY$KKqwx;fug{ z1#?-27EZGNei?aHmda7yn@RKVwcGv2ZWN8oFY724cweQT=?PIUMjxW2A5lKPaKp;D z*Y_;`hAU^8Z%R}7W)*_8cQ5|2d+3w2cP?uO_fA)H^p8tR-MjC5-u*G}g-63VH+6V! zottdO)-+?LThF`aKl~4FeU3F+;j^yfiRg2bw|BNXys+FA&K#uPe;yO}eqR4k);R$k zYTl38=&F9h8J;^2nYnKEufOQV-8TOc`sQ45#&-$dg}^Ur41HTRgqL51-;7|fXvS`T zJbC)hUt6k|PUYS$C*KXvmi+f9b(?b+frVrReg6}4wMmz8ic0rQ(n$U>JPW=6o)}(H zOPQADKwvH!P+ir$d+L0(ZI0%q#LI`Hp5~343NyUD%&SVHv^$ICKE3}l?wjo6E0Ctb zLzL!sy!#Qli^tA-{~O*5*XF?AJNOo&-IX!#a6Qarb9He&9b!JX8~-4#!7G}q_PZun)3*m#E6?>j*Ku#@m|(5on#@(F z`$s8*d($RlJ1(7hdLDEGO&vv6^CO(gydQcCiQa(2`S^pz3NQOn-d9;Kqc?cjuWeji zw3=2I@f!h0gLt;1NmIx7ck%r^($-GR7emvUi{a_b(C0kwGUge{p(;-@b+R4XLz=mW zG1U67aTs!FmNgXhMy zdSjD!`LF(?+dCb8Se;zOdUFjn57&Eh#5}M2g8k&>Jelm8SS1dg&dD6$eZ_ZPF&5#2 z^pic`sy`b%FXVYY{5616&|anaH{KJk&QqJki(Q*x?-bK|3nHIUf=SL z=VBjy4gLBGV$n#yu0D-*nvITKWy&76ClUC!OCNt9b;O;!(W!1QI@eBqH(49a^W8iX zf8YBVb&FrZ2a!>+f7Ax~H~(+W-UUvI>dgDE>h76odKze$QD-Nk*5Cjmj;290L{S?U z6%Enmri7T-ASxp3J0@gfh}rbqxDKR|5fN`?ViNzxb;nB**W8**q9G3gwoI021ob%kzb4Z8&OVz(qq5=3V!;uP5h_k##`f`4&bCbn&T$<{&a!u{g!;<&jrJETi{Rl z>p-?kWPl}Q){`$@hO6*%Ep5|1L)(r|rV7L~^QvjvvSZrRK%2%hrX9#?${(Q|mG@`9 ztH8NWaHdb}e+ZK=s`*_753RPT%?4*`yli#*DnsinXdM3@P&@g36}n5cPjP1ho`iNs zXsek}Y*E{NWT$vG>Amc_MD_;_Cs;4|#}nV-?~E7x(9~}9GcWL+%UA<^^V&1BrWnakspde}0N*Ab@b7^SqtMZChA}q+JjVRRP5`ZbDFokSp*x~& z@wE7N@daDhLxD|$H0f5+MWJVdFXG(@d%KGsJ=n|gE#{8q-d(}kvfWdFSHxx=1pVms zdw6elTwI7?>x!Zys^Ki3TcEKExaM+UtHvH-41SjDGhEoA2d8lz1!oB+alZSb=4TQb zZ*&LqaI=2X?yT7v{NAA7@F(r;AJsQLzZ3kHe8&2Krr%cl%FCs1D&y)HrEj}wuliSO zIgGdCRnDzA!aMa7T_89^JjE4W%F6lK$((tLyc9Z3d!nRhm^(Qjje zjS;)X*>&T>gdj3il}AmFf%kh1|`C>%m!B;07N| ze+(ny%^b}+?xyKntGTkV_po$KJAjq?u)Pek5M^Gd@0&7(R0vv*kNPLbuQCKjll7#1 zfbGmx#W@rY6f*2F75JXbx5vWo0>O`O9me3U9n}HM%wu4tbiplacKhr}7}QxM>dPcx z9O!>&Z*}Gx=O)rL?-Iz0l~}B`<@vO}hP-wO7UqEMj^$h7Eb&{0Rf^Z9v)gV6`s#S^ z!W5oL{_i%n1n`o3FX@%_*T$NNqF`)b{IsU0krwD)GLl!I%W2#FXkKfN^SiRF<7_Yf zCh(Gs;{x<7(yxHbC~v!81#ftU^4e&JG*_uX8$4n;D+7f*YKUAfHVEBGKiymnbuRffDb!zrycB7t4Z&o9C-ZnZgk}IkxT8Z z^h@KhXA0wiE~;AX27c4Qn;I8$$sNUb{tiFGT8TRFcQ$r2blKD4#X?>F9A%o@tBDI5tyuM(xX@X35>pFt$+JPuF( zR091f_?mReNh}HGXC(0gxCp%~b5*f56sIV}99R{lZ0Hzk|A5l<4SN(EttB)0ys!8k zYnF65(G0#G$vwe(JVHF1D*8ix-hckcIK&>iAg;akxP-B_g|M@k#wt&|o=LyRA2p4h zLj1R^A9TU`9mr?2F=1@;=hKEij9OE&12O+2$sZR3-LCpTzZJuK?PVogr@0Hg^Q5B@ zUm1rFzFK?nSPSA=(%>`pJO_MDLUsV#_I5Kidj2o!Sx&ry<&Pta(Dr~oN#euGJNc+6 z=E6RB9lf7Z2OmRPJ@Mw-Nf#d>nxZu69?l@ZqZv_Q?@%!Q^&i z0?u)Qc3HGZX|GU!jS26VqF<)5p@n(9U`mxY>)duvelpUhOMY#JzFtNdA3sZF%yY$e zT*mkW<(A)F$GaJ4Re1}hmGbaSqm9fgy=pKvz)pH3=;fgZF+8z_FRsN7^dR4DrhL=5 z#mn(c2XeLYSNPViu(wFOr{s9e&x_BBc$ZDNFlYz-OYB6xoiQC6eO{^F>v=cp0@_;s zjZHN+A^%EH=6L57<{G+_DOCH5oQC}#}Rh$*UViEnvPiV09%xdq{R`1*zy5s zXOV^tHYl$)QEI2k`!Mf!@m~FxtzPRvbfBH{F7@tmej9dae$C-IZnYNz86sPHR|~xU z^kLagh+hW0Z;OST>=^h+cpvFWb#90H5Gl7`eH%-i=y8L#C|*q^EzbMyWj7-)yvS-F@{qBlkwLvF}i` z5#jxU-!&V{2b&G+Kbnm_hntOCUvD;=dWmn)gIrB{W6lkEDd>1RI4MT^-5)B(OTYj8 zc@b}E5`Dvm@q==AJG0JQ>eNp#z3|kmBOG)ZZ90W{8a>T`=bP_}$6?I(Mq5k2HU6># zRZ-?G*2%2l_vXL!HNRm0hhaG0dGuB77uJtesFC*)ZAfZzc0nLEB0) zoPk_fL)j_PRvr+3wY^DvYtcrvhkcnbv=nnPXPK0OxHm*;nV^T|Ow zE9>){<+dG9T5B8o4k#}~f0E^A`J#j<>m||?R;fPuqF@&e^dmYOK=RmvkFa*mZ}-eR zau>3fA-M}0FZqtGF>JzoA^_LWSz?aHIHs&d*jC3!R2eoXp* z{ovhxH@1UB!QkE|?i; zS{fNDc}G$5s`SwEbEsoYRRI&()ztr&%k_x1)Y#Cw0oI_s!>NI;jTrbAv@C|NisPN2 z-^p5j-xmDV7>$5mc?TIp&)XuJpNfG5}&JJjuX5%@3RH0jW_R!7kOiY+Qa*^*&IPa3G}_sB1@l`fzUcTX+ZZ3K^|nb6s# z_rV*LY}bj7lJ2O*#vdQsbFADxt*v+#+74`{0-IU1^)>LV>J@A>hW%yuFaR;NPv6&) zK2`LG?=-iOVH+!an98)ueKmQ1G3{iX?&#k_xx?z!{^g0(7u3Z*2G#e4a$V9J%;wvm zEYfO}s;Cij%aQ22JrtH3p%F34A}0lKAc6sMzs7zv`47k>Nbp_lGgJZZ)j zoQ?t8sR7pVO;dkrlcp2145yqYh;RF@KO%Esjm9^RK7ns*E#Rf{lXtV{x6e<}|BHSN zFT%Sd?fhh=o#fYk9M;TJN?S=8D*ptFF;3za#T=?-?lAsd%fLEc`$H;vzqhPsg1E5D zhv}TuPU*r{vqws@YAwI-=KibiV?+6Xd>!QLC%x?h(rzGa6KQ>CmgdW|o$T@CdLql6 ztB)&r+N?Jkz$*s*(D`Q$*Ky|nPw)UZa))9_2*39}j_)1gHug-Lvo`8v^ML(z0$r{6 zajnD3xr}BOeGzMK3u7)GPitc{&x+Bl-^fs&-c?)h_es9fe9La~ze*mx|6#bazVwV- z95XV&vcm~{7pi#|_!YoUOGb`oOY=RD15(JenP=Pv`*uI3c?mycc0BFK2MK|X^Z7U% zu2cIah+{sGU?uD{_Q#|4ap z;FEwh#K8#(@&3R^Yw0w~o_AfuJA2tIZyr3|MQ698iy%&QrW9+=v?jn;^E>dZ3Bj5K zx_WG3@c(?D5MH9sDytzFSKB?F`<3wDR|NcF+LeE@`Y-#7@{J;W*_k!o*;8jxMp`jv z8udQPd&8ptN!Bd&oC}=wzJ$l&dCTQjbC)j9VBH&8?b%{Zu(nK_Zxf|B#U|_QcJf_! zVzs9-RwZV7R|>|$#W~yk1v+}oDdC2bwVx0F7sX}xDRXRuRf3IVxigek(U>wg6>bSzwxjfMMF){q+h@Cw~zI3XaaehiVHZuhsAm**; z^2or);_1Wi>w^yhi_ze^Z!mZ8c^y=_i|I#jzDm%BoKq$LTI1>?p-Bw=hMk@`+I-q7h9O`WcM`o#YPbk^W(G3+BF z$p3M^jgj|?@yJ$uSIhU2seP`2O~u5fBED%EG#VV=$VI%Z(z!|6UvmZfb1QUPbm__4 z?(?5SP8#zHbcwkq8o-{xg63l=d1ukcVt=ua51IRcjT5{hyeD7Rb$l1kkdNPO{0>_m zD@53nn&ers*Yv3+8?|&Bg4O4%G?u0Do2zHL^!#v$=VZFD4tUQPU*(zT!rD&-Huhd{ z+X7dz87pPO6(5OsGXgnhfqO0QW=g&cWW)tJ11M%t=c@egUX_d|e;>6gkkQb$=^TXy zhk44i;9#-1V0N*X;5o1_bC0ChtIxh9ov|p{Rehh{qIq1Rr`OQ7cGi>jDvQ?7Z;g1D zw_F&sua&keK$ct-$ZrdDwkbUCV);^UP`|}H#4PlH0Y9?X#Xq`HdLOkj$vl0XeL#9{ zI(YD!aER8Rg+C{IlY)BG-x|t#^mU!t$$5T?XNSI_fq0XwpZDcq zy?NgxpYk*%wh>F{>BIY)e}evsbq(%lNUZgxhdRPL{QL$ZjM44f|NIo^_q3I0X499( z8M+c&Puz-q^ou1v^l8?wcrNLo{%}&Z5ZIXpfN_F3c_O$B9p%@7YlQnHCq=v#-d~-l z@>;p4$3(m~?h))lNpM6(_YxiG@#9>=RZZMQ>l(NV7An`IJjGdjiSbt2%zun{Px9OX zyk~r=-OF{|=eJM05ZwXuG5Zxqx*p~0BhM{Uh&f4JHD%vk@qlf7H|yjJgEq}!j>#`v zGPG&u0~r2D>pP};|Qp_Q(jS5fMLK}5X$fqb<{^6>32G4Ef_wwJ2BO``&h6D3!W13j< z;A-_V+=lPS0@gnJ%QnJ8gyU&%G3(1@ANodPqhmyvgOta9_J^b^tg@ajj;mumH+Q<9 zv3~bz$a<+*W$iA?zeoB0gSu4i)mmR=SbkK`b_uTiCeQGrw6F0!oUzblZ%RyX7QPX# zL7%|hrwxU_!*5QyyfaBxxsn|;pEI--#~1g*lp{JALzh>@`=o(>mwrp1*MG^;L&&^? zN|!9D?<@0R0d3Onv$!unzqJtknrJLCmX9rMgVvz>{zvw~Bg^^FyFukYRej;No+t1e z;aNHrwMp+(SEY_~Ne90S2IEY-t^6kcGEZX^DF2q`cuOqo&_?h{02{TY%evo+gCje7VCk!4(7YbL(EU7+kcto zR&+EGez$Qyz1)W1fTxF-{mDw%Y04g3?Wt_lTa`$8vc)!~DVsXX*~prC+jCOg{( zy!g&;U-qvQzayM&d64HU@2*gvXtQ|Uc(TWz$8XVJ#l#s|roATg(y-9~)_1w7wh`W! zPMlE?t*v4VV!VGF+W>U8v6km+p!X*8z%WYw4r7exk>#KF$5KXJl5+5OF!6T?RE-&4L%Q;2iM+ zqL~naqpN|3iIAt7 zbn!CBw!a2F4sjiwss(+>BlBJ0QfDmcb1fX;d`BHiu)<*1HIS^4|E<{VoVdoO~rBEa$9e=!byi{B&o z?#-4G9l!f?&~4<@Irx3enTy_x`6!(kvZy|8oZSm=mTm6#w}edRwrI!+=ewYN^VpYeKN?3LJ`-D> zbmEHPouDm01g?)i2^|~e$8y!U_w-S3U?+Nm_-fiqA^VW}7Y}&;yV%EH@+lQ;rKi&V ziXW(N*uP%`w!`uFq?GLqzChpd<(MawBOe*fzn6(kdb+_nb9#Np=nM2f2YIJCxkYO# zv)u<*dQGV{{wH*faK?5LW4nhj)cSA8Xdn7^zuE#vfHOsB zM({pb{w;dbkR;9el^<%^>VA>$OwxpFGMVB^FDcDkS2V1(IXL0``z?j@{aOda%Q`C$tmrgaN{N4Xb<*n$!Aw_r&yOF7){s`ctkb==0bB~*5H4*7mnz0&X!#m9ymF0u-LwhL(P_KA>z3g!v}}TdKUs`D zr0jt%^%c9lHZg5bo20Y3`Xm@37*YRGk)0`e%p10=!o8j~JJk43=kZ@&!`p;r5YTcQ@L-qpA zD`<;XXH|tGmRV<7sW4Zaqcz4i!MaWS3OrcKo6>vokDE{x=DDho_nKd+#8%ezj}I$N zel_i?!{Y1@^0ZsX(jn*w?{70hPH3ELd%?OE@Ac@rYuefl&h7P6y2u(%;)wY5hlU9vAqtN$(T|&ql$s%qLfPR`@pF zLHQZ>)8*NBodxIG#1f#-fozDLHO3qh&b`|x&95l1jbza6fR{zn0-vPv7((+)co#j? z2m^VRc^yl<;@4W>RINq%fwpzO%R3#Haq7gIXzi*VBl#=%3V8nqx&t2k#8*o^xRJqT zM!p32uDbSLku9G&tQb@c$#uZ!j=#u6^`Y~mL`e+(~Z^6npa_b1vB;<-m%iseg8wY-^oQ$ooGX2(d2_BPdfx$E4bh((+8IvMXYk{={o?u49=gb<*3rkTm36eQocvzbR9+f&CAX z)Aik-UMtn9c7U&*5`Po5@A04bt^pods5ppw4QyWMT7t9Jpp_f=t-X4K@TQFqQit{e zlFoa_lTA@|1^(EqMfIzWI+X^F7!=Q`aclw}CUu(hJ)YX;_mZb_cG4ho?DJ>Wcpc|n z#8{-uJTShy^ig`4D!y~cW3-L-Z*5O?ZP9$L*o{8Lx00v(%5}&W zOu9$)U3Qrx!G12sOOt2iuy!a-d0s20&n8{|)@mpEg!h&4+j5=@$depahQ5D^H1XQg zly>7d!(KsLsvF>?xuQHj$o(y@l-^-K7T(di3+yo&)?K>azx2N}Mrp;fz~6*9!2GBY zoGCW}EaX?AbjI;Gfa2P9r-D zxc?!|*?0w?(pSMkbnuVA0T%H3^f4yB-po@D>joU*ehB@c^dBZVjCKd!o%as>e2V#y z;&&o{d!Vb3PUS=3dBH>Rp_|}AuF7zR6#CDpv~3Z(QpLWf4`Xz8!3E4Q;cK zzcnh&-S|uaJauNAH2i_F9of&BR(AL3JbOnBWX*PLBfQsMlB(7oH;%5vz-ICq@KIc^ z%J-o_w}y`g@mkDecDLs8Z^=X4apteR+cfOwEj=elPbhtEunz@avRFWy%D#(|0>Nn*~0JzBt0tp-k301 zFDWl#fsYt}>@=Q(j3s>aaz~&4J;q$m4ctTJJO=AY?=&BDk7l3~JV&$retS7BuHU>* z;inbkDW_*m@d~By|NKrVPuwi!`GbA~AHg7)>+pbClbBf4vE(_y1b;{RCHv?I+9E#| z#TnDw{lOC@+_MaxiG1>_dF_^KOFI07^Z-ll^REJ5Y2R94OHP50J6MbCEjMz^aXaUa z91y>_)nAYVr%KmET)Q;;x@*g8p@a5y7}A0NtcV^r*w?-&xhcpqBG(OWx4kQqm-yg3 zWD@yR++JK@K{w01Y%}k#D)SvZ^kF3ZV*LUCuQ;2^?U(*Q_Ukry^{MdWt%27Wi~*CEfYxzB$XSjpF0eToAc@G82jZN)Hf)BdX2=}mKHoC|OlH-sUpwBF2y3h24V*!H#n}lbsIh)cdqG%eS~+ z&AkFc_6rvu7zV?BVktjdhM|32$#+k4K`@*?42EVBJ6Ec=5Ki|xuxQMog}`Zp{{_?7 zq5a14|5?ud;}MLx_$>JmUB!FtjnQw(>1lq;cB$XeKeqEbkt_YK=Pp~AbOIJ|o=87u z5RYDVwqVa2`&@wPAn|?&E$%zH@EsY1XB&KkOS1h}x!}*yXBmShaN%z?cpMiz_8_!u z5ZpO9h6`SL5Z!N(7kCnf#u!}B^>HpU`NF}!r~c{0hpeG*9Xub;^D6HA4(w`?E-9YOLm7C?6(1LsE4(nByg_{MeMb+K>?S3>SOevT$g^_HT7MMz zL^G!)?(uu(cl%QZy8Y$6myCV`^I!T;={c&IJC8hG!X1<7OEoZ3yg;RahrDl=)4s>} z%BQ}f8@a#y{@c7yhVkzszhqqPo!U`OW1M3R<+N})ZEHEL240@AkG&l#eOpQ2SWb_S zE*k6{lipoUuaYdlSOWhI=qrLf%ZlgJ$v2fbiSK!1Cuzc;?Z6$J;i>%g6ysi=3)0nn zocXZ&n0%eb7naqPih;>K2{=zTGUuh39yxwikr;cgQr$|eb`y}`Z zUYDs)18MyF>@fc0RrrF%j+pO<>4nMz&iy25FCCM1emO0i0QVC&2b)6G1oAym&R2o$ z)N;O>0XxiEjBP(Ay{()cA)U1tyY-lQTFU9jgt2AEe0yR!t%`5KU9s8a^hmjn$CcBs zWsXG$uosud?(c@dN;1jtv4dX@#!ma`rvYQuR^fA$Q~5SF>|5r+`@Rj6R+WOrmB;yo zcaCl_d3OQp`fcLKE#(eQi9LWEpmkM|HGZXiN6;>t{l`YmR-Dd3(_x&zlk$Jq$8XUD z;gdn~nB`}^6Q1#TC!ZD3la?_h`m*YpamE~I%*%_2dCPq|*K41|-o6xn*CpeOe``7ar$}FQOj=(#?F!P4j6VJKvA_9v!O|K# zr`nU=AA06Spbx;ut+`~R7n@)0HGB?UE0yy8>*~wlvr?XAcNU^4WRCPE^yHjtY~xRo zz|VxWcI3kS?vXKE^SPeh5AC|viFUAV2Ua=}(X`w~hxpRYk?Zy&H(l%8!5*Us=|^Vn zcdK|Gw^^fUuIzQr9j56dNZY}{9(iEDdpo}9N7DPm0}K_N(nBj?KL$n{gEX zFp}zX^4V_qg|$vq_6A4iU}yM^-pa8$y8Wv3dM5>54q>y%rm?+Z|Bzh`dvs&XM@M?{ z|18-}N@q02_EvkbS-@_giSC57Jn*|5_@$90ZtX0{A5^giv}dUS7)G!y#XGj(mqVU!P(L=Q*YGZTE@~*m?_A6En z?>laAE?flPWv_Q4x#bQqJ)JEzHBL0O!r2lEIcj$_yTRE4OfPC!i62*|bMY-JoSCgl zoDsBP1n`LFRysAni@4p+#}-}dm`bYG)O{$NLt(;6sKG+D7T;?F3qJNrT5U&MQ06A1Vg@gS^gWWACP zn&L|IrlIqeT^Hz#z%xcZ>xZ>xg?p4M&Q-;nl1}qTS!UDse?EHj!0_*9f)jdnP)ej%-oiexGmuyEJ|Kgxa1dolzn=aoe5=j*-bSkGJ@mQ~Dj@x7vw5wei8f zlE0ES%C~xs@?CsbIq`BivL|n&oYZ*Y70a*WtP8#Ke_UI+4@s=%iU8>}}d&8G{3c}TK zV%1(kj2zL7_DSqb$-skW8JA>F@rKdFRt9cHsK;qwzFt7SW%!pSvTF}&9-R>HDOkK; z`V-?&ax&jyGtiuhK+DE75j%$RN&qbKS;*E`tHOL_1CD>b!4j>C$&E$qcRf5xjqZd+T}Tz>w}BJXHt7Y!$g=o;;5%mTo`OI1RCEj# zKZU8#@|7>J#~S)B_{m?+;QI{UFU!c!fI8C1O|-in8LFuR{Vg(;Y@|_s*WAo|t0Y$? zG9@{(t%G}(`uCb%n+<*no7n5w=U}aKl69l6?Ke6xe?>KX!v$kV7w0MJqoecSnb;3Qw{Q~BxY{zE$ zLiX(vkMmmE2E411tPA?yk1n>Jazy{Cp=Fv2)zJI~`ph2sKt57leQO%2g8Xp=AHi0B zBZ7}X|EfDn=k=UajDl+c0--%)sx4x7^CF=gLUV1 z2XWy|tEU*A++XZYiUuuq@yXx9dfV|D{y??VTUl>`58>rMc1_cjV|s*|xR`PNx9>4Dh8*p@iCmFD3OomVO?c zXg6|6PjMjq6Zf&ibM8Q54g12OpV*FC49Ur9+3ybMTZ1*%lA`~-?@IvhJbMu2n*kmd zZPOVACEAFu6Tjn1XPo0ao8a?*XWhwHM!u2KCmvL}_WR4-@ZXfHa#Xg;L8sg(9i-$m z={lih2NK!$$_Y`1WaV{v@RNZp30$aHS|OtsznHFo?*3TclSeRuH#?BXl)i6B2}bCx z_;!t8)Unmo_i?^|tfL2hp!EH>`Chm~_*woEk7D~1jH)c^Hkd#3QU0v5Uzp%1@o@%s z#e3tNk6{00Fi*()LGwhu5aBWX#m+<)JTQ;BGB=njily{HbH)C_JA+NTO;7!(v?1>F z7uANx(!YVm(vA%6;2w8+iqZ5Y|GTuKn||m!eWSGiu0c=VU##>&-v<3)O%4B+b4?Dd z(zlvh_IvZ{vFxxpmE9Z6smBs~gLoFVK0n21xN@A~a6PfGgiDv=S04wTwtNL$)Q`|x zb)aX+e#KdtF%QFtQp%>=o!$SxJ91fpr>}U|7EMcF0sk)vo`rX z)5JTx2tWQJy!VTKjrC&5j-G$fmo42OO>vb%q(?LOf0M5Gk(^yq7ms8~|FmZ|WZlr+ zo$d(qOa14UV%eDJ*F)&k4Rq{^^E5n0lj2*))4gNk_Uy3;hOsfv_7vv*U{fK<`8BQh z?2cWDZIn5s^9)|H*ptP)nv>t;Px@!If4f6;lir?IY4J3gop{*KgJb)^nbqaJ4`%?+o1TK5%A#G(Qop;$L%VT$;?HT4X z*0BR4=wtnW?TvI;U-WZK?nOUF|IK>ZO~2IlQL<%qyy%Z5kNP}<{?}$+^hcAg=9VtE zj&DZM|LT?W8NOk}-8|=!$)U5g&`vXa1wOs=w}@{w!=LcX@ReIRr)x*_H0;8(S$&P? zS2%%fIS1a&I$k!h>Gdn=yKKV?IXk?`SvZvtfI?81Ds)*K*oqCO=kK03Ojeo-)ODXY($U>o1NPccatIZ}is8 zcYHS!eSuu0F-?_oeXbp{!-R*Y8z4OYdzCZYs1>W{U4JlwoAL zxVpJEa`pM9#oAyFY0W&4+zejic|;xakvr?@!Ng{NCi5aRVvOPxG@6q(6&@Vm%q7;Z z&UAc$*fuf4cE8A3uBuD>dmlD72Q>8`^saGJp@ummUT1(9T49H|l4qV6%$LMMe-tu~ z5$$u$hqG?j+2t9G`HY>Lou%M=oj=$~*?oCr9C(Ivhy|3;_~zq<_|A>a!Ka)2fqZvx z_ISWI!P6vIbMoi1kZp(`<`P@CaW?%V(c62t~q6G4W0ZpXrMU01m zp6VXvUNG+%?^V`4{=MHrRy&72C*ZvXY*%pvs%ew*bdbJH=`p3}eDN^1rto>r-s69l zIr{R%_vW|OjMmQv^8b)D;ZDtG(Grt&DtK!g1phc=(ds~(S+i}FD;zbQxgy(2$m(^j zqV4ex`2}|sG>=3}BMIcjGR=uIZqpg>cj*rPJz;c5X84n=^SN7qao8jdkr}M_`Q9t= z%(9`VPi?eWZH?H>XWA=%>r=FO3vIsP$I?2;I%oY8HeUNqU-Uf1c*Sh?joIs&b93F5=%|I4qiMxPo#%oFVuqzNwQYC# zgfjjRPNpAi^dYcK(Z_aR6SjJs*=OJ9-*9?YLF=V9q;|?L8eLR^STqK75qOH0hjZMg zLdO{o;m!j(A81(lm9ed(j*A7Skv)YQ{t4cYnAuTlO~Iy**x=DSq`fR{tWESf6Y!rF zf6@A9#qaGe)_bP623vPHZ^A?Egum^>U#zDXaV{(LAse2Yj6?T&if`}IyunWE+y+cZ zCtrR{rz0C%@EchvlJ6==HoB?djKHV%ri0j151!$izc0COrx{mFx@_TI&a!;?mwnE&-~#a)5!xnv zAp9r2$O0Rg)&?JSU>EFQt~_SD>YMDk(HuGm>YSbxUozi454^j`0cU1yFHIY3GMk;6 zbk@0wXZ)PCFY7>xbn%!Y}QieWPZz6RP*y>i?K}D z_rni8x)Wa$)4WRSv$2W!X;M~*`b_K)p~O!3q{S}!hnT(-4g$wK+JGDsV$JM^mOhL; z4=yN#CtpO_e8YMU8+mVpft>+BDjt4QSaXwd$rt1yJw|$jG~wAc_HNDt-e&FwaFy*n zFrB_8*E^a=;bdI_9djc-f6P148gLV^Fvl3IGx)ex^lt;~L(Rjh(tq(Ak~!par!zW7 zfs3%oAAq-U!=#UzysbEjboB?FYfOAUvibq>kK7+p8S>$QPYKFYIn2?)2KrE&*g${! zi|ViXp?;c-<#%b{IJG}I-_yE784+80Sg}pe`_P7^r!!X`-R#88&Cb>Le5`Qw;S{*1 ztI)!^T=9ID(*hnbC$A}DNB3tl$Bo2#Kl<4@z_rUUpz)dyDduJ9jWsXv-tL9ovTlu zS!iLbrF0$cSrO*cbs8!-NMzH=IouzdFI;w>Ug95*eYj@GZvw2d+A*KBlGybqL+>UORcXF^g9g9q^H(i zS(7hOv*1nOrB_DLW3o4J zC3;M24|+`CEx$XDGESY~c;+sCoV4q?KAnMCqMeUohaOLv?ew#E?tAo8 zI;U!@zxZQQYtDWgdh_U81>~-Ls9>b+M*~`#F2TTHzKfoQ6T7?$O+8qqsX^bVJ7S=p zq8+axyBYZ{;9B&I3E1mekws8THN1J?9|A_1m)Z1Qux1D#d>7CJ2 zOn!tr?aQ!M#M4M#c!BdSSCUujQ)T4HFFGZ^(z{6O*+uND4(OC&yXpKUU%bcEBk-SZ z^cLEkP5zsd-7?Yij*KTp3O{tjFbr z>A3*6I6F^z1hlU zuP6%KHU4h``&!y%IN$*Kbq?@7LV6;%KJ+{^O|XtWZsHRXr=KOgPc7{f?8RpU{m){5 z(OgL`Er>=$lG_hn^CbI&pZr;{Kln8E2a7MOD{OWx#_7xtp`W14IaAgwG zCxvfj)VQlSxoI48YN-=W?qfb}cDj?cn@j9tk6_4o+*<421{1Ue=)%rUwdLtA(fCVs=xSj2WN5KIL_$;zLISQk_VXkwwr|y44ukW8qw9z#`!an?d-zBcHo|vA zowd$7;PUy7qp#LJYP-L2epjr8pZ)W|?d&Vq=tyVs#et)**6>_AaFg>Edt2Wgs4dK< zzVH*$pU}5QmG2&ZH}^F6M+cDY2Y&tk>-)zB_PR$N{k5w&$Ny9P%V^sNwc*xE8@A8} z^ekV<(f$t3{&i@7M@`{vXH=nP6)~(BiD%r+j^zGFoptQ}>MXG5B{;`&(EzZ9J|a)B zp1Pddc`te34&=lN&y%z8Ib<)`5_pjjufsdeAgvd--UHw9}5+hYn?MY8uET>fNh zu!ffR5VNVLHCRIp;9af#X{U9$25a0JSYDX&Gi;b2fCv7I^J_U**_r&kQaxi^H@agQ z%JqQPQ_O|Gr5^Ds(D}cpLq1*NMWk1eOtFC9LBGCL>DPv!UjZ)8fzRx_53YD}QqZRr z574IvCOM7t=bTf!f<75G{mHE;Oj*Cq`5=07BmIe~KX;b}kzJOU3>1^)Su^n0|i z9vp4P7kaPFE73>c>Z*K+Hdbh5g*J*-4yTQce>xglKI!CukJj9hoHX-B+Cb z4)V#S)gYP)9|Z5mIwB@`CWxa7zgjxyP-_ug6Zr z&|ZPN{G(3dd8&nNmwP2&C6B&Wz7TSozCFlugm0RLwPAI+4Po$i2mPLgJkh}Q+Bqfr zpZed1{ZDp2$)gtQuO8i{_DRS$z0DHL=6l+!$i9z|Vr4iP_PC=z5^n|l4`OVnUlIBx z9fM@uMfh(BPO{~HpJ$~TzrTyJ(%vTKtb7e*H!%*`JWJy?WlQr_5-&-zUf%x)AJXKuftV&oZCQ{K~?u#6`N}s#B2d7i*6ztkqS(m{{BNQFWN$ zal_c}f0nihW~xKJZDw*#LGQMHo^R>1bQe0i0ekzPY$0*RG7fCo%Kip|IrGGm4n#0F zI?(xc*kJ=5kIgso=@%>&XG1iqo-qq2m(g!@tb7w8EsXqdCw|wPr4nFeTb|;Rp z!{^z%hu_>_$1lell11frSf3$2L~5%)$GpN_m()CVcAo;zmp1gQ^TjxqHs2F6jTfq_ zIb$=Fz9?iwY;(ZaZB`pSPSp(IgR5L4)x{n^V^V}QVy0d`IAA^Rj_!y6^Q+vJnebH| z?BPpseon{j*gDsidG+1yfVIz$T6ZqQJTb%ci=mz#B-_LsbQ>qXAK|R{57FC@=eb5o>_Jd1rK@UKEOIvJr zV#_#Z?Cw5y%0)c^9k;9{$VlDJ^l@6tSzmgD`Wanr0zZ^^D$Ab4?7MZzN4fz#_9XG* zg{!6_UrVml90ZRx8mqrMB%j=atABg=xYK$HIo5)7SjOsIhbN7i>zUjmt7je#bA?ui z4x3yJ)6w&Iy%w8CTQ=x zGdhXivcVa-;yXjfo!ebVrg!+?@91YQ-Ug>frRZ=Lho z!-+rrerP#!{lUe*JuG|?UcL2jWX1D`jm7&%g0Es6picqn)2 z2}7Zu_7vKXTjN~0y){GMTzt`xv3M77DSdBVx)u05f4DlAb=EXaB<;?_M&t8`%}I5K z1y2+CM`y+NuKw}R^^1=TJ-v7qWlS9U`lZ(n)hw8|7W@p%dQC zAK|xb3*ce&jQD@$Z8HSSrsrSsjr>&wQ@#qop>XLFLxMB7@jztt?jdt^-QgT<`tqFh z1=Ai;IEv4){MuV)LmRnrm(~nTJm>nM$~fs;{9+GGT-`lnFg6L=@Z~uhg6~W__P%cu ze7kn>bwjeBE8cT`9zGI!VInKmf`=5F?nZo|gwLn3?u1*>qsB~YR^h&}20Gz+F6&@# z1NgnN7MfWLxp3IgyvowwaI(iaNi<^hti#H0alS?qx`T`Fk+vsoA1$$neY^(#> zX+3XeJ-0z8rm>#Ii?kApN@t~u)&(*&v<5tPzt(sI@9$u|T9T!9Ok?d>e8btj{tcJ+ z6qdL2z!PEVEUTl3DnG zG3-ORnJc-(nQ9A0-RvP*LaY|__F3t{1cQYxYw6MIyv7XO5Oql2jL3!o3?jx_C&Ks` ztM?rar_}HM!@$oqR&XvVeO5okLyf>U+*qAIthp1RKe7u%S!cDBuYM=9@Q=2}mUc5{ z+INs^BpJV-H;V+OYz{}=p_YHJEd*AhW#|K)m5ptB-|4nF$vB@7_ z3x7plv8Me4H}YqpyK}(r@`dns$mkFj_-`gTcB3M)X~MhOvz0uDO#mVi3c> zMl4_hOhW9D72FjoCdRYY3i~FWy5wVP3PzUm0a;&B&GC*vCoq`GXb<`oUMNF9Gj<)e zN+(84dW};xb3tbrDAo&pJx@uWMciS<#b~s67JsRJ6R*25mFIU-dP(N5#kye51p8oU zr*v1-;crrWqxR63nEc0u52G36BHCa1R=l;o*EeQnT|wU+0OvGmEb+57lQXfQVoO9G ztiiWIx-!MdFbsH>1nU=Bt~J4@NoVv`0jc5J4=6W#Ja=iJ{gDO+BO!9ob7d+DM!B5wsDs~kGZP(7iIh- z7PcYYYrk=TBY=_YhO^;6a>l>W_q6vw@?WbyN}1Xdq;amd@hM`R$F21aX}&=@q2`T_ z0(^#+_N$eiwZRdRt@8|s^eIiYJ8am4PbQX%{zvOfB z#g2>PACRzJ=}P9E-cwj`7P@zbx{hqa)=*h9^XuUGj|)*Qca6XIkm6A?{~tk5ZBBxQ zul~PptXuv0A#j*0URiQwhEY8pIK7JW zk))5}`^vW}M`Nw;Ye*kWdKF_Z9Bzlc_Re7R{*aeqT?hL%%ul{Kw%V-0-Jw5A_?^qoVW(Kz$hw12X(0Id8nMBr|a`T`i4wn^iRP+g~^{b=Dd z>umCtVkiYHGwes`DC55_;;b_7s?Z(p5uKV$d^P5GHS2F*^+@=il=q_`h7$g5=9*$9 zj!LAfx0K)9R-9XlziB*M7&E~*MC^I*6v|UfO_S&7m~F+o&S1^5uGrIAI19Wdow|Xa zdT7iV_7oV6FEAcKo+Pt2wlYWE&Kf$}4k z_*Lc+WmhFBpZU0^T)xUi9|X=^Ab%ZVSN0YX$cd)Lg1-HZd7`=|b0)azO;BGdiSGun zC=zF_@m0q(Xv~q1hL~TXZEM(DfULp(_WCkUGCVHoYZKV7&ZT&W>$1ppY1^Cp$U6Lp zXlHV*lQ^>^zYHIrPR2(%tQ7F5W^By(0#E##@KK7kGIfKtRUf6LfG<2mt+K#@i z3LS;nysj9Z#~!lFdXPWxBcZH%bXU@2VV`JZZ;BrsM&l(58q}};N)K#x4C~9WJ`L*2 z#ihQqi~SirQX0COssMl!TSX6yMAE;A%BH2$I#2hr!;4x%f@dzRM4LpN- zn_*gDY72W18NzpZ~cF8HG)U)}7UWX&jy8q0Sf@kd>SwqJCX%A$;fK^Y1B zYANfCQFCQSi`|O9YYBg{4+8wTXh3JnW4nf@SB#+&EynJzemLkJ6I%~1S&n}N{aAtx zbAtRULRoh*J{HnFMjU7=_*1?a*5-9?J?%GWOFY}-xBUX0n%eMgU*xYrdB^%|jH0|X z>)a-X@)Da1(XW=^YCW<6c$dqwd;HeT$Cf9*CE&arI5WQl=Tik|GwV+I#sx^Fl zUq#xuc}b~_Hf?-l2tG$;T9ipUb>7JP%lzx@Jdt)r)XqW~jzhHbCY~9WN;~Cm_Wm;e zdOMqFr^a}*W4ku}HZz@ttWln?^tYaNYMdX&h9o&Pm_Lc@K6rep86T|e7B-Lfm1(Vc zf0^`OW&SECvpgrY9yEuxGbb5y&B;?MbCUI-Ir+Xafy4XS$vCOZf1=D(rZ?bQL{Cg; zPDJ!1zsY|nh~rnX;e;yhv&6U>_C8#BZ$saBFTI}u&B!Nu>GOMK;U7>wQ=7GwKo*$X z?VOws7j`oi(zO_qJ014GnGvhbKi2ndY+Knc%~@G6#%u}XrzKJPjSrvtZPD+^XLPw^ zns~N7hYcNF^p^AwTUfeBnoq(ofSMF z{-=b0WDnSKaOpbM7=B7xW35_aVa8DQ2W(t#e|WUlknQ)6e)w_^e*|P8Vp?RcaoVoZ z9q#^wAnp5GoxUg0j@=U9aZQmt*K0D?N`>*`2jzQZACaW1Du6R@y7_@_#kk^ zJ})><5*)8t<4)mR9Ko?EuXbkO3%i}O!SBa2F9o;ZFxnoJJ-0MA1LZZl9o)iN5N7ZohgYUs?ULT9P(%(H-I z8KreqPk9wPx6TR|joD8AAF@vjJD>Me()-7cGxjvSCx6SA9Pms zex1XiSaeP3R5TYF@PF*u3E!T``OmrouHo3T(Cf?{m9%G!%G)!-9pS=)o#;^DX~M>C zZ-y-#VC`MMig8*s(fP=0o81#W%QIsaF?tGV>Y7bGb8be~r=G%>#G|FXu8{GR z=qkE8$rJ~gDtqFfw}Q{-%dq)E$QVpdhTq&Ndu-X)GJF#PT2RL;2cl6_-MSq9y1UN=MD)OON{zdHpa=eS_hx7wA;>DfY z4xWUs#j!BnY-HU>D7#YE@Ooy`Hr1u}scqOt9{O9$vtE~QK*U|dS{iWR#|CuT9A%a`A^qj_3bsJcx_y3Z;Zpc1@)9jtJRc)p& z%_-t}HEO;F<#vcx=MLVqjyVSY)EsLSPcgRBJ^$%G*3_)R{pYhr8MD5f-EQX?+DsWL zQ{|~#_O}G`QH|&na?4s?%an=jq;UC%*+U83;=7QoKC{kkcWJ}T<#C`b=d-U}bNQF-{jNg3k^H4^ zM_8Qi_NP+XGo(pJrT5Jz^=RKwfwhFc0`?d75bFCMk;gC=d*c~X>46k85ixy(=8?{x z+!3uq4}eccRh@_M61)7%#FIxhRNvEYmE!ZV2i*HO&!KWVE+4(Aa0$P4H%YsQ=aHm| z#szbeItI?Z?>OYi#KULbSH<0Uu(Iz9dapIOjXgP}kKVUnqklBoADY_xiG781N9YDbc~t~?(d4CU8T&STbZ z+z5D+Sd;j{tc8wBH(D;6@>KSJSMG{(xjQItfW2X&+fm9@Jx@@s+B((P0Cw4qgLjR=Fwl9LqAYml&iVYnn!OyxsNsPbN%z@ z1odf*`>CUaI&PwlyQw2LtPYi}I{v#g@%3`~N#3;3lEtT^yfGZvG=D;p*dm5uAp5xqu zvo?9weksur#V|S-SRTi|E75@(=#K?Fjg6ZQ|0yp07_r89r*V>=Oz+?1{cF-ICJawL zZ`p*-&)HU7H8OJOh4T9>?aY_o-^BZvfn9_<_}j~HZz4NndwVhuy{?R4~*awF?)-F-ZNIxM+&B>sRu=8uKaD;R)U?=$mVD9 z{&6n;vQKT_HQC6XG|qVG#Bql4*hHiKL+nB0TFKx}-#W#Z3IT57YI$sm@#Zh582u2; zhieTZ4pa8l&!-qGX<$YFU5`#G(DyrkV)`8wPg&s9SOlS&00HMuOONN(-R+wM2T10}i(^0Q-)0_EV3$DZq`(dD1Q-k?ZU^cPtri)~!tX^o!rf7>v2<+7rl(vgf|9USJpvU|5#(5_kM1{P3Tf94*z`b|SE+zWDBPeZbB* zlRY!#x>}KYtdX|sV2_N_7K6IO3E2mUYezj{R4$-H`|U}l%=d4Aqqz7#@2TiQ}*rTLJ~s2k&7ULj9qVw zwjD3+y7sc8QZHy-6>SwSJ#&U*ESM>6cU!ydEARJr&J3nNcf0Sq@0-tOKAAa}|K)j} z|MP$D|D47l7zxiw!y7mDPh__)&YtaYX15bd3|xW{#=$!`@EzWjzn1@Xj8F2N;g0bZ z>#9{{_!K-F{tB+|+v&+(LDoi{3C)0C<=C=b_I(SRK*{$0e*<$P2|vpqw@H6x9-5D2 zUE$l9iEhNa%xVwcg7-+cnb1;1umkqx&@pEM9Zy$+9W*RGAr0)bMg*_HEcRIX5X=NS z`L_kL2(qchKx|hA{+vE3+Wj!ke;u2|J=8t8D;U}L?V9Kl_u%J#I2d{A+vViOy#bGX ziyDN)Pvl=8!+EdZSNnzNLUiyf*Qhs0EwvrwFfdi-nru6bmp((l;SyJ4koUIzpFj9VPtL_@|EWzff8_8HwzNw0Z~xRyo7wBJelb7)Jjbzw|fvw22v?%Re9pu}vB;A4XC-*giB%6#K%`Ez9G<9Ivd*t(x z_p9?h&u%)y8i#%=o7pVRZPPm|+jly(&FG3rlkXkBr+f0++i>2U!o9S|>Clv?ln9sR3DnvqK9WBfMTZ@?D0-!b{FI{l~K zY2|Lt{QTX948Ngg#nRLm%h4aD-zj$8(I4F^cQ_5ook#fJI#_@q#BzodDF{R(!}0R-Edo!?JB zDSu@0=Uuz1FOsk{?+W4>eUUYm@*5_Z#3GNGZ)uEwllb|&-G*@)XHHtGXXxe|#D5H& z=I3rgx2{Rbp0p@OF57O!3W?qo!ym}DSranoq}a!dtEnq(^jh+TDW0+Ef~3>bkaQGR zqS!9A;WI64_PiG*4#*@I(!@6lTr@UcgqpX+Mw?OS4gA1E9#@Wu>HtKLofQuh<5}f6 z6D#}pBHB|dpdY>_TB$Oj3sbRo^Ya$+tH$NqzSdTZq-uf%qT7d_`oTIo|Kgw>B&Jre zKeEY*R+iB2B4{L*UGMxQG^N-Z@%rW{bB%j(V)FGb*|f`PO(K7e8S9(@EiX=Bb7j2E z@%7G+kdx)RF^ElSNRsPDyR5=I*Pa3egHu~OF#d&ZT}jciEt zhy5d*-e8G$`8p21ulP>Yq%eS;WM$QP@JarUcU!XYX@2b24mBSSNy6+8~2KN!aCE>AI-N9#X$dnrEUgH6m|&#ZJ~Vvxa& zO^$4_Uno99VdsNQ8Sj}Ex1BrOcIFrF6RUS{0&{9+ToLn5_VuLQY+x?|ztpjKT)b2E zmLL7fv+WFWkAk>ijXwy^75DU0{bn3~p40Pn_?{=>gU<3!8Q0h=Tzk>?+%~Srv6l8W zCA=|xkG-iB=W%v%OsZ*;1UBN$YVSz5k$)tyCHJ7(OC-s6xgtkBl)bta{m10);R84q8?*TEHwPI{C!a(oIrz8cewp|&Jm`x2LgZ}4$~GtG+GhG%+pQT+ z{j28Pzy_Xs`n&i+pC-l#dUkoV1)s_GIOqF}fjI98rwfwa{;oRiqS1=P?L$krSD75J zTDVrx*-KpCw&6=U9wO#-_xl?Azd+OSC47$g!xN1K4>cOAo|@_EAvcXeUnwV_jsJ7_ zH1WNa&yvs-qn%G{aEg)UlMRpqbMs8Y{HK}5OYC=#h76nx*vxivRKjrerG)zXgLnwaQD)}Xr=0AH<17siR=UZA{1^S0ytSITD@0=CF& zHO%$FkHec;vm2vq}r?i?yNd#x76+{${Z;LJLIZ8tF7coc@5r!a9Y?HI=ORwX%Ls-f{a@>JbHNa{Nlz&rmzv;@9~?T zF!plb_jTx0V;_8~Ki74J8+YvbzUq_c?#bJZ)BWm!!35@@@y~va8gh)wOi{1l<~}zk z{@A&Yd*|jn&n)H$PkMH3ZfyO3y&sdB1I_>Q_&y$W>G{gswhy7XXld30*KzOrEs6Ec%h24I z5jfTQ-EqcbXUDAL@%jpRecE%b7G9y@2Okt(=jAu#2XcextuQ!pvX|O(8Cx*D=|I~y z^1jjOmG^z--7_rF_C)xXc-MKvIT-LJ<$hmK%KbiukC7w1J8X7Y%`RT&kz;phTeoXwb7xWf$z(@3P_c8Mxtefl%HXT3j&Bb}2@&9Swwd|ubZ10*c2TCz_Bbmzd$t#ztvy!q!}ouI{1A`Z9bD7- z_P$Z+{Jc+fk^4k`2f8A1LT>tY(c=|vz3xeg+nm+Vvt$Qs4*MnZ>bzgcwW}FJ658uV zMtH>BmRl3(vdYb+ZjCC#x0bkJ@|%Q#;v!f!5P zZO?jeRL+}X@dO*4*V>*%?m}N%VvzqGRNcMx&LdinjKOD0#wI6W!emE2TrPW9Is`$PL}h zJ%BINFqhiIEapP+GU)^jJS)1qsh;%^UFPPGX+lOuGXOgJC2+WmIhAO-g7;Q32aQ{K9?;o-$@;3hCw($tp#yw*&{|+o zpBwl#)0f`;_rpgHxpaf?Lcf2_Z(xv79+2oPv1k>cP`&Dq*`;6=wEtLFul>KAzq^@QOr|L5*xu-0@UJPir+th|8xi)c|ZT5 z%Y)r~e9)lg@)UE?clop!n#>vsou??yT&9x;CIa# zjdu~ z{jv47%X`w?hrY}d>*z++Q<+twh8xyB@JX^>Pc z$FmW97v?t4m(ka;qOi8;&nWW^3@Jyf9RBbuvV`>2mB2$jXu*USjet>HuK^=HX5R0; zXT)n(3r_}qdtfMDbp>P7Z(sCMdk(xrwF2b>?19$gV=*JG^n&Wz2mr!^2`22b}#2drP3)X0kNbLG$b(2KNwyP%OMZ3bdJmV9ZdnR<>d zookI@*CTG`2*_<`QA7t+drRg+8w7f+w%B#w^5U$(a5gT3Ero z?#Z>5ay(KK%L`o>o?%7sz4diWD;PfXoQ^&>*K|6t_jNooT*3Or#yGKu_h!=uIYGG) zFjUP?$$|dWT`nBI!Mg8B;pgSL^zND%c5ZB^kvM*tWS67!=sS@KgadM3!an0tdp7eB zE`$f+KzWP*9XNPEF_w(ih4~oxu#1CuZv1@W0KrQgFgT zH0Rm%rU&==W!8`xxyBaE&jo+N={~NBUZV72nB+EsC*ec+sq-(&4XucQhl|p=`TpEc zKhODnLHxwDS8fe$*8f?#A-(IzIFrI}m*D&Kw&{fg_^XLQQ#|k8D=P@@HSol`*iL6N z- zL0)4exK?L^!!hfuvCxOF?HTe;l|wg;e00&kt;3>$05lMR28jQowiq&{fWtZT z<J&?v(>)U*u9-ysR!le3I$mI03F(v;RGKzEpT__wd}6P3O)LY|z_h z(?0QJ`vgSy>bbhJ*cCUT6?d+e}Hg()bjdop*3J~u6g`; zFD&x-)xb!5Y)=Zlo?=WEab(c7YK8V^$PHz@_1qJ^ySg6xE@ws`I4*9GJ$L4@doJ|> z+&!1`k+lEsfi_HXUnF~^MGV2aA}H^QUrNq-uh{daXYnN-b-qBx>E^+i-=B&9!h|@XA!uG*@L+DS^@5HP2F~8fke0WHEmF&*i zTeSx)LS_y|x^4M8y69iJ>*n_L&cnv0TvZx**Qq{ z-2HeGa!M=j``YoBhr54Cimljh|fuPU>woZ6$dcK-CA|8=f9%kT6Cd$z`u#*dTTV4s7X`V{Pz+K*

!=UfY{a(z}E_s1_u z=O)4{aU>1Y@43@iVPW?q-z=E*VW(YZn||$0U&zbP1+SR6nKr6;?+d`QU*DhDI%K4& zC6i8%(|coQ04LrRyi2~4&G>K)^7gf+D~juR>u)(r0J*s`v(7pT92wj17#5zUqRVQX zPp$H3t*kYf(_Z4PHF$r}*mfZC9kZj z%>?Gw#2i*ev0G#{-gtiXMd+4Kuzn))$zsclCv4R|Q{L2Z`UZ3`>oYyb0Wte-?BqSj zl&T5wAUTQw;xh-IU@ruQt1kkkPcT--sqya#Y0VV#XyUS=kwv%e$D{8h;uvwH!4o;N;iIb zc2c#Y7v(F^&wqt3P7cMvzbrEj-Vor-dA{GnH9`;E>#IjA7KGRi;}$D&&KBooBL#iT zSKP;LU;HAQIx+5=R%A@Q`pVJhv0S-%s3rF#Bm} zGhtQX6EDxCbKQ*>S@Jic5AUCyVxLZd1J=mwg!T$*`Wf>BXR1Ho@tF(Z-?YEzE8CpN z_;n_)dA?*9xQTJd|0o!1t&e6L+PkkC5xckGn6b*g8Yn);{%{a|m_3hu zhxz-m&?fUWpuwH4J{-?utC@K0+@9e*Up!{Ze?JPoD_M&DF3~JEXL7p8Pl1w9*u@{B)4zirh zx*z9r-<|IpqrQ0WGn^MAyF^^?p2Jx~ysKIpf~{<_oFN#%=jy`tBF3fh)Qo`beQrOO z=lSo>B>-Jvk9X&x=QWQA^YD$B$9CT70oSW9S0D59N#P&7dwjFFmX6^cZcf^gH7@^9 zZpNCd_}jdEnmEOtTGot_&aGzM-1EhBF3DQbnsVDq;D3$XdZ4wx&dt$ioddq+)LAvG z!zOavl%vtmlFpgv0!P>bb*_&a0|UQy*Cp%GZJ#y+!0eQ2&NyH${-g>CFJUSGO8OEK? zb$5C6xENTGFJ(<;&(1E@oR{RwF5(OT_-@dsIX-WWy$GHcHsdSpvf7QVP3Ks?G&7XU zDgRJ;h2lHZrE>YOXt@U%uDS?bOuw4z!9z#>V0~i4J1BZjMfz;5ch*4u=m)%84UDw51qZ=MYg_Ost#7UE9^d>NeCF}X&tGRZwZjLSyWQB0w`LOu2mQEq zdieV(7pzBrTkkx}bzPIJTL(|7hEA_!&ZGFhLAYQK)0rp8a-4JQx1V(3c6q+6miP=e z-*BvRYz|d~{nCY7_G-JVkvb;eVc81wKw^w!o0^6mIE(nAagD%@wu1>^Rpi@AXhi#? zJHObqmgXyYiX8p@MkH=)FIvsq{qPHSKT04+o9sudyW?sxDv!J@>GomX0KWa{+-T<2 zpg1OSiM3w{XYO89q|G0&-h>C$5Sz>VYfSO^c{-;BbZiMVm^(uz*L}v9UHlwA)1UX7 zTgYLVm#6MRSUwgX@^J_{s4(C2c;!^`5J>&p`|12n$y7l}wJ7*-yK8!cQ}%%atpF z#+c*r6e!_|bACnN$WX`8H+UK;YY0~^%)pV>^k(Kz8k6jTy1$-rZE&xT$n8?xMn7>I zYciKl#4U^z_#r65&6^mP|Sqe2YXA;#q=?2L?17ZTSy<0m3982Vrj9v zKOSZ*;w6VzH_AyoRWc8B27V(8^lHT|LqqpNLnF`1ATzjeRbLUW zSLVM74T)y@pq&jCW1=6?PcpaO`51eV+Lmu`LCR}?HEkQ6ob!N>Ub=XaevkHbY>xhy ziM>C#!R#KG5;S=(vp3o zH_hbCK;;FArX;Tz$S6MK74ZboZS5rTHOKTj^5>T04;D>P-(;^#Q;c=&Ncg6U@a+e_ z%vZNc|JWQ1~HlO%@6-Ro-651%4;02xDbukr(5;~4k?+a&Y*1NcHa$HA8v zvW zy#(TsqwjC<L7Cu3&KomNK zcTo!+ZbZMAd;BKNy3t--Y4i=vL1(IrY#pN3q-;@pdzkMWZ*6GZlcuZoB4VGW8OrB3nZeUX^U|6IP5W1hy=A@L>`&+(#MumYYw zvObUYYGCi})mP<}%cHfk0iHgX1*VPOnsNF16SCPDkEe*a_C;gJep`pq5o#+)7KHb@ z<0#%Us2}N$<7(uwNS`~7qjG~$9Lsx*1zVP66rGzjMq`m*1R2E_@3MP=tMs77dT?xM%Xu{)B# zSe@&2&rnkPe$fc+tG_5YjfYa~DJHNH{Tbf#?{clAvow+E<2J4}ZD(KY1vy_@TE;n(`DSm_3?HM3W$#%UG&w#;YjZl*o8^9Z`1 z(eayt;4B_5JJnG+asp)Umfuma?&zBbwO2PM7uiv4uZl;H_&K|4EVS?QXmpie1P+KB z4a?^FEVaMu7{7Ff*9U$&x*|Jh)n(DEtexZWcldl}_1G6VXCpf5^7jol1_3;L?1Ms= zNiLANbS$(tHZ`N-^hRL50re7lQDxOj>S`B{?KWM${RA*Iby&wa+ z`{%LsqS!lUa^AM~&$|YTan|Mlan{5Wn6J37eTaAr$!h5xg7y4-=eV`GBzgw+nf<}k zjss?9nH>e*%15~Fu`}H~kn1*+2eSE0D+&xxE$+{M#@SfF#5PSmyVPzxv)}XQ5o@h_ z&3g8iZohB3{cfUPlWS4pB1eI%F&|s&_8%El>^no>Df*^glm4&Y_Hj23^ZG}L!+iAP zRup)Atl0PYr!q(QK;x8RpDFw|ZeMTYZieSn(T`}XB?g}X-YqfNGZy5QBXjDUZu!0D z0&n5vbm|K#9%vPEL_9$pFk_!X8^_YG&rAmNh34Sl}hH8woF8|9mDV{YEl*m)V&UpPs<@O0+7uQS@6ETOXQI>}v&Mc4>h= zwLiAz#(zW$G3}8%PP|7F1Mc?Of=qW2A7g{{ud$EL_CZg6+_VyQGyYhek+BE|3GVH1kq z>-e5RrjYzBd15@gZPlJi>PKuIQkx-ajVSMfxT*c{ko;8mZ6)`_S4AU=6%>CjgO)<< z1M-Ci;GL0*_3w@P8L?`}#u4o3=#$}c&U%PkEWWeAt--B!uczG)n1lM_tQczh_SheA z?vCOPQYLkJqv&Jr9XUka=D|sp?C{b>KI#iS0GVt3dxv>O_fouD!8l&0?;7G$)vkP# zmw%VG=#RZ>oYs^7d+V^pdogeqo@5+4=LPyib|4>~+(>UeJc~ZK-uXtzASGvE{xar3 zoMQet#+hY2zW8VCSo$*B{U3Q^hFm*uO>_tH1-=|&xI(~6_C}MuAJyYf+yvM6F{h`r zAId%yV|^*-!5>KtDX)G`c8epM3i+V<9sVlnnx(eHVmr5tnU%h^#q8MH|wQqV$@+$wNkWY;=(oYrqEZmQ`Ce|`?UXaaJje4$l`w++cpu*!$*VQ#}N z6|)r|r+qI7TmokQDY7?F&&(2^(b`D*x~;5_ckz*`u6~4dRYyO^;=uq9!3?q<@LCTp z)&ifYAEQ1eFjk#b;p8hLaMF&yb>{Ou_T@a20`96~U4pylNbP(cxL-><|5rTkuaD<> zC7yE1RqOrYG3Wq(@x2L&^`R$(GhkPuu`+1kD@9++%fCG`aq1|q-f$$6bmO3OU(Yv0 z*t3eyJ;QUd>F=Pe@hki68DC%xum`8$`3+5#dF@X|3V9_V8E5NIT@s&aiulkt{6ESb z#50n0bWdjrHgivB7q)OO+Kw#5y%ze!UX|-)KQ|)8;zodd^mQj1!w*nXnRnxn%~yxC z@2}(;ljr604}UyqyLI|&JFQ^4i@kiKQ!Tj?8o)2I-Q6c?|LbS1vm1EFUpr{c;Tb=E zB7DD=_D9A29w_2>#wgYe_R{g}JB_h- zM$%(^k*mjYW@W^cUppQve9*CfSZjYeaZuP?!Vkx;L_Z-16&NU1EC@|!;y;1TB#(Dl zs>hBGXE*CJAE4bpBuR|a%WmA5nr=A({fSQ~E?hhcfBi(!d4-YA zInEK+zt|Aj>2Sctp#`)j-Iz5(t(A|~gYbLa&pjDF1D#KTR<$P7j(Bz;`IDg)@Xhf0 z4-cKjy+HDrA$R@4bA%69#~vxOC?}#HA2zm;rFE>Oxz4IOObU8RlD#3z{=>QtX3%rNgJLihpRTqh#ni`wTnt*8 zb=6v1G4@6*olix6;)E{mv+g!uca;BFndozINNsEQ2l`9`7#qD-h4B(_io0>jvYo?s ziG4Q)HdUc_5lgGz=oACO@5#(bG%dY;E@R7>`*RJA{`|v{{kh%%=bUGuHw&6Eml8vX z+z0I#kwNHvgX_!Go)92DMq^SeHU7uPwf1!WsKzV#Rb$l|08@HWs|8#W~6hSetaIx2jBR9 z#j75^l(?cOz6R)|oVnf6_%^U0MnADL6pZ$kH;Ol>fG4%^YNBhML1a?JF;toBob9zd z%U)N(_uKg%{>_p7 z%}39W^v*x{D>sM6%75+yWH4YQ8DYspa$OAe{m3oWs^w*eO6N|NeDCq%I~VcJyU-;% z*TMD#K0W%Bk6(Lae(=LXny=PcS%mR${?{GMqZ(c+7;(0PyDycQ>71VPXVdxG)A5Uf z`#0Hd^$hZp>py0FyD*e5{@e5=JCElBzC15GwkO|W+mQ{XpST&;UIH6uJxnP=P1z`R z82R3&o`n5Db^+QBUEZ4m&-Uue*`vTmbq<>YYfd(8=*n*zU0h!uy7PBO4z_-r^R$fq;pP0A49h( z`5DsKI9GMDU&znE816#fadmQdL`CF9hd3&mIJtwO8{xdFLAdkcklrP~N3jV%`Hfer zTJb+dEald!_NCDCS??{-ew-Q!RjjuVvGDi`9#15D?3(m?`}%de*mD*VV_<|6MVWRP z-?eYZJ~SQKx+ThbWKAh9;SA`0No2DV1gDFXCl+Om-h{t`KB`)=$*iWHHg#%5CuJ0K zD39D_eGuA{Q*A7*-RNP-%`R<(q3Qj~$vAmk&v1j=_q=?ZyfGiP1Z;x9nYuDuS8Z6q zH-!C9b1}FVk5lKCxv)p=UKY3VLEsjG2IrdVZDbDn2U9~Xebq4s@rG97#H;jfbRGS( z&v4B$Zx31KTFyD_bo|j!(GE6Gxn<$mvu-EW+LQ5PoHM7fHu0Odi5#%nt@w#K(Y3Gf zegD`|uMW@QnO8?WH>~q-T3F}J{15U!#JG;0WuW|h+8}4>U|elSvE{_QF>&q;w3>d1 zIo#zpuSSLjXJ!x2bUMf#2jk??{gD60VKZ+O|5OhoF=v;vjCijl3wAld*e#Z?J)L{> zR^+g>;DOE)t+bWT5HO$1mnYV8cAex@@~#+v(7;ZgBL2?6-p9TqUZ^-O#dHPCwC~t> zu1JEKoamYv=o=ewShf$zVnO!MrO&b-68ok7u%V8aF67Ih|iY$-O(AYO%M!y)uK*(zm^m#(r8-nfi7 z9o0&}4ra$9>yc;DIf7eUde{R!w3u(ZG*C`n88kjI9`$%^Wn%5d%2ayOH`%L#(8ps> z&@TMADs>(7H!r`5XFt!g8Yk;&OqenF(V4F1dbzpQezI2n=Z!g@TO5SPn!q&xO$M@j zEa1+ZWk1vV27K6L?y7ahJxKjlYG|SFaz8Nv{zi`8!!(TX&(Rz2eTUwnAlBL zRuF$leb1G9*xU9He~C@1nOd)>Sr=nxPv>Mqzw1TzD_=4f61?e0I<%WBN55ZX%uA`8 zxq!7I{n22&iCWVc$9WZ!85Gwx?JO^5xS8)J_a)=aYz-c205;nD$}{kC)-v#YXfktB z9nX5+%|7JXsP-!VRP{D|(I*e+9m&!1QOP!{=j*u^KvvW{#7yn4i6DnW*V(E&6gJi& zpAn}KS!$K~R@^~nZI>n9B77)zu^ivJ&rCn`3Rdu#?9@vO8Q{&=Cn-3ft^WoOx z!FQlN_b%je?Yo27u3RT{U%|PhRruO;8s8t$9pq1Dd`G@U>?^Uy zW|-PCjMFIV%K3B_H~G^>+!{BsW)MRNhrn6YOCG<|9{3&3MEQe!ZuXg@{lhn0d+RFf zt=I=;Z=EiCD?Z%DYOnt($R5&H{O~gM<@W2NP8xfW4|piATm5{Ee%P<_MjHC#_gDFi zK9!fwq2GVY?+Mg_3`B`Zy>Zi!k%V5csrlnpfO-UBJ+qEy;E&LBI(NO^XC3ML8uvS~ zoyGs1#sBJ4_eb*%ayhm$Vjtr0#<;bQIs*IuVBRC)u6YaYC#us_ocCS896P(640XA% zcJtSApfhBm7wvMQox7YEbfY~SdkOvza+ECao@Nh^ zKh1uT&dsL((Tqj=rjgq2RHXat8z$iAWUr8)v-ZH*mcJbt%YxU#KZ0rMcO4U_uX?=| z7Wv)S>?9+stY;q~$5Q*q6!wt@_?tmpxhj6EzNz-3Q!FdL>{zsYl4=mHycs%Ja3*m6|CHTr=d6=Re~2A`hm^p0{|{@MkVNTo4?6v2?z>F-bn&KF&XVYuLAV-|&6PyKCFQ`IbHQ zG;B5ax@__Gd&nu9+HrDW8fV*;FFvPm-(@!y$myQg%2~QyZW}3b(l~FI+&y2%rr`kX z`=d+k>5DlFk1+&hc3RhT9CptL{Y=|oa{Hd*InMay+`Q>+mvFYE&X_!0(EB=5Gr)cM zOiE`b{Qh!X;{# zesn)fPIQZ|)8}6l{|DQi7?w?}g=ap;wdt2#QusXIb-$1A#$~+2xTY;GFMN*c&+y;3 zxO4a?yyJS*o&Yw{|smbKZ9~UT_05$@;m2s%}rnn z$gsc0(z#T~u&y|**LL$L6VSD_+4-}*J+||yq`hf$(suLxunCwMowJT@pgn2Tqc5&t zeZl*w-#uun-b1@ZP5&?S*z!BfqWFDoni?7OvFLX@ zoDlHVo*#pL{MH&^b|*H%zbz!8`z$%BzESKm;MpJP<=(Bs_i(S5&%Jz!T zLyA#|iGHhCThJYK#3stVBE8G)>u`#E67LMc6|8aDZ;g)EhVLJk?&dWmf49jge}VX; z_xs^LgPgy&gPhlQh9@yz<=06@tg7p@$|rFjJfy;*!u=iBxMP^sF#)>nVcp#6=6@P( zFAq=asDQqESQpzl+m|y8Sr`7c?R@qPS784srzU{LKX>3<*6#$?P1kTh_ZYjuv%04? z0$f*IH)n25l)uK;g5L$5dlK+9vAtn?2q)q7xaAHCpDr$;zYqILaiPgQ@BjNuLw0P* zreS;{4`5@KeQoP4NxQ;G=e9u?bC3h1`>>|R1&s8VakLv~>?ThI-Z-nrO4fE-58ww^ z4Ea`K_Nf8NIA0mA$FCA``Nk{5KF+Tl!*|U=>)nSuD4V+Y1UB3Oozbd3#6!e8_a5}C zzdZfr?(|n%>d!DYSYJO|dLH{Z^H$&Lx2v|t8rg3J{pyTFA7fCzzCY40cAf$0>5_vQ zsV~r+L3cgZ)2E-~Z1-vOCEah+r~qf5GFR-1yxNI!82FpQ&wZ@Z-Ue?B@!hkNCx?8*m{+6cizblcC(0iv zdKEoM{w_Duxgq9^(#Dx5=qmK@pV4LG?{?;wM%IIAm{^vu(Fq)p15OCXkH$O_jup{$?$~sWb)NAyr#_7okGg4nD+`Uq66yT>XVbYD{a>+yy${^Xe~{xNz2qqj&T?HVLPU=gBc}R%VbbpBS)oy@l&1aeaa1`4V+)3D>l*E{UlQ z5o^fjJ-dkO<9Jr}mgIYM$IJ5xu2*tB!C0!Y1J+H9UG1!*FU2fq9szv*gFLqq{Y7J1 z9b=s6f359a?zA6XIf?g;c6=l}7o%Uvwb7{Oy9luUlUz6CSC8CaEij3tWLzx~t#Rxg z5%xNh99G8ciwszPbHJKJ+rij?wKEl<*J9Npt>c|>Pu^c1s3(mT)>wfO*-V&~r-WSev ze-YOL#rt};bbof%yPx2G)d|{PX?geCxqqVm#S@P0e-+nC?XNEOpXAz!`fts8@Aq*3 zME&<$-hItW{SWfo$nnoHgjd<L0md45^>zvTy5z`cK5^WmWu%j3O?fLp-m$%-BPxXzj_SpNc zM}GOAeRcvrWCMGX_MUC2_4Yq(pFI2z1C!BBepQ$!`ehy!jHi;ZeUUSdO5e2}zcAvr zpWj#V`>eK|!(|=U78(}6Jv?La&f#dsPUP;-P;=>-LOK6c+e!7BjDgk9pFtOVx-gw~d~Hv&_MRS|!F#c` zQhR;0*Ed>nQ3LH5i+?=qTYMYqQ*G}YUehtBpt0RedrvctGX9Has0Qr4ZGFhgYFG7X zo&ml;cJ)!C<2F~ve6LtziuJtP*YT6$y{&(651Hw4<}}QlfL$N|`LLI&&QS$04z2IE z!_+?5O`Jk}TFBkAd}b_P@u_g$Pn@#3XR@=g%x``3vR&|-%|qX~4E+!~(m6Au7k{U) zd+|?)6X^TSS;RjS_fg5Xk`F4{zEd!O12WdZ$;Li(lUIi863Cj+g=~V#Gf~d)_Ksbn z4c}k{9sRUtigUWRWBH3c9n0S->$v2_P{$?jv=*T^U$s3K1;Hf{jkc-U+t9&fos! zDc0>@In$L{e*`@&X3o#kM@e?oID-5RE}l0WSUh%kYDXRRpt0C><_#M&(0^vYPZ+!U zkzNq$Xf3Si2o~?%YT2zCktPP7lk_34hK7)8?K;T&J%vTL}$uz zHjM12*z+hMhmd>wsTXc0u2Xgk*-UE8kNmqgkpCq4CEg27C1ZKXvfAIj{QYo#TUCW6 zACl;Q{Mqo;Oe~KrEjRwWe%s-^=!9rG>&cSW{d@zlU){ER8J>v3CZ%2^ekT_eTL+}8UvmWUn)D>Tjze(eCi?UUKpE)WCN27zYzU0 z$-Xe{^iJT13}&ED0Y{zJ5C=BIY~&OZlZotOzWbQ#DPb4l*Kju(fi^SM_x{2($sI@Q5ok#}lbk_FD9 zzctx4mgq=1u0CL@`bt$#Zm_DLmjpPELlcVgl$}`i1ab|-%DeHws~*n0lFL}Hujd}lyiR=nyc{sR2iUr>RDB(P^agnFpf&!yZf|X1XOKKjp7X?p2sXDYG9q~M z88=w2-V6UrL|*2Z%k$W>Cu&^6mvlza9B`hfwdd#gmZ)^Sq&3Q1%Dd!}v*tg>TJp1A zWG{tgbT<7#@vA8NoXI?-&qjGpG}(~CZ_1iftfF+SP>MKyo>vWsXo6S@6B#wW)49!8 zYbClrJY-51!N0f!dy8Rib9Vks$d&tj?XkS}m)rb)s~XsdUzE2~|9kQZ7bmkLtbap$ z0w3B_ouSVGH|<4+LHv|?r87GH276)>_;=ZY@dM2R_~VyaTDPj3r#>9SN7x(8v>|1AIFD|o?>5X*mN$lEMpQ3pK zdwLb`cQ+1Ni?P8xPk-Hw@MZo>caiN|b~~5m!SAuQZ`s1Cp%vLB6$e^oUSrLU?sPU9 zhFj-vh+0k|%hUfwb6QLHbv#`t@rw|6dmDa%9VRze;uqjYv1HGKi%GN<1y|Y!L<{n# ze}n6yW!b1ztEg!v{zC8-&Ggx30^W%q+Vvgsy>I)jVewzBjfSk&{=D4hea7}VDfB^p z2cw*q2Ys#D{?pMRtv8G7%tPlz25|oQ(B)I%%0g9XJtI$ueorEXaO|Do{EF}H8uq7R zu8gf%H~Gh}-Mwr0+TA}LzIN}f;b?|t^3!lvA4CoKHN9ZTj@wu@E_05J*mAkf^1~1v?@Ekh>nvf zRAoES_m$&@58(;+I}=+b^eCI<+aK$)wdW0DAD8`pTiYwh^`9&d_d9Wb-;<)7iS3}h zM$Sjb)V~uwtj6K)_N5SSSgSn%6 z6tox1f17*_#U5;(+-b)n@Uk@i2mEIXpC7Oj>>0cN1z(ipGWK=x@?drcdPh0{4;&Xr zY#(Y#amE(!sqSTGCq8`EkofLt)Y;BG-($b?UCum4=bOwKMOv5A{VMNL3_N=*d_Txu z9!gM4k6LBY;Q}$%ZJe4|@KM=PvQ|1jAnUmhTg7;LjS++AhhrRmoO8O3EH8%D~#-R1u zOuHq2jpT(E#vMwfbDMkttAaR~D&8;S9qAVA`T2#=p?qVm?}GpL;j2=;oe6w`QQC}4 zu9%nmGBiDb?~3O(Vy`*!sVNT47kLdEC$VXaZ7Tb|d_uu^pCx;fVf0$^Y5F4TEa??l z=u5I$gtj%ujUhiWD&L7m)qbUUNgo&!-eA}9--Fo(>lEf*&wGN~xNxT(?{lA4cQdPO(-*! zYr)=YbfGJy^WvL93t!L0GpsOt?AQN`^S!9o=ZnUfTbJDeo%+pXmY4hSK|wrHG};NQ zyA!TmYg{0k9y5LM({3(^YJ;OAxo4o1G5+r=9splncVqAWk*stte$}d4_zNSO7Gu})(zp15`^=9RppWNka zLjIhMEL5MtevfTNGSCX@4<_TR3Hn@+5zMj6#F255&{7ineoA%4$r%E#i-5E6x6+gh z$+=|6I8h6k*$|I>2l`L4cAGr+zDGw`OSP;!aEU&`rK6u76iG(>tjt8s)6Uo{N%Xv3FU4nXIV@{X<_GXCMO{ z&2{eHJ_ek88b4AD81*nNe=YIQzD{>9l^;*>BYp$_jQmIV?)%uE@CWZM`Nw71kqKS_#Gf_wI_`o2pPWm)J}U5*D}ntmH9N8 zj3d&+{+G_Ta=kj8&IxXQU?BO@xTn_m{oS?3%5<&K%Krm@Uu)>^CF{*x>R_ngEat3Y z_QBWB*pD9rouD|^jX}Q^nNe1_hd7s~kx>oyLfN?$PcXfsjCg@=*LU8adBs|7H@}4Y zvbXkLpU&OONAibk1EK|F(6F1EWO3%2wca^{{ii?5oJ?|`?4+grZydU}$$F{It+D** zE~0DI!IrL4&6>(up94qxj^e043at38arf5tTPL+`9PVYj5&ml)8msWuOAL?3UmEi( zj7j>JaMqL7`g;kRJg^7;dQZH{M=WSJGC{!f+lt{8{}bPmohZw=#J}Wgo&%pt@NO1; z##>jcCFUTTkSYFV?Q}L^Z|LWD^%-j{@z!eQY}9sHIOT``*mCk%-Uf2^J}cmG2Q6xqLmHAJ$O1IG+~Sp_5zt9Sho#&9LnI@Gf$KG?qKCPsrY<{aUug(tYjOcT}5JBkgO? z4I2BMvSHcnp$XnqyON_M2bJcccQl_nqo#FdW34rXclG=$)YerVgm{!<#mbcPf;?6_ z-@3wtj{qB;A6!=S>nIlQDy{kL|5&K_2KKsiEHAk%elmMFxK+KCAn#R0(AftbDpW)m zqbd5h9KQp8bT?*ao^1TP6|?m{boCYH?Z9?^{?dWNrz_s@4BD^aJztXfFppaUqpUAs{8;WcudJjKDxIYeV64?3XV*^`EeFfsnLh&AJt{cbq+OY6=A2CYO z#}+XEW80DL9yHb*V1FLac$C{F`MrX@korzDZepD3OZGc=Z0(GVdEM%-Kn~J4=H*Y~ zUO9Pw?l>;*w-%y{Pb-c?@mtF~Ruwc3`E+M7hA=ursbBV-0rjCi74rgoW@zpU?^tV3 z#TOvCCI~Iy&pB8RzBHDd=)uPJ-xR)Q-s-GyuMx-C@vB0`_J{FzeW$Q|d#3ujfebL6 zpI7{5)o$>ScHx@)5_x|Q5O<<|(O>J0pPeB*fX`hvivT$YyT8!w>iehPfLw~4SeEFq z1k=l0nBwnZtka7yJ@P;CL%MUk8QrcPAE*cG-*Wv+W9%u!6fqYrQL6~Rvx$yUN1@czI72BD|`f%QthLwr| z5f`$9-yROQb9sPyNYUL-f?q5^XO+R!po0}^BCf~=AdiOat&Q&s5I`1 z6O3CiV>cDYtuepFn4{oo0{MhmTW&rXc+lE1Vw_FN_*za6=liGZa{R2Bu^YnqM}sfr zBuDuy?B2{vwuJ}2DxHhixnz%Z;ioRP*L)4X5B7#fjUVMI;;LIoE=zja6UuahuTv+l3V?Zu`J8n zfOi#nqYvujAtqhyga(+Kn80zqBE2d!X(?SLT?$RCgnj_+idRZbN0XX9%8j z&;VXv9u53}mEVZvtIi7N$3jy9!5En8EGpr2A@N-`(8M><&-Ls>Mo-SizU7bf3=Nt+ z*2C23dBp6=y-J%k->v1;_#;PBGdy@Iu0ArctRVXJL2pI^T*k2PxAVR2H-)DM9xFu7 zW1k1seQnqg+ny;zCZ5c?Il1tyzx$Bd84L3NBYNb=zSx{sw4Q+Ve!kmAl3ckoI_E$= zJb6N)30i269(gwqzs7njPQEE?-=M!Rac#1>NzW~BUuHep&OO1B*mcEB|Jh~K4>x-3 zi{B3%it;}a`~G`Fi$d({hOzAv6?v0+N(P9LlQM^o5wVzea%k?Efqd%1iu|}yKP6t5 zSViFCu&0mxQ9560w}Q3m&nAZy?-1a>)|mP-M*V2`6UF|@1V^q{fMfOje6eqG1urbc zUnkb=auQp1InA_Jk-WuP6xu}&^)1!{hyT2PGw*M|Kt4UrxcIYv=T|RYO5Xi?=XV!e zYF`#K@>P}nPGuGM)9g7J?3I?z!f3G-FIJI7-pu0bOrygCBjwzNfm@LO6Sy{sPZhF7 zgpcB&o0t_UG)X1G}&_eA@Oi?xr*Qo#{Wi)NZDI^}UHcN-&dLUK+pVQX0SJa_k&_vC->G zeOyR8Q)v5Z7i_RwXm<{Cn2K+>viVZmXF+3G_%F3+&Y<5Cj84?%TeK-(?&MEhYA?xq z_&MOhQ>)=2^dXoHR`xs7z=!5h0X=E#M`86J%wv`M zfS%^jN9YBQre6HS2K#o#yP38%4?lAC4!#Rk!nNS^S9k0hzUqNp!|F%$uD%Su2l*%$ zbtJsLNFNb$KAxd&o9u0CM&(Kl)Wj3-dv~?Ymh2nS_Y3$QBafVV5JRfjrr0Xu zf$tP#_lV(_GGgicr=Q<7T)qUG!~k(k+yAMc^Re8vd46D2dtn{z5Av~!?Y~HylDF#F z6V-=-Z>WxICcIhKE4l9DS_NZ6j+yu@xklQr1Ccbc1io4mzhM-fZ@^c8yX(J4Z&Qp| z@P|5!rrY)5ZZ@zJMOE*D|M0T17Z@XUcK`E9TX9c@a)ctp+nVW|Vxg1|VLY95)Q<6N z(&;w3&|AHB16g!5+6@us$lf@y8U9*|Et_!GoCUwDt&EAsi_d!hlNT;|ai-DmkG00^ z!c3#0dY17*!z`nsWtQ>ib&bYNe3m>nlLRL-uRTrjqxKicS#<_7Z~|Ea{y7<&VhB9H z@m0xuItOBYp1r0*GO_aFBr8@$JXutA3L@x*$_p%KU;CrA@rrc{B(o?F&ZJI(@&SF+ z@ictc0=ZU8zF>r$z{!!P9q9<_TkXezAn}IW(UyA=^aGBY!AKEOQD!Nd|czd`FVd zZHmux)a$L>UZpQWy^ zdA$|kTFs}ipFX)Z7m0N`cT|kBQjb%s4w)1`8e{Av{-@I!%{jZmmGq%WSR;L`jbvO9=niyO9^Zm!1c$}NR+SZW57;uJ6~szXO{Bp^>%aVtmEh{)+-<-~HZs}Rt^86w1{<`+3CzACji)5W6xYeE^H_5LKBxVK4?PpBD%Pv%A*<4 z#&XdOa}aHaPCU98g!e+*(8XbNuqOJbqmS9(xWB!hT3MdWL^=26UqNT<=(EfI4toM; z)XNrJlYnm1OKpuubX%Fa)|#}GwY*pPxzKFoM>HFu?yTrmaodpuwCj%XE#fLXn*B(h zPYqQ7)6@+10`orSGR7siNq3L1{uHAq_?d}i@Gam696esS`M}cqsdaJxUboi8j5=yR z=`0_e%K#mvu^*RR&Bt70{W`Vf==#G}x?41AFb}o+;K$QBGt*`#gI#Xi-QXVmUWN@t z{Fpvg&qVB_2!21XNrnLB=HO|d@B)4cX| zwt6Jom2>+^Y(8*pJ!cq@|9fpK`M<54VZdC@E%u`rrRW{U_oMj55}is`6RpnY+5=10 z*j3;)20sYZ-aaJ$_ZQeb#QWH@^1}B~{wKU9kHzZ>tEP*%@5_$I>!eTj39|fF*U(w`~=#KJzkL0qq>!B2mKsZO7yPkMZBsNBkEa_y_pETli15!870+NouF4ZRpMNOg-%NglfB8w9>gkWZYJlyey+!;dZ#%G}zTUiT#a_kZDxKIO&<@1Z1n9=MmUO0?*% z>GorBzuc<%@*l^&@>yKm!*~88+-ptC{+J+F@qrJI99`39jM%}12a^!^H`|xlp$vFt z&vIiF$rlKUe}n%&8Rx1|uRZsxUfxhS`^9fY;NpiT!g;%gbDeQ|9L`sPbLuiIWzA35 znjeAlKZXmfu?LDcS6p~$%}0gv=_kN>`)vo7*HhP@HLtq1WX(x(q;KEkw6d?yO=0`TX0NqcZ)|jY z$a-JdvhDa&w9Rt?>R*@SKYVZp8)$n%M)o)4*i5nQEOS%424mrW4{h&x zW~Nc~GGm}$KF{h7w$a%APS)mj!!Mhw<;(%U1o=0y+g+KX*F z(7KKDpte1iZ)H86IfwJ00?Axc5!WI7JL#{ba}RzVxf_0-G(284nC(LjW`E3f!f!lT z7@P3K3V2mbQsY>ZKdm?p_3z4f8bjhlW4P@=>-~&@Jw{`gaoiXd{ikC%E%u}%8>l-5 zc;(@8udYc+9*-iA%MVy@rpDK~^6NZg@cH9TL5BTalP6jZx9&vO1O{6MzGg~;Ht2_@kLB_80?gkx1-dNB4ZrWOI4Gndx%(e2?cZv&HA@livE5Toz1jJ&q46HdDM<{AD&WP4fc- zR`@Pt&1A3j?`|Kj=N=Uw<~hk?HOS72+t=L8H2+`qEV&9(3i$m`9hAg|tpw`H?l^o)NnUKDFqFE}xoOl1(o0#!BsI z7f15(-F+78ESR0%C0r#A2Pfi49(1VK?=tFB|;rTuG8hH0w@TORA zUpqPjW3Er&Po$Q8;BsR+^t3;bkpB0U=uZ*C-k#s3NSaj&x8?yH} zn5PGXFU_|;0gYq#5Z)?c*kPFa2Jq?1i0C06AHN=W6RRRw0XbCrMFnsW{kU|K*mj)! zRzdqG7wP6)=q5-%&G!zt@}NsUW{G}YL5G=_Czi?8Y4lua?~wmgXT~aqy9v2*((_%e zo})e`PX$lVulhWfQxRs`ASBes@)MchTK6#l=XF$Zo_)w4()LLK32dl7u8A zmV%KaOj0U|=rEb`auNqk+nF!Yaw7#_PnCGg_2MneZx!GB(JSCh$cl^Qr;aAJzU;QP%rK$gZ#8f^lzC|L48Gt2WXG8`mZ0k z6nnoVXnGdD$ZwO|UK~R|^;z|`0K1WX=sWC-^8#aL#lFlU=88?CxqeV{okL&$qr4Ht3I+ z`6nCN$~pNu=v?EN^mXh`V5M=_r(1$EehSSEZqH?GnHBqvIg5?4edH_c{>iyiSQFIB zum>fx)Kk4d_8=6rHdPlnzG_vg-4HJHbF}SDYp^+Dx~dbcp7M;fkLNVx{&I3i6Y!f@ zc584dcrZix1ITkLkt$f(-9@dJWK5OQ>Q!*Y<~*fKmdUOJo|)T9e97FtFS7=CqGt%6 zAFANa=gPSAkZR~%;x{o)ty@>N!_&GcUKh`3yiRz&iE!#W+1K_9pJrV9RCu0tJhKws zB6^-zID;{2e8gXXr#Yy5)tPV5)@?zxVV?@;>|IjlD*kjbrBIYH0dw7ng&0b%-@3Q=OaOj-R z6GJrY-vPgbqk`Xze*mYzf#I%dui%GboPvY&Mw7u;C7pz^2oCC7{c0SxlPT$pxjXhP zUPB!%)^hO<)^Z2+80mY)Y}S&#?}NtFW*g@T(>JzKOVExFSN-36VX5!x)Xt)OJ=Mf% zm6xY+D3^;ft9|%E7dVIyg}qaZ>-(1JvQn*{a*i+gJhf`@pDw?!E&nO_TO_@^_-U@k z;Ay%Z^1Jl*VkEV_DE(}V-5RK-<%95-|D(Jm0sMg7Q9hO_uU$@j6j~U{N5#iW7k1vb7>toUxYnB`AH8+-dt3WTy46rt)z2oh1ba*sleZqb%HEB zAk%xS4A+@`*cB%yK9!#Y516r(H9?MB4tY1(vRuBAy((WvE|Xsrr@h$B_E27`kBY7( z`B&1n(CLutG51Mgc4p`G7aWJ~z`6f!IWt(swBsi;4zb@1`6=%qXDnxt7sl3dt)A^> z^3_h+Pnfu4-(^G3+C=V5kq#lb1085h+c^I%ly%^Rg7xd>VO!oouC`3+Iy%i=X0pEd6ru8PN>)L^rZ6V$jO^ zlxx*X{^XE7@M3JTTFZ;E zJQXdNlvk)vuf%R_4Qtgl&xySg6&*)m}^XLZi1k1Cn)IyIq70eK=O=i7f#jmu8vG;cok(E+CS89KwHZ~1TDg3ZpBJ)+jV(n5)#KMQ z+A}|U$TOcVKl7ma3 zxADM}_>ybPngel1XXky1x@)Q_)^(towU61OgUiR_!=P@ee65X>@U>#+4g(ME#5eOb z7H1J8Tk}J8l4N6xpQx5C{^|UfOgFKIZsb5W`V_JBB;QH#Rn_Ed3+j`rt6DiD&m`Nb zZ2aW1tt;2;WP6qJ=Bhp|GbA_fzZF>J@J%|Men-~z-*SklUW0t1#`~MdDdIKvL3CR*Cj4XL zDz*E_736=;xwMz&Yly)wvhWqzE#40r#mg`DtC1g-v#|~BynM>t!6L>keA&T%Dn0)N zYOlx2IfHK^0~fP?N5F}g(b&FHAU}R|tP$HJahYe>UuUt;u6bk&_{N@S&ca;m(ZO_FtoBXYP|#;qM!% zo6=9hy4v|J|IeC1t|ISpZJfs*C;3OecrJcAaHbw#=ab+rwX3|EgzG=wyVC#Zb;{e` z6ATC5hI4S5dfS5ORpw6i>lSY5b**W=ZB7i^H_4OiWxvBW ziSMemkoL0bEW5v9Zr75FIQU%0`>$RU=20Hzo&zilG%Nr2f@-sO^pAQ%{?!Do$CI2@ zP$)5J-{H*=c{hH@`)=IwlK3nyG=hJtKx5@a*$J{8H^JCyJoVu~~OZFW84D(8` zHWzf=eK^d8Vhtwu_Jncl$~?8tRCB$utFPfN7{^DLZzs9pgXer2HEWbR+Q)sJ@sJcP z_euY}CBG~SFG{-prOfRQ=Z+{0oOfYibc6DbFD2(|UGO_{bw%Hi#AnHo#qNK&*?WU} zAov`4hB|GwyS|RKL^m6EQ{PYb%O*S+GdmaKKU4d{vkI)*=)Z6K9{)}H8QtHLS6|vI z@HiUP*HL(pE4CGQZXb?Lv?*o|zTI-hH$HR1znpjBtFz9V*V|~4@aM67 z+ZzT3-uU6bz@vj;eLt|?l>2QM3(=la(ZwdSHH39M(cy_^)9|qdaPW1`QWJmrAatWR zyK1D4{E0&@5_tgNiPkf2%kSa(_h0+=p$`66y~{}Ami#^Z)|nX%i9JD#9H@wcj`3aP zU|;4%vgjO1YGc}M#RPnznZ2V|jcCcY^8P)*vxdCmmAoG(Z~9(hPM4g4T}{mC!|Z8! zB)Q6OvD>^y$t9kZY=f6w;c;eN$oEp<(j@4|1}DbzU1L@iuO(+GV$)y33VH3OWEZt1IS5550%;orzI{*BD;3080p zOJd0|YHhunzJ7k^=KfubUAWd+J~#EWtFH=i?F80Z@Qi~CszW2aUh|3qhxiA`vDR4e zOKH5-_;NwH)11pxt9)#9r10H@fuB0a@eDrMKILNF;x%PdR>f3YZzyrnrO8q>#$F$Bmbjvp8KXG^=y(mJ#xlRPh`l65|{Cu<9PmP2B@6Z5&lzC&hL)C7)++!t!t({)o+W$pg#tKcJ?R;tTMm!guV~ z_G_QE_8jY6tYLl76LZxbZOeQnuRWu}QRy~ahJC&{?WbbTLNe>u*vK2kZn594K5@B6 zo{MtqyN0n3LHnN`pnjKd;8g1WoXY;JsQHH1<+^@uM2<240>1oQP;FmM3@YPQ+gpPz z;o78Gt6N4z)9y&&BXON7>95NB(Ad)6su#qozZEsLmAP~QN5SC*WL|}SXZ=;9xoJtG zslTbwWcfeNr)kx|Kzaozy= zMmlexN#_kLL0>^Pnc!ZKw{l(i`_Dr@Bo^d5Isd35>-rneU!n&6&w(C2bUgHyx02)r z<#-M~Ce&fzWwwpon7nJ>F=w!2H=Z4F$cg-1KISy%o4&_;$@zJ6ZHHe!5&ey`Q6jWe zZ+3(-=dCQdQ8W7->Dx5YK641i@0IiII)~(9DBq{S@y938KRoIjEayG@YkAYs>DP}c zwXd-br~R0(w!jastcP*_)SL7dwx8A6*_?md34HM52tJbqA5KG`QbYUp1^KAc5}u)M z67$3J)0g{hc(zNFu{O}Y;L$*nxrPh>g%jPG^$A4r^^r*>Pu zhBhTPZO-P7F@Iw*R$yQ(+M@lVV?AD5zvZ|BG`1T$SiAG#uU{*4CC6`zjRQ={z4rTeb!3+d05-JxsiRr=$_S?jQ2tE5~QEL z1@F>(W+b{iv=qXVcwWrz-FNxWoDa@8np%!cHWK$Emn&cY1ZRM77DZjgExc)<1z-@H z!ukN;*WNCUN9Cz+)7zG>(mmEwc_h-4YW}sPPbjAI2i9`) z(yGFmhvEgxK|TYERTJWc$3Ixbn6xj9{b7=4HhM#jJ!0Of;seCL<3)g$Af*p)q^;$IM$8(%tb|U_LJ9ES3F2ad=u^4E2D*4NtNNPC!#qyj z2f08~$rTQB2N;KC|AO^s&TC8-wuW@RZo9=79*fUwJa5@0d{$iNzcg>={3tjP;xPPc z{jGvA`@*wrMfNcIn!n~PSXAIJsXYH*^Pc9fccl|W2gAV(frASiW)6bG@%)SzwE0tZ zmf)Z`hF;rUqWR7U!Bdx8dmT7{9+;cWHqFRO2k-X#XXi`WmvW!c)Bxo>X}1 ziTErsY9m}`jJiHbj@G}jL1IvC$gGjLCo;cg_4RvgQ- zTRZ)!#8`yyk!)*z@(9+{zBFHNIpID7K3w=?QGwm(CVLrfJ;LSu_vH*i!o%KmPWi zP-i(! z-gl;VGHst5wmmZ+@mlh>V3YV-2ph8=U7E2+X@5kntYc_@>LHCoA~WZ>7y<_FbOE z+-Ps4y(8!aHpj#JI^jL`?xpXA_t~L%e`QGHKc}9>ABJCASOYJdh^!P%_wxVb4^If> zm#O$P<;T2@{be(_F2AF$>sk-j46-bSPWWTBg+I>xaiF$ydP(l8J?%fsesaQ5U*K$b z;vado(zg7i-L$Lr{)+Zgm(@ysHlNnMXKYH@>Dp7SdR$gwS5Y>*a;%BVkyD8*PrA+M zpj{SrJKuLkko(kND711-a(L8{fkUbt@+LY=$m8K%;sM$#&3P-ucE<89pM%*GB&a2M zJb%NZ-#Wg(;a|BPFWc2stOGE?ztvVO{BhvUg=fASW+~>Vn1EtOfrMXUy`aMtJTy-WiU+M|$P7-c?oja;yIS4+FLQA80*V z?UMYH&HcK4hfjSw4yl33v%q4x1L=BNAXa~b?C8E^DYdh$=_gsTgD`0V!QLt2&HnOeE;n0y)djq;o)V9Paq5q*!m%@M?v zY;^V*yxByc`&>yzNyds7zX2V!%|sXHIcg>Cm3)b?PyV>NohKQCZg)JJr@;wjjQtw% z7_@t1w|%gHx_qI1fPES2ds*2BmlnSCCvstc*Whtze^6+{gI_hm_0-yZ$K>gw zZ%m6j;X1e%g2$B`h=^eejhQCtG2r58^R^@2fbay-4jLN5@VYE3w= zQFR{b$qhC!)`xZm)9Cy054=IG7U_)@J}4RV(h_RB68n9bdxK@&^ISid>+iygOmqC6e~DTD9QQp zY0?rF%zEOrrJ9PANYqh_Bo;l;Va%wo3n~#NWL`+tL$H9`su@eIYWw^1SYUe$ejAy$$7%6qY}5Z{{fr;7erqpJZS5;oOjGSI>%DE3Z2>BKy{JE^pZ20?#L$` z&I$*n8g~^io6i}h(sdr^+oYiXKIAFw%zj<%qzfOH{YX74L!GHeg3q*8WYJ53H68tU z#!AKO#x-SDkx#+?{mhrhYcQX)+?IR{+UcUcP}JSY91MB#tME_V5w3Zh^9)*SYMeTq zUhhY2Px-xj{#^BJzODN6<6eTNX)i2wCIgKz*8AD~)7*!j9n>CO^n=>P&Je-3T;$F$4Y7zbzn zO`~~fL!;6DB;}%w1+Icu5*$}voyNc(0P^z9#u&JWFTtxzU*@rvh2~U?w>#JCSM)*c z|LNY&8vkN(ep9Z^C*C&hRbr*&8u$m4o8p#q%rUfQ*}IF;WQ%8Y>ue0#1-32lqk8%@ zy)OkFX~{g~S(dmEao4((`|z-oyI%DaV({~SPOk8)(#_hZyixI?F^nyeSy8O9p+9iU zGSt6@|3|=~*Uc{SGUNl%`6}*uaOq*yxZ0jfc>}H; zt`U0yYDDwMt_I#4+}|7KWuBc|(0)2St2Xqk+S49_sQIS%sM+D`UDZC(9^LnmYw*54 z_a2=^F&+F+PJRnCqq)UgHHnN>w6GZU`RLz4XsSyxm@0NTD)z~uZvDzz|sn34X6HYA! zN1CXm)&Z@?d&$MjIbOmou(Spr~v@VRLqmOk#7gFEy>s!v1dDF|fz+c8>Ip@q> zQPlXfe=C+=8`Lqbrw#ZDpRLQN20t>i&tW{|bFeo7yEvr#nuNx7Q6XK0&XHQX)q!sf zT^WL)6jDPbNK z^=byudu2_*^Pg#5t9#w&w2s2h3a(!OpB)XJfD1=)qYB)(fwphro&#PuWxU|pLGY$P zJN^{@ue5K{?r!Mzxo@Wjem08h!X35yI54e2Z%&HF_y!mD<{WSdxi*FQpU(9iIqFH+ zmq9x(2Z~>_miJKWVtpj-uAhjG_7t#-*n5iHD@5({TVnS4w~6LjE|7j=YM-W$>r(^! zL!NJUczx!1U;4E4GSSHPdJA&MC(ao+ zsTIX}To;eEo+dXI9vVwLUyLN5E-Dw(f+nJN4xY<+!BuqCErQ)t<|?^79=RkLH+9N3 zat%s6{EcGLOk(2m>d!WF_>AQvJ}%j)S_oqj@CbPGh~YOCW`MJ^z>i3x=QpVge1+@S zGK7{)Z%O7^j}tF&cQcNzd@XxlyIkzfzGa^F>mEt&^}P{RK{CgfR3Szm#`#}C zc)p~K&6-^7Z9i{2xIN#GIFet~hlhsh!Dse?hw@MK8BddY27GE#&FuAowsOth>xs1? z4ax_u?3H~M z>V>{^O6fK0FC-5l)f4>sPXmV%+ZF2#V`Ri+i7E5!^(pWHxJ~?CPkxNNn(qX^C-FUo@5y|R<@?092M#5@yP+NALGJcYhZByfj|O6t^%w9S_1Wrs zdxDz>1`cf@zfyIT_614vXu_B=?2&{X{3GVWzmdLLpF@95_XhD4A9$;s!PjF}9qSjr zxV^MbP&FCA{dlT1I41=hY|hiVh+KQdGkzqtQJVdab}M>qYjC8Dmxey^>k(s@{ZYcJ zrbG+ppO$p!MO7yJvly4~K`@Wmt^1Ty8?&3C6?pA8pc}4PX=EGU)fwnT&-^3MF6)3;4-Z0M`xrCbQe;{^fQwQTaHyUKr#eU-rj4$5dCq$FjpY`}76WE{7{%F;^ zQmv~#`w1U-lO{E{P^~_a_yFv+$K(%BjXM6WDf^05$tR%Sx#)dfEAMquQ?+1a;iC@l z%C-k%_>6bjrN?$jzm5Ut9@aI&|C`Jc$a&Ylh2Ppc5;ISTm+36;aS`~D*4@yKp4sF) z;p?66m7k55pN$zW%5!nqH+t^d+^^&Rdea{0_qF`Cl1{#rwYiSEm0PAh0WQxiu;-&I zTJA%(qn^EzXHS)%H|vJ{RCUDafwf=})(>M1Lb!YQr4&2r9FivkOu~3SKC>!xOYH*} zj=G1t{V{f1;6#AA2h4$c9Jq&VIpAw<#lFQu^Fkuzg&bJ!pQJd;xzH!iFZX3Hwd5V^ zopv;DwXN}gv<#bSU=v{;4*bwEi2~@!cUtRNtLFsACZ0_Iqw3@fygRy(1?IYEaqm>_ zRdIdcD0Jl9lh{buNy!UZ!0nY*>UMaSTe!}CZE1{Wh|~KkKHBKDra1ptxxu}+7yodc zTWAKRE9>jM$y|Fh_1AvXy}fAj|HFwp{it($QT^(fEu)?Yc^7BB2GQ(GMfhwX?mQ9h zC0YRdYM9Hs^Yu+V-1DFCC*|6M$y~GTCxSiLN?O+%^8&Ku_M&veN9@~tlY|CO3Gp}{ zr#;C6_R9IgvaPHK_pS)<9jL(KH}Isv`1d*BBpB&_o_iV2Fo@YNkoyfh63iceeT(h- zHsjo6ukbfbWDd#Q#qmkzP=0R@?+KP#3$?S0-=^;M{w-6fflD3MO?)RlUejMgE#^4$ z5Ii)8sQr9#|4DE5yC+@NuQ6%<5!>-5GhfvXES^!icNRIhZr$bm?v2g;Pu}?v zyaoAPnbV{6H-`0vwy19a9-A^A3x_NGBgEtP$USIqeEC*G-!%N9;+GbW5Z@5L5bwBV zP@i|ur|5SCx`*nRNY}Ho&~)3BfxwH zI_*5^3cYs*aknG?t+B)z+54b4W8=Ovy+{^ch1U}hd+}2)=UyKmC+om7VNTYW9Vu6T-AAU<@(0-J~h zE<}b!C$;#h?Uv@b**1B>Z_0&oHsAHj~^Qk8rqsIPnF@TSNszWArkU7Kvb5{#;Q z^6(_|3E2|UO-GQzuX0ARsx_LdTDgU1r`a9&UQ(@mR?bLt1Pi$zr!C8#o40J2+JbzO z|7DV0*b(i@iz+TeuQ17#@LBS#q4`D9sa3b|%C`?K{->mQH3G=-_0$7r$t^35|3X_lFM12(3in|gt!a-> z8a->4>>%iZI^^7^?pgYZutuc#eGPIi+;_5wJVo~ZD^Kx*%2SLI`)1#t=%Ol7;qT=B z{j%F97dzzdcIGnn=t3imO?*CVD}CF(WA^`Bj(-k$Zzm-#KzAoN*@n?5LH+slB zbf&gdPc0lLunF7D-F9rA<6QP&1D^@xX==`j&j}up^4w2-8hsD_)x^3(+f*=9+k%Js zgMVy^Cw?6a(>TyqyUclqY!-gf0sDb+TCs~bGB7w z+^w&a`$U=AJ8{X~;aP1~4&FikRVl}d+*h)hOa1OWY_49*+0>jF$Jr=x`nZqtP}svU zPJ1DHPk&#(&OolRonqp1C-zsRI*Y2^wWB<){fui^r4OFhGkRX{>7B~+vNawH$4cGp z^J)vCb=3@yQkQ1IM;Z!EqI-OCs$DM}K$h-?hin&I`G2$lHv|Xy($N`epQ4_>_QTlA zCWm!$Kg0QmRiACopGG~}@k#uR8`|^aa|fqA)0V#y-+C6mi|EtJxP@~#r|?3a|KdqJ zPrmpD(*o`E1h29lpE()dT&^cjJCooyHrMOnpK;o(p3?4}!#M%n@G*@AUsG-MYVl;Z zFf7sTwGvmhCb#6*a%PL_9Y)CwlrA2jMy=LW{557v|HUuz#PHDmtLba?Wj<{Ao>XRXP% zUG=HH?Q@2QZA9rW+=IZHS?uk#I3v0md)}gc25Y;q30_&LNk55qLtBmUy}YCJer3EG ztH!BuYn^C+p`WJf0 zp+6E2L2fU)4qeJYMr3dGY8lJ>;UxzdhrW$@3VGuCf6MRiT!~)sA#70Y`CQYt#WTaW zb}zpj?XOEb6-4n1D<36sHu0!?&_SI$inT6vjsLbQpXpV-_LoAv%pwM5>e*YR_K876 z)gHVY@fAe5{uI|EgRbLm_G0CGTe&w3KLEKMK|OZ)Z|HABOKE7WKdL-h5dROyY#Wlew#xpvT`$fk5COVW!(Kcfq&Um9{miAMH&v){C%<3#! zj7RwmqLrryJ^%djPOi_&k0?KX)1c>-H=*avPN`~LpGK|guvTefX*^c_yn@!)P%HbKWz;ld43_N{ zUNyjcS@U3=anOhGhvT7#2!6SE3^Tz{dyowI$Z0|RYb@^S0X zZhm(vUz0X|Nbda0=&z644TWg(j$*`KT@;T#ZOK0khet;Fj6QYAKYf7lHLzE%f$x)} zc6$w<6GihAO84M9?ZsK;x`DE#r=M~=bcU~w|I7NiEMZ#UTFgv*vdMopY&|c16Ag$WGJ@DxTf0}AGyqGl8IZWfo zTT@LNpIv{PYFs{9KC95R#s7CaEWgIZguu`BARE{7e_Zkxcsr)WZ)P3i=rGcEDt-;}3$_ePa~*!DdYvYNKAb^@ zr55C^lsmeb{X@~TtC#{Vhk06;TJh&9aHT2Hli#)wdf>fTHt!1#gY@P(WgT`R_-j!M zTlFBDvcC)f^Q7uElFL z)Sj7yY^Cq+d7R0YZSfq_?nNBpG}lOf;oeO0`S3?abHoOAqBF53b1qdavkq@RF|wC) zFU#lRk3|k%f)1*jnrzMqsBN}oS{aTJ)=xQu6XTIX26(^3Tpk*ZTm>(a87F@xaeTA2 z&D(!dTfVLqeo1U)4DH~H&1cbHtMCs*{zr#*FR>-Y6s=}1ic^lIj+*=)yFc8LA4mU@ zM$YoG6<4`9&vT=>&wLj!rnWr!K^wED;?t(B#qHSSnZ=%b)Z=+3qwDE*ub%u(;&6ek zD@Hhn>#FCb->N&C;P$8V_7~RB558NcIoRdy^5<>j zeyRiiy_1iuXYU0tBi80q+i@IQ<_?ZeN#~kZcpR8gY9f>+cDS0Y+mPbA0{EVrAT0 z!*Q491`n&%Gh;L_XO|!2xvy++{mq&`aMt|l!}a-fQLsp`URo>FjjSKEW~%R6Su?HQ z&^1eF&F&@tSZnt8%ZUFePIpy)9QD={z0JWV*66z@_&9y*-mnyF7WPlwRbcS`&eC<& z{62{_pA9Z(Z8fL)tVOrx&hy&)I?Q#gPHcrSE_+#44KEB!-B}##&dPt(nUz1UuQq?4 z6VLDd+s^#%o@M-w0VDPWrJzT23dM0JqI>NApUd(SiAB_|Usa6HTvd!Y;EhWSLfRbW zbQOh1u@pRDW>;}w){cT;7rAdo!Mg8rdBJZ{2xDN?t6Y;oc+MQ_;G4Dso&&%CD2{LJ z0X{rmRmP13<9uM9>*vrxy1?~iWn6CqZqj#DdtdO2&FlPz#nR5q#o3nlm z<8KW*XRZk%4l>JW1;5|H?dkuU$NxaL>u+4^`d#cfn9Nw}o#vp1x!ls+OvKw-0sUN7sGTE6I^_i;Q~& zo$6src`CVRUUAGAx<*{SX?r_+sM>>Wo{Qn9#+^e@0YiL1typ88v>$0bY z?Ef7-D4!MC6N9&2et_5kKF7-^x&E1xCVErHHy_Qn&1FPK?fEgZd*PWq?DOXwQ~FHM zmvjroHbQxc?k9hY&iDO#d2gW32;Pl8^VXPGf=5rQD^%TtZkT8@b;uvf-O^C z^i#AmgSH3wy=l~oz(6`^doZ@@m0%kEZ2qX~g0vUMpF=%-e%t4~5;XD7oC)Oa+m|Er z+l!LnR(w+nn%9Fp2LNzbEqzt)q9e<}(gl)e_ zgIk!-JhI95K(c-T-x)p&`7Gu$FV`L{;`3Y9enubuTh`s`yD@M2+_T5v7ca$nsCkO7 zJdDlY%X`m#o#mRNRqV$)8t1_ecr?zFE5~_4zDA5EvvS`zZ{X|!YNvj4A-2du&K@Af z^AYxooJ9V4#RusANBM_=|7~qw z#lAGvAd!y-I2Z1PPe}(Y#lFfp*f-!`2QKojpSGjCCwkG+cjfz5<3~3!>3rz-_$=jH zeeQo_TldqJ@TW@j1g^YT6T!EUF5JPmMN^qR?1Cic!GeQPbh*X`b8s}DdOlTr-X3la z{+`d+1Th12;(FT9JQKta#=wV;;#2arWB2b{j(>I;pCb5wrDKY>*z5xr-5dB+0=!i` zN4zF%OR?X~ZTpU?1B;LPBjhQc9QuIE`%AC*1Z@4_u&p6}{|u_~^IQ+CT(yVA$Sr9SAh)W?4Ue}PA3?_dQU;XHuR zhp|_V;#F8*4|?l_-q`;odYdeI1I~ht^2nnZ^!V?h7ZXRQmK|{l_!T85f$=67cL;0R zmA$Iid$=CCE3h{zXGk6A%nI#gKU$aS(n4dCY|qxb0e3B82o|-wLi<$s3mz-CuAcSK z9txfL{I%g`%WT6w0OI}XPw+t&6&_ji_8~nJv2Q`f!1wSK{eo-4PZZE`(}3+N{0FnM z)X_qAq=*Y8xfbI)eO7H@7V8-?tBW(ZCK#;=`FJ}u99u?{uUVAeV*1&)2Ntnr`FTGy z+}tVO@ND>V6yL`zyEAMj%2`+Pg`|wed$FIJ;QHxkXE1McXYev~vWmWRKTf?n+0t{$ zzm>PJhu^zK-5oqMqdh+-w>qeDv5^zEdTH9?3<0k+wq|cW@S2u+IhgZoEj)wz)XwVS z+HKfkmoe-+Hg{3@v7Y?Ij4FCMPGjG8o8 zrw+%i{?*|K-&O|Qgj};Y@>e-jOEcY`Y*5X)Dunf@LSoB_Cub(qj<)*n&^ z0k>b(n>(w)9sU1v{+B%bE^z?S`<0xvYb92*9Qbe;OXTW{4}WmUNBb?le@IPq3!kp! zxa=zYWLtD5r{2@^_j4X+$C97*GlqkaC8G|jwvxqnHRtU{u0Ef0z$1rQx1;Y96WCdS zwZ{Hka6n@*wp+LqU%bYF%}ZOOd3P@7c7Lb8IPPDN#!S^SLKwqs5PLL z40@IHtMR$^z~R~Z!~G!TeWKd8rQC>4(KS-#}cKIz}7#-Rogz5+f1Z zR%O_SXZHlZq}> z+3g7~xV1fhQ?K@{wC7*qdF$Zv{L4H$ADr%{jUCMYX^(wL;N=>F9|-vNC9rE5-=j7@ zfsIG{7pCz$WjHq`*%PeIl0N|bt+~0ja6RK+%h)aAGd1AFE% zQ!_t99t0#sZJLl~e9Lu5Cz*p_D<1og`0yMT7<+B#{v|w}$n!~C z`Da7NB)v@aX2Lkrpc*!1y{wXxAR8r1t%VuDO*({G^5k&gg=&j3mI7y4j++PUN;ztC z{T%R9zO7^@e&O0sUqo)}%#|?-$?vi*$N1heZ=<2K&gxIT`_OL>jGDo{dU$_m-->6$ zXYYmARr=7p|FeB4PN4R+-s@jOr$ZiyXF6ti*q`#=qQ1~O16y77M(fznLu^hgsVEsTy)M_lwgr9;qn+@eN;a;W&M1JFCjdik9rTng9vtY zO{4UTbfM`i&fa70vM)j%mw8KGhI%-){bSyWec#$Zt`vB#T&dIdQImmM80T_U;>qTM z{13=OL~anPY|XdOCg;5r9_(-NTa)hAZrZF#Ua(F5Bs|uWe#Q)KUpbRQahCR{lILg> z*Zk3$uKysu-YWQ}`q6%q<$kB%Vwc;u&)=r;N)D-g^`ky!)|!p=9x`l%>)#c%yt_zf zeLuAPe%cUEn8N+}QT!L#b-|jN3Bg^F25*-G?&t16uDbr7K4k9b_Tc@%UU)vQfUhFa zLoHo=XYj*$_Ud37{*@VLm(~DftTyS1cD`0XY1(V!DYAx9$7Z4d58|zHsa`;TZMn&aHOB zTqxDdh=>nUGb7X~p^Fe-Y0GAP7qABD>q_eoWiD!erHOhvUv3(5>n7GC#d^-lV9Pt; zeU@{x>#Dtf7wmN~w2UuQBO3GdgG_;PQFFH25{e}{AYw`j8WmXIdN`OXgmUgA$pz*PLW zz6`Su5#Nx^5bv#JF1B}hzR5#(5N&P-Zpcr;?F_+<^NyNW({s^>RXb0x8-cH1uoJAN z0fz{*1fQ`=Il|7U_uE&YLs3f`xF#mj*Xf)|O-Z1dX35VE$I!(Z!KukP;!3%0Z*mU(;+~g+7szMTHO2Qgay_xL)c$E*9sO5z zP4CZj{apy}bpr#R`)t>v;s2lQ>U)N>x(=pJ*&19E-5N;OkgV5U2k~)q&W#g7Uyu1D zDmP&>2z(K>9#M*)BH*fh0V#v8(&jyAUNi@6ebJ%XnVw)@0&S!-&^G*CGUfIfQ@b$B zImL-P*t2sHwg_=y@OUS*sQU|@bthc!tT`d&^qhb#HEss5lpkw%oc9=Cmb2he;M?`o z!A^N4Uhty$g36Y+Uhr+%)6q$B>n~EeSN~UT0icNtR-J>ShmB9L9>;9G~c=3VGQUn zv26Q3;+b1CZ}7FCb4kOoxtEvbBOb8^9zk4KJmN#*5saZ!Qwjd?s@ho{JiBD&;V1D2 zH2BLrdxq=(s((3Wzut9N{)u|_WQTrM<`|BV{+~SkU;4c>uI-$uX{;P#lA8{ILe2XT~x%@hG`v|hvVtww- zH3yTe<{+6xkB45vx)F>;bT4}{XSWA05zCOhJBxLWfaAZX7Hk@ODP^+{4_m;pua)h2 zwqo$|O`XF&w;2x4Cecf1KK-NzRF5PrWC3cJBMp|J=4P0oR}Lb8wpV6fT)u3u9VP(E3NwJ?DArPKf57 zIZ-^YCczxhd)WK6x58uQgTtcZ@s3-#0lcs31)eTEr_U{{iNw7PS!%&T$B&Wc6?d37 zJRRnC@Lqgt#6H-s&=Js2!6HU59z2hcJBHrnRkMyWJn@IG73N@X!T)Nt9BNAhVv5x)7L>;;l97xhh}^xKRyG`CC@~>kDQBf zGtd5Y_<#EB)h95f6MoIL!FErD2Zr(x+MSkwH;Hz~Lc4>`G!X5Je#J+oqEj?|zzzMo zGgxQ&cdLP;e7vF`*<|90qOZ+0W@l75Vnw07HNj_jPOy0l`VwzU(XMa>F;klb-Vx$d zkFl?}-qswnN7>Zou%|@_f@Ku^8P6C-0#n)5#$4e&44jVW8T_qjzQr#?o0~QL6L88p z^ufB-z&os0iTNej18Ca48hm1L`-@?0tO*)goWss%ou2|H>s> zop|HD=B~h`IV&OUMvr)R1vNJNHNh9lIHN|YE-YslN5LKF0`~s3!eaWlCh^*S>Acf{ z%OYSR_{|3<(IkGZ#5SFe{z5O~z&?L2>MZlpxtOC6k4`?L$_eq$U4U)(H2#bzv=6?ur=dS^O?z&e zi3it!V~PO?2dnyiRg7?+j71$*(^ontF$OOXpVGcP4|+%^7$;+lm}XDLRYi;K|6%+C@3m2A)#| z51b9&#F8uaDZWr?k854vzWjc$jxQI;;i#R)JM)Cg$+h?qzwBQjd;xAp?FnFZjQuiH z<`1%88qZRmA+*_u???E~Iv%A@VDx$DP=4SD=Pm-1aGnzx*R{FV_G@g>+*3vI$jY~J z+;<=6ofCM+@>=tHuk`Hld;{+uuMKEm+_vMifyx=eBWjoW{5{WY=DBIWT)y2mSQFKu zd7SvngQvga@3o+9`7SekJ;C2`FRD76Y1dy^)~V_^BS5lKdZzq*mAJHMUNQmP8?7~( zk1Z;iY~*?QZ=$BxpT_wPi^}c%Fj{J-$tW0$c4(fBMO~!m14Zv)t<9@-a)j$N4|bSTz2I9ZNlp?KiIt z9ID7h*}2kNgtsyL{tG21nKwG&PT7-j_TA%eDy$tCxKlQd+Kw7(4SC4d6#GP`E%gjG z~J5;zlydacl$A)luS z-tlMbdAI%-Izahcq4_+&fakMieD0$5x5f``7t-zIpz@i`M{|%*_H1N>m30fLEOIdG z`g5tJsJYEbgI9g%5WqwBXj_Kg%xSWL=Kxdb(nqLwB^`SM_N~@wR^Pg+hh{8`>`1Px zs$$K=N3P~uxS0Do`UPXCVt;3fcP4wleNwBpA3b|Kd?eDi+zV+b+p4?OBN)<^S$ooMN5RoTZ%s4}Mx(sAGN_6Kk`#qU-LSaZ5g1 z)+MRQFm8kW*Npq(0yb{#y*Jkua<|qNYQTlKx4PJXKLJPg#@g$<(S^~ipv|b==|!y$ z?@Z1@*I1RW%-(-*jQxDrPS$p+IG@QUM!Hk|hk7nLmE!g6o!KjYvG8L7zT6M_>#1=v!t5u>D#=dQXydSjyZKzi)En!&H9rieku{Yln|}bldTs~$kH!zYYm=Fh4+Y=--bJ)m4eZs1 z8B5(X^f{BbjQ=^0jsr>}6 zyg5)S{8F72_5G^BXAWF$A`Yn-@|^NGD*MTvdy|@dee3XTNrr~!502)npvZJ!Ao)7# zt%2J5YoxPWTEH&Zn=A9MUn38yfJ+oS7v1fko`z(r>;d*_?v(v0*={-CQ%nk$hAxvt zmq|*OnOoQ*-Gi~c%ot-f<3(SP%>OtrxL5OJte=Drd<6PBmG6iRd~A2Lo{_Dr_mFJ` z4;wk!ySg|TS!;|lZ6QJN8JCuPi+x{eG}ogrWG`woF+OAYczoXCGws4gGw+L>F~i63 z|Fj7EU!?=1`)YiOAy(|x8s;6^s~fOa2geZQYdT(h2z#OVIPsxaqGR7M`9z5eX>ZF< z&><@^iJyaa*w4Wy>6^LjX0CkNU)&CE{denOUwwOEV+=gf{;NMxzYuy0V`WG4rm|NM z$1m9gC0M*i%>nAJ%66~hO*NGBrYgQm*#)whi0S0n?|S+t$;Ehzb$ooqgh0CM%M;+a z;3D)9;%bbxJeS%z&f22Y2ft00_HhB5_3{(dfp04qyGh;|t{L`0?Huqyze9<=^b({EB&cuH9%!sEcUp1ubG57)ED}x4T+saXMKjC=hsn)=ZDbaYihgZH4 zbPMSl*mM8wYjXad1~y98GVVg;;dak1uZjFyA%40;;+Mxe^8oy;oO#eR!S(Hj6#t_> zH*>Gw+7-s;4Sw26Tv>6=?nGyB6})Di13ySo&jWmnB;B(kN$e$PTRLC^_V@Gnq+-O| z@a6f)`i+uD&wm$t%%Lv(ijr)mW_`X&bcuc^J^0JCThZ6FpE1<0&=;`5HlBblGQ{(2 z$&db@jgv;v{X3Y8bcY8U9QG=a>%A4#(hrSgFsCss;4=3H_DK7hY> zMiSY+r*daHV~Jl54BqZ-t8*ePQ+CG2Il!D`OX#Cy*cfdL3lq) z9+2?Pv=?_!=Qf;gt~_7##-njzuN)V?0e(ZA?Q(R?(d-7fbb$nX~-~^cLpaa89dlsQ;!m2Ipd3R~a*76-@rKasB^@O?Vz- zmR^&-wYKo|IoP$s(Z7&0=PE9gL3cr}8LQn>{)qgJ5Pzyrw(BG8!6*fxnqq~T=Wu(ux=5Il_5zi7mRQIhYK6o;^7x$Kr zY!267zTUr2eji->68XVx_-Y*dG3-SJ52TCWW2l{%75%(8h<=_7=?DMsLCMw+{2zej zB;|-WlH>CWFaD7lkEfOV8S-z)m(j}p$S06N$K>{U<$Mt3?>H?ZBrD>g6|)%AG{o-q&jH@M`Y{uEswoxZ_o z_Fjf}Oozvh(0=I%Yh!v8_c}NqokDaaolrW4bY8(-JZ2cQCml-lX~l0W_?AgNRf-w* zc7!;4j(AYn*DYRD(&NA4-}T3Vow5(vqu_Ja!8naI#+X0Gc;zqCog8WY2S8`pa$KFGg17H=p3m`g4sf-i zb13dp$xGRgSRRN^OJ-?Kmezqei57ptxGM1;_NRuqGlDH}i$0iauiC%|d>tn{FM{0I z3~b-UqZ9Bfa0y*@ubmUm;(V|J@T@`mVn)eNcvDBH7tGkcI%p(Eq-J6ZdvIFw@{3v6 z2l&auc${)t!xqY4D=X_lu`Ok2Oi=3$N9@PXz|xW$`7}=4B5*$wfT}!dwx1b?~?7Jj%zrp4x1( zVV9s2|5s?jy_sB!3QgoX-c1v^5>3pd59!n>!{el(O-@5-0~}#qim%BAkj@`J zvbxwyf3gK68?b@LiFTz|JIQzKhECqoJ9 zIdF3(ZG`y1bAnl@n|S{Yk3^TynTX<%3!Qa=@WFvUhI}&T`tFD!d=k94o_Z1M!HYfb z_+kB5sayUU>zx}ihcV3ION@07*N0>8R(N^?*VE-WV4D?&$$!VXjwcRyA@~u-g^YB_ ziwkz*@-V+swz1+PqT`U?50RBked~ge%tv#XQs?+p;EQ7D53=_{u@MJ)4s(XM<_<>> zK_>1nJA-%imAgF5H*LzXhZ7z4KiZeg%nceGyL&`(REr z?=dIMXG(2peWd4w^P!JWzoSiuScdq%^t?*EahiEL^bNmtRFT zFnf^p%6A-3{^L=(A5T70oXPrCc<+6OSr6*bqvwp1T>d2X`YO(%8OvH#)^HvB+hpHH z(HGAFA0#_u>q=HgZXC5yD>i^r$zfcx@A5V9U-Ac}Gk&O|GmdKx`ENb;l8aBic~Fk7 zTabCwb|Bl-GbGWY9N#*)qaQz{!XNFwA zlIwrN^$5=j9+v})IW~KEIcsL~cgPRmx_o`|DH`gW=b!^UcQJbv#Gk&z^WsJ36!z%z ztnvXP_8mO?e8}T3K82X2XoqJ%&$BO6uTalLc?RBwUPeu0>I*(ze&&3hd7NiNCqtik zs{G8ycxEkimZcjguV4KMW=G6z{?p27Fzv;8%mJP6VAROhoaP!ez|FQWre&GX=c#&> zd%w-x=g}7Qhz|)mpkL`>f}0I&F6X}Zo31DI9M^UK{oMO1_iU~qo6$Sji&cKNiS-!C z{khx^WBgp#JZ<#kTE;HBdOAE-x{}QtEPHKHI+Nzm2Q0?h9l;jP6cHY8<~ywIkGzr1 zC*A20;VyK)fVo?yC4VWt;WMC@-X$mYI~MkH)+x4J(_TE|cLN8tM@9QrA~~KPQCqn5 z1Ks&E;7#3I+dVft3;MDC#MLMEn@o4H`Lg!nNxY-|P4e}q|L0yG*r@#!TGv&AHTfdi z*Q9eJ%KBWCagEj*Xzyw(uy`bSo1a2w*!KFsLDgXtTxJ{OR?Z7yn}Of_{Ia(Xt)j12 zsaagPFSu^!x-nj1l=$e7dyjLkgLiU6uK$?p&0K$Q$n`$1-^g{v)-=`#`paa=aQ?^V zQ0okN{$8F}tl)R7+oB=&)^TqUZOt2U{SK~Q&h^Uv6}QHi8&G~%Q2^zJD1NUwjpo(Q zH=0>rU@tZZ+4(tsf40%=<1_wQ+dR#8AD;uiw9N*-kJNnlHYlK%un{}=% zbmew>($Aw)unFBO@Y%M2rYgiw}*1o9}beV>(GR>a3`u4-o49~Dv>x0x^v#4#R z`s-2c*-EzJAHSXbTMIq;V6Cga6xL`vg6`4#@e})pO>v6Kb5QP3JwA2qZ#Ys@s{d9^ zKZBpqeLbhV6Z|shP}IN~p<2S!G-Gdh%n-kVwwf5{@Y@;+!V!~O5e(dYVIh`TA%4KV zDQw83_?0=RJf_>PdeVD&c(kyo?;?L~>Iv_M)#!~GukeO@k>A1ohGo@%?*GoYjha=i zKl+PSq5Z0*e%$E-9!ohhyVD!^dJS!Zvvp^95ylqz{IdLx5vO{yK203<%We5n=lA)l z1D;I{ye|%JK9XAMhw*Z7o_gXwb>_y^Cs>2A%?A>yr&2x>L3QyGACL8qXN|_vzSf95 z_7MIt2j6)X-zRHO%^Fx&|MRPc+GY1I`DTCAbv*Mq)uUT|*nDLT`JOBIe(|tsLe!gi z{-h=I`ai`QUHO&1{*JFy^M7CesY|N+ue|z5e_|uG&s-<;Q)tc1lJ+oPRC^sOHTkTZ z_8D?U6?MdW$5oSis&!v`xK?9BPDN+7kh4K;nI#t;jw~5@_(|adzPuRm|B#NC%si~P zyIImp+s}vh&5~`5*Ew9NC9awQ<5|zy%stMUYVN90q+G#P=9?0ZX5c@}-}DjtWgWHF zsv};Vxx#yz`cH}(s@CfmuBq0za0DA-cO>gR2OoJ(IT*6lxCV{V9`9T4r>$P;71(LO zF=nptHaU0tk7QScYqlwOyDvL)6E+-rkk?srrQdBbzRp8n|BlX&AGh_Rtow&r^Ajic z`PXsw#K2iKqqm+lG4UPyr`6(fkSd^ZsXc&9x7P*h*{dVGh_F5}e*Z((@gu}H@W(4( zY~1*AjU5-i^~bSm-bTha#>w40BDF1IQrmQXMwDyDH1Fd2E`C2(SNff+HqP_SiST;P z;@+t8^IY?Im-TQwz5mPH- z;s5lP@)mhN%I`CL8}e3QO|?7FHCybK+$Zdo=jWbv{CM?l^j5;F#tG0@7-Gi>_QKJUiBS04?@>+HT!_agV#f8a;#x0x z?I+B|URrWhe{9JkVY?kmKG@%R^^^V4C2iC*d|!WzShUUoQa#?Ujz4q#edj+B)(6yh zn^;SY*D&r#nzdm4qUX52?J2K7^k?>pzCMLoGbszk(tyn zOk?kCqkZOc!o`j!U(D;-OMLMs%UR4GFZiRu_H=kA-5t_F9Nd32bBX`$>|^^kWj8zgZA3@hjmY$WYlFXf)f?iw?nq5$c^tt}Hdp+Myvkr_=a2~kZD%578 zjQxbdFvlI)(B($wPJ`EHo-01V8tKe-a5!9pr5V@%akkg5;VhLO!#gBbqsjkO)Vl*` zS%rqv-KcouBZ*$0cf3bzo~g(f>%+ep!+7AMjD_<#Y1^cmgE8d30l$Kkos*wO?HKkq z?lo5rkT?8T|Lf^p{t;>e#o$F%X8iv{+}nr8RbBV~=gf?x(M#-OTYw^~_{bI@hzny7 zpini8jYteAW&8pd@J+^8V1>A00H<|`ZyCMW!pLO&ig2883?y-=n+}fKxVhwJ{F1~W zrZE^&*QD(^GdjrE5aK4Jaa)RipYNF?aGc!R{_a0l&!gvj=e+E__S$Q&z4qFBukBT& ztK4|1%B@VlJod4NPENSzp_AuVq+TAYOcS>!-RoDR=nK$o6|6t4duZ>^Vx+(9p@06{ zD1A{azja=f;xV2y%WYmfnwf(?@TE1&m33<;@A?Pt?Faq=f4*@{{#n)E>A$Qhoh)qd zPA1oT+x}#xyJQt!TT9(sj)Z)tsn=#w4{bfD#Ub{d(3 zw%j%7Z|J)R`i!+((4(U9SHYea#f{XyFXKbMh7Y%tjw`>~2g>{OKi^DD_iw%Ro*Y3x z?E+eNO@*a9>oSYMtS~U#Bm-V=7rkQP=WZdtgD`M%^dbiYX4#|mh8`4Pj1G? zmW$3>|9GdB^R+I+NVxqoSdSS?nAifzK)1@4s5|5L=~+fJo*1rZ<)8Uo=FH0TJors( znrxjJGG8&F8_m=aKaxCxEq8?R{1Lx`x#t-B9!<^}HSA$@&=J3q`!U|B;+=}N0k3>+ zT|Z;x;b1&q+Ke5sL!t)j`NDQQlQ9&!z{?b#^xtMJrD9gd{xO#fyT;yOw<={8>(X18 zzuv|gVd+f8U(C9Tu)h`=&eL&YQfc#{nfRs)-fnBZx0rq@mRxSdlEX&i;(@?MJUy{$ z%7L40YXxUTW;mP7F#6xKe|i|FiLd$DhrRk#&i}>U!|aF6`71cLY}f39w>c7VH_n{l zHo^C6nFo{(j}WUt`BEO!vS&}e?h41-cKLKS^5MSXjP^YJSk;t$m(8%+u#sgSKVWk< z@2q||-(2wWvo`wMqEYuc`kE%@wI-6Dg&hTc^#N!b=gY|4W}~WL65C33Fo}K--9KWV+c!Hl@?PBKb!@MkIJ#p!0_2=>r1zQrHGd_8Lc;&wm%X1VXMpev{!YydMk zrx=GX=X8=cyff3C*t_+fX;r#aNzOn^4!C`^%}IKms4E%C?#b%oiARSWI;Z&V2Nssz z{kZeA`l*;=U%*%9L3md(VtiY6F8;WeZ zlj>9c*M|-Eq)2A${tAP-g2r=9cojGLD{ATVKMJ*IooHO!MO$BmfwZ-T_*;Nod5K-_y=fvhP~Q1i6^3XH*sVllIxf^TNlI=ug|RWr^;z8P6A*mjV%{ar$BDn>{~P>Yz(4D-Pb@Nx6SwhyEC22M(=bom z%Ku0BKh5{1eGI?fTGkvNqke8LSkRzT18IK`)kH>&8-Rigt3Sh)z3UY0QewYG#h?A2`E7W6~&m+HG8q?L{3}KlLYC zX7MLH+r>RSkKuQbkJu{6k63;`&bzh9ZGV+od5-6y z`{Vh4C(MJn(G$kBC;drZURSKPd5)c=wmX^FBds~=C9k!LtUrNp3J;g8kJ0i5rWQ1kC_|N!W>mFsEt*IobkSQqd2Cmtn^<~H`QP%gV%ms;Ct6uOH>^6p|oida^% zuQTk6NN&I;e08iL)nEJ~I_I{fmG0KA7Wdp+(D{@li+z8~?E~)Vo2yFS`*DkVJvw#V z_az&AMd5U%&LPs7@8Yom-wnnh%rP{Y*#BM78l#;ne$7|d4^dCvs*@(lBHAlcgKm9_ z*e*6@<9n4sWfA=<3w{#D>gs64Jj)Tgi!kBm;fxHCA1HCk8z&ldQmy}+-FWj(VY z>qTZVH~m-ele{YMwZxMBSz?S1#*+7DZ_z#xrBgWK_e~xO>^8%|#*qJ!@+ytp#@=A< zQdDJuRxQxMo~?!6M>Y&$LqG#{BVVL^ zuG&*jCW|qX{n}{MxD)+)r*9VS^c9~i+RnUSUB8!ZXCG(# z{$L;HjF|1#{n5K`G#Kb5_|iljso#(D>@ zsHYR$Yq$nqqVZ@^x;^NH9mxfI*1ne&M> zPLU3)n*GsYEV;~$&EDv4sxofW*jaismbig6$Da;#=40q$?bWCcZR=R_Q8#XH!;YEn zH5u&7uyf~dHr+W@^x>RoIci!9;V)OM;RHW`y=kg%!=4HGRl1gbO>;_3X{Qv-A*6_* zk^Pe2k8DNJ-Ky&?HI?p~S=YI#1aUavfsuK|e+$|C7JGeWLeE8)qo-2xKX8Vv)m5CB zslrBE=tU>7#)~oRp84z1t?T_3+GD&>Zf6E^ifmvHvTmBTxFu4}9*$Qkkj46wtXoMzp<-@VwK&HArMb#GC25$Bk`{(0;4xlPnT1bNk2rr)-P zUHQ6G@K5)YPi=O{m5)T_R^M7*V7`}ikL=}cY)!t;Q^kNJDH09}c$gka4=YIwrcQba^6;;gB za~@{g!uFu8br;wlg072Z(Qz(1F1f&uqn{?QmNC|q^}6FN?&)};)QwKIJ6l}SeF?dH z2^s4xPT)Oz6u!nD^JEW3jNvi$KUvzG*54=L?_8UFvgo(x+1FyQufn3A;vJ*D*K3Z! zqxx*XySVk}nD!4__!snTAkWq#?1iPTqy8htGPeLv|MBC*<;RzSt+qAB?+LW2>D+rH z0UgwZ_PVquoheO8Cz?niGsun7&T)sC>)SyQsi;}f1X2dm|S1WQCO?OS_)%uf8O++$U z^9|wy>~ze17dYM>t$l9f>wU$26EAiz*^&1&{>s>=&z(ToP580f9(EsazWciDH0d0j zA1ay>hGgNa|PZ_c!1BfoHKMu{0T+TTx^ed{f${gohC(+~ZO|q|fLam8!Mixx#7QcB4{-Ad_UlO@y9P9nH zaYJD1>e;->-WY3I-+Q*3XF>m_XOq0K>>1B?o$+0i{^@f(+hhFDRX?w^^_|jZ4q$C1 zXUbQo52Su?qd%&FPvTJ|@#?5)-}0W#E}Q<%7_q4BS4S)ORy0XJN;lfX*o@e;LB7>F z<C zC3q7^OyihuCg-7J=JAfsuH>wE^o4Y66Kl-P+( zVfTLd$Gycbe==Ll%z25JXNUd6)~nuO&ZDSL4*6}Ymue^svAzM`TQ85|4`9uHua}>6 z&}*VyL<%pDR$0_D+7W z@;+{_4RJpXKkIDSY&Rftcb4t7{7psm39{GZqlnJxbH{Bc+3Me5O@?gU*4&r;DcDXC z>j-k108#BB8&0D+K83M=4$IbV{H1`sB9S1zS9rdW?@}LFs`7F zm)znXJ~5#63rX#3XU$PT<=Kdx87sETkxfY4!USi#K(E{_wphW>r|0d&NHneLkw{o;P= z!F9}P*=Po9bKUj4+xJ^%X?}$GZReNxj{acOT33`_(R`)Gm#4_T68V0UJWm#g+3BwH zmr?$c#341|e`k(3!q~#vPxn8sB_@_bI=OORY+TXrCiuQ#)-=+}x|8v1O}3@iIA?`C z)Za!p*LNmq>zp~oLU5dOGt$^H4t7a~auz6OPHkg}JG{5g%{|`jYJJAXDC6lL z8>~sV)$2s3N>&J*bxeJ(${x!=YtCgXge_!HSJ0!q*0I76b}(ag8~sQb+PD{KW-lz) zF7{R$#uN{m&)T2Jd;6#h_UQ$2pwMsbZtJIB)UasNBV)*n8%^A0u|~zv9_m zF0KBezi7@La3!bmkL`GBlfP&3dVkNHO}cI7wPdVNb^bIKRG<(y_$ zG0-;Oz!-4A@or!o_`{o7uXTHG(Lj%Ajh4oPk=uugD;N_VP)M8%Ameeyw@0R2XdnEf6HG_^EKBW z!S?PW?~XitKv%S1IL#kqtgL=d>l39T6E@?UWZ9SSUR{yK!?d-ZM2usB?-HG$HZDHO z|JFg;@|#zrzTh@+m42O>LKj1$VL13p%XG%Olx^> zTtnaH-Ot#j2_5z~_MrQK_1)LsfL|KVMBrmE_P1rDv1Z89xIn(RtlMPZ(_>HmIL-2H zinkTkPkhljF>3~LCt7=#tZ}hHynzR{K(Au*F(xC;$4%2cJnN_4mdVZZ9ogb_$ffAD zk(Vjx``PqSk+1g`_lNXKKi!`w(@Ov6{SEWp4?1OfmA+_`42gEhsBAgWEgGZH9QatF zJ7Odw`6)j#S));;92L@SyJq~z%uo8!q+QKF;tb_mN{ZjmkVY;t?9-OcAx-I1wYw}d zR(${+Rbc!@{4upj?cvY`JzED#hv|Ho|4avd-u&GfQ%2*+i znC}NZD8A8ns}dc%d%C{)fmiMu2I)hF;MZ@?oji7`JPwN5`0ns2QjT-R`v~l<3i^+8 z4C`e-C-O^M@LhaUzcFqTmivrgpV&3>X+|}6q&^R_j`(+tn_7?=5l&%PkRe#Hl?i+b{3SV?jdQs!qhCFT2rq553cQB{Sc}?~@|4Gw$*0hP~ zmH27UHdP0^5(QVbi`ryu;+Zk|>>|AL0QYv=2Rx1ChfLzp@r`ti>bNtpxq|)f_*NDN zeVo>yH<6#lRMXiHrLht3`1m4DBs#FI^Nh2(CtW>GXD9bN(q+2U*R+PTOMiT^>qD-5 z&+!7W`&8Es<$*rg771`$mfuO~sD<7iP$reNin1yuQTE!2C4;pWeNXkeCVt;Y3w2=E zA^U%a?lCDF^HPZj^U0I(n{&VYy2)J6i6@%;@)}p#bStt!e{}l3sww-gy)dxz#G~MS ze8>+cqQ%{bu0U?Zp9uVUJFz$z@3tD~b;=W+m36xm2Zps6@Zwdi&5b6p2{YJ2_@5;c zHOPi|rZ#FaMjrWfc`l?gEBo#?O`XYaDH~huU*jS9I@O>41@)sbcSD}O3;RBp@05Q98ITNJhTe*& z=+Bd1@~5({e-ZDRi2?ju3%nKoc6x0^dY~9J28xvl$NR%1>)`Dabw)m^TYbjre#GM1 z!u~3J7}FQxpD zi*|e=@97F@5WSjdVW67t8<~RIs=*K4RmD>?{IhE)Ebda^$SN^Se>Ww~I>+aPjS24B=)?-7z?A3-$ z*}vQb{n7*7|91M>b_cpG*^IUV=}Rw zYI3xn0zPTd6OZMao|%L$>h}ub9mNdhR|?Vxi%aP5W7;1dM}`b|COccY{TK6&c=^3Y zyh!pVW7_Ai%3*!b-u>RfB>NjGDqMqmu|J}HP>);gxBwsa7sq5%XX)1#et$5Sx0OwL z=r3E`F8l~uLn;1@uc3UXAp7?g^4O2Bpuf1Q@O@YIEo;zTkgXj^ziWRR^){{(7v&@?>-?WCEbGPHxi0UQ$Z6p3Crz{P zDtveqd3@E6CSLuG`LS!nW9EM~w>9oBE0MnD!z}7dc86$AIJA!pd!o|p1x7E|=gV_4 z5p+s@o>*_t^(x;bc~51; z1ApW${E@q?eXjIK*^l@G@8`5jm09UXW>n@UNoNuF)K+#|2fRO~+|{Hfoum11*#Qj> zJ{bqu$9E)~O5+dp0g_(}Iu#Rz{lJ$P=uOdXBfN*7la2S0v))tNh@nT(n~n0*Xk1o_pHe(mA6AowHfU~eM7L~Qoqc+* zn}v7Mjpsvycp71xEIAjS#orCd>A_rmhUcp94Vme#+LHP$Y`_TEsJEF1Bb|EqV8Dk5 zX~*rPQA?g`bIW*UrLlWNL!SNo=n0$jYe^@4<}>5{XE6&|w@8n7ZsQ%!bS|DbCoo_6 zS!MoW;fM4P>zCC=DXU>pA|>wXrkiC@zH_$%6dPk_*)VPNEazbM!%dy_f&>_-d6$d7l1i z@{m1S3r}O=JIVw8y2Js$W=dH8GxM9wJ=L4)X}m22b`yC=E!S(OoObR@{>BQ{tIy_q z=49V{?eB>PXW)OL{gcM?cDdce(Sd3=CH5?+-8}Fw?EMa(sZHqFPs3-Q=9%jg~K4QS0k9X^>TKAGr8%WDLFMLO@v zPT_s|kZ<}Wp5-pW$J>Ixmw#;b(p=U7%0|=v8SSMrlgz88ULt+`1BdDu&vI61=b#sJ zHu$H1d~?al&{pZINBY<=#(nIi(u&mS*DG#geP&IK`*QM#H?sW_w-f*RrmwWP2mbOx zxASB0>WP8k#UtfCWDg}-%bqNF5$6c`^cPnozx(#cyV=Zn zN1o^nzLQ_$A$%Id5kLV^xu#>;fzQENwE3GlB{Y&hV z&>BLm6SVRh{W_fko5J2p(oS_wR*w7}^20u)El;`)Tk6A?#%V)a{Zi|7rSGwSUeB&I z`imRBw~sLh=aE6*b@))`G%rC%%=h|d^%we6&ffN5+_Ipg`Oi-6ndZBTNpA*Y4Ectu zpc@~p*Frmw+m5%FGU!YGjDHTu@q{HXn!Z!q2&Un9M=6+e3GzQB(@9Y6ZyCH=)p>RIc1 zhFQN`GwV8d@u*vgPSO0`)8s9`HGYA{D)Py3e?v6lcCy#Jy6_tI%WLSY*Zf-Y3S!pd zdpA4!e`}4)#z@3X@{Pt9(-MkP;XJ3fJNqt&=iF!AS4~Cg9^zCwrOGt@eqzYaP>ut% zQS2knpzWLRdWf~Cw$<-<(k5AN>$iY|c8k0Zu{IbvEOlfCiMKvjYzt&~wR@0wE-_=! z{eEzz52fGS502yOm7T4&KQ7nrbUn%XjdjIS%b)ajY9DG+^CGqMYqiX)a^5krUYXc5 z7D-EvHKx98%1|;#%-CASJRALFrq*9<)iSQD^}j}a*vO6K{Ttw9cB((r>v)T@yvy2( zgL@qh@T|%fque%hn3UBl@bB`UQXcb4P3{2WK;o@252SStipd;H4fyF+)<{v8X~q}R zW40T_Wix|ucN9UW(V4k+VaacuaXi^`g7Yzd&z@a;jQN~zyhR)f;wEK@lW#hY6cf2x zU-23{om%X_0b`jd0sGaJ1!@!dPDnHv&F~YuSr_lKRFnr)l0jx;OjSjPWubX zTZP_GTIbWQ?m9?JhBMBn=p((S_%>o^ix>P@ba8&=JjQ$68>Vhec-uvJ10Is@c$z_Z zGw`mk@wd-Zgm)dc4SMI>$)fi64;qfQePY&={Vn=BkTb=~SDNGLEtP(>H?fWlIc2Sx z)}x*)pDWkZ$U)+gCxiX+DPyW{6x^U+P8MqYU$HN*-I?mo%}w=N?Wul}=hca=W0GU( z;o}uXqkZ_Ma1Hn-VrFb)PGNp&Hu*Iah@r_iDrWQVGPj(08JS^CEI$6K(Z@U^jx050 zy(Mwtbup*81V6n^pH^$$UwYIun8>ExyDyDKGpsEz<}t>a_kaAZllrJOe#)3KRhnxY z@E>Hsb|rHc8s8J^qIg5%fM3P$8@UoI*uROZNn1Ef92M#0nZ!+r^7~NuyDj{Ekl!8P z@;DL4OJ6~}&8`VC}x7||uAaafDNUmoh*Bu4YL4F+0((RxwI*Fws-+Kpjpt?opp<5O+ zo}!-ltyoZNh_$#p%&%OR<@tq<#8khJd=1MjCDA>PkpJ8>-iw5^eU5kfM4NOC=^bNS zlA`YQywgDr5|8+e4>C^44ER;lk6~=_@9u;@7IMSf+V52uYn9i=sw(=>)q$*aA$OhW zsnq*ju8EJEGko1NG}!2^IPXhGHsY(2Os>SXR=K4Mu993*RwKjOm|V~Y=&UK`n#GIq zJFV!LI>kh}pXVw3Tas0ej>j<9maMD)F2|u!%($2}GP-03GDmz*$=oH#To5C! zI?H(XI_3=SDmFbuJEDE!dvWWX0Y5=IZGa!vzG22<(yhciU_YALQUd&v98RlPfi&pgohSVfs;=M(6FOUV~rMzIwY)20`i>!3BD+b-*Z7(88g;rne}^7syW z%EooVR-Q{I402WMnHV%R*j%Z%MOn&_Sjt+`yWIX+b68`vp!Dl^Palh)mELjE`)A2b zM(-mxd^eXfIvPT`QJ)>kOX)lG>Ec5ojeMw%ZG2|UeQpiv7H zLp>&1ZStN2Zh%HBEuPIQ)n|z5I$qBy&Mz~zji!faQ=CVuHr1-Wg7bnBcdzzz){ABI z7B3ts_Z5{r((Bh1FXAlohC%qaQuF)NcX|Mys`_=>7rdm;JZ5wL-a_uhvfD;`cC-d^ z)H8q_4Yaxo9oi=6`B}#7V*9<?jtJ`o8)U zynrv|euTcx+Vb16{ZfP8EXDT2pCkItp?M=c@7G>#B8cHk8)!Y`O)n{SzlAh9e4!^GUqhsfu7{FH(r7s*GSAG;Z zT){p4mM)a6&*t8Z$fjg+$KhJP4w;Fsr+=8jKmM`_iARVfx4&c_{fvuVNzw=bK|wD$NU*i%;cx9Z0{Q?i0wj^qG-meh9uu zpNgI!zk>7-XJ?+Rhsf`8(wFXB?jY~zA^ECI;&+L5BSK#GfUomnL_cep#{yjkZv$O7 z&ZGZA`YQ|nmGp=IuhVy+U46Icj8cY-G1c!ym#Q4wphfEIsT9QQC!5j zP)`#_ZTpL=r3+d5N&N}e!_S&Vi>P9v;J)wYu@hI$@#xm$7*#x4oBUA48mB(-N`&oD;9r(NY{qSsH_50G-9lhjD z|K7BZ`Y6!%7p9{3ZwYLH_w0b_LxC*RS!>4RS0Qdgpf6>cDb{GOySSLftTIB5u?jFh!p**{}CVBo0<<|Y4Os&6@d-+tYKa_(; z(#sU4GViBY{EJFG&Q!lESL@%zev%ulS2!2z6~Bh~UsCENj*M#_l^q! z*}HoovbXR8_nb)9yHfg$GVS~VW5!QP))$qA3xi%3dD9rBuCSW4SCi&y-$3uHe_-CM zq`erjHR9Nf%EzKUC2#Nb=|P^`M(GpRN<_j3;NhD=Is;@Kpbktj86tEm`Ro_6+~W>0<*4>=5iR$;m0|DVD~cf;_ZkHu*!y`(oaY z(iabtuIzwB5?M92jA<@)ASs&e@S-Ws?WKNmu{wA053hH3u_w^LkCr#s8%UifhEjre zmn#1PGEDskb6@DXPlyHs8kkpA**lDZ;uv&@zF2mn-{x%ct2rBCF?5hPnf^^FqIGpf|M-pEKv=7jH~Li)r_=&T5N4 z`Lg@aiCg?`wU-og6|@NxofFThEu7IW{;n|vdU)2j-e>IpRN&WKT*?}~ULUemwu@*B z3EBefVLke{v7y^u^Ns()$(Y zw+j}*8+8BpIhg9t)CU;ZTZ%o>!SGpjrosBuI`q~ZtPhedl;5cfUdEfzvD8nE`G{M` z+S5d#)?bT!sr}HtJ>J{Me?Pvdjcr!#Ao^uCk7Y@Fn(?Wk+P-2Y*BQ=s`CZPz7L-mX+qLWsgb#JZ^r}SGZS;YGzF)TE zqCf{NTY(N*aglrVO7ssl`V_`0S7XOh?3j+rFWGdl+fDgD_`sS#uY8zw#IoD9kM%s-a8q_Du#>GU_E@M>PEd{@5A5lB z+EGwXq#w&{9zC1J^ZJIotAAM5lXfOuY;af;_^0Lcn}{QNBlm6MV9w~NnKg+#l#-oy>2FkAWJo4LMJHy}kr9TsY z6Yv+glAP&WIFobt0{%Kniv~XYv+c|F7qBgyyNc(`zuWD2LHu2;Gos)x{$>2vb<8iR z{AK`kkt=kKej)Mj6z>SA8{Hcb7ld&m5o|wlk$#2{?zKT4jA&1Y%HsSg#P(RaSA@~He)Jh z7Nd7~R*g+kNaD9a_e7J_Cq5Lz9CkNZwf-7w&>cY*x{-;lLanbp-{JoA=~{miY3O^k z?d~-FfSslOnG?zOy0OgqG5Q6UGsLk+0-vxKDU6^m=M;aL+$^5ZS1+RvTHtM}vxB%l zE3#Als!XrDupoN|{|#f>O6W;lv&PMm*OU&KwD*EqJa{A_p`@ws+ z)Kvy_%EuMWxZc+ucD#K0WpA9;?GK*^zq;LB$vKK&*BFOht!-1^Tecb17LkQ)S5fg{ zWt+q@ocG4_4PEcP@dWMt`Seu308Lfkz^}ykJBD07Q&61{k3=%ccjCQmEaOaO*|X32 z>Tfth7n!>aztA9YWaz{Bj}@MhT)yy2+L8MFp)~jKKeVB1)xWEs7cakAAf_07`!}h|C}rL&)4JMRGQ|z_w5DQu1Y6bcw&q#0d(n$g0#y0 zabMUU_xTm1N&Pe~Ce2P_U(-gsab2gjZ)Dt(=2E)g%Pp+2Fz}%!?OK01@18m4@8tQ% zd2UWZzXolgmh~W;n1g}0%m=AGbR}tv$<5Hho<-V#Y^qM~$&OJwj%K!wZHraA(d3rE zo@wLRFwbsZ@iABakh;Pew~gQDJ@AOvv~R$xqAwz5XHb7Cmr>~T6*H2(M2%g%cM)X@ z_ySF$B|&>VlOClndnlkM1D~?^+_jI2{G$cVzk~M;eFNTk_#-7F@d5J4_WETWmh+M= zBbw^SYw1Tg)3yU&Nb>jpm&OyvnZq*h)obob^+mkE26S0T^JRy5FKTQW>zrEo#=#KJ z1{Xs75%8W6{{c83;&$+k5MK#)LVP)RB*d42b0MAy9t!cr;B1I51g{M73~(mIHn=Cm zzXwi-xDmW4#OHxiA+86{4e=y!GQ<zLW5WfSC zhxlK?Mu`6feCiL%Jp3j2WQb3KkB9hYU^m1kz(+$o20k3(QSiYKd*DKd{}H?=#IJ$# zAwCM;5#m?DPKaLykA(Qg;9Q6gfrmo;LvS|4-v_S@@qTb7#079qh`$3)hxpszMIrtc zI2GdE;JG1w4x9|}H^A*7{&R35#5=&PA^r;34)Igqh7dmqwnDrO91rmmU?ap^z^91g zAQ|2WJ{e--*S>K)#OuIrh}VLThIkG5aEJ%M2SeNoE`<2cz4ST&W89N@X8P`1!qE>2KR*czk$;sz5~1{#J7P{Azlcc8{&E3 zWQhL=+#ceaz=;sg1-FLydaxbhIpBs6UkkQE+yRb<_`_f$#8-h&eYnj3E5Ij1oB$sW z@$ZA(5MKg58sdwW=4A$}B`2=NfOHN=BpJH&n9 zh7dmtwnDrL91rp5z($Dw1bpi1GXEb0pA2yZd_2T|40c0&FZgJPmw^w5xEp*h#7n@1 z5Pt%^C&YJx^C4aY-Vx$kz)pzggGWMqGdLIGF7Qx@ZvbaQ{88}A5MKw*gg6QA3Gp9- z(;>bFyePz1gHs`H1J4cdEO0W!mx9|v{2_26#I4}g5MKbcLp&Ya5aMZIE5uFUc!)m; zHbQ(Z_|#Qp{!am)46y}19^wyx-4NG+kA}Dkd^p50@WBw9;6jMsZGitF{&#Rb#HYYJ zLi{VR6XIWhM?(B_a4y7ef`>x?+Ni2!TAu6fOmv=GuR372JlFT zzW~mKco;ks;zz*Q5U&QW3~@g=6XGnmC&d39oDT6r;6)++Q*bK8E5LI@d_OoD;?IEF zL;Ub7u{RPSUIlIq@#nyHi2nrK5aI{HR){m;c!>WPY=rn;@Ts;k|CfPJhPWGiJj6@D zZiqhtJ{saX!G}Y<2z)Taw}1;Fo)6v=;+w(w5O;xhg!l%q6XMS-Fy0sm@u$JL5chzG zLVPzk8{)gbD?|KAa3;iy!95|q9h?sFt>8r=UI0#o*h+rq_{|H51NoWDjYC%_jCTmq z+eA=lccNkJHVvbj#WyzI{gpT#n%H3eCf5x2j#e7RDZD+a_@B$~5$@OPUX@{V)fz@C z_tJbfH)0rV-0vjKZBfIhBY@jBzFEnCmUnx&-$}YZC9eU#JAgwlsr@CK<+P3@;OD*74qPo*m$R0eUU&?Igbj(s+m8X}&$qyU&x?Lf&oTy_4K;f!4X; zRpeVB-NSqngO*b~>)_cAuA@Bb=3a`lX7X*EG?w!_LH^sI`JnP3zi!bFZctu4Kfv!D zl;sf5R&d{@3~%z^4PGUhNqZH)XY#v)_Yd=X6KN;7capT5plgKd+x)NM{~+(!(2^ki zE@&I&{cWO+XUCy^CD$Z8Sjl_O@LvGG&HX*3m*;wj^g7{zr84qeJHO-5xPs>v@7M8t z0$L3ITc9J&vp1C=@9pNhcX%g3z74!LmuDUD;u*@3=N*Ul4|DG@Y5i37#I=oUoa;`W zb?|+X-;2R5;Kk%|h~M3$y`0}CNxKKUlm8?br@FD6=SlKf#Pg$Ehe^MQdoAQS%=f!_ zuR!|4l;;r7yP@MC&)$Z{-IVuv@tAkoc!&8IV`4O{&(=dki43>c5rPVogKWtg1pxs`>&X4&4^0CM>t~`VM@Uz>SNAEiO{94Xjz5JsCUa+3dUc$cTezyZ&sa#EanOC3P z$2z)l`RXa(cwX9*aK8M?+Lw@mxA-C>&>79Zmn`RBF|TUPf^Kt4i7IKNYEB5#jA{mX zU;CX*i?w<1Nc$5iDOb#vZ)}~<{PG*;vp(+JD;=E+uvO=X5(jkD2=*(l!N1tY{K$|W z*Sde5^^iywEG|X)BsJ)0Up7Rces_ZS1sZB{i=V~C*s?yT+-+A9A6)EwK;rg z$qi$g&)YU|z>SlCWDRraN%qI!$3E)3=ov}o)Sazvb^g!Yll5!{^l9w>2qP^ge zuQ{c|y}XxaKWuiyt<8Pijpens_ZF{~x@0|?8!J?fw(`F6st)fNg}$*EeoWRMa`gHw z9^&7qyerHNV@9G(+s49vw~jQUd3Z~@bq?#}u0ckx>i4wft72AP@NQM2Z>&N52+xoh zLKY1Cge#DdU`;*yJeG?u8PdtJmnFwuFVZqN-=NE4e;u-3ZIbS6`7hZYZ4e_fzkxY! z#m>Hy`8eh_W(|!oKUZVmZ`NASX*`>m=6sw4{$BXC5MG!$$IB&2oBEzF;nl%dVDNJKGl5J#_tcSyoG_{Tx;y5b1&l?6aKZZURJb53Qnmr#s2R!d+(tonN^$+zDEu>PT%iF;EjCw zI(I_reKhB{@u~f8jhzc*pf<7HjoTZDiOku$iKmISB&{^ z#l(DyHFN#U+u@^jW5!o~t%Er=_@a06t1o(Ule|YA%uH;ct`?N$!YB5epoN{%a>*0> zYU-fDa?10LhI8-a+WftSY1}*6G@K}B8tH6_a@?$HjTld@x)BT`J>f2S_B23d1_bdNkQ*Au!Vcvs&?sb6|Y z_Dg~btn*}@Mbjk7S$53ep5`bN|Mp*?QT4tstapR*+T_bRO4i_zE?9a`d8s~T@@=r+ zxh%tK~eYAHe zZAJTkPYs|`k>``$FM2bR=qT1aXbwA)=-LM#jzno6QQk*>jvyyT&@;!hPrkxgUQ`>3 zB9D?S@vPNGA0kU;@1t(b_C7aiGoPioE!Lr^{2P+{+*o>x8_9f4d59M;R5yQd?5oVl zuVD{V9QqX_qk7h(W5N1x_(j~HLG}|49))j*q46m627AO)s)Jifn`rwww@>Yg{;#Ie zVZCymbro6ol`h8{t1!y@-lQAj)YDDGbk`YuS}R+VCJt7H{yw4f7L>k2dRl8GOsvkD z4qJGB>4RYLx1O@MCf38pl!qRfWw6$rI8j$}{{nr3d^}qPKNXkKNVuiSEV?2EpZ4a) zqQnrZBeq*~(webWi`WfXgJ59~AY<_2**LUlP5ij5(ZAQkY~`o5MoWYK7nyrjajBGc z3|huzE>@Tvq_-HEi&@jrx75WMX}76NDd|D>-xtbp4rHs<(H|+68OrFG=+<6S)urf; zS(p2wRqa4Bptx!8(FhFB%Ah}cauYg3{QQb* z+8eZAv9X1Ix`KYX#{S}%;uJ?%=Teh+bS&m5mdvBB;u4pTou(wR5Y}rgx;F;R_0ZpL zZDKFa#-RVIGwyPKdDXjbM9~@IQNW*+V-ka{M)rr1cQ}uU_5yvUuu-&+zR5w(^6)c5 zA4UF>HSJ@UtQoA2YKA_=KB$96(N-0dbG830al^Hal5-7V{Vkn^S%T=QJFas38YhwDzRJGef} z^%<@^xbEcoRjzri&u}epeTwS=t`66OT))h9H`i@k_i)|H^?9x%T%}`m?wjoOOfWvc zUZ+h2_Byl%_IgV8`liv}TEi`S{hZ#wUf+2c{AAoAUJn=GANF}~qOWYPgSSs~yi7PY zu+g#b#yiRRl?mFD#wT^yEWw;|hCIjfWvxvxF6m*dGJ9CkG1j2RY}aCaRbufVI&Thf zqxy;$ux3p%Xt5r?f;DSZJ*@F$JzIT&F$rT6i?(Z}`$?C7^0PVPEtc8z+v}@XKYumf zSp~*B8h;dq-78s}dX>f?e0%N^$wj|^&Lql3dck<7qI|B5%3vk2Gt@sC8tbr+O?hc- zRoFbbd?hhBS%12mdHstH%ygUP40s)t*`N$|fw2{Iwk;<8+0Z%<8pzMII44tME5=oc zI!Em@INvDPCmrx>L8(i2bW-IXq)oA|^WyT}1=*=n*kdI-wUhHonxH8w9maa30`f}R z`6hPsbEe{o7NSMd>UXuqMe$proUt+!-80O4vc0Dz%%aZCklr?2)_B%n;Y`ZX(20;I{F1!0jPs%^!Od%QU}BU!M%|zk@qN zdrA%Vb$0bvv z_r>SGCx&hp>6BwGEhr^<)`>pF9t~odnwexVsAuYU4fWMVeG^xtWLitz^B%sBF~XPp zX{9IH?TEc5Djhg1qOSas;o)HV9bepwY%7t27Ou3#-$(GYj?Ik zBg!6^*B=Yy+)ghkTFuy7mGFx(-1%PC>!2M;&L#7beG{70XLQ1=|4hcOg$8WbV>2`B zijrZCV|P$L!j#j~?`QaJ8h?V!Lx0+ds?DfB{GIKld5*j9T4*Ci4}C(^aJINc{%ggx z=zvGz%bRM+TDBlTTz9+e#2;}F5}m1fz$V;}y?#VC9O=D;Pl~Zisx*uo znX32nrgJLqFU!PJ#1L|53z84T6Ve&v+6%LTdt0K0yY-BF&xH3jhxc~!JBloZ3nvm})^1<7t*$k`|7hcg}-qX*NlW%bsx~pc{A{K67Ju|li@k?<8t}oP%c+vtEvp>mlGq< zyiIiC=ct!XGT*0_m?!LaF7G*dJ~3FaoBuuhUqoJ8plxQ>DUBfDS3~2Tkp4FC?hwz? z{qgUEdq&Of@OLmS7oVYbq%uy7W@i%Py~gBOG}nbR-yYJ;x!EUnL+>7VZW1Rh8jkCu ztbx^@i-^^uwVG?C&$a(pa$}{D9ps@hjSm}|q(3D~1!$5iwS@N$@>}mk`CSO0E2)F``M=l`|7G`fz2{RZ*9H5JYqTEU`I&9JeZ2gCoU6-!cFZ;o zylxv7|J}ZAAjh6;KKXg$*sMljBl~e#@0M90+y zHX=4R@6#qu$S&YHV+)mkeo6LX74QAdeNwF3yi)#g`n+fEbG)6wKB-$v14-gS6wuw2 zwJurq#ao4b`K}w|nf@|=lSZUqC?0=H1ewN<%2|MhYmWP9>m6e51hm~j93pI2JG5U@ z_hP?p7+v0j{fZ4P`}IQEuMe&9IsUK`)Rm% z;SOw9)(l; zP0SA2-_(P9<<7ObK?A=#-##&eQejXeA{}0W!gKbYbS6||ISFu;& zJoNCn&5R%5joMiq&y==o{3m4JU;Csl`(CkPUct7nyX;B7z?$*`>w2XpWgoET*Ef>% z?>2jp6C1`%HXawf;)h45#tMb{Dqzi`lDG z<~?H+YvbsWmBcq-jIyMjF-kr04Uo5471==EcCrsi@}<}kJ?uM5TdRG^oWr=TyRe#l zc|)v6-om~U#e|(#TFm~WRnRwwy=HBU??s2Oks_88^k#V$=lvd@Nq*AK7QZ6n?2q9) zo0@a>H|6l7@l7}H&@h6SFarhl+z|KT?3fn=@J6v=)GiX#q4pGD2fCs`_GDv~H>W<*YO3yr7RV)JI_}*B~S8 zl^dNF|Z%;IE<~{M)6-T!fzCMjE zmhVh)rKZ786CETPRgd!5(l=~3IZHvbApa$6;(gvUBVDv}>0%G*rGt7~5Y)k9>Ze=} zON*;i51Fl_%MQ|}*qfs^HIp{Aih4MYeao7^yP9)#XZ?^pIp_lIADV0pd)<`p@{8fW z%9vQ~FLuf@(!e~&D%RCYZtg)3+T@E3U%HaAta7H(XWvn(cbplD86f-n9oFm`8T#?8 z_Jn=G9Y`V9S$%I1KYa@}Lm%}--_g9r?X&TFcLZ^vWOo-2TSvUZsh7RSu;nVK&nk0h zOz{e9s8eFIG!CTL`$$^aPx&zQ^swQ~7%*xnd&*;9^VXHnSwop}$W4vp#KHfkypWO4 z$=*&>6_s8U`xsU3SmKdU^_yC^uRWEr`)U%dSL5`#@(GJ)+CN=QOvaVuS(jrT>VC-? zbwZlmN)sPlHSb9F@Woyu8di~>eDbQ>lUhT|`usk--#yv-ve$>d0$-&sdSkq!Jo=zT zvB>kSN4#m+$9>VIUgQ#|KZY(L@2x9IPi4@%aRZ+g{^&aFNu#RI<-FOzFR#2?LOE+- z4`s}eeBMzSc4{k#Ur>Q;)vU5r5A#dgcrL7ZjM~l&>4FIIsF)>*FpZhIMzI0PG)unH+UvypI6PDA!1Khjpbl`E0XUe)m`uIKl zAsx4fe(=oLSK6~dpDP{rHFU1@hWh_NCnvCbiOV5<9O&j0dIX(pqGzRVC(m#^>09j? zuP`QiUnFm}wJR4m-W4_s;np7t2qBQd9}w(U?au?%}` zQq=VsdRg+iE$|PQ^>Rh1m(_+>*f$j&>cdE&yWz|8ls{^(ADd`I@DB`+O{a}S?cTs= zuDxo~=WDV3RK`VIrAyOE`blHFk7SImy|ZWQb;kIC9fZ!)-oV9_CDDXFpuJfUY>7F& zUN`z&@|8}O_1+5l`FiQ|!~%R)&Xh-k{8Huq1Kk^QHvaY=MEc!pKDP$_Jg3-9yornc zR(dB}teW2EslPBMqgUaj=4r?IN&G=yF=CCv2=ik%q35-~i+06YkpbG%p~LJ)f;Waq zy%dH^6F6_D>BskZie=JNVBU&YC3$$?MtvOOJ+(vT&ybH0cUs+A3=Izeo65Oo~Q3p8&~~QkgxjOON(?- zv>!2&EZ3b$y-Sw#oTP~PaOI-Wy@ur z!SiA0(0Wg!fNzDeN{34yAE3O3%9W5VA1oeD*ZK!3)AQsfJuCXFZRWa2dpBiJ8&w&r z?cA87XY92c#zs7#dq!@o7p${*M&Qv<@5}x*=s?T(7{2Od_<+*I;au6qGg9cXbXkvX zBfp)b%NU)wV~b=DT&`FJ%#$$;zpb<%+Ge4@JR&&B;AQ_?~ky5yDpI%t3jurkNPAFBRs2ME^ab&mao8vUHAuIAr09+(6DRD z)mdlC)ycf_Q@+ZRvwqjg4ycBvgXCe_uBSKw5u0+OtMfcl3<9+!>FR3wr$47o4pY`c zhuQ0htlN}n%GJ~ld43#QNAvp@K4!J&I>w4RgL5VPV1DqJ&b?CK9y8XDrd!dsXT&^| zOeiLb-W>qTrb(cKXEN8IZ-T!1AY%>s^SCuY`twWL8*dZG;%I?-=b3cjO0eY3!hf$g zG&}hADEGBTTYHqTJ&#GR*v4JOJv^&}cW2wT`c5&#j@sq)_V7D_eRb3(W{}OgpoG$8 z&nfps%N4{AP(Gq@2%c%~Kr~M=v!2>2b>u2<(L1GCWf<^x@NIeD@38mzKtI7NjjhEu zqs&8&Zl69Rgm_wS)YeXSkn5A?C6m2fy`8@DsUNG~klghX>u}hU?I|0y&!!*E(Ep$}ab5Z^{0C<+(5Fa#Tgg-YZS^s& zIrJC$C<|?RPtV`QN2$I-_hQB){`gqny>WmWjsteU7vk)QFPCWCtZ~4E@;JcxIb(o; zwofn~81{PMr~32py3u}e*&ecG6i-{@dG(W`Ni@WX)%;H4Nnf<;o^(#ttbWFb*quCI zIqL}Pf!6v*pjG8+&5Q)})`ewwk^3!tt1?)MRmeBP@c0+M;y(S8+9EM6Xm4xrf3xos z8At!voGEv?_I&;sdw*N$AJrBc82^2M-~YEZ&CH2qo2JUldJ*wpZ+V<1``{w{(z0i$ zpA(87w6HE=WPWNJJ+Ilu(O2=uykr~C{Ma^ja~(pyRgN~wI(G^*<0IHeIi+u9dl-~+ z(SMxYy3i@Vm!%G)oJpzo^q}H^s68t# zMqq2EG;gu>x92U+nAfGv7VBxV(i=NxA|Lya722uz*-QK0PFq&oSYuNEn29~2I2_DV zHdd!-BbPWOjq%3bA%1uBv|tV0kRg5k1^3Mk&C9r@S@7b9%ZNEs$oZ%6dx(E&d>GyM z)D|bk=bxFcO>P|R?qPi_J}9k^y|9z@vG|7CF6i^L_VuYx<~_CNuie~-ZJhPxgEH;m zVwySW?o1Z@HtRng*y)M~g0CbOrk$pprZ$e=Jw$vUV*V*UP^;ntF~=-l+ccY)u7$qh z0Ob*FUn2%<4{K1Bema#6{98(2dB&5yWxi^DIlXc8o*m44()RD^rtNnVw+(u)Vt#pA zVNTJ^4i^X0N^?<3ezTrzm}WZbe+9dKJWUH)gSxVN%5j1P93}sd{}hB4M}H8+;Ju`Ai%T_eHf`wca5OC@R><> zT`b)NPdXF_k#WS;tRIy>OKG0lHtaR_Fz&(+kmff&S66x7I;8PP)~{oax%{*0x8=J! z#X7#Z*FE9e(5pGD-^%xFof+mk)t(#7_m_QuoGVM7R;n|IzoT8hgDJrM!bQf!~)CqlAhJEw~a%3hMci~Ucdl~l7mu*wl zN3i$g_lRdN|DVA-^;(O^`!i{~v}5|pbwT^R6giF+kexL7V_#QVj<+hk)33B8Px3{t z^Z({;bQs@h9+UAs=View+Q0gj%EacedDvx@iNP_wqw%r)LGn{%Y{in$JnVdrxejDP z{lBike42a`8*8x*4RjHz7`^sa(3bKl@L$Mh5V6y)bfeac)gN9Ltl89kopZj5{_J1j zgK6_EdPTOOP5PH313l!McBP;2`DKW+Fs`H2KCNw|ONQ`G(mv&zY?W^knV6-yRb6r`s-(k^xsGGid?BeGfGUmE&FPd8;+ zoDTJEhCEq^eAf^$St-k1EtI8Yx;vTm5SJ^arhMb%cm9K%sZlJ`+f;gtIF^bl*y}2v zo&<4W=@YP(139_L6KXRn{?r{hG<e@GbmS&w9PVH}aPmwl&sg zSNrEQDBkn4;GH;Qd?Ia8@%Sv(_Sc6(w8NGA&t@r9w^a4;EoXP(pHyrJv4-4#mV4pz zwJ7;KsViT%70~%TMv`?r{P}Z+$O&ra&*r-Nxq(d7UX{`LT#EUv;&}*IgW$fAdJp2e zYAv)?3JlGK-|{;tZg0*c`a!$cdp}Stt6FzL#DZ17GCYOI}!=-J$c9 z0{DJPE#xFJqBPEU=6wKrQ1kIbl6g9Q#38Q2Td6&mQ{3QAbGcc^3p9f=S<=j;`H$T5*pEGA4?C!^S-eTr2_3 z<{@I2;N>OAyF`3FWA!d~nsFCv2D#6d<-#yhk{1bzYw|0TDB22HXp@Yz@PMW z8^G!N)a!ZOE*uCK!b1soAvu;86Q*Z+x0~lK&wdCGh-Qj~mj7{FTKb8YZTh0|5)SJg zc*&vV3xCLS0eH?=(`}yvzm1l4inAX2;NZCixc&xp3nykWkCSJhk#KGZC$v|YvYdAF zE)OrP8&p)>h`azdKKN0%kxv=kL>=8}_Jf0UvV+h&opJf0;NNW~v<}}*eoFD}706xUH27XI76x-1)?=Iiwp1JO znSq8>PWK=86JO=EH`BpZs*~;*J#Nkw9>A%dY0r<&N|){t-Dhz&iN67V9%Up~CC5Y1 zM7rhbGY2w*@Udk10(|C8z!xO5Ja7Qc-l z#yB+7S#t@#^Rf1_#(?dO#+c)J}sJlNcnSc&sk5r$@bM{AV;8`_3 z4~^f&ibLc(#ly6x*1DA!tjj5e{sUn1S(kdaY>WYWf_b!+x2d5e`=BC`3`}w08ao_9=Fx?99dexo3ifZ)uq)8|0hRm^+j68s)EIk1DY_;Da_z_BiaAvcp+-#R+!D zl0U>vZawpI5;PVcJ)_ zqInmxN@oo#wyNqx)+-ERq|j3~u@?OuLWsV~GP+ik+2hAFHUKu>XnJnTF)8i4zP|GJ>WJa&eR5!5y0$G3f zc{h`TNk?mx@)a*cN5-++=bOw8n0FkDe@J}lTZ8>k&=WpnoX+{%!@GsZl{hd7=kw{$ z9CLl1Uc}o5*++QoQqH9!rsdie*34Q?u*WiX&eEP{=3287>)rRicqHf2{xiPe&P+-C zI=dgaP!jL5ty`Bn4?br(qT8~$-T38t(ZdTo_)6nPXW|K91kO3YDOyTz{_*{Tb?<^F z@vC_COZaE?`=j`LG(YOhltur|vW=Ae9A&j;JDSfQJM%H8%Va#9*_An9zTh-L?~mlG zp#op+LtgEB){|FfNM4DrD)W3LK5m4!#J`I75r6fk^ZaBT$#{mR@;>U@vHSCSRXi3T zhpm_Q+b*mVhv#MFv-l|aC|OklcS$}@daB>iSkxMp#^Uiqv@wJndx&{(4dV$OSN-(` zSlAy$y}-cO4TFy`dQy9d#M|ZQ&~Eq*y9NG{p3Se(PuF-uPKuY>&ASiT9Fl)m%8o!@ zunxx7R`eV;#dM4K?qq(y(pGpX1U>P;Iu#N0X%zi|tT2)T?o$Wy^96k2b+Q%woSR5~ zYOg+T&r&q6`+}45dQbKIBi$D~Oy>m)I#2pgdM{Yec|mlZ+Ar$7)Y}J%`&PfS-)@$C z1LsbQMz837Uj@&=X|igxzMI3b1m9Z>|q~%Nc<)8LpJTi4~gz+BNk#p1b<0- zK_<*uU0UPPp6X*tlFoeE(YTZxQCr8*R^wr9O{c9Iwe^%~EPcW>nzx(ArnG6i{~yG8 z@;}JG&Mg%$v@_Op#whv5PnA95&5z)%A{{=;UR`wxxie`uW=`AyX>W6SWS*cP|AM?Mt0&HnSP$Y*T1qg$Fcz0x|WBc$o z`Iij#SHATYbD6rTjz6RNh^0F9n326Fce}6f{~G@`{|9{ey-nE1t=qtd@+|mQojz== z`nM4;*Fu7^8DpI(p3DeO_&HgFnx9FXTRM`fd~ZZN8U`-$ynK|UCS!*&)5Kcu6XV|- z>8p&7^o^f8Vt@5VBhFXf9SNU%%!twP%)hE{+5Nz$ybAtRKYmNO733FH``(_X zA^IMt?Id^wj${g((E=XeXo(GYXMG22$m8zgd@YmsU|^Ar^mr4wpQ&5%9=B+Wz~3Rp z{k9W+?fm4dUn6VgWwx>3Tl+|Vau!!?$I~U>BUbj@^Iji5@3hy4tK{pUFM;rK+vr#` z`~F;p+_ya|2lok(Z_o$FQ9+#j-=|283}}Ya+*uP7j?Ham1Yl4DVHD4 zS$IY?`;{qEvlZwHgK;;sHUN)&N_%PR8dhx?2FKY@q=&Zl4CiR8Z+v`YQsotIiN|^) z;1ql|u{ZMfoNL1##yZ6{dpN`Y9EyS?{7uzq%Q@26y6;HiLH_esa$S-#r+?oQ@ae?r zRoJnX(~Do4INdjm17;Sw>u<{Y-+udrf0}1b8Fza7tiLoI8xH51s~BzOR(01O zzl?owdEBb(d*=`nYETFANqHH@dwhWmfEJR)A?mN7euHRrvgOzd$#1{O8E6XV5SDXmqTlt$aIA(@q)i zhtv;XehK)OAZKm`2gI6Wi?|ZKg~##0+lZ`qq5w}VbAaeUVNnz&{7W8V^N%p|s2be(%n^+4u+6TKO? zoVY1IN3JH=>u2CgjBUW5vCi#gY_>Cweg4{PdFnR1J;i?8fKe9+mu3QyCm1WN-+T6e zd>mI~54R)7pzD?pGiuth{nokH?!xvXELB=49Wgp6+PB z6C{qR@spPGV2C+gSl_4IYs>f^dsg3@e1BHWTKQ6@`XbiMn<9^6XU@tliT3s`AR)D6 zN>9kBcyH_$Y>V6M@yB0~(Yd!5d~zUDhU_V!&l>Bm-Mq!^Mo)cW^*~1Jz1_$p>*Npi zKb(Hak+0~_$FqL`_*CBWRYy1BxI`Jnu+%gg2Iq1nhp>SoE9WKq3h*-7#F0Z+^z-&lWv0auU2H`RB>Ix_3X6cN>v+ zDe_Gq@07E=DDR50t_)mEe6}|unJ1rwHo9jmqKP_f>P`806zr_^AoHyk|UNOTHNA{n67! zzBD%Zlcgh1oQ9sH|H4ge?Zc`=axBI= zcM$m{{h3Ojr>lE2bKv7gkL=BaQuqsFo88hV^;)dq@LY7KpH2+eLeT1d`U$@fW3tja z|5$6~y`Nl>xp|~Fb6*twXb-sm>yy2iTe+XjeT;kc`+jGO+i?1djPg%>?fey)O&4r& zufKamM!9aXTY57KxgNld?pp)Bhpg-%-yQqCfsA}TiNt_w@m(2nw^@nJ?rdcB{Owyf zH)nY!Uc(jGHt@apV;0|whhx4i?kAp^PI;aux~PZmkz+CHGmP6<{~2(<0iQ216-PHc zv(Vh^{;@hrA4J0oGTT%i?Nz0^GfSzXhkN06QyN&PXQ#nE?WV&6?!+T{GxGm*9p6j+ ztjnC&n`!0!33m@<>UqB_%^7JXvVt=G(E;~9`Vff?xc38pG&SI+68ZI%#qj}m3ASn} z^f?n*5HXM^{5EWBozJ$q@f&9Q&Uy)bVy%1B-0k=j=f<;=v^BQoh=EMaaRbm6*`5aH z(+2ik{vvx}TQ+-j;%ogs>cxexpJ^N*9wq%p(`Y}6Gp&wnFdht$7p&AU8pk#m_58mT zZZO^-(_pl5?K|snw=_K`13!+9HY!gLG7;Qu2yb@BJWUK+Nq#*=W6+218e4EXa&u36 z`)0S=o@+;Udh?LSq#u28)|qX-Zzs1<4e_u%YvR6)Yt^2E`)7fN!K2rMcPra-(g*wN z3@a-F_BarZ$p!Q=_HVEiX9*1z3}%_uG?&QJRZo*oSMn) zsmZX`ahpBU&Ezz9u1<8>+PkhefY=wWa`)`DbFqKE!VSO+u_-g$*o3QHpV`B{U3}u# z0(*G1eal(+*iK-qfP>^%)_J%$7QH+2u)W)9GvPO$CjwkMeme5mvDh7a>oaPymvkJc zMmMuWGt;T;cx+g<1Umdt^$EI;y^*y$@qq4cnKZ%uUFGY;+n~E*rG66L?I>pcS7%(9 z=|rxUF&F*i`BOQEi!&pbLx)dAMqtAY;fs<@D_!fLb92azdsa>K?7Cg6e&p%a_m1gx zzX;yMTe5*V&*(+pzcBoJ?AcxP1wO0u8RHe>TXF08mZRKYF&tO&pB;3v89t zWyg$!r}eU5$I5@&d; zh>{ZwIAt%$uJj|v1WQ#Db0EHd2ABpHP*+sCjWY(|tDvzgCmC!Zcjdp10~<2WX-?#6 zD4yGd9m6@O_7M09q&jWS##!{sVYMatHPPN19sfF#>o_oyL#J4k+p$4@G-7`BoRKG( zE69Gah)8nrF)x3T6Yt8~bstH;EXKm}_?#bBXzhPZi{0$F} z)q7+7+aotpM?>Y+9xaQs@CS@*ZU(oKzy3=0Ai%fAHM@t6YwjLC@tQA<_{a17H1dZD zXN%Shd$!%87ltLXK1Y3=3kGf14KG`C_Q*+#zRVo#%Oh`i{g^v)^2(FF`HoTfuGcqb zd}3tR${%?;)LP{m5kKAfh2G3R!)ImKaz@85JiX>r=511J!KthTUv??)i_d&K^PASp z&ad@mcF~Sxy3z5n_nlRl7_rCazx79~9mlmk{y4cspF9q{F=n6}esTEy=E(2f;GOsE zMeWlG>Ga7SciofmnWnS0P|3fes$qPAOv%n|b{?i?Zz9;KNAHI{H z5IBDj?09=5w=z#7V4mtvSr^=t`rTEM!L;MqI?}ED=5x-p1wOxgGr&~yH}W?u`;))u zlxLpS-`*)3@6_L)3fG@cIm`RY7T&*AC~sc)3WKl-ew@#E3fGMrX|}nZI&P$X1M--@ zwnpLA_-cFHIOWvH&s{Z-VU23vPqn_lx?2i(TKQh%u{pKbT`c|vSLHV@w_DIfPLJ$) z_Nane*>TeibRPWIPFq$Qe@%hZ#{j0Dqt zx%~6p`LW4dCdhf18fUU^v~Q`N_A63WHcH)%@y+g$#*g+jW2>0RfhPE}Im#D&;; z_u#&!_-bsbA9?e^fN{sZR+IH0`fi|0H7At4GR@fRe!tt;-^f*KNtT`Do1YZskojxC zxO<`Mr+fK3q{YqG#PaOCj@$W4V!ibbZJ_ zmvNbwCGt1q=i^I&NqHqC%btJ!;Qpo2&F+Gam1G6~0_Nk>soRscQG8*@&7v&UvmbDu z;C+nWb147)#t(=Y-Ry2W)5Yudj~rto(Aj@G;tBuN(I7i6q7 zIs&|Ud(CykDSpY$VFE-u_(%zQWXCVXb+ z<$1*sv$B%Aap0`PR{O-cMs^Sxxs>?etARtj@6E-bq2}rl@Y6bZi@U_s+TLyU{lF_< z;5h$G;9{Q&_J;fvzF!R-@>NJy2Mu6nEpuKgYYDA8ytRZA8YkLaCcLRR**NB8#2{%- z*1(+X-YH#<>CVQXO2qVZheg|xi=X}1@Z}wIqgY<1hy4&`dzsHvFdvP|8HN2dg0bD-Q zPh5GIw}+_0UTxnPKKO>t-1_%$uVYxh@#-G%>Rz46F@Kh0r2e2m2V(cJKp5wfxwzT+XerEa*{*NKXU2L=4 z6Jabu`(PA*3osaQViA&><6p~qCOkpBpY(A>$BV<-+kudMKz{M4iA~8p^Pz{-p8P9K zX=qWP=QUmA)TV94tw`=DMgjlaqm?ma9`#QjLcYL@-)0?2zDIO!FZAd>s_F4w^zi!Q zKVa`Sx}AI1e>pmpI*gTr!&51rm)pNZJ||m^4{n`O@$w1hC(0X)-DM3%d()XlUwy<_ zQqo|^2Hk=L41bu#$vGZ%L(mT>QMLpvK=h8DL5=Xj#_Yr8LoTq-{(_{Ni zc*%V<@*8Ihw&b%72G3?X^U&qrsq<&A$2ano6OYKQ2?XpK@`m`aYcFi2UenIDw+y&z z0~76NBYKJTsdmP&Wo&l$k%NQWt~o#Z;yy!L+v2;O>y9qTzK4Ch;OL99e~#>SBsWat zkuTxTXl>*L+s;i(47iWYwVW9ZcJ4uV^((2LzHu!4*#h4!Lw;R)qvdR(>~wp;-Qln| z(Lc{AiLS6WB{sXOQ>&3ZKN`{cUAej3_S-K~cOWxFoqG~?ZY$TBlhnp$_mRkeyE?Mm zeh>WDM&P~Zi|%xuSJ~Z}XNiG)_IL0)ZS>g7?M?7R+1>&7LEe|xFXq-EJH<`6q&f5Co)`hxZs z#z;1mhkub14r;-pFIvu+Uv96C_Mq>1wii3y-0Z#_w{un0@xg?F%xW8*-VW@*h2G01 zfTcUmn6%fBD~ueP*iZi%PdU{N`!(z?=zLW+cmXm7d#N_s~DVq`=ukDz`NQO42ok~;=yGFuxrO^zIc;xama5SDcF11 ziSkeK*MtE%C(vND@V|JwX)M0SH2h{|rViQei&SRP&~eR-iS{<;eqHo8Flo8%ozDrs zjvmWe3!hn=$xVf~XHMigm31z=I^&N9J-iB5-`q~ygBv;LhwlQ&rV_KqUOJZ88sJ_6 zyontH?nTt4IaLV$+6n&z82_5PndofImB>H#rt}%Q%v}MEOZlDs^TE2U_DhUy%XtL< zpLp{XV}dK6;%n&%?)Si-{4)Eq| z=NKPVnzt~X?PzaiEB?@;T-3Tm8GZGot1?Dx;J3H@iTDxvY#<+s|2a6FMeI$Sdrzd zr!UW_T9rAKL#V;f z_~{EPmmzx)SWnivIODeBNE>+HR_rDEiF}du*kYB`tvwB6j+mLn)^u8ke^)Fz_EMb> z`h@6XjP+N2Yk1$1w*`A+4l*bRY{lG9zh(cAU}G=DKINDe{*)UzN#A_YJAW z#{3>PSlbESIAe5Nr(=*u+8<_313vRr&hXYW1fS}uedGi~>k({MKzFQj8(EL&OVKZA zUT>j$gnt7$LcFbXQ5n1>IH$d%KE@R1{b&%}*Fys%dZ$ZHYT$a_4JYq(F9atWrZ(Ac zdHsBz@-wq-%m+i*!jkE)L{@n7AH|Ltk>}l8<6|>B@ZDb~JCd@W<2xe)U8y^qTIV(m z3D2L(z7ks}zSv%#x*=T|`@GHX=lQ++MC4`&d#fa2Jrqh<_f$mYA{(!E0{j*pL$T}Z zQqyu)HxPS^K2n}k!CfBh*^Pbne2{&=UatB0b>!&APmK*FT|?~RlLmcMTd%~rTcfPLl_%pv%1A>TY_wNGWA?}=R1UpTi;xCQnK#%1;?#^tu!E$&h5lT-d*jRDbk z?)#zr&r)}Zv3XyZ{KQQ|`8fVpVr$%hnaBIJ;Jbtz6UgL;@X6j2id}053V1DvUu*kE z;q|%#E{XYgQaFErx}~?+yHKHdzwcAMeuH%Bl=I-4U!*;F&(mJ*L;LtTS9BM>E8`37 zHANVpIduO!nk!aGG_N^?+p9jLdHh3~i#J5`xgMNXen@lLcqQKDb^@>La`B@0Rp%M_ z;xpiN<`y1bQZIOWCAQY}rDl4(5@syW5094vksH!gk%7mVJ3e`@{4?;?XAa}n{8-Dc z|E~mI!6cfASH+*|3$gbvu|~gJyvn+Y$A5XgT;a|UPR$!^z^UGCP@s7tY1)2a)zHc7>SGXstZE&%uSVv)ukH*<2z?pC)+T=|es&Q+ce16y^g(O@JGvZnOV z3C7^L6LEh`ZT!}H5^QQ-MrNpHN zV(fiLCNouv$x8R+3}g4%p;`DglRderbTY!TbE+w;`uuzsi1p-l8@XH+v6;~FD`wG6Je(86WD}^@af;+*c`}K*>+a+8N5GUd7c?8a`7`6!ILJ`(jS%9F9(0VD z_8MFW$Ju^G5d83tGnZlou;(7ck=2rZMUKML-4_K7%3|Y>{4ddKU`i@*>gzwqwr}H;72QzGPY}wY1 z2cP?b)>G&g`~J)>TlV}oWRUEOvcKL*UJz5+7FDUF9S0WqS3i~NvR56+y#ACG ztRpYaO>7!+4o)Z?`xWzG$J*;`cROc~pIn*%KDFZI8y@i2E@Rysc7gC>MA%n_a-WrJ(1Vfltr1N3Dv!?U{fbK);2@M#h4{d`@+sOKj~2AAxs&KH(Jm=Mydf z4_9O-Qm^uG_}7$Y0&7;VCJbI_-|vGr(#l6c+w|qm)RT5y+S+q$+S-vm@-oIw%&9Vz zr@H^^it(Id&w;p=ZvYe;W>~FEAIv0%T zveSH{Tnby$Q=K8-ROctarnUsnPg4z(+DT@LTi~`JxAN#N4tDP5acNv)tvwFSFo7%0($d&iX8IT6IM` zY`(R{^~Wsdq5b$w@1Cw6ivaJ`7W2tilu%0u&?Zx>)}1jZ8HsgBKj|KQLT_o7dL-^H900PQM= zZnMRc0SmdARLoBlKWtB~JTjQuc=HLKPrI9Xe_-4NEn{8|S&e6ZWioRg_-D=lZkFxE z2B}jVspR+S-y7s@Wlxg{-1tR>ziGtIhALk_LiBpE^6}xSf()Q8?=Mie#^8f?{-^Oj zj{mp*#60pn(-00t-vE0c*H1A#8p~g!G385G&gtezZk2N9l~!&x$( zE(`EoHM-~pGnexH67BJ)yY&ft@@hm4kwgZw-6C6?FoMcj-BH$#KD)Txx? zeZXd~BJlcB$xQWL@M7n6yf4+0t7d1F>fqTqe##j^@ld`_V#ac>TDe^HeJdS5{g9rQ zy_R~QB6|^dkiM^=9U~=u$aj>l1V`udZmP>MJfa<_K4~Z@Qvz!EuG65jJXQR3r5XX%7LREI8u-1 zX<3;9PAdkjTpt;<|$LZkHoNPpvpWURK2gcFapT%X{EF(NLozA_ZN!Ul>9YdtVIvQ>Re)PChp2CI4SX2s#*e-HsOKr~jXlPe zKXldK@|DIMV{-JE3u(;7Wk3Gym@Ao&{gXU=%w2{2WX#1sV$8u);-`}qvi_80EQ_Bg zR|cIPIPSwShace8+mj3bcFa*O9s6+1RnTsJ%w37^leuVIbi68i55Il!i!(=Eg?#0H zGj(}=r9FRW_TTkY{q$RdxuSew?aHa9tS|MqeJ$&uukhjD%9q*sz5>hN$(KT3oBDtQ zcr=E*{n?b&`1u0;Z9cCeE7&wX#OKxELvqiEv!9W28#Ja;;EM7ZR~oy4IIyxF;1i72 z>WpY092)j-&K8Us!zJ<65yLC1F$9c!X5$CwfTdw02PsWd!3T zz~6IH#245`*@}ES@m_n9_~)96Y{>WsxwN18$CG)SR-3>Z9?S`+DtkCiC5Ng< z;S^iclXK#qkntf-u_rxv1)IkD1mF|gA2r^`6=An}avM|E+p;YxX+vifbmKBQTxXogHQ;)l^JnU@nG>X$82q*-Vb%}PemjCS@t1g!FJR0v-1{9P}v z>GGV;=MwCKThEEZ`-iaOn|afxxw+_Mdipy1J!r1qr949?W*^}GAN8Gc0lj(9AU3&h zE#LVq==55HEBaP8WfI$DDbM;?zkC^7w+MgqU$WOQxeBnJDBUK)-g?upSng z>3lU{JgRcn5c|-C>=WLld#@s%RP_ixjr~Z0CS$5tPi(gCReW(PGE)9jKlHzZ^5PY> z8$|y;LYsla(V27DE3oJ|&H$ya^23+X@7ZD2+JOB!<}tco0&IFen`fQy@e*X<9JS5d zPxURJu8RkHGE49AW!vDVi#J=@c#<`{hkV&3oxbdXPxNHkkOOm=lP$zHn;#?2a=S0< z#a~h{bNW0kn8W&*!+!I*#rE{{fLj_~OODI#%+B;WcUQa{Tyh2$Yo*wHJ4)hNfjgE@WQ&iD76InS<459X#(u8ijip0zU{j&WbkeS5mwUC8|`?iGJ7yK)Y{ zYx!M;FMB%IZL~ct*6pTQXHcEfDZjW--=-PO_B6_rrF(M9nXrk8S3Bj`mzcmteCb?Y zRz95yaHPHRo8~p!v*MfG+X*mO%zc92vdyA=qi2=Cq&lOY?*#6iTpMdJ<-ou0u@mg_ zNKbAjJTSk(mldo_XwM%R%*{6Puy#+r*4{CBneC^X^0#XIegpe>K4rxlbNEiYzbERA4 z@s`sn#zxMo7`xQm9O4?_n`3yV|I&atFTB*mXDC?d^HT6ISeSDa$JZ&0%>et3IX}M6 zgHNylqj-BU-_C2}3}faGJ@95CGT?qk`zI(PeqT(P1^=rjlc4Y7?H$CH2!72$+rX{( zykC5if~TRg;@JX>|DJ^Wrcw6N>6+jK*EPd|2QH;CKT2Db{N7kzWm~{_zoj*u!CV_fXe=jb&vX{Ij@k<^9Ia z2742Av~j=j=S{X^sk8_AKDCvm&SM*Fi}$TO)0t6$wB>AE(PYOcw@}~kegp4Y^qc3R z%P!^*<;lUE@O8nLmfLe`d|AzPZ{gmTz-A2R@zgnHuC249g}d!HEw>HcO$+B?U(?lK zOYTK@uX@Pgkh_KZcHXb~dV^igeU#r}+Km8BXKNemLB6fvna)d8 zotvmb-wI!iJZmd_%ZUWpN}jh4>AW_|KHOlp@LToO>z=w2lvQ2hy!R9B`{-BVA^K$Y zI174}4fkA4ADIbK*Tu<|d#$`OW2ORWKZo{R47JQwfv^X!(P zJU$mv?<}4txsUU1erlb&kb95Ehk$L!+VQQQ-e8v|uD5H41RuO#;MWJKe?H%T>(=XS zogboh64Y%Nz;mN7+e|&>Mo&)h$ny>Qo*2x{p`AOC8pZd%c|+ z-(dGqE>4?*>5lK5YMZ?8=lfLQdp)nG4*BR8Qipus`ffJgXk9tQH^Q;W?t`RQ^2GwbhsB``MJK;+gi(Yj0gyBF~49P`)g(&g}_rcGo?8 zf}P;K5z$`XZOF|z&bpgUu%%Zkcos^n%KaJ}L%wv$S;<$)RmoS*Z>w8E9sM!ss4KGA z+!aQ|^5kqHjZDS{T$1F9UrlRlfy5@}&Q~~J|6-T@v-l-;Af7}gF5}uy+ua%M*=WTM zUz%e5Z58v(uc9NvD~N5BzS^Gs*~dT7d4kTR4XjJRH(H-)`is^q26HXrE3)K~C7uae zmT}e0eYuGp$M2xYe)RNA?5LTpKRna*MP|BHtP_>;&NnXU1ll^C!{c;YY8ao?6|iQw z!8EaD#thdNp5a#D(=p1(|4^TF=9ZC@g8i1tp<|Mhf?R&tKjBN#nu6>^)gNof`)%(< ze=j<9bjRekuZhi4-^Q$Dg*zI*FggFcZ{4mkWawv-P$B01BY z4s1b_J}|HL+w>Q1hQJ=-P^4pgr z(2qR7uMR&b&xCXJQ+VEmju&rfE^=>#a{Sg@J!xP&8+qTtL-g6U$!VNkk(rZLeEr?~ zmRRU_3p;K*JUrBs)B44c#>#!|#)^#m4vJI%U>tdPC;74uZ0gCh#{1j=u+Qgy$Xb!9 zE!-!#AII+=_JQdAV(#k;@8bM63%_MkH}boQ|7QLp{I~EQLig*tO7J7UhHSrX*87wj zTrt_*^yvq&P55cA%n(OZ5scrtSABo$y@Tv^@3m`AJF*y3+ehADpRwnay-8mp_NmXF-JC>AHOYo*6NfOdLb}~#*&MFh8~KypADaiA13oYD4g*O zos^x-{N(`a3F@Qzs(#*1KhL9Faenj&xJXi$LB3km@6EIL_7`O_BP{}F=EbSU4*gQ+U@u`llt88&N6TBE|B;b_g-L>^HW-!jJ8t3*8F*k$_ud+K!pjq7EXzbA_xQCr0`*mmbO5sc)Hk5!c3aUqWiMW%q^w9E2-~!>S+xubD!Zl>wi$+ z)6`dU#Inpq=d(`BIPsx_rnQh~3to#gE^|Lm-IDuLXlFk2EA_Y7PvO#wzoqZOXAzG- zqRuwt)}z%unKAX`E1@op$2NF!FMM-CbVg*4#-z7CSuTGV--qC1 zjU#=#mVHJxydi#Nz84^W(O9izUj7MUhLc;|tN*1(>#td@2Z&^9NRK)4D|j;6xYJ3M8urb|s3>dE4;w%8_So;5=gW$(`)13 zb~m|i)UIL)deFz38_TA-cS^VIH;^%mtsTJL?@!vFq25yL5ar-piq2Xa@Y@=1>KkW9 z5i(et`#M7Xw96Vl4~)w+JmM8wJk?;!p0DSQd`c1yV@ef&!@@&g~YrAumQ(vR_t?pb&syi0~ z_E(8D2vd$VvWjxWJs135)^nR2p4F8B_fwP!q-P_)W@P)*^gpfjP-v5$hu)SPL5B}* z+N*f)8+M)M*=RRx#YWqD8aDT4cYNV2s`ECja87v!ybpoT?Z7;=%GO*)_wT3ga>}^Y zQ^z~$UpdOFckCu?;*|Cod^)RlW@>S!ihfL@AL>I5=N=UM@on%ZIs}F;$ow#+bK1h$ zT2phUa(f)#Ub>c8l+-F`BYhFR{o#CnO2Bt0wJz5QU)P2U{R-1BertU*IJ9POkl#0q zqhIWKQ@J}%!cANXYtp{@Cq`t^4BF0U`D@15|kygrH+f?xfr z7k$!mGsp7X$G5G*w-0TGx^v&4KWan$*=k+`?}fADQk&him6f*ob@{{eXK019u+Sgh z|DiwXhdD%_fa(9M{(Ndwe;%ek8V?`UpN|##W29g4_^rf%KH+sa@tt_h8yoPH`V&m$ zdG7jMr+7Sf{UAIyc#3^2{Pyue9zCqm{yy|ESkAnsp!=jPKbE@31HJ+n>VvCF}ryN@{ z7-h~Ud1s&pqTRV-oRG%R|JCu+Ku(IXq5QgNd1Jp*3a?xW+$HdncxMXs-bdE|4{)XN zDSSzeivPU&Q~CNURe!2GcloILZ~K3^{;7rf|EF{w4YyH%JG$vZyrif%7#l^8Sa%Lt z@MaJm$kPb_ne;XI3}XXJZ{K%9KK4o9Zrd}-uwOQfmdWT=@=WW@;XpK%Yvw+p_$hcn z-vrX=GM+Uu-UH!Ou8H4GCch)8frS%e72$39l4g9n9Gk5e!QuKyqv4r+2^!$;d8;?(LB$WU4A3_FY%O9qPDp&q1`53 zSvwdv7k`HIMdI`5a?X(H;|v*c3C?fF*U`=yGU)LZ&R!T7yD-!IPqcFZ|K>7VIrUV> zJH%e79^u%eANAm45-|H?y><=ucgq-jNtE-&Xq(@H!Dl9OA;xRasLifNkNLT7=j!9i zzTP_N7wzdh4!vh^cIVa4Br}&Dm&}~OetpG%uvdfl6MRCJm7UgzPqzy?PG08onN2*yr=W)74tw__1TxW)*~yFt2!J;21Qt_V1I{leP|zy?A9v2 z{|j-XW$;Mp5bLh86XBf@{N>>-rTo8xdk^=2jNzQu$+7|1-**~vt~P~T5>4hjImel+ z@29Z?z@7Z<O|=uJ(Et9K9^pVPShAYb`9{P2HXjUbp71S zWc0kAjls6^rN|8vh8GL)imwCEE|}WvP8hn>!>#adg6khfu5i|&CmSP0J=yKtseVQI zUN{D~esh-B#}aTH0_U0|o6ytiC-_#o!PH%QuWv%PFsGJonTT#FqyA&3_INn|IAf=Q zoWIgzp&|T!!0AW7=vzH|$Gj8x=_mERWB$?+tTl{T;cxsvUUC15$hmt$Zk~{Eg%XoAj7pT z;|Cj#^S?cQeLs4aV+#Msp9#@+&sL~GCz|2KnaK}fD?m5a$UT~s!Uv+;RQe*DLpeXh z>qC)WI_rW#yZu7T`44j4{RyA2?1G5a7>_LG_`E`Mhy1xX(YyA}Zv|fRF9_ZffY;-V zhA!H@Ak*^kZpJV2Cqn(ml4jZx4~lQfqw8`L+cch#HRu17lJ10S0Fv; z^{bM;s9zczr%iv&!}pTt_uu%s*T$#vI2^j3xzpg@xvluKX+!?(6YysXhc%~w!_=jj zN#~8iA->e+p}f2*qwPv;&O8no*R&N>{4scJ-1fYO!>!9J>X%=mY*~^Vhn~6J@jF-;yoEZ}r8G%#@v^xWs(Fq?6X~ zowpP_276*2I67H&jC7Lv#h7YFHhMCVe!Zi9nWOp@qhB|vUj>~+zYgj0V!!CS^m(yg zU#4Gs)i1`B^!VTQtKTW7Us3WYs9#h0uIaH+eM{1}Ss(VT3c0U7segS*;6!eC{YucU z^x)pb3*k-dGx6q0;!R{l8)sz}Wre3>0fwu$^>}8o0CS9IWx{&6+O~0w+~FmpMM# z7mofl{{1%sF~%0O3cx$EMFPO{MQ$ps0tXy{HO6(l&z7%B944L(BI=JMOgZ(SS5M&!A2srsO6-jAJf zFUIF)U`vJ!U=B0ywDN0x#@n2?!rH^Hh*ghMH-7BwXIN8<-vRI9vzyPe#&9xY$`8qX znYk=e^M}y>a(sI7?^GIgfQ>m7MgQV%*|W%vN@(}sIqXk2H&D)aQ{^inFXsZ07r3Sw z>nmA5xyIW&A3p~_An%vW)jZ>>?9Uv_xf^%_VFP|hXBEdq{JI@XcX_#ACq#UiR_G~u zh2lNA7Ji5D2byDmA0J|)t~S1Mt^wQf`An@{to^&Q%f@it0Q9cV8NjB_Ez=ouvys>E zndJ3}$m>a*XHmnx?cLPX;-}s){ibfM5y^k3x;2J{8_}JZ_1qHre);J=naCPn_SEy4 z&!8veqql&6Om$bL?)WZj{K1@QktaG$-pez(GFl67guYtS(cZJLe$&5es7rRck-$H@ zcx7hVL%wV$zM8yEOb%3=v3-Db3idMDtUsH4QxUUj6r&Tub`C=C8(AYtGA2c@&w*F% z1y%0ri;l3eE%;Tnccj7u_c7uXeDH2sw9W5_2zBus7+WbPKcM!3>wSvY75PIHk5<~% zXO|_r?JDleXiqR%T0=Jay!|Ee7ZsoN`uf;+gsn5`na?0+D$g`eN%Fo}R(-0XPyULr z*|E%H+F83%-mv9YSdR9fDc&j=VZD8hX&XE@jQ&I4Dt4d>yh-0SQFcx2L|gl_LPqzY zGEXBHyz@Wkzs~k%-}aNcp{4q$@#TZ(!}OW)<&dlX$^1IYU{1bm&u`818{nVaYx6i1 zy{>~^qE!SsUC!EH*LHAWAd@DtMtwXvUBJ=gFLY-nKHHr!E%q3g*m$&2cSg6jU-s1V zdCs#&%873(3i$je8h=3BMH;_HJXev%Z?G19IE}rv*8e7rMPK1S^qmIX?J^Ksv6fH$F(Nc62 z4K;2jR_Ey_I*Qhcjrp(Wh=2YN9hZ%wBXZ;r9W_obV!RgV=#9~s#wqhV+G*##ctOwC zCz|Y5a95bg#JGtCdV^$Y@r^>1W(VJgSjznQ(3?7_w2DCHoa)97_bTG zh-dKa?a za*ibz+jX1)0KEAAEGLc4V_dUm*tcliu$QNo+^#xT^qU=_5g)&m?^Suv^ZCH%kSA`} zu&<+!e0s?-Wy!uV?4hk&RIu=UF@w z+u}YFhaY0Z{t%ZirDM-)dj!G-3K zfpjN0eQo$#;QLH+jVTAIk?!{F`gR>oL0F#J90V}FGAY*yjfw|S;A?5SWMY`)xmJY&pdkH0mr ze+&BoY@TZjJ+s%?AO4sxdo=d+@x*AD@L>R(Qu6~7S_@XiU(}puWsf+G+=u+uyXsND zk1YH)BlMYl@LlI~mKfJEXkWyW`pVx=wH~eh{^~dXlnK(umX%xF7t>aDDe_r4NSi9Q zu-}4n{c1zmKGuzu%d44p%@*Sj8P~(OD>FCdHuUn{2@IoRz@X{i`@v7F4jii;;*?now0IXqu@U~MFdqbR4YBgbO&5uC~{^X7F?=90!8d*cf!&)iz&PojJn zpFxCJKg}g4a<-M$22b~V_HlB2l3NP-(ZKUE{Mi16q~|M9ET7IaI8=AKQ1@Z5cy$9$ zvF-pm0zEPIDC(b;-0U7b9ob-EZ>GTo^*4M@IwqcBTswpJpJe+l=%rm^X|O}g7-yK9 zckKPUGuFs~HTj|*=lJwgVnu*;3No8HA$bHHA3DwZ7C&z=a>w3lXA`5v{6;ZaClaGI z*3VgJ7w|1--0wVQi)%eg`w`B%XH8i&R{xUJao_RJ=cYq9Unge_hI?H3EKJrLy}C6= zkKVC&{%rh()GdGEiTDd^14*Zab&}&E7iJb;O-u>7$*S$#$vLg3G(U&z7L4qt zuSznHP(R6IA57n|ck$tKe&S2pPU>=wk50{)%q_(q)@LmzIae^>W_MlD>wNuua`r`g z@O|uYyNO*2!+(|R=`c(y`|`7#!vQV57$(~G+A?TMc2Dd7e`{=oKUpj`!VwQt@WAA4L9Zjllsvi>xLIq$B@%%%Xo4cvcs^f>|)CK z49@yXb8p;WuR`w<7h_ieTOiVJCkqdg@Ny)7U&p?;$ocD?PpACOO|;8ccTSNk<98IC2yen`l_}rv?wlW9lWkRL?xDYV+?GW) z=E9Uyo|v_rP0-@C+@fmsCiuF+b80vYzP7TDT>WmQo@5vtb3W^Xr;A_Kx!T|OY2?no zaBgp4RL zf3UUrhrxg#+J{|lRnv1rX!dVO+>$0bXi92Mk`whs75M$0{ER3VhX;JEgw?fF9 zaH<{u5_tft+!-bQEY3S0Ffzu3w?Jg29fb#~9rO=yv_iKQW5A1RY_jPq zZB#b*WpoCMr+4XBwbg5*OY92vH|RWK@m@9kX{C(DcEDhNFXLLg6|l*x1AiGEcVpAO zHXJ5banP>XtK8hY^Xw4C`8OK$E50mK4?k(%9Xvoxfq92FcC@clIqr2PnZVI@3Qx z{^`tK?aeH~mTZgC{^=S|cVUP0WRmJbO{aa`5%87jhtK5y^Ts-Rucn!sk7_dqj`|9H zm`+>LiL-3x^Pe5acyoOG%C(%0&G|0)OE#hRFUbs62a)aluI#Z|v)`>v!td}xz*v(D zwgj`jCwnp%6W16BugRIn{1Ea*F^wg0WK6ox);whDKVeVO*B$uBvp2J8F%aI6JNm8F850?;T*qfnCd9XjSC0!P&FBQ$ z3P$^EBg$Ddv?W_MZpaqekc)*Gd)QtT$m+N;;2vGynTdr5+=u^q@JZqGT6p6Y>KVg% zW(kwBZVwqySs#EhM(M~w&u{OI)(|NpfpUoJHtaPhAw@9YSqooxnX!pTGOWQ1qahBmt&=lU{vbkF`S_5wDJ_FtRHe9q7byz{rg z+fAie`Hzg&QZH8h)-x~9CZOf5AqA#d%?rn0w8Y$_jHsohzp~ zpmIiyi>L6d^|F@QK$jAeJX?`vnTj;yo4raJ&;G;=Z+}HF$(|*fJxh&!PAU6>s$YJ&RCx74`n%#C+TO#;ZHcx4=-nx8IqyJ&>)k z*$5~HZ*?MxTn+$KBI*aE9 zWycWft^Ko_uQLt;f=lJ%=(xM9{B|q#uJQZOGc%p3jGqmBQ@o$TecHSC+lntgkNY-Y z7tHcmDNnQDmcIBCdue2MkOP<8|1-0v3C|{S5F84Z!Nd!D1K`dN?tI1!_Es%-w6Dt0 zzN*9Kf75)x&ioqvPyKUTBiO~f5P85gVH|uTLhdf@&+?n>*J9o_aVPX4=59K;BR}37 z$`#_nJ}m=($`gA6-v(N`oSP#D-%$UbfDdEf%O`z7*=FhsB2VWxYEA*~(Kq#LCw-bm zIr$CQ=O*1&(N39S|5fHc3jM|x|7HYS`YUHb*M8Ai@A9|2K*-WVu{80L@)Z1&;T2;6>`mWA` ztYt4-a}+tu^C&#m&bxNr1&vEG(WsZ7I6IX7C9!(Mu$wP>YmBl*9=8AFL?~M|smCVw zky{;EY`3P_tIWGH?!&ZMqO*_F`51iV7BQ0OZ2qhGmt9>uq*xr<=3n#2e`+wuD{@Wt zH|Q_H-Ar9ZvfDLQ{cz;gyS5A`zr#6&aVyI?2^r%*I3H|L-e=dxSxnQ$9~fCNJ~pzF za|IJ3;`{s-bB{ne$-H3GutG&b^dv$89ymuCjP23^3DQTfd9p05P<@BTBn1tJUb=lp68ia}z2VAmCD`3j19_u8Glo?&Ez)~b0Gt=~)eg$A2A(aRV^gMc ziphzMWyW8ka9(bCwC9J!?(#p5|Har}ySJLgF8+u3f3Wa>KUe)*{0IMilJVNkGmHa6 zJbQPN(Z>JY|0E`WxZiQ;J|Aa{%*P;a@gbtSlI{%RZ^{~0A%6v=F1LYj#IXc72VzX~0v6F#~8Y ztm{^FPuXS+#ALHM>_+*1|LSf!8R9E5g)1gZ#db?)i{Pvm zo2Ez&^I{NL%{W*m+Ozqw#+IK zcIMzMx!e8#u1Oa=lRgC3Ge6#k{kg1C?`N&|$NKrFKcye{w$Uq>oErM&uDlz++})>o z$=udpN~52%@f*t5J$rSdk6d#u&-v6_8A}cqgH3$Kkmb!-LJQ}Xs#f6;zYA}J;O#o< zX}5r{Yj)MoIS~GYyNJF1r%CEOV&je_p;y(7?SMYUfrqu^WhqZ-_T{eslL-g>NlVxG z&wufN-$5={36I?a}E z8(p=7d?9eBe4$g7FNBYC?#2Dg^&DV&dF9L|?yvjHbM*qV{Kl zL*+G0x@eGGu~n6h^Xk3{`Hd9cm3|&mf5+r&bud@;ss83()bHDj_snY>Fg~Wwhw0OS zzGd48K2Dyt^T-|A2*>aQW8iP~J?WyM(4QO2-!^*rQ{-WhPkQ+ZZ2J`_BOkGy8-2cS zX}|x+`rF#T**ii%(PDTjF?VpQ7?Ht75N_GqAHrLEnkVXcUnQv2Q@Wedp%UOP3I*z`uQIC+n!Qk!zSP*7?DYSnKiy$%lU$K5pn$ zK74dh_)i~k72-h1m?`w5_C+^N7&EweG{1y+1nuTyv>R*0BN{P-X~Z4WRv1S*n^?M4 z4C4>f>hlz*sd-&JPZ-DGnwl z;A=9xmqXuzXIPw7YuW3(Dfm9Z9JZsz zgfPdd8$I2mVwrZq)V~Jbd4hZ^`A(l=Jt_9AJPXN0d!98T*T| zO5P>C&B4s8(4U!uMt(t05;Go!t@$jxowIj#D6`0eiE?*u-} z?)IYJqqQl#G1hQBGVU;b2MwN#uP0tmf6$66oR~3mdtY@SmXR+P&)gj54{03eC@IZF z@#hlriF1w-dMR=cy*A$$`~=^+V!hG<|Bv_yFgMegpZLjpd$4K1GiM$j%TM5csTHTb z)owlRxVkNlyc}C_%)RlAd(U#OH3QuaW4nBu_l38t^0527N6*~vC(`uy{^gale7C^P zSnIsolbr3F7foGMy_y(uYnI=0Ue$Q4W8tq1-gr;(oA5p8KALkMkX+UK>`^+{Hf@6k z?yHjFQJcE&)7E*>0(l?UG|J@&b3s@S@)xQeyz)S}AKEMUjULf?T3yJh7V5O9_W9Ms zuC+GBk7P#ne#)5c>e% z(wnC`#K-tOLqDzWCtd^1>h~G^Zu9%Ob_D-g)T`$f$S#Yd7lk&IVljHhfoC-R z`{m!>NDYCyZ$5&bxn!@cjLx<~zkT%8TWU$iEhCh{V07z?S4=B0XkbcOlRSZKpU~$%0 zC-an#U2#n9Pg|0}cg9?;PjfE8=T#T~;;QwDz6$$Drf8nV$d`i*bWS2SV_j`3^gWN? zY~CqNoKE}%n-SWW@&V|xeVu2C_DwhYpTHyf<=;b_f`e?-NO7H)D7k(HzN&cDRA+Kv zu|LDfOb$$TOE4Z-$?q(EtM44K%5maf zWzOtDCR$!U>~c-G7ScQUj{J){tPRnFL%l>`)r8Y2#1QMSs;`4Iv?NW(mR=TIh$wjv7#qIhZ*KlV$Ulv8^u$VuP&TtyvCZtXO!Ul=GZw! zZ#?mn$h2PYw+SA0%3mo z{t~TO`8&ur@o##aTt3(Jf5iL~Y4&ged+}C{aa_okd%gDoAN)6CqTM_AlzhSuRDGFT zzX)qlxv6pDsFJ-_*;I0ziKS;P{IVyv0YBiRSg8DIbE!dY15d$nG4Czmx1~1m_hH~j z-<>(F&qe-EnV;~ZvErxoiKjmj%5Y>rD6jMAZ3aCf*VNtEt22P^hTN9!*42sb7A^Xx zD}Dj5Rvpp%(Py>ZlR0#$X=`dO--pP*FEXDnHvwHM)Hh6DKrY`{*dOhyzpyX#hd1~U6q*hT6u>hxCnS$DEwT=q17^DoftEZG_KQSJ+}Ip#}0)P<|J$-duMZsX`> z1NcIigZ3|X$rlnShWnS_;hbB!|DVbAM)$PXLpn5z^T}BMYEx}U2UXi@a~o?^wdtbZ zhPr$y)uA=e^-SWOt+Tp4)s|J>)I5H-pt(U{t-PuC%_MG*K5u4C4CidYUlpTNJSBt$ z@D5=iIDm%`7T_V~-2R8K*FLG1Vh9WOD%amOQ?R(GS|mS5dXn^Zo%u>#tPtj*&cr+_ ztWU|ht|GBDk8zjkG1FAk^|zeTMeH2*EvzlgJ+ zZ3xFnje$zr?mEt#9}f955AiqsHgPuBdlP3VV645`I`2H@Z5+L7<;*bW>#9+5zD8$y z?*wneor4czn@$0D@};$aFU9(2d|-{YfbYUvo4Q!b&-4A4F4t}(MNIG<-E`-@rWfX}`~hx#`6?8{Cwv+t#5_dSjo z+U}UA@8aB#u~{a=HJMBKpHJW6nBvyD4Xzql%KMoL-ord^a`vPvrKjN!vdK+=KHyLO zK=#I98T>;r8O2&e!{|@(zkt3K_fTA83H)oSE4sO)YU9rwGWaWUz|lOfe-wBZeK9D*oSU$ zE;bmSW;vg?himDor=UZ8Hlo8B&>`cnVx_*|omF&u+qGJx81IlO(rsRdsFyKI?x*P$vT?@>)N%IH2sOj;!cm}ls5;z`;5+UT2pb*Z55~c z$B_1N)$hoTL6DeI&q_Qjnj^n#S_?6qe&%;!_4?@_sRH{4V%U$p z@V5&X$43@&j*PFhd0}Oj5jWDEM#$0b_okBz zb;Xs+DepnQxS%SVV*0h^L#5Plhj}j4H_>YjTKF5n+Ul+3SFIbUtigVbnVW+Id^tkD z>5TqfR6PfrIOrNz!&l=DWB%&e%1qW!nrD+Xm(yQ4mG9;gzdCHSQVZ^B#-_E*v&~%X zaaaE9q2#sydWb!TjBn#1jZL`n5xzji0@to2g7 zYj{uhTCd$ouKHQwJ5Qedo5R~VSGW0mJtv5o@$im+lP*Eb%fT+dE~+HS#Zx=dHPpXF zZS`cB`?2v*YvXslXI<<6O!}qu^bmSEHTPSWRyF7E^ILNbo(2wk*0Toltic?01mQ)} zQ?k%pTzEZ!JzdagOPTYfuuaDQ0RMdvJp#L2IX5r;`;k}lY~-u`m1t{!Mb9OmV?8VS z{`Vi&pYLisf3Weq+En|^=VkZ&nrD^cqxRMIk9bz`a`D68{U!0UOXveRs{EfH%Z3D} zr+`!WuB>bODo4JMs7^Uj#@S6@3^A`TaMcW-6)i6?s}aYm0~$g4A) zsg`-%|1kTzqSx*Z-%}o_-hKF(clDm$*L!+j@5)YikoV~jTmhy|SnJ(CMBj7t z9_vv0LfVtu#O5x;OKf;H&sp{hwWz(TCcRY8Dpt=Po=3v?pN*{IY~SBPPsj*(2RYXn zcXtHe9s7UA^z1kB&sgRcf!_Zudfio+4I-Tv4oQhGJE_LL0zhT)-FI zm1niKkFDc23;3!gh{LSGfFZs>k+Q*5vpIXlgP@c5pS5q!*M=q>ref97?@b=5z^XlPy-*e94C#N76 z$QcOFQa>Sk*eBo0C7-~$*85qFd;ST9@Hgw)>d)lc#Lrc2`^DEw^Pok1G3>!MW2f== zOfK1O;Hc^V56b~A9v5)2a_AxduQImOkg+3mUtL4SwqWyWuaM-dox-ovkh9pO2RrHS zPm+RNJQ?a17D6VH^2R&Qy?TioP$IY8i#ZW5o{8cw+Z67NZ|3VM2QEcSOEoM_wywX*$EbB(-z(1Al3wMy z)qwnym&iX!m0bU&@7{UnmBD}Gy7Q29d*zTy?@r}QwbbyYn(UBNfqa?V?X@)Hk{|bK zo|7JXOTJ4!+bQ_E{Z{9>ms*_NHTlrwpHkccUN%ULlR&nJ^r&(8YmqH`G`CJ-{HcZ? zT=JH@pOo^KlvAd&vFG!toT`iX#Gg>ToKKwv`2{|ubA5$R)_C=6eBvLeuH#dAW!w2| zp?lWy3AY5436^cm{s9SvJOdoRykbHcwJ3ZFl!?IzFI z*36Z`Z};Z=^}f*G2DkA3%EtSuEjc-_{RH*#9o>fXmS3A*YNFz&J_^5TL;2ThjvDiS zIX8J9W^NkyvGkxZOFwUp_q#m%khA73Fc8grvH1*irS>9Se>i{i|G_JG?(C!HuV;@Q zcZiceGI#tTgP-Ev_vl@4*qr-+WqAMWI=>a{>htcY&l{XZkh{XE-q*b6Yn;3v;wp2~ zOW-`jee*fZ<%7pOb1r*8iujjWGP~aLtYCA7o(=zbI~$+b`e(lJS!8*H|MdAIu8)TO z3-|PY?i^?;)8mW&BAH@1R>A3=wEI|Nt|1Nb?9ualBcJSz@z>wgJjXZ2KMua6{e$8e z5%`OA`8fEIzkUb2UA3MhBefR9-`^7<7al&M92(9OttIdo#K^I>fZwaMt37_>Xd|?v z;Sv7<&%W&#e6$+INq({Rvi>Rf7?s=tACnoU#;6>LfjxH~QhYP+Xsr7V4Kdc{7$c0a z2(NB2kJY66hGT5N4f}6!GGo+U8u73n{*kuBb{jAlII7*BS)A)_pljx=cG15=Txh-g zv;j|QEc+4W-{c=n_zfc0mGk!mZ8YKch}v=oy%v1J;uFZs!6@%)T+$;o=l`y~b&d8O zq`mrF_teyu+E#nQkJ=PYnq$*?h#SFcB(z-wujX1fnztbv>+8QUhUPo6iJEIc?;gzy zzsj?d;h*RmA^%igg2A!v>piVCtqZNSzx@B0=M9Z{UUL-ObWYkIgWIRn7Cx=dgrDJh zLOhsr&8trJfb%-K$Rc0)=aQq^UyQsW{R4S}%u?QY+MpXbj2oKg`B!2N@(_3`t_7|q zMW*%G*lLqv*&aKYElvWq@VpBuG4H*B^3su`k4Uy*+w7TBzLWhx?2|`_?8S;vys&qc za!v0D?G)eOSE64-za2cM`}!X9wvHY&ua9MJooNOJ9kYaMG5Vz2IS=xDtxpf^iK8>w8$FY{z$40*~(~R8U zm~V4+@%Lu^z5gVmJrc8X*viZUdZ}vPYM*tJ_MiJxpheLHuuds|Doz{;dY)pkUT9-z z-^0o+GY#^PI6h|wINF0}gAZ?_$@By3%TZ(Mrffb=-}N;=9vx}X}NP1T|OD0hURV#7NCn}?175Kdu6pz>*C3&LZ;e`v#0BgKV* zd_HFQ#hTjc>Upl#I?VY6!_U;zUbM)WF0>aZo=cw#g9vSyVeErO-)}zubojh%kx1hm zi+3~z(k|K5+!H1D@hrAi^ZPDK3(0{nlp9)MIV3J_m(ah(( zba|!M=B@OU!_(%GpH&{j-@utC@R1H^{dosmBUkFair(NGM_zkHIPGBlPHn6;1J1Qi zp{v0&zQG);Q+jnbVDEO|;eZDl`OLHNVd|=6mLt z@3W8jKIfS4OOE<(vN`e7Kecn+PN{im1z>crQ_-qmBqw63(K3c_8^_5WIDrSrV# zUTZ7vP|vUNp4O4Z*KBX!!Ppz^EvLO^TT2^lUHM1adaCixv29JhD*8rSIkj~z{V*QM zg?VZ(3$BZGJ!Y}m&F92hQ__uCzy7PmANu2ILwc9wN1^wvWA&c5-e`Z$QDY6;rk@Y} zk+GihllnUvt8{7QFWX$=6Z+oD8SQCwsZM@NpHMy&X)Pa0Nw?y&jqeV>Pvx52d~f$G)>M#>lJ%#@H>^*t#x1i zVR#oBPdZxTYrN}N2a}N*cD_I4hl&+-X8HrQ^VIuKGfOb6ALUX$yJS4@+N<1D=}*cz zwhZzYUzsI8fKv`EXZPr_mvMH7a872rE3ckIjcsh&&3R;30ba$Nbyf>qoE>M}*P37HB{$ySt;w(PTJq?> z_Ca)ogF%XSqR0g6?ck0WfFVyX(%$WJ23i;+!3LVrT3qQ36sbKy48k}sFgJ82=5O)$ z2;-3cA)iGQU)nQ#|1P@KKX8%Q#`abGym`fK;o0T&fq2&kEmNHdtt#fZu?1hw-2>iK z{-h0FG*|QtzZra%(qRP; z{yR9CXPvM{$L*tn$?~VD$$+1GIeC0DW>cr5Z@@pJbVE3|zrioOBdmRrtKLxR^#_Vt zTYZ)Bw5R!4=3hpYJ14)W=5u4&@h(tbtc@1-N<}^S3#p%h&oJuk3Vr@j;>g(8ds+%> zy$^ubMCNiY+#djcAz#32!H$7O4jNlyUsxsoDy95h?JrB?BkB$JoRPblnMf?WJ};Il z`pc$K%}e>(%ewI06C085{v`SCnbWMsoE&F)g?c95oRi39?4?fCjXi!RbCG_aTtMS( zATJTTW%421ABRpO;7Ro%sYiTJ^}3`_Bza!zTIcrmzxLWI(k&e3Z8F`#6wxrx$d3pu z`+v^&sKB$2{+RWDZSqJ*J_#1Vi{H`4F5aw$SZwYIqHhEp^@MWHK`pxjWL>Zo+=f1NAz4C?8 z8OTR!=T|o^f46rUea85Ex^S9#0o*SNac{}?g2uIHP&RwI$l7sT|N3mAf_>o62lv-2 zUye`ll=FGN%efWWRQ>)7d>lXbwc7n&EPI)U?czmpvS}^~>vh^i(bSvx)I79jqaA$4 zz;9DGjFz!`w0G8K?=0s!NEVumw;wy}Ir!bdP0LR9_5$-*c?!{{3sOv}UmRnUm(LImO|*njdm;isq)h^5P@$#7t8x3LB7{`Ygv)Yl5dB@LAeB&Ie0k=WdHoP~?rBSU9vQz!P?P5KUF3FLTe5kU}2Tq!YR|w_(`qf49+!0-oshq@n6MW zjME*$^<6wKeykXY{3dgN_gpUJEJVroo`>H^v66J*R&rL&!Hdp}lVhZYVdS&fZ$o zd7{zh;;`P7;EwDWGv+zqw;21593=3(RcjZ#v@ll7xu9YUw!ghQw5hQVru6aNX1$kv zF3`BF!iDg#3xmYf-Tv43eJ*PU-&|c+Y^)vmI}VO}{T0SDW*iS&0bkNlYfSp&KJIHg z&tFUZlWVYlPpsR&16lkf!YBBL&{z-X3LbQW@53{jgQrhGZ#T$1>{DCyd> zu_yHYrl|2=;W^Lr(N6u@BR?8njh3@jQ|=C+V`#Z2(7rj<_kh;?bXjfCH!>&*ewC*f zvu_$*b`5#}wd|z_oFYBo!+qg7Gm6c39*-Xle?;tK=uhm0v$NQK@9y@KxneNmNy#^K z`*JUR)a!ewzYP7^yqmO3!HJnjW!HzHY3L%hlQ;*tW-(`K@CSR^SQlC+4*P9l?bOnN zMwZQIT-4XoxH=ivEb6_tvlm5qwA#}v`&9jF-*2YTzhGo#UB3uy#8YJZ|MdxVTiqJh zu&ZjJtgWYiIX|cKhO+$}Nn}D%HfV zq;GPjnV)x{-*@#u^Xr56YR#A3>I@ZYcUs(-Q?XI?xBoxwP1I8&{>(l0 zVx66Z{?A}`!3b;v+NYBE`$Fsen;}wM$IpL;r;>&N!2_ z>pZr%CRpiQq#xHgX5^bR6(x^@RLX`xS%-o{_I%itsO- z3;*INCf5t@S^o_=GI`BR)7ekWfbsZ|MH7Wmu!#DiiCjy?D!SEs&ROftpuHG*|MzS= zP_s(U22s{VB+qB|*VH-$LHe}t8@{5Qukbh?8mh(vRU47 zk^jBW?sj5H!`LQ&7Ex24UX!Lsip3UDg_{&;6uduO77x&w-T0Ol@;9~24D&G4;?M!-a6)g|BVjH}2WELXc)(Hp z&c!~u!+l53Lv0;Bm#4w6+STuRo><}|9eLJh=~ETOFa*aPTa^!qA;Iy<|aB7Daz%%e+FZv{VAdyW`=8}@l zIz1Z5|7|Xd2Fi0%f6aD|ZKKZ9ILDB)KNDH?wbrxg*UGbZOZ{i9iek1_w!1Qw&-V-N zvkugf(608REK=;pwkm?1WiP9AW$W;6-MPl=oK7p^7#F58@Q)bkephA4Z5m|y0(Fz+Lhe~xhr zC*Xk380|)L=vlMZ_`-q4puSrekLnJ@8IST~&!9i)7|QWoI0@ZDpEl#TO!9wg@V?8a zQJSCTwd9w1YX1zz(`nbwTo4_oE{@h%3|g=XvXiMf0F6+0D-awKi&-DcGdic=7Yxq8 z1|84X(fLzF;%knsk`q-MO)(7D2$gFdLf3$pa zO};R4gxCkXua-XNrdrY9r!Q~xH>cCy{nX(YE_W-(13Bzg7rlrM-l#>=VU!d5b?-=9 zmOV(>iu%<)BX6x^R^IEFrPM8wPO^mBNQ)aWIO&(2z*)2;pGy+G%Rq~gjWO0+r-44m zZ@;S@yqHMEly48T7skp{m!-TnxNF+}TGZYfv{1)N`<~L&#Io4?f4T#Fd3U_SJIH?H z6jk?R3U-(5BwsmLu?&7==Bhj=>Cfs@{Vj0lGqbVQtoaGwn6kJbBeX9l;iSREQ04yi z{k3GFFIb3g$#N!CuHdjgRL`AW=C^}%oS>WPEk-xliT4J@q2p&{8#QA1n+c*h%9}hlW z`$ce7e@3xXJtMtSe(0pm-E-x41}~aRW+l0E*kGB>&;0hV+#tiUus9*lu*IrQ`R)`;ef2fxWN1`L)DdOx6;=n0NKC<|K z%jkv>Pm!mv|9C$-mwL`6w|d4E)J^!^Yp*!N_ydu1nwQ`iwbywDT}bm!m~q(8*kFCV&>;Fx2Kq+YFR$kd0M@OM;3m=I*W0pmIG|yslL{m z^mOS>p8+qOPCY045**q|YIYc6N2UOcm#oURWj)@uZTqPIc?ER*WAxp%Uc~-!5Y7KM zNcN%Y5KFNJ2K<&)1OEFy=laKSp40nQ4f{^MFWzEY>pa?@YHto&%H+A1!72M3m(b6> zJNMNRhP7d{N7L>{9~0f#mAR~+q(LvY?hKabYy|$+nFvwt$Dv*6_Yv#@e22FtiE}vy z+mrD&$H}>0L4rLuR_Vw5uDD};tm!YV^Q4=lcimP??m#yy+!D0hKZxvKRXKY*c?kEr z{@JRTBONKTmUB06@qd}wkDbZB80b-BOu}!KH)&;dJ&Vo!oa6L8cM$x9G3GLQhI2b- zSII^o9-Utlw9vl`J~YM_r|41V|@<3Mc$PwpTl!O^6IsI5wY+`e$AQUF7=Wap(e_G&MEP zK9>S@sS3n=@cW1^)Mg?dfq!UkPj_%}gCCs%T`XBxmt_onEU6kZjK^Kp>$%%l%MRlj zHX+`dIFEd>Kg4>>qtUW_Xy81f z{RbEL*eD^+o4G!&Umtsd8lmw#`c~=1AX0oWh!$Q9#*MPJ^7Q}m20y{x%?}!I&H5l- zG6CLX-7{NsSu6vv?Uq^nK3};1QtH2NI`w8Xm)LCh&FVpn#B%9{|u`b}lsR`T%zvyGl zXW%6{;#+yQdUM>M)Ad(A`L-gs6+HXAj~)N|E92Pj7Uujwzw%ksG9!V<8B$?uT_UJuggqa}Mum%%K2XOhtE)KU2>*;s)^7E9j-bDKS*9@O~TJ^#|N0D zz8Z7<@Ynlft4xCCI0FuOj@&3h`(^ap9CD0H zeox8z2)=JypS0iMq8o8d<&v#(B(1uMi+$x|wbIWF$xpV$CzC z-TR$=ar{R)_^bQSDfpl@ugUbSSQdL$E2?|+$ZsfenHD5dLO>mBz7BtU*Qm_^Q)|CQEd(GTHWW})s5YgQ++LXi+dn&@|RU~_H@J{ zZc{i=m&ZBk4s}tJ_PQSbEMRE2xPGQ(Sn;ORH>dS^-(1bvtHbe1D}E2FxQ{ljtVBxt z(60wQ$@Gx#(Z;xI*fTa`t$#XxqX{Rw{^=(V`zDXhln17DdP9F|p+xke>Xp!wg`O;) zp?#kZI=j6t?Da@F%U%HXNR*$hCZPjrsd-_ov;sA?a?(2z_`cRw?%mnv-OJpPyqnCq z+ljFS5o`p>i%`dahb55D>7fCC4!m@H{JQ#?P`)AgcD`6X^3rg**N=eP zc-{9#?Ges1E}%!1(b1@ZnJkds2Cv2+Gexjfo{VrNo-EtlF+Fd@(9}M08_xbx`^bOh z;pDEUz(+zk&ioZ8V2=WPoO$Rum$@YJ@LT4QfHpK2@pa9|DpBKGdebp;Iu1MPeU}aU zEvyCBeaZz-$r7@I8fh07+*(Wi6tAT~%@C)@lV3S9uBS5W?8dgqDNd)Fc(+D?e^z{v zIW>9XB=!eNX6}JEYK~9w`ORgFFM~e^dQF1si#XSCQAYfKI<&OhTgNj?w>hEiWuJd% z@MU~Q>Cd9ah<|}^CkrmKiXp>0fVq?38hmnVUu7P1Pr5f$lpB+Urav;Xr{aL8gne@@ zvaD1~m*4?6!;g@|i%+2qc-IWG2_MfUY?|T(U=Ot7+OPkDk3CY& zcW@r->Cp3OU+}Nz3<3ukYEk#MFwv?O%fzUGqlv;N`R)4gMfpgoTeug6mL`7a3)s1= z8B;`e>Z_g4Ihtwwoc4Iy`Vsq1Ijbc~t=pH+;CbvMr+}_m9;!wQeYIg~@l5>@@1v(B zhv94GzS>q~*7-BApZ;n$vFyb(2t}gOeAp8`$hgJMT zQ;;duMEhD#GAqn=1s;pup)(o;gFf#9>Xz8VOcjS3H_X|c?VP=+XKA;)z0dn|o}JCJ z^LbAF9oyF^?`7Tk`kC;7!HRMT*k?l93mE4|vEj+T+_|}S+HD|a z)4XK&=Gy$?`ksLR%}#e95nvqTCVr>vC&HlBZ1D9h`4;3ks!f&G|5bVkXpIMH|aHgCJhZD zqu#e{*l)}CC5~giQu1oae00gO`dteBvPVkv752N-|1@@o=5RG*&Ae8h!)viO=dhID zPi_4Eo1=cu@VjvO$=B=eyn58V8QeqvsD89@@2A`wSy3NHOJn{T$FpyY;{yK<#*qcz z9WG~KzxRg9k}~!$v?F~bJ&RnzWt(f~K?e&A{j$EpcnG{)HuBKf!o7tYSmP=8Suu@G ztm!`Pk!Ke2anW}YIWBsXj8#ASErmZhW10K3M=-n(eJJO7GizPE(_*|!$N?KWg-dvTc{=a_&yf;% z_P{giA;h!uIb;QXl?*w_B|h;3r5bo12cE5|Yy4U7BnEPpV-`q^>|UkLggaM3t4hV47)d*kyp;U;0C6>Auo zi@cJIid3jOwfP1=a?-|HYRe6N%)28<-%f6odub)X^M3~Kuv6$2)I?3OhEnAX-hY}q z{9lH(Q~ScWmuOV9EV#bWm$$igK6S8@N`)li|_t#db_m^faVSnCLl~{30@MpK8 zYeM^Pzr*$a>@a!cK393bd)=efE`7Fnect(pHlTm>dR?q@^_|RMgPdOUv2#b|PX%T* z=~d)UV83h*K8TDHEQUMkII+sWVHljOuEWK#SAi4sDttf6jS2OuyKlgkBHMM)Psm3} zJa6J^*FS5uuve`Kx7AwE z+hX_@&2?*i2Os)KpH)5Uf4Khf8YgnW(q)FcU)Z<%zceG*SjY$XzjP$oM0MDahY#FT zXN`T+jQfI6SDFaSUSN&1l$EQF>}M?Ug* zjaTOv$MBh@dEX%4MH}f$H{oB~i0#~1tJ~no#DXl=Xrx$Qr(vvYV30LB;Cnq*ResR+ z<5;I$A*}NaSaUYJV0}LQsxG4X#LtJX1z#$CM^EqeSHi2Wx1;;^pWz;`?CB#`X8A}P zFfL|#_gR^pqiJ|$o81S@Kjl9F9rv-XX$7#In}KJso)*~keZ5h1!W9O)3!l#dc;iC$ zv1>jjIuk2SrguUF-$m59l#q`*k(wowJ^h=x@W#o%N02~dL!o<)4%erQ>^(o ze$51JMha`aul)OKuVm3FB+sN*M4ipGmK-^Iyq|^NO1HU-@r}as@S*wmW~=F|!MSKA z18m&=qZTqcc`xGx-cw!458ztrtEJD9&WP+no>wgV-DSD!UxP_69F! zx5F#Tq5dFUP~%YET`Kf@EUg~mdpBd4J!(~#(zjyhQ#i{-FvUk(k$lwH&>^dPOM5-R zcCY<{w{g=nFHvS3(0|MA_*U(;-u=8Uf5Gfus-_S&2!Cf@MaFuZnQiksZO8dtV}7vw zqL=XcY7am4eSa(UVARJ{aFcTC@7>MWt)CWb&<(=~p+` zay&cbuh&=l;0rnzL1U7A+#ExSF~|;XjzMx*V@Nf|aNSX3NHoTvbGgqJY#swPF<=Ay zsk>TJtqaw^*qhl44+9?MectV7PxFk^SDSCP24PNxy#aqXG3=5%-72|f=!`n{e)mdm z`&GnD(OB#G3i$FEr^eh_sOOgneu_;r#~#X~@=fsPUi2Pnzqk>2@C(FAs2AhG--bs* zzk&3hwo!PS;hfW`&cp7lEQZEY_?9N~+YrCa;IqUh^j+O-;d8wXU!&6>3~WSS;3{!# zzES>L=*&~hMKwM428Ngmeub*eAyI8m#a$M=TZ7YQqNn1|PP+Ypjoeji=Mr=n#nk3G zZuP7xerfVat}Ajjo<}VxbdX39zau(G793oYC!Zp#T$CmLyRlKf{7&Lh=Kv3QPP8Du zTDLdSG9ei0oB%K9yffOCKRDsyJ0(81?SU6+E#Nho?+-qWtVOj8bD~+_RYN>GiacjS zJ**1+kA&y$VZf)_hfZe9sytE{pGW+_s{ZFyuIRpR6P&>L~( zo@Fo8Mox|qv*`~mVtgZ=u|P5AoN;T4xf-VvTR87Mz`k|-<0-*N^$i3khi93Af0$+N{?05jd%a`qujBg}a?FBt)JWsfXO3&j4UQS+ z>f_QpLb=IYV%Z{Vi*dHZf{|E^n7|9jU#k)Yo`SP{_!_U^$$p2Fg+JrV#5;wLs4F{g zjW=?S1x;Cj@`$e$PM|3ZIH(=9cWgW2ld607<-emH?U4X};~roSx7%Hbm>(mHp+{gi z5@`*J^u4Veys{=HgM)?0ImLlfd1AlzvM^3ROgx?()|B8yZsnL|1}dUK#q~so$z{aG z7>}{|%yxUJc0P+em66VtAT~UJ&SC=5u~i(bjC|WdFJ)f9edHcsa!(7F;j)5{(6+`L zGx*sx?mYQQ*+FmQ@;dDPp8FwxDPdm$gJ-{uZstabX~Aozb$g?`t?Kq!dw~ZrEmMza zS;XTNpD@I~SBk!+=bg=Za^bfoihp3Or?b~B8~Mdtm?Pi&YFXAu)-rp-{?M-z4*HAw zne{xe)&5`+eg})(e{x<^)Zng#vW>Hl$Qi0dsZa9d4Zt4TM0BA1%E+_987tWsVO)}rl8qx4xiO4Uvenp6)V}w7a@W1a;uET6y+?W7Z^#E=@rHaT)#bx{@SpeedqYl~RhJW% zeS?>xP1f6V%W=sc~SYg#hl7RL7|x}_!97WR)uosU+;f8=Y? z`Hd0y-M8R1#QMhmmg~b@@8jCR_4i!Iaj9L!v6`}{*>;h(OVdvbePYu6rFWjsej9^d z%*k;!eReDUC}OOfnca+)FJhbrsNrpKKBjVWS3k49GRpX}#6v^e0Yl5|8*RplrGLmi zln+B^%c|bEatpL?r3Jk%4&GO{t*^Aedo;co#3eMo=&Q(EgUo5#s_+2C3l}lwqxAzD zSRJh&bRMN2P;2E+)(@l`NKZLhKe(D&O-+5`cJu=My;?HEspF>uo=aZRpSG4*M-kSO ze90zOUrQEs`6KC~pTTDAbCLbTicFL`2d?T_{PDH)FT_5=wNz-VrM%XXa)sVpOP#s( zamlAQ)>Hnd_4Ks{Peu2LIBP>1pP&D5K#b-O*HWJIAi$N@k=E0fc{f~3yla`YUUMDI zx3j?@a8Q3={tIMzex#;YgVwCYT5ier*ZV1)7p^1lzehP>idUvjev|%`ODY=tJN7n; z20z1n^)33y7QjC`*|B=E*0FTuqjltPJ%Uf^$XbJ;j{J9Z9=^+g-?R_@Q5{(_Gl7ku ze65S<`|hL0rg054#&s6=9&O$mCicU0`#i2a7(I!j?5wpV#*CT7S{Eij`FbaM(D2LPyH8v*fW5cY_r8R^C%?>8>^-i~-YXaByM%46 zzKOeMilNOXd(R_gB_ECa032DNBpCUORv?CZsXDjamKL~QnYRIth*yrD( zy%yS2eV-QEdnfIQ1|P*1xV`I58Wm1k8hHB-_rA@&fmyxiCY#@gEv(2=_Z<6NwbTAf z`%`G=KAwHyk35S!8M}bK!+0n$tY`_{nOK`*e!o&&AjST_K0;pU6yc1qRbR%oj|sMnPk4Jdv-NRo z>0K{p)<14Ci@||AQG8W)nBs$fPYpReuQ9!sG4VWh0DGOV1ERzYqs$4K!#|5J(dnFk z4mS2Y{Y+S@m`r~-PraYauLm|dM`LU7ji0|ptqtk$^*H2BeAoQ-J#JioqrUSg8Kd9U z^S#4-BluM#=Sy>8UKKs7acVBizpD8-#E$E8ajQkuzhm6rV-J;Z3ZEELyj}2a#+9yb z;G5Xj*s8-P8RcE74&kdGeeX}V``sQeV@%SSUxX%2W&5(dHFqbz1DEf)XeCOHz_?L- z*+yq_ihsU99>m^SYVrm@;*lppPFd6tH+xL}?!I6aIfrd?hNv%z&lh?=o;q%4pi}jd zC%BzUb&jr}o_dLzL>EJ6s$YgbiN4XpY{?FER-4=~>0xFf=jS*RUR_(?%dR{DlXLx# z5NntWZ@h5)>#y`-$DE#tR~MzJlyney$sY~x9kE=L(=3{z(YcTEPcr}cZ0XOB4jdR@n?4^4ST0eO1j8s*> z;V;bSeL$8O#UzoIvny zG4=#=eb5F+(3I}$T&cy=tnHiwauyTSD)7R|8M zs?I;uTILz;nIJEsqWU`QbKEn3r$sGmtGb9>6X_FqYzgB@r*x}#eYOWUZ4EAjCZh{C z)ILJ2aXv9=!&+60QF*PBUoG^XrtKReQ4icyKEjz3Iu9#K-gYd5-Gq!+eH7-pM|%fF z%cA2x_P;i1p-I!wU6{iN&Z?zD+Tcgik7X`2I;DPKGzH`Qa8^(2mg-`d9 zH+o~RtHHMob(N#WeL%6i7`%erqkSkAbv&oh@6;mCvj)&PgD^kQu~=L9sHl0mZ6`hjZ$Enfe(pxsAZ-!sZ#)#AMlEsC5VVF( zmYUD}BEU_t!mtnKBfs2N;0NKH&}+h+%OZ1{Hd0F$`vT=4NLEzf0Xt?Dy&XG8Y6&M< ziSx{{^Hr|A=BxKKXX*HJ;d>E$h$nq*e{JpRHJ;iK|8BOUHgtZ9l}86W3U1NY6E7ye zU-jOQ1^nCg^{F2m_}xsi8OERNbxgWQ{Cf3mwH@u`47#G9WMwUFr!oVc^vsyMK6uJq zAKB48Qj4#~Ux&{A_QB)d7HR0kz&@h97WwqUTpiY*rF@+=>|q$9F8>huLxaz}jqXzR zpw1Hi?cwdSM$q-}AC!>G;7YK*;@Xw(1#&!2N-8XSX1ym-=5~9P_8aA9#Nb?~6aor4EaDykaP#SNyeKIT;3^@q(t=pFfIZuTSPKCfWD_tHYuZugdZ zYt)goc`jKPtjN}UgXW9i-C0hKGvg*! z8bQ{4@eukj_=zLejos_T+2h!Y4*n(Ltg82z%!oEPOAkMMv{(eb@Q=YQhg3gBGPZ|j z@fQq=wyuy4Oxxu%;#JX3(|7Y#e%JhNK%bCaG{@T-ocNx9I}`;UA)f*!@1Q2rJYXu^ zAubO}Mj3Rl7T~IN8Fkmf`woUR7)8^f^=0pW_3&Nq&mOK)+qpDI9pz%ZmOpmXBXQ;w z(j4nT^hQp?BcEd&accXDM^oc`tZ1^vF{WNe)V?Nb^pE;a+7q|~8QqmxUzvPDTh(@o zl_Mvf56?jEFqUv1Ewt|-H$>0Vp{G|f`$8It=CAN{zSLLpM_&4?!jYHanKfP_i_atT zdDh@%-qqP7FSW1-LN)Faxy!t0{&U{&Wjp;?ew8t$G0*S46f3Rr;=`AF@!T5kJ69q9SXVcX8|Q`m@b3)% z=B>fat*xHsb!#%|J@(C2p5h1p@|~a8t|J#Qn%zvl)O8pzRq?GYtivbz^&v$@XTI-P4)9X1d1 zp7_$_ueM>&Z4HiGe|}YGdlrkm6^AkWr@i0*rL*7vb$-A9dSSnBF|T@Ukt@8X-f60> zMRG~OZ^FIY`+au5zmfU;s=Pn+SGMHWdg;;%@3*ue7;IwBg57sExYbu_Q~6X|fLWxl z%-aHdwD;o&-?<$6Af{JX<#oEiV27zHo^xwF?kRTg{hP2;v!C5Uua zeb&+S`0uXA78jpRmoE$J6@T<<_@qn^{%@|=$JF8<$NuXgtTe7y=*|2ykd z`@6JWJ2Un5+R<3AqVxYWtXI}sbG;hYtMc8f9P72MzFxJLskvTDjrA%y^~QRo4XxLW ztXJ`XaJ|xIbG=%He7IiaC)Ij=W1X7%I(1y=y+l3+d@#X27p>D!{<2QBHurqQ^~$5kYFHlRNRA09-)~wd<_2^R9 z6T{Nl)tVJA)f&vk@LA<|A+L7@AKUEuTF2B5B|f$*&>GhIjh1%>vEr^kYgp?y?(Pa& zhWU-Pt39@=(?yM+x2)M%W+V4Y!S;;nyJoqkx>7O5@NDY!G1;`pQ+zDS=l^qf6LD15 z^lWU`splxxgwGh;Rq-191)g|AYv~{Ln7;vN~>6`jwNpyrTUc5qxN!WpZO}>_^(}%CY|dIQQT; z=-K&fEk+HAG`i1&&j+3vWu&ev5QV*KFS$MX4w;U31fnXNgs``E_%Oo z5Agkx>d8D4&-HndgE8P0Unm)C#^MF|K0N%FMLoA9)OS^{b=ZCqpWh|Krk)Jz5sQwc z56M3MF+L3K5otBRUp$wXT$(W-apRRve!sAt8?g;&yy}+4!oYMow+cC$H6}KP51eV7hUd2*P8-7V(59YozF^M=o6!yqO}t# z_Ee^psEgD+=m}TyBdIo3(u39-?}~O}g)M>Nv}cXG&`_i4ro!hC>7ynFHzcN?Z zi5}TS8?Vw?PL*?>m{I>Q0O)AL_z^T1|E5+U#3uM+))Eg`>4vqOiBt=IyP$ zYw2FaHEIdYR@9u^UdCtAvB96Ugu2nZf6v%!uRJ|A)1;&9+xwCe`iu-`c{;=EE5Gl% zGg!(ROB6V}({3df`-C9kq9@T$54ybaI66zW1(A_I_j0B+Fy&$pE4{sRllJkkXoYo*+ye-J`d>iLEF>z+aQ~P6(pV zB(l4D&E`9?ovFP-TPtZR>cH;`w*_s`-Bj9&Wn90rd|R-XJ|g9GCGWKc^UJM4foHGg z9aG*HWJ)Ihw@>+fJ0GuQu**Am9=uf_VSQr*Rv*$jC$F&2$ERIDmnp9e<`+(2To+gG z;odynUtDCYg>Tf36w{SCw7V3zFW|Ec9cQ+_Z?4tm@XWZol(C7KHB|2=68F zLyW^GF`M=h_+(<`8-i?E{Ve6orhfBa<{1mRN;%BWqVLP(C2I@ygI&mVNPY;H0>53>YdOY6at2$vcz4{nQ&- zZ}6_Xa{_x*ZlmUY9gfC6z?c?R``RC`&86=Q{aCCs@|hm#ur;=Y)%D@n7FPTD?As{1 z-x90<2jfb>&%Pm;&pWCa`33IJIX$m?ZNw-R@O>P6;05Ehj&67Z zFt#<8h1H7~iv!J)uUY+EIQ~ynm+`rRXNT>5{y4$ceiObi@3s)Os#DR1T*s#I{t>u# zf}a?4n4w+yxpIc~3+sc68oBng{m2s9RGt<&Un$*Bm#H6u?_Ov33dcK+=5_FX#rN8N zqnI7MPyC0^dCm!(@e1rSn`&MB-OPnx9#fo=PlPFp$U8BmKM$8S__C`Fe%L0hE$6#%)whv;fRFIwls;E!r*3P^ z-tY!&cK{c`F@#~}8UI_nr~ZfS=Y5TD1@8$L*QkAXt7ztEdikRIVXh&5=tubYpZ123 zHQ4nq?^H}mWg;E^kw03Oy7+h>m<*J14JH2Q;LLVt&k@v5J`_R2hJ^x`|JHrIjH zfR%Oq3%NH$JGmlln1RZpoS}{>Slz~NY3^NDn;GVli8tO(K>_b7a>Q^x6sX-LIBLyy zfk*BCi-Fe;aCX^B&Y)fSM0f`6$&26Ry=xWgBKKGj%|8}gxB_{&q*k-|JHl^i;!=}Y z!!cw?I$I3+XF3N=+52Xde-XA%A|CtL*i)5XUWq?8v@@AGcb9S)^zPit+5fzJ4f468 z+QNJIVy9fbb4Uvibw6oCSA}`JN|;M+VK{DN4O`Q zhBhWO=YyPjS$P(Mje+*VTy*iN?0fOiEi02BuoIZ=Njs%r>TVaEO8rj2zqZUx- zsB5+gJ+kw$8OX<7lV&WS?{ZH(n%y;N>Ac$UOP``|{*G`jwC5c9MkcA=nP4b+WH;uk z7^ul#P(hyHlXiXLjLGx9sQj^utEV#t@p+B&3S|7+0yra18E1Vbiv1q28C$i3@$A?W zj^|XyGvj_eQx2kTIaqpkt;Set7Jojh&+g;Ayr*n6y9_X|fk`dx>Iurwn@}-{6SJgRr z%A*?Ex!gO^ObySP3hB;!u9hq>Cq{JcE^BndPR{Arqq%+XX>vCv4u$hO_S`&U7sI?A z#k7T^g!3P@@zlvs4BswaUWsNdAGXYMvD)zqCqr-i9kI*Q&E7nT@x+@r2G1`m zb}cPf`(MvsYSG@m+ zwReG&qP+6{tGaq-dM+88i#oxH76cW|#59P8Bt+ZGn~=zE8a2u$#xxfdBXQfr-DNk% z)ZCZ>25gv7h=LT7-LM-rX$>*1>u#ExB4`5Q1r?L3ZrU2b_YEuG}&FcMZb;iFs)($@U5tPdTyn!)w4bRT)g6u z4t7&yVfE(&tdHW^e*B=zvCtH&eQrcL@N1VHvXi)}O^LFfiRE2YVhvde^N_xIpW{c|tB_f)Dm85(MtY7i zc;B!N-z#E`G(OVjHyik3J+{c#p7lo7yI+VH3!A~M(ZEV;d+D!F=ed!4Dq`F_7dczL z?cnCUckui{p1aOH?oXn%tK^aWhZGOh^)Iii@5Yg~nY2mnl53i{Gj~TtZ2UvPeYG)? z*tM_hzdtSXH*BR%_(kuJ*i#C^%cxOK8}>85YhT2sZ>g(F%@ZBp@}`woTe4psAF0H& zQVsBt?b49lk~le98;jON5V_jxa7}~<-(@5e+k$3x%#*kaV_Lpz}3su!!@6aee(OexES~S9bD~P4%c_M z?&PZDGHi4J$SnuQvHqcN8jtxJ58IW!WIy)T;-mB};-Py0_a)=l%*6!oo(yhU&<^#< zNGuQgTElqBPO14<$5?63M)A>#<(bc<)wdLJ8T4KIIjd>p$EDcTVLIm8%ck)t{GymZ z-qP6uvG^^XV(hkgT-3X)sn+|a8O&Sxzo#EB-d`K>h^a^$uN=%Acadi%nx5YqDfxZh}Q1L9&xK}!aGbl@EaJs-+ zV{t#1#&s=Mb=-vm-{xA*rEzB+_KtB!H*{>=Srffu+`rDd>bQ6FeB!txL+)>=j8(tp z$Jyn1sMrlv-!9F^I>sIw=KjXS*EnM!+-FZ5jjkGEPc<}F@^=pT&Y2yf9%FBx#xvBX zROa-5u}`d?bh6c-7sle~s`(qr5I&vHcqD+;oz1CY8{haoLOAqw(ksTg=FC*aPkKc8 zy=mNy9I+x@Z0ipDhBNY&xKev!UP|Q4cqM&mEVICC@)md&ZHeT$+b;wr@{vJYD$D+5 zV21a-foyycJ)^S>%Z6TIU)!#_6=zVff+@-57lr%j&lh4V^z zC;SrKcrf{0=mqss?t{s0KSDjgX}k8QXryxm@SRulO0HNY7cW~5or}mQT$yzowJDdkL29v z6US;HV|72@s{O+!@g<#KU>KS&*A#1PcO!FmGj#kVEB<0IdN^`Kd=v0{F|=bSMwntb znY@!6N_$3yunb{vl}~)0u)j^TcR&4QJ{4M0qOr_RY_iq)cLw>Q%+C;xA1Tv{qx3;@ zlyvx^vwzBiZ$ZZ+Y3Mn$x0(2XwbQ$O3*D1&3w#@~o4Kg6p$8+r%lXS=Ib%e9u1UNd z*Qe6&H2scMz7NIU|HU_*BWD7;4@2)qAX`m@UZGpN_hazg^XwN(iTI1iR2}|!p2N8L zll$Sb#^)#6@-ey6pMnl3N36hO@P_V)zKZ^Ql=9WDiSW&4`-(yYn^w37-Qj;-S9H}Z}1}#4-;;Sk8yUpAKBOq&Udgc zGQ@A}Ov=Bi^ep|79#iFymAndWwed~utOrKIANlr9|Lf?1uK{=UM>zgCZRxO)1>NPP zh}Vf+hYpo=7Io@OWc(3XQ^F79SHY8^@A&^S4|u;Y(3%OkGi<{K>W@2`$E!+Ls(er7 z;}7e(!zOx*OaI0@(RsBCdRtPP;(5+|VSiFvy4+5KecJJOPif`#ZRn!Z-ky?T!+eA` zx5c$K63obhzbJGY-?E-k|L6~6i|Z*}K>4lsOdcDT3eDQ~##;yWvd2ucB$0sDP}ehO z`@!yy`+?3edHyCpz(32APquAKH_th;)Cp~E*omIy#PT*!-Zsj6gm2=lL-Ffh`L>a7 zZY3YI^=)+cANl@oe2?(n8B(_J$H+ndX!A)1;BjM0K>$_Ani3j3m5{bpJ%U zga@vH3%jAivMm$Si~IHd2iPb4b6{c*si!KNb&_{Ec{R5lf9vR|G5E@jWggnlG}$4o z^t4g}7-(K9hKA%SGmU=}GS*1GOU7*BE_!be15V=`A+62t1kbgz9o9&^Bais!B%aOq zw35bIc8buZg={L{3+*RqGsgcOJKxus_0y-8n>g$F2HS|wwhecdZLFMW8(!KrUjM3X9OnMW^|rBxEAthexpG{$ z^ZSlXV+^eydQ<2elJa+kHf*Umkew!Z&n-&sFY`*RdCKQ4h3S)|Pl2ly9tW*xh{mfj zQns|G^4{Y89&Fw!w=6%&CR8q0wyE1$BkXaAznAYXDXxl{W^XL(ReS@>XPH2=8#q~jc0wPC|ym~v^>>6h3^x|qZm|HA}gNdDSrB-1Tuq7d&9LO zXBYC$%)bzYKG(#^camciBE;m;`O-T3X(aJH_8>=LJJ`>8(fhF_?7xKH5bE$us3v~j z%Cls#dY*6Lem2+1Jl`FOc+reo97{XKs?H>5=1{+4kyz;t&vsnuQYE33zG~qh*2>weQ8DuBQ7f+Z<9_d8d z=%bPE^Tq)S)?=flCz(5xAvkD{rs6Htd|+BpzT1kQ{|#_aK8^A(7R-o0u)hj#;g?`+ zp*I%nwCAntd+8RZ@>_FN^-NE4rw(+e*wYr%c6?UjT6f4#Om-*fIkiq=KM-pzbVm&n zDQo5CP2L0O3Lk^_0PF3MVI7`%{$=4=T3@*9GU)pBBKqK$1Y6M)`3*+hIa)s#8?x9O z)5w9jc26*m8Vj%&EbZ%;FfcXbJ%~Oy`MG1;A6Da za1;ySOT`y}#|OBt=Ptg(xlo0uUEc5hG0HUUYne0Gvc_0|Zi+bRV>|tylTK@&c5EhQ z{P|#R{OQtWY~b3r^#E-#p{ZXto`&u{8&u=VLO08C4e<41uMhUq>x-{TK0?nGqu(#< z8Cg~Ei(&JV-_&!w`%`0y9(q&?xK069+N*dS@XE9HNijz7X>W=F|0Ip#O6&oKnt$}o zPm_LN^JwqC3vV5m&9jkoN?!r5)qnAx2>n0Ex4JxfUB2T>MBF7}2HV7Yrr*c<8TKz9 z%8bIr!_+02xQ4o$v0t(WeUxGbe2H-&_R78{o4OeL5T@Y8)hFP^BYb0B{5HJ!%by7^ zzFdrD-QD2DPU7S|CwW^qqPE4dw{Q*$<)+@-w(?G=QNk` z0~5|6^X?y+*Zcy{;lJYFm(xzkU*h2!uPD!J*xObdJ~04*vPVVRm!!U!d<@h03AGQr=O;sio>|+;xSy8Q4abS zm1FNDo-=hOW_g=W`Y>0LZ^QyIi2Z7~n?bVu+=~gLeD+U-=ReRdbPXQwM*wHeaI%We zjIoM3gUE_!gLRi$#R&VD_wsK2CaW0DAQusjA(Gk|wA(%2?%`I^Oy`4FbWi1jnCznA znxA-%sdCzO#`oBJJIgp;S+wZWzBqZPLvtM+>u_Svg zD8D1#={?K0rX>6U-0g^O4%B9ga@UhrX_a5;s^1S*`ujV|iYCk7w_mBc*{eW&ppN*K zK>2@9{wCU^@~yjf~!J|05N;-ww^i0qEa(6+pull?(@?3yCi%$0` z=BxJeU0D=NHLu}s$jR5jkNUh&W*9PmV_VKM)`5fv>o@}^gH2R)3D`$c&z73foKut~ zPJu(*TgouqLuyySOcDRqAqF43ej)F>Q@!42&@G=iZN9fP1-}D71rKz@p$w+>XbkFD zLo1H)!MgG|YYam8XOS)P#B7g4dy~+=6!1)Qx$MsdmsGc6!>aBGI2Ch<^GMyQqetz6 z9-P>QsM^5Ta5hX49oi_xSWz2d_2zNe@^$M}o>LX%C#swPjn z5-xT-;s#~rdxrDuR@1%iIhAj^*KRePz0X;h=btb#d!IYrwyA|4WQi&5;E_XHC{HpR z^iS_i`lxTjMxef~!b0+y`KblfI&kX(7p88cpLyB_{Mi3lKC`kiR?>H% zYdz+hAUbHIH3!T1#@r8dK8u+;!W<_y0PXH(ZE*P|$ReUi6&#cfOY&S9_Sa~S^r-4w z73?#_=N|u6#K1Y;@ZWOoe8o@*HcJTDxCZjCxT+A6*-T1$KOm{u{8?+^A;hiOyZ zB`bpnehx;mGpOCTGN{XU2IHZ{&*tITu2&pCwXQ064Y%Q99D){)LK7Ex~(*L<$t!3`me?+4bG6l(C(q#ah&-ei%#PJXZT)HMe= zLiN~`_xM-Pxl_mMHtnQ+Dz{u-H$Ec6#pgy%Qu?Q8&!@pH;4ltcirC*J?K0B#adi$> z@mzKV;4y;wP8Dw-$aD4;g$V9PXq(33umOD1R`F2EDvocXznT7^HrpSx0LL1q9~qYM zcj-fRK{0m;vN!z=EHd@9?^!9gau$pyU{j zdbWP3v#^bEK)DP_;?s5(`j#_;i{I}0@(uAiWcn2W5QCBAR2#}i&?Of?r&$KxMm zFCFcgM83g{h2KpX{;?dfx`Eqaew_k%j2%`p2`^uQ&~d^ z2SVOPA0x@T!RtTWmsavT{&ix$Gd>9iUPhlMWuVREZDAgSxRdgV5tp$G$8umWm0ehv zo+I8cHkmSR_JW_n>7MW|_?G92=4%Jn0xsdP=Fzgj*MVJxagCiD3CI5M2Z5mt+}!@) z2+yVgZE%21t6S`V7C0tw1jbFH_?GT3kC)(~@uHkVjECt0L*1RuKy$zZrW437+-*We zGLxM_Tz7--m2n=lX-B>@*jKrGm3tLu+Ww;qUxx`TUyELJn9=dVSK_D;OKDr>+2r}D z%JUzIA9A?z{0E-Dhy11Vhk2G9sOSIUIh5;oeuL+omGr;ndD8jiG_Uh~b>;aro(%(@ zg>H3dyoGU$`QyZd9(x<(j%*V(*q1OodZ1-|`Miy-AMGmGjFJ3{!x$qo(9@I0GWrJ< zhe3F97@ByPwT#B8DX;Td77mUbVHF3VN1-2IhQ0UDIjzU{IINA*<=;EAtczUWo9YVZ zx@dbo$M?Lxw-=%gGFT2jK)doAImmEGPwauV&@REZZ26m+BNirkw1-k_c>^8AM29mp zG+u7GKGPx2l+t7>dD4}8ikOvppRfG3yMmSvGp>oQz<{^P_E+7%KknbpGe)9#7z?dT zbKl8i&LUXN<9Q4B%ef!s-5iLTbk-Y~lgu~&k+fB;F|t8F$%Xmn0C_WG@87==Y?Po); z6eq4x{+UTS39G1h+;I}N`+V}F;O_*MGuIpuzyUFrY#zF`&H z)i>JxE5@{r_Nv_>zM*@PF1prce1O3($#3Pi1Up~h>?qozzD8;Hg~$_vO9&tO{q;Z5 z&j{)1Tdcg^90)>sMLCfPo!&21Ke`jaCX(0^2nO4ML2jm1OjKa-U}gL+QTsWgu$FW? zw6B}7`~vl=+$!v~H@I5<(g~xz2Wa!3|jB*46#fVZr zL)*&mPHze25sx$6!&LPpGl*>^+qLjQ=V}`04z%Zd1MPBHj|pZGbLnfc4LriThjM#; zz0;nYA9Uc6R&WF>wlhalG$YITRLmBSCe+lNZK1ATO9j>Oe^D#SoZU?h;?;ZA(HS$ zD2^VwSI=@A3bh%>YlU_u(yL1Klx@cOP1|JStIIXQgVEP60|y@vJtCfcd=_-{djB%) z?~%CYpPY7!ZUa6O;9h$i*&aJ`g!Kq(-`6JG0lw0PdeSse&UV-JweRgY;+_az?)HJw zMCyJr3%&s}*^JD12WM6GdGmnXN#MTqo0Y^`SXHXlQAaxIY{&Ahl{Tt;Y)U1Sud@G> zvfWXNQ8Win+^~8{ots-}GMJhkiSUZ%JeY!zSL$kbFjBeu;9|jgvfSAa}6t6#xGj z`&mL7SN=ZOqLaete$M8a0e03WYB8-WhbKkD(YijQ(^F*JE5Ox$fXfeWHAZrfAcYb5@tU zlvNCElHg05BfLc>L)Z7ch*gx2#kvO=H+xyIz5|>x;4u$&dNB`vmf^SJazz}kAwLi- z%CYVn&w6C8TbxY3M)U!Vxh3979{vi@io?UfK^q**ieGIBV&2};?>2#p!)JP;%}u;h zT=1CpGV{C7`#sdryy3`H74dr>#_CGQXd6V^KqRWfGcej7Lv(Q04E8XRZ|8D;} z_D^(aCpmjc#W2I)^584$2g@p{<^M+=z1d69oa(OB=7!_`+1DfZxaL1>2DTS z<2P_2G~x|gzrRtukKf~lS;gNN1AapH_yBWwhL=CX=DGyAd|L6h=)=#gq?zy@X%Nu1 zE8YNliQ)tJVIKU%3x2QBQ#d^C1wR{?UFq#Q_FqcJj(%Nw_7lG`*TeJG@CW4VXySu1 zx4y(!i8h9QUeKAxfJasKkj!)uzegeyWbli;zn2v{s3ctPXax9}~fv<2) z>ml*)J$dkvvDz4y&XMtlPEX9gg3TjUyx4Hp)_^bhujc)W>DR?^cdhj6jI}G-t|s-{ zAenxqq&2xoc}`|`$nPTHTaAq_34XC>D{4!GBb8t0O*pB= zgW_*7r6bJ+q!oU?BVBUwp!iWW?Z}x{@!5=3y#0%-OM8&*YHjAL3vE_gpyM^vp*aB` z^)95$WBsu^yp3mUq<>cyFSgY`;{V#+u3>jSbYv<0%F#z;#|HHenJhe`fI0AS+BOzk ztnx_7IF0m0{3+~jrSEE=`us`K*HeblXfBTwOn|xew>oB@_o>_~rM{m)n`5v#?>+vo|-*R!@U3)RM|BF3$?Nh&aiur&)ajM&m*~k-V;K7-d zk^?o~s<%3}8na3C^Aq{<*iPt!c9Bl)3gNFh=}#y}RPdp3NFI%|(pUQ;dD9s(&Ppqv z3*otZ2cwzU>5@0;6&d|s7FOx6q&6Hk}^a{O`H za1SuOW(aM-&fhRa^Bvld(*0d%!|BZ9&sWl1`5tLb7Hx1u8>ScWwZC`krxhEovyh2* z77m`h+dq8aZsfd~@3g`F8Tz0#kNR-|{WxX(@qWyt-9u^I_56-k+W1~H?nAV3cqPqy z(YTT72XL;6^lV`<0MuXo{7s#uNKRvowBbllDw zL-s7!|2Ai7wD3*OpTt*Z68vNy?>@!z=fZNawc^LFdj4+6?;nJ9l)wGmkmpNPr?;v! z{*JCfBGtoMy@z_Qe@DGvr4Hd}3;3zJFQmRW`1)78|2WU%sOukIDxaHt`-A5hgV?TH zF1C%9i)_QaV0FpG-&;B?>C7UD{y_08B%9+80Drlvcm_Q8nx~z@xcuVMA^6XQ%0)9-BA#w#DQ7I3a(wChV|Ye8Ol#D;!S z=K8#1nPr1ST5&zHK~2tmFhc&$@z7gnb{py2@{4~m44GH{c}srb7H!}XMfO=~nx1f6 zzA=hd5Y0l@PeXU&;oAtmET2W>glCN^4$dW2v0y29gf3b1QGJ&mR}{Tu6gyrRbIYbJxy3&bd;|-@ zq1sOIWWhq~!jZJiaLRCqx@9=TfQyN&CwRnDv^}%9^v6F`VbOC87Kr7?V4*UH!a{uy zVNnAwr#!(x{TCb#P?l)1bO0KE&679iuVf9a#ln6A2l0R=;8N|k;HGoJLcU;>;nskC zZ_$IS(}6>8yW_1l%%b4Y;C6U|laYrnq2JN>I68R2rY*JjC!yaYc!K}^qf34*-&bT$ z;Gr?SAJ|l3RUOL^Pw2yOJn1UqNoH~Br-BW|SmRl%*X*~LF0#>-Dwmc0$1wKk-1-`QOVg(}6VJb6UWGoU%qf+tc_q0*<%IY|nbmT%S0KbG%Daa0 zCRTjdM012ISD~{U5AFGFzD#c-4)lljR<2BMA};htzo94c8HzxE)&UpAcW0e}UQ{yQ z;?jl$F+VfeK(I!~K%DPvAUwj?FQhZVAH@Ux;@1`1*)1ymvG7RyiZpH-9dH=#21E_^2{fzF?s;jn6NBEl%HsyDH~o z%J>iXfW59vw`IdhK%Zyc+FqD>UPs|-2VGMV{{&=6>`8tXadhU-K<|_}`fA5$$9p)l z)t|AXz3_MF;oi(V<8S)mLTEOA1jgSLbuJ2Zn|o@}39MO(zN8oW+-JxKOa5CuxAlcF z=+vI34C9@>q_Dx=>YoZfn0Y^EiKrZCQ!n)`;7q1BIa~bA+%Ee1<>KG4H&6S5*z?HN zz^m|!ReY1HihoO9=__UXeUrEfSEm)1W}3f*_bNwa)F3C7-+$TveDytP^-VNV_*_rC zDftQiF1wO5S=7#-z54Wja&|Lw<>}L*`&oP=foVLus`T`&^9zj+V(Vty-pIbld_osE zV`U&c+hOu6*3cWk=DQ7z-a-2rU+1+yxteuA2H0{w_40-~&n8b3d}GJYc+a!&KyiQK zywi8RZ{fX3J@Oq@{fe(=wzd=duFl(bmvk=r4NYgvbmmo*{K~tG*m#>h1|DKVZR5Sp zSW--5bA3-?+jl6}=J}4Eg5mNRj zJ@xO&AD!bp`J>N!BgwPrNBEubY}%YRoV~@{^fP|{>C9A6n&iIqWZdL?!( z<0adj$(Y`=Z_bKw-q96L7UuwmbGpWPEu7sj>64wvJC_#jw7ywnFXuw+uEj&^BE^=w z{@OphB2qlVnNw&;_XWKUd-a_uh4bfdUc@@!$a@og$Oz7ptWWd>N2vRs(!>vFLC#6v zINXZ&1?PxwNdN8dTxm1!J^al*wOMWdai%Y9_d|~6<&{PCDQtU&`A$EMwLiUl-;FDX z*+Khn1Q*VkeU^6$?Z0qH`xmSI2JNR@oo##u=Ni{$`U2^;&cFxkeA+iYL)&>Dwms3~ zAD$N}4vUMI;|o>o2kF&*!$=QTA1u2s=pt6ML0=wnHv1Ep{~>*Wwk&`?3%44X;}6GQ z@NdJWp#2A?@vS0jxdzdo-WkNCNHeGDyY>t`oZc12JXDNM)A-vW>mbg#T2*=|^Md~% zXItuwZ|y6q%d`_i3VDg&W@b6KWi)87L@VDOitqA&%9yJz#gW9PjAzZea@wuzhx#6R z-$*(e2*+}n=fSV%eelbB2$(;VCQd2%bPIbIQx5rAOV&|7^3}QOtDWvHjI-s-(T}ZP z{xZ6E4C>4bo$*li6X+gH4DnlIe}0kghK;_A?=j2hj$w-3FFGn-|GhsR{g-$eSrxkb zBD%R8a(@)v^C9qT?Y~1a!Lu0r@sP8+wDt!t5&I0Dm*tFid!hGodWAo1A>&6Zog<_l zF{<6y*wlkthkL;p#wf;^&89w;k6!)JYQ6KRw~2Z^zFiIM>WG8Ew_*LjNbiXevi}a3 zI&X3PdDz1nXhXe0JE#Xb9<2S=OTqI-7MgTZVHjs}jvqxEm?I-TPK*J&$J6{c49?Yp zKUIAB#*lvB_{XDNLu(Qm3s07AUwc{%&SnvxK8QVSq(_{byx@C%QR(7#wloGlrdSZjBM)BcxBiz%04%Ns1Zx38#=Blhkb-^Ch{zNS22Z0 z%}RR3k)A{Oj$-f?qRb!YTH%RI6#s^l_5}Uo^E!Wnb*b8^HmW_+!K*F!UBY9pmcQLg z(Ij?Y=8h3}i$7Akq=SGjM&Y^pNXK3#+S2DA&EwbAbX^#~LhZ)xdM|DA3}h24d09bz zV(p9%pXU}SWB*9tKwJFKUk)16lqco}``%(nF44y{^wAjDm!4;PN9R3J zOh;Y+?5ORrV#mt;4$fc&f8B61z?lvGuBc zbiLG>!tX=?KJQ1~FuOVM_;)cZg87JZ|5?4fXBhEg!Sc)rb&x}GedH25A^Tvkl znSD9!xqPfQawGB3&g$@O{4VaazM;M23(aIlF{b*z0KH4jE_BhpGm@7VCeVk;SJPJF zw%ELPY3uN@-QZGscVwl!M9LemdV-aMRKq zXM=}1KhiMV;={&M{?Z!5+mPlSH9fP*;oPM5LY}_R?!rTSm%LzbZc^@)&A#RXH1S-~ zBFFA5^fKmUKPCAvb#kplrz>B?zQN2fzjFB=uZ%f~PH0qTtm;=D&N*ak1Ncc6me055 z@}Y6!NBCs}1H+zGsI!MFc6r0$7I-8wt(}?~`XVR~?E#l&6%6oe?mXfkflG6N_1Rn6 zyve7u`#J~a=*W%ewx@+OUwziRJxm?SABm$+w%uJ}IeE$fhh|PEwiI!yW{$;|ckCE% zLR-5(hB!SAFm18j5w`7GG2(a_Dc6$ilJkJPGdL@0Gkz_?EB4e|)<)uk8?G6(Ti;RM zaOhDZ{jtVFYg01{vtl3ij>huESrc8~p7>#Jgvs2_a9+)s9lrbq4d8D#!GGtv#WCzB zKbW$LKT_YZqaA?;M#ehmTRHbG-W41IM)KzotmHp*8M?0xajUp5k540OAoW?g+)%el z-?Ns*ex;4TfwRi_F5e%EacDt5Th>KfRZP;>$5=n=x8!!{TZ7=Iv5HXEk#M}w;ZmN) zE`)0y+m*&9HLDP{SMHlR2bdCjOfWqQm<}J&?oX(3e49O<=UgY>rq03|-r=U-6k_-ELc6%LWU?bDROylEniSq~fZfvAC4aEH12MohYAI z+4x2#*rN&k)&9-U=89c>;tcV|Y-!#-t4s49=1e1}yq{WpO7g7EQn4N6sVr-w9P1y> z;gzg6l6aR*_@8LK9`}gZndTBcIdcoq)IIxdSV5nWOV#Id)aTci_!qFx+r~fRPAgOV zSJCN|Q;enCOV#rax>L|;Vn`(JcKwTPfJSCNSFkx3Azm}zKfS~nF5m4n8SSOG*UnnI zz4S@eAb-L9S%B`T-stdNOv^Xmn&O98e?CLJ%RQc3+-2_YCsHR;+l@66m41+C{pJnLQ*&c9Q>NWape8P^qsKkC;h z$VN?0dCY_#Wn7tC7#HHo{qMjPm46CxU4*w6(ms{X+CIcj>GUsP9w_gmThS}w}Pkg@>~lnRevkLYjb*DRa(F3`C$DmF9&vRPB@QF2In*v zRHtxFICcSLwi0Vb^KfQmd^A^T7#G2~HH9rp<#Av4?=J`I7;C|$rJK2&yP=?X+v*2C zSNkUo!%rBVnb@fH<2Q@KFX7Wz-uHo9P2f~Mzj*kGc-10#!{*#2^bWFPW$cA18eaMHxr*N#GJdlHrZO3-}2`L zX8V876(KG|Ggp!4qtvrEg>QrUKsqDmj`#xn!LYG4&^CkdsfFG~fn^OcM}+s{eO3zo zhY#Fczdw3F`?&SJmhUw-?cqB*i@{#L>3u!#Yb*KE#^S+_%KL_L`mj7ZfKz*d1ABK(zH6w09aid^Ms&A4)3dOB-H*+5uH@x zqT@QXn?;K}bW)Ue`mf;&-mR<;x`HJhd=ma)=Wi{X56+Ii-t`X;qEndM9iGYBO#dYV zndq$|HvTnnWF^`r*+{-L#PQfZXCkruuM|A*@>tJ!+8?cPm(0o>YG@f#h4GbPtOwQz z#Yy{Cm##X~^(V{)j_g^AqH}Kb&^J9~63d5!^+jSB z3R(m5mAY-7nI@qRQdlPC%m3&O;&fZyieMi1ChwP_Kd0(Cf}AaXOe>}N z3trPF@bw|2jovC&#Y>z2E#b1^I2K{iRdBba-` zuA)y7#zFAX{L(yRja<}R(z&Y^b4%Ye|AgO~OaIJ!Vp{AE^YA`QLmnefT4;^vjZ2y_ zslV-(r+4){%pICO=lbi=A6CEJpl_A2R?MiiL%v-(~=?1K~Qh*$LNlYgoU!zm}e$!&kXl3kbKhw?w-5cE(0{E?f=QTJf&n zcKRy*HFQ0?;a6`RIFI-C;`5B1AH^3IpV%g@Nh}nqd~DviW&U;e+p9~ntG*eI>)-O5 zqXz~*y&66CT^_!ag~wO1FPr|$&S}}pgOoeJFx_L1W^R5VkzY_43m%ImKaQ`6;zCd2 zoz1(JaG!AZU~PU1G<+en`tAzdzI#yi+3J2Y#XKwPeX2BFd)7qT7Yv??4A%tT6t5h| zbvD;MTzy>kbH%voxN5m-xT0JZm-ws6WpEvZ$NrJ)EiUXg`~Sct9{fA5!(9K(B_1q& z$2lwEBfwpB-*lNL;H?3!Yc7hPq=?N^wt-(&lwP6^**+{{Ny9zCm-(c z6DPNaV>%y)rOsU>xfi(?)0!a>uB-laWVKZgEa) zxX;TMuSmD8F2OGfZ3*HU@m*(wN?vi0r$Sx=@6>ngnUL;7F{`H9jE%>79C}_e`W|@m zmBr1-78qR44QXix9?W`M^R_N4zns4+o)$4iO|8fi&p; zFnovH;IoGZyg1|_KQPYX0pYkq6W}L)41S>aypkfO?EB@l(vu}CJgFCn%mm8M9r`#ZVUd5N$k`KN>OzcC%)*-)Xv;f29 z*s691Q-x#3sA2+Kk8?kVJO7KP^T+0X3il{?oC`+9xPK+IX_Wb@`0>ecH{4ex9v<>( z?*IDVM-N;D9nrj+#2!d1UDh4e63asSkJeM?_xQGRH1H$;WMKc}1peplK#~XDmUpygQAfuU_%fHojp`&CT`xE!X8w z`Kj$aoW7Sip7tiv&xdlG;q~o>hqCyHW;zQSx?W+7i2+J^y|p*`8~EN^KgVz5x0%JJ zklpOV_qjjeFRQKfHsrW-)|mVNYS5E3rss$4lHbc`ZffIMI++{2+~b@5DLuAl7<0Ub z4DvA72MyrOSa4p({&1|oEsY`eC$hP zvuY_*X_BnF&LzzR#yNq1k>hn2dh^|dH}D^x3|{=!9q`i${AABu}AsZ5L1cumq`Ujimnz(wxX=)Mm*M;d%#{hQ1$penS(>I@}7sSqH!2JPz@jbF2L3 z!sGmAoz|x(`b;p^4r3GgOyn8gH1jm{nP@GJNX++T3#j@`)K>V;deUo+ibkX2Gr?YP z+Bgz^Q-j~x#l%)t+hp4j%tbTrXPqaS`6KS4nQOy!->4#vSs~5*A$QTtII-3Qzu}d6 zW&z(w1-4b1$v*G{wUnzp_;t5+dsCRt@^2Nsh*s7SJ5hE5?Ws{aYKW!%Mt+wsA2rcC zbWJ)}w)AEKzY62Keh2c@N@$t(VaX>+v~MyrV2Z;$*5M42$ zTcU-NpkYnWJ2QSOK8TAvH^*8BdU&}b+J+oxw0kz~5zU(zUtGF_b4-%tNjsed(I(j; zu7LK*4skiZTfvtremdH_oZo6k%t?E#r1^KJ%TMzAa=yo$8J>87d{iF$@zcI|;!m^0 z@n&AA%!iyk{)U04%k+@>v7zH>|KaQoe_Uo&>9NjN_{PQi-uj#TBzZSDJ1B>D9j_4g zqRv|syV;*eIn9}~z0e;SKc3J2o$W2-%v2+D6KCIU_M5Wjc$4z*V(b*3TRxip-|Xp} zs3pXz6%Eul$|kHesOG$MOTYQAGOw-DQOSPM6m)@WKi{(C-8rM;C(?*44Sv?T%Y!Yv zTf5_>pf6uXWKUfvZ&=%C*pN;gIREZ_Y*+ zPn*;>wNY#1r>IwHPF#;y@vcg*Hjz$xZt{isBlPPMKon z@12dEj;oKWi)-guw&9-n_O+vY{MUcjKDLIG-^*skL%biISlV|fknr*w|B=p02qyU{xe zN7#>A*l_UZfuXkebC655&rEy0I!Kqe5F4v4dV81G!CnomJp@y&H#R}rC$MiMP8#`* zYfQ&w7Z(meCu>|+a$y*&SANEg@HN#L#!+XUsZ7a8HK{)DvR^aS)LFxKt^dWtoAc-c zSz|Oq=bQ4+2T%MQKWNs>O^kb#@!r92^pN3i?S+eS9*^1AssEIVYUYHxDqM2hQ<6h}~ZPbDy}Q$3G)~S>f!9UH`n* z=#Fn&;71sTW*@$V?-{glqiJ_OqdBcPuKBHbUI*QlPu|GFas6jA@DKIV$R(03#Ro#( z23~9L&JN^z`793gahWuPCddX6%6bOA9q=)gAzMUfm&l(W@5NW{n=x;6=zlR|B>op8 zM|;B}jz4~gymyP_y?AHnBRlL2>=F1U zZ}5@1D?P({(#tOcU#w&Dp4!<=nv3m7L3WB-`jw0fSwDb-6Z!o%ox0W!C+gJG@2*pS z1^G^O?87gnF}lHT3tTfRf`hzUyMr}*dPNYwqb&REikD@dL~T{}as0zEWS%)%gnk6TsM%u>JT=E0bxw|9NoXuunLq`sfPfR?H?<=yv&c@ZH-sDnvklx?r zA%4Tp%dy*yc$a)vOB6k-;ZxA;l;+hJiwFXv5|f!{;E8yZAAzSqSHe9p;MF8Uwq*9g z5I1NKGE#Ae;wrfQ&m+eE*&kV5`qEdr3Zg}!Y=Ta83U#M=uekVA(OWits;e;NfN+(w zf>W#!Qm%hFX~YXBlJ5J9y9%=T-g^@30C55x16M-uvilZHCih&%3OkbrSI< zixG6>ar*KDblJ_^<CPkjYZ*FjdAd|qc=mw@}GbP|4qbr)QZ>EXseG{@@+MLI0#E@Z-M-MUIWNQ>{5Upq? zuWXH+9~s2+9U*;rIf_4|C%NjnqSkrMnTkJN1|Kf3f8VXW=Xpnaw-s;Qho8y5^SslW z9RH$I+x<8?JK2TgBP!aja@{lVXQyoW5Q=U|PLmBoHY3x9|JhwZw#IlgoG+F6F$Nqe z)0MKVJhYR?;Z>6ub0g$;6@S*5%$aOy)*$|+gFg@bOV7i<^nBK5ks55h%roU>S@4pL zZYE57f-ma%*w$-nhZSq6Q~LWV4t|(31ugJXGWZkluf3-6FN|L?%6yGvTxc$L`WVS` zdB}SU)bA_tjRl@}xJ8Z0>oMMW;D+vbV4yp&P~53>3py0ecTJ;18I2BwvN#R^IWg~= z>`$|3ctbSazt6@e;KZ{rhi!s(HaqyoUs`Aax7wa6!`dJgv;1h)4#D-%Ama$e4)rHy;9tpj3;)%(L*V0RWE<73I6K<&V$zm6 zuPa!Od{(D=wt;8#H>@Xm6`M>z#30@5I~v$wYo>F{r1FH7P!HTIZP5BODRl ztoij4U-%^432ouj5#kVK*Fh_ycK^Q9;R!Rh;e)&Fsn7?vZR{AYgR&nWuiD>ib2cjH zGYdB8`O58ovd=&7wIS_4m2vdCN@3gSPhGX`4lv5}@4IQ;*`eO+rrXhb-F~)rDlqyu zF|UU+kHb0yqn;CBw4m2-d-Cmd#PZbP(1)RQxWGqste_73K2^s#s)Ig!d||IYT=1bE z@Xtc5{e*tp)r-CEcpdL7yVCv>%U1g-`*gLx3EaW9i-zQ8xxLsTvQon=?r zeq!0cUu8E}+HSfX$j4tQYA(fG+V=>y-gS}Uf~@PWS-rroqs@XfVyZbb;OB|1)cu2Flm?slA$~8s7%auxO<0 z2z6|*SqFPv?A7L;$JUAM!RFjC;n!HFrxfK}GOcrkW8*lxETp5H`P9alWIktWY27%Q z_31VcMUYeG2z<@qfn;J=v^}Z|7f!% z+H6&5bI7~V-NcvevsurbxHb}99yX#(j}JlzC9jLmYK_2|!{OY~-Uji3s;qEp^#6Vj z!(#F5L|KNa>^&Yebl<>T!12BI4fMWs^wIyZpU6D$4WIm(V_6eIYlr%Yi0{icM7Sb; zAs!U&cK~06AIJ7P*uY~FJRMlv^cH)&*smZzktxWSA9>-e12Y-#cZ_Xf$k^IO!Dfwc z_`*oBl{_KuPR;acj9Fg(q`ZG!Wt}dbZDiotlnoE}4RFJ7hz~&d27LSwGN||0=NWs4 z+lI?k^+B09!ZyYtj7lyr;r)^&|6jsM@DZFi^TQYY6~7jILRt%4ggdIU3ZuiHI4<)> z!9#;NqJ5f{Q9Tc>AARN9-x#pQNM6=7ou1@R({RmA-{EYbZ_zfJ^D(M^Lv<5LGQxJo*@=bQbcD`$FO_kl8c`Ug^`&=JGzLZTo^fRs0 ziQvNC$ZLyFOO~vZwTE|?SIQnL=gzFkxyZC3tn%!;5zMNxE_G@Cl;t$!1LT~UC(b+M zg9(z;&<6;A)`xTM%3@z$_J^)u3uCnA7k%NptNId#^D~1ikq5WNA&WB(rsN}=^#kc8 z??)=K^ZS+&HRq9kRBt%v>ATu_weLsjAVC+ZOm2xYKP z*5gbf@@vg0SudmsJgZz2nL_pnGhe|25BZDr&Wv8x%)n4<=5f+Bf&=2IlE1<=B;&MR zGJPxfOCLnjgmdmmz|pI~jxtT;G}G=1o`OCo#`Up27~q8JIZ>y{p0e@Yk}|Al*AIb_ z)*+h9lACr?j_OriCVdL`AA;{%^H=*3?mMHd0c;k}GTsJ!M{V50v+hIr^S4A_pdqi3 z*2s9pr*c;4-xtbJy^&%vg+4irUk$pE)6t!hU5wTez2Z^~he5MPvgg!-+LEwCEUa zNe4Wgalt2D<8o$I2Ry_+G!0#)a7=n&&GBKsKwp`k8_wM`*r#$ny1oQ_K<8rEydS|C zr12)nmwldO+8A)FxA8Hg4V)uepd9Z*(A1wDJ-SeR{1$e?5C)aLv+sRWGKIfK8auOS zF!@B2Po{4}bwgD?Dc#UeKKXASAT~blmV68w5prYg6K@g6to&Os&m#KG-9Tngnzj5^ zECib|H4^P_tMgRmGD+XuOENwz{mbjwu2tV_MtM>mpv7m$f=b+y-A;l zm$N@cpX?O&C-0tMobK^^!o8EysY=hi_OxB0pG+KhCh*%63`d}YiFsuhY7MoXa>8+) zH)LGneSQXAMBXjypus2Uprzx|m`2d`NM>HFE2esbaWxesY&>MT{!Z7NPPG4n?fH$y)4$GBq zs&HlsWrteWNB4gq*HO?~>Ri@Qu^h5O7W&3~)mmQr0NYtxX&ort!MYK@?Y=2%)4W4 z5FZl1od>@i8e4%jRCQKss9*K;<(*KrR{biwssjskakQse_h!}tq0Z5$$YRh$!AxzJ zJt)*Yf@k3v<&nkSjfcQL#vG$^v(UYn6&DC|%mS@ya|rO!9_wMes)xx>lA4uMc^kX#5h^8X*tU zSkOPo-XU&K=QLuP$k*&Ov!lNmz(>j5YA)5dJw} zrS#Ni*i%D!D2%m$9@2mhsr+ybwf13)t-vOJeBNB6Iq+xrbZv!C&%`DuI=7}&=F?YK ze9itIIKCe~eaXA<=^0f%&HNe4r)3L1M$g{|pJw0HLit{bPm7=Y-|%UzUB#yrPrAyd zePj`yL%OcGLZay=w7fQccTn92^?rF+iE=_7Hnh+1u($R3eekf>Di5RIRUW3kJB(52 zkC=J?JZuGR(%72tuz#YjUHq=9t@*Q~RHh3rHi>}ngR|F3r8z}yUou5&- z=&25Wka;nZIc%`sv6(#8woaw3&(PL--W}5mFjuwq2-mpa)qBQ$IB^ZCxDS$@73<;- z%}0EdfRW~7RoAY#4?l!2h%ZXNDHVGfWgaLVv-F*ICS>%B>Kx`T zaUV#pm=B8m(6pKPOSz&2#`>ys8as9%!1tMpBFe$lFljE(dp@`KY@&K=!ZYHNyy zGWFKOM<2~4@DIyllLc-Qfwx6mu_f0U2g0)qz`w9x27AUB=MVo59{*nS407kChk6Q2*K&p*Sy{|x@hoiK@y)p*W(;dVnxSy`!Q#}SD(c{ zDaRR>_-)3Lv%P!ICguWoXQVm5kN8aTud7er;MJz*diZ>Jif0xzy1n{zk0+ewv{_;l zuzQi*k-PpSqhEmj?G{(yuD@P`B)};t{gjHfB1!g{d37`P6B;bG(Rs3%;`L zo|EkI>f&>~2=z7OZuVlv?64m(-YfPhXXAQfsq?9guD|6HVq4_#drxlmpIqwtTc^4H z27LY>PHpxdpW*sD9@M!{oBc;~oBh1$`WvbLF=Mm;pYhGU{FLgjE&mI${77e2>Gd(I z*=vUFKF3~y@pHU3mpibH#5un&vB;a4z>kFb5()YXKE~)jvaLs)N>67QM3aj=l{tm= zph=A1WD;9^evvnud=bVtkpxduT)-le>?$NO`rRGwdr#qOmdLV}kgt1Qe!#s2hrCIA ztFVK6aTosvy{F9UD1UkyKZXpx1rB!qEIz^p?{lk4SJRK#wEKZ@$Sv~PcrTxY9*6fi=wF^QRE3+I zqiFy;!CrArdq%FD83ET&-6@(bD6U@(q`>fV*Q!Bk$jpLb3My>GFS*c#mQUa_JC*L9Jr|1 zmJQ&)k=+xQ|_ zr<&AU_Lkh}$+u5^*7!AMsh43U=b?hDhR%2; zcAJ@=1}!0eBk!Zcd(jxxOzWnquK)NvnEPuFm{A5pH#)k1)R;V2r9UB-caRM9&sN0~SKlz#-Bm)6gICjs)Kn8-#O2N(=aICz(&l zS>e8}h~4c;4K~`JCb~kOs0LRw9G(K-Swwp6WoXQGdn40j zx@Ml{6jClc5ITE#0$-;r{4WQcqi)G+Q*-Q}$)o#mp9><1=YvRwJv3=zMW*%!R(_$U z`4Y|CRH)0`fX^&?E9#3TusI|-tJ~-a_rEo);Vja`Y_Ep7-{5va-zksz*~ocdqRmm_ z!ieAHm+lH0bI>zmH+8)bM4dk9j_BmGUFL#bKeXyi?m0 z2PTqxIgF(e*K>A9FopYe%5HKUFN&TmYNQKlllGtKdjsPt`WB?(KTJ3=}arFtgG`HF6r{-r-7?Gjr?=q2Ve7QXLfl>c;I~c z_xNS(cT6%bC`WX{JR!gG8rfYXl~a2u^jrKOd2^V*E7{|1A-_p}i~NQQol$<$N872x z{aQ%dR7Q;aEC2c2u`(tGd+!Pj#sbh|=h z<|pQRD~$%PUhkZj18dm=Zw~qDvo}HG=6K!EmAvNCcHjX`a$gQsTBIkP(dp1ec2@8Iy67@*#=qn50lZKxTr7ifCr;t>RjUHX&|iCNqijzCX9Bpg=&g zyTAQw`t`c6>U+-lp2zR=`JQt-ef_Rw74u1cOJRZ2m+R#o@H@SAt#QBKsw>pl<=^F{ zKE(N7y3-uW>s)zfp_BW#@ANEmWQ}P8>A}KlRkgPQI?z2>(m}^4J^OMs&b#i(iay5L z@+-L^J{l};@#9O|(DM|7pUCjNlxufa#V;eptg|i_aYm5dmFe>3Wa|}t1CsagBW7>2!MGp+WO}H9GGGM|POvqDvv_qaL*trtLtW&xwG$M*M^{3q5f z9jE-VEZ?eIdYyy*h1`6=6TY+zTke$TS72bdGnF!J_6<%8<$b)$Y^?U>`<*SH-d&Zf zmMpQd4|rR752m+N8*+tnZ=-Tea%JL_qdeg^oa>WZ`89F=`o6K`$~bgV(MT|Lk1tyc zJV~-evP7~a054htUkutWc)BA|{93r!^56~5y4%lpV&GFhW888rG9_E`e0X?S5IFJE zP#sQsXajD|ac}|PB+DcNRKMB_1E>1MkHs4`*Mb)>^ko?B1%Z?N67N_2f{Qf4MNa}3 z0?yZY$rt|@T(k);b`rQSaK2uu{5o8$2`+vTxCn5PRT_u*z1oX6!L^(OE()Bl7n3i& zSa2;(aIK{KI`0YQCI+nJLw}Qe7<W~Cpha7vU|}v z;UCC@r5SjB0iB>k{zmPmpr?_CZ{DYwr2+I|-jm>Q0-ZPr4U3on_G}gI%gbcTUK72uE~Vyz(kWyMY3cZ`&{kRJ>SO0FX%ilW5^>P z3J-XTE!rvVsRnJygWc6d^lNn@?93;BVA?q7_Lb@~<|JtCsjiN)E~^&!bebi<)t>M4 zFb4y7obN2R`yJKO_Sk%9`$Idct0QqAj}2|cu$Kpxo#%Atx}AY=+?hkWtHWV@JpInV z4VOcqvy#d`HU0(ew?5;NWXdL}acgR@Sl(XqWu=tX%cLsBN zsw>fRgWL}lUkbm<)Ob`6bR}QY^ekoJ?XnMKbBJdf)opFAX3PU`iZ5@vc4yV(k%yV< zxc?yTj3qzLdoas4FllQHb!_e0S&dpZI%>Z^%eNcIkIuW!Ns+&L+8Af`%JI%XERH_T zI+XBRkUy2YmGD}f>j;*%`Z1UZ{x=ruo?i@)-dXM7y%!t^TkuePH?0p|&scU;mu0~{ z`kEqrb?;c}UEpk?{PNs#crInx8??xa-EyPTZ!cp`SD=4lGh{YZw_m!mI*~HMr`6lW zvxZw(p9ScqJFB|CV?~MivYxB9=kbL-yR)jkHTbJ+{bv3;+B!;8f!9A*PF=d*OLJ#? zin|+w(2XyL(BT7#JIgDRlN{OM($~dbWowA<$+n1Q7x7%@6tkOMpBGZbK;J4O9@kvv zG0OOS&#$LeM*OU~%oCLHc^qZLA61WdS96&kQO4(Il#%|cGU8LsWuByr&$}oi9am+1 zp48Omrzqp6QO4)hl<{@rrZP`c#<$xk|^orr9w>+rR^ z+{slhm!ME?0|O!w|{hpQ>#|AjZj3)efB-AZ|UjpW(^xa@U62oOkRQ?%D+3TpNHM3)mb3eNMmWcSKvhJ;VDukIisR z5dUuh8-jXtuC67i?*_p$xl=|s-&VZN_bDF^?Q;8yeb`<2l&Meq2yKtu;4Fu4$fg=0 zSZpNOJ!?(Ouk-MTU9Rub9$=3K7?sm~nUb^mHk0l*yX-5-JpK>fvAn!C(1Lt`zDXAy z3YXg+Tja>M9(#19bNDN}@WI#GZb2uP&ph}@e_1qa2GCh3x3b9no0JiZeD|_bM4P^k zn)l0p_;OXcfc(`dyVj1z+xp;q-=}!^JGRKCX^V{|NkYD86JHeHG<(7iJkHq{x z+KDa17=V>MsD2&3cbB^Y+7*n>EFSKw@rJg?7Q;udvq+aMD7#YpN%xn;sYklb)Sj2C zvQs6ewLg`#n8((z6Xv~*c^8b@>qM^_OSql?$n$PX>!$f%?)&Uo z?dzNghIP_>VDAYJ`)zc|e5op*K}SUU1ski{YnpZ@|0g#c;cb5gZ=0g~jO+gY?#~?M zZPE$S)}7_ukFWPq+=CpJ-^HL;7w{FM6X=e;rRW6-#vibd)oJ8@rsflpj?nd0^y%ys zzCWr*b}9b6UhYANFwPLRSGTpyDOx++Ah5pu1bq1BZgij*d|NY+xq>z8c2rLs7{P|E zg-!@tz1!+>9s@R{cJsj1VFPto_2X2qPXHSRR=Pu^4jZh)YMpI+^5Ge~T1gH3pN6Fdz4X3AQ8-E$UTt1tHVdfVWw zhW;FW5`70-But-z)905DM`*hf9;3X4(rdDg^c(s5Lxt@%|2;G+e3k#+m4@$LE@ zi_4eOMxt~bzC-ArI^@e&|APsguSYM!&#%5qZy7_MRbF*Y-mJJ$@n3jXX*2!4(di&9 zYT%_gr9D@j%KJ!QLZ$7#U(1Tr^qPh)qkZjWUB+&IFTL;iK=ghE`l|dbFL>SGneT`O z;=wP=yavKogVfWis>D$c!gj^E5iMTuHUt+MmK`*1Gd|$!Ai~x z_Ay|6UIDCVr2#8A(SiKlM`7VJGr$e_Ob>eZ6PY@%09LdjSlJJP6&;)k_D8__yaHI! zieP0|2sZXUuulT(^9o?2by(ROf|Xz7RP8=hhm8Uo1Gf7+^L@J`)QSHM*i+5()9D(Y zi2)n0!?xyXYoxu$6Tyn^8|(B_;G5}vYlGhNC!+U0pWbD|yocWHKIT_E1|DTeM`wTE z^f}|R(02x!x1f2u$(|{pk6i)HThRMrY!vJm!#4)r*)YSWKb;R0{e`WpBOhY|U0?c4 z0{tkG$vdL`8cp^4G#$-C@7NGiMb|5{W$^&{?@b<`05oYb(B#v6s}}l-% zNA!LfFp6`LKUZyv)_q$E`a66T{KCeEtN*WqH&_dtm<^rhME}oMBjB9cOysd;C?mR8 zzXTu8OFu=9QBJWqz8@OemtL#BiU-taep6L3Ez>4bPZpZSt~X|(GnMxUG%x)mWNocZ zhvv1XCz_XDc0A30_c)p_rjOG6uz&nq*}`@i_UCu{-)xZGuRRqf#P=GI?Ybl5KkWVw zX7_XdtZ(-}%-(!gj(ODj$bP~8@0!G35Z?=v51_Nqho7&{2_*X*-MyMlVz=POmQNti zmiOi5xFj+5xnpTZwu|US-`f~dVE^0VUcZ4EZq#-vqL;%(Xs2_RyS(*!S9booaKt%$ z%Px0d%_s0Nu7ExkI^j#u%Yj=L4?Dp*+E)O#`Cjb0wpK^}0PP8lBtK!v7r4Nut%1uw z2@Jl&hsQbH*vzu&rN_#)k?z{|7<`uZb?Eku?=lgp@y?Jbu0`hL@ zLZ9|lP*3n_eb<+IfBZ>oe01#svhi8?@5tzfh*gmR5Y0$IiN6k zk-d>`k2_LlDEEAIId)g;3}WAa8Q_jY`7+g(Y&PvFNgrFsdX2Qeo!sWCzfb>2cX`SJ ze0i*sbbal;s2%AKq3rWj`H`kwxzpzrErt2$q4+g2=mL}R73L`ek7&q$zCk%^*gqcC z_n#hrloy-Q=+rh$Iy?wM2a1?<`)-*FBi zbEK1-JT!!kBR%1W&x|sUQATOf8)O6cdfahko}f%aM+nx-NOm{Zqi;qlElfSq=~a(p zbaR;}DWf#$3Mcdj(x0a&b4q_8WuB(Y`}#E~_fyKrAK2gvk1VbGH8ORcFaS@$mW$_C zRTIOA+ev|&cBixQ(Z$G9Vl7yM6lvi+IESoiDJ+F=EOpWa@Sixzv1#~5cBwNa4PE8= zCQ1Q2GYf8$7RfAiRG;Fz+lpPtn=W{HmmkwIJBRN)DW3xIEk(&}?%4;Iq^E0NLi^v^ z2e)Xq!zRWj3$FntlacRUdO5U(uTi>ri1@R2^6((=`khHLxElvs;MwaP>E`ldOW&5R zEgicB*(e>`r(fh?>7f^@qD_nVC&kZMh3kFYUAlNp4#PWWyM-7z>DZ#zh%H|zya}B; zRD7i>zk+;`ZI3T-EMjw{hg;l*ARlR4aS?VAe1tJ5wlISIuDxWzhDm$A3%QCPLUd&8 zWxoF2f}O2=@e27HqO8>%@+Fr;>@!REj&~7z$!{C9I-B3E)T6Sq_+MqD6R3>%gUV!@ z%1p19@oj&~h-awG)TS~W^)m5G=i^i0E>CO-?UyPpYTKo>h0lLt;Q?=g%2}^g!_VS- z@aJ0l`7536&r+uJe6`)8AHXSYDO6&QH^kiFW0ejeU1@Vjw!w2pctan&;fyBU@U5|R z-Z1%sHxtBSgwPFi4&V2`<+1g!|GGA?w&29U!$WVy4R?ej`@q{}W$tTrl}`NnTiqAx zUJ!hF*=5Y3_K-P4mg26)dKvCW2A1!-H^GhtHle-X$v@fu3bE0ObxYP`ixQ34q7r9p z8gWI?bU^m0g}$qMkMJFc_k=C&VJ|3~>`s3VNVZ}a`yycR{rUV(Z}Szqs`?&tFh@T2 zS%`AFTRNQC>20z!2KIMt@i59$xAvD!LG^-vq=&&-`PKY-N!v7OS5>~~t$BE5zT~Nl zY!>kwKWtRJ@qKCAy0aZGB5`P`D# zyw>-2fsrkveDPGp6>49m2D7XN!`L@xh_@!TP-SJC$hHuFZOm2V1alQ-e*C%8KDP3i zE6s`KD8d}cuOPpMYz^u8@^5I~Bbi2@dz?+obwqs!CJKztLxE}WVQTzZFxnT^eqF8K z4LJG_Tnsqv4KD>(8$PQsV~)zO(OrDcVCH%+3%+V^xQjjC;LZ3clG+2*-Y{|N(0q1g}k^W0Z({wBVyTaJ+>60)0w`k2Z>v#BQKX(Rypn+!e%c!;{57gT!`&dFBY*_NsJDKR%QB4Zzz&^r2*^(>z~o?E5OtF547WW6n8BFG=WR zC-#aVmL>uIZ2eR%-dnmyH05xXh?ws`<(yav-p6>Qrzz%J{?$Y$ap$=!JbgnU4&KP8 z5XA2*-G@t6EzfQ>^(hs&bd9$L;H@F* zG}IRq&neW#(1`m~|22+P#C@tR@t_{NA9+e0*&446X5r7&A>J$>l;%M4L3g1GUb?R8 z5WM1xbjC*G*Vxq;lL0UBVQ7pY#u%Y4>7?OCUBEZ$(zuVQ3pt~@q|+!a!0%VRt}t~) zsZ0JS`KZ({$pEd5`W0@fD^k+h;9INrP57q%iN}k#`)k9RXwJ1R>T87hW7MzMANjGg z29i@+2h|@b!pH05KGhmTS%WzBC~in{C$WLKQa`yTU-d)__{8eP@U61P zoP@u2!Y2y+!q?=F4q~?l3(FkY+DixK`FmKRQ^k^wHpmlVc0%xo4)T@0RPwth{|^zSvt{0o+szdBD5kzZVzo^duwN)rRF%6hDwj-{~!~ z@go$a-|HOC1KuLq4(9e&70)SsHAsAEtdsbq0{;^i8t4DTN{2u77toKBuT@)?_Bm@z z8)LZES(Au5!ig3h+1H9YoKJbh9roqfPk>JfCQ9t7bl1iKI=7|x z)*|Nt3dqI+{siikoUwS9oY6U@AbXzLqm=BB3=I~ML;SD1)wKVaV9ul?Xzz0SLoZe3 zuc*ldWX=Z8#8FmzxAJp5U*tU9gZ<8$Pz&;FF?qG~MruQ`s}qaJXX?{@Ywy*c1Nyk_ z@t6EIb)HE!hW3X;16@A;OOCC8mubIv4RKqlqlG-#P(l0os&GPM4(2$o@L-ntKrbOr zK7{9P<(sYiuR0~i+SuRFxJ6gu&7v!PXLe0I=F@wZ&3)yMvS;z&Tx_;w=pBq7c(oBM zJy+HD93+>5e79@cvoBS}!!-uQV93X!cnDnb@)gVyyV||;MG3zK(>m`ZZ-Trl5L93jZ)vL zub%JA3}5CgU4;FQ9)XXuPjKiLviC)Y;Ue;Zb|qug);eUO?3Gmu&Lgf4eobFuGte8D zXUSK|LB%R+t|b?R+ehT0WTNy6`lYj9QD7s~C0Vu(Sr{)+FMd+VGRe3IzCO`~_>UiJ zpXsmljdo@4Ngn#P6aA9yq`6g`tmamAXwRla_RxdK{!AZjUq}3SeSEC5WTDomAp^NL z{umk9_u-@XI$XvFQte!YeARy3Eb=bI`iGEtifviS7{`?AakEMIdJ;a9 z?Dl2l(qWvh;C*xwnnw->i;A1=baLz%-MqI4oG5r`?>Y0$De(I7BOtG$^bWQfFY=*iNU#mD=ViY{dKgH4BmX_S>g!lD2 zvr6zQ@)Sd>y=BS4#kORVQ<-0=#n6r^(ncN|sqlbzn+=a4CN`LRwVEr6-|Vff4o9HB z*Qx_wINw>EA?DLw>GT!gHCgejMZP~tJXEo#G3aLz_4NBV1-xvo%&XPa31q;73!Q;A zW56}V>=HxI96xs}d2A_g8A=ja@JHdm7;lB+ABUCBH7 zy(DMELlwWPI%Gpxh5oYSo%9IF7GD-3_u{~c_sj1-k+PD3@`3v@kUYr^)gfHfIWzgX zWuqw$M`ffJi66JD!Y9T5igVhwniyALB}desl?Chp#-o0&j<%sY;0K4+RHy7j`Nb5g z+c+mIzN53M1NVK>kJZ^)kiNxPRnq0dQ=F^z>SW(-p)J)bnp8bHThN9M>&q}`QuPi* zqCUTw$p5lEmlZglOL)(w$MweNUFW2EU&dMqU*h~P-mX|Q#n`kI7C8fnxX&XLvn!r1-+r&v z%efTlS@#KaChXDDOI6t^&lCF_z65@Q{8NmNVuI!4lx?d07V(-O{(RY~igk<^weGvC z+lcvXeegyfPWGbqMkFhB&M!qfTgeZWUOvvAJbK>3f>+$$q%ZFqagy zGn40C_PBiVvD^wrd(yg3KxfNzUd@jM1kaNh#hyXG20wVFwr{RjnZp~|12fn)_!>j- zg?OGl??B!$$Y#ki?W;%fE1fCV5>tY&Mf>UUjYQ#H+B@|3sI9y&qqJ`&T2+kj)UFq* zt;8~=w68Gu_`-$x4E4i#Rhb`VQ!EMzJ)p%~#< z4qarR+i3xRrGsm4(U*&J@f83oni`qoY#lyr-v>_}CO5wvL%&R+-}&{R-|1|Z;&~NY zET2sXJ|Z3^-P^*?okIR9emHDl7iV9sD(+DI7Y{I5d~im509jpH?&~}$=rWWg&KR1~ z+2#Z`>ET7SJ;V@a?ZxY-&7@w&9H1Yv3nKJGz6R--I>#BwsOkby?Ylb%}3gGTGI$IGG7LrpaLaPlaPDn4&c$A84^i~i(GKC;(`T=?IO z*-sMpAbrTE&m?qOr%~?Rsfs@3rwy=2FCVe|u_Njn+F(aO<7m3^$gW>+}?~Z@rg$cJQ4N z7pim1y*bWhu3~TBMz?_###D@lK^bX!**bjX+ z=NQn5y7S#f=zYMn_l|qqpK~&LiJR3lfJA!uKlQ_GMq$Q$74` zcnSPrMV&v4r=QV+Q^{v){OEqp@rWk{ID;yCG%{l`eh1E@TEs^&KdM*#3{LMZAO0%w z5UhjXr!3gx_q7u}@qW(pDArkgwe?Z>!X;Us?n7B@!z^HuNcsBc)@G{xo+J|g|7s^MoCKB=e(SF>}Eu4X(4xNt|pNV9M z`_(*}*Q>ob;+;0{u8yXyWBJPFs`%t(5$*&@!gH{t4YtL`B zGT39{g6pusI&32@_++rh#03K@|EtFA`zB~Nzc70=F4*rgva;UiW8#9X;GK=y_2&(oFjs6qVPV+{KNC0S9E}>J+=5= zKNbo+&^=AQ{xXxZPz8MIKCdcOwU4iRLOO`GQ%r#Djuz-u`oQ51c(;x1L`Q<%^2|-+O39^T@ zFSf~Ie%K3Z=raX)%l;;PraOL=x5(y5)p<)2-f{@uVm0v=t$%~J=-hk2y23NyY;z2< z=|rA@zw({*Ykhrut;G@N4e`O~SVdEhK?YX-H_>Rrzm#8Aqfx>40o#Z{Hg(v?fDKx- z39RU{0V_DsT!W|8VBu*eia`cebScVn_IV7kO(skHF?=SRV}Hpu@ zJxJ#gL_^cQ{eo|ENk@_$-&!Q5_#w(e$FgJOm()2%**szE2A^+8ha6pm_MyW>fjt)J zIAHaa4|k($K}$Nzr9D;gj2c~WUXk+ByF|<4A+7kPwEr5iUaRUXgwMO6McG%X|L_!S zy8=9de%9y~-bEcc_bncx@-6U0?nOrTr4G(W_;o<*veyoOVVApwx%cA^fs5xCIHGy^ zW5h>8S@u{a)$FRqo~g9l?pYhK%;nxUEC$16ShWr{y!`g@cBj)+{ zwVN8TjXQ6_ZW3N3kz>gD5V#=UMvRze-)_p)>?ZkeJCS4K)3S@uf1uAXNqn(M?()dW zpNotI7qpLb%$cBkjV>SCNUR|?&N~Huu`>?mcDXBC7rTe&66ef$c%8Rb?BO@rTanLI zHjd8YB}xnYvjP1!XKhO8gl_na;uE!x*ZSaMU;c**#35!l+x){?y%Fr)mGBtZ z460N7Ai{n|zrDhT9hiUK5xYS#+pBhw@yp7F zlwH)r-i6|{WmgTvqmITlnX!o{XnczE5xnAvRusD(-ESa$>i)&!osi9a3)z|vbb$Sv zFg|PDQK+@Kd;$EFwUmB#cq(%T|54d*a)(MyAKSutDPpwq53pxYk27J;rf=R^4dKg; z%$V;S{%nn}$e$y=6U)tK|D?8m70Pb)^|Q&7DPKA^zDB&J!85Kq&hFVdbb)y|Wc)i> zn`5J`)Sce#W8f9=jbY}_H_tc?UXonke6X14O|JIAWRIA9&37m};fU{o{ocoNn_Q(y zkI~+p=tBBQbD1Y7)6iLh^)k{Wn#=r%GD_24pZ4EWk93CSGEY)QY0_Q7^)j*J$~;9G zKaDbxdYNPVE%fh8|3UsVxkq7 z9!?=k@}fC-4e`)%c!`ykExgoGOq^n(wFea;R!nixikqI3A>Nso=&(h+H1LXxR!p?+ z_){#K?i0ypyPR3cn$J}+27!I)9;9 zXyKURqvK|U9}{iigH=ql_T4RHnF-)01fRvHj8UA<-m1^w;t9Sw3FD zr75@Np;}uL^7NmWJnds>PffAcinkW+)$VM_I@*6rpgVTufgX~0c54o>=315R;~(w`dbwOl&i5nLnYTKi8?^sY_#Zo~Ao z2KRh*I&~=aLA*1>o?VpqYuP(mTj^eLc+?L3x<~Dw?bWHYqqAJv|B-GMLjMVevW_Jm zws69rJ7b$@{f*#D(u0orWER4knq#vIzpeA84-lLE4=0Ju-ueMzvw!wJvDrT+HanQM z-LJn@`^_Dw{SF(f{kFbc``uMfzf0+i&9E06b}sM~SDpY~_cP5oIP{iczD@oo`&A~8 z!hdjFnOXnyXqiTy+Bd1%9`f|2{8}BIZjCYQf$ypb?slEm+#+_xJGTejD_Z2yNK@2@Mx#o@hQKTvM z-jBP-o{bt}7Lw%E^M{kK|Bt`{le2!ZKfzj_sEvQ)8+1p?*6a8+X{T!AZSqgl#v5;* zxQ(v2-`mF5NIO*Ym z*M9%8o(`V+vhth%!fy%uIe`pZ&$nk9vY>{`@0Edje|NM@1DBiWVOLZB$>?EQQ<+8` z$IHOd2PiX#Z=f~$d$M|ReE07C%6#qL-@nY=zdc&!MEr0&^n1K~+DzK1c7_AHs&CQk8k4(q@Ajb&y#RBc?N@9V*nj=+JBlI63& z!4tLdnP0!Rjds#b)y8=8Pt?YF;P;8z_{It5YVG^X)tx7qtKO5$)z%Zt)wAz2SATbs zx%we<_4~-cC;mlq_+ANuX}4>XlI^Z{ky7vWha;;&bd?&H(@$iT}_0zbLV3x6NEb0z%fM1A=@=^vyo zlTQMFah=coK7IKteD6ekxs>z|(wEPi1pd=?e){|L#e%<{s4o|h{z3YZJ_-D|I^R}b zQh!Xm;Cbtbi@Dnw{Rg!(H^J2Es?OU4l6O0ad-zsG3LgYzS_*gjcc~l7sm$-by`Hr|%weNNgeH{26p099bM=+e_+)r98M?J|0JZHgrZv^S8cMs{h6I$`fN%BULzLhlP zsm>9kjVA5MdfEumMv_KsqxWzAYunpHSiHJO426%~JX0dB41TWX@mZImg7g0rqFtb*%S(O&P^}Xl?xX&`tP9 zpIGnxj&z;5(z@urxI1Wb-}QOVjLNg_cRN~}{a5F`w?CWr!lY?k4sFYOzxf||FV4Hx zWcr%*-t=#Q2fPb!=8z^Fnb^JFn|K>|L%Q%oYbE>`KYzV9o_>uWU3j7OQr|{*a5i`o zG4Q0Tk6JVJEkQp=lcxS@%~JfYbsEF3)@CffT95JkY7Nr-P9MkIoXb7bybFKZNz=S9 zW)3%zK7n`5x$>U;H2vg#5qXN~e1!K$D5Et{{Fvs!CM`_7t9-q-7gvywBm?s>96TJ#T3&z1iQ(dvp4sr6rWP0UWs|?=7B|_j23w-W^Zn zz5KYm&(pNFyDwbtb&smihxX&Qd_Tgw@Vdym=Jg5Qh09O!uK9bKcj0P@_f7n-ITJ297v;UJq-kz;kUl5bPIXy^|9Uqspte#i3uGIb=bfRU`>6X4 z(#>y%hOk|Riad#b8yb4}--m|A|CV<6wRlhcj=H19gikl-Hj!{TORTJ>GwPw_j}#@{cS(ZbKdcWS~m{5>`R>gUNC&~m+WC*$^7ySli5mqpZaivGnCt_{te&$1AEvK zn>>4m=bwASryb_p_zU>4(~M8!`eViwkdJ92F*}*bWsNb+_~Zxwpkp+g)%w3V#u@*I zWAxAV(f^%{Gv0*rTDMC!;yc3EA1<+Wr3`Clai(u4=cTy6{igGIrr@KU;g0v$F2lGM zAG1d1Y3&M}^|SM3!}{xtQ1jY;jQmg`;{}V{>qWeY_J*4CLAAYM=2&Z)GUlmX&J|pC zGdPvo>goOy#bO-o$4nQr+#4YdcE?TQd8RmF)-6h$AKw(;uJ}GvdWE}#S2&kHN*$cB z^VgZNYYw(B{-5&QQ>|&#T*IEOz2V{G-f!eRk>%Vecs2zbGuf@)>!g{i>V6rS&7O9# z=Scl;kmuh61C6xP7tu(rP9yF7>P!waQZd=NPG`{~ZVo)sT`M{E4D;|@i~DgioV8(J zZR^*^^3-VM9LAa8j6}@lI|p||Lw8SQ3^QH6JG(bd{}b#hwb%=e$rHUqGVJk-UWf%! zT%6*l6u-C`oaXx@?iz4OXSRnjyYY?AAHM1H_ORQmU%rvx{+|9kJbB#N>&LV(wq4Aj&e@7qKCSW5mq4B|F}^V4>`YpYDZ&fhcWlJjoM3Fig+!iM z^5gL6n6c5vHrsYT-V{2n@E(avS~g9Ese^)f3W@#a&j=%%+>hIGcPr z|ANarZ};zmuwLT4U5$`m&P9>uSVMpbvUPD3N1p^2p$4ZT&TA<3Ig%XTLK8_sfOI@9fdxBj=3 z8gymy;9C(|%@DT*eJM6q^d*}rK}@;uI*^<1JohE|*_S3e5%}2`G-t$;MeMmvGHRxK z1?fJ0}JRM)UCnVjb)a zfsA4$u5*U$V`Wq#v!yzed8MMYGr8-AKlgQe*k9(Lw_FMQVV=ONjXyY>rzR))6fd{{ zA5ALO=4H+yarVNeZ{1ydolgf^gLuZ?_zq=>g*`!=+|5Vd5=r9Jn8!_DV(tAonduJK z*ue+kZo+znv-#`?Gp9a3p)Y=0ip?JeP0-E@>W}WiNIu{V*{@bi;rij**4xAWs=ycu z8;{`31K`XE%2=$e_=dlxte4JN21~&(hgW`%yht8iNo-Cudp)s*wyXGZox9xHsqaY7 zc4PVaTCzT^ytjhe;ViL};*s{t70v|=-*S^Z?5kPE3yu$E_te(%INq7avLCOx{sD7+ z%vur`#J+nXtNWnmJ2l-#cTq3$^_wX86U*8g|622mJbG`NtR-_O8KQOCeACByB(GPztK83se;>y;62wv|25kzmI6=&m zAG3K1ex`2@H1o4|#--TI#0mJB#_$hAL#-#{*QmwF;P>+DUy|<2sT1(){p5*%oQhvR zGc>flq34K4Z-f77?gPwyfVuyK-t)wHYDTzWu3p?AQ?{E(gls-H-9~`ALxPEx*jMUqe+Jstp#)F zbGGH{`^W2p=&I=Q=z|5$qZM?n`dEEXJTzi+_lR_q95fCe@Oh}+>uld39(s)%w`+8# zI|5_8$B;1z&V>28eBl*%!cksna$7v<_aXWu9X|#Sk)FR}J^JDL&l0CJ)2-?JB~Sb< ztg)6}^}>Z-_LE;mzg+C}!oPLqQ|Fe%$3^?_@s0mRd7YgU%uwn0cDH%K5_+=e?(5K< zuea5BXpNum^i1|;Y>>U4c#PzQ&RF|uXh z#7-%0K1P4N4|>x#6^zML?$G)%KLP47^e@i(bq0Eof81-8o#KD1Tk)Vl=64w}T+%tE zlLb<&ZHBd_??Kk#sBZa1cP@P~`Io(TVcs$N$rniv*hkm26&+r>ezP90byq(U_PiR8 z;oPd$Rdc8KRpF}vAGQw2ZoArTE!5Z8$MdU+|F$;-ITw>ao($Q?>YpaR*&E8gN_;G9 zjEsq==pSz`Xl}xrw=W8 zdn5C>H%R}6QpdNs#WSf_SYvFByTPTp{ymcNI)i62FM&hCr9EDR{uu7*(D&jK$c9>b zOMN+_c0%wV=}UFo-k`ZNDdviL5~X?QtFKp(eZzPB+#YsEiE)&+9$ELK|1E3(z7OYa z*1uUly(A#}MEX*m^|blUJ3cq~X`Ftwz$^X?erhtqj*^D{Qh(=}Re|$=Dv!XEN>t#^T#q<`pl0#Ln8{NhT2I%6B5?R9=Fo2Fz7n zAU~ySEY{(ex@Wk!JK!N#ai_zSvd&J$3fW`u?Je>Hg_pg6y{ufbDUa26E98d?z!%ZU z=|jtL@Yr}q_^a$l?7jnv)r*=hy3wM&;T*l&M`ilgj=X=tZOx&t@h%+gZa888b@fxUf^*L%lzFcun*ZjEgu?gRX_`5lO?G%}&|g*8KR%?ou5=Yo*r@B! z=P!7(dn!J?+t+(n^Bt+Mg+DyA+TTYoS@mH}HNtl+llE$_ufX`ytMKFDd%W;Y?=(K* z-a*iI`^dT!Q^fCQOd{CYdCAny^Wm5GU?S`2z?&mIqGVCGv@A}?B8)d zdoScCiQkvM^uIs)?pwIr4qR-vmILW&<&V=&=vQ|a7D6j8^ZbD4TAq14@W2C0dA`K+ z7d-zT&m10j-~nXc0c^|zvw5%|4qU}^CC@CLnLO~G16S~5cs|d=njS#UJTRT-avo&g zfzLL*PvQT`JRLlj@?63*iAVitWsbkgeCD{@Lf|Y=|L*+fC`@L8)Sbp8PU-Vmv82h0%aIY0SBOQ5cfFgS?`TN{&(@%}1fiGeDFI<-o zSZn(yU-@U-N>g*Y*jQ z4748nbeA)8c%?dXOr?4{X@TLyOr67h)t~BeZchI4jayQ`eB)O5ZD0gGunC=RBHiVN z)BXG2hOPp%TTCzaeo=4t&uLe4s(Cys6)Y!dUvslGwbc21;1}MWwo{pj%zxfb5Fm`1uw5PI(JUTjM3V)h%{)&99mC~d1 zRcBIeBki-N^POX4Pa|DEvoDjr173t%dlcuL{C=rVD|pwOX>F$uqkrapZ&fJhoSqDn z=K{m`dk%~oqy1L9a%NuN&%N9ES@GSsLZlx*KS75x>CBPlNAsjPI?be<=6O>4nwPEY zU8(QQ^?sLn2Z<3bHsz_khe)rIej7Z;qMu>bbnS!h;)?iUMR@!C&z^Vx68R6Vdx6yD z<*DFvTY9e3LHR)P(sG9b-%975($7ooKs?|~x9{W*N#hWQ$lMcypF)pKf7zLpkv(Kr zW*1lo8$OnW?lQKUwRHBycIW5Fx8R`#>di@CG6%HZ6gGUTBdPB*!1oM%oO4aaEajJb zZ)rn#aXtNgh5qX78$56CbX#R@XqsQv&-dM>ZC7{kjs*XppECl`&}`b8lVv~2VxJ_Z zy^f^r4g7fy^=AtYcv{!_ zS@vix_K9;3cz3dH!gZ~i_R~&d99kc(hrf>Xb<^4iH#EQ8<$GXJ>b-RK^B=tX))~y_ z1>ofL6XZWfejEAiC&(+27bY+B^9#(|L1Uii`WlrEs?{f+ zf5`k~|Hp>@lk4}BJvr%o_)hkA6{#1z>IZLz)}M}?xkfzvC3wbO@p7GIjA!$X#__l{ z;0BqC$1?a4u#0=b^Ie_!k?!}K^eT7y7VfeB4EJ4<7dGY_W70KTVM}n-(8aOJj-Q|F zJXy-S*h}bfvt9J?QJUk%o#z4mXG`)xVBEl9@S=giOGXtBhBUAAH#{vf7@)6#QNMj# z`-$;FXZg}r@-NB^`aX$qnZa-h{J$YHI2K$qIr~L-RN&w}sZ!O%7L3`VA%Ir!`i z!Gq5%x#Zxp*GxJ1%ni|l&XOqy7hV%PIG?q=_J-KOdDmQa@WZqfNU`4FI`~uxvp(f( zq6a1GB1=}$U-a*b&KQi1J7X}8T#lzNEpMWpebiT>-udGW9lVx0JE*VYqC*GgQ|Beq ziU%*9cIe=xv~yr+=zH!pk%Kx@C7-cbvUxCxk6;pQ%muy#>_%Wh*Ypg!)DgU9^I+hH zo`tAg= z1H%UX0}qOwZM&)D1N(&s2ED^%SHeen9QM)n21~lHK(a-1_cFM-V-Q}n*QAjB%ttUI zoPB99k(uWNmYg~G9Agj224!Ak1FJkV@I8%BzK;-N6kRaxWA`708<7j%)LmMCsQR<$ zw>E2NzEFvBF3v1@X|S;U!v~|Kd=*`KujnUW)$D*oy$|sW`YV0tRUe>5`7+g3;TqsF z`6{&YJ)NJb_2U|sy@pYTA~jn24YrQxCzO?q#T?~m8~vk=wKo~t{ZsgYIT4oR({pED%uAhl~M3H?HAZH2kan>nET$Mg5QkDIk_UvQrLOf2s_ZhCzB z3!w}C3;j@;Rzq9B9f2v_i~g4{Kb~Jl{a3lm1>4)_Jf2_a!!obiHJ%{%<kjJDyo9X_kR7ZUV>@lhKMjgDI}=7!yaA&dKo;YVi48h`yX zCxzAzA51oQ9dLv%9H2rINaick>Ep1oZgS5`&Mj+f(&5ia%`GQ`www9;ebt?jgXqaC z%PUJ=&Qkh4>E|oUlP>Nm7gMjh#q^7A=ZDe#>*FuQI{p5>zThkqHp9?2b@#n}Mzmyy z0?A?JL$M3qgb!e&%&9D4ZFMg5>luf2=I#Xx`eH2L4_umm6Q%!C~&4X$$fE!XBo%K^jW{JcoF+qFU%9-ojY&K(ZrRC zlV}a3ZTDMN(S3#gL*Upxtq(Nm`xi>Ki~W8ekfVNlH{l%h=liLfGs8K)XY!tQ_WJb) zvU|KdKFe^uZT%lnyU?@Riza4O9;3ZSN<~+5Lc7D5`%#*k;6}Uhw;CJsab#{XFM9F% z+(hPdxeF$I+@G5TvzVJ%A9o^VwA+}AXs)x&7+MvdLVUzHe5?mT8QRP;_trAWem6|s zDz#y~SPfWj*Vfv4skYYE4ll_6L4HI0hWHKho3}dfo$T-;D#!fkJ;M8&tiAmCed&VN zeonkH7T-}IWmT+a3Lf7WfrobSyRouA*@a(4{-Ze+Q^Fo9byY(tzRR9^rt)^G%R?n< z&7WQH#zJc$=E9`VWm0+X5P7^G2=K1|Tj9q_H_&jLx<#W6e^tEhuTouc+CJT3tj#_v z_~RU8b)Q8)3h1Rtbmru0;saOvv7GT#ciBmHgFoo@M$I)-PbbRtdHDxUt)oxrVe`Ged6#DBqgCYxpOErZt6+AeFHn(iv>Nd0)}@p&Z)2 zh%sVAJ7eg}81y1^FKpL2ZaXymy9|Cr<|~kmmK7_Q&LSg|&>7?SQF^j_OKRv1C%wjd zGCA3OA~o4ffP*a#I98&JS>v6yX{9@+Kx|rYr#pThw)3XD(5sd@#nNW?F*Df>8hAts znoUzaY`fCSg7Lhox#Qj`H-Y}3*v61gtN5jhbJOFCcm8Lsz1AizSA$`E z)py-SC8SrTaGZC(K{C_(Hx{%)W#!JI4igpTf5z89FXXp2zQa z>JFzn%Pm>)nX6m}ItiAbcZc)+DZZt!37(UD!8>g$@+-B{4X0+5;T_XVj(dh|?X}qM zO<&{g&wRdon)C%|FKBf+DKiOKew7?8y^972Y!GZ zjPcW@Wcew6WAS8#-_|FPjm6YncY?)t4lLanP21O1Ra`Q5DTuKmM5 z;%<)fo%^Eap)1_wL=5-r*t$amn=rr3`R~xC_WGn_uVwxM#TWOjC}0}{uRHg3$C&!I z0{?Ej$QqE=de5ugY21ITbLjEH8n5+7uko(CeYVkW@Zp}Nby6a{nc{<;o;{W9Z?s=`3Q6JQPQvIc_B>CLW z?87Ust=>Pr*M3Zz`op&d-jk+s$M-RzHmFB_?#4LPx6?_B)zePY$Htr`7?Ww5vjlLa zsjkF5wK#F?5oW<*7P+DWobjOS4QMe@>Z}ck+-w&g2hVfq-iKX+ z%u`wY{}Gj?4=sgV?nKfB7c?Jn(P3NVvk4dAt@tpwAK)VDhBrckqzBTk?(0IQ)BJUT zi&|&KSq`S5jr8-?czTT&D(e3(#)ya;*t0sOoMZ;UW+QOfzWK)G1qRWC_B zvBI;}L|T5F`r45eD7>~$bt?`&MV`J_;L|L9TVCK!k9uE%Y1Xu5Sy_nt$&oT!3MVrzG<^NG%5=HK<_xrQvn7){%c`^0+ z8uJoqnwLmDuhEa@d5Jg8ODppd_uH$tpI%Yc9II{Z!>J!fcm;jboCwdjtNj>U4;5>) z*o^C8(vHXVNIk6?*BN^RJdZ?+uSKZefYTABf#;DJY2dk^){N&J=v#s8^m6NHQ;CkZ zxl1VK=nnXp;qEbTKbqthIvDi;drPG0{if6M<(od%iC-DHM4sS=lkX(gcpvqBR?NFu z<5|O3d4W%&|5B!v{C4KYI%hSy!zv&D(TUD@GTj~FITL;243l1Z<|yFLM^A|DyUYEW zGxSDi!dqyNeFw)h?vwqmKfy6N4a1M)Hc zoU?J^w0uy+ilEB`&2Dt3-N@eEzOG@CyS)UuMlhB4W$*cihpv%4{1@OQdw&M}LFPwv zC|M`J>XXPh@dU}r0CMxsphfv3i>a5~v6RbDPPiwXNc(dM=yfb>FC3Gu^-uJFjMAm6 zf3XJ}MzXi3{M~nl#_ge9`7%Z4LH5RXzdM9HM|VG)eNxrI|H7jnza#mT&LsH~P9vYv z@EG*Lk-WEI_o&a}4{Z~>+z|5n#tEPF_52&3K+or1e97cJ%(c%~(#zp*Gu8zaMf?GKzjw+S+l&>-hIn!?UCNLZaF#{?eUF(q5HN~)ZQoR?L9|( zi}7b_zoDHuFx(-fy@iRivEqC0zO{kzx3RY3jeYRHME(CB{{ImF6T4Me%KxX;)3Fss zonHT+J+M*2g=ifYl4)#baA6X4rWX@wod&09*BHCfms-tviY_mnTv{#+>tbz|`ntdN zcl*%iN2Av#Gpp&R;v`r5JWA(tq|>W!^2x=?)7c*BpwjV=*aum)!5NioH*1Xk;GpAS zH$++I!|0xI)>pQ`1aKin`xE(9%wRAz;11#}3Dd_E`O%boq&y{_40YgZnYyvt>$tGn zYY%i&pB)e#O*p&TOJC9LT|4$%XK3s*m22B=_nh`~oiqLzy@|f1N(;*=gZ-Eq*f($g zInL1jf2hnGW4nJe<{al!;KuNU*eBF!(&)d`Yt8NU#xp+?hLMK-^iyn)kq+{ievQtq z@lu&JoIP6Yg&Du*A`YD=N^6*_HQwJ+Hq7`|o%ToA7j|XUmh*fYan+e0cTQtGMs_=T zc*linyosICyJl9bo7Z>~HXyHnO%<+XAN(8p=0170GxX&1mANBq_md;ec81;B>t49L z&rM+qJp57H{hJ5a!`RU6!JEr{OP9NvlZl<(Uhgfo+sRy7H)A^_pJA^4|8FPw|EQh7 z|D$#i$$zN+pUm4>*5~~C`XHyv@vfum6T1~VqP{+c`>X$Nw4*kJ3&H`_t@hN8@Im^T zaKR+GXA+)mpvST40eJFEcMiV7@!0rb(sZx3@L4_+aD6j)z8O5aZbt*%CM3!uYU72*jU`Ct>)0QUv20QMDF&8*6GOMdmS z-X+%^EKFlR#add`d}XjBiQzo*t=6fN@NX=6b?{H@j`GM{M_F+q7w2N-;pn}?(SX!s>9KVV>cJ7QzzxU81Xgn4f(44zqIpx-xqdU+LXR{mRYBVG0OL*u?07- zbbh+z^}#df<8JwS(({~+%%g1l(1m&Y=`RlAn|T2qUJ1cRLZ*{36b8>{mbu| z#5ejK#zJ0IYk)8KDfx4D2jwTqRE~i!34YxXc=()~#Fri_)nM_p`mkeeO`C9Om8ZS0 z4&=gZte+{ZqrO?b+)A9i)cNT(y9V*=?Uj$Dun~V%wgcHMo}G1qIkj`|U@*rX^c5=^ z$Gz+qyfoN*!-9iB&dQi2YX^P2WN+a7B?}MsF1hNU_R4^(icjJT-QL*ST6{~|j7$!A zg^QvG!)e(M=sd}#PLMtb*9?1efnkc_fX0Sn3s8prEC;^=IH7*LKB)Q8o`ESXtv1s9 z_4m`ds?uvR%$4E;GC)Y4gZ&{Hd))XAIA4@G2Xyh@7qtI*M-)45Ai$m z^q%sl5Sa5p2{QM7w-ue*p#Sy$wf@$R4Pu?c-VoiDbx+0ZBxgffnIWU60 zJWc++VPXW*Yw6oeS9PArw;Z$=!y0WDJxNA3`nE*j~@2US!tdN%q81&PtD<1{#qVy%2;*JVz z(Rksr*sCw@3zcSi!Q@QzjG0~{oOc80xS@%8_u7%@2qQQ8I>OoL2&2aXrN3fS+4uqQ0R4y2vQCUphpODv{rhkl= za;=%M+-pEzlJrY>@H*|W%~Kg-U8X~K%2S_1F{RuSbTd&eO4^V!_*Z5zfPl$aPsASI(LK(MIFSg zf)8dyryCsG2~I6_kJmeiy<)D>$Dj-GMEQUjqZ^>^VU?s4kbF!n9iC#0>|c!c7SlqqB3KIIOjgOz>f zMk-w&?JswIuDiTC9&!|a7A&r<5^hTxe~ovw0$`CnYZZg<%4F7U7t(E(TeXPS+j8U;5(Nup`d)R)=#fl#v)SBLN6W@=r zu=&`_kevYzKKk_^^p~GSAKU#Y_&sqC&$a&R!5<=zxhu4sZoA^`YTIuPrarRu;Dz+- zf6%`6kQ;6NXvwC*F!RYCz^L2W(a)H7$usdR?YD;WwtK@_*zL)ls$}z=-HYaoy#HXZ~ zBh95^6w}mcio_i8=o=imBVYI9rg%1gU-Eah;$A#sb-VZDcuh-9zHZ4 zoM;X9I%)WjWPH@&d#cPqG`Xs(z4<8jYeduE^w%ryz#~evSSk4~)Of^$AP`{SOug74?hH?{j~?sgc%eCRv0`yLmq-tA~?y8q%__<=F^ z!Dlj(nWIvvk=`LESW&!3lzI4Xd;=($zN9?f!6%IVB>O%*=p#vgTKJH>ls5=b6lH*PVT3-FKa)pKb6GokiP& z9y5{eBsA7TYcZ9w(lKwKuZauq^;!eBR<0wcF$6BRG1nntY(r+AbJLS5m#MUedOTvX zTRXC>XTWx+*V7Au9*>ypR>tU>Zx#<;7Yn_`IiCZ=zwSlKAZ2$f!C%Vd*UP8 z4vO9`gcd||Tl;@}gzh4Bx=Xb!Iw*QAT=e0Ct?53-KwQfP+u#2(ZU0J~$+F6b&)?)q z7fkV;I`PM_+Hd>&!D=+*_cuhJq&xnB-%qD zY$PAPk_uoK!Rz7oXN(+H`#$&xV2!!k(Y+_e>OoFHkEI^$GveElJ@~WqKYN^QHMzPU zy)kBv%I~+oU6bF$${vuclf0Rl?xjxlmyLZ!=GopeXN7vtjIkcl<67GOX;3nn-w*9> zdk$Mla!xqrRAylhhFARLZS5PHLn&~q_Q#n0zfI_*dcwDyWmfXLn@4)8L0|p#&1add zJbQ9ynH@Y&)SsvMox_v4F>S`oILkcp<+Dubx8qI66=#`|{Ot9B;J|#&qB24$j{o9q4lv!G;m*a z7HfXb7tVKtv%NX^#Aov5(trAdbMAzq+kt;GXNKOm#SHy{@c753UuQG+wCC1%*pCOS z(txMfHqBuy2MuvfEymfkPzKyB+U`4(0+sC>dYsLdU0Mmj7s7nABb0`ZLF*yP^>h-4 z+sFB=xwbnE{2H;ak3L^hQGA^C`P(locnc?-=le7l&c~-Y|2#)B-M0}-j1gNllv`D8 zWp6f?JI@K_x_!Hlt3gJoZ|c)?H^a-4_qu;W#e#zuS3XrE-^+ z=WV6T)*XJC@s#=0q;7Y37xkyU>4j-mc0)7+&rj#eUKk!TMNI1?YtJ7V2zFKp8m}|Hc{C{fx&8B!=7XNNV?r}&$K^NOh<{& ziCV7t)PR@FVzUz;HM$G^*9(qRasP+J4}1K9gR)Wd`1`i84uK~wd#u{arSWrbANklm z;!^e9C^zsMRwv zf!}z(KAL2{XivEpQFE*RmbxL*WrJ~mm$w@Sc+og!TCIh~NyMbxj(=S6+_2fJc}hP2 z)`DQy7=#~<3HVRMS~=gviW1-RbWzXi?80cetI$0Q`%*GoxP@o5*M0G)A1p*!BdlZZ z{nri#@t3L(wisHH4L6LhCSo{VJ96;@_rG!SPM*mP4E5{d-9Zs?ae<3?a@{WIb1V`IiCv7ky+LS-ClFD*Kag>{pKGK=VA8x zRrzIwrR-TOyEoVa?Ee0s{~>Vq%@1)tLmrrrOP9e{FJ`=f4mZ2kHQILkbAaEJ))g@9 zW=-K|(7Jo4*4@-DZ+^@UV6bxQ3(1e5v)s(b+UEXS>Ot@4)(g<#a_Iq2Sk9WlziTrHS942qxgs5U25L%8|eEX_(%=397}am@+aXa1}$@%O1MVTiga;0#9eIys0SM zg{_adt*!d*a$ECX^4p-78e+Sb4S$Kgd;RWNOI-O-z>OzgmiSjVnRa8WuN{$yd#;{- z2%BFmG}w20g*K@*bjOv%wnDcF&H&o83waIA>Ryz4ySdIJ%e1chqHp;frTcB?H~Hkg zxoxnpa36ZYFnTX**UCA?rN$m#b?Ij2-C`VBSe0>z`@NnT5`r^Tq^%dx3684Gnlv#2 zN#wz--6ic|tE@HdBUg62Pgz>C%Zu>oKLO|7Q&&Fag=cMXJLc}d2GixrmR18V(H<;} zACq&P9C9s--^)3Q5vo@|)oExU>AZ-)?nlVR=M`g}n+~i=^a^B@{ zyGu211B3dHSlLp?Qc2Hw}G9VvODnv2r4gS;sldpPY*O!gy-sTUG54r_dW zNq(5da@~|@@j|n;Xyn{t1iVG;p_25FetQ`)nbbmZ?k~k{&ebMcY3eyuIyDYOL z8$~-Blg1D-{Fp#^~(87UKPT2zJ>gP zEkVsg;iKa{JN;+(#DRZ}OMD^s(dB7R{637_I7~lHX|1JHz|%E`_B^%_!EO$fBu4~O z#2g54jg9k(I{KDv=K|r=mW+T7Gv#;c9PC*KIZKKAq09&1<$HoQ6ki!J`_Hz~%DR=_ zL`>3AJsb4PT#VD6{1@T7wwDw`9=@xqgiiB>V7v)Dcf9){|C@i$x*3LlN(W+Y(#%+wTxu)k zsqx3SRClq)dN6<`*iRXvWpaTsw9T`D|MOItCpA0d84as8;BH@g?i6dH*#Rcv(&Yo5 z88RMgrw{GJCb>EG7Pl9ZF1Am2XPSN{A?w1#0Xm=A>1V$yUF6oH_NDxO^s?l(LI>?z zt?;XRFDypp_mWG7KR$;Y+`<=O?DWsvdsDFvKKR)&<_-LamV&cgiSMbI?0AaBY_g#r zU}-Q0ec50a(!XkrYR%O0S;p_;v9jR>JQhAD9&2QFoFf~DM%MJhU;Cd8_-oTRe+}7X zxn$p2&^k#rF&>SHyyKr+Um_0ud1(CR;$J}bO&W{6x^OKzF#N_%An#{*=t`mffCr1` z_O+B{RV%r8ikVWJL}=LgIy%eOML&Z1CTK|cSDHup`Zc$r(Un&LX&z*BQ`iNrtCi&uV>W_HQ zfQN`)8%_8N?S~CwA9=32LSLZ_yaankO-6hLy@xrF|K?J3<%pRpO=6tF0nb!p<4-g* zU#<2R{l2?6FBm$(C-Rtnw=$~>jW#+7?KC-M*%r+Vjof))ZXi4FM0Q=iVQvtgH~rx) z0bhU5)_zZY%HO9xn~_WVW@;^OERk27956RB=A=r!45*RJ_a0fz7c!Q(n(n*TM@me&Ji_ za}Ii@_<%!R6L5%^R70al=CBUguJ*{a4*2N7cT6mvnt9VXe6(!utMJjo=kd{p4fK-# zijTH|`&ww?#ToEXjl|-!Ur{Xn+-#Fuhu*O;QC=4Y^xgn& zt<1VYa;|(^S{t0nWIb?pZ7gK|8;pz58i&Zt)D&_-!zeoA4Xe zFs+%j9eK2qb&&GV0my6g%iPdv=DBVbjJ=*TdSrxfnCErDoa^Eh^SIZ1%duJ{=a1myKC#+Q23f zrpAHn-d&vI+_Q4D3a*gI20*kB(=eVkf;TlI|g*3>IbVf)J`eEEuM@Y%-QdOw~n z+g798TSsn_o)gbhzGG+}vK0K?7m2y8&PD#~JITM~T6^;qotq2qAdc%eIs^W^LRFf5 zT2gUx4!nNQf08p0YV-1AH82+|iXT8{$+*bp6uCdN5#zZ)=F;!aXjgsdo{?f-$?qQb zbglanxc*13o3Xt#5^obj4`?FxM*fJidm>}UNcuQ?apHW^QQ~}}?8OhU7oXM@$exG) zW!T$)VIWfqU8d~~FL;Z zs^vqy*;^xDnwfH&m>X=6A5cAL!*z<1o$^m~3=jG{ub<*9;cxM|sq zKX^Nze4qP&$u;|V{upZ}sM+$E;y{xXzGk6US;K1!?Rj(s^1&ug>z8~hx8F|t?5ouN zrQ_{iQf^$M9mC`&+vF$bz$0@fx)kkAv>fk0M0+lH%FF;iw-)hf9+iHpc`@>3n#Qj{ z4vFLKykU;3xiL~Z{Uuj$z8UM?6fc;CJl^!eXznrMBaltCXa6t9O2`(G0{6sQ)CA)kLZrQFu`SP0qM7qnkP8ydHK zU(~88q8rtVjuP}Km?qk+p<#3|E z*U!LP(^LJP(QO6Q1`t2h8R)&@uh71gr+;)t#Ro>Q<%nn2X2eH7={AF}kkf-qq~7&G zo^i^4p2^M|CnftL)Tz-Pu@&82`vTRq(K({p55)2VZj$!1$Xv~@a43AgPxLJKlaqmW zMUfnl`p3Sy#chS}>KQ$I*y8*q`0wqUb1;5y0`I*|_4eT=9SAW6$a&K{JicdT(F*V4* zl=!BJ{DiN!5T^tGJdGZA3ZBls)f@ZenZuFf&2Ce2&_DUhGaqP$M%!)VuCdEsmMQaG zBh=?Mz=K7b7JA+3z8pFm`nZ7{vbRw;g}EQ+xv3o^A3K08mv~Ouaxa%H7kTvViq5Bf zPV!dbXwc^xpexCsN%&pG^R@3WC-f|e6)v@IFJ?V!uC<;;3tG?T&gr>pd3;V4 z8*U``{14{!?bokr>zuoOHLr`A*YP=h%er+nuQU89n%DQvG!EQ0)7X8>OykwX_>}mx zT{F|j;VV)MmyuaPz6xu$75gZo^6ga7rr@vrysPOA6_GTuo3*ncru2>2gzt9}F?gMFrO92yH-@L%kG z;r#mws<9GhzWySZ^Hi~qXZ3CJmvPYN&P!*T*p?I0Q;^wHu^A;I#!pKT^M#W1d*Yx=+Q-Re^cr)h_iHR_b-3Hu z7u-^$CPIQ-1nQpMSO{CIU1;#cf7jpR{}25=^1tX0KL5WSU+>%Wr+O>r&O;~ja2MlV z$o+HY_zv!qdvK!hoae{q|D*h-+IThiU>{B4!~GCGTRyMeHR~-kSB@K-3#+M}WZ=Wr zdWbMTT4$ok@|w`RIz`o4v0HM!>b2DIoYt!1E~^4MAhwBbllwE0J>dmOJI4L`iO^^S zn&H}qPEX9J{2$~0Y-KE>vjxB^9jDv}{lV9a^k&~BmZ=H4vWb(Iz9~Ph?C{XxjNEfOW zK3IE8k);vlybSmK0X*VMM$Tbg9dgI1%bOga=FmWe4-#Vle*ac`9RoQBzm78&6TH>t zbHRM*TqD()t8=suTT$E#&z)egcLBdiSN;m@5H7qiC0i!4G}BXPq94`X4&@m)HIG9E zbt%oh!YMai2)oae8u%^V4L;I5Gu%~BefwCt*KMOMi+d6KJEagf)1Iv+|D#eUwY8u) zBiS69=|^=@TDiV3T~m-9;Z(k+Fd=`qq}ZS;>xU(a_rezEPp8p4$T?DtIr$B$t!GMV z(@6fPbfFOe_dhHd%!PCtJrlC>r8!~VH+jbBc2&b;qH(Y!9X(pHtwoa5m`FMgFM)1l zvm*Ajuz>GY=0ZAr6?jo>qw?rlZS5x+Lz?mOn{w$d9Ih_R{nU?2)$qm7yY%TE_a|n4 zSgJPcpuea=-sIWms2Purs(Pd$#;50GQzTcPePH?d7|+LeJ^~)p_Qc^ImL^tytKzr0 zUwiYqT5Uro=r;ADRn49B@*@5`1`Oc}Cu0+Ti1Pr8@7R$Pzg z(90GqS|8`J;t{gHTtHqRT^E-bgR&!^Xn>Cd>jpkzxMf+ZnCS@55vy?G*{5e1cIPak zmh~WBqS$<`)f(1?3BQcD@?i{$k%$^YBk7IULa;Z=7BV+#x#sfCUa}G&VHwmw!^i&a zR`eLgGVNycEnsYzob}99#Rrcsemn-h-ze8I{br3_c$EF^pT7|X_BVOZ2Kdiz{4DDj zi)>iyz{NTXe6XkPCwAYC;nPFrDpqNgi9Lkp40s>*!1{F`Bd!S??jMH#=Ge=m?{$-{ zJq4RuBv0DZBXML4b&4PShu(tLnBr@RNnk(SL+;^A$dk6hV&NE^d@cVAbh)3F!XEYG z*&iA%xoFlJYVGM8{+vhWv3cJW4`SW2hf}Rt#iuL2uugVvzTXnt<_`K_d-Tjn)i-5- zT>m67kl|sc*qVms80#?g317K=N#Uk1^cMd0-rhnYN9}m4Hx{1E|Iic6IzvJ+j;i?^&u?aY@F3t*zKenE=>qNmW?&cH$WAA?<>Lqq z059LF0VSA~o2~t35R;c@9|_zOh*R@`y9T%uDRf-mO=OV6L*>|e!TI8cmO$HOcqhDi zPhoJ|J%t5-5%HUVZQFz7Q!@u4!zrq^r+God|HiC0@g8Rke|_*JPdVWlgYX|`FC(90 zFbCj1${0ex9~aK;eph>F;XJ4nM?SE|qH$;sUB{<^k7`z|1pa6R@9o4tVmAbaGTxUF z%Q^qOOA5+SSFH@y8d(h8X*@a~Z2lEDP{-khg8XrsC#|JRvHiBwu6%&XV@;dv@ucr2 z`wIJLJ6OZOnTr^%;wn!UpiPIp5bwV#U6}VLx%aZq?sD5`BbDS#D*BIxZMTW`+ks8} z$LyV@Ce{i1x~n>THD$l9;{6gUc}DfehRs(bvkqb#d0zPsKXxC)F9TeRL3Us9jRd|~ zYNrNg_C=FFEhSpBZZr4W-$@M={1iXLPxCeNKRx+qWQWxF_qknx%oUy%0^f7VZGm4= z@$nJr7Ro1fEZOU;wpc?R`Ja5Sr1hY4nxfE=Mc<+~#d#XsQ~YObo_XPO>QBmfD_?`2 zWUrGSR()EGb(w{Xxgb^Chdii;?w1;6pMdm+$&9;|{`aMw;=ae>1u3VP&htF$MDez& z&)9<>CC9m89keTaE3clKhJ{_><#?Etkr;|RHqQgWNOe{vMTR^S9fl>@Uudyziv)xxeA#94O(c6apXc$g$gZ5^M!{o>=!_F_^+h}_qc~qah z!dUm)GmY1tZZQ_$m^2phJ=B&YMslWMA8Ii=_|)=$%?r&&$C9M655Lbw{5^Y)G#kgR zPZ~pPvc~g@q(5ew62%q&_`yOWd#h$-fP5qaRn!avR`L2y=H6!Bz8NtR8;P6HobAFl zGVT}I$a@;sMfmSm@%ujZk?rIM#PPib^9#NF8P97?>79+Vw+C7qmdAArEP>QRX*V zw;5m%J*~2o`vkwB|GRVO>GWw}M@rF-)`4^m^g=gu5T3tf&uFBDx;^OYidDOa`b7zT z?*~Wi3lqgi=K6x=+*vU4S_4C+j{Zb()qzAYmcyTshF9>6p}+4MSegmvEubcD;KBh2YO>o2)E;dr?OISiX#8=KGnlc(F>M0{oG zxT{kN=c4G6B3uPita~0o=K4$(~=fou%-zbTaM; z{7 z(s;M*oGXH}=w#axo}{1s$NGmxla_cEdMa&i7-ny@9l7?fwx8e!^Z(--gi**sN~18=e0v z@4}YP`aMPbU2b00*w5C#M!w@^V^!3AG&X&gT9oXKE!kmI+o(0DhbX%%xvSW=SIK@- zuRX#7V3xgmWe$D|pO#O4X}-+2be@1>UKT)K;>Am$uT=);u0h`&_%b_8Y}$uRY{HzU84&@#K4!54f_^-vfSzct-xAJ;U{>r*~akNzb?_ZHx|4{r{xjXUAwkuyI^m51} zuR{Gg56l|--UEL#_FixrGM5y3X5Uu|Q-3RTNOU6*$;_yYtPvsl@ z;F>So@u2gw>&o9RU5CiSlxWkGVKo2Y6~+MZ3ay8*4S&1EXypIgZ(+Z>VWzRL+cIiy zw~XWOwTvSOZ2ONbqm$30AGVARJ~xr?)5IKz2Z=^QTON5;eJg%iF<_A|4URU0tLT;= zj7GuhMAovw7-f%$r>WCrI^OZ`O)N^ck{tx!6}lng#_vX)Amnpv(S{y`hl8R6)(`Z4 zVp&QwdrR>bzdVyD^Of8=d}XV992>vpB(&+~vwU-yd;6f-cJME`_&{i)8=fzpsPduv z-E{MmfPRP2$L{9$cI3Bcqb&v8!<=Wwd`FU7-F3j-l=B+|12TX_eYYYh55`@IQx*A?zJ@U=u*r@VsJ`o50Jj#Dytdd4i3PXh|V?DY3}6 zutx?C#bsh2dNGu94u#p5HULA+!e^YqFRd76driU0tt&Khzah8Rf8?Qy-T911wUHKD z!fP20v#Q&hd=Yjb!I2gmWtq2T9r0<%yfuxEcUfa4Zn^?TGwp@dzeE3yb13p1}oiNc;u_~ZY}*PCdZ85;|2XXYYUU>Dt-QUW3Tvuk{=$AX?}Bz7Gs>e2At4V z$L>VYB)4G|_*abf1Z1vZmgR6L&Hu#YN0OV}+@dmHZA+rxpledg@T@%688MoRNQ(G( z*7iE^5wWu+)f`%7u&&`-o43AkQo47Jy}op9)#z3ZtNcsiFY*n!+v4=zL0>k|)I#q|V}eNzs-g#QiXh4^t~c&H?JI=4_4kTyH& zpAX`M#BVikQFG^rWvn5-WYAx|klHBJGF^>MHm8=_C|}#^wdC&clxLAYG}8|`OA9uz zt@zv^{*S%>VaM@Qn_cm|mXR(rGo~72JGgU-is6iha;4u|jQ+>{Yigi9?kU!$9XuQP zY)ScmZM1XAla6=s9y`Flk;|59jBd9BnwRY-Y%mY}&zUo&oi*KV#8~fQL-uxu*SI08 zucZ19 z1MQ0E&VPKXH-$4QEOZCGzYM(Fz}5^dCRlq)*Ps_`Y-SF9V%Cn*;)CdA;H8aw?RBha zOLj=~pvsu_9{Vo$k|&`#eh)FWh1{DA9;Ev%<2~K$&~J=?XN_t+61%K%hgQ3$+09z( zX8kV@__Wpq@hybj32A=C&aB?YHV~9l)N;ebHZ;8}vU-{i2~uXR@BLGcjk< z>06;c`Dyl5?(5z)-1{@`X&)N?^DPDG2sS!^?2_UKt+wcp+U3Bc7&Yk$3mJ2(J?LMD z&(|_z#nZGGGT~>mcb(*o+3hZzc60FF$B;1=@=kMN8&iYxO_#!(o7kT<-7!;RrT!aw z3A|ditIe#jND@2Y$KN-_vYn~%^!ujp3Afr#B(Q-|zeIbxSK0IF-ML%lju~5C7;S7^ z;h%o@kaBm9c7lgbSzrBG|KpDLDzf8?v5+g9`Oax`+*o}U8A_h=m%H5h&-GAuB9wHr$5yq$`@(Y$YD^+whw_C~GGxmurL+iR)V8_&$VFo>yXj^FHA z@U)s|yFAfP`#RPd@lM)9NRCvcvZXL|sJYVG+D*-{0qib;Zwg+d`S~{aIhy0`(8ulX z&GHht~xNn$NOgJ1g*Y*Z54E;VD0Yi=dBWxcZJa>%1ZVm@!gq|1 zi*6=;?ZI>QxoxkXIq@7mP~jQ=6W9g^8OJ)>TaeuAFMr2iVfiQc3=)HRIs09F@yquP z2J^fCJ#QiU!D8mp_`vg{1~u!A+g=_u)_-v{L|lgIo6KcDp;|HFiAxHhOP25)y27I8 zN58V^V`G9RM-#79ubOzWyD$F%umF?v zwI*oIs6RFux!f)os^Nc)eHK>17(9DH`S~QUDi^sKSQqdv#s}6M@6V%N{G#1_ellu& zU=N=ojA8p|=;OdjE%~o(nll#O%KyQ*c8-P~U|j2e!noFq^#K3Fn{H&k6dmiOM*sMD zRJX=>nsFrfj=wn$)lyb$K!DdPI422uFxKxF4S`pUNo&Wr4LokzIU4>r`rKCa1$>)c zrcO+Z_TR_8tYM-&^D z1Q(6;-3*QvNZ(Vf{zb>Y1#@-Iyar=ue>->6rOYWXYL3?*14nDe8aGvqMS!miXWN)+ z{}|C8_MC^Lzq1yIV*$<=fO7$BJD4BM%_o>k!66vv-$;Cs`6SjYafJCC2=HRmzcecP zJ9kc3@SgD1EO_g;k1n7M#s4g(ofY6x`z~W1^E!`tUBtXDVqQPM{`UhfjfOOz;B@Y$ z*<;}c_#b*5AB%Atb3Bo8-FAd=rN?G5E<@v5-#B*J`i`;9o5EvXULP5YZMuH!()CN2 z`}Z*B&y1O}k<~Ki>-k>y=A5hk!F`$=_5rd_WzWWF#Djg$FE4z5alA%#f9rj|3IC5| z&<~K8^~B|dY-$rvxV0GiV`q**onqOZ6}uECFDy*G;-zWDBU2N-Y2a;Ze<0($rReh1 zgxO*=O)8$b^7^9YLi*v-h446R|H@4=uYA-0ZcsN~{A^ij(BDF?)-u*zwqm!lXBovW zyz8c*4aKG%w~XRU^3Bwy@>XSc{cdj9gSUs)Y7cQvpYwE`cZ&Dq*ptHhW#h7ty})+j z&VF(P$jwlWKodCva|hU~WS&A7e9FHyTPoeUu~Z82f0%pX!RQqQoh2Y2^8{=hi)cFp zznz3kpM7U->{S$DX-@lRR z_EjHC_V+`{VXr6eOh!+bTE&>ZPF=v+_^!f@w)b_b*F*O`8_OY_5`$Lin@pbXw}-uh zcj5cY4EjfTPkKhwa@cF4Zvd<2IRY*sw&Sha$6Nq=B8UFM{|RJG>e)oG#?F>j>YFy( z`R1JvbvH`}zO~Lcajo%u5Z7uwP2B7uyVQs@FG7$f>+BT=~rv$IWZ#6o6n zr7v)54S&4Qu@M_0?WUiVPIq&$+Ca~BvZX2;9ALlsm0VMD-m8IO{^k8%JMTJQbv&Cs zyB+Q`wnwgn_IO`7jN<>PM*ou@JHvE~Yo0}iJtr5u+pxVyzPiN|3^8iiZ(-jf{i51p zY-;-xz20Nw&8l7dQ^Y#NHD1mg$H!!(EBFKtfi9Al?{nu!x}W)g&NUxR%!m1@J}=qX z>s?}9UkK%~A2lV4y}+y71L+&u2Y=;4+v@}WVfv9S@~3~m+DT{M)bY(MKJm&p@{HrW zePlPeGmp@Q#!+nz6r4_Qf*pB$91qvn<#DNfp6Mb#SowCsb((9FzJ$|Y92v%u-Z^qd zKY9L)(Cuv!xzeZ?J?>M>OLYb{`23@oHRnc?rT>O698Xp zAbyTm--LdP@$CQM_eP%8GYc1#pRstx<{9;^=T7j9{%@+Z`LoJ(bLF~FxlUHDe_FX- zP`N(Jb%gg9R<2*F{Jywy{X*rswQ~LUT+5%|R=GZ0`F&~S`a4{!-nGWFjC&FInc&nO z;M@F`;@&vyf6KLS5=}!B8E|Pk#g&zIzQJ$mr@eAL%(dWLRk_~Jwc1HnuJ={0J1W)4RjwVb>#!p)Wv`+ApnNvs-+IQjx~KC0^v=q&_wlUy3bBqdm3uk0&-F&GW9;`g z=o_2g#$@&x?PoM!8mDpuB;S#NkM;0Qn0IFJeB5vzzT4>arE@7>@S!^fa0`Z8$eA33{9Ii_8Qx?Qbz>bE^1ej)#X@;}<{!!HOP6+`i%zk_FD zC$C~(E;vqWE*}>EZTHka`^d)(;7V8zl#~~5XZjui$B&KUw5kHH5xU2{nR?^$i#hm- zcusXOPe^7=B=-1c^gF&z!so1!U;N_C$2^$l5zlWgN~#@vFk`^t=4I%dh49c5IMGtV3RE&Srn*Rh!B8 zGZME6PS!(B-gcM86U3{4w;Vc6y4#zO>G7oZq}KBMr#BPBVH}lzLG~2v>F)E%6|^73 z8$X8GskqF>9>?BZcw5@g{v>}~x;Z@~2fuD`R7lw!-X<9|mN)%Z3t7U}HmIs9?p zb>Z-!Po2BRGL`WQ?oGr%1vWwKEP+kX9JdKl0~UKryPn1N66ghPC$e|P$l7-5S(0nD z7P)h&YF?vTTs5Q1v&cp1XqTOMpfKxS-~;H#G3LFUd)CaZ0M9Xa)+(-z5Wf?zD0Zq~ctd;OMez5%TGHcPCrC)(@yJ)JEn_fl)H z4qB2A(o7;_S^vt_lpbwD1OK4>DMR#_Dqh9d&f=$^F>C}!rc-RtI8A&PCgV&ihW5k7 z%Ya+$>-X-fvhGK*9jUgQVeLfLVXt8QVWcC@mE57c#=X2~rPdVU?oi20VZTk4=_6{~ z_p4(cMs^mqd9sryzdyh{V4G!p@0y1m#$41~*6mID88+d=;KXIz{ANGZ<5#gpG%oa@ zAdgMs5{?^Ojc=8wm>|VoDc1J;8aMb5JsT-%Yi68-wW+~pejb&dS-H6Q%QVI`IaDj) zi)p9$)!R20YVe6|hQBs_+9HF}GG2QhJ~ux7H{yevl{8lJNv=UdT5TCCujTuT#H;YJ z7g@%uyIPE6e9}WL#;WZt#;f@1Uca}+IK{^T#tvvO4SlxnV?E3!1`GOWA_lZs`y${; zx;uR7`E>?s6q=e~lyMuZGxoN`N{_5Lz+MG9S_9v>yb)g!^gq9zb%xK%8eUgW9B#{> zOAmxUQuiiAy&KsU5)Z>ya>Q?0+uZ+f%C&dK{Z#T7CI41DbwzP<-B!=U{wW`_@+yN^ zKHiJkdq&nBV9!S1+Ou8Go~@3)7gq8$m4|QOBMNJ8S@D$#o|Zq~;;QfS`yKaFo!@UT zR{9P4+f9Ge6HcYyDee5>XR zxefIj!NIs)c%pT$`&;Ds1u@>#c~bmH^y!J%s5cj6&uljp|6R^elm9i45#ax9%zx+> z@4^2(^O$(J`1*o0dKmPwDkC2cxdG{3cR_m4&;3&MM#?@hgL!sl&-7)(si$x38z&^g z!^xqq0MFmRrygNn_Z7jYxUZ*>hsi*GuPBxxM!oWAMORPq|F~|z z9CJQc`969=ee;|DpVh1X`Sh8SOSykKHsmYz(N31>^D%tf;@{FEm^17Ke9VC$7OTFw z8@{x{t8XALVbk-Y7h*eCuGC)eAl*Xw2jXecuf!WPHt|Zq{eQuu&i9n>`=2AmQTHnR zD3Sx{4f4wfZ;eT6TXJ9jE4K4)TYRLwxSh44Si;ly4f#ED;3dHJ)pt>gllDWZZSA0s zKho{@@LUc(OM08l|I!Jt>3g5!{{zPTzUWkO=8}c-gBam$uHvQIxo`fUA$Ydt6Q-Yr ze<)7UOe;SVKFhrXe0O51B9oofg}3Fq-Zn3Jc)(L#B@?=67{<@)qzj9QrQ(eCB6`A$ zp<#T?!-MS482fOqd&=15)f&Wu8?Sgto_D@|iAx|uLi_YN_KcYOtOMpdiTmw9U!@wV^x&Q(HsKB9EA8R-b zti**(WNiv2=UkYMQX2%A@OvYR2x|Z)_?Ti;8xC(R!*rqolLJh{s%ZgCz;%9IFTqe> zfoTykNw8S#Q5F+>^>(Wqj2Xj@cP+9iy-sto%}c;XH!e1RGbt&9m7eRmR`z;Bs!nPxk=-ote|Q@&RI%SxMe;0YOEx|{f+?pcoa zSkD_LpUdrrw|%6jINQ5(d#BAIMslUYGt{P1y~hUdww73+z(#|-RE%sVZA_fc`18Qw zZX*uac3+vXq_9r?B+*k>X5Cho*ry`j)?WV%GB)Sz^nX0It?q76#zC6+Db|+t=bwRGv#PM~pn{}}!SQmA}zh+$ki{Q8hcp7QT z$anslbtcUpT`2EXa+WhT-O2S@7r>MlUl+hMyr$3yJc`pl ze_aTM`U*^okiEgWK<8?CuF~&$xUhyh3-Ldm=_k=aO!?=Tr^yZ2U^CP(rhkL=AbV-8 z#>RRGY{bYH>9ohLnC^#c{H@5giF|4d@@-~)5iyeTly|TYncToVtr_xS*$-?B_&w+1 zJXVt_+bNJINA1}&0$OP1f750?!J|Kc+%WUXds$UfY+K+*HU|o_F9&ff&{54Wyq0U> zNAy#ZukcfJifDSz$Q>K8ed15PqXU0(2ewb*J+6+I=Sw-)va==cVEv=*mC6`Z<2qU zdYCPV@_0lujkICe>sbdu{?UselXXBFN&My7$AzG|f2C%t_6|Qck9tYoc^I0Le9-%g zv3-i>%mjWI;A&v~1oFXoU_^SFVz2_5>!-#daIAk6I3AtnHZhKRV9`2Q1b!Q7OSw*} z!6g}fZakD^jA$}hM{dX4z$Ez~m?R&56POx*4NQ&a!4#|m_;XUV?$ob+E-qg71Z&OR zGyTQ;u%ULb4xlTo0ntbeG;SW;68H@?Z_+*GmkB`++UIEEvFATfT1PdL!48iIR0`W3T@xISYdIIp9+q``!4^HWJIO zJnUMYIl%oD@3oOV?9mweV&qfTngLfj-Ly{-$7^jVB<6GOHhY0rKF>ajeQp%{xndBj zRuk(&8!J<+i_DGo@_{8Mp-DNz|hxS*U!-`L&KBj@3GMqz=v@;)h6X-0N&93s6q}!az z+~-M$6F-*@cMa=7`@YT!TrJ24#R*D3n$onjy#HfvRr@_^Klm$qKebs0Jet#mz+~9c z)508nT*3J6f-mx3wXxa#_W+(Fo?xk~z@j#Vqj6ZIJDv-R= zk+6%OEz?76C43jz7tQpJ)WEaniQdtRy5ZTXi{F}Y4k@Pk?A*7*pP6foN%I|J&1k*@ z9*lh`YCSlzW+VG~WQz9la~t1UGgo?=>}0ANqkdbO*w=0Zhu}NVCxJNzY=U>y@kCL+ zG{M!%{$}ze_{15H{Az;thrqRgv4)_@urakbfqj?qAve(e`2KNl8*xnR<6=BhXTfKa zJw@5-6x&`0EZPgFGwdhX3oD*odaCrwOIe>`Wb6arqltZ%_5#0!U;g&r%NE*rUbYp* zoh#-``{-(P&uaFZYEL|D5c&OyeDRW$5O`uKzf5)FOWFG%@GO3;W^3XGYl*mp=O+ z<^8vOXYXb_+F!r-^)p8Wzi1@TYxhAT^rdmsq#28i%mn`iJWk^h?T81(nFZ;G4>IM}OI7qCKYeopE59V3y%X80;~DDWG3h^ou>JANoahi++RJnzBd9?h7p1 z|E!`t@l>_vTp`T%LCgl{Ks^O|I9zge&|8se^+^Ppw(Klye>6Q;@Mqc&Vfr0m2Sr`5C>N} zi`58G6Wrxn^T*mfJAeO;Em(cb{$2d%@NjBV7sAA$ho)`jf7xlajfiJy9?@Z+Xa}zo z(%6CF56UT59*5S+B+fal1$Ozsl{-vLk|&n3mIO=Bf1XL4-aO>*j>O$~i24u1!tL*R z;?JMP-c(Qh!ul(=5+m31W()@Xh-SiG){S>l!@l~xLVni$8AQ+0g_&D;iiM5ijk&P6)_0qzgKTQFk|z{ zhp)?BVHtN{ZW*WMS;qbkT83%N^b>gpoodLx{faDe4lIo2OVGo0$w*;OWR6>x6Wpvt z?yEL|_Vzd7V+-dw8_ZbY$Ma!$UD)TSh!d-j+}9n8!;8-#GcjUl5;Q zq0cbJ2+uTe_F-^795H6Yt<?NG0&LjP1hnP#8)Njj;D>Hv2hZ5YP@J~C;saXZYrMn!u7>p ze*68!FFbftv4(XTZ-tjRHxw>F4^m#tde)uJkSDijGHbNH$(1g4d+{>v6SL)A%6F)h zcsKA7CNCVjYa;3%D@7J;^Hc)`|6)BdRzA(6A@_Ozlsl<#iuaKT^&-?pK%tnfH4q<%pKR|`zlm{}3{ zf>oz&CT(#3f!D-$+|_#jF!=rOWOzb-l6OL^8S0rI7M`J9Y_MhhHRY_F3vH1<$Ho>MSyUZ@vf4>+w~c05)uqPEob8+K5M2y#|A|7=o@$^tLZwx!GNA ziDz*>C^Tu@_KUF&d#4{m*9+y*_ms;IpQt7-D8#vvs+%0zbo=O?>pwHrl_sBP{Y9f8 z__ORz=%<|Z_!(k&=Z<}uGavPgt`*A}P4D+Z>pwIq`U@X~rx4Tp6@H5w*z2GrJriD? zEh&aQeM&I?f_TxPQEC?!=fXn_&Zr_r8+m;r{!!qyoZ`d07tlFzzRGKxOAKj*Z`q+` zU*~Mju`qGIA!27Gx8Vi#K`kidVjrG97CV?NouclSxKU6`OnIFa`PiJP7)ptTweC5K zX*qIsRu?e8FnT9_eEDC<=K()|53JRB?t_10(=W#q=dU`H#%+H+)&VWEhX8NA!k^&v zG-mW4+Sxri7u*=^agFu6N4vX-TL9)sz^wS_IC&m-f}73j?*M<7jrFa+dhENKt{(d` z=Z%?LrjJR7GPhhbru}2ot{D-Xj^lA0f2w&H+VsO9Cp|U`-oGU~ijI0TqP5A|32gzl z{C?+_g=6BQsu3CCnK-;du?k_G^P`$*(2ek6K=ZGaz{jlGzMexmU+cavP3JQ`{(Z(0EyQ^D(J#=`k+ZX8+) zuWulBoVexnD@Mc6mD*LVqi~^k_dne&VNF1oQD@=qu~a-PA-J_L0$u=2COST*&Wx+4^;3 z-v#&O^GmOOlb#P>G^Utz=|hrr(R}rYV(Z6oraD*S_!6!H8UkNm{)f%(b9r#X-use( zPJS^KvTiJN7-jhro`pUS>|uf=!j|adh0%zs?+45D;_~kL2S-Koq7lWT32$EpFTJdh zv+L~yu({b%?gTU<_}p*+pYS65jN?S~ap$JT$HL|oI7%sCo{9@g0@=KG;Q1JgYOuSf8rTqO-aqEpH}?GJ$OA!_(V2g4Pw0QyV>%hf1>9S9 z-aYmcCl;S~Pi;1zcdv>y{u+8p-4$&s|8v%a*4%Q2zabz z?Pr2oMC5sy%vt`NT13IVduZhRSlKDEQB~?P?6yyp67l%)rVc|bG z-@#sw{RXk^(#0)ftzx_C;I z@;H8k9A6CF>eJx;h5SGJxns1mt7N4*3zL_TM>5VrHoN zYT%q*^W)O2PSHZD_>yP=zocwgEq9b{TvNzX5G;a2FsOgc=l`}}k}c|=olwTj+u`LQ z!SI{nC0W7C9X(~d2yc1pOPTxp{xt*8!+pSAuGMIomH7xBFl>*()U zN40`E4WHFqY7L#8%T>hR3g*fh(p&~>s4|ztuL*yWgTY)@V7}-%V9qd?`rRnQJn)qC z=>LCU-U7_&_^*cVP2D=r z2bnR>bKcsn^ET~n{|(#i3)=l~g_pgx-QQEY=?c7Q>IQzQ*ZYv#m2dC7yavI0Q3c+s zfmeBm)PbzD+grv1>vpc%WIYilk1ZHJbAFzO=(56Rrv4YOog)7JeAv8S{${ZK7(3*` z@4%6IJpU!)$YsG8B*J7SM94kwSR7VL0|Cs@isXhBzRXmXE*P^-Me~c z93H_r{;u*GgYodL-aD7C=^61g+3?5t+V^-q`d9P;FKqrpVC6l%U!5uAqAK&_U)zRw z@pwC5q@Aa!M|UnBzS~b67h@TwUR^JKY3VY(2YcLxG_}2rCy!rf{OR$Cv4>CZah;i3 z=2xr&oz9@QMREQX(z;4EAK)ikiD?C|PhE#DXKO)S z(m(JnrarX#`DCS^TJ-@OHO5Qy!P#*1ae&{;FJn(H{XmAJErv4i>VIj;9_ zue{IxKcVYC$`M~-Dx;bB3{N!_q+|I!LfeP%4yue@#}C~S3&yn;-ly@(&uy5h z35*?+{|n1w!F&XLB~#$o34MgxGi~IppG%wnMBbKYb2+rB*yTXCK?iwTz3(FUG5maH z8oe)x-nZxj>`lV1*3=Bf@~ZT08$BTh-&p*U(yY7D`Swe{A~sesH?y{&x~?t6cuby( z&Nrv8tn;Bq*0P=sLEGXbiHgpr7+I|`&5iIJHxBx90y%&VhW{(v*jJV%nL7&D1?pA9 zMq@}MUo6GDdzABaG~gTi;2YS}#W&`OZ!nIl=5~7)avYf(DjEoI#~*J>I2 zuCt6M7hA@&*IGs+8?pn7EW_ecquN5hWf^IH8`rT%uCjQ$q8lRP-!|q2c_w){Gbw)c zR=xS#=npHgg`dS==ehX%aPfu!e-)is_zQIA3jWT~nT4+edY155*Q>n>_{%TF7Y+W> z=!5zG|3c3q*8coDvy#ETW{=ea%<<4UFh6%L%&Us;3}CM4hJrcJ4J$C8ryB}p!CEKX zFfEvu1!rzV**8iKjO&Jy3xm+A&af@-xyET=Z2_C~Sv??ujuP+g_4beJDEo*%f(GvB zfCf5bJ6g`qVfryuToRF(H4*-!P6xY+#WE)u3EiEq!kJ9ym zwIp5dd^}dhAz!f8lJtf;>i1|4-%e+dzM}o?6pMW;&jdOPu=Z5m6|C*N|Lfiz*OT=A z_`C1dyR7|OgnoH{_Tm?TU3wPvn+}!rtg1A1o%n6aRb8Ii7QYdmRCjA!S2{w!bKXWr z3tKk+vCaM*;GUYKU#t8sv~|L0oQbSmQjpHqGppNuZS@ZS_0SH#g?3}`{%1I^Mfg^& z@9C~wB>G?Ph8CuY%jBO@cMrEem{J_ADK{=(Zn9rtG!*c zCmM-W1TsL^4^^)5YebM&v5i-C z$L^@WjIa2lWQ}0H$oNhG^Y?&R{US%F&ac3-O>MMdXQREX{2xl&z*X)`-@V+^7$qMs z`h!0}FLS1b>CZ~vQLq_fL#4mF)edb3u#oq4_f>Z6dHHrUPQhpDURUfn@U3<;JTG}5 z_-c>|RXq1_1wQ|cGM?^K-_~BgKh*8(owd4V9tJ`^{>$W}>E7*X2lz5c>aZuDMeeL9 z-W#;DqWDCmom+SYohcaOa{eFYUDc(K%~xlMYmH#bdcMJ+Cjag?g0riYvnkuNYN#5? zExvFxoWs{(>ppSIxr>9dd3ENS&h|9YIr>&E1pVaDtx|*7!n%E(-=VWd4Wl2w(-v$Y z=;xJvC9w?LldYRGB$;E`yyY`7tRMSrk!bOTa9c65pd0zR!VBe`5aKJrw->=SIKlcc zKEm>En1{H3PeFBrR0}sWjL(2`ZIwT#w()074Ve?e`k#GsLh#|YIzc_WVvU|j%708f zr*Q8-s|^EPCT{im$m7S_4gtqgZN$~A@FrM&CXLj$(7&#)tn_ObFEBqJL7x>5vV$5^ z@EUxGWuLp=X(p~F99mvPMuH~d3j#Y;dF+46?>a}V0Xw#0G*zGBr`%Kg?5%U&1^HLl_r2nqnOFQ6^;nGffLDFD?cEutmI-w^ zRLjJomdP#5;gRUm-fN*Bu-DFcE4U6N-(QF@huVvrn)9?*!`g_4cKX%h_h$V7dQTN! zoBcHYZ)!UvUtyl7f`?tPiNI8oBF=+(jJIs&oEn{T!!@+Hgx@UYQfGwoENc#%sMa9y z{POo3ykjws7nnB$bYPlgI%v%8{i}tltstD@u#ce^*thvsv={^i^kU5dtZ zCQZn+-T(L_XwKY)-&piZ4Sm`+X**=C;f%*!(?kb#Rx(aVgjT3BOFT z7KCH+6Q{kGd&&_Chse`|w~Bu%Z}B~%w>-FM*~7EMZZbD7hoAONfy+F<9ccuw;Ob>Q zA=VRXyhvRTHGKI)=Dh77W;CK`|&N!y5}A*oTbK`o=XF3hB_4%XG13M@zkE$PcaHpxZq5o5%9ksK`Zan(4v(%VpXg>eMQqrG*{ zwHFjGxvH)BwE2*KDkOTm*WLNlA@?c#UQ7P?Q!ew8*q_JWgdA+be}%r|b+j^XdDW0N zsEt(aLwxKVJUjH%Y*%N$#DD=`e0@BSF77?%OL!>z7*B;Nez?l`w7#BX zZS}X(e~$bpgZzN@5O%Dc{`Nn}k`qn+J!(u0v*vGqN4D?{){jZs&tCD6zngnczeBd8 zd)*B0O{&Qj()|7*V!9O1rCh2g_M#5%4PKWm+;gSkmhN@;@a#VBJ<9J+n*6H_wcT^% zE}6vKLpzBJez$mQ#CW2UwqxM5(|~95-a7b&c+OICBRgIAjP+ALOnoZF2xaw*6{bc4 ze0z4*-;eLqNX~YL`A(YnxsyL-eu(V`?g%kvis2R9d&uKb?#IQ{2&+?lumwHT?%Dy`IVXe@88A#S>@p*nPmg>XMIzj77#QYF^WJ zbn=itoBXjjeP75~H=k&E$+yBQyc({dwfg;xOE~JHZgX^Uc3K;>y*+Gfi5?vC_1lHy z@XVUxcvGR3tzl!)K&$2m8;r+$;7-2iySkqDGj~1je`@vf{--BD@5eXvd6^tGsCDp~ zhFYz$;i4uNIk1>an+bEWv~UUC0Kf*gVmw#?pTIL;eP%Y*!TR#PfsxJDJN3!+}gF z8sKRnSjQ;Bb zL4V`d2Im0^&o^-Hbj@AmdgS7Z32MymHwOJV%wwEBgwu@0SvpB_$~n(uh%pSLq19oh zI0Q~L*XAtr)I7QX^F447z7D>E7?P_TZ{_@~|6GWgS$rFY^YwOpbGFxh_@|L~9)B&L zg^qh1mpF+?I?Q{-XJRKCA=V+1e5!aH`tMy09;l-+liE@X?m_zf^+3b0+laTF!)4{5Cei7HWaXjx*8hDfB*5hQlE@_D|P4o*i?%(S9pqbeg%O(2)f8G_g?dxfJhfOv;mS&_M^N z(`z&CR~fVVP}|C1QM}8*&xe9Dy)~y{cY5Jf)?3J}o^pzDH70jXBQAZ4mE0K{A`W=r zr_hgQWrLiX)6iTLelHvxw<_mhJB&Tgna}6>1%tQ&<(x5g2m6p!Zk7l;{!TeVG>t2h^b_V|C(~R*|;o642Xxm7?QW78ir(g^fn_C8(o4a%5le?K$ z;w&_;@6^0@_j}h)@A71;iVYKco^iZ=Uy#n!UFf%&#|-nAd%!>Kp3{ErC$#^OqDA|4 zL7wdG#b#)g{lwAe@Xiq{_sO8H`a$UtMNRj%623uhy5*7mw}_ptWdZSM4Uc6%DDV0zVphN%y3 zVBgk!T?$O1m!;k1H6t23#rip(snAUhy0Py6)ts{8wzIX`od@V=J0I%F|KHs1a!q#h z;|0L=`|N3jCyRW;Yr*}Dg5#Ote(#iEG2k`K^)mMXe*rYFc|H#Q49+!*kfT9N+0x8j|8~wW*!9KB*zcg*V2eShR-%y%!Uel}Hucx;{4@1y{#=pE6j2(QG*ETd@?EF=GHnmfd z(2{82;qhFr^cHgUzvTVgehD7dUi>J!=mdD(Uw&M?WO=cxw%6MR4F&Crw$jw{+YPT| zuEi_gDPBptS667uA})-zR?dAtr|sWHN7eaa^1n#uFkEzW=}Yjr&vm_VG6No;tn5_= z&V6pU@*FhwX`VYxJ8|H`2QuY-YdEiq>j~iSFUdm_UD)jT1#g)~?}tX${#qJUeep}6 z2l0?=CfMEraIN|v$sJqWfG#*kpiCF9c%ljUv<17ykcOU9N%&)a(ElKC{eSGe4U}Bf zb?1BQepFRg7j$7nMj@J{zzuFg+bJBqS(*&ba{*ywtQksJc9eN~Nr8nCpk&IJyx}Fh z_^LmomejI~MiLmB#|4v^7qgNw28VcIrv#D!p_fP?V-Wb|R5e9m;aQP2Wa1=%-tT{J zU8&TTWaHqEI9^&>)%V_W_Bm&tefHPcXPc96k`>@-*krkVSI-7GdJp= z$NVm3tji0?0t>ljZET~XG{x(6u4*|jm(}8XyQiF#DZY=pJ8wPPL_CW5UUwckN=P39 z_y=bTosj#}uN*NB@yqPf<>nT~h_Ai*70yT*n{Rr*l(y2ewF3C7iRTrMe*F#63U{!m zAG}ZAWvn$(`I~y)Wv#Wy)A;?3J@46b!Y9Pt7`antPD6i@jLXrE#+Dl1&{~bWP2gs` z@6((SN#3Qc_1vMyxlYO+c{dTgJGrOavIh1%I)re$4BRRnRC|(I|KF~#?k(1RaZ~%f z*vryER$B4hM=5l$mEaeB1i3%bnk;T?H{Uq4eyk)t=fg9yL6UjFIEeI33wc+qqPx~& zy>qO>`O50YjQm^GDrZKagMWh`^xNIN#E6!wT^i;4&VW2_(24E|7M(;oRu8Q|%J+-- zUZ;=Gq0>u`dhq%;UVX3*?UiKzZD{`ozGuMKof8|Bu;@S+L6r>f!1O~ifL0r}a0 zog%mHeZXC-^|MQu(Pj5dK zQGX-#@55%DrtEFt!y%vCr#$P`H#w(e6%BeLx+3;$!aE|q0Up1@eBa3X47@Q}m-;3j zZnd_teKlpY$FZ!ZuGQ$y6@B?_z8m>icvt25oBTa}dC_|A7v5v7SW>ix`TzQ5NWTvj ztt|f+e}MBl|HS?$8pARSgz1Gv>o)!m@n5mNvK_O~q4=f^J#pqLqH7l&dELNR>;GJP z=+%w<{x^Pa=J)sbwJdB6VuKY+t-FFPpRvFXJm$Z0VerzgUt+zQEseAOpcQNz*>xd4 z0>u{}7W#gMm2 z|MF$GJkr+Pkn&juq6hl?HTs+?%fjRV<%#35%t=F;39q^Vzh6mQgCS{G=1uN4oRw-9rYwSVMG5bE% z@Qc?M|MKN5u$cERQRbn`i{r-r&5_ol14HJlW%cIu#X~O_gN?0f@z5_M?TlG5e$vQ@ zesJTICrq8a!s~;-eEB(W(^r%n$1beF|4P>w=@i1#4dOT8DSbRVm2YX+{jE)%wfH1B zO8NMa%lrqQ@)Zl7?mEtfcYb|6cR*eb?y?nZQgCDWk$pAemT9+&K17b2Z{LGIqYf^E zt4*rBu%-N$4mdsZsSLKK_%%M9iq&?CFLYdNK6ppV^9PO9K&G8>JA1nG+IEq9xUK;o zfBmkAHiVCxgp0;T*2<(AZGa2(g6k{b5&QcQ@F3e;=eC3g<Eu(|cMkZOsFA@;s07 zinBde>qYcb|4=JkWiG&@)=D(qz-zm~i=E68##`Ii5}kX+b>`4rnVE@T6u;xUxcl`T z?bm|mn!5kUUdPz~?A>N)BBq7kXY5)J#c*Tm%Z$}4uQ!@^-DRqCkXjd6?AK(@|6Y90 zGBbb2Zy$4SL+e@QpY=JDg`Txu=yx;*-36sJqj5ZP#W$M|RJJx(gC9rrx-@gREOADx zn^RTZt!(s=38$&vknjopI6nDT%HbC;PL&lC&XOz7w24=Y_z3vOUwKPA^2(4 zw}iX-Xx}CmMMP_?E8)hy=a%+B)oz`M&0wFggt<6kzJ?DAGss9@@Rx$h%IaMBV z!#f|!7Q?&osXt^@Z-3|z-{4OT_koe^;B&iGo!Ty(2gOT>$KlRi;K<)d9DB6ZEY_jc z*EBeuxS(i_HQ?`s5dO?BG$@{*<^INn$PKTL7>sv}wq5>PKEJFpr{H3H`!n+YuxEHW zewqC#i!)?a-lTl;4xry$@Y`eX*z$}`yEiosz5HNfTT{7z>W%G9bmh~}pw3J9QFY$D zUoiP)Z;$=uCHOY+0pZIHEa=c4ZOgZq)i3vi=IMvdVJthw_f!6D{5{9_^ZBlN@94e* z-}{HV@>a5V%^$`wR+3keU6Nyqz=@u%_ZKZgJkb;UFD)cjBK?#cwTj9mNj@6-DZNng zQ}rY#<)?KjVN-GZ)5M0#FN=SrsaXDe<1=QC_E-w=W1i*fNkN}FA88j}Y^Q=}+U~+n z!xwor&p^{-;Od#SQ+THBEgoy?js(fzlgW9Xnm5_J;tBjM_=Mzd8OGnDy$8|Yhv?Ue zCkCT$D;Dx?;UK#AlIDEmVyf{pJOe-Lho5Ob`YWR??bo{2Gi{r_&c2yv+WBok)4k}K zc6#)gc0cW89olBC`;c>s-nq6dJ@?o6yN}-rc9!(a zNUti#dQq0~{UUQFIg!M1yCFQGL9VTav!iDhSEe)E&QFd&snRcFOXCHf}ox24bJxuOZ_J~hr zZu&p>Oxwz`7jqGHz#V?HW^VZ;cnP$J%lV-@+v~$9KRa|*o_RO>g6FX3F`x4xZbLF} znm%wxC1cmPb?!K(uUjKLxIBBsu=#}##XeH_^BL*E%&F${k2sgLo-)cg z!hD=M51df`ROw=Z!5$}PrqoyYqshfVu1c#+j85gw_U$(Na?zN==KBBo#;f|KvdTx9 z#wMD|*+#gq84vts=UnDMc8zfGhm_Yn_px0w-oA!*vh43^Z)Vu2z2BN4|M$M3#;w{* zSKI*eM((uAk-I2`UwCj+IX|vd`;;a3hsn`i8osE!DT1XO2K}5X);S}^y2xG=O!8Lj zPuluMw=KzFwF7V5Cz@eDzo~g*%%`5o{PNpO)%Ug=!~>DF~)l!<@2EZb5g=`83^xwEe{&2)tvTs~*v{6{DCn^;)3xLSGk?j9&@H=it_ z`%*?eVwA&uE353yQcw1Xa*8>=;v=WpV?MrR|JG){!MWGZPPTSkHe}v?8+X{$z!mf< zz2b((psH*fNR>yNaxA3MrgR6LPazQS16wZ@&?dp$btM0`yF8l`YG_kyo66yxe$KcvaaTC=*=CiN!g2{M+Y7e z#Z`<$t9&O{?Ed@dr}>9r>)Ukhz$MUa6&kJu;Dfj;>R=z8XM<<>>#rYJ`_)&(d&x)F zWP|C8Hae!o{wQbC&9lI9@mDcVx1cYL_CbgI{Z8>_#+viMS*ExGeM58e>`S`GFBOco zK81}c{H4mVzE55y@y!T!w!Fp&_UR{pt+Vy&m-H+7G4jmMoJzdsT|iE0@9`wj9BVy8 zJCES=mW*3;P`X)p<^}Q1((`RMV1LW-TmC>xeNOSt37Eu|5Nj5Do@ zIruH?zE8h{ew|9L@DVvxj7}0>HJ-WC()Oo z;w^2J(H?J#^96Gol(()jo8N(si%gp?70qYBVFJTrEfDXrQ*~aMzbTUMugqaz)w=VQ zm*$VPt>Ws4CPt`}ra$?vA7A}a|B}8<&^JR{ue_x8md^;@UT`6vb>GW2g%V*UM`KX~KSJNb4W zXEY)?%UV93Pg3;o5@XPu50WEDIY^|##IZ85EFMBO^%sce#b#BG4B1Ch4l!TwbE^XF z`OI;^8S3hI3%NH#&KcSpXMV?_NB(o>>)!!eboi1x))ssRJ|H@gt{~m+jo*I*y?JRA z^CKPL0Qoqo^j~x#+H(E(v>pHHj`CKBE`0cki|lg!UF{@Z$tMQHB|b$ld+4@bTv*!L z*1om$1(hjST|a09lRaBYx`lK!@(mFyYgg${h4>*KI|Uog#$J&;q}{fM-_PZlyjaHT zKBv3S8J?A!NoC0I-c%XIjD9;>ud@F>9NlknpxeHDwpn;S6l*wNCP z6swUcPIXe}j>K{fJ=$szuZM4{P$M1!nJAwc_X)FpM_Y%gZfoh%PG@ix{(IhMbTN26-)6sed7nMT`z-JC$9SLT zec>4I3%s9mjQ8X=XwN;y`?z(baTf>u77M1=dsA+pz~ORoW~+BL`V77uwzb7^heQ1vCbY=0~!J6@@udzo?*Xg z-%aRJmJi)PCthQ^lX_~Bd%o~Fu&%6N53*!wGgaXZNa!;gTy5+cYa)EQoi1NxoGN!y z(;ugTFCx6wWLHnab4Q?u=}xBdapj~jIo^5vrg^7l{r$4~*4;8ql5(HEERIr{E02K6V+JN4b8u2+lSWq6ma zTw~IVFWr6T@h(%n#$?Lm`qI0AvE9vh8NXMi?9J1ioHb!GR{&4rWV~s9BYg0Sj6OW( z?5r{0wDstDLDuhEwdDBo@)H{~9#Fc)59`oLk|EF9**VQv-<`@vy< z_gw-n54`*=cqakxq*?Gz2HwfD;0*w8K<|RLHYb15GbeNY_6Qvo;HL}Vk&2aY;g9{; zWtO$ET?+4HkCS}T75qZ@U{bXYwfY*X%+$Oy;ME^)-lTUHdMYv3qKp3eHRz=9+uAj) zbfsc)q&I}k2W1_uzu;KR;AS#Xb|^h{mE3HW5l2P0{B`DA7luBuCn&E z&d5`uGhec0)8&eBYVg1i|CH?1Quw8ezpkEXtgpMkaSG(FD{PDO9{E#bSL%)}ySf&c zuq=u<&eo6vj7c#$=ybWMKKNyUXWA2d3;F2!s~KAiKZd&(xVw&q3qRs6RQx)>5y{+s z?2uET;gtU&aB*jQs(;w@m&4|iJII=i{RrVmjL7IN1>a4Zu$Kh+b56&XCk#FS<2E4Ejv6^vx9bOgV13MyuFQ1a`@<~U1 zT})rm4+?uJ7mx37KNMq!e9JLc>JN6@>4hGd75M_meIvN&09$$fddgb$G<2|=dE0#x z`V+P+-`F)sQ zkKeEGo96cselz^q(8kyJyMWI@d3W(koUT~w5;{r1*%r&+gUpw{vC7mNw869d%6fi) zXPalc`}`o!4$n^a`O7@JJiFcJhk5pR_PWns;W^E7y8HYH&l%OHPZ{2c|EZm?@m~Ft z?k|~N>gq3(rMn`zr1Rp^%ZUHz1b)y;anJXG#_p!mAZEU?wSBPrcZ$DX>;7%?_y6qv z?eO<^yMMd<{g2(hJ^p^Z`*)hZ-{f!g!=)dBo#CDEhtKS=PB#}z?LNnf^u@?$R7L&< zX2z*te)~o4KPo6?Sa;quTXPNZl!>^t%_b^oTn)#y)~Ls zz9;z4V`r;;G6(qvu|Yg1^N?>~Qwkn%G#B~C+UPl%54EfBy>lYkh;(G$C-XwC#?zDB zP>omOd5P&7T^!n%uMM9a;~ZnHH`-b^Ht)nMQ#@$Ndv*Pr1#z1XkcxOW#FVN3~rq#b<`G@acwghx^5o-m@V!V^mtVk= zE?Ge?!S5fe)|zkr)xeB=(Qfc}oj3pLGIZFF^6l&F&rCGEKyevsne(iI^&jT|yYv9fQd>L^_;)BAY^kIDU#P3@H zIo57m+jJ|OJLSxf@96oXOR_Aj86T-Ep&wl*HPbu2Vh3{Ewf%r@T(ea-Alh{ zPxG3&VO`T>Z$W*vYS{4iv(K=6ZPTlq!yK%q-86c^(x^|Gi+uUr$mw;^xMx0BT5Rl6 z@UnPhf~%+>%)4}@ldX-foSpOs`f{0jod=U1BRu7ivv0n4U`8<7!fy z4m$Ejkcrw$W!+ZTN3EknvIhZgh|Whi1;#*U3D~haLH_!tOlNhu(RvSK!B*=dtz89CO_} zubOAgpXPV=+&$0;jABEQdF#bh9(|I1&3NwW;HnB9z*P#mmX0KvelV!vult`7O}pXW z5$h{_DqfF0i3+)BSU&iG6G^ALxaB;e@ej8%&<^it|ZV))SAh&U^qno;73oD~--2*uGZv z+vIFu9~a(d*Pdxx752Otzs@qIE99j_kIhp*7vhT!)|yN2#&^7${)A6<>|j?1e!O#T zkB+8s4rz?g>>O(&=LW!egZ^5`2gYla=CbA)6{udm-7(L`9X6OJUACw zGp{cnm~k%h`Gt-x_)ysaFKO1UV_x3{uXvv|V}a+_cU{KcKDKrmoqf#A@$YP(wS@kG zN73X6^F55uHR8wMRk39G3b>+gHh5QC!lT-9Dly*?PBZtySL)baW9yn)7nzBP=Ihe~ zGyRXSwkO4N`kDKzd42k_nb+?hp#3pugXjCniw*8_VZWIZaE|I`_BSrGX3n{Loq6YZ z`rBuH*0_U|Ib$rYKW^T9{{VKtpqT@n-+cdNGiiS;qA6$8nsG+K!K#6o&-n{YpC5Fr zI`&r;y6~TFzrO0SnH2Vza3Q~!@Zi>&Z^{(;^&VUo-S6Snv2!+Ui0)nUmaRhuvF}%g zP9D}f%CR4>IIm2#-?-D`P2oNp^fCW^M)()Kc;$ZZyVjfy{m8C3YYFlG752+NWz7t4 zWn7=~iSxjw@wZ^V=NUiaVvQ+2XOMAaDuYJ3M>Ewi*4|~z12z$Jrn8n=^!@uAml(yH zS`Bgm7d9B(r_~QlZic>wX3>`~`l{gDEJ9nwi(13Lx~GU=rnIp=%s3ok!^T)MgY+lw zZ){I3Jky94b;oY0Li{ZCv@fwaYnuhsaXH&?KJSL@@!~qrZM)Nk@ zpiS&d&7J7hVV$1|y^4h-qFd-ybSjz_or-Qn529hw?ETeC$h{ELuISb- zLbLE3t2)^^Ot%((jH2SvsRu0&F@HLLqW#g5&%DFKOPWt~!3?&v_{C6}T>TY%AGDQ* zulHdO&jJ2#pp*DNqw64b-jQ{XI`3cKI?(v-GIE@;$Nc-}>);1o2kdR(M{7#2v&)i; zVe@6qU+C;hwy>t<718@j>>FM1)mIGX5~4i%v&!!~PWin$$ABJF#m>xibxG;mDR`~) zRq3W~<#lZJ7l{vC(@g9t*>Kfl-%2(cwvOVn(Bp`wo>f1feuzF^3n_Yk(uS#yx4hOIkEFDHg+R;IkFYH`L7dwTy|Be&RIfhG=1IU$#SnP!kBB+)w+N_`xv|0kR6o9E>b(`;I)o}EhL*LwgWlPpNDBNY)P{=Ld`Es1~$Qgl$^w1(f!viye=mfGC6qhDF zGT)FM>0uLjkshhD6VjswFThU^9h`Xqd*JM0q~(VS!kIN;*qnDvU|EyAwxv0>1m z^7n0s>@wM5F1FdckemeAD#BrY*ZQXLm#*aLV_y6KdrNlAxEc6u>_=;qUw>w9J??KY zh0Oq-y|QIoi#X~F)*0#NHhbt+$UPI`dTf&A&2+f7qx(R0r?2ji&uPyBdxacCJ4?sX z(ZX=1C_2DaQJ-b23_%;k$`M;-h(72JGTAE1fwe`pN_fOp+0uWstx_xp?j)3sH)bS4^8>`kw&GE6@cd!-oa@7P`utwr_I_=+t-itN zY`XgzVjY_p(0$U)(X*SezZriwdb%B;TcfKhPnv_Com+vvh|ZWn zSF|eR_(1=5`Ie?!ru$vGSW?ENjC_gGjfrK!u3*op@gvf`yL%8ni(`_`y`ZZfErS;= zZ`?^vLwvEN6|DmI#7N&Rz_&K#Q>Ie6v%Se9BT7DRZt*-b&fMzGcYNnFbHo$zMHYB2 zzzZGZj$OSvx?@G}oceXGXkGA5-#MqtIe2(3?+2-y?!F)DzR&PpJT%Mu`Mi^VCsmcq zf1$0j@u}Ji?akMoW5mNtz)?({`j85cVZ@qP_|G@}Kj#?vS+(zQ^L^)->Cc~I=2G_3 zd!@@X+Jcp-J%i8u=?GS;`ZW3jW29bEeqOhHit_#8GaZ$8y5;5b(|yUk<%`|&c29Y? zTi&63aaMWBO!dd?!8uw(}=O^tBvSW^KV&- zo!-+))n6d)8+*Zu^-9fk&9WQ zxkcVRP&B$@Kz{z)>>@ry@}79iz4b&CQ>49OTVsqUX+&*~hDI3WDfU$TkIh~|rO*vofoKOx$W2F_;T zq`cAy2O4WXx$-wNwy1B6OSv}GzuPHy`C0U_823^A@9mw~RKIQ+5TgR#8sp&6bsgd*TF<3(F~QAsZ&qd5+ib=o~WVh+W2`aVoEX z#_Dm_<2L$iF$VDgySTgK6rbvRA%ex(<)jYZR7W(?f4C0&|G`y;m}sLp(wwJ?Pq%Ng zEF;_$Eyn%;V~3Af#T{*8%=aHf)A*0<#zn2UCFP`x&vE_|^heC<{$J$3XpuV%qcaQG z^ZUt-wV$}K{qNvEu>#TkYyZVz5Rf`v)#av4^IAionNqm@UbskZ#@Qn_Gt|GJhnm?kM;5F zhRjXn?;_e=kB)q6I&F4b1uta3H1V@2=2tO(dE)!at3q4hKeH`l zs^Zd-i{w|;_{uW`@a?nUZ(kU(W^y%TV}t$g2DGm^uWT@>@_PITj5Wdsxm>H0#%g?{ zWBFglmpR!QgAd$>+}*VudTi|IXx(YOY20cP!Hoi6H z=JodNu4}Y6{n?8L&6|=8pB67r)KW|6ZHChuY5xHpiADA!^gZzxD{SR-1FNTpJpT{@QKfh_z`jQ z<4C+{XWZvrZustPu50eSc+zZR&Qd5cF$8Rq514b&mvCc#m?IQW37>lPyHtT1AGXX z>bUv*f15CmS7mDwx89X6+UNLw@=%%r9fRRadmKjjLLlytKI$T2?NE zP5G?36}?pPYv*9^X?-KFkOL#^3uBl2#QDO=y3w|5fZnxpPx%6{gzfC|+n-ctq{2|lXtRW`3W0&^6tbD0= ztRFI4)(#O{dT0CA(IK;F6y6rZapcI7qt?9aVdbRInN8adPeFD$>c8Ze`mLB}$r1HW zvD?#`j42{dHsAOzbIB*^OSKX8L4L?+ubI7o&D}E7-7+c4V2ebt*5m+*Vwja*(63<2 z(|(pa=jIA8;B|}Vnl1S>cwIUp{0gs^c5!;Ka9RSV)o@1pJ9Zs>f=dUy7V7Mg@T?qq z@?k{yt*(ynD}RV^8~M!ek>&Lr{0YDEg>3=H@|Owcvf(#@@6F&^zPZErj{IcsWa%|~YJ67xxJ9-aBr9;4<|cBqV%sAd7+J5_ zT;(%f3{7MkSEC0)5B|qnx2B;1Hv>I)&;hFU!oUq>l+Q@Xvrl~LAU~e7W6{fx^PG9xXJ!28=WV>}U)YY0)-G1!< z-f^j3;&1&7wA34qTWpB0eY9r{ET55Wo~(hq)#h6l%M;3LgV@EV=V-tzdcS^Sv3 zvj!UR8rahPwyFCq#W$O8S_8Ac*?e>OCid`lnW zTbgefz6oy`zH80RuAiZd)*OD)(;w{R!G6MnkI1!6dH1kv6aUrzf4&^~mLu6lUX!C_ zn_XocmGJLYkI1!oC1g_&uO;zI?Q^9{yP+xhut!;^d)qE`G_M89+V$^rWOLra+K|06 zhj)^DqW9arpmnu2+PBylGB2U_Ey!mFZ&h8vPXW)aBL9FV7&`B8xPBxzM~&)goe2-* z2|0>q%BL!RFFw;N2RWalJY=yftaW7}GFP(D3U{}s`}$0ZHl=eFm1_q1yZKhh#`Td- zew2KKzeM~nk&nNxa@(5Z@@1l zUtf&+V6oq+cGXtGUpFz2(cTqxr6(ox$yxNSoQ>FHxbc*_@?R)@;*ad zwd-`-RlKA2SbN)6-DppXcGYGgcmHe_&k@d~x7ZEjZbNc+8M0ZL6a4Vc8_|g~^i?}Hh>tnZwmOi#7vhQR0tk_My zcV+i2lHFh0V4jj5T9=HD$C=3Jqsom=m?z+mP7tpZWc2CEizE9`XB@N#x}qG@r0)L7 za$lQb$ECYXd(w%Q&TO%vOFM7=yeq38fF>>B2i?sI`K>eNU}bbZ+zGF3x$JcYsg2)q zitI;)+D9b^XB~dRJVo`Wz3$;>h{vR){WLdhPrCk?bdZ>)m0hQjrKsHH_?4U^GUm2x2`*@?t*UJc&$tr ztuNJe>2uOGp>GtCBhz$_0 zy9|BN-tNa)54~p|6muuJVU?KwNZKo&e?V$Hr-s`NU?x)oFFa6v)=ypRi{tRUg^N0}Lh4P~R&9o=j z)6jTA7osK6pU&-V2A{&=G&s}xTr|2q!kZ1=L}%ESN0lL$@!>M!6QU>fsE#U=?J46@ zMs(xNDzm7|lRS8mXd^xQ`zO~%ax{$%skw@DoM4t5m7Uq;eVIzkv$)Uh^vykTR5tCR zax6_Ieb@5!vm$R~(0INVm(6 z#2-{%aU8NEoFe)x-xP}x=|qCTcg1svrzxJ}un1;8+@+{GXur+8yF&u&+dq8mQW>QD79IB&O4%sKO>m)X?Ll?Uz4$wky^+X9(V5~FR`|p< zmYC}WQa6!_$=a1nlnt$RMem9ooh=i$z{91l zOC~6meO^~4N)C#rPa_jI&60_Nc`TWz{)pbR4w614eUY7!=%UAyiCPb`!SB1AJap)s zif>S^)_bA(+sG?z`Q&mS|F2ynUn{xk68V^_aK^06x$Y|YL6BQI%fkM8JM)RPCS6$< zo!@og|CvvO%{7%Z*bvYky02_|=C z_zd-BYv=AJt_Zppyy^RffHe`rs$Oj#2UZGL?8mg#9}AeuQ=R5n{V0T2A$K`j!+C;S z_;KU$Ui&qDv>~6H;_b$X_tE_c+ks^R%K?UDrE-?3Um2d&j{<90?WliQ;&LRnbL8fX z$A%8O=4^6Mk9Xm%iQqZFb5$Q$lARvo68sEsveXrP;V-+Iby8Iu6D{>C%Xi88xNnqW ztjgK8gFd>z^r({trtl@0*h$1K#W2&tCGQ1OHilrPE8|A+gu~hR^MI!@s()F^>s+h) zo6LpI?`tk(i+sPiNDG$Q23A@yIT!2IVwf>q#B>tnANoEtk^z?VIqoPsoY!Lhy>X72 z#y0Mxg@zwlcvoBb@~YT9qe0jly#iU~llLv0FvIXmhc-$UYtH(ZiOxV@Ap43lB=wE$ zkuP4!nvKtIkCfpT1@2_2jf0;JW@&{ul!|mi;$ApUZCM+b^9{(L4aP3&JjfbTE^TbD z=lkL!e3UtpJXzr*3rffU*5+W5_<5f-S|^7ObMv)1ToQdL6Kx@Y#-2dA{RRU+Cywt%VKv zjlb69YVhn7xwg2EM>KDx!lutRUG-PU9HjyYwI7fjd?rm{Wg2-V~LuUmJ}}?LRrSrxWRm z}&lDK{a0MB9QRnq5abs++Ve zT=mtU3EpX(`mQm@MV@tUGvvp zUvF0OUgvQ7#ZSpc=a7#?_UKO9P}xEa{VEjy1@7(dX3eiLEBIUdJ{zn8pXAl5@8~>! z<(^KZ&KjqVQ+bNqk`?pBqkB4*wazF$*lBF*ETdk-#&=~A3x`itaj7T4%c?zlK{wqU z^Rq-AFZ#&Q@_2E|+PC1WpUdNaDe_oySn^mhUot$A@sjzH$9>f!GG4mG@npPYvgBtb zh-Il@O6DtvX96>71DKM_iQbSq0nA7?10xH}zA)~m+EASYrrJ(>wC8MQx z^Z_&1g(+R4zXzt;5X^iJOzC0AgP8?pA9ZrT?C-)<8~GlXYC|y7JusDz^ms7)fSIFC zKQNWcRQOaIs*{X8)}NH;=m8kz}C@+0c{T1w3H;(m1(a`tP7f%)}>J@->GBBkto>Yrr3a^P>@q_4#1Hh8L z_~+cen&d&dcX~L=6)FDu96F+dTpE>aSlwXeRbx5pp!+W_U@xD7ZWzecM>nj5&2=@- zK0gUR_OWA-A0BcV6n#soDtf0=>Pe=&+|@yOLxs!*BYJi$WXV)Zwgoo_|>_H zMf}d8toF>LTe{u9hxmK3V3Yz=DKXBHa&ZNwA3Y=+pda#nZ@96&tG=;4&if}Q<5OlE z@5;zE$-)(ZWM*I%2XS8-l+~H#M}Yk>-=sfk|4(|vV(Ka`T5Xc2+|+?L%)1Av6OBV< zLhMcIE~898G$**KYZn7^e~8{#K}VvDbnN9t##soA&ZMZ#EU;AWUfNaPS5`N+!^+0? z7?Yc)@hq7uf5{?XORvsU$)7`Ajd_APlLhG+==@GeH>N)s9Nq%QU1wH@n#!fXF(=7skS;LEmHTP25R@LXpu@2sE_ z>7vqm=K)K2);MJ6kPFYqSERL~btGT))NMoPh0q<}ciyw7BRzZ(?arsJ^tHa=+GyXP zpY>v)#|fU`NSBnZEZC7Q$sG1|`(^dr`7P;&S=OU$obxIB2xarY)fsu6fqob`PVju^ zLEbyzzK&138oThS{;6%1@29Oge<${Y%8E{JXQk*++*v*vOkf8VFFykA?l3pPj@*+lXW zNLLo_ge%!H!ioCrQ`V*5I=d~sed-J6n)&>FK5%4n4udg*_zAfebLf(~YaUXpo2C!Je; zD)YS$T%6DQ63=Q&?Py#}dG5pCaXx=X>jU3XnQ!M;WDhg8N^A>Hah|XreP846udm?m zl_pa`rd_edXpYt2^cBoM`z%^p>dQ3moZ8OL`F;#z+lA=<^naLs7k&E9dpCr(`OUIM z6U|2;bV(V{|F~H|y?lkd zdLdC8#2eR`scnPC!Z$L(^8(5U$9*+&g@E5-A6p9?D^G>vKLu@%x90J;`luW@yU7w}@AQFDu3PE01^N7ZL5v=evCO z`8vFb=X3*@l`$hO+ zOBolxr))*(RdaaW#W-YJdW`8No~QbY5$|iF|H>@ z@L4qQb28Uc_*ZYFobDniRIsUQ;49dPe*|3kYs{`k_jGOuz=w4mek^Qg;3}peva=gc zblmD%BRUW*RjI3I$9l4}3Yd@c-m!LeWWVZelMkX>J=bHu=5LMlE6G6RyGo(Uschua zq`YFd93Q=o`y4&;Q@P})vdEn){omzVWaD(dEA}QS<974w>g;@y6U#O4Y3rUU?V)5F zA+XVL{_)VOx_`(DxXbF|_k3%we^+}i_fbq!&h^PzUfS5IRYzM+1HZi4)UnL}-QHx7 z;UT`~03WZRe--r2mptyenu+IF>V-h0$@ zsgn+3A8v0ww_DHash8pJH1D(2(fG3bT_A=n!&x%LS2_h~2Hfpr9J-f%Q&Ia&w?OZg zH&fi3Gc8(r}Xr((Cy>AtsC240haox_L4rH^v0oA=ba(^9O>f+ z|0eF^BKo*@L-#(mAJg8(z}vL9G4Mm~Z4A7Pdm95khP{n}AHm*+V4lcUeXDyLCz^{N zW^dzoG;*xHjb+g9eMF`Gd~f5e?QIO4U~gmKE$(d${CscYxO*D|*eO4$y$!W3d+A@o z-iG@6)3~=W@MGTF2q%vC-V|%_qu$#%9X(ShdfDf%-+VY)AsZykL+#y>9>CR_BKwT zkKesM?&IM0IPSf8@$uu{O9kQ=*o#!mkmBBzAHcpKj(b;3h~nNAE1?*G*>UfyD#Yzn z*gq^CiFZ%p-xb5YvP4XJHI92%9FyYS75}c7niBg*I#@&sK5#u^-xp9`u?Llqz5W`p5I+0pz+Dm0ukv2@;=a*w z{O3C9>bR+}U+INoQT&YdV3%8QyntdRlKoii`=K zJWH(mx+u=SKwZULDE2^pUB#iyp}zL1b62q6%p6}XwSACt2+YyFM^~ni$bi7Jn7V%xNF$rA3n8)`h4urm@DWkn_ z-8az3-@G?T6oBW3%niSaL(mwb^8u7qoVWJ-g`+6GhHq2Xoog2HPVw|R!JlHd ztqOSx_@-DE!4RDYuEwaChA2iya$j}8lS?^`OXE(?BBbi%$KYACrT7giJ&Ks(2~IfoQ%oKN^?lKzL01DDRzSVhUhsi{ZhP5zHzPD z&Y1FztBq6M*3q4Hice6igX2HTnyi@U9JcV~kC|;gu>BpK`Bmtia*joQH}smk6_|#_ zH|y~zHbJrVuMwNj8(TjH&(waJVn0W#VRJY8uFR>%`&J#J>VFTo*qiR+GAdqyF7SJ3j49Q!e1U>j&lrpS~4o z(-$poFgm}eSk5OZiZKk#eY817xv)l^ieeDqy=o7hva7tYePa=tg+_;pto;(SS&m~r zHI_}l@XCRy0i#N}Ri#*Vtn`V$qwY-wcquT;)YZ63g*)37>gb%d&Uz{~M&r_&)0hH3 z9+O`dkEGAkRlH}uLB6zK8fm4WTgkg+wC5q4mez!E<@8T!f)jIRXoj{z;$wFIhWrLXyJjI5Kw!P|xh}SFLXKL-c zBA!$Srud8E6%_}nSViS?(Hd5~rN?-*jq6ITgPXo>X=hbzHt_t#0C*%80+s zqm23?d@U#=zsoTk@nWaEqa%8|k#f90oI*K!td{)e)@T{0gom=#L^yD(RSHQR0l&&@9on>ya zgb&&YHE-lruOQ3FgI}RN$$#N2-?+|XE#`oE)mc`}?XD|1=hu)<6w_%?gRfP{7q46j z;7#y#zFKevGedpha%%A)F|OA|XRk|q)84zrP~lsSzN_DHpP!1xv|Ro0Ih)FN(fm+D zw1i$Ur^A&fR^RJ8adHwBy$A~WdeI4nT z((iQMQhHqR)i|XCL>-o+$S7ln=h~>dKG3J^qp4Z@)M8^IODPE-fA%SDD0q9$fUs zt2bSF#6MDM9oqlTjqSYXJKr1IdD;nLJNM9s?_Lr2;bCH552W7ntp|zm)j2H7Cr?FX zx|6z&JWY)_hf|bSLV4aef0ozUXe?>l!ICKUJr9r5dC4fgoVBI(=^<;f&|F4z_vo`7 ztD(G-#Orb%O=Sfmg53kd<-N|Nod`|}IMU0>7kK)C)K_2mRpmWY-_lngx8OsHy;pt>-CdL6|MtsYJd$Gr zIMJAa5y5602@H+nL@=Uw7y6?ZX_bxp5$DE8V0hmLhRwM=oqtuVg~|$saGMI$c03lH z;}kwm)EDK_5I(=$gU?4QF+R(W#`s)JK9j?AaSVKtOE;p6e+~Hjez;T|k78AXd*MTK zWcSR8&cU7t#^F39z))Gi5KN~BhR(g72*%-a&cIMv!O$6Gw%$jt>2Hn6q76Zy1s|LR{eHNUzNvVzw7c3$Mkih&LOPkEGaU~gU+0A%oGdg zW}m=+VDXF3rGTzBiay|=d+B_hZK3P(JCefx%CGEpukbN5Qc;<}EbYFt(IaFpF96=$ zLTsGjBPWb(>puJ)%S*BCzsyIs{-w3#XA5U! z3u}M$hC2R(8hr>kPg&=O1byiqX7zr}f~HIdIM^9gA6im}MPRbHJ6xXIVSIsJ`o0P?(`zj)!O z8LD98At!A7&g!FVN*mv+^e!7)w?tjpee=M9i>@a-(#9^AZEOXjz>W&QNCtnZ9LwtF65l=Lp?YqFIkr?Rzcj2)7?Nk7g^Rdk!~j)e-(WY4(!JEj&f3^uNaNa6s-hCy0XI9_~~}M zZ%=0h{jp2&Jxf{cnblgmu}81V|L^g7lh00TY|}&Jz9@$?^9ov1Ve_^IIIDlgOc%hn zj}2tu$Fjoa>f(haRUt1L^JJBtZl9z)!J+bmUXBk;xr?|Dx^g+|0{_E#^pEjt?9O?7 z3s#zXu&t@Phf~ybsHYrjs;7K-sT0(DfO-z~Z0fnxQ(i#T(_M!a?~m8sgVb~R?oiL8 zo^k`Kp7P>p9LKBoW$Jl+cd3`Ap7H~#o^s=<|HrHMF!j=W_ozocHTY{>FH1f3|9JJj zLcI*%)6^rETHEW^>!Y6ff4q8+P%q2(4E6e`m+scfQBVC(>Tw^+_sqrDsB2*(tcNxN z_|ZJ(y03(P^#XjhX9Q;QZhnia%}uAmi?I*$@WXWhdm^mURN;cC8EeegH?3`b=%GCw!AJ-AZ0h1! z>x^VT?r!Ywo4H4^jExA-63m0v9Zk2+-d2dsQN@Q?Q(N$rPhi_)Cu&daVD^6s{9D%m2x#9{j|M5nCL7XG2cKGdAa zU*_^&`#^cwnD~-%vN3~6=99hRN1yKGq5H?H%K3-RN&lrYyTHq%&&c*vPDHJhe1kL5 zyw_eq1PdJ~3#<%!PEIfc3)^96K13;O~(lkKC}3%#@J=sv+}qdRH6@@o8h+QY-H;GOJ?g*;mp zJPdvy->}Nr#ff+ivb@3+i|F~3li#vHxplx+oPhX~_8csWGa^NJBz4o+7?N?SzoEc> zGzI+t#TO4>P0p5;5vJ7)tL7#uOriFSN={r z_(sPLpYN3UR$%?g*2tA6B3WsZ!%(`O&AwN*0weQQ^Vs!!fC~>`A0T}J{!8SHV7rWOA^lKHMu|Skz7fy27>m}u z4?NjocIkzVWUgq?_Br1Ojmw@;9#XqXpV2|(pI=bZ{JemD0M4*2BpXYr7rlS7BfX&% zfR})B>=#MKJ%R48eHN`13!Eue;C$+M*dDT5Tyz(UXYC!Seet+{$`*O2c4d#qCvDeW zAU0$Sn~J_;Ye*glu4J2Rjwi6QWY1_nN_+c)C77}wvhW1iFkTrSGxa22G%vC@9CQNt z)B6~+>R8ORY!B^y$cB;KlZ8*p_Z-RGhHM+*AhuJY_y+o*T&c>Xpt*|cZtut+FBv{e ze{A+zROb2ti-nxIsVWsWYa8VeXs1XY3?r%AC5y%p3?8i zronHSEwGNkL5=>)rrA^g4-NWcVb5D#o2HCC04>Hg4ZbV%=v4J`^ho$IdbC}>JX&|6 zMa5!C2XM~g8+uf|x{GmA9vxhEg6>UFJ?ZVK6V!WvdJgp>n6t|z_S;=R`SvD$l( zdM@81n}&MIS+4eEcce~G@5|Kl_#W9b)RV2Ida^sz|KqjyF!j=Wk8B$1$yQT6*&XWt z@#=krdKtb)HVyS;tEpZe_0<34)q8|`S$!{I(@;;gn(F1Kr~W7PWYf%^i?2~vw3OI1 zS>`$i-K@JC+Bt(gnXUX5R~v&()90i2ji4*}@Wl#oPuMhl zO%|I)c1^Yz^U67*sjgik-8Ir@;Z>FH-^yXTlJ)JfZW5bDc1aqWMtpXHvI{Az^*aZ; zl>H(ff_SzkeVBgBhFMG<?tNBe1i|_`v))mzHcA*r^yW`jpV|D zAollYJ{|b?B5Vcq&!v1Cxg%L1xgx$RTS>WNT%N_ZWiv?*2#(}{@<a$bdzgB{$Hkdt^YqMhq5qj&LU1 zN4!{gldYtW7sv8IdVY#EVHMCV=d5nl3yr2- z_#em>?va?ky7@pUXll<$d0tYq7v;VwQ=Y!t_%NWSmPh@6Pd=BFwYTjxzS(~B{R1;r zVK2Xz&A7#Hwk>ycGgJ6xJHKtDnbvc47&$oEbgCJXnlsY;yycs^wWH}3U!(tf+t%Pn z)3(k)-&@^uN|yOt=|b~RX$@^}jB>$f4gXu+t*qQL-9Dx04?eoXeUgngM|~lsKq1&Rf+l}rWhd#E_iZ#eWbb*y?nweE=z+nJ=abHO#zW-5o3aCu--L3>3 z-Qi?&57S6N`oxQE^(#Ghbu&M2b#tV^_r~7#NQwLUz?%ck^YcfW)`HPy>ip5>NNK!t zz>D|%UMyk1UPk^&L+oMcGiDea0NuSM{GHsmrDN4)7sFpIel@S)&uUEL`yIy~MrSwp z4H_HU-}x^4rj)S?=nlm@qq$CDa|y3jgL@px2hoMGRmU{H+%W(>%9q$@m78|s>2_{n zqUnIk%;ZEfy%gLn8*kdf{I3idJK$R>&3rF1snUjyi%ze*&ZNhS=ch_jok9NY%}q2c zn)u9DU%BRjH(uSnFy5aPeLVhM=!5ZUe7ng_G{|^&)#a-rPg50}x2$nW*H?Zf)*oX| zGp<67yR;g2bdvGUW6TdSW_?Q)xJ$Vx-@=}F+}M-RxXakej9qqVc8sww?(_=A&wGu* z;hV;tVcvxgkFg6Md1xTpI2)e6hH>Ykal56FmtXFV*)HADnKx^^gWd7Ihw*;fwybRz z4O@y^|54|?5>9srr^Gny_U|IUz-f}-YNT)h`7lRY%5UW~pbv6ft%7Ef^E`3E_1|T#tPA3~3eLlhq3^=?jTgkc%`M&1N&N@xA|KfXEhrYl zuYu@16}W%ngMxu`94iyU@cHejzHAV=zj z>_gH&*@jWf1F#|<5+wbG&j4FGfc8b@1CsA6f<@mvVCCqK`m{~3&==+3v++kcz>4=l%wC8I>u(a~qTm;klws@E_4;1w2#7VvcNZ zox2y=%DiQ67^i=XQGAzgqR;G&YnxVWx}AnbBmR5S+K4`L0kO^DT4*zC?kQesZ0OQ1 zCUkira$)ji-Gyy+X;Sj%c>MUu|44k)`(v7v+!=h|U2WyUD_$7WB>Um5A;vvIpA}P= zV$WSR_F$EH0~g9&={9cb43@E>z{gT>px7J5%4n|S_msTU9Jz~-o4dx4&yDu-g`G|c zx*J{$?|Fh8f&6XrUgONL2LHQwV2$-uU=O*DZdzimmwrsLZWyc4IfGOIUrG_1&Bw+o za`yoIOEz5ULt`z)*g42;?LP`m!GgCIWOq)QBK`M*%j5G%#Q5gx+#7ANuT}>4_>JUy zl6@f>%Rv8;j$Ff5z`s9$t*X8B$L}HD4qM^>r|xaQxV=F}n^px>=38 z9WsFcIcp$Mqr&=h_dIkY0Y^5wC&v?*^ZP$tos7tb9^dtS-?^^2?tcDNbywA0cYWVg zr8`}k*+bKPzMA)GUZXLv_F_Wpvoyx&TJzBu{jtyQWxsf7V8^IBD_cinmU_p#yiukx zH@r;<`vdr@4!6veJwyGyx`@Mi5Bbu%b4q0~c@cZaoaxH{p!T*Ld1bz%`mOnv))!4^ zSx}E6`5mld)VdXxK;y57hptFhupVl_C@=z zYRAI4%USDtz5V4KjI%V}N1t4D%YhP3>(Ze&2=}nFBdAkh!bJ(Ec0=Ks2&Xab>%})j zxG3%s!Zi_2c0CHG^?#+m5l%Y&>b>x96P7hI<}#ls>+SMzk~WgMBRdi4W^uCg*YT3* ztx+GBVUHGl3}x@;ZdT}LmR1gL+fyE$yQh3Oyr&$V%39hW_q7tX*>$|px9kb__Sy$m z`lCa8g8jzP^Y@e!&LZxGWzNYwHHDkzmWRIpUMhHpi+jpiqf}q;lDj8Z&(j>Y#bs@p z^-}FkYX2{2>(LX(>l!A3e9&Hcr%y&pe9|G&dJtAYpa?ws(+bK zqAv=ue(KO4IFASS*Gi8syygcr#vnD-m*(V(K##-8;hN4+W}0wIa@L7=-x@j|PCmw5 zXmKUV8l&3(@pco*57+wujkkvO*2hC>&C~vWI%fRNn~WJ}edOf>+3COim~kWbn~ond z{_T&(p3iFzi(ZGR>zY%mPpmTEsP99vZl0oF#QopE3g@WrrJmD&t8Z*d2K{H?{zKg5 z_h>l6~?V_#FmUyUd4nA50y_Sr!`8=Em$9;jGI$+9Z0&% zE6J?dI@-J}b6509Y11BdoOO<1&I&H~C~ndhg^$n&N^g|E1}}w|zh9BY*W>Z;xP9HG zRrbzW_v~kkt#|q~@5}K{-wO0fwo%QQ{+h-M>KimpR==ROJCwiNS0AdjUvHYm^7Fi9 zbL)F57hbiuW^#;I6bAoBdV}A{>-Y`fS8nRV)Mv@B;(IN=Vf;pM(^xRj$2UlW#JQh!*5_~ieJSe zzuGr_wcKL(4;#nR8@3I*?!L}?`>XNWfAxBR+V~Ie8GBy!pZoqH;+{&} ze~5gJzhk;F_y6$Nu{)+UUhBqwzMFcGWW2BUD@|sux2Tlyl)mO1Z&xyA3FolsPhDHl z9?7yS^*N_;3+EuIhX(9a-XzyKxF++-@_UVW(CByWTJO<+Ii3GYgTCHmKS%vxEDIh= zysa83F0MRwvpYGK_a=uDZ>>Ihy*oLQAFeg$yvc_Cxh3U3gl^Z)JDI+MyS&53d?#!^ zQ=X7@9|~vPd;Ti>i|2IqD$ZJRB)f|>?`<{hC(6#|oyN4XE>Y9ogWl(hxa^DO*qctx zXPB?EA9VdY>c#X9%7Jh+Oem3Upb1q-mGVM`-JxLvl#=*4oC0XgjpYzZGuV8t!ND) zutA{RY(ustc~wQW2&W+T~jFav?Hza@YoMalyGsaEM^-OZ7FZr50 z_py^s)!`JfHYN4_SwEcP-^uVE_cJ3Q7s`CMC3B6}oVt#4YREmwJ}l=4SXX*T=^s8< z@phMYO72Ow8ba<`bD|uc*P3aR_jx7vHk)tB{k8JE4gXWd$vv7rCiltz_OS}%?8>5T zb3O5w{KGEmVkOqHk#8iqn{g+2axuT3IjTd#Jg_L^MdCd%o@N|eWUb6y>3gXql~i^K zZzyBWn_lVP3ROLbz*pzizGQGS1M4)xc_3?(xdSy z4y|vc=zp~56hY?>fF)e`Wzd-{)ZFDqC$k2mJTOPjgh;n}gfr`RsVsu;7~dwhnsQq0 zM@tV8Mt!GK>7%SNVbWk83F3@Vj)#;l#@H$5x*5u4LTYiaW*{U(_ zp6lp0Der2+5I60;)~K|nt#u5Yp9y82_IG^aG;hZ@v?js+E`6QOtZT2m#o$iAP}-RC zN*gcsV&+;;eNo)$@k%#?-F%U^^Itmnztn3o^}S@h^PxVfnf*c8Kd6t<{U0%YH^Rj5 zyYouIU3r1mO#IDC3;t#Ap!eQ%7m50(IBw&^wGi&{E6?;EC!ErtFs=AexK?;Hcm`os zk-k+kJ-x}Lbpr8}zsIj9{Ph=ldUGt!cS3RGbKYZ<&fq`e9XH5ZWJS`1o7T7{5`JP1 zI{?1*2H5Z_>MwjJ!E*xkosVAzzstJFC$b?unrA+`k#-b$m98fZ#1%EXvz%cqfihM9 z%KBirS-&a2uTZ9q_D5x>c1LfGw4tYsGQ3}9hz=#eB9x=f6&unRa`;Cd!h=xecd{eU zS=VHS@tVU}L3v{?sP!z(xwJ-S()?z)8vA%C4!zx`(56HR_YI!QXK``a?d|Hpjq(>&#N?Q~1Q29$XZhDp{ zxon?ws<$0IXhBY2A4E^^X9%ZtOsyrhfAk+=kcZOu?rk?+X&OWvZIiOdv7ic2fB;+I+Cf$0O%EsvH zgBOwhK2LY!s@$KvlK3P$cS)e9x-VkVU|n7V8SQH=sYnjPlaL#E65q|G3%y;JAro}= zzVt=jgYKoC^0)o_{X-yqMlY0)Bc1IkWyL34#D?qAI# z=PYIE%1)bbwC_zB!V$05NFLirSx|q&$TCV;%>&eyHD&6u)xP@!=2F&{p7u-sLLI05 zYtHTQ)%L0Gea*~7M{%?5W&(LMlU|L@#itEF(zO_IZf5M(hP%=hC(qFg>xf2eCh4V& z6G^+ylpP1}$KOM{`=0Z>N#s+uM?w(X? zk4#+tuKc9GK23rzg$tB2_tXWtc0omVaYZ_ zxg%eLPKWc{XOOM;X;DY(>*ywKdh1tnW7&yD@Gl$G@L;{ps7yQfZpw0Q0p3ySMVpJe zyCOJ`Al|C8P3TH+Vy*!$pU6f3+2#sdDeZ z!_Aa&jQCZ5WM8WFQQ29^W^$T?ZK$)sKkK1OgEK4%FqNy`Dvy#c>9jGQt{Qj#!x{t0 zmNd*Bd#tnvH_8Eb>3W>>>#UjhYmL7hK2iLtUZ1__67oeKk!PPG4>q{R-?@>#koKTC zhkoKubtRlHkZ*n?JDvAwqV18c=g`7weyI}em-Ga8$yIAOD&qwCIqTe6UcAH@9)80c zX+w~w(ivu*sRg}g&N)F_BRhX=MSR&W9hXrbd8?PSt zM_cCdma59yS?N!rtzFjy)-GHaw*jBmg%tprz7Y65TbO+00->2=O&u(_; zKMA9EWYyO-r?5}tTk&@kSNf;l(-quB6DuzE8snBIHm%x^(|W(`qm$%iN{aMuyTsGl zzv?Y>6fafW;7>|11}2Y^O)7MWw`(JMpz-Zx^nJ9GXFqfvI=j?6)j3ApQSCKaQLXDHv_ct@YiDsDJG{)()i7o5_Y7E)v1DoL2RIJYjq8aAK zdFg7s?TlrQ%?C86`F~B-izPeve^8mHaDtq1NI#};34SFUygk9Pt+Q?w+%DCwMEH*dDQvIjKu8r}U%0x2JcvXF}@~*nA zyZd6uQZi6~syT|ru9B8*MH$@wh(-@F)&pJozhRR8IS7~kfk&UN#kI*LQeERTvXx|wdX{-t+K@-T!8nk%FpM36#%QfZVbCF!Q)Y26hSI!l z;5EvsF^-bWLr_+Xqoy#9>ZiOqC@Ynj`aG4D`ZC#UPs@Slkt1oGmSgPXFm^)ML*&yK zjFp%hYF(t6v`3J;&Tod1cesds75;+vVO+`>_qIX$vq9EZC|`}GG_DF!?$I1$ zFTQ8suDO=_9nCvZ4*s26csF#Vf5r`$da=QJJStDsm%tv`c`CRYRyNJ;_;1V;^^URZ z*_%m&#%>z>hDlS5c3g35tf2I0U-oR;WzAux;wPFzA5xkN@Y|(7&B?BU@W^8d-^z#D z>?z`xnw=Ibkp&tb%7Zv{G|FSXVE9AzmaYBW0z55p{xRA-9vMrLQ+b75d3L0^8f&IW11Esh?l-l+XO>s;mz4!W75 zJ<2kkqyL@`pT?Z;^tl&#r(J%Y_vmHl6ls|T|5Rv}r~9}{cDx|jb&$Rtlh8lcl&g(-lw-mqu7kBPo%uV#Flq z%tNQwQf3<8&(Cl+EJL4>(YkVsbxYlus6JdaXwp@sNofe$Uvyt(p!Jmm<&%)k;#Xx6 z=q)mQM8A>ksCn1V6XfYgW=;7>zF0nzTU`#*XZJ^2}Vm+xy4 z`!2dSF3nz9n(__DQPY z>@&46ZG!R=&X6AVVDz4EkRE#`AX0iuMRv1c$=^Lc{88E~=^km^gH`!Y;-r%^x|9>` z6X|>K9=CkUBJANflVEateXXyX+zwx76hihp#CJG2vru;r^Bv(kV%;NrNBNH0?3a?0Y2!7AMczZ&BPa++-v66J#7J-BRh>M!l`q`=6*z9F+<3 z(RhP?7CV=xYnqdAZ&Xd=w+MS@flRDjbt1n8-HcZg&T4cdR&{bStJ0Nt@eInOQ9ju3 z=RL}6Cb~m;!Eb!|Bv_93;m-HQ+*bN|Ff+RxA9S}hJMOktez!XAQ*q{L!kY5r#l?UAR_{ysUp&XT^P1Wp z?R)(knV5VZW19l^7S!vn+F|wW8h-?7aa4{!rO$VtIze?)GNNuZ=e2jc%xfYo&78>^ zbK;dI;%PFUB5jJ--4^F}JnudgBd@}uxuVt9juvz_+aQ-~j#LzWE8D`w_S4qQi(jfa@orN{&VcKPEeOXg%W;`04j|B@;hT8WF zVRPdUmVIx|R;Zof+;oaIRAq16Dr0@sWBBZc@4rQ9Jz4gx#Fb`D?lQM!+$Ec=2;bNp1@&Gwry8$Dm@foxKgwPs zu*0s~=Kg}XWzT5xOZ=4jn%olNKu(!sa#DKU!rm)$^GeVT(#F%45ys9dGmMq9vKhIS zF&JwhF7t&PwzlY_&I>29v=^Br#LGB3qck%A%;6umXkPPd!sS>yB#jB;kK@(cXeE4=hiL9I4d7jduaeTsE0`Fz4&)@Eg*HrvP9rz%(DBnth z=1^1lZX-;hSgf_s<^^pfVN$dkZSL)UOYs`kiEj5pi8NpTJ-9;B~CE zksss{B~Hnwjd;|4#&g6s2ygf+o)rDT2Fj1YXC<`Nsi?i3I>@*s#hvD<<9#o8yziLf zeK&i&-&|bmWs=a`RbDQ0Jb9zPNRgh>EnaHyc=E#7Gc%X=i8ZSHV%B-C^5RL#B%32$ z*bJDZN9S$^-ITqn$|TBqlEwx}utaVyS13eOPZL znA~E|D@FWAS1}f6?Im~{!2x%!@^p?=dproN{VJJ=-<!tNIQ>~Xd*$8b3dwc?CDbY(?l5v-9K>L_}Q?G1eueQAn% zMtO$8HUBc$qiKGepj^Wx)|njD7xI{49-W=%HQ`V5%qVS%=Dux&Pa50!&P0b(>~Ww|O-1&h(P7Co=3d2`G<8k9Ty&c{lW=t$y^{9i zlAlY*G=}|G@+{e!LB>tU(MzwW{5Co!-I9(;*BUw|osy18*Q8_8E$Nu_X!v^82Uz!! zj!6d-DRc@MO3$P}(mCmu^hS3=zmaZ9|HkW<=C}>r(ir@|O1GppuccqoqgU&g^h)~| z(ya*n>DQ36+F>`vye7Sv{pR|fv+Nnh>)X82Mqf6&J)Ccm?a?~MwZ~^^pXswEatG|B z?2c-a`k~TVzrVzqw?}{Wzx(}l9|#4wz9XZYk;0FDci`4foF={2*Z3^NoMoNHv79UG zd>?NTO|bT%#983XT_Ly8Ur(H}Gdn)BvN9<%j4cuUZt0F%6rMUeaxC6EePN2b9`Bts zjfEp%hmyAk(Pgn z=sykp-N}gTq5qWood35`l5r6hwFaOv)vyJRU@hX zTJL+qRgGyPrcnEDjPqykJ(~PMd0Hi0jZh{b_)Z*zCOOkj*{PhgUTNlP|LWuAGqEAl zxgo|O_q~ldMA3rg-%mg+O;z2x$LpEC`UGQ%ClO^2Qp!1u1{3YZ~Zof?5 zQOrjf_P zkwA{Bi^w&GKV)3pbhNJY*CcC|zt)@M_%Vzl6(&cWO_VnHlK-s9^slMAYPUxsw6$v} z_sh$FK^d&!du^oI%dnRDXaqYp>h&jNOU;>|&bNfC>ZigvbPJhJ=R1@{-pQ5zeasm? z@ZOgXQ}L|#7q+IeB0 zrkHy> zGmQnbcC7smt-pmGZ25${jQ6MyEsUqMk6gD=#WuCXy;@n`-bwwW7Nso>C9&6}e8S1g z84oVagp)lPt+{F~nR%%9OUgj|FS5rOpPvf&tL?ZnZx3OU5pmHk=a_!|QA5Abt9Wry zrL{!8(As5=`5|i!A?9*A&n*3E%5rZp*xF{+w=&mxcU*It7t9ZHtjVA&VQgiz#-zDc ze|Nig=S63DG194dy!Ih=XV?VRA(X!Hdh@@n-W*NixH|Ao=?iH~vX(?2@Oz|f_Uoq& z-Ih*IK(`yZz&duI3ypM24`ibs9(2oTLw&WnARRbKI^d!MN!D=D1=%3C8gu|Z>a%6% zthMk74mLS*%PnG_hCX1QtUk9j%X%PZ<#exFxWqZU40n4eUdaX9$_sz{cCXtM5X;NN0VGq`sy>`%9YoGTcp&y`8n^zRIBtYq^Y9)K>II zQ=Z0dX}k71%AJ_1$MFp7A1-Z_bz(n!$s5wfuYgm!3?&O4x9by*K7Z8lR|LQ&{o-KH=+px$6dh!Zc2m z`%c`9AwK3~tW!PzX6alSyiM`i>HJ&VexG#yCE;H$o!8;^yQK4fzCk)if6sJ!Z;;L( z|BmTA@CNA|`90IQ_YKndKYqt_*4`kUlE?2;?z`V0osa*H>AZt`V_&Zx-G*s}?h&eu4rs(qWp$&0`PrL41eBx~{ zMzv?cy6nHhv#}o&@G3FSWz08m9KR^-sG0x67oxev@LLOA0{!6&%NJhwqSmr?hOjsv zo?0h_r}m^8Jar~f_Hs?1-tdCSEFjI@)kLrdfQ-1^OdDhqP*OVmAPe1j7NnTS4W%?^2(h^$u$rnQGd57kI@`VQ$p7EmYJ~s2$z7V3V zydN2!wy^od(-(g7#ioTHd~xZ*FTJQVHj&2A!q5v*(yjIP#=ehanLI1@qV~?%AO4B@ zi!fyqwq>&1mWlRrR3>4S34O-+eKdtFeh3~`hHdZ(WoA`W&I1|Rc4QMhm-3na)C-Z) znwrXH`NGp*)Yy>w2+C)W2eZ(5A%uI#x@nFnJOs{qR7Gpj4IOxOd?(s66aOgpV3>us z*ZC`6(*5iF>uwF+VZwy1e_>(bizuBIOWJfqz;!1lcRoGQNQY!sM0V`uJr(FBvfGU8 zq{Av}-4mmXUsDe+p2(^mzK$t;*t!Slw!a%` zWgqT|I$!3Rl+h%~>2>Pfb@RV;wCJSQ&v8D(3~ zyXv*-u$jL%sM{)M)pOMw=}ocqZ7&|>LpY7=P4IV27uh=;r;DpeN9@Jg!oxutrHj(b z@%pHJmIhCiNonDKyr?~#Bzh@ZrR1-E`Ql|5`<51d>qY&ZCH~a+2>KbmoHH?u11=Dj zV?2Ugg!WP+Dfb-479R@Vu(%SVu1EPcDaVh#fqNA9_#3##ai?5gmwy8HQJGL>EsrYF|#wm1PbJy>nN25pg%;#wAx1BQkiRxQz{-Hpg*UcaO zQ)G3?MfUrm`J?}8=9hvx{YHL5_)#5vBR^sMs7}6-p9p@UZ{jD4pQbnQ(}bVqH}TVq zpV*uDiKFu|{7F|Ea(oy$ZVq(4UU$?NE>6)dQrG)3t7~H)om4HouZy*g9&b{-t-77_ zoZ*YRDqAy7SvC=>Q{($WbhN5{d)6~(x<6hu%)6Gb->H2-^|$I9<2S6Xt;o^O(zi67 zduMIz`^2%mi#1OAuTnjpU5W?&R$Sl7EDPoU!F-Cjl-4pD_wk8^zq@08)AOZDj7*u+JD`OjmXw)@u*CeHC_tAu6M+6|4R{@vm*PFqS$Hc9w6DTFaIm@IVjt_ z4gObngH~sN*73$_aF)$sA1Kdx?>pRbcaN#AO<>27`<$n}VZD_-l`#EH+?dB)y!R5) zl0U<9ocWdhM8fOtGF90cI?mime<|h3mQc1yEzWhGlhIj0=AxQAGGC1ieh!-qy|cg` z9BqrkT)2h#XCkG29C)NyQzxzqd)%^vPR7~Oh_WXon@D3gyF{KY=q4Y8&qVP3W>|%@&au;}yoJ<`g?W0%hE`KFH!P|ZgdoD%x3z1!Gk$qFfhgyF~ z^4;BUs=W(Mwbi}aYwm$xJnrdy!B@U@ws+^!)4Zg^+5_u7{qYv|8_|K*D0`}uOE0p= zRy=&mRoIKy*Bu$Rn)R4l zzW7eJtajwme}t|sl`r@d^x;x@=5pxAOXc%F2rZP#T^B*$Un-ybHt2<=^5EM_$+|*{_9gSZ{m!=f{W!1o`=77;rr#&= zo8s=dRI+~G+Gy%&+Q-|O+i;iHI~G;8pTqsX>5?DVg#F^|;4btI{C70`m!4+tg!@Z_ zFxayPVVDPSw`wC?$%Ye;O{RVi!9WUXRw270>%;Ujosamzenx`zJ#>gZ{6vR%LQi6Y zoYc6-qwgu!Ome$#PTL;%)tFQM=7<;Lyl}Eu3r#z}vIc#PoVvHy+lb$uz+Z+wY7sJgDAiY1{A#b2UdN`rlSOWqLBwqCRNz3D?KNhM`jtC^dlg4hdpYa>L)I04=xZ+^T>7EUnS4Kzdb(y(kNPj+ zuC_woA-)d<-<;LwJIwcg@~yWGn6KdvTN>~PxbD@`I@su<@9lSAte4TKO zEmiO$>?wqpSBCi3{gV;1yT%Qz+_(J$bW!Kbu^UYe^LFSDxR+-yzw20x`?g*J3nf{v z6_%EL=_9_v8Y!M<>^R z$C5j0FX{KVxQ-mG$MstE^Cc(z8};+W(reex+H3e-iQk|sosUO*J0%)LaPDC_P?t!YXYzis#=;qQ5k@Tz~2X>RqdvtNE*za9MD$#31) zc>J>;t3(-dC~c$M=Q1m~(*FQ$(yWxu1+4Ol?_EPZ`*;;Qxf2(hQ~%ve=ehIbjsDJa zbQc}(!JS?3b+@wn;ey}9n*0!WBy~q^5L$P;qb4`TZq*U!dbv}l*75t#L*{vnHJOv0 zxMH&Ev|BB}yMUii@($|FD#~@0H!^{6#3MfI-cj%`BV5FWn`6VxCfw{d33o2xX3;k+ zIA?8;FU8wIc=Wv5PWbjW34adZX}7B6^TZ?QUxYO3PFm$xcYvOX`|&ni`;+zjjL^P~ z;PyuOc?aRzEZ?o-2j4BC@Ew94hx-ZEy&*?e?#OXHGMRw;6x?4SU41tE3aDfy9%_r- zpq%Rd8$4d7yxaq4o9xSDW1EkRjm@Tw?B;(b6No5-<^2#s};L3#rBDX)x; z?FXMtySktM1qfsg{twYuPsQJ6j2q_>#$j;WkNZq!5j&&Cq`^AyyN~aE{7#-YHa7Ii zD`W0UuZ*Sn@8I|FKN1gN=KRyx7?H@q{lVfAE_#XN){lzWF;rOw!OzYTKH`pNmqsKv8$Y)|~EXV&A z{te&B$KcPdM&|F0@#0|fjd|vC#>}|cn6@LYjOEwR^4=aYZDI1n_sr{znKloLj_BA} zob*M(Zsfmh?3J-Or28e$$VQ^v;D^LytN$Z>zjY=W+z88%xl!Gh%Y zu!)}$HaATPo9tg0GxYAT>A-#J`@?3|$GB;IYS;{PuuFb&*!0Xt_Rks91ug71X5e{a z4vtc`(U4jHAI5AU@7)f)z-Nhz(RSwx(ha_wLS_IZ?OF)m&%@_k$oTrONna5*(>@S3 zhrSp#Gd~6@BnOR0&*H9-`8q*7H>o=yfnl!93Oj*aq+}^RVX%`}k zTS8{WpW${IdA-P(sePpDQe^VAkU8=R=--FT;HUAo1%3Dw>G(#-?8AND7tlNWXZ|!~ z;)FNw8=h&*Zt~#a-ti!LAl^d{5e_=zpF+kEZ~qYSG2rZZ-$_B+F;A3wzd%%N1nq$8 zzuMeJ-7j2ylCS<}#eF9QeY$KUi(s;2(%GtY;5w6~Z@uf6ayR&!mek#KwtNuxxUH?+%Q;xzy^8#>cs;xhy`2b#5*_zZ*PpxqV| zpS@r`(AgFfpAoQm&^Z~^pgD_)PxSti{5-VBV&c;V)(f3yG4W{!yAis;V&c;Y zb`vyjG4bgFbD+Hz6Q6Fd0`x|UiBAvM3g}H16Q5qNKB!|c@hN~6MJ*;i{b2pj6&4ep z0kCz@K8uOZ5ZHQX(PH8=4CX@nEhavD!3Ln~EG9l9V4I-pEhavPz&1l&i-}M4fs_0} z=zztjW3hb$&O-C)DeEfy1>9Y(MlFi;2%6u!B&~V&W71>Ph}6bi`uf(*|}3y5C~r(++kRdeCCx(+PG2I%+ZT z=>jwN5SPWoryDE^cGzO#(*qU;-FwPO+HyjDU4Or&>&W4uMUBrYt5t(M>1$X=uB} z#HS6c6WU=h@o5K}4xMH(@#zGc0Zm&>e7e9gaWij#T2kVB;w3zq|fX#-^vY7Y`fz5$tEhaw0U^!^F#l&YXSPyiz#l&X> zY#wxu#l+_j*aB$IV&W718tosn$715s2G$FmXEE_<2fGovz+&Rl33d}SZ!z)d0&}3f z789Rtumbc(i-}JU*b3-P789Rdus*0`G4UyY6-6y3KK)?*&=nRFp8>FS&_0Wa&k)#p zXwhQgGYsZJ`zntWdBVe1L>n$cehrl*NU5klN^g-G`=zztjW3hb$&O-C)DeEfy1>9Y(MlFi;2%6 zu!B&~V&W71I_)2H#A4#p26hO#-(up^4t5xN&|>1#33dcJYBBNY0yFm#m&L@V8!QTT z*ka<-0~QB6VlnaQ1xtXLdu{v2?*dp78nu}C^nX2y7}eX)*B` z21`NPEG9mC!P=oyEG9l9U>(q@789RCVAG%}i-}KkGwmO=-D2X?2G$Afu$cI?gH4A{ zvzYjFg3W-YEhau)U>UhtOnkb*x}ei7CO$o2GodpqCO*Ajv!EG^iBAD63+=L)`1FHy zLuXn{d%z-a|mn!G-omK ziT*w9AGF6};?oA!3!P^%@o5LU5xT%);?oIs6Etrz@#z9{puH9opKh?t_tE}YOniF4 z3ecM@CO*AjoABpYOneGpE1;Y2tLvor^n(pR3)Y|b41o1PH(7t;GX&;BS6F}IGYnRg zf9p?t_JXa4_E~@8GXmBRb*(?~IRv&2TD1PeC;AUy(Dl}z__TrbL;I~i@o5KJ4_#;d ziBBh35xUO$6Q3?H7us+AiBC6JA9TI-Cq6x31JI)NCqBJkE1<6RCq4zRP0&8;Pkj2p z3eW-TPkaWzHbYlff8sL)=0G=Df8sL?HV7?Pf8w(j>?Y`D>rZ?}z=oiX^(Q`uz;1*N zT7Tjb{RaI4^d{?1eA>Wzp+nZ6__TvWi>rZ@!z;e)?)}Qzc zgYAa)SbyTP7iIqOe+4uQ>v?zaBKr|laX{e93m)}Q!9!MdS)tv~TO z^bZ^TXP~pKKk*p>%R={Af8w(j%!77Yf8sL?HVgWU^(Q_$4_F4e-})1uZm>~km-Qz;U0^ey2dzKx=>$6j z%~*fp(+)NrI%@riPaD`_=nU&me4=2T&_mXr_#FECjs6knbn8!iM!?e0!`7ep>;*Gm zoz|cD41-OB9eH(0jwPwwV3$yf+e6G789Qy zuoN_IG4bgJOG4W%CO%zYQ=tiqiBBh38#HAx@o5K}0!>;>eA>VUMJ=WH^cjnZ zPdnH_sAn9=iQ!OSw?O@ZODT@Vsz|wNFnD|7&I-wmF6Q4s5Qum?L zEG9l9U^Ad;i;2%(une@*V&XFl)&-qzG4UA!n+cs^G4UAyn+45SOnmymvd}JziBAEn z8#>cs;?oN@8#>Ek;?n~*2b#5*_;iEiL@g#hU0^-X*%lL@POy2nKJ_BHVP{(58(+^gJ7Az({1+aeT3X6$PFW5S0pT)$d2W&mGXfg5W26LhP789Q? zumR{gi-}Js*e2+Di-}J=*k-6}G4W{w8-xy6OnjnXL(okY6Q4tyX#b#_EhavxdqUM# zr%)R#Y`}kg9ec1qJd40tQx=bSzEJD9Aykd!3bidgy7OX{x1|Reg*N;=$=X$tJ5O}a zsP0BHUcrx+3jP$Ye)nlSg6#Nw7r#al!DIRWt zb$8tGHw`{%kMC50`+*Do$ozu8e__EtcuT<_y{kZd0v}viF|+U9-v$4f@XzK}R!Whz z`*ZL({GEb-zn5?~=D45s^9BDV(&R2K z_ycPSj5!Pb=7&kcBc!21T&EQL8H5?Us^Aad*Kvq@(z^Xcc=y9|9p^rGnKk>jEGB;n z?{HT#dCJ^d@VnrnHP)d)()mcipH(UNTL`z6aM@D|eksMfb?}~jRl%PF@7!Y24Uc*E zl3v1kkC6Wg`9G!L52sgFc7|@>zqd&IfAp38BkPSzW|RFR~7s|!WI`7{C>i$yO%w1{KmI& zCa=7~pZxB6KHqX%J^!ig1;4$DoN({Nz2j8M?tRGXWbQUShjP7|-(M*BnYkPMt{cFX z6#SWskjw4R`;f&q3x0Nc!SAk;|5M37VSBD7?}S;fq~L#iV?Cd9;Qdw`cb@RQgun4V z%5OF0cMti4kF%XJBu~z^4Su0YUQQ)Xgj;d)2EPx!eWa&&HTi<~x+UZb9`1dVH(@tz zr@X6_)2Wm%e&7C=bzM5~ABca>UHb>&F+}(+S5v-(-!hl-yMee0#L-U~F5>>Z)x6eZjCj8csf^XU>E8NW~*tEeX-a{F_mwI~@Wdpxtf%^7&>f~bT8hqQZ_7v&x27lkx(&G*OGswtWg5KVa-rk2^!eewh`dBUahfgIRgej4R zJ8xcDabkDwzx!W^pSt{a#6OFAG)&rdlD5LH2>W@RPgr=Qo`AWp&_9w1J_WQM7aBL)8~t4n9!R+n)J9>av6*^W*U ze&;E~Nq(|D=q7x2UqzgxWp)7_h2Or##7SCm1LX7G4So;2=MAH?Bh+RLgHj+=;t3G%X3ExBbdDl{YVVPW;OLZ)4+H)1e=gSfoPZem^RU?mzU$Azrh7eh z9iPBX<8Q;JgdN3^OTuR4FT-ZjI`VZZb`a3r*c^1;7BbVZJK1>`zx%O$5WazQL-%dO z)@2oWx&!ySp?8MNyxXv6;eYe0v9S*FJ!=NGJ%5aC#4PN0uz%PIcJN~CP>@juyM*o! zkr&b)#Wo>LzHXX=?69{PZNokYJCqD|DSgyYzK-1~6f@-1vz9>K2V+t`7SmIW?$ z5>LG{wskjlH2hD&7D+ZlGw^c|zgwa0|Ab7pVn_7dv9X)JLs)EyW_}NOffer`8%uN1 zQVHX>p_SNGd~Iwj%3+6Dxc6^A3zTL_mbbu{EzV8J6!*tK|cCP=LrAL5O3RY*n!9&_Dgg4A0^E_FH3vTF>);2U9R7OnH+?z%8~o-KXk+>rcYKvL z3%;5&^bXP9KSnz{n^m73MM8^N|hyTWs4|gr`f` ze)wwaz8-$PHTa!D8-%}2?X+9)bFQP!>7=dcVO#>=70YRJdTDD4_}PJ*PkVJ57;StX z@wxXC{#%R(uA%RxogclGc)wV;!d%O0f-Og1P}wzG$FDsJ*uTIHp{WrNcGKK4hjjnNql z*`GuQ>+|!@B_{;5;^RA% z#P$b&vS(4;dE9l!Thd~R*8$U813FtEf8t*RYlrG?DPiK}g6W+Oy>lQ;d6QA8+ozM=8iH`@yJR^92L1D#b6l?}GZT*Rl!6qjI?X;NqBxR=qoo+Gl zNrBCT>OO1n3;2L#!7>&TpA1+xw98`RlLea%ooO-gkuA_1xmiqn@?be=x5dQA0qcRz zwwU-7!RA5dSWJ9euodWI-wt%1?;LJA2dlJ-=T_X~9y)&-^?~mm+!Lv~yZGVJvf9yEntc(2b0d+@Mx zzdSs9;d#iT%}X&ZBWz+WvbcftEuu{$-llJx1Bc(wUg|aMlVTTr1e=}^cG9v-`|lGA z72PYWd}hhxv^2W?0qV#y{=ZnasZ$+GJzBRfYsa1?jUUz3Y4}sP^jffQ*Zrz)2Ril~ zdX2xp&J2HwYdYVv?C%-;?zX=({GMZfck#Q&{+`M21^kXe^P)M*o!_d*HwE9U6@Vqd zR`4xcdC?i6Hn4RT(_MDK9f)9?EG8R3-JLiUY>UNo$D;1=OM&gQnBIfYop$YD`z$sU zOmBa5fGN(Y%v)tY*x}UIBqXos-xLBjo#Sc`+^8>v(Yiz1la$ZbDVw_~E0=zV@|*fy z`j8TR3HmVOgXsI`3PHP|Nz?2n(ai(&VV@&igkNzhJibI54$sl$b^V!AWKH(Edb@oD z+nyuvkqo26FI^HZvyyuH-|55P)BAPgM7nMyPQ96|dE2zvw5>b&-*Qr5yPuv;|4~}y z^&P0!dG#0hCz*qNn0ojb>MVS2`Y!e3Z>S%)G8R}5|ILi!PkQ-)>VfLSO6ox$-;F-4 zFZJ?)zxYU@VmL!!CUdVSXKi%nyP14^lbO7v$-L!u`Wn8IxAS{RQ--saIzRUBoMjmK za6h)E=U1ArQ;+;|RS`4U=P?O?zLozI_}6_tXYl`C{tagZbdT1+hwJBxbiU_T@Hlsz z+n!RnHa!_(M9#m?*CqSP@@FP5Di6Hl5ntyk8Ja%d*+Tt>pZY-Y4BqX;zx>J{X5}ZI zJ&tb-e%mK=F2nk9EI*ycIC-4ENGVcjC;mO5a&QKz4}U@Y$z$;=UxSa=<5yXTx6+_@ z2ZFQ*aqRXLjx#Vv(;Xw+$eHK}WiZRs?N5hyb9eYpS5`(Z``-Rrr@j3A(QoeU(p@s4 zH0NaQ;hX{IOR|et`zP$@bH8{lnp`qsvh{O(A|0ZAIX&&= z0}Q#J?_{jK`##3y7rg7|p2OacyV1XxdmklB-p#0(96FQfs5e+pqp8~(_tdRL{+xZJE;WH4_eU=u82nHjixDqxh*fl_p)s_lxKHvpt2(;2 z*851fs&Min{|U3KCU@@k3-0NYAI0!QJX?K-zMI-Rp=oIPvO*|YT3-tCe4TMn)1 zb+xG{vyPQMcHia2KSRfOr~L}jbK{n?%|Xt4yxCnvOs!t`E|`aL>qyfdq2tY*7l&P| z()-)qsdTT-NCtN`{pOuYOqUOgzY9iZnx^VJlS5eqI?tGvHYbyz4h_2H)sa)Fd)-w- z+sjeFpP1s@O2}Q}wd5U-@~g&_E@V3)MR?8>Z+hp;2U@{Ql5rK-0N+vGan}1&dTa0{ zbXxDp817c1t_OEKOyHb!-0fk!O}Q1Rcf@NlI^(&Ia^fB_@#ehi2avDg3nf1l@P04f zQSQVF?jVQ1cuydl#_dWobui!`FX?WzODo1xnwE0+m)?RxH+WmB+10&|J>-!$Vv4tU zx`#BByv+-zZsQ!)3h-+xdLz0mrMuo%{yb)G^-OY~A61$-KRuZ==zML0{0fViMY!|+ z7`OpX5~uKHb6bEnfwzH~|g1g zF6z$`&Krks;N5D{)|6dWi@1HknFHQr^Ahe#fAKxs4-H+C!;ee9UF2S2^0qibT5{Ys zoMjA^V@`BA_hsgAH{9`?yxI#7s;$*|aqhb=afexE8RvtSc^Se^C$2B!rgux4vbT6M zz{06zUb-Zi-Qww;9=&jRhu+~-Qt(iJIn`x62k&f}c|%ci8-8aQlaSuo4)fk3I-34LEu7^pwfw$X zIP>FLlUc%9`s*q)UB%hsIU(uka<7Z@giAlEMabWUS3OnZE%QnS9!=Q=)UO}aZhh!h zPh*@3gG;&RntdqF$w!GVoZDB6JGshq_~|TlIQ`?=@*9?Wo%q%H{&4muHRD`c(fe@; zm%3W~aV?(d@ihL5(|+7?5APeh1uvetx)RR+G`Qz2IJ2E09{F*u3*H`#b7x-R+ye53 z=iuYDDEu#em~)wwTM{`m=azWgq~Xh}d1s5W_2_gZVRGKGxtzBje1dwyy+!cT{pm|D zU+P_Y?^CsDe23j9Yr1o#BZs`e!tSHBb_d>%AcMSQvXggTuB&9i+~-d_r#Iu8xa%lv z9xc71IDx;vr7nPha3v2?{ywuX9WN_Y4=%Nb3pp19>6@C84k4NFm%8Hd!{m}Qk2 zv|T+ZwY_(suk|~S7bt$`d;9-=>dOcE9ezm>L4@2R%B*LqK!x2LANEOunccedo~ zjj1s4=J~1e91}vV=nx~xA@sg7`{>TS9gCm59&AR&#v(F?!lT1 zPV-tbw_4uZQ?K;W#yytj-Z9=f&>iYQTJS5`C=R_3(1adKCMu66WFB&e3puJyisQa! z;c0cAE^j{|Z-otIZmBeJAG_q;l+{}Vlo#c(TL5|x2*If$*DP)%}b}|S5#jU+xom#^r)G5 z6WgQ%yg!GZHN)++^T~mW_0^Q8p8h{jZgaZj?vR{@d~xUl!xrhY6HHg0RPB>Tlqx z3>4QS;tI-ud?>Ey4YUn8c++QyR}1cIZfvjXk+a)Bj`m1lL!}k;J=b~@Deq|J8gCNi zp!P}Su0Bn5gu8-*`jMbKj)V6^mpofB=LK>Lcv0r+Ta-_^!CQQTHg8i0Z65dcis!59+eFHD z65*2$d`rk9$2;vV<>}Ct!AE_I#spE@w}{{PzU4Rg+PXH0vQ^*mCEf-e-?t3^L%nYq zVw@OGIiAL8^e1KAm80>Z`WLOunEd*h`WM64F!VReD`DPd3Y$HoPxqdG+>g2reecJ8 zW0uiY@x~JVT!w z+@F(svZg(Q;V^eJ8{U9otQ%&mtM?Vg=V8vKdLDv#{^g7>=VF^lx^)LgnEJ0Zr6_sO zdmFklN%QM4`Oq4L)-|SXlrie6To;6CdohMjUO z|14oOmbjzVntaxeW}o$&@!Q(AsNB-Mv^hjmsKI{xtf5low9Lyhys4c5W&2 zZl~PJeEZ(iEbqSbx!z!EXL%^Sg0z|wgSQb`tD1b`%Lmqf_1GGSK{n=hkWC?fk=KyV zyOED%Bf0$F%7p6({$H2LuD8E@z2xnV)@tCm3W{lchVoAD|zWk99@aMj;=h4t}OdC zU0H@)7TkYKE=RK1WaocfE|P&{Be_UEl8fY1aAqFWlL2J&>w5CL%j2iq750X8=MNx{ z^N>gPfR)E(@A~;c0{*d=%?x?Bl;C+Ii?FiX?M`$O)xgXNsJj+;H?a8uo zc<@=jW#E=_oVG)2GA4R!*%Vj%t>{A{+0cg&bIqmP8R(Q-SO>f}bqQ_9EZUC8(1+!L zJ~Y<3!sNf}KAV5m40Q9S#x*xn<|pQ#Qc&9w;|RdCGze4o!{n>?;QE|m>}AO}t^!meN|nv31-a9jqmIQ%J|Xf1q-(WuW`4 zq}zY|Tb4uozpxx!^1t;Sn}7OdJKrluioDH2-#C@`89G9&@wmJ(kUG!PK2eA_BTSmN zkMi72mb=2&nqDN!cjgK|xbyIwC5$1K27Pkm9Nco(dV{%bIKw&C51f^J)^DfopN`+gm_ci%|F``>W;bhhj2WWn+k%Z&-`JOH^pDEF-<^8aR~g5L`^wGgJ95*!7-Pdou92=aLLc8~eN@KW$P9UeK z_bz`L@=TB}$xG|ekC2XOMVejqZ+&arU?<48xWo8sx zfNAH+y7T}88N!q*t=oEAKdnMcY7$c`i7DyR5Cm~)+D(aCOi8!2$oBXxo*@belr0WX zz!W}?G%29TO{9rACoOJE2e&(iO**7b22q%n-f#Z;oAs?i88>wLFE+?4!{@qa1@@QLuNiaZl??k^rbG_9P-3jTIt%6%d88h>tb3V#_tWPGG7 z&;QU%c^$|<7k>%JxvsfHU;en2f91>QnS!3mJF33o2Iwn(5l^pW53=lmcstv;iy8Ey z@eW_PM;AJpd@%bUyy1;}?s|A>oWIG>;UC=88o^IsuA7kwvGNnp9^6qMyiwh8j=Cz~D1(clNy6P|FU;P8mu*#FX)U00kg?-h1+{SrI z@;CQ6r5u;!rpw;S*OGsgtj$g*%m1i2e=Fy_bt+b6wo(P#gxN{)Ix!(^rbL5T)th%V z!P{)7K6`s}=(e5B?Ec%a_p9yL2X+z@xCFatC-Ohz%Vvt_#yEF6e=%QY&dpc;UOuVg zk!$0(W6WCE$m^&*a|3*={Ner|U{2g0S~+qv^uPHe(0{yirLR5s-+%MMjOZ`g8(-uU z(*5GIjPAbx-JkiGrTZ<={gys-U+W`l48L3665lTqZ;9vOC7p|m&zT@*AbNisdY=xS z|1;UlXA#eT_vO@L{DGzYCTPE@AMH8YqHk2@=$wbN&jjaPv=90HXHFHr=dGMc@cWW6 zs;#^6ETj2{q514bEX~(JbIEwg_QEUa0Y=VC-e-#NJI^NDPV#gde=hFbH9gYU-b%vn z@?+Otmto;HWPy)^($SJt<;(jIXzXr0ZI*Fa}J z|MlflF?^8czrJD0DG^J|NxtL15IY>)hp$`tW;?xkdo#g%(hu@&29VnsXk)Wsi99wd|9?E=j`QadI zv)6j%#mI}q!|Tpa8gGThADHaOh>C6bIb&MsRe> zTUy12YQ>S`>~##8qnNz-(b})*_}aD9DN!F&fiH>8t1eM-ZPorMrj)#f*f;T{dX0EI z>of;CQDuEibD)X4vraMnh1UHs>k_P!4dJpb7OYFMPP3&KT6aI|T;7*0on&1+SeIg* z?mt|od7QoX`kz@VyC+Q!K(VG=@t*cJk9xw~R$_45{SoA?d=Sl-iRHHYW60dm9CEk7 z?0RC~iq}2&(81<&cO7iTCnj26h2ElZ{(kAf<}rG7Iq0XTyU<+F_$}1fLBru1b)}4kBA)=6992-xlV8@t#|uH;K=x zt~tJccPm-lt?NruKq@p|#5{F@aGFn{=*>`y1pzL(*F2KFbp4COS^tG6|? zYqs&(M*F%)kv-JXy!t?`dEIJc53l1~mkp~thh)#)#8AWwikrCDz~lMJR?e5coorA3 zE4g8Znn><%nEOKKPATv4Bav8=>Z5hO6-PTAF}#dNO*_A>7~Vc!M}5Hk2dxkIXD|8w zOnrwv|6wdiww>${6F+k9n$})u4@7_MgZ4$ak*(g9mj1|4LwhHny%V85`4U6>Or@F4 zR#^8)yJ%=n4h7m5Gon55QLamtDVJhsk4+iIM{^!L9?)O3f5QT_|9T{@aW>HY256t( zZfQRZ|BL1;n%1_S5Y4fhMQhpCo1wk>MPv`gb(W!nY-`a)eGszwl&{_d&yF|XQC|Pi z*U+0Du?XH@8R5|s-@6T3ISsqEmq)X;XQ&IqpFyxz~pd-U4)ZKH|ThNp$!ybg2HG zr9&K<5M%$8W8a95RE}MBC(5yZo%`Q-kk`tw2XzhN5vPnUz&;y)=T84`c=n956WfBC zYQ9I;zs5Din=6rPkC@NxXzhwzd*<@5JpGlwp#KYBc+KVDlwNah`)%|cM{CGl{`=iE zWE-2-7gnE-{Nd0SUWy-_#1Bld&Sjly-sMAw>sst5C}xtc&{W*}8_Fe$=wOVuhp{>+xVcW3R zPLcVD=x*($bVJ75W$P8WuFw1^?+tQ&fPIx*SKdHt^xi1%DQ1>&cAK@jp7FMs^?Kjq z{T1+$a@f1@}+u6)ic+KzVH?*%w@=VDaxQ^YHEL}>S z+90{46nQ0jP>QeT^&afCq_4V4>H@H(D*j)wztQ?LQ)AC_=ge80Z2uh39nT|=>pXjv zxW`ZS!nZa9*H+`T^3LcQn;2rM%dnXi}@T z2cSucoI$2~3GpmuSr-R@Fce-k<>Un3rIa?pf(d48GrME{FV zi1!&jAqHglwngbo2Eryoj6Zsu_ zzKr%JUokTGc%QTPJU9;fzu0q{^ROj24?Jh^ta?U0t340O4+iH!&$xv1(C<0>?YHW? zWPhy)_Io0FF5pF-3!Mj@3!M+03+=sn9jU)=C*aTM+0a?inNaV&&WFy$0O!KQY~Wd) z51kG1Y`^oNn9scPp<4IK37!vf)V*h9KYW)dy^b@poAZ(4d=QTe&c}n|3+`XO=ZZS_ zl)Jr^X<#Flh($Sjj0{#UUl)C#g`p3;so8{*3xoTR8_-KU5U=Y@BP*-Wy9#Z%J_JqF zx2{~e^5|*NrHmh;d}DpoAFO4NA49(StibJQyLIFU@iNgV>Aa2pKlO5^`P}a2zS>p3 zQ-e-LIR^LYS$Hi-`i_* zaIc~5kPc(-n~8swiM@Xyh`sY#vG*>Uqi3D5IarsBtV{EHp3Tv-&e$BR8;GnM;`Kb6 zqi3D5H&}O3WZiOJ8+*gIGCRjT4`X|zustMu6VP}Vo9>MdS^HyekNxp$f&KCQEdKI) z1N-9wU8k2y*L@ExPS?*s*Zgl?plf)pmP*$j{LhQi^&05KD?#r93U^bW=nH3I&XG8JwFMDe}$>p^&6&U$Eay7B&heTHD|}L37v$moYffj zto&r`GG}Updsdxu?6Sht$mQf-uqR)2Ieik;?521|r-JUNNM{h=f5gFN(*K1i<$GlB zI8}0^*f4HgwN)KEW_IuLsi6n3b!7^EcU;6D4)~*Y-#0ltOH{% z4UUvofHypgFDYEfghOr(+IT$QEnudI4;>GF<$GiKt6FRMjzZ&}_MUo;T7PU*hrS!+ z_+5YYYHHK*!5aLI2Y=@A*YZ3=LBA=!yKYMS=oTuzaDfajp67hHw#wd|;e5E(IWzch zU5{_3e7Euh;!Wj@)MG)P3v&@TNAO+(dE$CE;rD}G3!I$$jZz(z7Y0u8r#*#N^Ip6cC&0%$B}P2VdSOc= z>50qm|Ar~a$D#V*oP5-Cyl#tPv-h-LPmVfMq|ffX&Xh1167NMe7Pn2OOW5tuCsu@3 z$VSCO68o^5>$0nfg>WAU>}cIb_Q3Y0?Dljy>x&Ml61FqXt{y(g%S3*Mk&EiD*L_JI z>b}&Ux%^gV%0nLN{@ez5f43Is^Sxmz%V$$1$A2BPH2Jggg#UW=`^+O)caP?Up};9Wdt)VGBstOV9WEL!mD;*3fTSUr2i2_(JHZ6+B-yx5pon4dT!X zijGpPp8N@;>#qoO{T0|D=z6!o=kSXb)b;or()IEy)LRnzMZy#_dLF+>Hjw-x)r%Rw zXaj!HeSu%J0liwPP7k8v<=?r5?Y{CJsp5#KRa5Q*f57Au65Eic+wcc(Sw8it!dicz zP?>hn`ZALEdlK_l>t9h8t`R@31?G2RwBRCf9*T5R~p-}t-v#dN0xuk znHqZtfA52ZDR3ryr|{8f*&pfh?Y???(xnmp-!PSf7Rs5V%i~S)LtL0)+|PdSW`-Ns z65!h8;Gww3USUHx<%#JbY_gBwW64%qm6OfM9&=50Cw>0DY|wmOa&}uQpO<}co$;}R zg)v&d$12j-Q&F4}-;)@kaN*yEkEP$29c%bB|K>$~tSt1AjS~7;^7VCQdVQ?X!qR-K zW8rOKhKj$(cn0lpU;gGXXWbecX?#MwC8o>J&{Mx9SwVN7_l&rC8^BynXmXonn z$L^59b5K9RGHN^%d^W-728aO;QtPQ4NrpI}@*~Tr`%LkkQys&HB*vE;@RciBhM%c? z$$iK^d^Ya&5PIrRdtfg)SpQHv?eKdmCWw)Zx0XGPe$9TUIRO68K-IxFi}|0VM%neY zF~4COeQMV=zloofQ9dWXqjlxIV6qmT?79CZJNI7$1MN}bmAXIOKcCh84|4w*-9Oh| z-G3o+|FtncgWn#@4f^RC&%?7U!-wzO|C8;({p5riPm&XQlKbcPp5p$wCzrklhuq6x z?hWYBWx@S}eHYxndNy?bCPxH~W!tQPkH1D-IO|cfos&NJ@bsgvLdHkxroN$CC9YYE1rbZH7oAN)E zpO~vB0Q>*q-duTDLvdM{GcDGpOuy$Z;M;Sr&;J7U0XaTn)0EgV;uq@q6i%Y{)6@>s zi6`)0*h{M#dBqS+{ebh<=3q%ZhiUATl)tY4zOCv6cn0N(6{pd@r}$3wk*3UdQYXN5 zJ(KDL!tYgXFLevC-1R$~sq%=QDiNb;q{-_MqlHeYnfQkIvM283aX*f8{Zw9i)c5%U zn+@Bo`}q{prZ&PnU#C}C-?y~q<9p5X5hI^_K7FTszJz(c&i5v;M;3d&MDTobdx%_) zBZpVL()MBIsgYD2L&m4h!ACZGvL_^$v3ro)s$-6osBwnp3-z7IpSz~h4ly_JC$)SV z8Y>Zexx-}d^Z zjjgLXhLER|CHB9_{x{hFnsV^)FFc_>oV2csKD-z9;bf3K>cf%z>Ga`%YvZX82V6{# znjC1vEQ^a(>#SaY#V|FVOn!exa~=-<;_DshxRXuG+X7m~aywedbDWmr0WHVh`g-R8 zd?btM??k#(1_7)mxZ>x3Y zhe!_f?5k`X*@9+Y*_U`Dum#zlW!Qq*C1Cm_S!ec@wc6L{x})u@WJ$QMk{@PYi(ntH zcge`U{tSDX3(jl05y-!;edXTuEXC-)M&)1kzDDI=XJ04SS9nePDmiENHI#qBzH&XM z-ng!PwS9;S@9PA7GO^@+{R8*=GuK~h_jNxuyw26SKXshp}6&?H$;z*xtgfUd;BE{tIpIXQj`1Ch2eS zuz0e-GwtD-)K{VFr&A_nPCzC_ZSYk+HANc&8~o|S_h&X2=ku=dQ47{btv1FD?}~3H zdVEyX3mUrznY8MaXO6BB-@5FlcsA5G;#={n`1Ync7_Yf;Q@bZ#j#aSHmr3u~T2{xG zTosR7Y?h3A!E4y*kD_<@tm^d!@Q>ts8NU%fNq%D*|4X)4w)zI_v}NdI>o+PtDZjCX zTyYxsjhr`^-!QyewrACGKLmaovg)>qsiPin#!QYd?m5_H)^A)2?;hsa&IjK8xA5+x zZ|UaUw;*?&YOPsA_R3CYW+T|B#5n83X^XX{&Xg#g9!d5-$+n(o1dP1xK(KBy(jiNZv~B{wO@l z`D`i z$EI_yA%30=Vj|%3dK1LQtj!ShnZ|nL?pp%6dwZODZCCf_UGb{nUF5HLSMoQMyOwXO z)3PZ-xjQDgi=7iUG7H&+Y)J-j!K2#v#%}7^_|bJovjq*`_SpF1TglzfzL)Hk+?C8t z!Lu>X%3SfW!5EXwW$)BK;P~{wv)0Jm8veaxE_;)d%q>#`!siCzv5aJ{_DnKYdnuXA zd)e9>4DV9fQS8QhZ;!!S8KE=3?)t{yEFO4m!+dswLqU2Yw;e z#azpy@ot6ZI-hv=J29|$*IC|OANVornzr9@AHFKNotAjm;42l7u|8N3K0Ltx;tRz{ zj82A!<)_|&JSbFmwD!UyzxV$dY-S@HLVIjfvJSpT@>v&tGP?Tfk_$mB1s*oBlmapj zez0-@o;GrU^T73mu_ z`MHt{jZiKqmLj=Op|`U#FP5^`>-G`%9kf2;IJDjWrbTFrOqio>u|I7^Bgqd#TlQjI zb==VQwE=BKd&ym$)5o}$@&ey2uh~ zcCc(>>ELT4XHEQ&<}>nr){7_jTY5OtkpC0tVRWw1!=*qEqeJ7BFean@w3v_yu18}s zQQtk5%NV(8^e{YNefK~Q^E)DE4DW?{xD%7HI8jCqOTXu=ez&<5#V$L(dsGkK z(xZpp9_ZoEI@GAY(ei}+_5<&{w|(HDd)v<<$23D*_M@pqEOOSIk4`7xlhAip50Hbu ze#AllA}iv^kI-Ki4t#nk{yOW7zs_3u>(O<`SrTo{u<6avR*nsGZu9AmFGz?SEkxfZk9YfXGU^Bvj2#8dg2^?Wk32|d)OQ2 zP>*03pBsf2w70R!$&b%1e&%g#&g7Q)?J&2j_}o&@yc;?5vH?HMv)D8Lkp<8EkF&o| zuL<^dx#p=|*HV5q;Y>dLHgcCSXyG(u(d{pYdedU>zQ_y{8@>^QMN6s|B-#^ZK?#+!mPKtZpZtgi*;d!~oG~ewy=-nEx zO>Vr>$&IU)PPy^y&Zbj(4eR75rRLppZ{Aq_FY2||Ino(&bCd1&gn4q#+*~dhyVF4* zn)#aCONc)m=8{$WFMqI;OYY>fGnJlPa>eF=EatRwrQ_|cTzP}%twwX@*!LxLII);C z?{($M$-kPsQr&*1;|!U-cAfEdoEk>u%H1maRI<7$liN*=4>6rWr6qe&^;5E`Wgloh zqMlLDCc8?{`7%5!zoi<7B;RTM7~(wqUW#W^->>k7(slM3|5$ws;!Vw3ke#TUe4Ludbc4S6 z@*w-1<$1BUgXdMBd~g4_YFW2lM(-Z7QN1Uo=1=m{sZFULihezRRZ*BxC@8c!* z(gT~2&uFgnT0W!xJbFBakVg=iS68CHmih5EKk5Gr1*Zm zD3s`z;NF!R5+4tgsAFtU-^V?l^7>VtqhI~%$*%7cO;ookTAa?>)l{L{w{}%$Ago>0 z%=kDMr8+N>+EsdvY~5j1j-n{;tZimL8Zj#d{3DsRu^$kw*&D zRG02~d5RvG8(Ftbc4Pz><6NxSHs_!LZO}d1_w%i0ThFiBR?G9qs(N=_s|%k+>sl|= zY$Ff7v#VxXd)$}5tLJ{rww_%z+x=wvg_`Z|euSvJmru2YUY*T9WotUhZ@ag>;lJTW zs1^`==XzqX>Z{F`*0z$~UDG$+G2W7`Fq$XVAs+)@QGGiZY`j&{D@AOZ5;gIa$@a4& zLCyvn$HBfy_%>(bQopk-tmS@cdOGG)Uv(s?<>s}iL}Vm_nK>vLcE#$;|^!(D!(ZIEQTJ4ZPDk5aqb7B{%$_QdpYhiK~Jz#W6wUeyBROB7khU%hcqjM zHNxXbm+9HTu2%i9FvN#>9?cLJ{)2jW6i?5V==a&kch<>m-Gp6xlkg_MQ&_*j_G~uj znXY4R7U=!iYjGCTn=1Q!n0v_9ph*QfewlgIyiQ!FK4Wm#uA|Smywe|~mq=I%29sfe zo-M8ob8qU6o}Ji0FLV;0f!?SR^t*iAU;YJW>UI2o$#2p_^ab@0rTtO<9>gwk3OkHX zn}B|b;fsFqb49;oK)-ZAKR2LXGN4~7Lcer`er`a&RD^!%9{Q;VKr~eDAf#a`prH#5 zbJ%mLnFwi_?n6uE_e}5Ai$u?UwDh2{p(Qj`FPdnYBB!jrV`j#;g<~OnkhfxUYPP{D z_Fa8+ncP-`Ex01Tr={MRVP~S1FL9kbDn070708r}-?O9T!AoZve~+CYe~&?%Q_0`q zehk*&@7kHo-ytneguhP~J$w0EbQDiZW{A%vH$+qMw_DrQ7LP~yTbMj+;qPZh@UQdC z3=Mii;*N9iEdEyPJ2rNI`M=K2Jo*M3$D0lMr=Gj%-uADMvy%>9RYX_RYE92Wjuyyo zp@XZ;PV;=LgTq{%Xg8sJT^So6S!49AgYKk8BDIuyS=LF{N=~JF)*Y=zVj21`td|Y* zb&nETR-7f8tGkZeU6`+X;E(3#>#n$Cvi0uI*xb163B`P+`zpwQ64&*&iS=`BMGYJz z6a>Y=$DSr&#hVdrAi(8rCAfDpYma%q3RGq8mj(4G<2b%>JOCr3~8wtUN0?`GnKx3 zvFO=LOVKfu2kKo9X_^wYEAqhWBM;R7J3)>%Di31FgI@{qv_JbVvonQDtSoR=S$ll; zx`-^m77t~C>ZN3lhjPH>Ovn}=<4hPiP(lu{N1+^0Ph)Z^a)5P44zN~oAiD0j|aa2`SO5%wFv#9@*t$&Jb7>w z`?p&j@cn)4-^^*Yf1~z6M;>(SgX570KmFY7%&J%S*alZbyB40%;|H^xZ)5|nQ;HU`7+^( z4U?@Kkrk2&p*(Pr0l&nxT%LSuj=EZ&-}SH$DuFCWp!*Bxk3`fLUPu-&x4X+W=#>SB z1KZ$m#1}r?rQ1xtaL$h-)_g3!Fwb%-d|}6#ZyR{nv%S7>Us(YCj4urRI==8ivcS@> zV;l6!0!zOXbJ07ppqqZ`r4tQ1zHr5l`ocyQfFEXUgQLiT7m1#|w2aDvCHV>te(;=a zKz~%Ek36&ue(HbE&W!wUk1Xi*6DrnEkbfXQA+!zV`3R+M86X|MBpJXuV;clAAiD0j zWB~Szd<320Q14&&!H!+)BjEnJ|QC*hBPsmz7LG>Au1**9S{RA&|;(mg99(v(76ts@IU`lVUZ&&`^D2!X~w{pwev@1hfq8f)|UPy|f&Kj`RHlWLgk6m}eI(K^Cm~=h>Oz zf72ri&J(-f{d@b{1+ToPBNOBsNT#gh+EVR;_|`CH(9cIW+>URR%m{tn3wD99(xP^O z=x1XF=;T0_y66eXQpp0*?}A-$j4{L|$b!rMX?7<2gFUj~9JdR8`{VuX0uR~H&n~!_ z>&IdjSXr>JU0`KFN3UJ53%czBD+?C33#=^Y(C>m>5XKKr%r1Dtv$HeK%d9N8kk3Co z`TQS8)-06IAD2DSlh6Mk*N!!xZ{^d%`Fty%F68qU%I918Wa-zjRct+k^7&Rib?A2? zpa0_K^G_##kCjfWUgc!vpBJiE=^LYaB(TLFv3~iP!rvh+`^D>*TCZ}l==oyh^WXBl z*_mgT9mO86oqPHGJ3rPxpZ_!e!P?}#`TU>Y`ds`!zj!|1$^*rm$*b4q=ku+;3w`qo z`FzzwMDzJp9$5PI%ja8t*P-8qe12$;PY|a&{(Syb|2R8SPFq=UKIQX2^at}}bpICl z&@Z3=<6J-1e11nB^o!NeufJ%lu2bI==AaTi^(p6iKEERm`o-!j{T7bZb?SRU`d!H9 zzi_eY{W>|kPQ72WzURtkW@k1ftUM47!wuB?y@gu)>mRwd?NVzWFVvdU&Ku11Z2rpD z$_DjKeD6w6^Zy>s*I5J?jiMgQ>IctV^>_Sc(Iz8)Tg@6^DA(3Fk|{ zH^67Z-y7ofAlENqU6wV=SgShw=zV5`br(g}E$8(zuIE^z-tZi+hlP~_cBAHs-bx)& zf_T4bf&SOeO)@h~wFLAl2KDx;v)}%S7iNZXSGID*Q}w>y`_eZiTk30k;@*x=u3V(B zy&u!HobW#Hd^+~PmX>;{)yHaksKJa`CT!!Nhnif!dRh%;YlXV^Ied@~R&y`5vHGBE zHTrdH!uC`jHJCBf!nx$MQv8m^2jMk&N#TPiC!XfLUVISQ(2npysv-W@fPWt~)^4SP z53(XpeQ{2;)Z4(>=YM*u-}vA*`jpA7E%r=2i^ZW;FLH=^VsUHw;We9Q3VOp&$}>6P zGYO-LXQE#`#48n6^GeRe0cvZr`8((G<*Kbcbg)xf`|IDOe&&Ts9pN@-IBOZsnQCfv z_H@>=^y?) zrhnxN#I9l5 z18W7Gv*=6$dYd^1+nGtQ9h|l&dN2l`XvaMG!4byb6YXw{!6(`YpEDnsNpS2KgHKRb zAdJB$z$D=N9exk2m|^Z|F^oaoe>juC)J|}Zs-2SD`V?|5iif(;OoDy?b9Uy)|FP#n zGw+03;KK8Hz9W-UKYMXXc^XpE&5EAK za|}aY;SbA}8ju`;=VV(g`b=jq&lsDEXR`d#v8iI%R3Xp&06eq*S<5qC(5v(X*-s7d z8VkZLo5V(=2eg5V<$d`quBYBq*;8BbSN2YWH3vQl@&r3e*mC!4-V=7qd1+tauL%1{ zvN?gi32m(}a$d}J(GFUszH<6~5cQ}YuMeVm!;-O*uiAT^lXsl~KFCp@X%QKl;dvy> z?q}{()CbXd`9dILuR1b2Q~91fFDoPGB|IxD(Z@O)!s66Cli2`wUS~#lobP^6XQtY9 zX3Tl8WR3igm^xah5(4V}NyotTR3JJ?o4= z!tV`4es74^rl+2D#vftr@}70ZA7R}^k#);?9rn~m{SnPEkgxw6oEM!DofU%(%^t{? zZ&MHCLPKNMuqVUx#4qaGR!^Sy^( zI8#JtME?3PXDIaH54<{viNS-R->zQRCHd{;ZofUcZc)FTby2@Px^7Xwopn*aJ-Y5_ ze!J$G^kPrk`or|i<-i#WVqNmxC1d2f%eH^W&3G5x~$EWnd zIAjtWIn9oe4=EXt;h8eXvy}z@cedbfZAGpH{6|d4VlM~tEF1WamC(nG~leTe*_&WhrYFZl#}2EQ7g9e!PG-hyU~ znt2O+uHU=`%@|Gbp5`ss88=pzxq&Q;&Rb9%(#SH-TDn2pBZxz~>ng-<#+kP;hAfjj z?95w;#_{AYnOJ0D0$Db3*2=Okp?4(DB+JO3v}4$5l4-vueZwA|Q}T>G>&UZ-b4Q-> zT#{$KK20dkUjE-_XKtSEW2a%8&B-w2n#oln8~fR5_&w*Hofh?H!gsY8hd}?|7rF=``KxV zhc9NQg}GI0gUW~A(o)QJMO`)N7bD=ZmB9aBHjGMZE3WreZarT>HD} z*_qo~3)pGMHsy+qomRB<8DUSgeTWR*gJDY|<1kt~r5uKM z=8eRfOzjlEW&F&3&&0DF%M3A_)90C(t8r4E$qAoH{-$P#b)HFQdL?_LSnR5vSnM4^ z%wi?HbL88nj(6_6dp_?x3qM79Cx`v+QLgL*n@T$kYwWWyR) z>f&OJhv&}=XPvRFSeNcu=Tc9)(7f;g)*0K1bwfStOpPnQHxT)~AzqsrSJs&tSD(CB z&pK1%%DRgp>z4DnUyZA5)Ud`?wXI1o?nrNU*SP*rAgd*( zWtT}-59?a)LXGR$UgP@3r^uTfvghsKYKs|p;QD*p$-@>uR(0j2!emP`YeEcn)v9Y= zO_(cN=P)aL`FLwhVY0oxXz|-;&tvTN-~FJ)ZWs1cc$Rd|R+lH+FWh0V+aJ7_d9Ibo z_Mc3=FjEN5T!`Pkw#wX`4_O_zmiKh-R->LMMOSOE$;Z}@AJ*vXY(pq7~Yxd0S4a_A1lRaB!E%%VAxWrU$_h)Yai~VDJ znjY7L<(kB&PTW+O8Ui~@_nfU#dju_nv8$MauwaFYoh*V^1ulG+_fn-H-z{YLd&AW1 z#B#9R2Yq3{YnF>Jtwyfd&TkF*%O3>eo!17->cPU4Q`_4f0Z>Eqwmn%AeTLJ+0PW~^gU_z zQuZ%(?`>gKrq=FmdeC3{Il$g|+)I{wNil0mpBHUJSMBEtKBxWEerONF{nL8wmG(|_ z(>@B@D%?lyVekHhd#8Qu-9PP}_Ha4-7w(-~-rF|&_a5!vCI0j8*}!+Y{#XIJ)ps^W zi##{6x<6tMUF{*c$JY_JTf=j$E_3cGyiZ@vTJAOD>};*${xZ2;tvvUf@pj`A-cDW8 zp4J%8AFCWRXVIR?&RNvi6dw#%pbKX(QN`!reA+Wvm|6+FW9-}9dE~pyzMcVRGS9sn z%bCnWr^U{skzE(gE8CQ62nk0&l=*fPR-8b)3b;8_@h3$ zH4l~px>x!1Rmi%#&mesK1LgVn_;0+Xr(XE@@8o(K z+djm{AM|QXVS&dgnj;9d9W_3QMMo3qrPIE96N{{Bc5GE{~$ZMYzyqH3bqAxDAu;1UWGWZwJn0$l-u~5XYbe+c211)mWfzsEJ*i{>KeJFIO%++DT>>-0To^rOM%F9o*6qYKy;GNE7Sa9dZ(Dr0V_P&r+al|0K22y_WWfUXBO}MyLwZgm$MVRrRi%57E!}b~h8+7< z-hzNXRkxWN{xUkYjvqDL#_H4lbReK2nc8wiG$`1ODvH4UhELVrwIE44cNO zV0U=k^9aU#Ym4c88(9YZM?-mrZE+^dBal3sv!9Sn>Zy&&vR~RUUzWXT1K0z|xX>PR zkz0~q&-2+{++oQ&V~ZWP3_E-rwir13b29939~pMIk1cjK%dqNvTWrxd54F75on5xr zNs(cP=WMa1$uRcG#CZ-cL53YB4>_^qIM3NB!>S!ytPt8_u0M(nkS#V=4B|XShS_@T zrP^Zc|28{w_g8ylSg$RH3{$-Ptg*$AyYd}nkEM|_l1GwX;jFbwx04%^{KLfP~qx1 z>>K6&#wyHh{({Z@t*K46pV^}x?OHR$dR8Cm6_YQ_Xm+!5h6W2Ik1fpit!^;unfLMz zdP{3OVg(mfTAJY;Bd)SKe^1+UCfj4YFCQj`kFS`WQ_%m4*=a^IzHilH7AI<4*Q}a? z#Vn51zZuM}>R=WpcrTo_;?%&Kz`oG@nGmy0b7!KnR>GK_oyVvd&g3;T(-M0qTM998 zWhDQUzZ0Wb~3};I}&7lhECrsNY{f3FPiH4n-mS9H) zG*s@;%y1^>7Sb|ZpHEBq$%@sv=v&2FPxVafUQFC@w(aQU%)_olF`ut#_M71>-WD&f zYUs>tF*BSs%UOAfM1H-Q<*XUb%Bg9NbF99nrChS|i!o?pd0hY7{8~4UbG?hlPwkv? z*)}IKr+lnNjJ5)9=qZ|09`1?aP#5Mn?_BcS_g)?s9apeVA+OsRSDiVH$2-UQ8{c6L z%YV9{lTA+na#z@n!k^PzxndZ)#-AP}L zu{*!nJ{NRyH;-HTb$FcE_g2}b3-P$6Un)YsbPxShe`f8@Z<3z}OQ<5d)6&o_V58z+ zs4gs|rR>&T8{X7{Ey3X=dDf_&ZSeot~Cm#rBk4O0-8Sm_2uLf z_5X$`)jVeL*PJT3tbO2eR%oao>_ev4ATQL&uB0?50W1bpEJPZ zUG>U)+c)s6`OCofDH4P9Yo;Gby-2F}5q>8%5A@*3hp07|d9`Mtz7ss!yQUTUH2HFR zmo_#g+ebdwol}nSEOyW7-C@ri?p?T-ruL*Fn(Z(&vv`i^D{=$<@f_JZYDM-ppi!{z zNoelELvBMjBkcVgMkPJVx-J^=Uf9>98i^32GAo>shWc0eeJ|^O(p%@dUZw2@I3pR4 zS_^zF_3UiqbyzDEqsHI{(U2O0ABES2bDZCIsS{#*>r7v;3x;$ALoLngl=lertejhTPCdYiD`csQ z{afV9Uh(C+S(J1BzGBRpy*T z@p#CqBTwez@$7`3Gw?I##M^>=6dn)xdg`5A54*1x;_=7^+}fPOBhsy~YB zoOt$}B=T|pQ+duwp6}&3g)!uCHiVm~b8@)noIDkrlV4$PtM^%*@U`B(WiQR%LL=>M zwZ5bES;?WEeN9F8m3@gfI{SJoSbSz*S*v}Gt~=VkN|uECs=j2iuSNCp%+=1AeZ7G_ z%?0N*-3ZQX*S>P^dKT=D&c1R#2Jc<+uX|rRJ-pF;9nMbpth``yRfR`bGNpIgi3y6nhaVH{t6A$s*@0cWyRn&Fly^HaDT>Fwst1dCLr@=BfOikwGoN?Gw<`-4 zZ$i1~5c_Z)n+T6`;B zj#aSFmPzk~co34S;&IgmBU8F&2yiC(+`!WxY6^$n@a~Zh8Qv8Zzxs5tRbh91sOdPC zchdpy)*9=v+u&W!o9jOo%n-0=RoGodR^28%2y_~F5Cc`tjOQE^?|z?WJ0E!W&L?JP zMn2xnyKh16I@MaUhU}G{4(4-9SRnB_b=k#QQ*u}GRv5REznWx5?@IoLa@X>0b=qJMLp#~{W0JerIdSBP;~|@nE#dr?quTh! zZtB?h(RD|&1r6W!*!bdG$zAPlD0^iuNakJw&&E6}bH&GV7(DFjVt9$_OE7qee6Ak` zkMOusyk{|ZBy&5wD|wp~?;>*z?>gjBeegcY0S3=TWUl765F^R5uY=BOh(m0LUxZ%) z?=rVVys#MW-p6yDPrUo%@b3PPSl(S9_%Z967T;wbzUm5iKs+pb7pH)X_326WZ7fB6 zA$%93lLJ5X2IN7Zx}&uh9{I%Y+PW~whR_~+vt%7Sm4x3_=W2BI*CiK%SPDFBVkw+k z;T&1H08eiMhnDveTwh2o*w_$qL9vuF=LSAf?%u>wD)L9bq2+gy8;PZGU41QzrF7)N zHBI5#ibuph=|(6Q6ibm@sI-Ur#8UQp-LaH?2W>3n@F8+}cP&C&WWpS6i~VUU8cBXA z25mChBPbBN~(CuhFQDE4DW?{xD%7PZq9e_U?eMcDgREf%Z~3J)x)>+=;5~q zdf0&{R#z=gDAso1o%gm6JaljSS>#x%bcZkdQNE7xwt?@K1d zksqPIp26M{UgS~nVOVGUb=JyXkFGl&e_gzgU?0T?QGb1%iBnIuuY?!U>}`yAn6a&V z?Jeh=xLC}Cw;lOA#KyXOb&I>cR9{^_y8QL~WH(}q$!^rFv}Dd=uc!F!w8QT`g|Ci( zo57EA@Sg^9Z@}LP?Z)}OdXoFg;Lj<3B3^xjXVD(V^Ba3h3*&Qdh8MKAr!qdb@R_$U zx)kv~6Q9$W=iZij=H1Admksz|c@}%-KeFJN-}BAcnRT~E_V*l@>5tuZ?#T44=?ht0 zroW8+y?Iw;f6wvr`%CQaxpIE*9zXi|{rF?EGrM-!{Z%ercG+0qUv5M;XOYd4)yBUp zVzc1u$lg&LI#%Lu{7cC}*Pm=FKfk^~4ZJWacwaI^c5SS7cIM-w`Ka|hHqXYu=D8aB z?H@n6^g9yt$e-;w_@&VA{~Vm1xn-NB-=hKliQgW0<-P3(;6GCfQYTLf-#KOY4troc zcex)2r~77d@nP=$e%T4cA5KUnt zBDweQJfs`JnK(^3S`%04%5xn!`6-*129M)~a>Kv!{}6o6E>R_R;ux*!kDjx3@m7 zGwLDZ9C|qN^gQ5C+nS>wmQxC1ImBV&6>!{4Ek)FCx3QP7mLi&S@2)wL-%cz?u`RLd0)YP7V!(i7TW(NVf$ymY1iEIQ&#^wVc^ldYQ@A$If=?DG@Y{LFxGo@i&- zukidWI_t2)ya(2VvmUh0E$ukwvupNQu~hC?d#c=^^w}#zyb|_0$@Q~#pE<8#&CIhs zx@`8K_1{1CjoF#;-?#hh2m5?Dum!ZolFQoTs4ZZ0e{eRmzv2Vg0@~xBW{<~tPx~Cp z-(>bW!QRBU7GvMe#Qpv>_iSvJ^I*SMvfs52*!?~nIoF5!oNLKWook)%IUA63ZR!yM z8!$ZE4}gntHk|EC&!fG*@9Ws9|K9GkV(nq==;7nsYn|^mvd?GR`Tjije7>CT5%#=s zo89w`!JZcbdH&1fV&e5$^UdHx7<OeZT%3 z-1h@L=j(mJ`TAc6W@j>+?Y=*w^TobPcggS2eru1nddL{gnD$(IpUvMj9rNC0&zrZ? z?me_rKZV)<%Od-q5B7i6wq|nmwq|zCHa^#AU&ri*SfkN?^#S%}_4IUt*Kw{JUyL<# z`_DSF|G`=}SeuNjP4ha%b=5O1bBc@Ze{u=?|7|{VuATdZ_W!-?fA+V6{b%2`-zT%* zwIOfR<-_+;S1KB-dA2zGD-DW`_bvfcdA(#70Ye%rS~QC9Y2VlBkzZ>sgy^&r83z%;!n0;DS8Hc z8T#4(_<6S4>qw~EB(~*Jk78$S+uBgoVcR+q{zlHFbNq(tu&GxXLgtws5cJ=% z)R8PyXYd|qU;Yg%6HXQF9|p%KmIEJ+Jql_6;RR?vaURirIkbQF-v#n`x$U)8&uYS% zeEMzltSYwSz<*9by|>u?kvf0zm;*mMRd~hp-cs8{O-gU?t#~i9|Mq6OdMS0$w`0Rm z(dbae#N0I1o{Im{4m?=n^*Fs^Wq4Y>sGIn#>XG5OG<_RRb_e`E%DP?6ST0E&TY=c; zL_5yB2=(479;W-uHdJXGT7n_=Q&zXb7>cU=H(Vw2-9Q2p%qnZgfH`#tq*gIU%d8a-h$iF!i z+b3-LE=*snZ-$t+tvw`8T_TQ8 z3@OcfUH!xCbC&%ctlRH&oFTKA#_uTZ zu6nQ-^N00}s-;w%R?p;?sfVRLN|^Hwdmt?HLGd2nnWzW7CGd>q(hR{f=H7Un=Dr4; zUuAEfJ6o@VL67H`IQ z#w5J2KJ0jLJ9L1z%i`@U&r5w}@VtMeJW^zjpAKd{J=JH{(-=A=ob@F9a?L@IU8uU5 zb?`!n`?kJFPPW9%n)7_t)0&*^F@CX4s&PNlXruOB|NOrIzC6`+?zF%<++Y! z*35*Dv&6NA1OMJ}F;=W^9Co=eHQ5$LthT((ub*E`qi!d$ka&t+Rx#U`tg zzdy#gY{EoaYzCC}BZ+-?tg}qy|<#FIID0!9WZS5|LMp7%)$>Rg8!MVom%`);Z%-Z4lXOckHyoo^iwaF z=qLX-)`fA)b?{T&g2f0<;?u;oyf|26AuUe?YwTpvvlnYjxSyJNX=n*eg#{{_rpUi& zUZq>;#?xEvfpJ^Mhib@H*a}`YpUGcsv2C3R>;%~k^v@Kx8*JNm-MXVS0xz9u{4IHR zBK$pCJGJ~B?#J1HZyVC`MELt;(X*GoMaK}|R(#%zZz~?}!i#L&(_RaIKg%4(q5R(I z5L=9Nz{RTn3g)=~&ov(v`oomOdgHI>kXQ(%X zP2Y=A`C{UtYYuYnxsu*kiVi+g@IFIYo`{S(7j^LI9X|`ME%^vxE*V_gaq=5A z{D2_0mL%5ru zKV7^M3|jgHii-b`^WgWA;N!Yg@*YL{E6Al}Ob&z@v;2l~Ji^fxcCK=G$)64#@4}YQV!6sO|7Kf zAW4m3ybdq;^h`k);l?fV_?vo8)f{Lxhw3|HMKDVm#P5GSs3*$72fSbKcC=KVVDf~} z+3`ega%y^3zEAW{Z{A8yjpwV8_o5Fa!DmG4M1}m9FiJiPZOhem93F5zcxqxtQ_mRE zQZyEQLz;`W`}o_bM6ihAFZsQxit?0TDf4^6h!Nij4=K%iVayrGI_DdKsgOMC% z5}!{Pz9DVnp6h?ogSG))%%h@hj(CN0Px}T>STWswO`DXD1ADjl2s6sxV$bEtr2hlI z7WACvwzn?Oe_{GR^YH9Ukp{1VTSk9$3f-{`k z+8(0*HhP9Pn_ANDGyIOAp7b5?kaN}f!$Y6G*9fUHTcg4 zJTKk*D10C4US=DbdbFDZ-7CJA?tMT!eG+xAY{0NbccNZnPU^Lo)1O|bKl|Chf&Sz(^KIa}dTijkmY_euEUxi8Mt{l%j_S{j4Q%@O z`{>X9XYiT@Y~XFkqHRWhX0U;U_w_&@8~D+{2EL;~kMJ8UFNg=8g9o(t&%zht1M!C0 z@1lBgG#?OLw+KHt*k-2RDddMzw=EW(d$4HVH|t!l)8DUk$HNcegAZVb8C#0I&w*3D zPZ%(s<%MBz8n5S?>MCPpdi#wnrT-VQrEFh*A_vxDL;g_Ima6vHQcLxRWJ?7Y00q9k zB0K^4L%p_C2U9?^bY)BR=Y?*6sAEf6j7Qm0OW}nqyr6!9O$FOeki!#*K(%IlXSo*7vzbZ>$8wNxfMQ<&dL0=)j2Bz zK9Ot*Wl1P6mcl0?k1U5r&Q!V5PyhTb_ba(_fnOHqm#ME0zZ)uP3VGj$`b{W}$-*w)^OqZ}nFAer+#i~mk4>>EpPjc7jU-sbroG0y5 z(z$E;2xma&N3vL$3tK(%hYo%Z^wmBd681t7>;?Ro5PKmB_Cjag)*{#otaBawAJz(c zLF*Lz4c8tE_QJ1l&ZBnPTQ^L$UK{X>&a=*S@0tEr-tRio4fuugJ{Kb(e!j3@cn-zb z8~3yi5o6Ex1; z)sMnA&;8l#%*MRsn{Z~tksz)po>A-o8DeHeD2F8+t14%(Gh@om>d_fhyzwbd{B`o; zOG}Cy5R+PHR*&NQ@>9ZD0TuMkKfDV&j%$iJ+W0}Bd*w^cunbwS!%gMRVk2gMr4(iRhA311q?(c;soHz90 ziIR~E7U!qVvpURf@;Y-w6vubrw*+(ZR6in~&}@-8z9@9_g}YR|N!CTs*I8G;1|eB)ZP!eTxOvS(k1+Ob+m2 z`f&m|!E4RLnwtTNd`sl4T^sU)>H#G0QhTD^ zJ&z7tRi8Q0x-i_QQAYqjx&ne7$g zt(qC2^ieK*dJA|9%xGi==wPkFdDo1X&OEvSYH&1^of9A+RGbgk$pXXJ3bUbn}hwNGbuWD{+HqTsI?4B?_7S0a644(h?>nzV7 z4tW0C@Ox-aiT@X?d(jzKbtcumz~?UeFCLc3bkU7YJOc%-^Z+*jAn*%J*}Cc@Onz~>-di7{5tWvY8S=p zy)#2K$1YW}XFHr3n!33{4J9>h&KSHN&J0~TuRp`HowvMBJV14J;`LsgAM*Nd|LN?E zdx_&?dXN~6IbDcxUdCeMC52E}}Bje$VIC~k&_%t#; zHHZ1Ph>T~Qk?{c^MAscn#`m4`ynu{fSGTOC~Q9Qx@Pd1d82$*@?HF{ zSy;({*IjshPQF({`JVC970$$_9nJeRH;P&>&5e@1I5#(n?~BfjN(FPHGR%$2RKmGY zngP~5<5}leHENRU@}DK+SHbU@ysd2~{{nJewduy5f#+v$ zJh%A$HqP&P&F}DO96M$qet-T?W@mD*wESMdhgUrD15Ino?8o0%4ZDL}7cQ~%VQtR}_QTZn1TyJNuB)>(J;-tF5n)jc zIn3se{GnEMG5Hg%X;*GE&Ky)z6U*x`2EUKjQQLC=LF;4xA^WlV6^rZ#@*Es7vmcV_ zUHhTEVn5c^$NTO_GT0B`_QUDdXMitJMV8fqJ_9~8-@pBE z+fl6x-+gQ~%BryvmLdAR(7(^%c=y9`T)*Z}pX{IyI1f&s4{}S`kDp{eKD*NH$1}@2 z7;i3ot{8^ux_>jo+AB~uBifc^7h@muJhG1y4g9$x_HmWxGW|duti4V@(4E#_p&un( z9mOWl{78CS8tCr&o$VU2Az`R>^#d`#L-8J`w8hX)aUR*zs^@n3txSdAqbDee>8GBT zUQ9m|ds0tE&=2G|$$(y4+RF8)AIQ*+=gaVWnS7;{$!(vH&$q$v&&?d*b!xpzle~xP-o^e$ScHISerUDgo}v2m0Wij3Dnqytk2t zFgE7no{SYH+rm9rRl0zCvMLAPz`qOOo~)@&wx8Sd!pvCRV!f^5oLa26t6N|B2AC)f z;w|sCeb=jbPx4FHCs%MySSW>p@ZR>c-o3oi61JQ$Bx2Z!o-+yl+pZRMk8Sy@i3|8A z;BF84vlAPp2C7N?harEV-qfY^UdJxrpUk6YZ*Qvl*u7GJ{1f4P_2Qq1uh+o8!jT+y zwzO6kI6FCTP&gYe&ret!6mPtB@mKd43>5WQDt_wK&paLyDPefLoEPD3Js?)8H zPbZIuI^=kH{AB5mg?M}^`uI%Y@sO4$!s924p1nMNs`T;q{&;rg?w447d^o^E|MpSv z&~N(Sc&i^KdK!Ol6@J-zY}Yl|iKFH792XtEEZ?=)PhMS_Y`<`?VtbSA2fv`%ZSbhfSu4_!X8FhH;1ntTUgqRSUv>nXRrrzK4ESmgo^dbYYa z-m>)21-xa^!1a^V`wrH2_#=g*<1K5x!|~uPXW`Yw@Rqe7szW#<@s@jW&`ZRk%ACCl zvH$#z)>?RNSn~*YhD>f(OE{+)Z#OvTw;O-{T%Ap@s(x&<306U;3mE9&gRVchvk5L> zpuceOQZdl~q)zS2V0Z3kn4G9`oGTog`Z_L2|!YLCbn()wsQx@WLMKRHGMdU{>CR&Ky#qYZ% z?x9FNs6amGSTND5)pjo~n(C7?rPmQN-VG*N3QRO=P6AA{2bCk@{+&i`YK3H4PO}~8 zJtVwO5p(4Y|d^ePG2YztiCJb=@=gc<7N8&?CY1A!s7~ zpnR;uJ!-a8rfg>-4c14A<1urJSYWKYvz6gH-8$HDwX1y5De1heIaq$3?-msA+uhv9 zb*Bc#naMeFFE#RI+@mm?UG6Cb%``)3keNm4DzCwebA??8mRbzVxDY?i5Sj~ptYgpTZFl$p~9P6!r5O9KfHjAJ!eN(Cfg&|TRYm+KVmn_j(-0ySsPmR^B~_N z8(OyYZ*pDwTAx+StKea$d}U8-Z5}(C^DTS2TYppUbA@pB$(euBVeX&)FH8;dyNPYi zl=xkBUz(AY*jAWY37^O6^kPx_A1@wkuc!y}Y3|lYi$jEv%qX2%?7wI zTc|J<`brn<>VD@EJIS2O$9m4?(tX_vcJgMOc?0f!oj<6#}sG-fFn^kuhFVvb> z(>t-^RreB~LYCzxTPruNpin)#f^l zPqatC1{nKAba@V0&UdJ(YdaJ4ax6h#=(aw^LkUInbvjc&(gdX&g7Ns)=Xa2 zH#_L|Ocl)M%8q6%H{jog&Fxku+AecaACuk4v+H?Ox1aI0wchyP7W(e^*Qm4>eI}m8 z&Kag(+sqlZ&lJ`+_I)PD&Urm4&*X&9k#p>Yxu{Rm;|?zU*(oxxz0K|ENwiR;)Gu@rUU-gD1pC@!WQUKV$4cc*fRe zQ@{NvyyQ=|zxdtBmg*=E{wgyZa`XVgTW;=h{5*Ua?#n5_U;jUQ?;a;dRpdQ>e zq)9r-AVVBUB}51sq$5$YZj=TBB1UPFfDt1$2_i^V$2G3_$V$&OlQ0t|7cf9V8e~^= z^V4y~)kkq{5>S>WYJeyhS+}Y?#e|IehRUX*xhmDzT1d>a-RN4?GgWr(I5gD%&mkNw zI5&)Up1*5*aLv!de0af;;ODErkKm~pcxiXh<*271SW@kTmSSIU@({qz+E@av zi$*DrU>7v#@;CIAT;ychmQpVGWkOwR|JLE5^WRP`8P5ujlnYVCrKp|(pM*;nZ99QW zk^D;-m%yWzB0S~{`H4nrHw%~6K#!}q^vl0GG_>$nAui3X;L@yeNR$5_J}&&Z`<%W~ zl_n>E713bDPKyRBR$X~A$`=>?UA3z(_!#k=ox(BTM>XY6p4e83R%^=TYHAM_sU=v+ z6HgKcWAkVp0nduW!R!v>V50nvxZoM>RCiGI2kXbQvw1YMi`TTP=XV|L8fe!@y9Dhf zjA^Ibn#HthsA)HW-;G>9iFQfaO!R&nOscetRcak-tTtwcwkOrJoy2b&vjgrZPDgn5 z{_{dSv$(^$iT+Fg#}cm)KBPPm$uijQ9a=0D!(Z=GsavZ@SCII&5|!28Y&(f#hW=}@Wwp`-i(JcPmp_Xg6~xL&JpnE zPwqN_KQCpO?RfB~?B(TQyS^BDcv zfJ2h|W9}IJd4RYi;AcdC-df>H`HHTIK4SG}^j)hzXV9lAI&VZe(zTuVFwix*Ue$MH zFNw)kqVut^l_-ZyIdTSDNxT(ZGmBo8sp!wVN9UYK*NQL22E%pfGt!@>yXq_`)kINF zr`4bF?bR1v>(#e*VS{P(?rnVse$HNGz|aPBME!YtMStd9R)6MQzcnZ3B0WCLpB$Z2 zz0P;RuXw~c8RlgEi{@mibCL~)IbnmT&gppd=YM*D+Q9om7+P47`7>kmXUYBTz<}fy z!H#t4Bz5IfQ%<^b#O?B=S6dyrT37DPHF|U!+mwe+Ol`P2>cUN2(BYeOF<7!+dUP>3 z9X)!qoH-X=cT(^2O zZASEH+F3oiGS+0J?MXFlC-HkC*X18dnrx^?|L=+(?X3sb3gw9g9og#(rre1heVS^r zw3Vop98_&m(w}9Qs@kMJ!E=%Wg!|1ebD2iAS~P;TpCr+h3g5`>&n;EbLp?vb7}AtFESB&u9%T~sp+D6F4bBt z4O=;T(5uvQY3lWxsl8FH*VRD1u7-Yc>|NFCdZ(v)F5*+N?W$f^LNP7G5MI0;pJwLi zG2?%Fbo_;6;@n>qrU#O11(NpcE1U_+%ec~mZtVsuT#yb6Y zihhev2X*vUZ+PE+#?P2ym3lOd)T3!ERO``%HJCL1YP~TVC&L<7?dn_KKRjghG4RCN zZD$^?FMq9~FJJKm&fxrch#v{?BLTmWo?P`ACEZPf!WY%55UwcJNO&N8xo%Q7wdeXm zoKPGFaAxbU0Bg#lIxd``T^;SJI8obfT%4d?El$+78y6>NSBn$1?T&>LvJw0iPJB?Z zTo~J8_W(W<;zXCliIta8--~l5_nWaT*WZLq zn)6W`%pCBd7gXTW#KyD22f-_1}VJ*Ho z-d%5~`zO3$O!dc!7jbA+tOhTBLTvx>;Kgl!310jx#Ea^A9+JJ@2`(h@p~{A&+KWvt z_EuyB*^*RyPWD8}u=1y>HmCe#(c;EI!HDchlJi^eohGRRDEoryWF)P8@$&YaO1=5296h{m`Zu}#Cz;lryWkJj>DGs=5S)prv^w=?)|k`><#zpd}4 zmiLZnXL&E};x+B+`E7kSwY+ysJIi}%*HF`L0>7>Ark3|s+KH!D>rGq!OWTub+D_tk z)pt|%k;<0&{z)O<70q?CZML@X-M4ejf#@k~Bf2kJ^pwACN5>&Hx|Z+eB&R@&v*Npo zi>{4FA(oNr#}`Y$TIUpxg8X6>kD~bV+IW;Fp#Q`?a<6Jzv30H#OCVoVO*~4(ZSd|J z6OW>KXs)sciLPEsJj(2JH6G>V8A~8skxxbOD67WEq}wVqb>Mz~NDoH*g{Jlx;ufIlbvoiAP7sg=i$=I=ZO+}TAfHw3f)DVFtw(F+FWCjVv4xG=Lw27o8~folkm~uJ$FvL5uGR)p z+iqMN2<>WZAhqqrwSmyC)&^4B?pQXEBiRK%Hl0`s^xRrIheeA8&^FOkE@JRLiYwc?`hDNrKOb50QYLr4J zf1mb{7jrIw>>*V<=dtFYJ^C8*K!ovI`vdSiWl>1aWQ%ZGI!ZQ{djR`*2ADn?|ICby z!^P*83;l?-vU6=M*TZAED>18?+BjVNh}fy>u07n3I4V2iM?6LxZoJ}0l*}ytDY#Qj zP38F{OdGxr=>rw`!-i(<)47U$x`;lIui7JklhxSaxThMUwQ;y(&py!kFD6B^qqxU`IRwY03Z-S2~z{qmh5uE?f4`5xk&fLE(q zW+Xf7yoMT^ZULKX<-7*@45B<6<+(;|mt)Uskk6owdt=XQh+zvo{Je(Hrfbh@00(Pr zy0J@S)9oBNuOYPQ;wz}wbgRCCL=pRorDeU)vfh_1E&CdLNAygzOmp#DB?aicLw`dA>YtH=zv5Jg{pjKBZ|uG8=nWeEHgLYIE*F zS#1-xmc@Q8UHjB_Y&XTD$Z62F5jiaz`rYL}mYgO!cip5e8|!6hS?+K-tv04){Jf3B z<+R#%YQEg2x*!0w#m>lhcgpLWVPJ* zvRZhy7P1=89Z6O@{`&029(J|;* ziaFYNyTZ$uo-voh=^1Kd^?xKr z^A!~PEZ?8a*?O7BJ`1O-xx@3u_%Uv)*eo90M%?o^et)nNIRfllF$Q*0$RCsMLFUL; z=nnMyw_?npNjApZ+Nefj%&WGXBgUBjH^j|XVMlgK)g~WzPR!+{8aIDDu=84AC-wCZ zcI5wBjvwsZu%)tXxZHxEJB9+&ULI zi`?_wG3g8y*~$RFgLMeCN1loptZ!cC6|d-e_Gd4 zCu%&rRQ=83ql%~BO?`)2Ta5D3_wE_ZOMmCqLqj|MI>fgV@${oH&d1VWj^sBxRy_UE zg(u?ab*Ax4A)fx7(7WS_8*aP%(9k7c8J{1eEB@tV`r?o$fpQU5eK7BmB1Z ztW)TA)PuLckK*v7uoen@Wj}F#9{gdX7E0ypcG}g!BXqWJ{g`%^AJHye)2^Q1I=j7r zc8#>NXSk1PXZaEB8fw~2;J4*Rw6pw(wmMU#cAS?Whd#9Y(dbu~l(@S$;4yvDS%_GZh2M%&qXT(q-1h;}yjaZEdFZ?-&W zw4JTTMZ1&4gIshX+FBk|Gfpe3Sspan?pWt~eSA82k{XS1l3pWTQ`Lu_KVLkC|6i{7 z&T`|#IOYE@&$K_HeKw473hlE;j&VAceO7U_32e@z3=W7gSJO5-}V+ z6E7CX&m%`bwFMp^SFLr!m~)vojMR-+J^8=D22`ytAImg&_gkA#TcDgi)v2?!2s8Ab zS4<`TLf)sE3OZ|8F=+MNtHvMMT7=ZdR4s+t*s5eP;q9PKW@G*g@6(v*%>X$JW9%)wR^xsGhR?ZK`$Yv|{_xI;8Zibs(OJxf-Kbs5aJNFY6H2+Klpy z7TU?*CC9-s^_|mo8sQ+IxO{d zUbxn$HXh5)TeUTdXOJ7LI-g1M8Z*=wR4zq(P(7boHe;9hD>ruUm|9Z*_78owmel$! z)W!UZkcOtAk?BWAW2vgNR5ok*>f9pV#V{ww*5*rx^i{q(OE;lIk<2LFl>e)G&fvIo zlXi8qtJ2NdcH`1b+BMRyN;hlUjY~IaXXz$wMK^2P{Z4cfJhZg3Vj~j0RP4FpLbqll zgDa=4t2Ft`z#nVoa+uEZ6IlBby6#MjKC+uja_& zr-yFFDt@i8IkJ{+f@epHr%I3`o5)vlWL01Fa6i51zI=3vOnd3#uYi|!9xp$-`Spr! zrMv*eHfwLBGp!SE1GYojN$e5VlU)CUrJt;Yc)w_9NIz9mgIE*b@0ChFMLVUFIn*?L z1RJpn%qvb(9q3=Bg>$IFY#ENA+DI#BgvrESch3BWKe6Dmkg>{rmDUs zx+?j-DuZ5f-tdt4n&KUVx8mQ2%WgGwIN;ld#|VUR_O&rjFFr=#cb7q{@eZ1gWYCfL zt$Zc6Gcyi7B~H!Oig$oljKn*%R^zwoy*lb~s1`>(_&XZE z6~;T%-%L#UQQ{ryiQlSkt;TOr^QjWQm8isTef^xU#=7=Pv76cx$zE@U@9F#y+59Af zq|%kxls^y|RBO?~{9V>UaT3V^$)NDhlxXP7M;4b1Ze>vBGFBFk0|PsXmwL&}8Pw>I zJRb83hI5KcTQH$U7N5l$g!J?9c>byk`j59`-?}@bp}+5X{`22HJS6=<4C;s_)gSNZQF;ETPkwPP*ozEja*3c?fB`4Nnf69Qkdb$+sAbEdk` zVZu89wK-EqKmP)q8=c463kRAzr8jsp6UNDv|2o9On?v zUdnpHi&}@H=m-`!Dtba~Es&$(WqBhpw0$97c7k`E#6OPIaU2NqNvsTr|4+DD_34E& zUsoxX#TQtt$a%nb#H;YF;wuvmrGr)RP-lWzzJ;w?cv!_h)y#R<0(e#$*#X*E_cqRS z;=ZZy`Ii$6R&`aA1;?nx-IzZUKN08u;y1Fo>JfZL!o{ktD&K}|o>ne&$r+{}>FXYT#y^vqpaP z%P`N&LFSa*GXi`nC&JdPMwU`OgwBrr>IadnJZi2|A6{q8{ts$5)YgTU{mh;PHP9FA zY!B^$Rh?e@=OmF)=>Mg>S7UviRoG4Zj<9QE9MaNj@-{w9e8isZjl6cj2eCV`j<2Zo zI0o!iZ3y96Zlg8?#roEs=k^}pcYb#WzdI`M`@k{a*V0blOYmBSU%|9sS8yx%t-|jA zqAtwQV0Y>X*tLF^6R>-@&GdL-cYFV#p_@7?@=yhK^A*@t4PWJ>asFvZv{yR4;8pcC zZ5|r%8$ov!EQ`h}?ngCyrvtB&M>Pfq8;Pw61Wn?+`jX+f5&xg5#!nC{0_>Zj?1+jZ z3D4dL<4CaO6cs-~edhn`I1=82Z8nB|Nj{Fz_zAsNaU`6(OB88e^+@x zyhQdQYg6U7XsYP5a_&V_UvcYk44NvrQMek`e;uW%(w(cdg8%b2&gRXBFqyBwHa_>!SxvgLhsIyAF#-i(z~-A+$u&8YT{WMJ|6CY?8vgVsTJOqv)S5BoId zxWtd=ycycniH^}u=gri%8~3~!+BMQHK|7r{Q`>Ib^JZw5q|HRy>fBbf6RoU{^|;TQ z`C;X}nPRWCeI{8CosIBkw{YGJXVJtsho)B6v2r~&QJu|c2Ks`hdCulBgTLZ2f3UK8 zG4$DK4HD>?R!&FHyZ}8@c8iy~p82A6mt*i1#VwAWb2F-EN>;BuFLvenLqnTC6XNnf z1($b>!DZpF@K-o3+--LkqWfTx%ziO+-HT6Zjj(TOTj}exi>$XP*l3 zcWVWIw}8L0;o9?S!P&d95lLT>UQ*RrWWN+#(T*w zs9Z?tW0H-VQ+>fK>@NR!F0qpE3L7thEl@O6x{7Rpp+Di}XM6cw{VO)clKIOPsC7EB zf8`al9>?GzRU7qqF`ECj?$FSKt3uf9se#R^jrzsHrr=WWDcHOi*c3e4d>v#P!RV+i z@(S9AW6;bhT#oPedj+k>e*s)x4qP^WB!tV&z@_MAe@z{~iRd3ktKTR2MzplHj-Tud zR?dblsE*(EHv*gTtMFg>5W5f%Mdan$SkjujT;Ztr ziPoVS>vSVKTD=`8Vg5oi8>bZpsl#BZv)^t4Z(uJ54h{8O z9pb8Vl)dm+)&1R5t@}Gr@YBS)%deSCUv!K*i(TYzVfU%l{moTswV1HZVjcd(*zwd^ zq@AtRLOa!2tZg@LokiN&S}nAjFs9wObrxx7>nvs}wOVS%d8|5%HvZj&b$>_dEMC@E zil(qvV}CtboyBv`QJuw$4zIKLLFy7f=kn=LZkApbqaW#bpW)i5UWbjWh>dKw>fyh_ zVr~m3{Gx~D6C6d3uEx(xJ{heye0W?#ZN1^MyAKV0^Qt4@IkL2^?+u;{$8CLYU@(~- zzrJ_87SF*Oo9ALG`DWnHan<*xoy|9+U44=Kn3{GL&mSQ_v$%7lPIo=OZ9P@m*?cqF zO&HT|-1^?Mvv}@>`OLNNJ63(~T09@A?+u=-c8G9XxUL%C(m87DslMqA!$W#T_T1{d zuT}888ycW%wRqmfwG((gJncmM!{KuG@#6WpU5AEtUm46muo=3dio zB$sqdyK!@`X*ZHfT4^VoReZyXI_EvhIq%?e)pzQqx~%MTBhl z*{!PiKS%ZHAA|SS>cYy|mVZk5YdRzTJtMK|FCRPJG1uc5yw}!5U>#Q39Ph(p)wlga zpRIj(S?8gl#F7vnl}{=eJAVQnIhTzZ%SWq+K)g|sTvFMl1Yd{YVBi%zL#q0lyvOE`Kqn8& zAJKc2Kk@`QFm0vd&mXzmKT<8ySfSnKp^VjeYjJWmIC<#_oE)spC#~Y-M>@!9x-7)W zIhC5uv#;15s1~Vs9c{ z9=Rr|{BKV}f8y?ZJ~3rStqIslJg3eL%vI{>@vP1btgWN> zTj!wG*3qk;g9NJB!OY$ZsrvaRS-zy|1{}(2m{d^+R zA2f5GnJM-M$pJp#^8GV>!_*XsUy2G=yNKDU6b5U>R_f?!}-K= zcLWjWkSTnQbCS`Omd){ompxiu^+>^g?IX|>_i6G93w|B*{_Dw4`)+P!DVAC3nJjgi zv)>OUzpCIb*wyBz+qMTy1H^XZsU4^9Y{5U>n1ita)rjcu>Qh}_eJ)xOJ^Duf?S3@% zL~xEV>r_8B%37bt96#Ov-RI^T^LS+PU4seQX>J=D8oWsB&jyqH|NP`$Z%u2#kKDDk zbk^qz^m8lz_9ueRZ(y#>Pkq*}Uh7A1TH`yr*Z8aEGne_h>|9P~E-l|H_&YvR@asR$ zC*9*cnSRRd@sEdxzw~dZEq?E6>d)rT1$ft6{;bVwNHbTBo#!>~>Kv-$|IzU9UE1Rb znQOh(nO{Da%Ipf<%(bNjtleKfyvvvFultE&p1tLqjXlWHlfHA{wBd7n)zkYw!@~z3 zyZda@lj;vrz+l1!_E-nts4;3P0aoR6zRbIz?%e(mPq_MH_%q974 z_Wsw>TkN_Xbj-9p^mQ|z*z2*+{qgo-PXSu(-sVX@8KCb)+-qdKzj*8RU=iyz;8FL8 zdtqJ1-qK^_$>j@u!8duXlkXjTX7Slt>yC+)G#00|&B{vmbG;7!e{&u^=-~EXlZkq{B06CfSSE+B z(ApQQ&QoWDclYw_**sh1_a-OmE$12P1eP`z={waIZ1Kn^;F$)VQ9t*aZNdHE{)473 z$Z~x-|3CcZy0XS~-J35iKa!=E3^kFQ%<7WK6wWP9FZd5+$U)bhWuPyaSY(sg<(VAs zWZiG#-mdgDUNqaqI{{cF4qU^r^7^ue`A zlewy#cKd?2IqV_hXyzUD&?=L@J6P_r9_b~jyFRr6ICRn-PiZYb20YGZjL%0J%bl$6 ztrIUOuVx${KBKN2&vba#opEuwjvS0S#&WZ_E%>*MPWh1^75sg7FD&EqsGw-x+5qmOz!-Rr$aep&F< z?#}kV^B(s<>OJb@yg&M3qP*T)@0B0Bu$+fR?)+fEU+=H?V%|r+zuWL3?{gPF?&Y1l zxAn7+GT)r{!^;Z(e8#yozuPO)w_E579tBrtu{LY_*Lw3<$9#t08`gU3((Al=T(8e| zdY8~9I=A5OE?(~~U|qGwTe!CF{B>SD+wJw<+v{D+nosnu^|D#ov{KW|e8kJN_66N} za4aKRXh&&Q;qD;Pe}fli%;Ev6k$t^KO{M%LrHsd(L(7u=z)qID|9KZQrytk(M zf~5vp%(IhDx~kmD`oA5zc=p7r%6ITPf*j{$yGo7V=&M`Tl-`{0Dg6sFUYfCJ>T<5AbSU8#9QdjA`X-bAm>+X?<$X09%0CST+A(9W6M z=C!3R;M3+gZm-ww=JDg3eL4EedhaRyF?a%fehOZ_t3B1>iO)_(r#a2*VAsi&Mi+R{ zTkCIN99x;U-aUu5djDU&uCW|X{e19Cue+e^&~_2mw|X6={<%fQ_4C1p&jV&zi(alz zq`zgXg-aiLF5`UEGr)S@obPc~cnSH!OLD#6>!Qa#fKeay#LE3?+Wo-tRk7f(GoIFaY#?o)%;Yo315dl(v__s!#f(XbwV-doT7 z3bb>;f6)lTy0&SaP1spd!_VDB|Dtsd@O}r{1`JL$W_kI0zX{=f0(-xU-*4o(Z_@WF+==g^t)@`B>s z$Q6@Iho;w;9k(z!Lj7OCz(V+h3w($tIL{ZRP8cdg&z`urJkjg*9s*7ltlS>dh zx0l4v=H#JcS@r<>A|7X23+4J8vYYwoU>*GaWbm*)^GtX~FTA$y@^zjAO^T*&AB5NO z{>A=e_C1>F1%04*I)fjZ84BXGo zAj3jqV`iEE_xyJTZY`w?th;%C8QF2#W3B8>`g3+&>hlFBk?D!VS&zqfX1C#9W*v3p z3Vv0dd#niTWDDip9yAP|Zqi!=7hIa3?InMtqqHp78!X^=rnm_iZNq_i#r1r*A5dQB ztkfo+-4t}bH#VfctNj|}M6JmZW4`qm*I(@w${N@1Jnu;L2RpL)U?7)APuRfTZUDzO z1kbXzlINO$!Ts4a!Sy@01oOFn57&hEk`3O%ck5(oLermNPYmnqq>%B!f4zSJvh4oC zw%{4JQ1(X5YI#Xvi1Jf`bpT_Y*VlK;~ul z*4>Alt5BXYTYGi;;D(6fMN|2~XzGs2?@qgaPI5_^J)EXJQvI?N`{XR@Ed6g?W1pPI zdrK#oWo75!`qFb;y8|40&?Vm|#hNol$)A5r&Ym$|`5DoJ)COq5<>giB3nSQSNB&>V z|L^ku<}q#ORNDR>_pZ%_Fn=B}f6hm{OXsUS^0a7z`g_Z-NB^t8bNT;^^)2QApWS>` z^I6WPrMJb*S=(Y#Yg)_;-Q4GM6H3>C&K9$GQ;TuWdW~t}w{(DwfB){%JoJEK)Apb^ zZ+j5=2>HD1$^4Y~FETXOdl*ABy?IdA7a08E;MYxOPi8+h0jG=0JLYvmGtIP~)wE9| zXMNQ`$G|USnVU{>g17XoDSh&uHKm z7nfE&w-7w)Du2rR<#Pks@A>n~i-G||zh$mVuAoopZBGFMPrawF)b%!U_8H53?%hak ze+;;504AgxIKX$ZxTqw!RxC=S$aQ`zjzx7ll6;!^t(+Q{&$l=IW+;~14BspGmz1{$ ziPp{1AN+~lZ65PE_)q33$=juWE#5)CX9u(>Ti)2$cOSCh*V6f(`+8G7g=Dd(u;Df5 z-^YCJTXpgBzj&ee#JzEN6*TO=hpncKI!_b=d`p*v!KmHVT2c9KgZMMmj z;@R80?{56f&>r$JcH%R5%e%WupZsW-;?R+mu=_v@HJ&8&?Tc3{rfJWh^z4b~-O<$E z!S-2gUi*yoUh5C0u*S>F$TicnuhG^Y51Q2Fz*J%CLyR9h^IHEr60}S%_^V$Nv1@zX zq$TBptm`t~Z3>0*QgTBY`@{K5&wBcA-&1<}?H86}1MfnIzOXcJAk%XxRjzA*`rRfN6b<+ivL!I<)L*4{G|mAg8{T}YH!rm<7(QoGxv{m^TZ@kF ztb0f4XW;8oSND|`aIZOYQHedWaKRpx-n@8tXh9m92Aq6yI_GxH*c9A<_3+U3^Cy;v z&%3NVA6k;8UCgf8mO=P_IXjp2Sg|>{{^M;yG}}L@-1`0rn}eq4Px{+pYiu!umyY;A6{BcXSM~c zPG@k_+)ng#)3_h{q&<%mw+<$e3#xc297tp%;9sOvZz81({5U>ijd%6g7nGV=&->kW zPv@WA|N19`*)tvv9M)4bG|nFNr^EM3Pl%?r4qiH`rxe^wJS^{yytS`1KZjf~3;x7= zJJ0RJcglHat*nQU{(i@xYJqy0HGwgOa{uH`OLr7+Vi@m&KPT4>e$eoO5O|LSb>5T9i!RtW{*K!dR~@J48$;(hXO*d9y;ubr#< zN;jFlVC4_`O05&IHK1GE#8@40S~aI{cKd>5>Av73V6i8&Ihd5*h5X+?IH|b1+{*R6 zUz}L>u)z&~h5G#7#vuOsLiu|7>wn{>;Gu(E!43b|S6ZIx3(oY`m(VZJ$+iWPydPpy zScyFbeTCS5ais`dCO`S<{E!1MYFJxu0+Pl3b=(EA34*jXfSZF)1CzSGj&ry5f0Jvu|OV zalZz<&~yET@&ek;f$nNu7q#k~8qvYf=99>+x3L8Y`j-wF<9jYJq`4*-uXNGXj_ghE zD?3xrP2P%*mM%PH_-{Py8{Wi-jX{{&;kEGm9NH~l4h`&&Gr7Yvw2ye}{RS^TnC5;m z-4jG2JqJ{)VFGfS%k$13Lt`0dB31AQ(mVYftY@PCu^`3gum4kV#m@xiG4HFOeRfy`p9g=EY3yFyyKx&i8N5g9-0bmPd}?qu|LfDez(Y6x z*9Q$Aa!qFK;OFOdGUhz}QBNa9T@BXQG`0EB0lvNNAUeOzckq2Q(wEvscy7W&9lpb} zSC_p(yC?l&8)PHsLpL;NV-Rg_^BY>)h`~ygZ=C;nYumi>LF}v#zTUfL{tWy78sy#6 zn`U_b>)QqY^3(jmZQyf;aW25;H=nh0(s@t&z}`=F%*03(xo1L4A0v+Gye6%i)8@U3v2S?846gSF^LSQ!B3q|3wcWFOmg)&4 zcS+}vecQNOk-KtUGxRRa8pr4tT5wSJZUoLwE#^z7nk&kU-iE&+Q|(FN=Mm5I~6;Y6{#avpFn?{se}@bLL_3;x=z9S={z zW^!ukL&ztml+T5CoqBtlUk^XMq4_LtxcTAo4Vw%8jLm0xXSEb2oBr>g98G=y!uTWEs0}s6%s_WAk@{y&ONT#p?rUG1f1h zUE#G%X(NVKc3E&rdvFBU&DwDZCN)?5VYE%AJG>jAi5+u4gblu<^f2oX^)~pzXZHNU zMP}O-jwzh)r1_-s+3DH?(>vJAdt#~e7Ty#32A(Iep3_-R(XV^yN4Rs=9Qt#=51->a z9oADg^dG>Sa*Y>c$>G#KgFlJX?Tq=(U?FfU-hWQS>|4h8VgvXOG?tv`7r5WQs3hBR zBEP=WoZ;L27`)AvPm;`nEmO2>0`SuSPgXo4HXr|6{~`R=b4$v7#@uCTY-$Vd-E7xM z?et#Bm(r0=rG1_~Z3Y(XGd#N=SdB4`i2EV%D8|w}8ffxJ;f|t_; zFAFO0k_KMp)xZn?tMH<|+C-ldGODe$r2J;yDcYUm9f|DP($XUKBbRv#2UwdMPwFex z=bX~1t!?1J;&NlYe-L=vd9Tys-P`uepwqu6h@|!eQS3VnojvGFU4hfXce2ONHMEv$ zaz?>Vc=_OsCl~zBIOa<^)~=y{rI!T{r%Y|5&XMeUjDz=ymWz+X;EgTZZ-U-Q$5_ak zcVG{?#N&HcueXq~xB2V&55LC#A=;+>GU&kSqmFU^f_X0BUGf7aQowHdcIePG-dgr{ zmDv_7O$$$QrEErgxx>rS_uhtyWyvIMldtvWuwM1Ww$kvV%gVd)qdD2F{*51iUK9%# zA}3t5s(;%RoR53{D%vNDYr(&(%Sp}?Wv#LOcMY0s$MeYRk83^UkC>jmp|sTC3!95w z?JVJ7M``8)m^&QaIlH7826q)cxDQPa;__s(dV=-Dz)aI69we?%r-k$ z`R#5R0AE`LlS`x%?E=ppp8i+V%w*!~Z)VqxPxj^>kJowa%?4Y$$&G=UV z;|X}3@bFi|!|UqYg5PMu*#9T~T{yZosO^ijU6D z4{M=aBE1FrhfR3@8Qy%ZH)X=LeATKBuZ}g7Jt_GDb|;>Tq1VS)_a5HU%scWfI*{r1 zV$4_1&EmO+%6|v@o31V3n&`BiX)x_x-P!AqmAgINTUzNikpu4-YYuv;u|;;QD`l(= z;eBO|aefAPk&i0%3CYFh)-#3{vn6oc!qkXch%SfbTn#Oq#oFp#DsxBBKVzmR-D!$j z@Ld-y z=osP)EckB^mtPrM;28( z;4SJtfsObPK707=9u(gc?)*DrP#=<)WM51G>l4g!AHLBTWt`~R2PI$0uOwJ)WGts^ zPVSaqG57YTSaaxT(o8PDkG_)3F`41)PvpBPslu*zq`aqMnQJ(IurIir=Ox2x-vtX3 zD|;?@Xw!RK;FNa>PUrP+3)+bvQ!R)0a!>o9b(vr~J!~g--L)^;tNXZreU|ax)mOTi zcT2x`=yi7jo3{^E4IXqbJ{MW(!W`9k2LE`>i38Tv|N-Wun6EcL9_n`Xr5yD9H~+zdZg zm&=#xa=rMmuJlc6)9uKlcU@}rh@aSg&^xE$yY{*M)_DIT8t|pK$ZjUK)^AlG z{rOS@W2)o1IM3-@Yfy(gTi1`@0{#oWt<&0>V%MX?P9 z(erArwrVGvwZ6a4_i|uWaVI8&9-JtY*KxkR0se%yHs0j?v!8b}*v5fZ!+y#3^g`Qr z5>2gn>=@{DDXm8qeL=KU`u*ivcW4rRIqeDjQ`e9q8j}@1X>|kEPITK%cLmq*PB(*Y zK;PImr_uibwNKC%e#SeOOiiTPBQg4DLDp%3Zdb4WC(mm?*el|*uqme7;F;pbOUeQF zv=`_?PE_wt=do{qdtCc}xtDZ_s{!xM=l#t!<9S=ncpl}seXNt>!;-9#(K;|r$&#~Z z6K4*hp-JX}pV{`qyWydx@%8khIiAILvNAtpqG>6kx!QegTslwjJ6(axGu7)>ZbQb@ z9Ekl&q-5LEe!!2kzpa_?97uK_I(YwQ!oBNZTzU_Fs3EO+l67cFcLo#aQ!!;4kNT|c zr=GX-pg$M*P}|Kn9U2;V_{V;FCUG(Fs9Pr0W0wfuXNsM{KYjeiex%5rS~&2ye_45H zQ+p6=?F@z&3NASdJkw6DO*{Up_Q3F8=Yxy4svpNhu|Jx}Me7_>aE7rxMBJ&RVPu4u znOYuBwN1g*aZu}W3-_3BRQGSG+`k3eg!ts}!nSfseR4K)gfp6(GhKn~^n=#f>qY>aqV-Q-wU{x z=Qpx#V-MfNr%gMPYmT8U{W+E2xA6N4#-3`OTKZCJIKL|xznkNKj(PH~D|lBX!~cxt zxW>Q8NNX)Q!k^soLRtdH8?k}E`AmuqggX6oaXOd*=7^ji-TAchEe zugwDoN5=Ph`p}rJsEq0LwAYxf$c1BiePv8n&|mGCwBF_tbnHc)zWi;-N_NecWqJeY zg3v8+kNSDwYrbc$d1TF8YnOfGJ==qu<(v8_HdyvRa3i@~F>V=XR2@F4B({FZC7k0MQq{FP)QY z(Cf|SolYuJYJ#s@c|YA*D!}g(IpQ6mN#e1S%%%fL-f8gT#IOnH_`N(s%#B%lpcy=! zW30X9WXI&EQ1kC($<;~PUJTEPp|jgsv5aR*)I6R5XQgW>rfwqtAA8&OAV=*h+1}(2 zS;(Be$+bMb{!3iN6y4@!x%L3pV!TKHC3_Tz`IyJ|X0E5Q;q^uQ2mTID2KGCN+nU1n z*?bEZE@xdNOS`E;c_H(QlQ$>Z4e-m^;^uXV{Y)~~Sn3Ys|I7VB;{6iHnN3B_Wr<(r ze~dj!W`s9;_q+6Y3Vq`DzH27G-@xw~@W>bVEj*JQTm8$flb|Mz-V;GqZR!twWXJ|@ zo#i3}vsOAcay7rJvft06X4=h?QSbvh>1Tt}-&pW-=^yYMG644HYwYj6_WFv-Z^b(4 z-b(&I1}#?pf|Gh`zs_4(o}w)_(@3Vh^a1_GK6tfl_hj%vz8~Uw*=QZ;oMi7v>e)g0 ztb${-9>_pdpube}kIwR(KDeNZcv)bXq7nWuc zYd7O#;&1q9XLS1xdYg0&`fI#D$9#zygMLS~CWaV7x;@1)-``(-zjXKN7|@}hpG(Tj zWnV0{b-&xXl6hQMB979#Cc#{=*J>^p0KL z?|LbF^J3;Ax%6J<)9&W|Hu$q+h&LiGLUUvA`?S7_b&mCK-G9UN*!EZx+4j!Bws&f( z&6m#oM{c`6-CS6*eSwqhZb#S`a>QR@f6^Lg&d6S{fPK)2@9)3cj>qph zzG!uSw?RWRj~4b<`)SzYkD&jynqNLAJBQX`LheIeA_FajK1BNSrIwVQMJKX6hMIi+ z@3c16-L^0M3aRf8qRT$6wXrcYtiNepLm#xmmMUFUb`ZrIOFsAkcHpGm4=gt^_6%co z2Cnnw6p15PIn!%s?eyX~-tG2!f@|LW6f(pvVsrF+llD})jcAwF4*OK2;%)8w?R=L+ zo%GJ8qqThjnpSN)K)kZX5=S=>U)X_ehYx3e9)HU%#<17;tLgJ!kvHRt8)6OAFEJ$h z?E7*%8N(HpKM`|q5Zbi=e&(du671qp=5N$~w{8D^|8cd$k3XUKAz4S@)XqWCDBHhi7d&2Zzu%^R{f=ilyl>X5X_PhiY-LSF$C_N|6>F(A70*Mbow{Mg znVx)X*5?n5*0<)p#ms$#c75dtvAmq)ZT=JkOt9aLxx;DK41iGUIi2qjd{@2!e$o{^^waa0?PoUqOo`@w^(DG8 z;|yhWd+!hQ_E^5W z+4AMp<^6Ltx7-D#NV>Z;W4rcvN!ewcoXPFJZ2K{HZOJfK*%3#0-O=EMzD`SDToON< zaSv^P8^H-Q5&XO|>P%_3u+uI$Va;5g(>xpcpR}|Q+OZR{o!s{Wr!`-C0$W;(VQqn>A1XeM zJw4vNn*pB3z>OB@v*sx~p>V&7_YJ_g3tSuzY_@wx zV|`LMjT{-p-WG-SAvc!|v~Da-*rGYwX^Ixg?4~Nz~BU~eXZu2Y?*aj`#F8eRQtkt6vpJ}0|ymYAIhJXBfE6?4OTYImy{P_ znBw9B8H;2=*=A+QEJ-^YqjMB2t2%dngv9xi*nEtQ{9g#LZG^W1~)1Tze zI`Hd%9eR;)r?srWorO2xKFdGxRcD^EV!c|!QBkO9k3R{ zp5*2ZXm7ssBRdD=<{G%$dg!;|uH`u3?l-otQMgM3cak$2;U~Q_+P$6UcY5DuU8FnJ zLwkGYc6htE_BUMXnK|9YG*{_F9XX@ZxxRJGb;I>jxqkI04h<=OxGB3SSc;9N=Tc&S zv8|X^@E6-jGdRi_s6nc*Dd@?|o{JqU>y_isu%#8fJ?^ga6ssRGSNZ)B^E#8>hrMKp z^*1aauP&1fZ5E1uOY=W%!vD&nn#KP);9=Ds(#(JTmc7GCuPep-_XV-kzM!s^yd?K2 zu00hrY;Hq;-V#KJnK=uYt6?+o0q(xwbZ{j)FYkZ4fB3miq=%oY+L>cKtKZQ7#)kei z-mC(&o3T!c;I~fy)Q%M!__T&X!N>1+a0)!+-SDxE#FwP_{SAIk=KGhjbpV$Q&;<3< zlf5G#2X~)rx%C60Z%fNg?q~a1qiL^=V5h=IBdF{T&9>ZQ6OZ_Z}@~rYPW&*pBS#AEGy2H;U+|FQA#E`?2^`Cv% zs|OhyWv>>^;oZmp1;2mep`iw|`T72+@mfr0u!a8)ys4SralIEA#Ti&vS~9mZI0b)M zlJ`ZR9r!)U^%1i!Nq>&Z7+HJi45?IS@N3pVb`Pf&xhDN&AYE?BT>lhoHck`mt?q!n zF4zzc`)6Ws;%UW#zt6uH+mVxIt^;eJ0Z#`_1!5+ct7!G3-gMkZ!MYDd=P2vKpxHq4(n#dtXt%D z*jD%?T-_&j>?rq>+>g0;G4~5flA-<#yPnHh#9d@v=0WZ}@9)H?a2Gapa(K-;*`U_l z0NkV)*ZUbylWg_C68?oi<7zTp!5;2UrN56bpFH2o1xv2v9o1CBeg<6i3~UVk^BnBd z*$(V{1)sj=*&6VZ4LczI^e%)61S%Lmq(WNuo zbMeOje_GSGu%=aboM+cm@EF=nQ~2akMc#{@D@9&Y z7M!ohXESZO(AmRlv-nQA>NB*3FKybuyDu-#vhUh3@-D$u1Q^059YMcnwE8Hv{-ykP zCZO-9kO^2r$wx{0bMXJl$J#PeF;iW^-+de(hS?nK=iG7S%xi6xGrx=LN$j{<5Arjn zxvYUb+X9(OyhQk#EVKuPb%eei#J(0N&N~i_YhUYHZ*7mHpXy4b^IhOaR}Q|AA#>IyQ%%X5pGPr#9i8TEVpflzA zf~myB+8700&lVi+JJo07JSY00=XCZ>f@fPYA$`NwX6518`E9`$SX$A{h*4)Yc zcz;iUbLWsXQyJlO2#*f|k4qPZ?f>TpJcjhK`4Mthc1$WO?mEdFl%s27h|}aNFxQ3P zq(f|9oH=;-Kb+P*`|qO<{4ZsEwk7gn8y(`SoZKGxh5X0Fl4a59iqBg9@j$03&n^&K zfSpC~vZc=P<}mg=ap9+a)GH6C3(>rpQf?gBGI%NZDz5Gk=j?p@*3uT!=uPP{wEp-!pf3! zZMWaJs@sp{ZVfWL=Vsr2++Z4PB7^=^( z=h)Ej^H3kAo3(p7fZpRSSV9gvzE|i=oO?0$M7m8g&n$A07x>0Ua91Nddr_gUw8$Xy zXWq-+XUp%TUFa8H>Nf&oq8ISxgVk$Vi)1$R%j$W>z=*EK!FQ7p?FKIxhkUid!PDW3 z(RpnZo|(6}6XAXxyh-sBQRudwYbnad^S+Vilf^uBIJyJjD`ykn54wZ-VH0NTPqLO8 zv)=#DzaGX<+;3|Ve4F#)tJlTHe}P<<$wD7;#4;7-JGs*T#;=E`@j0k?A?aN6U9RWJ z^(Xhu1&J?`o&)KIqeV}mQtGEkzl0MT}`ky?nXXO`*K)3Y@Ye5 zy$_$F?JV)B9C?7yQuOnYvCDV#XN>!=xn^Y*_`djjj6QCv#2ILw(np)12{-aAzL>K0 zBk|ln(r)RP=T`8{JzQ^whBraCMZ^Dt`TvS*bq1P6OyKpJJM;S@-w#eW%N#(Tn!g(B z2D()X-wyyZFMI$U>uPe}%-PTH`Z#b-j`j4`Q%a_YU$|I^etrot-@95o@t8RG>Y)wf z8BMz>gHM=!ap)i4ij{Hc?x13)R-=X14j}2WOjB<;E~}*1tR_ zi(HM&8*>Z3i%mc_w>a`@J>$*re_jz-=e@!e<$BJp{I6r2jqsq=j5Crc_>xa~Z#i8V zQ;K(Joa(!Op6h{22RHNX`F!-8YK|x-sj;7!B;q<0^AT-D&IDGPfm!kR&<}vG%WOWG z6`v-(Cz>lf0bk$exX*x#&sh2O^f9ul_!{eo{h0ea6H7gV48`-{qC<>(WI>0&ayGU- z{9dx{&BV56WnNS8pX1E&81ON~cNlvT#zrKOXQQcZ_VjYmn_Y=?=c6&%g@HK(Ei}j= zf+6{zqt^EgA4?Vdhdu@_sBO9%ISM(K{UPq+TQ<&Hu`@0{Gq=;WC)eqq^r04Xp$KcL z_+Z7>U4k4S*(91?Wpi>m<_^F+`+|Qr=2H2Z4^4+(O^06;nqjOhu`%^z99u9pPpkKzWIzJAzYovpB%nGRv=jOV7H+xa(jEM#ROl)BhH}BW2 z=Xw{hu-p_zW>RZ+ z|1j^YGuximm^EHKvzK~1#(3qHicYC-QA=ZQOjadgfKGs6xbKrqrm@XQ)q}+|( zz6Kcn%Sr4#?{SOr6>QnR;s7@K13$Dj`ZvtNSMZ57{u{}gnV!C=Bsuj9*i>a_S6c^J z;e+H^jEtek7>?8jYh?S#URXL)b_elXczZqi%nWihL=zmh5XCRkIMP>jJ_**lHb+J4 zU73$$k}qIq=+1S7<6(Y_?070R(dwMW_#Nz=kSjE&znnARe<4X9EA#%EPq5F-sljcZ zvIQEUy@||_9WvY-?UVNBbCv!1oQ>rZ+~XsF774!eEWGc>s3D9MNL7U1#}VCq#X+WdEcha+otJnN5bM)pkS z8rC0tn*ls1{!TD)7#xhZW^X9?UjWv-uVKyTBg&dZn7)T&DUiKA4Er^9c z_vPGWY!eM?s~nA%c7Lordp`7TK4TS*eTQ5S=?D?`64rI4w~RR|wiElxzLnplE@iLc zUT!TFTktiydGYe{wFB6d7`td|s=up5eb7?RKws&SVjnTE;|Hp?in%Dc|n zh5RRY6pw%ZE^?*zrDVV0KgN51(Ck6Jr_Tn&4V?gn4e57rHTOykBr#cDi-_ypO(O z1~^{Nv%EiroSNak;eV=ldoXW+HD{d^W8`29a#-i&Kv%Hjk2ThHz$xFzZfW{!%J(8a zZ43HSeFu`jNAx$tLz3OqUcT@ovHA1ze7gmoJlO-w=tD6ZdiLLcJ#6PEJB9eUr?F$B zYDSM(!kTC4U;n?(@6^EUL2tgVG>5g8o}K3%nrALgZqfs$oNLv)HVir~^i{k&(B3-} z@}(7jW6G;Dz;b>o`a^HfnPqQ)!v{7S7d^UXFuAPDcc{l1y}ZZD zx{B!|#%tQ@%r@Su{808IAI4uOZWmrwZYdBuFre!lfvM{_kR0e>->_BjU->AqnS)>c zBa&qphjhw^fvIJ*lg;&S`8}WYJQdp539PQ?Ie6Q;I)2NC*ugjc3FOQb-tb0)zdh?; z1AT}Tz>zuar7Zg(`R`)vuEG!DP8C1iQfU{5?=Dpv)9Go?^QIZU>)t^pzb9~r*-F!g zYO6&D$eY7A6)WxuCKVE;*&EmTE!@*y=pFF_*9VfN1$pMo^~8PniTE8cdxAOlt@AU? zL%9$M=!4o#cyKNGYSf>Df1bwtqRi!5<`m<5T4ikVjS{D~FH&SYhMG1z3;u1zAF!{? zg)!;9lhDoAbIou~_xtqQ>>VVAv(#&T5MU2@ypI06=yxYPx0~-srT=>RC-7(=_~J)e zUm!;#>@!xxuf=?vJTde+@&?HrY{cdoDLfk_I=j&=_5@MvBMsC^Y`mTv!kgFlNo0xZ z67V+U6!A6}-uB_dnfCvOk#XGBXL{rkKVC*36r5=6v3ys6jPba9jcHIIZAZ*487+OYE3d$*}r5XZp{rpcMJVJ zTIo+Q@z2nofhIWlL%^a3&Dh2IGUsI0#`BRsXxH}RwEIS-o%Z5!+STsGtw-34bv1jj zwq`GS*ozO)-{K9;q3`m`orS#A$*yN=T^J_;CFA1ItO#;JB7cDJwM}5LKyRP=L&5J=h*@6?Fe>a4@lu7h;dy$m)>GuX%#SLQg;zAT<~*6_&e~GLZ)eM-4I;M z{I6$@hMa~NADb7U{Dz!r;THVXBJ>O#HN>HtTo0eMf%2}jJ}g3G)O~hv+L!x~OV)W! zW-;?bcF%Q3CK!Ah=7PB9A>W7M^(CLL&h-URSDdoqM^eo7 zB<(A6XmY8~6pMLVP1I8#r=u4}n?oCz`ir4gC(>&MNBSMOFpwT89-V?tD31)g_q0?B zo}3}yFGX!V!LMRw*~8_$GlGma*5@>z>%H2O3jAIryI8GkkYS!V_^j+uJQG6(h#^BO zzgqkJE6!Q3Ua#Z5k_~>LYsd!m$Og~zTezY8TFD0R_|kr^Rb_*>^KQ*sbw#6dKQ}l$ zZ&$fG*Y80Kfzy+L)2aAj8XfNfbh@j{Cj+Omu-!EQyC%P~wCO#wyixe2ZgmBIu~XE* zFLb#Azwxo~>s?LEK&SVQf@NDnWO>rKRaA_hr zuF1l+-kpuc+n{wG$d>+I@C?6(&+MB3JewS_&7Ra3v74B1FD1(~=6gKh>MU*;c4?EIP-1_W4ig-~Q*>I^yeN8Q>kcp}w`<%f~vNPxg1Pb{)a2 zLPtO>z`_4XKgyk3_Mfw@tG8y)VzMQRt zj?+E}Ewgsz1nt!}R)of#ziCkPE`gsfa(?fi^do0R$6&QD(Y|W!XMA%$`8LmJUzKMN zW9{RtLu@X6ut&mIjf1?RA>jfw5`A*)9;eNL7wXS`UUH@61;LzKAbx;#?Jcsd^!G2V zclrO4+vGo(-Qw5f)_C2yZZD=d!OJi5K8bJV!EBHJU~Z%TVCyEozV$k@Qi81 z79Rb1XTxC9)I*cJ^6~T=p*_sL%%$0`#tX%{l@6m9B03VetFjR z`=(>``~Ok*E?{z$W!`sHch4a+O{fWjjA0-Z63l=Dc3^-kJ4y!vL=C&01Q0Rnc49aP zQJcfMY!=s=LncEq37sQJNTi~yWRYE)ld_1~lLUzff&e0Bxq=m`noY>GNR;HlP0xqz~*8-LqM?C-C_walp&uc8o;V{7| z{=N;Tv_9_@r$(;Pq(1>m;ne@m8c`?YEjUH2jNp7`gxlb%+7wqf)ygmaG3<0XwmIGX-+CS>#+bZycW z^>wj9SD$;A_5>fbm-rLyCEWf{?HSnR#a~*{bxq@M6emBvRxjOTPWV{H&#hxlmoX>& zxn^GaaFqv9FH8Fw^{@*3jmEm3+VL90O?l>&f9sr*@G5vyTa} z8#`F5_%?0zuveMso?uLIO?fPPLPO@^lK5=hlNWe9)9g9eKMr&GYrDHUip?Q1&z}CY z;~mC(y;d&nNm{(G@>pz-%vdH)`JlOF@G9>SL~23U94+(#~v?Ua1F z@%ED+k8;s^EZ2WEyNUU4@|V!&-MlAR_6PRao?@`>=l$Q%p6VT4Yv29+c6({mCccpU z^jk96!@} zd#k*b*Ju zmdx`b;G{YN@f30P27j4fCw(fXQ#qTB&Mjfmy#<`6*7+!YDH%yT!)9EYVW|XzyS86@wkmJ14kph>?ce;T+UFg`Gm3Z6{+@Q)l1;1I z#GV>`pR1hq6FY#X_FL)0lJ%skyk>0nU$Zv(_u99D8;;k5U03)yJn?MrUVAyQqVg%v zm7EyW7l{EwtpWPNrj9CnrLU{4dyQNDdpU#RUT_aCfQ&WYi_zY_*0MwGkasj*HeNGo zXC8Spv=fan6Up)2Ip#rIivPLS-r&Dhyv2Xb*yLYpeIN5NwHJ`jO=>SqAJ4qNk$YK88pwX0hCier1NNZZCOjCVC-9r7G>x*~l3UZeL=n;L7> zW;EW9Ms@)nKC?ZgKIZ!1`XvJt#t2KZctE*k z$~`kI@>vVi5rKZ+%e$%v{uJ-4W{cjR3_UF3U1GmVA7UJ`2WzcVivfK16VQr5tRO!WG5m3tyQ3vWV``uYe!1gxK(zdlxcNgfHNSa3xX2 zj~~en_b&6Qt-t1{HJmRT05-LCG+g#b;xF%fH$33kLv1uy+Q^K+1L4r!dKdbEUo_Qd zbPRBbU}6Ci?J@8SXgru6@r$?8`DEr6`O&a()ZqFcc5uQKH+_1l!LqnI?jr@M-Ef zULp0kzZTe<#g7I?+Vu}(yn@q^!?<}ip6&5oE3WeI$^3?W{u%$?+^UFAC9!oBBH3iF zKcx8j?B&G$31ifmF>yvd7ausa}w-^4tIc=un6dH-JKo8WtY-9le_`i$XOQJ>!` zF7xk(UgWQf7wMbdh14EuC>$M1=8_zC9sFG5ksQ`z_ku(2j_u?H7|30P6!KTf9sU^b zxUaa|7k<5(+l~A++y9U3ZvV#2_n&_`{S@;eCl?u~ZuWq8?wp~jEn&O=H|hJ3!FDsY zzMvob*UmI@Sh_NQVm}{DG5za${As{JK7EpM#y^y* z$YOn|K94=oyF2BO^9~*qj}9f1B~$29Rk>^m&)4L#ZtmCMh+NNmoBW&dj(3msNxv^O z-Mc5X%>Onx*asY6&1{O~K*@af@|@(@>$2Z}en9pRV58W-`{?%#V1Hfeq31Q09l-8x zWIJr6`x!I7Io64Jn6xK8`Z(A5OHL5A1Hh+Po;h+Yc?ETSfAOYlr&{b5Ja8WL(Sar zj=9wL6J46=bBK?@=S{4~oNi**4k|K70u|ZywJ}&g%v4Iu|2ubIw5?S1+^xiS@=liP+JD@u0@;I%;+Ffd zRTdKX_=t^MmZU%G!vX_jwx%X;ncL$<&lA6@wxj1$eLNr42CY1=XX9~n$vM7d6U&t9 z#V)Se8^(#6gWi*@rT9Vv*jHq&^@sT8TV<^`d8cG8!6n9c1QW?xjf~Gg-hNZolI$Y6 zZN2|iS!>`e@=Jm-60<@(QC*`=jf}I((<457uZ?_F+{iw*{#|4&d~Q`4P%@Tud1B!G zu^N-+1ujT8lT25cBke_eePhJeHOC5Xzv)mrlB*KT$4t#+Tp51>`=Z9F_52jyweDKq z7=8fx4|Ltg5qq3i{;Q4r-+~yK*1ow=#`uOIh0Ps@j(%!`#4c&A-RE zbzeLy{Q(@vUe20cTv^lX0Bah>aW6}%PZu1Z-SuX@H<0bE;J_%HQA`*(bEck8@a!hD z2_Mm1U-3uF+&+)>IM@F^Rrbucub1Wv-W*yh?YR+bsbl{dI-J%_ zZB*d;=K5&Q6y8+eI?rzvTn)i5BOHq0Y7nC>xF*~R96R9!V+`noxpX6ksOFbsCHBN6V~eT4#pu}Tl@A5p4GnH#hz~39}Q+W zN8_{W^>n62M8oXojXmtiMadt{)V^JTj^qSsr#YO(Z(zFz{_4lK0t4pJ=E5$#?LArf$Z4#rrsu>V4;xdKr6c{>76#3% z=K%Zgs{Ubb=U=-1aLWvDTAHz1mF8FN=t zZ0e@6=A*S!AF-CT(bR{m$O@cWct}<-N5~3OF01&F+^0K?C$XI= zC!{8uD!#W!PW3c!RdPvWyR*U9>D0{yPQ%Qr&R$(^NbdwE$X5bq9|K>zi^!qm|3tXU z^PgnC-Hg>hCJ@ca=LydG4bBQrHKb(EibG?u>`+-}gXsK?Saz^1Sxx*UZi|ju0?ET& zjKj>I6ZE#^k7{tKZQ|VIHRR9-T80prE{XQOs2^xUI2OxnF2~ZGiwS=-Sxdp#$XpgY z3~q2|#F08EYuBSR8ds;VZN=>eCA^f(} z!tTNTo?;*CLWX#naf_bxzGzB0t*QqmSxoEuF#RabK>M!rxQmJBwX*Di>GOijJk}Na zc0cn@@=mnpRqfkJd&~VXY~~5}1j#-4wMxtiu*J+hW@_mF39W&gZ}Gp^=i4{|Db@P>0Gd%AFL%l(Ek zSdgt&{YP@5jhsMRs~Q{G3s~nodrJ@ROBSfv-1Q!I_c5d1Qw)R7Z*4Uc|2D@Tv&!+V z#|9)hQTcJ7Z0r$|0N6bjAUFfm_0T z$qg2LnW3Wo+MvtPBCg`XkL?cMADYLexAmoYn1;g~ zpkLY){Y3C!9&vOm#nMO~R$I|Nd8n;hs%_m`9XB*yg-L>O7vaxw3m#9Kk~=j%TjS%N zbOjUq)t=cvJ+~bysBv$vx;WK6yU} zR!FX?{+50s8-rxsey+=27{gB^TTW-TVyAATJ=v)*z7GAD{$nF>sR=w%j+yMnCb%8l ztIC{BRe4kQwAQ9^W9g^pq_Pj11^Qr)^7qIVXPL6aqxUf1JUE!IulL5RqDI<$&L_+W z7T_=ZQ?PByETPZHx3^3u;{B^Xg{9m-T#=PKb%%`AecPYTdPF(0)WC zq7}hPG}49KDA;q3tACQd^DI1szGn+Z2-*F_C>*Kb@(td#M|wugH9T=ZghU8 z)>ivK2Qs8|;=1bZ$^2G4j`mq|5BwOO%$`y*A6*ex$dl6yo&A>aZRl_CoaLUKV;}R_ zPm1h2+2=wd^UJV4bD38+hu;}|e_S(1TuX2*#ikjd@{DhK9=TVGlmqh9`i^Pb&Z@@SKn8JS1_lC@Y^N0Ctq6< zd^Vg*1Jj{yChs?`8uYY=iS$)L3-MTER`q(bXYefh)DGHIo{*Vpqt=~tVx67XCf`L% zIP&C=LlgO&%{o(05uSh#?os)m8j3^I^}Eo2RllWs zVB=J*DRC%!6z7Ew9@WDyCOG#U+BEm9hIFJZ3%t{o^y9 z4ZMLv!r&UPs-wRIe%C(g#Wc{D;*t`^K=5UL*8_)_r+;_fjlGq;vABah0bJ*O_D6@c zpa~(RR z#vos?*8An2%GuZdzriv4P5c7a(UrAV4+X-nC*X~Sf&Ud8Gu;1P94r1G#<8{!RL&zj zv@SVlzo|<5j_Uhe64CzB(sFE#(0&oPu+~QAN$}^nur9sOlb&OwSAv_w1CO|t;987p zu@ToAxfbV|_P99Lu|q(!LqV;bB=;?N!CPn_JxsJOd>6gj?4i<)$rUWcwKgMY|4P=T zIEwZ~^Kods#she_B)X6I0DN=K2-+XB3i-N5|Jn@jtXSap?bPXk|40JCoo0 z+F1V|TN~w4Cq}J}`7UcCK3rQH#peF+tj+%*?Zi3Uz`8ibW@`l@v$1+h@UBD zMEvYlY+2%GqMMQY?7xd{od3ggGjrm5Uz`8ibTfKwL^mV%nyx>xHvb)T^FO)Yyc6Br zHKDRLs!yd@x?tBvU$uI@k@z45D*!j>-q!(uvtO4m^+{cYwAUx#m$<>Mv+h^3+4Kc_xP(l;04d z@HHh0)U7Hm3m%xtIXuMfw3EmA&(wL5jL!M9rT8m1=gEcIe>I=0_99WgbeOQ8X53GQu^iXP%hY)k z_2gwX@XXkRgY2$zRjD7#^9_xT?=e>8Y<6Z>gkzJA-_{O>TM?+3~o9?MXi# zo$uITuMMw3W?LPvM{imZbV2iV1@wVo*~hTIJc3=#SrMMMV2P(VIh`M*d`$UgZ3CDC z_trFPf~|EM?R2JD4;SB;!(ZwkhT ze3=fLvnlaqUWzTDGqpMFVl2`ryFA%FKJ6bvy>HnGyMdAHJ&ey&{xR{*_1fqL*3%8-r?l4U)hj1S^UyhO(hC#hz2Hk2|3mt3P0I%5mY$nbf%7y68-e^c zz!-lYwmR0^Kwkwuf{paZS3a#ZdJ{ety4SZxJS#XF7H8=2{PIz-l%Dnto{fB~+}FHK z54oPaKIQbqt)GWucMkdLNB%0+G&0*Ae{}tK$qwOIp&2LPWWi!>IINoqOX@I%FIiWYPR#8-i(@_gbJZ9{j0W29eJ z`@s+XX4{@{5dM_W`u%cmBRF7M@gP==2Sp2pFBkvRLyG;9t zY-hDTK11wIY@(|ir~NkYF*pNAf9-(r2rkC4B^%f@dY=csEyeJ0Ej#WO&&I!kk0t*T z_7k4jHxwQEBVXMrh7Hyq$_+Zlz=B?^$3mYz9Qr3#ys5}vVwfYIp*$AOj@)Z{ zPLRy|w9x~7JcC_jCGk4L;4=A_#_*wbp3s^CgE2Ps80q``37pfM`in@`yGl3^!9G)> z_EgjL_*68$8a-c5KAh;;qz#jO^8(;}>>sFs$oJ`dKbr4xzGwK}#&^XTNv0G%#(zz$ zB(?ey#ob}Op|f78;nj+N27Z|2+*{y*4VH6dzz5l_#9QL3!r&G-UgIYo{Y+~BOM&p*n z91YHv5`2>ea5Y%3;xnOH9EJv-2^)%n=`(w^RfUJdH)FBZ)+VjACDX_;f311WXX7=)vn}tsh(35Pf_F?q)Z-v86WmO zJ4;P*W9{DT4ag@qJQB$#Q;<)rIZOQ14~BeOF$>20DF5p;#s`n^j>M+b&6wI-`hC?? zY_-WPwfe$Z&8Al7ROyen68f>|vr&CU{e6c0V%^>aH&8c*{uWH82F_&a#_SmKPdTq2 zo54AOZO;#&Yp+{-QpO3}k$+mJ_xcvK#mKop9(4}&bs>A5Y@)H{C%rK1$lJoZWEa&q ziG|Cjh~o#J;*3>s;D$vFEst~hfVbjM6$_M1eWk2;sN4B|68JLjYmyh-Ql2wS6n}Hc zb;uc6cXxyB{^U%?pV_fC{9Dd!;98V_%5}fq0WS+#?0T-Rv$eBv&L6}6D48%R`6305 zTLXb=bEvM#HXGX^eblFWy=$nQEPsL8X-o}ccgA*~nnB;0()+}d68}IZ!{*^~%?-ZYG!jAM~ z+Nn#s{;ac_O54Z}*4T9pT%7ZSV)hl@HP%bdciQJM#EO6@t@OAm0f9W3E8hnvB;Uv0Bh!54;;nYI~@3U z#x32LTM-zp>tAxjT5RV7UY-53vi!fMwcImI^5@_sW($Ae|403mY9U>uT4E1sEi-e~ z=B1^&968*Kle#HEBFj3_uIT`C#+2Rh4A0CfeV0C)E$UgC+-H5hyZE*j%ocp=_;TeB zV648`(Hm@D{L~9~EN*yF`&trNGXH4(i_b59{lzJZm%jMO;#Xe0V)1WYw0`%>i{c4Z z(@`%T&zLlpd{e`Vd4AWK)P>Oa;fHm|LgWlSs&UE(IP=t>P&@CNh{eP;^dElC4 z9L<9~%JTY2AMh4OYkqDZo~W@VasxpGFW_6*|BU@HWT&|O^Rnn3zg$x@dz!KMnHQ21 zk>?h#eqqYuD_+ch?5G!$(+A7O;-9@>R9sOj&&Si!r|I zxjXnCkG|{r6)z_Eu6;N==_jFNYWdLr9rzpR%9xGJ3iLVXz@g3s>#Uk7jd^%vK{2DO zEjp283i*$cuJjmWLR+yt@cG3*d7%+p{^jB|QD52X{w=%++>#$AT9d1Gzc6^!lowAH ztf8I3*2B=tD|lnNoPTBXdFB`=Xe#1gLI%-3Xqf$;>Up1GofDiztj$@-iN@k5U)X(2 zPq6!>-azv^E1L|CV;;w`2cCs2y!*p_!S2ryQ$ozdam+O~k-w~;)-fjE2k{~G^VgQG zs~TRc!%w36m~r}iWbp$p)-OK)MRT$DYvhJU4dykt^RQCPy$XLve>tu^Waca#K=c>o zlp`-I2K*tO?!b=trb^<#}j*| z8n2S4Z>L{lMC@k*zx-YJFk;KU`)i#M6$962v3C~cY5y=#)r=^gCiAThBLf2xk2TWB z(Z8VH(wN)uL97jx+p2m?$)ad%Zb>;Ros1y?{aeP`FwJ+>B8>QcMtq;MMXrSJQ-@xB z{{xfZ`<#PtN}W^T`_u}%lCfWzrM9@fXBe|d{Uc&56w@Fd1-i%XmaMyj9KNXDT1N)G zI1BuW_@eN6w59s#vtM<5H>n+JLzfXbJ0l&01kb?$aQXEJ_>!6po0l8z4YwTmmFkf>sWVefIBUXdT9c*CR=Q;5sG~t{c^fp;X>SQP^!(5h9w)IkWmt<@ zRwW)+`*wppPMI+*`zbJ*MVL3l=HO?VUfM?-#z_qzGGe`mAnFUKB}aE}O+ zh0DAK{GCN-nb!ua+F8T8%p&j3qa_0$5iV`z{EgfK51M0*h$Azy$ouRk#mm6wKJ=W= zdKQ0Y0^j3Qi4bbcmbY)i0+|@bN zcftD>GKMQ@Yf%b0B+9F}v?W&jcrfm;72Db4cbmkOU!U3XFnL4UlP-0!Tbv@iW&8D+ z6%T8#GFn?6)?V9aogK)YW3sm@mrS`~W`1UL-dA((N>4VUql#C;56%z9JtiHr$IEeT zoIySS{TsyB=)DW`>=VUBf$HkqKpVDmMUdq=>?r%Y!Sf_>0d2! z9BG5@W z{V3Nz1zm$W`=0jvaZ{w*^oR3yfv2KjlcX=(VC~g zlQzctim}F*uX+1fT(=+h$MDR?xamn(&Y#dnt@bV9Mr)$?)du+iiCe@@SDTZ8eqWmx z`u+GtDdz9?M`t~YuSNVT&%BIHd$YTcld0#JWzXuAoXosZoOPplWr1%O{mlmMiW$=H zHsiCwDVr;>hfk0L!!_pDZWMgQR4JY!SKM+@i*=Jfj`0fyntQ*sydxf;-04nNjXU}L1e;dw3qG#`modywF(!gjbdRy+ zV@XeN**M%8#SG~j$FDx(`hB~Gunjn#V(-(m+iI+Ww<^9gQ?fWqvXOYv2p(>hb-rcq z{6W^4bA;xjKXz!HGfVubkFw6>3{T^I+qpV$T*W*%UQ>QmxqBNt(sE0u4Z8j^_P!%O z1<#ncvE06Vkh)LUbGG(+R^}%9y@|eV3X{%FVUIoFy+R%i`z$tN>~6q*Rzq(n`RiBc zY7uY$@KWTTz90oX&P+ik@bWmkJms(-Rrz_FYGEQPHM9~h?Mg@J_tL;HjvOL7k4es+ zjf{)@_;;MK5znB%!;?<_6tWuawq~&Jg8#_bn-((GI%otN$(~kpn{ofVB4~uqB^~rF zo@w5?%(JtX1#K?$$$maLi+qzq2XZTVP$Ii&@8uh)0R@d*zL0ZQ7Jk5!z3Y9{t5ogH z({CE|%`Ejd{~DV+Fr{{L*p}H6Zo3V>=Q`oiTqU-uHS5r>6TW{Fa9vv$BD?SJq@8bm z_@m;h+3QpAX;fGZi?_KIy-R#GzMHmV<$jk!duaqXiT)W^)T$S`MzL0IQi8N zyME6peSR;xVr!n7bj4-pIm@VDv@9G?eMj*R2i%)%Z3)M1VU3WnnpfTAnZ?z}PdY22 zC%}g4nFYy|&y`gNPG^L|m$7p=fyQQ%$Emu7@u|da81PWwVh9x1*s7L< zPR#Y~?0j^1&O<0JLB3m3X)C>Y@4{`9y@T5xEiIhk`X|nq?6sQYIbp9j+B%1IoL3qu zG6!I&^>q&)@~t#&@P2EGGZyS6A+c3=MmPv;qVW}1?_IR5Gir0uPTJhr>9wEJ?{@>A z390F{c}b}ecM4wJ{u{aj+)8sArA95#;`0 z&|I@mJT>B_7QED6vvWxQdus>^#ef8A0u73X~h@~FXH}68~96|@De0EzK*ffLF4C=6VeS#wXOy_$uH`R zJvuK#dXI3p)zLav=UJRzS>MsRPY>&hf6ykUx(3T_Uj~-!bG7x=+G>rpzQ|#BPK(;l zlw^w%y`uN-kJgZNi}2Zj?y?m+jPP1?w~aj-TG1YTqW0*|4ER&o=LL%zt!RH60JdL$ zV#pVcYYjzn!e?^dE3`t}QJdM-doSO{-bI_*yG~^9dLQsTz1rs1&jBOa8`{p9s_+lB zS8Ge{iayZa{d(Fp!6Dh3YI9KiH1QC0hy8-*o3t{!vcA|N-;q`X%N(>4!Eywx*l)rz zq7~Lyu)GJnoJ{*#tDEs3Pvd(%-&1wQ_%`tK&3>zAFB;fMtu=e+?*f+4s9@PCSoRM3 zQ`IkaQrRR9(P)u+x+7_{Sn2mf`khAmIuGct5=La-GxPYRkim_7MK_4>*jQBQZ}hos zL)HGsagA9+LBsqC&+PcZfIsES$Ob*w$#NB*U}fLLov6(murt=|&2D3VW$m=Tp2+@c z0lU-{1OBnrEcAw+V4$crGo@|d!q>kbpFi@f0bMW$#qQVevC<~IE4$|H_yF%Z{gENg z7o8s5g*+;LELf{e>2VQkXix3d+M5TipCg#m_+nNvCNRGNm_y5g`4qvNwx`NA4PR8- z+ZdzT9x6h|)wZ?98gH%rENwSKzp`n@jkRU*hp?}Br{AVp2o3D$WL&MnQV%}nVo@c0h!STM-tD(e^F@mtyiFLG=4Ua^gu zso=3{rk;5H6z?eX%QLQ|PCGc)om(3UH&nM?IH8(GYE$?e;Ra)kaD#SR!RaI5-?E(; zMRzy0$frLp{t8|g7P7DbT|u9Tv}{|h&dl9!rpb9v_W(ckPx!6)sGVOFSULEYQP2V zjNh>->OcK1{b$L&8_lQb|MZXIXQBVwzez27`q3Er(*sd|8i&S^OtS~j?@oAgj(jAI zRpT6Td)_h@bo2)kY2{_CfJTswfpZbtfOwqX`Fr3fnoHza-vaOihO%8Mcj5Zt#xUWa z+ZJyOfcvS9_%J?z%)Wg3)t>C6$#lOrYeG}$+ZS+74lq{kzUizkC#I7##dqx)8hesG zBij3N6`3>IqwMv27i>eG0zV{AohW$HYu`&MUiL%GePX4KO443}t+BFKsm8rz z&4kszm)LJ~M&_4Y5>B(Jg{W8t=@8g@*tZ^)je9%zK%PPAI{clreT29YX!X7C9d{fK zAERHzL_gY(dzyXM~( z*1NZsQ~Zs&oC)aMTJGR`qq`z3-qBn#ooB=P+^yv{t|c6Nxw)VD_4!-NNq*nw{G2+( zIurEPa#Oy)yp!h>{Qd*AAN2bnemB7ncl~X1sln+lKc>G~{?f1DV>_I20FESbo8L~) zF~>gx8u&Z-@q(J(alH6|D?V^(37!@0rAhcQv|iFa`fc`4#RNoqCx72Y z&yr=0+PdAccfkhe8M}b!`GguhgCC;jCU}PnJ@;^~sCbp=S?ed+b8D5J+pPi7^Mgrf zs-_PejZ83&Jsdkm>2&tj|7l&trq)#w`cN+D8T6O=Ciqe0H#UXTl>V^ET3fD9QCC(m zaPZr2Kh*zJyr=)kWMTPJUEqoMTr)Md5?R*-hvNSQjK6&h`v|s%7<+^KmD(fPvDpc4 z+WD@%=@{l&4{wpptQFjmUM^f0e8pQ~R*}47-S!# z65y|S8NefoA!S@=@;#E(T+z*?rA3S{nML1XKQ`gFO~_#ALytx{!x$>_!R}yyGr1bh zum=o+Gth=`COXSr=hIZ}&^6s>DdWFGaw#+~UZOo$v=Z_DxA3U9!{sRPDD)ojs3vkY zlMjoBGnc<{eH)vx-CWV9WE;?a8qut?e(#mLIwC#d%6{~S{tmB=aZMZJ`0pbZQFEKp zi7WuTj0FA-)*#ZMs%;F*=4j(1fwv^H{lJd8ulCyVe}D@K<{}uWMy2-Lh!>`-`=jWI zb=P`FU>7$pNx!eT4OU3vIz0lbI2A0Bhab<$U(*NY1b7sV;OZ92zS2 z_`*5K_pJu|Bm0a^$&z86CeWIUyo319FhS@VO{Qzv;7h%FP&?>G*d^Hg%? zi${cu8nF{lhhKIAduOKy?wakx_)UPN?adEjCiMa6Gdn7NH}zv|O2`Y+HzoI)(C-^Z zPKd^%aVh>p`zyObcx)g#d4XHA(YvaSA=%Ul?<^7&ObOOEJ z`7Cxm(UAIx+x_L*Sx%#Ad@{71=R7{uJ61o`nT=>(FW!4i-v`Ksp zV@eKd4-oxhCzNhKT3?ZFFMUOF6MVqVEecx5jaG0`Hk3$rVeZsm z9Z#Nhc-=>I&LOtwNBYAqK8a%A-jN@p*caA#0B4AfkMIPzX?)VNlB{VozO3w+tM`=|N!+uu}9Uo2|U(to}nTpJlL}qBX7Fv6J0KW@kWQ~%nThuNx2sIVnE-ORZvT2Nm zw)JcVS+w&XmU{L_L}RRFOzQ{DZ$~BpuOeJz{te)T+NUnsgWvA#4-D4&Ii3^lCXC*_ z;_K2aYrJkJbB^#Mk`d;XrjDTR8f{b4cf9aLcw;E;kG5t;_%bKb8OhVVa}sN;=PPTe zIciVpSGQZQA>p8#u=co&PgkwAIDA zX^i_+*~*}8)k2?0ohBo}xLX;w)?mcA3FzM=zN1)=Ht=4ud@c; z+q@z@4LghW2(9rpbad&bkxc}g5Uy*_Y;{KH(QZ}mzX83UIb6PwIV{9RhMnc~ChW=B zS==XFUp!3qzGQJlsPi*z%YakrrljpOR&jvo5`M7-UiPovQ z?!Yk8;jhHTL!3o6L7YVb8xMA>6uRF8TY2@p!BTi!G#~hw_}5@hm7k8BN4BcFkB$wL zy$GAYG5DfoZ|*>MNe(-{xxsp3~zTb5sCkbR(yIad7Kb4v2B9J1?XtFRsoA8@r6JE=Xhhqc}MWyu%4Z`0>~ z@w-uakg@sg_PJ}9`l+fOGzGjDzMHLmkzOKwMDjtTpD<6&OLe~w@d1M|{t3IK^iGYf zrgx6k5x*OaaW=Zz{Gfq-A|dvQO2ABs{YEA|I0al3W|%ld(iTzX*@y;}ed6^O0ZYO5jxo z4#tqf{`~*JPr$wDJfmy%Tsxg>@Qp)z@e{wT+@qFm=|kMx$8YJ1HZd6n`nLFa!d<`j zs=*T@S@x>ik!5c`(HqZLWpg?6{C+x9qXP>Eg&e79IJI_zFd1ThX<&2RYQC?Xl=Xw4SQ)!&dmog5MszQ}eB3PQUxj z!2_R;=2W#^imw#cyd8(&E8Sm|O;EKx#+AfZ8m_7El|wuw_a;xd5S=E$b2EO+x!m-l z{{Ef5^jE*X&-aYcA9mAso3W8SZ6mmn!8fy!wc1$O`-|8TZG3N|eKYdCagL>I%;J-p zAQWTH~PY8lP^i&R6mI-=p7z=9_XkLsn?^p0izC0&zCiWt`#)9pvrN)vpiD^us1KL*jwsB9a%C5jT$$1(H-XDDi z>8T&+^^ceeT~=jR%Vr*ohn$%3ql~)-%b^jlT*Pq{IQqDs#ZMS)=ZKl6wj6eVlt;+^fAaw|f0tuG_@63!b{C{F)QU6Vy98 zv!=N3Xk&;^H=i^gU`;(SJ?oZqo_rVa=)_=0wco2*Onvix^{u#j`SLAd(+=fL=8zY%#KBwGcGBn_;KKz!s4M9l zqL1!64}JD&#`<&^BcG7mwYQw*s~GY+#xwd%UtQ0D|835apfSgXS`z0`=cJBvyc3+$ zZK&P^dqjTRK-ge&Za3Frll%O&#|;qE!Fj~!n5Wb3<0op3csAvhY~t#hdA3QwZ3-t8wYevvhWzLf1clp$&9Y?`zrm`^VMsYSD){; zWLKv~_K4@Znct`RZMw<}z}M#vgb(r2v%+KJm0K8VrZhu#Cg%0^3B>7;V>_F78o@C$ zbwn@;yfN(cVK?thOY zo{MoN{3?>`&!laGbKcu%Q+WiP)|xN|essuQj-5T0S>h4<^Pp-4Y0kIZpu zRdo%tULBrrb8hJc#_^T7=@|uTN#qp2x+G9M(&6}Xo55Z7*1OZl&59+TK5odH#@`N$ zIL34(c9vYi(obk3T_jG9zHC=9lhorP-u_46T{AMui~>1^+&9v0N%2AP)N(J$`wjR; z;_ycC?N0hojHS+sJP3TwV*ORWdg529)#9uV4<~-SiT4_c(-|MJqWKv?TLw4~SGs0b zC$UT9?Vo#`*O|}L4nB=yzvr(x@NW7u4Cko?`GDiTM*f2)6}O>ESxND{ik0 z#@g;y#iyTb&h;JR()n8f2(V_ zqfYi(#xn9*^#1W{N41xKhxV3_dgiC^@Qi#AYFjy})Fu%O-nCEscyF0Q@g3Ux4$n+0 zD*p(4(Yo0~0eXR_GwQlnGvR35CYM_HL#(6l{cQ76UuSqG6ysQc{-AU5`Dv+vP_Z@L z{58}r?WtW8`sF;Bs7>&5|Kt??pf@Jq3v13j-mA+{pV4sr<1^%5(`Os_t9y0UvcNEw zcoVp;Yh(DW>kik(>l*y$u3Ysz?0o-u!=)zqxwOaM95uGd7xAw(zW;pTi_iJj+5A1@IiH+P|N8XzpKsu= z>Q4V{PBqKPM@u{2bv#?2zrt(GWIfd(-{}(FLeD|8{))1 z5J#_e)1QsbQ=8fE`g6NpDmS=_DZSila{KuE8LzG|=q+{+K7W0h^G1z>&+F_poy(TU zlN*=jnbc*TVAPb#!p9s>@I;otA69|q-xm%(e}hwb|L^h#ng6gq#=hDs7{K#*z898z z3HwT~a1XyfFzl008ztBTH&m{^=fZ-KhQ?AD=CS3pH@XRK6zIU+rZzaLHK1)tl;p%Y>d2&v`*B^bK zI!Mg@qpR7YvzL2+UwG+xv+&s7gN2`$&Rd|h`|P;7^g_>qMt^vl+cM*9*Z;dbxq|t} zsM{!b<1b_mP41OZ8+tEMfCup2$JqPyj-I!KM~rz)@oKM?`$_5mYmNr|*|f6WtnKRS zN8!Q3bESB`7eD`^anr}S{$o$LEjJeFulU38VDTrVgzj1M$5H>W<)E>rME&z|$}=>q zABK;9lWVzWO4P$1R|oAac3*n_2VdY?{--=Q%>KP_Ts_ynNUr0~zhvIoVfLBc;QBQ0 zr-$)lGcLxaeX$wd)5rR6AV;Hi-c?OMc>T{}tOK%T)eaknF7G&|pE&lOprRw>!za&- zm1_4T3x0$9;#bz8XV!(={+wrwwdJ}mi0@Q%f<;q_+l5a=ePt>!yyBBx$k<1w`eKWw zI(5z6$jI0g8jZf7Gksh5%A|t_I;i!t>=@2xPgBF;uq8n!d}lI!$=~y9{|^WLzA<*F z59jYYj7t#K4(0rsBXWMz#GPB!9NdiTR;%`AN81R`?)Os<5BajO-gS7v9|DhVmtQQ? z8}z58}SFm;d!MxY+?1OXQ%_?__JtZRtCTLiNrni@rXzC}0w zyXJp?VFt8kG(Y~rZ}}eM@9ETB9z%VIM%p*9@u?0?0=>PNYfW6!??!$vn!1L4=$Y_H z_UfI)_dakcI!`fHQf@))(*8g^cRa9?FBXXc5ql4&V-fE)^|zbtv7 z9vl%3Nsg=0k@1S~KU3O{&u}K!RSSbNh{&(H-20c$^`k$K%W4b+sv-3K4U)qoi< zTesR&On2f}&?>aF%Tzn=y}W<7;kb9li?Lv=L(Ure&I!Mk3{K97wY@YnOr3;ce|bVG z8N9qpZRqR-JvR%ymu%Bt{!Ith@xKcOi#otp>i!5{j{{%hHvUEImlgkF$j@)m->wgt=$6xi823Bv zTUaCVN}20Tz@*S~TbKgAcah)GhEDgjlYlR!_^DeOXL3cr^MCo!N{`z5 zp?j9&ZMUIq=wJsp7s-?K+2*kJ;N>NM#yS~Cl)l88DvxgGH_g)H)CS#kmI)vIWJxg* zS|hFRBGY)(ERJEWe2xP?^cknt^$>Qi#z(&(B^}}oiYq;Df2@S;;7N{s{r$1h zSeN)sug}{sX_EIO_`2!GC!AO|m!4;T z@~^R9dSBdr4EjNKVErTiD)=Uys}Z|xlef})Q8I>GsevO|*>ZKh&!r{dllE2VQO(GU z#>;kTU)-quOY2Mf;tr$raKo@0+Kp~viUtuZhyLqm!~S%;vGXMpzO*GAt1+{VV_ARM za}KxG1jnZO&W5IEpA(zoqhmZM_=(>Lc6wI6|r1p3T@>!aJb7XEVs|;LC;d zfvws%GQD9PYd8IZHx67dHBp)cY-gNy9_#W6_!s-%1^vM#xfOxx!0I{K%_Lu+#`AhV zy2kIR`psX}w$-(h_$}JMpjxx&guAGRz1=z8^=lb279O)sirsh<3#H(!^3IN6Y~R1@CG6hWy5tD4%o# zeDF6LVx_OdVxH){+a=!(IZXXW_yA3bz6(E!mBu*4v)TRr8_>6C8~fFM1KDz`?9_I@ zH)J^eGV;g8J8k-k@PqiNUgrC1ex1K@>{#zF0&t!GsVh`^?4^^vyPjC-odwQ(99{7q z;+HkYXum7I%iQGak{=Yl;F1Fy1Mg$`W!|gaCjTk>=e$3sv;e(VzSJ+H?@uKcQ8~xf z_90(+pK$GUBoFUL&>cL&&VRnL z77wr%5Bw-viw|loj%B=xYw^wr>@O|#qP<_d8DE89Cf~DQCjYZwR-al4-+wCnEOQXt z1e;gAb^hkD$w-zo6*pTPD&32ZSA0*rLNON7=VIW-&YR5$Z@R%}13KG$DRq}v`-n$^ zPvC9z+?l|;QTvtAfSs!$h@S$SY+@mhSIyxe&*2;+Y)t;@?n&P3C$QcIaaoKfj!ts> z>1IiI8h@F5fA`&K{0I2;$02WQ1xA{ilNj=Qz^yUhUFx`%QN4??rA=+H^R%n&EHI`;G*Ug2R|d200X1gUlu&rqs!?2dkk#%N$h&Drg5cb z8CNTGq516c-XA_|ygwYvT))Cx`^@(~zm>GJ2c22#gj^rI(>m$;dB8w2OA;9>w)m*v z0rg)bcNN@K{jVN;5z`pYF1J05TkIJQHNw!XG{#M*O!78R|LIxAY1q_thPNh*y;c59 zzTUg?=O4d~KZ`GmKZ{TQDgOKk#`rbn_B!y^{;TyD>`mY)xJG+Cv?H8}@ZW=eevds{$^jS(b ztUOZfjSbXhwT;U61mD~FZZl5VZliH1=fGRN_w$1%M{@G#_aZ0nJ=r_fbo`Gf9|QmF zUBoX4ZzOZaa#sY72QD)X<;jUBiuau`gp47a@+$mKd3257oB0P~p1J;W>;Z>(hvJ6h z6CN#_msa}S_~n&9_d0VsVKezkk5~M;25=dp_L%P*j74Y8jx9kahcOoVlw8xs+=zAC zul=qO{QdhW@>O7)FM9XREUvi!^TgNaUcIsQSGP`19FPoJ)6Fg=4tTWOnLzHm5Z}>c zry>h4oH8LCZ=r{<*T;$*$~k_=><#6lgIrw1<^o&__EY}qWYTN1W2MK4?YpPg@Auj8 z2;h`v{l8aS?LT0z_I2i}&QKMdpM5;f*~6aXf)CN(PTGy^P1sdt=BaOm&FPDueB(gI zg-6l1LB8srvxfVs&uLDESFuga^j3sd^X#eIA7r0TO*Bgub*OZvv3R|7(3bW-WWqJr zmuq_J8e}wV5BQ>_Z%X%+|H()T_c(I}9F)$P$=rs%;M7q^5*c(LxX3rXC z41BM*upKksBz`IBYYjHF*rp-ZclY^^u>Y9#b4!omlZfi5;6rOnQ5%nECrt*Qx_bTV ztb@-to`O6HP07a=lfP}`eH(jM4j!dvz`c$X=ZNBG0KVfpqwjP4md*XKRQ{$IqFGY| zbN$1l#DUaQo`)w0uDVYfb$SN9r-|QzWEy@)exZsD0Y3}DJ@*TqYtLY>=X#Wbky;JX!j(YCXs=V58UT zj0V}@5D|Dv!c)_JTBcDnIHpioj?&~0@Ah#s= z3u>nr9yA9X%&=F4Kjr#~WBURdo;Pk~U!d#be@uKE_gtH{y%phc)cjHH57nNH^an>e z3;r4UwYcA&MaRzb*I-=CN4Dm}?TSnsi)7;2{_m(QY2?vam_r9OHs5;xlm2tu7v7l} z^m|wS&dabL<1a$zNFuva3w6)hOJ^2LmUw`FNKlvE83v3oQ7QgxY=EkH~DDLpz@;>j5e6OCE zm?SY=XS|5)p9&w9Jh4n8K)2VZ+7WlkzWcH z=V}(=+eh~Vg|;10Z8h0(yN1ouxhJ8sBEQY(F{60anRlC|SQgm~JC<})=^?_^`WXA2 zN6i}MyE!$D;i%vr`C{Is&&~BoPknCue=*kk*hlrwP<5Q@=e>^gtZaMm50W#A&=GYhk{)$? z8RNKLuO!~{Vqdt@>iselT)qdc=-e;z6TNHbOZ@4k`RFFr+Oq9z3D+#Ly-wByZTihM z$!z(Rd;rZn^A+w_{C<6h?ysjEjo0-0J@wg;rM~Gkj;C`EzB&w?!CA9_J&>PNM_Q{EmDx%L9$+p!ILjIMl!T8r|;q-l5&6 zXgA8O(Hv=epl8Ta`)_I2`{V6ydxv&+)2``YpETe{w5zcX_Q3x}xBVx^ylPb2k&aa5 z5C4h&A=vzszO=4(uG&`?T3~&nzLoBX^xbLs&=`*;d z*zEhc{+Hmscyq#I4}wl4KQuyL+Vh)vhk9p09dl@c4&0e<95{#P4dgd-s=;}Q>C&25 z+{>^ZnaFb&QnOQX-9`NUGoDLB+ln`tl_%cBfcDv!6rZz_c9IUdlyRl^Vfx65CZI9N zYPv5wYCpKGzYcqd{)&$quP8<)Q+f>Dq60s&o{#Jf?5VxXMSJQAv{zWv5!vjF-ydx} z`MaZyXJ0?sxM5Da(Shs?En^EH|Gij=k(2z_W%PxTp^elKe|z^CTs!vQhy3nW71u`G z7&5%%OUduZ^o`eFsW>>`oBr;;MOVJDU-u;wHxg4yJktS>zr@=dDAuhF7xL^*{x0CJ z+LcZa#iwQ0gy-Y`Xm!?vR}+h7xU$`?2+!YnZmCgpnJr!hv{E+&GU%FZ3_qnL6)ca01yecX1St!rXV5QO@N&pYOZJ?&E#wk_LLk-j#~W z<@ZXzNbZf~+*s~B{P)z|ZCMvSG;v+{9I}4&yyG1~&5iM?{EEQKQvZnegku`NVW@tZ z>;K33m3S}1l5UFakKYFPSBnjMk>8EPCTmSUPh7m}uQcG}Q=C?rdsm-cS31Az+)^Ca zp1|C_>a%zA-LQGjqFzLHDSpW%AvUT~H-9_wtLf`P|7GrPJmm!MF3z%Bi_E7vL@{qp zMW1~3BJp2pO;_!%l9S~t*utC@*Ew>|b->^&Bj(MzG`%Fcs>+hE`bdV~L7R%@Fc_x^ zEV_x4p2nv!vo2H&SSLKq04J;rwfp8C=b1(e^;nmV!$%W~BWu?&?j$%jAKcM%Mge{e zuBb++3EoK0(>aWaJJhq#&>HBqPj(2t?-m@1{bA@&hmJ8GeXJ=UwsE|Pj+M2Wf=jms zWn$34XX<96yY$|z7y-%lbNtCsj1W1M=#Ywe(RwLP!E`S7#CLRtbR2(Bqr-XMHouYC z{z2=P9l(}(X=x9#sbUH0Qwu!B5aE7(P_b5OM|)mFPIW$sf8ZWGZ)==3RQq}g{Nml_ z@)&C|#!=rD{v|vzYzN(MOZeCHy;5tyJR6y_&0nfiH~pTms2-+`o zjmf!@J`gKDO`R>;HJ--r-xTQl3+atX#c0CA?VYsuHRNjSo;l(+)OPG!%RR+PB}TL_ zo#YhSzJ%-I9R_Q@>ooC>-YDKi`oH*re5^Vnpbp%K@l3*iM|j`|&&9hOU-c1_J6HNT zM_qFN&DeM!qaB@@puD<%e#<_fn7?+xbfV)8VRML~^G<+&Ot80?wqHXHys1mQcxnLr zxX?d|vpFSyX+4SAENT5Z(<{P>@SU$sf3n;Pk1-3sgcqa#rhgf>^4Ch!AM#-Hef@qb z-xKi4;<@X>vAj}X{SJ@)483t)@t^QJl5dud2db-_q|LASj<A>) z6VQrk?HbU!{3>5-8SuX5KT~cn;@Aj*N19sh*m2_6Y!Zw;xoaio5nu;}9u(6Nvnprk zTG%7tC*#$wU=~Bpv&o@2oOYu&r_*LJ9_*|G7jm>o+cEDa=x5Y5mOW@jzdv>#xvA|d z{i)RAI`0Y2@g^SAY{3p;wZI#Tz;sT)nI0#q?zd$iV}O^f-ik1dy+rd?u8i7Gjw2@J za%?F)_gF~Xi@GJ@b=;F~T;zUl3+GdFUuRG5I&BHpmV{Su|ADC$p7)T+J^|0WgwGlT zfi`k3lJt@19qk+J4`DOIzK!|~X0uybR=uvgwSPd?)BeEy(wDftUa}H=Ty_SlfGvag zTssX;6|V*-d)Q~Ffk^yoM{0FAopFi(QHwNKYnmRodiOcV`fJQM&(8C|gpE}Ez%DKf zT3v9n2=3*vn>ezatPTa2=zWWI)4S%U{fn?Ut8K;Mf&)9o=G|fZC40Uxb-=S3XM@!o zd}H{TvYFluuU-zW=?nqR6QGuxa8Tz@#Je5;RK_7&jB*Y1UA4zgVqYpgye@p%Sr_)1 zL!M{xcX%`UjLr+nhkf`yINrhAP_#YS6ck6KI9S!Ej8mro{<=x>c2jz(=1OgzN{&yQ z+I_3KCVJZQ$D(`a+=&=^Qlt~2f5_&aV82ieLcvz^lkP3Q_FL!wNgtm1p!^fj*(J!N z^4H>T+OPd#GV_b4=105%d;G%*$K4U%?i7D68smQZi2LM^@7c**d8QQKKIA<~8=VgI zpIP7bmyb3EUp(5_@WRo?g?wrHw61- zLiSg##gMlOJE`BnHSF|Zf@?Y>NVeav#KwAx2RY}(mGEfvSY(dDE}lKHKNv5$$=Y02 zj0o%h&ha2)P0xlG4Yy$PA|^yN1V-B0?>MPHHqGvh5lc|lz+Q9*_C3i#(^w1DkBme2 zlAjZ=DE|iAr=?gD)C)r=6$A9Cm z`k~(?stri~!`Z=;%VNl_OM_GK5j3KoHWEW3x@%5(abQ<>Cv8ezi1SPX@vEKq@RnZV z`e(!Y)xLary3ZKOkC>t<_g=+@z~k-)-|mj$L2~as9^}{fP!c2JL85pVdsVn#7yi+a zHU5YNVNWr~Fg{y8B%b+`@gVpCcTF%O|DXIu5gnY_AIf+12K~13J&Hr&yTy0KjdbEW zlOJ0$&wOZEe$o?vyd-e#CBe9l5L*w9+wPKJJlCYRANOf${jzpZd`E`80G>>I5q9y7 z(Hfmc8s^}Ngg@2E{5O#qLPD*E`5L36WH9&jFoP`96v43 zCDCPH{~>;x3^oPU?G3)mXDQi>oV4<-r%l1$#oqR)=E+~KHC#(vDA!JWtdawvYs#Uu zct+pFwv>KgE%US_~7)G@IRrWpTdhZe#7!gCUmCQteHF` z`cr(a;s@m?lU$oFXuUs)4d~;+yaMNT;giT2$ThB8ng{+2a-M?h9*Q?~oqRa^dg8G0 zf$6=Ay0E*yFIL*XI+)pfc|$zzbzG7UH?V#;U}w3W_O7I#Mf9URPx4XH!4{BbEDn9- zKNi@0|0HsKdmh>`HtdrxqoDx)8H4-ecRJkIxKH1kr>-kE+s~A5Fpek{;qS`R{GMos z_qtu;ipg_%A9KI73t4;Ox-zx}4hz~O8J{4wksb0_~V;@&R4iiRLF zDU>lxhnrgjYLiBT&v%BX_{C_tB4p55nnFxCarN2u0w9B0hJ)hfM8VO&74!k zu}DMJ5aUdo88Y0@_f)rburv2Q&+m_4KhJrp&pG?7z4qE`t-bczYp=b=)jpU(oI|n3 zEc=<}>-o@coq=z^!|$Jh|L{N=Y&qax%N*yf+_~@<8>Kim6T5`7T8^!-v0-JW3~A5b z25`pYe#o!-Ww1Vd%Nk+-<~@`C2sb9RLAzRmdRf;E+QoYPkajJw!~+X+wTy);hpBVR zK%J}wMHdXIbGZ6e4b=CIpuWL&{&9W6+2}?8(+?#+b#lqX2LFT5&%M*(pL<%fl-@Bz ztY=ye<#(aKg1uhX{M@TzomzWCl$Sk2?3@wrans>y;@Y2bAL^Uxen6S@q;~fZaAf0! zj5IoHJ9CmR=LGu%?VhUkX0TzYV_wjn5>J{b;#amYep+qrqRa;WzyH+n61^MzwT>6U<}+yA8Of!MV@s^^)kmNL=feX?FzACxP=^+V^+HI4_R}mz2TmaNyZPE}&~Jmk z;}@ZDgdEZ#azNal#NLiS=q^Y>^Gv$prYjw9M<$KR<%cUf9ebF{?F|940{>NY&Yg|_%>@qBi@IWv7U(D zQJdPfFLTwd`Jt3snS3lCYNgF-==wF*d4qQB<(tF)ytb5EZoEai`eYxYYi{zt@KDOV zW^^mh-_D1OYgva@`>qZ46V3qkOaq(G#$I#S=Vq07ZE6O60FNuqp_=m%EQj-LuoHtZ zJyp^%^WyLY-^(|-D9O254r2-Y8HYEc>^q$oC#IXeCGM_nv2@RQr9B#37c>~phK*ov zTN+u^xc1!KZNVOg7(6WbTM3K_j4dxFI5X%%al?m_$^1FYmnb&YlEL#acxd^*K+Duk|1BGU;#tAgR@m->u^>~>1-Uu zgh*Z&H<$X*v_79L!uN}~Ule049voN2pYXeBSJ-KD*HV@^ANSrAzp+kN`=;*aT}5WC z+rhi#JTJq?P?1RUl zZI1Jtepv#1#t0YwCH9GT$<^+SGnp^(jdYC83zq#gmv>3NpAbX8+!o5c$oCHR?A+!j zeA#juH_9{V{KJ#$-3Ii`!wr*MyO#cAUvOm3ChYQe^3p9K@;{8^JRkW&t1~4X!yY?y zOiiF;G%r{JY>kbPSesi$JHm1Nq4->Whn{~g!G(T#&pwKdxt0FvcK3V|SwhF`{S3MW z9i#J&26c>`fkrWWf|mMVNuXn5)Pas2W5P#TA87!W$>^6jZP`cMv}EhiRWBo#i*qj< z$q)5QYGKkf=A_(ICgox$MrTlNW>S4{*e_3R&R=)q=iNvW8cGfmZ{&>xxziHI@^i1b z&Ml80&4=R$@;WagjNV z(l;5-O-tazG>+vBa$%OmSGq>xR(IbW^<3Ax)y=oNubwxVEAGDhz{OmjcPr$tG8W}b z<_{U;dN*@k202NhUlKWdLD2@`e@#htq+e!mpSm;Y&IHfT;~y%EKaw|=(&hx`P29kq zivZ`J<&DhiocWCZDmb%s4||bHZMg16J$r+8y_%Pe7S6ntj{~Rl-TwS@jKA_LPT-x+ zCQ(eZ&cBfUlRsEvL5ThN@=;shAm6RViArMmwcmubj_iaKwhD9isVVO9qsjKvnzP2i zfRE#htMsYXcB<(QovAgIZ@x(TR#L|b%8S1O*}xx}h#_0lCwfb!$*t!uwvl7tjl@<; z57Af6)VV}3fLV?1P6Ai!OcTB^pvQy=P_kuX*--S;E;~#+YA*zDdvitP77`Tixu;2~keDCqm86_6lqV`KxMT zrMS`+w`kvz#*a<;>g1-p37{AmZSeW|({hi|f%{<%4T(pe3caq0W^fuF9$SSr%ut%WB!ZGTL z?aehKqoO4^jRB`|-+>=AKObC&5BlSaKRNN8zc|w`T+8hh;tBi*@&%>b8FPrMq;0SA z-M%B^4fU1$4LV0fyrj9h*4Vek(*6T{=h$gKpcUUg6b`xd`W}3D(Z+UoSFr)|J1FiR z-RGUIAT}4>ygQlpm;6;Iw~yzG*M(T`Oy{jQeiY7c+*)4l?n0kerqcOE_c&h6L5EMh z*j+Tw@gC(}=FznO(DHh>vYGF0T*ui}jk$_MDqo!d-ZN=`|Ly2{#+5QBmA7~niE}1q zJcTYZqAz|*`vKDV(-l8CasG3mey2I@PhA+vnTdF=>T4-%7WTe{}rI?b}st*PCH=5aY}qN2?9J(uSSX#=2u0wtSmk&(**+l`GCQmunu^0Be(g<3%B_W{i^c}x56K>QC0r&7*}e%f5NWfjKCgW zev=8o7?I9L5>9xB(=#@daK^CSkQEPC*n9BduS-a7?c*_>Ms@tbmv$albRPWotTV!U5NzgODG=xxZFgO3v*UPC2$3^VLK7_~8P zn(4gB*id0uS!g$=k~xFvyj<}-F}7jG8q;_=|9$>{(NZo{;#lb00ou9K>>1j15c)*OkvL&vm4Aq~9ZgmFZ#h-|JDDm!PTO6|OlTeNpK-=xA1szXag3?; z>R9^`$y<5Yh>qYs5;hKq_M#2-9hoqy>WzN@uQ)h}M@3^3JU#%fVd75!ZYA&|T+i`r zLZ9e*Q_g14&d_fG&VA$kvh9xdoITz*T_<-YHr`)r+>mwn)@;Vsv?sYWtyTU$yUOoz zs{9?m`5-yoPrFtAZllT{g{_h{#{19me^5VT;IqK$;hAHNXZ*a$OQ)y{TW*J=I4Q@IGOsC4L0a$jz=yZd=> z+M}~C7>7K=>H>bZe~@>Fc-{+6gU^og>@A)R-oL~Bk20HrZ+2y>bly?jbKtv`=Ns9h zvRUo7j-fLa=9=LHt$i^59NTJ)C%2^P#0If%L^kOQoBpz$a2oih_@3BA?^$4$4VLFw z)S^6VvVy0w&rw!3pkQt`#{0)9vsKTmCdy%p4U{{NxFG`KqVhz9BneVw?LuuvMr08Ot+KbajtUY>odu^_dgj3F@!64PQK_b`pR7$F#Ip zx*=Qh{u|}DjDA45dgQQj`*?qynF`ux+D-2JMpe*G$3OPVpG`FestpD{At=FTGWHvi46V4_v-({%uTma=V1SeU#jsl2%iJ2 zhwgC4Gah%j_oHX)of}v~Zg)rYb-DkJkHtX0yl1`ct(yoxqKg6=#6r{`@++qu%Im!5 z`WU$2mk&8kI7R#BrO-3>c>hJ}d_RSprkq?yX1u>UHr_v-tn%NdJ{Y;5TnXq2&Qv5G z&mg8YiX2oMn|#hXz$Wc>``Kq5VNMdnRiIZ!psRn2KOn@Iso2g169ucvpNH;iy!y<^ z`q&NGdFZ@#UOWC2^qYfy%$~}*)2jRt+q>M;$?^VjVwmW%`zOC=8@@Gus|BTi-X*X>PPu!f>985V8sjT_x$d-ezCERSSC$4bY zN2T0$_&E#@S*?t1)PI^jiO}ZSrQ`it@OwWaysMZq-{Ovpt#E5S?kRgZQ{|5YhT68A z{>EcPe`tr5}HR{xG1s z5&JdrdsFTJGDRQecDc;u;MY(Le_&>zFZ*VsaroWpOwv7g9)3^eXbfed#$@I^`?mu`B5m=|ICi z9O#lN!OUR8fNNO>ooBtlm_Y6^@HC92ZswCV*PH-HXdmEs0$OCCLpAfQ(ZH-$yKS}m zM(74S>^Q+Q_rSxJe7(vG)Cp|%zZ!4+hp^S3y}}P!>5Wyru`6BmhV+-_@LGf0z?^Is z{4YIUj=nJrd|Z-S_@{kTn|m4_dw(|jY0{3DbVgxEkMety$Wv0fr6aFgPU5?%6B(ac zu`kg9VO#SkqkjZ;tJ)nlG^YHe_e1O3-V08Kwd{7qpdV0ty5et$5Ad`{;ttxbZ?IMS zWkdZ1dnX6&!RfrC&cFsNN001Y9m@EPuX@v+ce_JQxcgffmzYzgDRLpM)yWh-l~ zZ~{JS?E?wXN0r#U8h>iZ`I?w+$BfOVy{5b>t4iCt#{vd^2jV_wV~Xn(whYCw6$)%HO9XZnuu1l z)TKGS^2}UFKWqgTWH~3@C>Rq)m2krL=lTBp#DV%)ORCd+MtTJqJGK?rH3svejDuX3 zd<5caVxa;#r0m#m=9O_Hu+`852V_r)CYqz1L8l%&bGBc7X`3Z{Bp<(`jzC`uAE$&* zG7-zU$#dLdQ?7& zW3$;W7jH05h48-*_^t4z`={_DY;ErG=PEwH#@9o8@Ed2BgTtd{1^e8Hr=`zk;vdtT zI>zq|{omB%uR#v5Ap)P#AWda^%4e0HL=Hc`qq@2k7nS}uc{g{!U)6zM!zLd<3VHY! z+C4S!8{lt&zS41<;n$9~w4d6O_BVz?R0m}lWW6BrwB@g>^r{rT$e$}5&hB>$81hGGg3sM`l ze)b}_EQbFGIhr#6OdwN|r{B?^dav>$D69QNlX(9wbS_Ugp61xh?Q%6~;$RZ;Q{I?` z*XEn(Hf)_-bszn8yXxQ!^&j(#Ox^8hPmuv{lVc?Ha>aSjO>ydy6W)&rVV6b7Jt6%r z9ku&i_Ub3J4{Bq6Bs#v_80AG%K7FO-X(ZrBIK_Im;RZTm3(9oXjPtK{Inl*-(cTP#hs2PzlYYlw?fl&*uchRKhc-Z zoZM}!4eY8j{Esb`bGf&mN0Q$N`dP7*VQ~KBCpxk#W3Tw%{tPl!*W>@_bBf2o&oI#T zL4T;?Nf+ZEec;LwIm!CwSUhJYZ_JvRb=i9Lk3;;}Qg~$}ZFikq-E+tnzTp=3Gu2q3 zocxL=`na1qLe2Ob4SaUJjJwvG(DBQ;_kXMy#`aJY`d3Mopo?h896mZid)Rx4bBBKz zw_keTMj@ehlBj6s`w@o6Qm&sN18ihsr9{L#P%N(^mIGF6>+yd$({8f`Fp*Lp?q zVDGDW(KhI}+t5W8ac21A;F10^@GPg#%szZI=-6uG*Ll;hawD6KENhyc(M%4o=3i96 z8)YM7#%TFyWY>!~hVVt5_^gK5OySKKxRbM6@*{yA#@3SUW-_N5i40?}Fh|ei#cRk% zzv;4X$+{*hITjy|^pKN2@N=N!>QL?$L-xo*Pjkd5@G6t=GCs^JFY_aMiSGqp z@zw+Bg#12Z9)QO58#E>U2%0qW9@+$ar#iyoWAZpiP9p40X3e9Y7~VkdRv543g$uek zkcYn!-7?51ye?a#8W|-2y|?>jbO!Vzr$fGsJ`Q|cvdN4$^N|3bc4!4&neNe*`gOk@ z(2jjiFD<^5+yoXp2=9r%jl_l%6X5X=t}5voY^$ioS;-0VO*KwV^rHVbe-XNzU!wEN zA?WN5w-Z$je=U~mpxtbMffY(s-^`%B$tO|xyB+1DnX@Zqn1*(kzw13rPRi5~wh;%ari zz3iZB#(*;L*4}@e<$kkts-^M^bJx(PtJBC3xG6u*{s*yf?l*IibNRAMb@t>p-F%T- z+lNjj1|iH^nBuQKLw{Drtn8=x6`e0tpAMYQc<86Hla}O8U@wI%bdKeO{k-w!%iM}gNB+W7vfIPiy}in#MqV!3qgd^YuT6EO zm#ceI?wL&5d$0Fbo{?$uBfa=}u|1HDx);gcCHWtm+ZYyc;0a=K4d%kwUH|D{vAd{S zTJFYzXZ%-_tp@qFopoik3hB zm$N5#Wbkv-h7t{L^rmWThHe4hVDCM;s=ce4LgW!UmCQiK~ae0ZyiTSMv#rB5vED3#nnCuDW65=WGw|GqU z`2U~|wM+e{bp#`c9nKXYmO;NJ7yaHJ^gCnS;{$!C_+X7G_4Jbst+iIIy&fa+4PkTd ztT$Mj#dm(|Kzof|WXvKy1Nq!k9du<35)iDmOHP?nilsbay6U8B%7HDO z+gv^}fIl+P<&JdMx#7&O(HqP^2kNQ@M}zvbekhr%WUW*@F%=n+pQWDm1p72;e*?1A zH_Gw$AP?Oc^uCqycH5je0FAUyOl$X5^m_yxYZDv%Cy`~lxAcy+8~@w%t9W<4c(zx5 zjuPKi^G-4A?do@6sEpzqzPE*O2H24l{eb<@86!@`Mi)VEBMEQN&It9OluybQ4ZfqC zWI?=S08{Y>(IM{#-!)Kf@O_B)!EdBfA1seBId8>yem;eoJ)9{~Dmf8l$^VekF; zVK23GCB8%Y%vkO|#)5NbL@FES422iSk<2(*SCQ0sOAHA<1ofT95}miMy*h@&SZ1)s zpDxixc!pw}pFFDF~RI-MQQ~;>@LuTix$9hH?)N!TpE$lvKa?Np+DA z8@rJ)2AW}0qo3Jd%eRtS?VH7y5a{3a38#-X?WG+rYg}|JbQv~A!%W2l^yD{wZ=!3m zzAQigz3DO8D}r%vRPJ)*c{lynHH|&M@IZ7l@_J8C5Kp-OcKY*1zVkSLu+SrI1zdQ{KuQ33RKmmibgW`F@DkZgsqet%+`TAGAd# zB>%0J($1dyykL}>q_KV z>-8!F&HBZYvhkzL34by;E+S{F$@gpCEdM8E$G*<@()Wgqu7qzJ4xs6B!drei`4=h~FWIXYRT;&RYRola%p=HYtMOz8?U|4)#iPo{CK(;nnXAFgM1}|D za4B-A{!^KK=vB4bmrw|KoZt z8uEU)ddBl!bke+G_bb@`)F&CiH`!li_v8O<8ehh51z;0wc{g?R=v>0iepX+X7 z4cd5RT)GLKv|h=}c9iW2{ay;=;}{%YYur#6J1o5N5A1E{ebXP#?$kU&zOt~^lhFgl zLix+a=8V493gDE<#$C0CGj={xYv7+WBL9n6UTC2;@Gnw-gz*x7J;HfB$8OQOGizMr z@p=Q?j!mZxS6+o}f<6m;c=Szq3Y~E z2Oga7ojh|k8b9aRQ{d>+kD4Qh)~5WO)a&UP^%(}^R{Yc0BkZ%!Z1OLQm(D-h&e%F5 z-tIq#{!(nsTd_9g?xi@;)1NQJO&JN!eK8*LE0PAfG?jJCH}aL(+=+5{5Zm7{HkC1# zjXt;ijeJF_nt2ED8O@3f*ycCx$L4NsL#OfFc+g#qEnm$X!XTGLDg$0g^42eHb>B%U zXU5IBa?Y#LJY4nJ&9`MMQbx8snR1=JPFMAs4*Q-Hr5ssN_K#O4$vfMSqJ8Aup55kM zPMoCRj`=KmNx9IA;MeWii6_cV*c;1?QLXOS>FtJV6Mq4JLz|1(8+kEy{KXOWoE|4G zqtb>}^vkBv6WzjRl|zH|hc!Prk?Cch4*Q1I5-VfGg*!193CBBbu(y}K+VrI}C$T~C z*>q;5Uk&oXXumJ*-C4556e~Z8^}egY$7anm zX>SN}T+HKn2t1VQ!c0M*=1%ui>jvKi_kBy*M?FV&fs@PJNerNYA8R4?*l+mCE4FVM zbJX}7$OrfA)whAMZzA^8T=F?kCZfCq^IE-qCONk#f8BXC(1`NvWsMJ%HEU9yS=;U< zXxAU0>4jxA%>A5E|H}WPVym;Ym)E%e6TH=5>L>M=?9kpMbinqQ2QAb`gSp55f}G_R z`OKTKCEl{Ou$KLV|J>hqGq+iod-9X*jImq%gBi!up13~xO0oZcM_moQjN|hn*=QOa z5J!i(Uvn!j*oM9KHEb6*XR?p%Os(?Vt;u4GpvyT2cn@>kEb@Y_qufZ+eX{Wu0DF;J zieEO3Rk>dQU-6@_V}pG0zi!BCf1>sn$Y)sw?G5O@g4`(krm+Wo;uHQI?03KKA2(#b z^~DY7QT$rK)86)b?%0rJtlYVKl;WAgS<`6GKDqsHUi59mr)D~J*{If)fvKD%+PfqB z#OU4NlXvLkKEB)C$G5i0{Gc_veOkA>y^l34_XuN5X|MN4_IeAR$@#e9gWcY2+IWBF z?7PHidR;MWA^SisYIAPg$PL*a#vY~4u51WfKWt1u|6{Y-DYuOFvR=vlxz#7$q0Sds zPj_jTWw)cN8guy8>IU1Y_8nkMo9lunKA5ZdR`2wj_{N>PP2o#hE!xVO{Jv2e{F|oJ z){@;&ci(v%vUia0Ky#>X{a^$8hBx?kJ-8toZ-x&UYo46;dVXIY-+;Tmxr9E54$!9t z`p8xjeSRSN%z-}OS&@lkBW_1_2l>at#+DO1mcEXU2O7moG^$v>n)a?e5m~X?I|zQ^ zm8-pd-Uk25gXEj|`iAUz=+3ZpknxMy74)?UU6jAya*pEmZHM$&W1A1^R=9(rg&cY+79+P z9&>{earRM3b_VsMWN&cHRQ}bs;!aMo7y)`w+$)Yh!80Si8aVRF zlNVtiU(K`R4G})VMfKKG-)wM@UK)g>JWpeRBN+Io`_1@V+E}8~piGft;pB_F8_Hj1 z+kub9n%9wF-jb;wvr#KYkyHI)M zyfCUc$Fz+3OdOvta{a&I=b_(L{XcyB0N*~qx129C`sah+gHr{0F2=>E+of*1RCgeg z=-N;N>+e(Byy?hWXg>2_uGNe+*!`UQiQglkKD{Zo06IgdfDp-jqX5Cgqt1jn}3hqK(}^e zN@KBfrq-x-XCC${V$7wDS`Vjqbic=*2INIPC49|0gWMYEf*D&csN`5N%nd0N=bxwX=P zd?)*AP+v#>Z~D5n+k2~d%h>R2&eO*3Jue-~)_%(|$9>BgC3|O5uao-{xp?+XWQ+li z$0y^9V$Qe(oBT7Odvc8==TLlxX*l6ErZZ|WW#u6IZ%Yn7;dG_!iTUUGq+2|E7kH}7E-q^VqpHqY5J;m>L z`K`V0Lic&Qd(`uZZZm{!P>Jm!{VThLd?i`dyvaYKxrOwun|tW#OWe2Y)maxCrxN~% zaJCx0JO9V5HOCX|b4qT=WMhZmtJhUi=^9jU8Mc>>O`2bKM)BU<5hr z;tATQH6pc1`wPgKd=a)VIbCXu9v{DCz)O;K>3GG}pJGiyc6Lo%w)LVQe+xEmf0*a+ z;26r(>RaY=!MEu9Xf5~nvviNl2W3t$ju-}KU!1=7)4wTS|LFpH$g5_}o%tqyDr|Xj z=w8fNgDuhjpSk98-N41VO8@O#-{AUhT*Q*}vu4&0g8lgBI9J%{AIEh*7wg*nHC*U| ze&oNO`3|Y%&h{T%zpcQWxWAUUCS$Zv_i`h_RO3wD=C|c+R*TwBvtJ*AA{HxE|r! zz}3NZAJ<)6U+4NN*K)2T*I#ml)^99$;A%mmN@4>-;|~|w(NFjmU8Cwq!C61C2(JCY zBecG!V9_7!)i^nWJcYvFUf)nWJmkHdc$Az@JvuA+q+!ED=*cqLr}EP%Kauh;4=HaY zdVD+isQ<9ar^Is_LzKIYHEEtPck@O7fBFhhloxxFT_gIdFS&@6~&~_B+?O(W*BKqQ?fl`Pt(?DTbh$*o>(+ty4Ih913%&m@1MlsD z_wzscex%<2CGQ0@XdiIrKi>P5b?fco7eD^|*Lwa1o~teDmmQZAQ$U+V$7PR4i)!l} z-kZpZ;+AwSP9U?!2M?4@{^w6_`a~pNx;Ko7`)U7vWLJ5&8AH5Jz$Z3(x}1KwADJ=G z8-c!wp>HV1Ilkx`d=GKPcjm+BkCTzu4AyTp`N&$}2iSHKb85bo&WW)fD1?rXevqDs zSinp;oZE=cAjTMheJmM97Z8(p#J`SpcI7p@0{x8+=sHB6PtE(ZH}Z}88}VV3Vi3&O z5&x_33c4ejo>EcFU;07OungLXuhp8Hn@%5IL;ppv5zH8CGBNqcUiSz4^BUlkt4{Qw z^aHqz#lJCDdLo3Lh=IFN^758?rK4S0uAJq}ihI&3n`4IzsbZkgHqp1ho6yU7&oR8|!nvBK@ z(WApxJ4${ud?(1F`0Z`-6D7X74ZG)IzdZS%JJ@%UamL&zIsxAg=jD?FYuILCl=w82aTR@zVY?%^4;C>ZdWXw_c?7pkBiu$2&Hhm0APN%x%FT@MD|AiBg}|WyOyT*ij47Ndq`|`i5~nYNk@zNUD>y zlcRnE_)OxN=-Le}M28w<4Q)T-Plc~8mVzmI;?M4(DkHYD8 z;Y2<@^`Fkz{*-KByA9Be8L>Od9z(Y3dA}lnMSo-Ou92SuUU*1!0bjupzRKrv(?A<* zjgFv=+UKe7r}DjMsoY9}arXd>R^H!2+gMkvtNs&h``j>XJAUQI+xB%}tr~!}|CQnC zq_}`m-+x3WXBb#t29{_JU)6Q|30Muoz*;g4ta$@8n9IANG%#YNe&%c${K<~@XG3T) z;ZM~05$}G4|NB>boEDdUM2qNKWhGi@od8+r4`-OS({CZ>g4ob?L*<}%7+AHy+ByVA zz<0pV_jzQYM9#R3=ZAHl-oK?xfR2d+dNFUxx}3 zei_g3x5g#&i*h$`A4(#__*x>Y--_SyX({)7e`5N_dAR|eojuI+NjxWpF{g1s1K%xi9CQIMWZm4{=}1d8x#m=4!O2 zXRYyT>@}>-d^BGD3;q+8!It=wWlmEDKj4ROPjO!}72GH+s1el-~v7i}`;Bm&JAZQNHIgwq9uLe*8jX>)cvn2KN@%sYj@nt0!J- z9Njg}Sj7MJ5aL;k&gLGzz3$V$(frShGxxxb4m;2>>3G+~h*>A6qjEXQ*E=nNZIogT z7KsS^2IMv*K`H&u>h7+2WkH^Kbkz7ln+he-m5(#nRfd=BlSV znHTXaOu2>hmExlp84boF+IyOLR?T2Lv1O-b;29gc5BQ2biE*#os5AMkenlruKsn{#MWioAZ@S7+MXd1={h zZSD$-H3RBg2`-^t{6nb?{u;{F@LSQ`=B`tmByFvwypeKp%YhrAe2VXu@V{b3CIDM8 zZ(8$I?wS<1rl7+rgWQ(}xoVQidEzI=lxv%pK3#UzMqkX_6~Xe z_(u73l#6i@@U?$JIq?>!!4Z6B14HxK5V4%fe-vqUyme&BQfC->U6g81jp z;m7?=R~1(@wG@BWGOKuL%YDVQT~`$wx>}0XmfB)jdUf8~a(=Nq-IZUrWmYl0v$k07 ztj(vp&M#U!#}&&{-TAM*^f}62K$%oN9p#zRnzs&&FP3N8*fY_dp9)^=194*xHhFBh zn*jF+xGAT|3`2Tpi8qsWC|^(n8i?PB-*lIx__f>IxXRO>so<@cg^1wM$1!Lz*FhF2 zr#xiZOQv`O_KLXm25TC;Q(S^z+Q3(RL2Lpv5Pap|)%sKfxT>dGaH%Jr;U0MPz+#Q@ z!}W9Zc{OE~Bkc_H(FMR?o}unkr>j1xb~@ei^jfz()8!gnj}?r@t%d96-&>ZVKML9KlcxXu+ixz`9GWiPAugfufwm=vWartuF>*# zVFmb&V9l03ag8l+7hLXNng7kA_D7Vb@tZci9nAk%H(gOI>zY|SKIQkt+Z*pGK3R25 z@vnh@edEmHlYcj<=+F9n@nzn1fA6B=S9#uj=`x<1#d5xJ*Z;max#gbX{;qqA2fp{? zV)pSL7vF8Us(Aa(S;eQfe5<%(%T>kK{_gk1`8)3^=3lz1xbCI~ zS0nYhf01y2CZem#E63Jw_(*4o#zyL}e?H$Rb~k`OOkc#($Qg7pQg8cJloic2PKf5g zH_o|qKj_aG0{`DHJ9Bcze*k|b@YN53|2xX6FEswBFa8w#*+byJ%QsrD|5Nza17H0k z_`jm8^y;62dl37rn{g|uH4@G-9Lm!N`BwTkLfy|BZJv1fRi267%B3ip_ZoY7KCalu z^JdCwOo^nBkyxv{%izoz+W8XiM8kW*OEla?epr3;BG2!q{4S%F`?_K;_o9XJ42l-J zf;z_)ck*0tSMmHKxZ{gEc-|4y_wC*m+97_EUBj5=^$=foopKXlbC?eHissE0V4dS04n{fma}^IeDp#4}N@7Qt8&3QH9Q5wPa+EO`rz)XkgzFjJkNP#V z#Lu{59riE%#u~~fcJt42%jY`Yr{>nX^;`Ki-sgwYeg2}Je16fqeBR{$5YHHIiG@gI z%YbjOU(aHm$DX)j7IvMLPG+xo44#?S*=HH?J=mlN!q~?(>2=-+%FF-w)p?(C&(7PI z`)UvIB|V>VjdW{}n{QO+`mDu1%JVV@bLGjEu3{4+8OOxW6RmqiynM4~QlDYm)?1OO zc57bgejdN=OXbAJs*c%zi7guM^lWfjzL@qbemQ8*#k7ZS-1;T#&y4qt4JZ1>E?Sfy zXT)2}XxBKCd)hTt?F#(m#Qj#soxbP6{gbqb>B)gl+DYPozyY54E;gU`57<-16Qx*m zBcfQ2o8bT;BF;Y*QI~$ z__Ayyv+4NCXQ#SnpFNOUxzF*Y?3?ONxUtilP28=`zG3HvlKmZ-11{K3@5i?Uc|aAT zXjMC&?X1jJ+imU@(UdoqShgCwm3mq^Tc*|Tq5bj^9K`nEyf&@Tu=jQ@>+s}m0;e)! zu_6w3XIwt+nfPpPb0f4PN*klb%^MAyv%PGmeGBVoK~BmHHX-G!RX*N%yo{VMns@Pj zOGR_i)j2I{JGA%B%+%nl7UG;{MaW4~X>W#p?482a{Sjlj?9ciXvPdjq1F~p4%mJFQ z1$)`Y2W=~^>16K)@%G4)-Mj*vSLJ5k!&(AuwJO(m6ZS(7?A)R4y_WVVR#vhoI@`_5 zi1jj#MdF)|FJBA)uH7H-Zv*^Wv!~meQSlLt1Nt_1Lf?nI_fl^n8;cd|vvUMG=(+nO zE5L(i?DVp1H~o}~tf8NQ-Ms1e?axjQ`tSBt^xvwtwY#y{y-wlCHtUz$i zVkI=FHL#J1If~fb$E)EL#Wwu~^whdz6@3w6{|xa(8==c4v)5@S*1yY&Kj9N=9neeX zmYL0yvo+8VTGiF3*e3@aD|?w^QO}Ht+gMxRKGy0hHpH@=+^kupIqwY3Ga0K@c91`< z%tn7J->JOjZj#SROY;!L2)3Qj{*~jzo16>t;sKb-3A%rn_y39aib-J&tpB-T-j5x4 z&l*^NdYJd07D7FB^FOGu|&A=KUYo|DgK&ct3lX_y08T{(tg*-=674FW2TZ z?6Khb;9D0M_5AMQ_vq^J#*18w`Cs~IIr^w=BKj-tc*O1nXX!|XXdhV2W?oI)##Ek* zey2I7xrTS5U4j26K-XA|t5>Un1x)>HvenxAIY@4PlHbynketZS^dv*Vv2MB#Q#Rh z$!Q*MB-~sKxQnSTVqBY@OZkYs%r(fx(>muG#wBw8qSyX_Y%bMci_h;qEEPLjiJCJYst243M{q8@eyf*$%(EhR} z`q^&HE~4$1@V|29nvALNbX_{Fa|q~n=9~1}7&GmJ8`9{v^kW_|Np;d6fzD5&^QDi@ z8Bc3MDR0KR-{$PQIoa=jk@anz&p=zg?Y0KE$iFKbRHy1!T?a*%Ue1r}WgbpjWna#K zHf0XuKr=j*+DIPx9{gnFHcPBIUV$&+esl}_6*MMIF`X${&1Wi8x4QZ^I;oXdzlQ?a zCS3d{1~3Ql)>vh2I=*x>e1u&iKKhjS2)w6puAIiI?=w~fx{kQ%_v4S0^29;=I5vfy zUYeC|j$zBt7S}Qz??P{#r?x~Ao$g@Uj-EZcMY^7K{5r)6OJB{jOSG*|0eax56Aw;oi*U_8*-q?&ywd? zdIvkQUt@{$cxf#8_VIO$A=0VX0gNf~wMEjKj(>F*w%o4Q0$c7TrdTRn@)qc^T!G4@}KjD7?yfVC7&Nv`iil#=~#b)Jv2k7!+ z_OA@mlo+z8?5PEOZ`ikFE669n8Zju|luIN^{7~ZITd-R;9$$F^yXC|$0=wlh*)8Fe zH~VJnMQkxULz}Yf)xbuPziljS(Ef@A^n-ksi>X`th8fdxl4bGmAkRt8=kug<=jzYp>dUy}-3F|%70HI}eZ+jUW=FcRliISH!?%uN-$2aFI^eb9C)15Z zTs58Jjd$+3z}VV~?|j-eU*m)H-BiYi7<+-VZ)`Sv`#}=@=n&s=S$o!M=Irn!K62Tn z=(t0i-COs+R%f+eqn`DM8N}Gs@H_D``i|dw;i0Mgj=&FA0S}hNR=dPN=T@-KW`)gI z4gQw)yU-T3C-9B)t5|CJXO%--w$>No|9cL zN6M(#C!2q$pfgEA@pgA6v9xYEw8d;n7pi-o@NaL@H)D%c`ljif!qgabHgy)(0LyGTRCuQ8?xOY5 zxFR&liw;K1FAJer=|YXIav5k*TQKJz<$9#Brm3E9jup&V(5>-y>Mbii(|9vJ%-f3< zEf*I%TCOkdXgR;Qy77wQEBHmPYr3oWO5!HWq4V*Cl*sHg$mC+*{5J~~O}A3Vu|j12!-Yu8n}x`%O@*>q?-b1RUuEl?CKoSm znp=FPY3x8d>S@Du#m<(o#Y@2RHt2I5ZFslo@?xa%WndgBlr^m>Ovcw+*0iG?s*9O3^fiv9q7t=?z+NXu59zZ~FOhOgN|#x4dWk2UfpnnAV zmkYnfy@jya0PV{H+AlALX+s&b*BqxZH7^?paKCN{?iU9*?*R7>+AxTFq;X%Nyh$*x z4BAl+t|k0egU?3r-dIo@O1SqyuXAyK8r(Nhc3*&dg>Yxj$w#bVVM;f09RY*49F(x7{`7rwfwv5bx!`uhOsj1;5wR^Y1E#=FpeaW45FV zlKmjAgfdfOlGCk)4)ShFF59NHx-otwpRyNC2YZF`>yb0buGVF4rw{AnIx`5_=U(e= zl4IrS(z=752fEHe4&&I+Db|uGGr8riVr?__K(Zu{^|NL`!@G*hk;{u`ee)xEoRuov zirif?|LzavEj?>YF(kR0vaw)Hc_WZ3V}4Izh7DZ$UHv1Pn@z7GU&uqtL1Y4%YeeSi z4s$(R=xkbwtRQpqUq|ka7L@P8Y`VBOspZyUS<9s2cj4QMo31Htr_WpIbMdTT3$Eao z!ME2nUS6C$Wk%6L4@gErO{s$Ri{0L`s`zxv<={Imcy7%aU6c=7WoE>l@SmEpDrl>Z zjxpg|vjur;>?@d4_7)^(A@Gb$fv4-<;rC5`A1w$c$yyn55`k~aX8kgdH_4iC4%!3$ z!gmn&p?D9{M0g9g$>8u*-KwAsqI;yVyAWw=N48ecwpXcdbwT)*Wat?`J!Leq1iwP_ z2sD>0MWA_EBQjZsOo4M5v@L_S!bdVyA(@7@gK}lTGit{muA;ASJ(tEG$8|r=iJ;JU*vgQgYG)M6}=3_W{}43$s8cZoiaG#-MF(uJqyf1_xk zqs8yFRw`>YZVGg=W%Ga2>xJ_9)8UQFi%&8>_>JEv=HP?to2D1*XO(a>W@QQ&&$^;` z$&|Z`lV_oSr(_D^XYp@jex{&y1^qlrbiSup9*hHfs3TL5-%RnM5!R4p)4a*Lw4Ll= zTt!aj{}TS#Sm>mlFSh(cp|b91A==VYh$T9*Gc&yJdZS==Z7qy!>M2xDVNBW5Q@B35 z4ZYEkIR(ie6|mN>uc%i#6Q{N=@0qjwh9Hr-o%rEYq0P0O_6^19PJ zj~AbY)|2ZdvW7OZxO&Prir000t2n2rw`g`DPhCd~sk(S^a#LlI%vZ(bEvJi}tP#H2 zIK61j--k>cDXife)v+3w=6rZOdZaLU{+-2lXEAm)O)E~S`$n;|F~;}%pv9fgrJb<} zS!_%fE~>k{SYNlQ7^&+hgm^!>?uz2-=r@aN>h3OM2z9KIkTzJF+!fjuyxOSqR4-&s)?J=|wkAVSk9~LS7~{eXCgA z*i#ryztz!ap(y=bceD^o@hy6|7QE#9oR{gyu1E?;_yk^9On={N!4tf%---Rwb$6go z1HPO8TEX1;vqEK>xf=DEO+TX_p>5X+bkL)`Ll-t-=gfbLe!7IU^xop!u3pB#XtAqn z1lN4{Vnnf`Zd!5Kly4QwTV@vL((l(d%`A4zp9x>Yiusm%i$+&Rp_)1-b$z4Q(RF#T zk~$(hd!}nuaZT5i#qupz6z9~%iq%^>3g<%u^`%8W@0)*lv6lYKx2!7G%ZE-du)mnOqFb|5C9W z+Fsl=t~iO<^b3)Xil%GfJ?K+cvO_Lr?0Fho`2h z5ym643%$_AIHG=@^-#f}o=WVthL*|2RO9E1-)$L(OpPl(+w}S3#Z&GnzARe?opCGU zhx%et%XD<$v|=lCc)4*}kuzfpQR*yj=>X5mi*=11g+NEw%_xrKnP_w?=D@ot@}t(rw<-Va z$qfIy{MHiZqqEF3kBBgD;H;f|bDY=~Vw@81Og0WhK7w%)7$)bz3dX1Tzx)%OSz=fJ z2nK6nAHw)Y@@`ZEV-<@QgLnu=XaI(EU6}vhI0r_Mw_yN}Ujt+RuO=JMR{Svxv#NxL zV3ZF7!ybai&wU_1y-&m5a< zymJnW&=445{y!HFbLvMl{cph71&lK|lZVpO95DosVPJ%Y!1!xmtOCZ`b6|vqzzFmI z$MCrHBRrM>BL`jL;AmHvr?*+mnr5crb>xB{T#^nEyY9$CQuom<5by zfninsF$}X}2p+@02n~VpDPSxI#%!D?2K)I;WT6JRu#lY)b87hr&U3NPe!D4eF^<&# zXX=w&F@CV#p8fLm%H7kE{VRT@*T2MX4Zjw0wCMUX{ih9L(-Q2JVQ+{DKLj}}^=&fk zkG?2akAwm@YX8Tvwr1wrF(>!K%p>Fr>~Q6$4jUU!u>aHR?(1aTult1J>>}V;W-%9- zsC|Cmbjg{1!6=J4tV0^d+Id%&>2RO7fWtlt+4`+_cDSg7ond3^2}3#*-5EC4oJiM= zLyvYB$}DnnQ;*IvQ|=$Zm3;zLf}Ahf=VdlKx#yq_ZO@GZ*K|v1|ISu?6QYy$J5L-> zJWygyHe|B~%NYgNEu>9LAIfWQAZ_eV&o6zmmVJcU-&VY&v=7g{@ApOF5*f8RuXzf2 z_LRSP=Q9tiaZPCQC1|DGzoCib4g*ej)M}o$XN?wga?2jtLT+^46JvWod%RAwZe086 zxr_d7;sx=_waI}VEbFv!$D``u|P22pD_|7!`n`v;QPvlz((XIomioHaJ zLp-aK@@w%aS038?!)<0Je!^B z@MpT*#~#i{nmbsV=z@6)ZH0NzsEm4)4+me~$q~H& zPps{-X4_wx;*6viI-lG=lKtyMv&=GVM|%(0FN+@#Uzpjf{FB;`wa|Nq z{2W#WUk~-Bp_zCe*f7cGK)s_ah_zlm?kSQBMm)&a}Hz6d#9 zANXpGbfxgYXADln40QO{sei$>CXH{u4_{UW{~g~{WZWEW%(eDHgNN`%EhP_HRka)8 zz4kR%XUL_xu-mP4yWJ|g4c>j2JT7avzQfgZ!fbhiG5xo+^V)*J|6zX3mR|?YLcz0N zbAN52lDcj9U2!@iSbJ2?@>=KGteIL(?B%stVhvuZhW{$ScaPm05EeV4&Fimn$=!_6+GTAWwM`UJFi5|zJG z{a6N_kW1w_XDz-Xdx7BdJC0xJ!Lj^G502s2h`G72!TLS6O65QdlHzy<<#X}MMFghnqe$i@o0qeWr*veqfqxPvigT6D^cNHe?&|)v0 z5hG@UvS(S(K;#e9Oy>-^x%dTdL;wirxI7TJ~+#^?r1~t=pmg$J;Tb}dm zuy1CFkwABEiiF*3XCN=}TUc990fTc_nw=wW0>3Q2+%yT&^M4{UYeHtVEY`+7w9)!6k9@3h80t zgMYb%i*Z-ZOgZ68kOh7jvuH2*ZAN6ACq=jO;T0nZ+{EF0Pg$9J9q=RZTLYR2K6@#S zRmTtK2XU&7_vQb;;$)z^w7+s~iuh^pqwT?Z9&1ohbZsu$3~r3QRiY#9udtz6DCAyK zFFslp@R4F!7Jyp?^c>`)iWs=@o%(c+`fgI%53{aTyQegkOa3BO$`8XAhSq?s*RRmp zRm~)x#ad%LyF&Wxa^x%$y9GT;8F)(c59*jUz^m{eCLu8qPVTf>8gs?7;?LUA)Md*i zfoD|?oVC`>zTOXcmc7$4o?XG1-CsVyi=y#a)(-+Y&pFCELtoy^ID6Hp8L&*CG!_Tsi8D{(rlcc!^M_`^)q2*TAp8=YHPh?33i# z8$6Sa_$S&d`pOTW@2lz80T>>-%=^tq)@P=7Dt;1~>Gc2i2mgMuf$>A%Eav%C{$Ikc zzL))A_io5;#co)1-!|4`tNaA{)R6~oaeTZVPuzg*^Pqb_&+q4apz=&dc0>}N40@s4 z?slJT=KLb}v3xgUNZUl^%;a1s)~&GJz~wu>!I_AkKv$CII$ORp<<>TL;t#6w4Y%E| zcE9aLlI*`l{$&$ZGY(+y1i6RPU+?hCY0LHXXHM#@v~uEqW)cGsVXcuh-0b2E=Lg{@ z*qq|L5bAZnZ|fBBjxESmo5WHkImc+4cC(;roJ_%ceoWv*0RoP&n{@L^53|+J-dp!nkn<`Ek>>!8?wyc+~riO`!BH`WP$!i zE+dZRmrnz>QR~0WSyGj$TH@*1JCTN7PLo@{aby0h6U`=4oavRi1%0`a82<78S=KC< zI92|*4QsRWXh*e?beHHkIgrk#qpSz4&3@wtejLld3N zm+*R8d}Go4TjRk3G~wKC&vs9vrisWOfC# zh&Y>$>zQI&=W&0_vlj(%Q@5bsrp&m=T>+iO5Z7pPPR8X2x;@kB&ei?k4)2prQ+5~S z$B>8aApCY=tSP$|IKA*l)S)kUN0?f69`~weEpVk@n;~Uq zKiL()(7OcBFWBOEv4=YRj03fcV3^N!Wlv`|d1dJ1Zlj&^r$0qpW|y1!fz37F)%kuY`f45V0M(h4 z`wjc-yU=v>e^-2fbIWM6`U}~E8ONMM97)`9!!Ou<-d*W`Jpa4c!;H@+_huA(X({7I z#6HaU*$%uLbJ$j+BX-|dy)$FCyna{a>@SzehEUuo?GbKEXlKN}09kp=ep{GZ7uvdq3&?vXq7R`fm39-4H z+-zXZNKxK)Je?OA0gtK8OuF=m(Svax5T83r6k1A`zzEq^7h>zausH?C_oEvWHwS)&r8Va;w; z^_0Vc-_`uukYpnF{i*H-1d{Cc-q-hazkk%LyQ)r|^PJ~Azs_@>^PGWUa`HAQes&Oi zNS2A7w^OfEfIg6WgV4?xVimV%8-iEgInuP+;yfo)KRdrk78bf zJk)qBb8idBqbD2>y~B>!jSqN_ax*H2O#~i9=5byOaSgx_=G+bM4b(L<&iPn$fzwcP z0sI>B7d#d6*DdfDJeDbN22_Q=!~=2X&S5>{o8ac{v%@%@n;#%f=YiSCt7$<~aUkTa zOTV<%6aTNxI^H9PlmE&ydph!<78;Jgx1xsyMnkaNnf4%gChuGBG(5O~a*ElZulFxwzI`ioRb|e6 zTXJ*20b_@$2H$6mL4KcQg zk)BOlO&2gs&8`jcamfj?Msfzbd;b}QoBb8kDS4mg*DCb-UHnQeTudC3aJ_>6Q;{`Y z{Ek5%=-ugmh5P_-9hdaF>br0%IU@Pdyl1V~vKcu7Zlxzgck_XzB160%8anS{S@btq z^06n0EoNS_79QO5p)=jx-_Z3jH)aq=8_Eyp4cQG(O_2P!%yDA52INO}l;(C?`H4XI3abl<)3%`Jplqd*#btu#fzRcyVl-bZNeYe55ZCBX?ho z6UvisFJYV?v!N$w1DWz|bnCZ~EBbvfZZ$n<;4|su{BtjbHlXb>cc62g>-9v_+Gk)@=v?i`?K_9nuNZRnrgq?N-yOnz zCUEC%+Pk#Zlb)1r72iy9QvM_FN7wRggJ_xO(xGFBdH7pstnEJJ$}>4{9etM`72Qj> zo)2yX(>WEG1Wz6L?Ih0@@V#IXuPG*O0d<}T%hbPG>xqY}Fo@3t$Jc37ZL7_-w~})P zn8a^_BWxR-THxc_8KZ}E{@dsa=NJd@1<2;^xSKPJu)EtIy(h?Hd+VGu+0^r_hJZ6* z{d(ih5hLxCda!MCz(js-Kf?IP?@E3uxA4h4_6|DFbiC!jz8$%9T8@6JZ04(+^*wqh z$C%ZiM=!21_RnLyYOzay^f_$NEb>Zg!&b_dZMq_jJ{-^41Ud3a(O#!nK3~|tM@a4@ ze^sVzyY};ZCGd5EGwENAgF!r7KkXc)uAJwlFM@$neubB}TMPsq#UPCa5p{hv+m_9vd-6Y};z zv20`NtfA9CfL|GWYCbXwkM~&eN0)8lpPHQ6W5Mt6gZLgf=;9M}7o4d)eAvW->0P$) zqSF27>v{uQ7+G15EmaJ8_qx(QVhe|IpkfPm&{xA?K5ph*>9eX{!Zz^+oQ79wz?JOS zs$SA_Y~ekc*GMmo-KPGJNWs%CE3BP*uia# z-9&VC8}B3|LVI}UI{LS+)cgbN;o?faz`Kdq6kiMN;g$Xp>K}jxWOt-^XBB&it>N5Y z{->xz`ByWP3FlR+pL@-%^quTx$yk*W{3>%vN3SbhRviPC@;3b2&b@NIOP6H~&dlW5 z)V;_c_*(UJP&QIvj>Z3oF}3tR3XV4lzKz07(I48(C(viYMUL^={h@Q+-S?o=?)j+O zUZAZ4vX(xLDfGH++_!VDb6%s?I_`Cr^pQ7Y2Y<=<#v92v{vr8-3M>89)?071S?~`! z>jS?>pXpsypM8)r3#>A%PuV@5`dEWcPxLE0I3Ch7_OCfPh!xrU4DCjsN%qZnQEXrI z2KF!Zrsce(yf=C_5BPK*LK5AqxiG#oPqZF4`iAFXYf660j#-_P?Zp0e6W)6iUpwb5 zAKmi=jK87m3UHV+sE_`soaWcqkDhou%HHf1jOnc=JfCX_&H@jyoa4RoU(~V00*5;G zpF;bSGafALPs@qfv=i=s3-6;yM&=UcWl`H~sF^MMbLL>s3SH~DJ)un7^`Y)q>f4M} zys&flL>tSd&r|XDhOx`&De;2%<=$~QPx`9eXb8mH(q9py$G0aSr}_UhHlOCo@MuXo zEe&kKZ_+A^kb`feX{Pcd^tkdPbIx}to3N!G1Yh^1iwzGR?F;tiI_%9=)-iiivd>`8 zm(CY!hi0mLt+_1YbAS8~*qfTuw%k|YX?R=xZgVO;%|5-35DzfMX zc=|-UGs8RCp8c`1?I|CFY);i{(|_4RODJ;*nV)6T%5Kc?yb1eLyxL*I$IeaUX@Kwf zU$r@9hw6LDw5jOZHvWs3#iP=V&3k%7{uRGT1_-`U<4*WxeQ19kwM`2zc{xYEhGo&? z?NRY-)gBeUG7h0VDn2!wl@m0F4eim&Ja%<;9$T?THQ!<#lovx^Ni<@|T)l6)<3XXmg5EvBFuor`cH9kx@)RI}Sl z8OV6(ak_E2-%dTE3Gw9kzjff(n|#s29CCnY9(c)p$Uf&|zVO?o@0+@r-{;)c3cqR| z69xa8WnTclAx|eU2wRG!givUo2$0 zXnztsB3jlS$#&jLAFga?&jB{+N_^L6vgaU0`IONRG;di451`NZPCU`Uz2;~7zl1i= zMc<|P-^zXj*@PLMiD%TFbXdY(=O+hq>_@@hzP?VV^(Nmj_7(s!bT zQ`u7w@J{yBw=4Ekfw~-MLww)CJK0mB6}2TBNA{F#r2@|!)z7_r*!oWPlk6##Qy)}D z_LOK`byUk&WpLG=8Zh2%PYG7|DUhGBDuX3^#S5bKx3R0_&s$hiwx zoy6^k7waTf@#+0Ozs2(vo9a2_-S*wYfnYspP8mU$|KGH)=0gXkvaj~SZ>zyU)xPR7 z|G0gHJr>$mT_@OA#C^QWz6$3}75i!d^l?0||L@pW(oNwS0y<583HkH%>_oj5+L{&n zN_z5C_EmxJWM9>Y$MG*nSIE9ny;b{)xm{>q$)AdED=0u)vaiIu@@vSx8sM3D{6zao za!&S@cuu@69zEW^()aT7YJOCm8);soxsUi$YX!eHc6eG-klxDS)5n+LO7BW<@BP7S z{_}fJtGl-{XG*fBpm#ax4CcPF!=$6NmarH5s=hGB&2V3xJB`7wCVNb43@Plf`E?eyQy5t{MU8+;| zShc>N|9@<2lde>m&eCaXaq62=DjvGU~O@VvCE1L`&^~^g5JlSS~W$Ny-eb&a^2z{9JU9#m6efh7#Dw!->Td>Oa^2cD+{O@>J&&6gI zd>SK-vFwHfKGrkIHzJtE407%mzN?mK*=`nmpCO)EbC>M}`e;FC_KuP2npp(Af0`K!{UMAUe4a1Q4q8WT&c*yL(cc8ig9Cboj> z##;u1Nx-l5gIM+&w}UzrD;cvs?bhXb{O7yz@fNpxXJfFaow(_gESDJQBJoQ(E{n^c zJ?dlyL`iFR5hzxs0Fl`5jv3 zFQ;GG34_5W9>Yi8OFR?tiS)sX3tktx82XH_ILTVhqt8PdMs9_FE9LdRfqo?@t3BUw zhqDZsbN5q5&sR}K?^I6jROXkwUrBqf<(yK2G8zYsoA%tV1nz%n8aJ;#55{Ti{iv0)>7g!^Zy>w zBruBaM3YhQ$$9OJ$3hSK0|zf%q`l6K;4)UB$*$}MUvpN=a!R7j9OGO^n~UJVI^Z^V zF8=r~=ipZFjm%)MgmKaH@9;bVy-kYt1xK9xt_87t5YMpo4{htczLD z{2|z?Fp1s-;~?=(QE)W>OpW>C(s|H{VGIWI&nz%ji%L@>#-0rHv3w?cKeNXj&$Exf z_rz@Pkq?(xuvnX&tN9qTr*qgY=ACs`IY)$YoGHG{ZW%p9-iw1R)MHUkoZKjFjF)JT zb!We4POn>M^`a|@>n3h=_vhET3n-u4Rpzg(4}F^W=&=DKI-?M}R-T2i(8+?Q%Y1hQ zI6Rkc7VIvcH{p=4OL;0B+7S%myRpFWKhSrQ=XC}#sjlJ2ip5gg-RLKB_}gh?qo;ff zV}0dh&s6FVK2*m$#IF;Ba&Q69#ha>M&kytbDav;qm6vYpequeQQPu({Z-JYc{5}EQ z*1|X7E9hW-u*Pw`OFo$Qe>^tt$1>17^}Pc=Y=eEu=o{rMXiK4U7@r2(6Q7~qN~@3$ z+Q(aya=crz%&mDZ+G+qFE@xav*dH3V%5gkbgyR&R*-^i>F5>2`KK!nZ_jyxsLRa{Y znY&!YqT(lMQVgcz5_LAA;?Fr#Z-1=?et|h=l0!=6jh}h9vBvfe-x$n!b^g5cjP_Np zp~`X@gtK@C{>rl7!Qrgm`UZFXF62IAIvy-W_XY~?|{CY(s!);y~oVmUfkLp=$YaxYMkAH>JV;g zfkpd3&}$EeeqGTC`xBPL?g+rij(Ek8Z%uHI{T2S#8iD9r`Gl50H#&RkD#lCvUCaOXRm#Qq z-(LA|@W1iVif`w|W@G1vrWpfVom_(*(~JdM$+Nz<*_iZxa)xn@wKw~d?VigyW2Us5 zm{*9kL7rq4GY;?@W&cC>Tnho zk9)5(#*N~O;Avqgmr70`@8V?1^xKO3FZS?1^jX!%sV{1!gIF;gM9g%k>yn(0h>Z%L z_cE6$$Ab40zW@xS)jZ2_g}D|vmplrsHWEv1q>v98NYqdY(yd2!v z9LM+Ya&Y~`d8H`1bYt0J%8l4-_re#4mc3}cmM9U|2S zE{ubJ62gOA1AlS!gZ6?*h8+f`RYsrxVcrXuiaBp5-Z`9yp{tc+)26OA@Y9->JyDKp zil?>?pOi{2j5&m=|Y=!^el+mda6Ij(Kw~ zn2LQOe1>)B$S0NEdU77cEArmOoY#B?@#Cp%AvpU5>hGa1@KJoJd<41Rn$?as>reZ= zD8AohmfStG(MEe}ClN88jAYqINEzjrRLmnZw(nQ;X9~74^CNO9p|jCpI$N}nGRko* zdj(w(t1+F4&B&o?tcf3mH4Ci8t-~w(S%)H@q}HKYSchs}*5`FxnfH|YYF3s!Lie%9 zlfGlGxoY=)GxOfKq7$25bT~(>%bNnd2!7iFUNaZ0h4!>}Y7%-O&im_uQTg+%%zD3> z`mEy3e$5bd=6JuUFk)uNvA=1ZYZW&HQyA+rGRx7EcLh_(OIMd#?#^A==gy(uR~Ma; z@yP7wGOf^3-c?%@=B+Ka4X%=WBOM#htQ)RFAHN?s+8KAXWyAYzCNxzYr&OiyE9m=* z=fb|9t-ephhsF7;>U$*BQ=0T~VpLMg!PCw3y{q&p^d{K>kKKPI`PyW|-unZ|lf@+~ zv&`?o@7`?!w|GmqT}A!G%L%vVRO>&xT)*m(t;3$MhsQ>4EvcUB_o{a~b*NAEyi>p6 z(}_mLje+YLa9z{DIrZS6MtxPEcVj~+Z>elc<&H|)uBRM-&=~mQECd_6$dI2*c!Jj( zg?DV9<>1LEIwj#s{slV)uHc!^iZ4H=zFk+U&)|Qxdrd2I*JO?LoadbJb8mFU$5Vao z_$Fukl8iGlVfKLF37*NE?TQu@7py+1FT#oX2Hr}XCwK7ZIDoSdPxHYOd4GkcStsBr z3Cum0LodL6@1Nwo8r8>ou3#6B2%h`S$6ljt)-CqS4phF>X1-G%sw6ZfywpNt$U^jB zq1?v`J!l=s%CT=#W0u)EeB(oBhw-&HE+@Wr`PuFiXySeI%ly!`78@6up7UwVZ+qQF z?$!RJ%lo|XT4M&DPM!&tcy8S=@t;kCTX?TyJcN7Y_7VQW{gCt_Vhx02A^xh46S!-V z4iWFika^Yorm2c9P(D1%;5=32>aW?uB72fECl4}rVV?_aRLWJ$7>xB>m2$%Wtcy7N zgiCTVmW}!`YgY;S^45Ny@k(pVC0{lNapY$_)#EQ~B(AIR=`gNq260^z>m2XDLpPT5 zX*Fv7#L_c_Y2z?5!Eqq31_A^3ZxO$$4z5<12hG7{hujV6X>=Pl9o6zjxt%>pcr! zQKPliuYW|aEGo4;u-;1y0E=KS$pxuz6Z9`p4EtxPe?5GAFXb%0&4wQ!TNhE zut4{5V{karj}Hr(E+1A)+;UCuU|-zpy@#BfHD-^0|7m4ddgoFPw$;NQ=%p{zgRGzD z_64b8A8U&EDg;{**i`2M>Lf>^>byX80-KG_oJL%LVP5ZReR636_`###w}5{xWuAc+ zW3*EX9nXH0@rP!OA;lChr^~JP8Vb-X@oI;=pAGk8ZKu4-nmkh(l}|yt`O0&}wpE{B z%JXdHxy~T0K5yfBSLJzv=c+^R;_^Rz{JRHQXN?{dFR7iX?RE~|m^QW$H1=tD#KfMc z%MtJ3fGgzJ5}y5V?lj}6%Jl@l-{P9ZrSmWIO8I z*V8O~e3d+#Oig2~3u5Dz<82KKd4X*txNCT(Im!G?{uOw8_k275Y;X7-b3+QIam#sJ_MpkU zPPXBfeib{U_9O$Evm0v2NmwI0k-dsdI+vwhx|DN2JD{^j@khZGb84ACat`|YK2nOB z_}#1@1xfOUM;dcpw6)t?+6a9iheTg9pfC9qrROc~-}%tEk`eF0SCA^jY{NZ#+qjZq z|3A+Ajtk23wsKxk>{saF@6H@O)R2}>q0iSmn0fS$2yKS-(5~u;IbOB*T{I;BZyhu&I=Gj;0k83mZ2DN5b7p|;k_g%Fc&7G&vA)@1Y%({xwY(>% z2sk9k&eU5bzIEdY*jn(*vPzJ&6u6t(<=* z^RZYXGA6_sd#sAszFFF&U7PmWXh(VZn7|{ymZD$juf1(}*#YD{^)73pUdef4I!%i` zdMo=p*+Y#vmFr>7!TNxWAD=oC$ix|suJoLmpg!K!?405};?c_YPz}JDkXtu8Kt-Gm*y6V`op}OMC6IIu& z0yZ12z#f8b7rx;h~gN~Pr$nT{2_u`57 zzJSi6-fo@=zr>vSZEBPD3bjVPdrKppwRJf1iybGTj z@ZKZ+fo(ki4LLs;@NyQi(NxbkBl5G1vAZY0drfh3+wc_Zp6e6nU38B0 zu7%$1#wTzu^(a1WW-~a;aTSp3C`iOJbMap#>_uv z2>z9f1MAh1NqwHRYzR3dUdEO%2k<`+kk@`7_*eK<@Mg{}%Qzcem3;fcOwKf}JhPC+ zdiGhK85VNe;*7Bq-hEo{&?!0af$UN4tAnyLiCZm2GtR#D%!XI~9Q!(cLOa*;o%Wu` zj9NctK8GJ8M~+?2@5*w14D>SHHhjgN9xt0DlkjI@Upe02aE_hik?`gf>FnhTr7lSj!q$Yi2N*MSIvKr8sA!v?B+} zAL9N~*(9FIC+;fFC3eWb{f$#a8yRfLncv3l> zQsCK057r=$>$R6h{u_9p{`s?&OJ8dWqlu|9z*#JtOW@-wMFDswxVCDTkCw5u?(9PpHi{U zU%CQ)!8yP-Vdn(~W%`?_!iS=iHX~ZbcWo`N+St}jaTFeJqW9ldC*P*=2 zAoq8kv_3q6_?WqWv6eXHD_Bp+`E_R^SHSCx^Ls)W6qyK&$evJ!Q)gHg^U`=`=c(tU z_&=NMlz-pnhP)p5=-&6@53S6#CDT+_1fM~*zIlx8=fRCdoAcwwo^$?Y$oo(5qrJPg z^Q*az^2GmT%-AuVXF1mT8 zM9;fd_-A*n@r2{r72qa~oZiS>I8(-XSTC`3@$AmwPd~xACCJfF--;Z)m2*onecr{_ zuEBP`+_$oy^(||ee-ZOR#R|NSvsds%yNx~4ZwtLCpQR79p?W8Od9ByUbB(XYHPXF) zWF~Y9?gFhr3wO`r18O(uXHNY@U(m-^x6;qF#{TZ%ljwGx5+>*Ry)u`fq-dXygB9VeeT zf!_KcvbGs|+`D1O8;CmIeW&F@Uri77w&W@{3jGW9EA_q*H9po+P(Q9MO@l@{hD2-3 zBVE=SHK2_@5^rJbthn_hIowhdumIz z(b(de5v{R~F+S|VvkbD1mu!pk~i&Y zbvfsLWK+}%&y<}HES%ruZ`(D~ZD7Afg7rGi=pcSzOR%Vgd;zS9Y>Uox7q#$?|Lwq* z!p~Fg-_;(z_$O;~;4j5_BN@&~NSAem)<-&kHKc=X=Ox2(_Ay`FuklNCL#s{&R*OBW z_>dCC_3SkxhloM`HDprU93N=zRG2X{%)w$0;fE~pE%{v+5l^15Z%0pFUDDi2I9EFj z)UR_VLL5+UC;mF}`;911f>|rx?H)I~@^>5N;5mz2&>ya994iJ!+-kSx`^&&tl&c8)P*Pcw4oO*7`TvQEb3 zo?pIS{vyYP!5k=FBR`upnKM~Wo5tE%^EBhY^l3)1iFFO`oB4lu>NH~~_e;*0X5@MH zLp`V5_D1{&TyfqfCr>k;nKaF4=Xc)3X~t@9G60f_@k$p6V?1SUInoIh*4bDeC!FZ3 zx@E0r-_UndC!GCIStm#bnCUD0b67`_ysldX-DUDY(}T#->~T6_2>F-WIlN+fOPDue zMV`D7`4(~mu~zVzzOqip-4M#*_u*5NjeaqDrv{zSbf4p${>8FBn1Z}kz1Q)~&Y=tL zy?sRTQuG<(2-$olvOv1QVl0RqDC-61IK7ar$mERl!q(xXC;IoK7rwUsm|j>`)(e8E z3B7PBZA&*uHwm^-uNTWO2_C^Bm|D~2_?&-%2kZ>ImA)&OjZGfvW21umB5-Fb@Z`Wf z^QY?{V(tXZXznyyK1(QZXHFR!C+T%==hZRp^&`u~%9mX13 zvI>{`iEOuP4K3CB2QXY6%1LN#ANB7>X71+y?pkC;T@iVMEDYrhd0%AXZccikypgO4 za~*KzI=MW28#{aa`+L2GmpJ#z=N`A$4hxkOyvfH(dpw#3mAhV(?4E{ zm^Ztpr^(e4O}Mf#qpZ)xS)Yp#=VC$I$>-O4M#AyB7p@7{+czihKbdRb`>SXhdQ3at zoM*B=XXL>vc0#7i%g-*v7p8NHY-BtA(E4~S_G_AcXf7A~=~oIF;)5M{^OOAk8CMtA zC%CTTx|XYx>qg#R$aRFV!bh&LlMPTmJZpOJPt%>!f%x>`K-=^{cDvSi+mOpz$Mt0*eNi8({fQdXKg3yDLz)K~2L-$K zSH$i9upi^!)sKE3pF`LW@Z#-+UQLHJp&apJ&`~Y@iAuNQ2ZaHb?q~7WJpBYPN?*iH z=V|dd2IwBG4R_*0lq{KVDTc2b|JKft=9%E!T01PgFMqJ?2H{k=l)tspseHpTy$`>0 zc8oOb6;7XXiM0ytym0N9F_PT)H=b?#4SPPJ;lE;TbQ-^(;#WCvf5{xGI@b?%nt@z3 zD{`PZ$M0m0&l#hdy zLvS7V6K!-Le>Jze2)wt`zw&%%VM+eHwlsZq;X}&Ci+2yN+>UL|S!%M)&y{VykaIu# znC}p0$@!gr%XZ1`u9DX7tjtQC$q>#Tr*47vRyg4t=d4cjZ3Z2JE|W}+=k6X}@dP>? zn_oKoJal-=5OX7ZwPx`$zx@+yyo=a_@IKbjV#NV>3c6GEPQGw`xgHxFy6C7P=Z+N| z?^@_Q8W|Xo{V4y0_8QNlUlwy8lU&DIkF=a+KI`avB=hZpXb2lCv&?U!udVdC+}~5g zOq4cy9e1n?qYaqIyLqq!*{u0nbsoa{iT82# z=V%@>`L{=&lujUD6=&x%|FEw_eq2+E%_)rh18_%~s}m z61jq(t>b&0A+GNe#wPqP*LX(dJDtxdp5#2>rr)vGLjKDLIQY#dZCcEaa^>&h=4RTZ zJ=%)f_XWiMH2swF^Uj;j+B$RvADY;p(noF3`!mqFU?q04#2jijcziaX&SaJxp}?vB z)zODAzgz{DBy0KdUn;(PKXvb%Ha(P+s$1tfUv@Bd=uzq&qRkrnGw$(i8ss)^gNG*5 zwrroOAGPr7BL@{v+RJZ9SJWlCYJ>KU`A4uHEPO_%@CHu2CNpzlT0JRUf{tK7d2XA?&+S1m0Z)O}@*&MBk3eU8CY#J#l>p zd-lRK{llKEX-DoNXC-r6pYQd~>O3ZMtMYaW?Ve;aGfp86f1hku8yX|o%x{vv>r=pt z+zlf$0TekN#j~<%B^TY+^=i&v?bB^Z?!ih!9 z4zxb2^1dqfSMff<`y8+`FLvw1pV)+34RqW+Z89&Ig{sq z&-2whua*+FCw-cXHUpwP#&4CV(bB+9}{$_rS zbUwIC<8P;ZXsEuGxCymWm9;-+eF6Rq>y4>>a2%t~HewUhR_crRNAOuF)@TyGDD8h! zK462`N}~Y(oA?HyjTU=DpghA-t?g0I&dOSMOyyGUK63Hz&(CqZ-QJLgANxA|WTm)Z zrtPE&Z_{V(2TW$lw#Fd!6^so*&c#pdIuY%w%hT5C%!c5kSRt*u&^PU0wA=;E^~DYsd!k5AX>d4(=LU5tUO|1)xl(Tyw=#b0hYZVY z2oA9KrM<|W1D;7XDrT{hHWc5}Nts5Tw}~cgplU>%8fTEE6Fny}p15WYK%?bQx^hk-3TmlZmD(-qFOcdci_a?X8DS>adWk2Y>f^D7^ zo=3l5{)q$5R_bv*BjuFR)Dy=>OHqg7N2BD5XT85(Wjg3bfx6<<)jovZd5HNFb@lUn zfbx0zQ`Tkpql#OGSDqOE${In(8Qs`YDSx$lS1|g6ait?a_;_hBOUz2~v+R$^`7^NB z>#`YFd+KK%KyEc|^!l)G2cEvtjiTR^_}JU%cfSc=&M|d^LRd{u+e=x%Xnwj;Va(?P2)=j7JSqX?}#Vd+nw88?c40n^}Ad8THHjg z$4x+Q;(xHaahI>$x*!{AZGtcAmCEs2KJEIk!uYEy}r@gAO=L+DwAN&sp|BS^g z*iY)W`mcVg|0}I>-&fH0yYwFXFQ<&=*gAVy`*^h zZcPCneUXjz8hS+X!60r~XWCB#KG9^A9z}}<8yZhS(K5Ty82-Riqo1`All>nFYZLNm5%w1AxzI;>Y_J!QT_(C%JZP5e-OjQbj7ajb#*a?ocDzpnwS@UQ;uXFmrkA7S068Lty_ z{(4}vZNUa`V#CjD3MP!JFKI0eoJH{Y)hmuybphWVKbdaNEw6=910Qg{@*1wji_7D^?*;T;(Lz(;6g)48>TouQO`YU%-7UYe&qX z>(SL=f1Y}8xm|-eB@2EMY#V4_`>eYv_Kjj(6t6j0DXTJh$}k5#s2FkSG3}@5Cy#Fe zen?YRXF$(Np*xs6OSeUlIZt7Cm37-r#yeelAg*|+ABW|l){o&&E)#o@ajxTew7u7> z<#{XhDsHk7yFFI?aWJ1gZHh+RBx}WqV%dIVd?uP1CuSm76j!HsJDu;ekiNPfq>mYN z?T};`>y_xccFOGKx#B~0FWaujz5XjMjIs3^pu@P?=hqg0K2pniR>b_-NW|S2L=0kh ztbIW&wJ#V;thLeB?M3mG#my`H_yXd(QX7KPrK|B>d>9&F?fBpoT$gj9vk#`YKEy?C z%!8A-kkTJ*bI*TEEer;(2zWEqqsVz;lAK_<8FisU`lmvwdEa_*88E>(p=YuHuCySHDX?R91c_?dxb5 zy2*_K!#aF`g6}o_cRH)sa5s}%jj^$Sy`s;g|HL<1%Wq`f6vT{&rK4iZU6&Z){@)Nk zt>O2Zg4*KceoN}^5Lbh-sN2JL-;NsV8?&2&ZLt{bEiQc-{Ao>D{n4BT`L;i={@KhC ztlQn1Vm~^)$BmgUk3@_Y1A{ok$IWtnE}gd$?pWH;fTU+X4Zk~CuVv=#hJ*ly* z_NO{#*VCrPtD#6c@SN<+Nn9<3@;I$4==rs!bAV;R5aX2D>D61D`4f)S)uk`<9KRfV z*yq;gUT2&ZdbO4D8I$JQ6m(F8PqR5!V-trK6_XH2U**Sh-yaeEYHWmmjg7{rhOr6P z@c3>CW2A5Jzwb#@T`ZH&9U0qdL!u}h3 z5p)v%*dBikV;*I^HSS55bNG;BoO6T>z-A4{e53XZ;S(s2dF{dv`=VR&Jo{_FIcEsD zHP(7p>kwm@Z|S@@#a{^@3Hsk?Y$r91$Lm_7>07}k8n2!6(QvFJYkDc8G1L4f=B#%; z@F`tpq;DYRa!p0^LyxPe-@uKWfJUD z>adtg+G~TT$vP>|p5lL5ugi{0m;QbaD**UY))z)amWe%rTu#dFnY{r%T3b z9xa->obhbAxUAD9TUz-xoWrUN&-K5J|H;aK&Ha_nY798|-_hqSDeR|;K3~qbJ;b$? z>w2ymxjx19Nv=QRx|i!;xfXFTZ#-zC*QLL&=F*x)OX`?j7EQGntg%2Ntv0++(aX}^ ze@rin#${)a5ApZvWs}&|s_Z*nFHeSkTvPe8i8bI1*Tfj^+qMN&T`hjqJY6=y6ZYE4 z(8ff!jo*s?9!-oM`V0K*2C)iS+p8^J;kOc_)naXiha<=p&cl%oGPecVi?8}vv)Vr? zO&^ilwd5v^8*AKy)T25Y?QPh2o3W?zuIkV?$W3@^iOvjt@>}9H%7rq6vXVEglv8e+ zF9Z7{!fPd;isZa(iPxu$9{L*3HSR~{u(L0ye_*rcz@H&3$kGJ3Rvgf~%1K_cesRmt z_uhzI(%{F&EH3>G{;3GR&+;4PcMHGL<<00E&gk(BNBo1WX#RMl)>`LAGQIvj<#i5a zbGmdPew>_v47D|XUgGt0FB%talkOU`PBI!^SMhdiLTF z%f3fAlYERZXP3;?x~OE4d_@0~Z?r#5^HyYesg||FT6_?)i?t^*3eQygTh&dCyt{yR zvah7GqAqrlwILwZ!^Z|6sYS*`GTnY;h@8l#QzDlF?S8_GJmth3sq9^fu;@sl^_@$-&>?I=!oMZ@n=&?RbCXy!A%%vTY*?)=a;ce(R0;{_;7bHMxFo ztfl#Cr-$F&kEEcxd21&(AX{VLBiX%ng#D`F8KaV`S|c-y@&PRLeh5w!SET$lQMb<@ zgKQGN3r}N>pN`ZPe}*pJ=tmsRfkf`rKTu$=0((24g)PLlh#nF{&_Wj9VD`r&<@mL0 zG`{tJnf=}y370WWN%w*eyE?|`U&c7*ZiL3ur5m7yvElfB!uwBjv1BT7o$j%5-5ZXp zbQ$Bi$Iy4sxonj>XktWtqhF2qfg{d!{&Hwcf-!>Ufapk$vT(h_i|E9@k=GWnO71sjY zPi{2aN$f@hpAmRXGEH(%a&2tp$0O^(kL(Q5rsSDn?gkIwHp4GGD;txw@jVgvQMsmM z4_e5SLE<=-<1U;(LIVc=GmGDwz`=fEMnb#MUKWnW7wqr7(MbOGO)(3f=7wN7`bhMr zdNjY&TDJxMwYT(u>ZKmldo^`^pSrYeud-pCm3Gv&)-NZ`D90!LH_ARmS;J<3p1Cbh zo11!D+y{U;QEe+rTSvb~NAZ2S^8Ney{t>=UQ$}qq=lL(vf@(YHG*-x}!bDt^?znS8s2Z^O9?aD@G$uLdy;`cCltumaENl)n#N@S4N&r!q=;MWkV*@ z_=GbRn6t!-6bDb88|Iod;rfE|f}H)&*nh~IT4Jvz5j#_JAu(;heAb_Zwpfs$T_fES zOhwPDtt2>6Tj4r+h#T6m28U0Ii(b6Oo2xZ){EZLJ#?L_;YpyD{VS<~1i+ViOy?0N! z9i!MCygjaR9C&D=&cE1QX{VSA zdM;cOwzG@a8^s1`|Gf4(at1>w%$>nGE{EHrrH-rap~r-MPn43 zCqHuTo3e-VBct3$jQq%Wd=_KP{0Q@;CfTTEx?|t1yXEA)I+2|BL2x^ceYcPNIqk6a zl=B_$7cJ3}bJ~D+`1xolO5G83@F>s7(K&MNUSxrrAF09roV4;I*wZ_dgHUqEAjUvE z`0B(m-#1tN+TcTaUa>=Ec<8s*98b)NL%+4hc^W=bwUeMP#&Yq(Le};3BfkKi3yAr% zk{W~jh~OJL%-TCKE6EHv;64d#VH-vIY-~9>=EB?P+1lexpH(0J6aUe%j`y_-%5`cy z`>xMXit(aNjcH7E>zBGYld}}X-+VXr#(i9ma$%$#{3otmT+eagt3B9p=DTsSxq_2_ zfM!;quN}$M47{0B|A>k9V#rFxXSfrGutDzs8`g6v(~9pQo&#^-uFh~g^!Oo-kKzhm zyfhyu790B)U$V3Nb?(JeQDbl<%6y0SlhvP?IT-dsc#IVX%YCs2%Xo6ZlT{c#Dc+1& z#ktyxO5CQ#{@kaW(&6pU-HK@G{z8WXWN~R8<1vr>p_>&u3eCF2m4c&2>}WANxt%V!oMhfm51t#xeT+Q=S!oXNY

~lpio&+!Vx9&ZD3^8focvXsV0T!*F)zWSc@v%|&=Of|%f(GPOb|1Wje*zyx-S9^CUu^VZ z9XVq9y933NM;@lm(mjD4`q7C?p^kc!_FCy%k@=|m6}QzPK7(ArT z$5&vxN1o)Ya=vkmtwA>X)gbcMSNd1ZD6gX@M#;YyJ-y^wTZ0UABUs}(>ZYBj!Fb@u zxxR(CB=Tn{E@>ulNs&Dph@H`zUsvf*;Fmk&V_eI@hc3QzSvLWOsCBbD){%c+w(GT} zODWfkZ52;lgbY8eu>oebC zuhzHDa~tW`H1I0f^?uGyP`+EqT*uI3MC0A19_Qf!(tV-%tndKVsFC+WB4Fa%Cyvmf?&Rfz^057|WVYvJt#9 zp4xx4k#A3LHPFLXd$+R|iqGAzFXC^*ryn;{zUD)bLM2CqOO6WGhsKbLOtNPzeKwNo zk=JRjGh)mZEyRuP;KTBRvQ`^8w2^g;w6`!~>`+Yohg3gfVHC(w1z*q0;IHPgbBwuED;d&u<>7%YDXuXZn2qVe%cd5(A@kPqG)g5p#jxGDN?vW&V~;GuSVT{X2xN zL%&7LwQelylw6~{Pg;7(C?bno)(B`L$-R7e4thfN%VqdmSr;qS795X!B*Y1B1s>p| zA9n7pK)DQC9NMCe@XR;t7Wn09_Vnym+(AV9Zp^`8bH_~NG4u26zXnnFrIE2Nvd4XT zq>*}A~}805oL43o$GYboTup|v!P z3A`9%zE}jt)IcCTxu9yd{ugQGy%kz{4LSY)mR9PIqm??1rB&8diVHcOX8tSmvd=h1 zFYFh27rpGoP8Yp=2RyeIkoV9^E8`Z=B5y3@T!!_13%cRAEvL19=Jnu2{&knRypdWQ z`iX15xpPG8ZK9(_=%_{G3oU7#JYnt#7PsM>V@w*Y9YNPK$P(y4d#+t$Z6Lcx^b~Z=w_Q2yEcK+MgTgUpsnB4!~UiUt0 z$h(66C~r%n%b6kumxWw_hm^lJQ6PT=yeQj9yl6o)ime!+|FY9}{Kt9jPRnv*mgC*M z;{w)W*ST5)6m9N|%-}yf%>3nnaP?Yz#9{--_vc=El-EXO@>lE*%^X?bC zlaE~WidR&(zBBm#bl$(o`icoLALf0M_aRJ`HplS%UwM9*7`3DDR^CN< z_bTt)Q@s1_xY0u|^6q)w$(B70Jc!S#?fsnh&-4C~Q+)d-@1Ew};3?h(yi;za)u(v( zue^Jlcgs)l?p5AB!aKz|3LaDNxX0l60q^D8Egoz#Ugy&9i(ErokNkU+(aNu>d;Ska z8jV4&Ra{+M7S9x~DBD4LK=vNf17aMjdmRb^y2{^8?jYH3VXUJCFA5IDIhxQm@?Yni z%Qsngx|i6r-eB0^o)|+n)f4>PkKQ3>h4RDz%5EuilMff$C05`Ww#zKdE$r<9^^lKK zyn`RhVn2@QL}DQ<)mT`*Gw)>Wmi-6S*Ku7ok%k&Uv!Ked1W$UJIFDd}Vl#gAE*wxUs@jLDaY^JX6Woz7F3D zI>5XNxr%<_4Dd1V`T4|wPBOVK-heE>)*}WFG5rbl3~rx{?+7=*b)^Q{F|y1b8AIvm zwutl(HUqMRa>(CnJhj~o?8J7siVM>@1ySl@9@C^8E3cvJnhRy!FCV)0#LuLjN#rNc z`nS&W7*km4j^TUO(hmxM1EFWW391^|FjTH<-Cr>akQR=##_?RJLMzk z$$kxG)pk`rz0F<=`TFDNw(*R&?BJidu|qY`Wg(*65ssII?uXwf^V!s~Isa|z7%#nj z+4=vjyydFDKf^D3x@cohM@5!N=Deylz}ws1-#rk|6~q_#O*k(AJj=II4@`N{6tPI^ zPc8Sx3AFp%adpf~%PzbsEcbc^kJbJ>bzHgc8~x-(aJ(VfiCQUm6dxY)f%_S0ZmR2E4~NUGR?Lj5F}ca%4_!#t?b=v7f+Ye`-^pn4$d<<72UO zjJfLWQXDy_7?w2)p`UQRdeuqu)$x;|CF*>gIYu))q1+V8OQC$uaqRJC>Q@X+#9ZcD z2C+@VoGpExc|H3LG_P-+#k~Gm$FtHO_7yAGJsw{H<>%tVmjB~cqntYlpE-VmF3+I8 zdzmMUjw4SiGO4B@*iI`Q8AmP*%V1ux%vJkG-uv;=L_1IHLEcx~(h^`i3)!BsSdT;A z&$l-O)2+Nek2abqm!`~A%1)t-P1#n;Dc*P%?-ds*e+MyO`*v4eqAx%iqX zf6`ts@`hQ3kNOv~uQQP@`*LE&T?do{!(vS~i~O6D0e0$Xr2f7lJeU2jUsG5Y#-5GZ zTfD2uF?RW!Ep8`eZ!=?y_FY)ICTDgpGSbc!m)r(d3Mq4Sdb{h|-zP9}366s&ViX=M?;m%d@b3gA$zp!_{CdySivEF)Py!A}5c&;;Eb$`KrYsv)bv1v~+3QtkL&gIcNoBJoYSFDZh zWqW>$d#%UnUh!Q++=ua@+-rXK2=@;Ho8Xut_`unetl+!~|M?o$Fo6qy!o&}K4&U`M zw`Q?3UbeE8c4ENt#_4=>70JfUcP&QyK_dX+hEB@&pem)tt{W!$Y}ZV8}WIH-{*Hb-b0@n@;FzH zG3+cwiv1-k1FkYotoa9@^JY> ze+?L^UuWL@MdrvGe^G%k$vEu-kCKb+(AuqxiGdHf=4sADM6RWH5AU!}?|c*fy|;V( zI=2Qp3%mZC9lVPbyIu7yNermw*~(30A*a}*_N3xqB$pI>CD~%n03YzSNe-LlXIbw= z)<~}I!G=z!IV(`|AajFXo9rTIx#N9g(Hb|MhVH0K`W9W^WJH#_#pxE;W$v!XLT@Sa zMGJdPy-ma{`$S(suw@!6_Kk%Tl?VK-P*VEFwZ-H8$7X|VAS_lY^4m(WXn9j z{;%bXf%2z!S?sgndBk4o8tiXdS+%RNqvA!avxy$iGw9+-8k>ju+Bcsd8lbelpOz)Wumq6Mv`NzWI84s3!bGXFFSn;YC2 z8FbH(>8{jo+_xlEPFlr-zrq`7YFrHB>oZm1;)@*m9}F=-W7EwWUsF?1|zwypq}#4OjjV^|0w-RpV7t^2BPD+P%#kCP)>-I~ae4no zzk_b5zb?yu+iX6#mv3IDouq{?nX=?f+XHWxuwOjk_GQ|Q(bn6P5f3-#*bDpx%hf(O z?O}+@pPqX)+{18Wcq4KgzdGYg{u(cFfVH_PUlmN@gTN&9bw-vb%wS8Y(H%Ab*<_-VJx-0O7KkCYf*R#-U+AaU7+2iH(87R|I7q3Ou!O|XpfM~-ninHWd;xI{A*@^7 zMW+ZO2}#VxT}}9XzSZ4|#BBEWJpbqU_w)2qRkv>4d+xdCo_p@O=bY;v3I%$w>=m5* zHqSo%Udj_p`X+p-g^!Bm9p_9v*)tgl=8kmMx2hVEK`ien;0R?o(~J9U$d@4}>vM)( z?X=rWPyH%b1V{C8*`ag?b5rHH)9iLnes3C`!F!wZN}geqA)Hs9OY_s)&pI#9Ft8Os zUt!U%QGy}G{7fH=Noc;u2h&9kaETj1O@)UX$ns-Xgy}*)uo56UZOf;t1!zB0Xd~`S}Ug8)e(B%@<**5|v7cfrYY+3e zxHU8kd!)m>H{dTvhLbyq+y>9h9ouq@R+OU6IWv#wkI78vQ1 z{!dv$^}s!hwaW@;x)@%_aNdh>7sS+fp) z4?e=g=;$BWkBovoEY*p_`fg$lnKi|H&)*tkd~=oF zN`42Um@_nQa7IxvMt^S^@u#70axU^W(6iPv{;R1YjSW@=*seidP3HI>xpeWKOmTL( zT;c-!Qf0ndc@E`Wd|9UOFXi&kS9&>Y;YLv2Jj%3t}_bNf~3FXZ{5b!bkKXtugJw49ZtI8JjZA<-hz(l{PTJgrKQ!Cx!ms>+YEC9yJy30QRPOd5}CEloF8fs3|IWTqcUiJnvrTT%nf=i=m z`H^~XT4}?_scX7qGl4{x?lX*Ucv>xMEcOWw#?rSJf*8#`=r}n$?N)T0Efdjkawg7{4`x`eUt8FK z9k66Q%kFZ2n_i3U(g9@MSspUtR_W+QU5Ol+y0su46#qabAB9JZ%E{K6GiqZU)YVZ$ z9@}~Z{0gr%cXCe3JoZe{W1Isns^Me9jXS+qwC!tfc_*kbN5Y4h=#lC4_}d!A0O zWbCrDN8H}xWCu|D`i(1sWDF9iIa_?#6y z7;6rvdazqM`3yPsoZ@9X$j1Gl;qYW&$t3K2dkh#9uZ*^$H+iVi-aV8%@$@N199d-) zvct)8gZlrA%uljaHK5s0tYohmGWvYw4fK`KvJEc$C$OPTmhD$_*b>Lr9R9PjRIm%J zoMCkS?eH1oPGg5~B|klQ9CobZux~ZdS5zml^X0iZm+@nFu!gRsPU?$BxTfHf0WM_6 z^)9$jY<29ib;i>GW1`K%etI!B-|&i&&_gf%{@~f|dD+lz#zww|x-5hGcpijjSk!aA zYzE^Q|1NMK+Xw8e8~+X(IKLO0TgrM9*w_GL9xmI#3XXpI1pC!g82i<5%#EU>j$`{J zJ6IEYzLepdS>H(F6_;<*=GmXY<% zn6nSP6=!wLFBq|G@zy!ONBmsD_a5Mz!r5;RwQ%+rbp(4%l*hSc!I|-oLu0~oP!=>4 z^jngC%VqyOzSRWcTa7NY^R+qPm;M@$oxRn9Yzm&vuV;Q5(~CS;wgCr+fekqAo=rXR z*gNgJo8)5)FGJ_ge11c4KI{+3r}$5Gz_$$DfMluL5529=>0^G>9#|+>RS4NnGml8G zhn-SN@~QUbh}pCqT}E2I?`zTftSxpkUbV-gSZdSZx!?Q|v8$%6Ek5%gKA7-YtxdKx z6OW8{q8E)H?Ptvz+lFqLIW4!mc>Y}G0=^%ctH)-dhqHLuBeB^pahBuv#-0i9B!6^k zzX3iQX6}dqPY78n1RaD@{B0-ys_2}2!uM;nmRDnE{O}jSKe(z%AvY{kUnq74vQEx1 zQ)8f6&g>J-juXw6_*F!4bz`}!fMwO6#Z8}#KY(ITFOH(ep&aQmUmru84EjS?`X`{f zSjHbu>>Z;_i?N_>3A$b3Qot9t_t(guqGpO|@a$j096tWa!Rr#(6_G{P! zVZMlE=NG!uTGKM_jJ1ExQ=!NBnI(FBa3yD^z*B3|J^8k%oge;%XT0{9laDg5Xblnp zzg4umjyB_i(j?rg58mQcjGds4Q{zplj`G;fr2C4m^_2LO$`Wlq2!9%D)D-YF@axfM zMQ!$WPQx}D9wz&C$ynl(Z6odc>*uXL9Lx3Ys0Nm?#E%Xc{YNyX)TDdeOj`P|_9Mbk z#-QJX6Y!cFs~DL(^QtT0=|-8CgZE&pikHhD=G55v7P0f?_kll*d_KBT@FIMp6rV$W zAM)c6UDyVEPi^733b^Wx3h&0pA&0+753#9FKHu83^V2!!dn`JTu3V{YI(JUGAZRWH3~DUH z7qVO>7fV;#&lS4`Z-DE3u3NaO9QB!G{kQtcDfboq7_{Bcyu0@B{N2PiXCGMc&07`U zobzQbkspQns@C$_qE3Dj^M>?3;tLg8UFraP3K+>F`qO%-L<4_;b~!^=v^$o0R^#sV z9(+;WQGQ3EQl{2;7Gq82T9o_Fxs$PX>fDK}5Z|Nzx~fpWi?O@`83uUAHTMQ(1U@8` zqcIjUDsv}3B)gfLPTm6t#)=QggTn`*qmmDaXlBz3ZTY3(qBe(&QJzEbA!(9Lx&_|l z%M*oHOSdfFF7;X86!yGQ>c3g}kk&c8>nBam*vm%l$KT_c-136s&BgfyX@_LVm2ZjbS{=oaKq2b2&j@B-QiL-Hnm^~?c45Erp(c!l6E*@vUg#0>pdz8)I7&@zf zN7I((bKf~{UR(X(mq^Ji!t$`s{$Qp@#p=A?c-a~FhnMe4RK0B(tzg^?k6wv{D%g_@lHk)u;$J$7H1R2Jfo?oA1 zd0+kBiJ^xt%&?!^rRQrbuqdI`do9DNC+`4YXQg z^c>OmZyupdIkjaL`mR1-Wyf4(Ps(^#pGnOT<+BsTr&V7)aDQx z1!HSB=jp2di50W;a@r>vm>lTIlHP$op4cRsmS2?4Qe`|x#!@%&e=*m=evs#YE>r)n zbor6|RCM>+d!0hr7gOe|Jm18<;+u;WghvY;mgX$@tInl6b!{uTpE*l%e=IhypfyaK zc|U5RgM?l*ry_f}HEwBMm3%C|Ci(a))TOrel-vK0v|rDIO?|~p7g|G8v2PT8C!p`w zr9+}G#{n0%$$Jv+x}w^xwa%N=sWDlbdZ2h3_=|C7+K8jz@XV5r%E(D=`SHwmlb|)h zq58G1iR3c=)!=WO-icpPehqXM@N0K|L1QDJ8?6I2A_K7Axg9<~X&2{Huzs6 zz(?ke!}!P?zQ{d?vM)csRQ8lT*r}gV_K(3^Y3+kP!pQjRiRUEzXf3VvQz%8h(YEST zuNz8bz}ZKQNt!Q#!a>&bfF0L0+YuUhc=`v|G;ylAJY4KUT$PKYc2DhkyIeH-fzZ#Z+>x zvWC=$ie(h^A2c*I#y$NYo@yl9irCJ$;#ErfbKW{Dj}PI&cIw}I0QKHX&O+J$+8)>+`ATJZkJ^uF+i zH-^MV>u8_SRIhZvE;`%8E75NP#Ggq(Ld9J%_ zhDkqU{QJx0u?F%Sc(lq>84u6saCgShSBJp+*plvg)%@}7qhoAJ}1#z)amxqZI)c)(8>Utx`_Q+>I$zE=Eba5U~1=WOQr z=epcKNzar!6v(Z=XD|Iwer$0>v*h*;S3Z+9cdl?_?(Kysd^-{yoA^!=y_o#m1DPI} zYgtd3wWoUx@e(f@@x0c|8UG39L+wlLr5}XD+L-#5{YCN}XDwFYJ>s|c0yS2_GtS^X z#C1}cHuWydbA4IIsQEb;W0zQo1MUyA?}7Z558Sha=cTch`cq zmTB5Acf6>JujIIncf1F80nRJ!#pp1yzRA2Q+>Yn(*qfJNmn7xyNSRz%0@rI7-@Fczk@~te-*o~@JH&` z{uKLURc8aM#*p~E>9T$)x545Z%|ISXBM;>sD4x0woc>IEzLhn%<%}sjPkHALI9@EZ zy!c+`pg$%lrr4L|-U`r?+-laTl{(= zal0fhznt#Rw{rjTV1J&M!CCJ*JNMnzdh87sPe-Sxb<}%h1Hr!J=Fh=@)1P`=V|Rty zmDjpbbqk&fED>j!JA*mv1IVT92e~m|T6$SWLHbvP>v;$fLPm+O* zocLKqM)(WsTHtxFzaoI?JNWKOwy&PY+Bi)-^HhKSx9Oh(=SRKAG+zSa=4F~MXL&0Q z_vCw-Z-X}DliD&!o9)%_ex_5o&C`ac2O3o!mw&44S9(%CiW#MtSElo!LM#P-onGi< zUD0MOq&;`_fo#9D7f)Q^h~l#L*yzZhBl*hjhQ_ZwcWf|+md4>qS2lLy_nK3c_8$BK zCom^18V~=&W?tiC6zvLRcFngu%O>UBuG%Zp+^MnDbuQal`RRg%&EI{vFu_=?^o{C>o1{YrO!SPCAr6PiqC{EL1-dYLW*oV&LbT3m4M z5(A_M83kR1WRw=kD8&CzeD%vYkGd&!WuXJUFV!C3>$!6C)3 z(*A_-Yr6a$hq5#NAZNynrmkSDi+-V9t>H}SeG7-IvBUBE4$tpLmPb!6S^j+KC!nuO zj+SWnBKEvnH^V;gno#WF*=t_>YsX z4Y@=4lqQ{@WVMH&LE-fs^X;kUHJmix26H9fKZHK79T{Hpq~xXI?P}w8O7Ev*9G#`yYcFJ2@1%oP z+OJqZ#Ff7+5DlhY~D6%1v2@`bq)N_b+I=(+30o+)pgPwDqLut9_S>DKL7Sf zW0`Y^13H|&aO5v|1h|uI)>k|W|IaglO}KEP*qjW()qV{#X4scrC!p+}~Im3x!PP{-|^^<@ic^kF3-rx_#|h)BA2b zo8OYmDn{hdN}4$jdK)A*5_!T|&Zu*;{u0U*uYHp=BeAX+va^09zRa!0mZdg<4urBy z>^*mKPH%l0zLm`S@yoy&>7n#q*6uy-lY@`s>zUhxC)wD3Iey|7iV^mB_UZhS&W60~ zDjv6Y<<0a@imKy_$rHaY@7(22{Rh)qvN+3kd;RJZv6=70zdeDkPvV*4H-KC1-F_ju z8QLoUFZ4c~n{(kWFJ?a7^@8c`{)E;JW?^5#_3Lw4zbcjWH(>A3i|#9SX|~u!8_e{~ z!tRB{f_ZwPTh045&%DP~Iq>SnOsd1}OghNGAIbkdxmt5#M7HG?SNVFNpNg0tbG-YB zk+SP^;u~4N+7N9du_fnS9li^7a~tvdh(2pLBP6S4kn!ZZSUDR?-;)Pf)fpk%q$!l0}h@f~?*S?C%l>qbx4su=riUohdd$Tjd{$*?uY`+Tjr2Y^{? zAIV?R$K65xirq^fBcn&EnY@~|GQ;J$HWL%-XaL(c1Y1v#Pwyjt0XB3CP48Bo^8bjk(D~;V z>?xh=R%vUH~BN(D`iv{KNQeD(@?8RhgZ@Cb%l^y3A_=JS~H_4a*+#4d>I$>m~RC7;>e$ zls{thx`MX?pW+<~4y8qmc2{{S@0O?@^u@yITYZt-AFNr_-<7si`bTM%cAcC?%zt!V=QGAHo#-U>1@C!V$1{GsV;ZX&Egg8*?uWo+<|R~>0Ddb-D7zJ z^IP3oJL|9h^ttc~FU>8AKVmL(LiQx_`dQuw$=7-w`|!Ne^N00a-5l>0u2s}w#vQL?oQ>|H zqj2+u?S&sc_>p`Iv@RP*;{FuE#PgL*@_6>%e8joOecWkNyo092_K9B%5|2skTHSq~ zD_@?$^!B_p>E_)I;%eMeq84|rWu#YQH?evx?IL)Uc_ z=796iWZSI=N9v>S62kc*;q46ZX z!<^9cCEB|~dC4Pw-7)@Za0YCtGHjpiDm>oyBJvJ+1D@8@%SH9!li;n^zQ=viZd1JN zpd5{B`Y7-*Ho(Q*4Q++v=7qo9eT~-8cA@=Z=J~_`eaZZhbatB93mfJD{Wlw#nJd0d z;xC5T?#g#8oJtfnu-7pHxU?sFiFn<0rg#5W*x#U>nlyjn#~RVjDkItv=p{@WA7bo5 zu~m=!HuiGcr(UJ~HurMgzz#|_Q}RFhZFHaB=jF!|QvSHJ zUGgP3-526pr5U--;&HQN_oR99QeZuN#roo|yP^uL zxGZENBg(oWVRL?V!ra2&vJ)d|?+C7z-o2U2V#}39?tuTve<|&3uaBw?*XOOM{4qIq zmbBwh?7h-z!^?t`HoWw|Y6Et(N1Mwrx*moXTCrQv(W@_Mf6jI%(On zdbQrq_G)-%G7c@|FUeB#*~5uq+cqlM!Fgd7dc-d&3C|@D{u`VAr!ue!kDU5mnM&ZiNh4z9nT?Xq7tQpAx+EHBVc!8sh&z*-yIg52!nw{uRUY{`XBBZ3oufH&hLm&<^o`3tEj+%aypOKEts8ov5qo*@H|Li0`wK5A z#WN6Zl6{8umd{_}c*j{&YkglG)GL|lszCoK-=hxZqncy~Jb-<=xbxV~>#<$O-(lof zlQT3+-x#q^;t$CAfSijb|4QM?+|Jq8ZgcUDg{-4Fn^f!QbG436@!oaJVZabW|7#+T z%BJj8-}X!H=*l;`qVYuG{ATcgY%7~8+3bX%4YkFj?SYLIZI{kibR|8pWT@ujtBV!8 zTj5ji{|35vOHR&7hPolYf;ImE`eHBTO24Rll3{j11G`8I1f|Y^VX4O(~}+!e&>M`uGmsg zSFqltP1|@^kq2cvpnX|mP&6tWm_-IBff zqpS~TqhuNBtYkC5n&+V8G2yos7;4$`QJb}H(%z5CuGj?Jf}NZ8fviFH1Y+zpAh*`L z#6ty-va{$IT;T?KZC6+H^}GwkSGcN6eNaEBw2nfs4-X95%J)fmwO^w1XU?N9t8?sEf|sCgpwVjT7tI9gJYc$$Z{xf_4IIyo_l|xi6R~H-W?^qResb$B=q^Y9qhIR6 z-%Y&kJ>Xb+0O=hp5p<4%1p z*mbs+>T7Vr=;S!>=R2}raJ^dU6yC+-g!>05`~J%qKRL}&lu@A#;gdcK`pd`!w4!>X zm)ravD~O-<<|%QIlVz9$!^toS#$eo>1XsEYS92Mz0y??M82rP{?;L{@=ug2YS`+UN z;81&kRdl9)oX8kTyP-nBuae7;R8y|@ims&{{q$9^uIC%*CtpPybatQGLO*6u3faeXaclMdunLA+8~?0?*Xe|*!0GUA>xz<_D_4kXNATj!@fmlxvSZm zm5on{*2W-*iZ(Uw4C4;sdWhx{?rq2pirFika|QGswD*NlThs6s@iw)$zTDo5zC?W+ z=%(rGfBm-l*zt5WtG<5=PvvngdPvjH%C8s$KPcz#AU|V}IifWFE&vwUE}UPF+~cw~ zW*#D`>`5@lQ;f2IVd>=)}L|B!w)eHe^s z+M$?XvW>TBuVB=k;1_;l4k>nv=D(XIXF;nU2d)A6bi~=)qYo=KWKX_X8b3GkUgKMK zqr#7Tcq;gjjy-J9$G|^Ex_e*{&KulYgK@6%IwpVEEsbB~>e#*SI(`MS>ecuaE~0`5 z+-V#O_p5n} zzuFMMl}rKm1I5%4Y^#qvAJ|r36pp#^r+f2vLldTfPRuY0w}8XeXYG6gb1eOj>6jBz z{8XOzA@{z8clp~1?~2c+dfxf2)Fm$#R?>8Cg$D54T zo+8fMlTF6${N?x2Hzix_Ng$^uvDJ8xwIyRpc&W0v#__FkR=WLDh}oH9-b`lj$CCdR zKE(L4&gOdlcxz|_IL`1aIo85AX}5U4o$;r!-nLR1|8uOH)sA>{b)XMA{+l&H{x?6Z zvQ`&IGKQuaoy7~`ZRir0>O5MAFhYBmvTn~eaxdO@Ex5s-Avl-z4AMrB_CeC{^ErAt z_vnR#ZyLFeaX*?XbAHn#-v6ECJf7jxOV8oih&x{9uFj(3oR8;O^HEERI1Bt`V}f2Z zNYk^@Luu?W%4y7b#KbJ8!;?mq)5E8v)0TIZ0Z!=uAg!9bnfaWRt+FXY@Upltav$d4hQ<=EQ5pP}E7?szrn_|oCiu;CNyivx^% zou43o25jV-BJVHF)6#ih)6w+inaB_D(qqVt2U3nF+a%hV|Msyrh7{N1&6{Xrit{L- zlMQ8iQmsdx=i6&$tS>%%Hu0l4Z?_e?t=OndBV92~DmIy|Jj)J2&x$z}<5~CDa{m$H z3`@3a25;gY7P!ge1k+qEjz5CvTDGPa{JS}{fbp~$IMwD`vGoet!ZXPv+0)x+6NnXigNJJbcJ> zIfKx65xzvc;n<6%^K>~&*Lt=$Kbv!HrRxazRUEk~j@(3k<<&Q*=AR3{ldLY@&OTz0 z|0~1AON_0lF?!eMk3PfT%6fQ&;U(f7`ziC^q<^SF7E1BG1-~18o&mnlu}m+$U!-)( zl>U=^ORo*eLdR)3Dr2?QCzP`W-G$dW5`D-89jlS+)}WWTmv2||?R_!cEf##2@{YVJ zPxW3zew#9srsvCewp!o*o^OKh^={!QWuN>mX!}WJs~_MQTYpbGt?3=Kc~+h}iW}%V z;e`B`nD6hngtWf_7FY>1azV$#!2QVVSl<&i^L&QBdTILlVrX!UznAO44;i1?HU4hh zujk%bZBF@K zwmHf2{T5(orJP+eGQ|XGimklsSJX4O#-GZwV$4l{f#>WRzlCST)|o2!9O~s+@#?po z!?V4{kMg|jV(!yx{95kS&akezHNK&%vBrP%{amAK{MU7jt?^&eHC}4dtL1yO=WzL6 z?KxDwS9@M6->W^(mhaV`UFG|kKgtwe1!rN}Bl%;H^j90OD<^FXZBgA0X}1HX);WiN zohdGOf%oK@nB(k8m$TQD511B_Cmb`qLyu;PZ<6oO1H`~tN&K3x^89?JxMX;ysCg?x zU44_+7R^XwuqV7=nibHsWD@ZQD=i*ygBS1zx6cpwLaxt;7kDANk8#ph{3HCb{#)yV z`Ly-|co;H@;+$0E68SvW+wfe6`0oFWJ!h=1*azR$x*DEd_BSX!2mS_}Ns^Sm0d_g^ zA2`)-Kz;@WbIe=52Fx*S`0MJM`;QTy6A;kpHQ0Smv{4PyXzwB&-~gd>s`gm|BAlj`hUP#bGiH^wkulaNoE=3 zeQP=WZtgX2JySdp%vrO@r{{iX|21qJTaoQ5>vF{;RQXraZ}&qVv>`A0s3HH?$%_sT z`P0b{prh=MFE9M6vm`V08|$7p=T9d#of*iPj&}xE^<_JKI6yt>L-ijz?X4l#EQE5~ zy)d*>lWudvMlUA?;j0#JD6C+85YRp}qB-+2U|n3M89o0k&x!cDVj_plO>{r=*&$?Z z;?czp70po{`MGK{b|)5orP6UPrtONar!fGoA~RjS%e?|T#G#MA!gsHf;_!~K-}>e= z3h+{yXgnm6micHTTGZ;HH%QFv`o?mqJEBmcg4EjJ>(pG5!FJlCG| zOuIv8UW6_tmZ>>`{fYYMlebwzhq-V5W@+3T<@M9-XTw9Uke;fwyj*jQH+e(?x);up zdCrb&3g%koS6TQCD<;A`j z`~_X)k|=UsEL*hUJ*VnFG6u1JWOD{yV#e)-n0syE-FyHi$J+BFo-OI-D6gRMdnms* zM@$2F_5OqA(8FaMTxgZ=8TT6V*g=%`b7EYf$Cts0_+~KP7+;U@-SPLl(=X}V|I+%= z_3q@IXk9cu3i(&#NaIEJVA2`Be!kYk=nYxFo2=W9pMksy?aJo}-Dkv(DsC9(32`s| zBDPVHUE|jlpPG{_G zyBIm9%n!d&{_gU#Gb117ej{tnTIAZ{t=QdChSry|ZIkRTT9K{6E5tvMJbE>Ky6_Ug ziZ3rbLhrBJbYkda9`bX_lpbo=%98(*^2o?I!DyBHhDf3`gN z2)+80<&9;nu`A$vrFLFNdD2O$POY=<84}K~_x_IiVcq zus_rIWSzxX0mO0wj}@MVfEB?0pZ|4YX!oy6HXHIE3PI=Wg>I@zs=gcL(-GvmKBhHG zQZ^x5^-i&v)UKm27Mnx|zvj$SrGK1q$4K|fI4SM@-{7I^34D3*@jfV8ATD~7 z^c;`<>BOEc%IiNx2e$I{5^Wu%%u{*hpPmCA`h{|QT*!pT3^;fBciK z#^=YNIqmmD6QaLO1Mqz_N_<53N_2k21A_iIUp&y!C4tq*?dN@4z^`PlWAZHCCHnzO z@3{Xh_o4Lu;*;1lvrpBe{py8dSYJc~8qOnk1oP@Y1M`EYv5(I9ibvTmjD6B=Vejjk zKM4&K})+(coCJllC-X$HlLcUQbz1HUnCdT%-5mGlAVQW66rm z3+#->l=CxR1oVCh`Nco}o<5WP=XKayc7_jVNQLud=RUqo7p4oj178|kxo zev|K#q#dp!4_I$iSvB1Ayo75jc{Y-MxQb`Ki7~0PV$?O4=a<+JJ3#)qkNx zW9IXx8{3>F!}&&&A%5J;_+9jN-+Jh$9=->BXbh_#B>&tozr+_Nk-iO{y@l~7{u_#O zrU&Bzo9^NS^8f#F_UOhL#C$qS@?^rh0NyFv!4P}7&gIgza*qw4HIBX9IQ~7kHvbKL zT&&n$XklmZcjfyk?uW|v)!b`e-G~!!)ll0S3p=5I(ngrj_Auz{zo0t{+$f*yRus!t zV+d3?P2bZH)T`%@^K2#@Z}5c>a&#g{$1cQ^Jd_}x^!A)P>dRKAx@^$y+HSscRyT3K zBsUt78XNs)-M<|(&N^_+I_v3UM&0gX&E)Uh(e28v`zrF7X?Q~2A@cl`|Fh(I=GZXO zta6%FPLu6PzfF95;FUj(Y-k|EO<~h^M~JVSweMKi!0zkwwrkX>tY;`|`>`?5kzg~U zu6U8lzJm*SM#8{VV_eBz0J`Y2_8tod@a2wG2k`DYRvkQVKNbcK?Nw;6!8q$h@(IQr zwFo8NMzzcI{KN z$DF+Uhz$10JD|~eWWraY_XfUoVemcs(gyYf<>w5~We%9z)Br532V=eLokH93Uf{T* zVDda?67P7vMtw;=iWMTiJn>WQ$*wXi_tvjEjYb;TJDzgsdsq9$g1hF4F8#qTp zFjjx1yHIa@EWcs~v`Wa2 z?B@e}0PA(|mv|L6q_g3Loy6|yEPS8&UUlhv)ur+)Wvg89wy6P}f9)^e{FlT7l09%M zG;Uy@DH@mD7c#KD;oJqy^YZaT&mYk^5ZwlOpjplWKnFAc-)4P9AAEpvwhtfYZXcd- zbMRtwm|ggfcS)0D-^#MesF^a3{BG+8+w);;qk1xwlqh)spCaQj6aP*Y|gBh z{%x-KR~zy-`!CXa|iQ7TW#4dIb^Q#HDA~R><=mS zXvt>FgRkc=oYYweB{-|}qIT@qz=OtjqW!RFDVb;+9i=?UYDXrV<}HNJRCtOtf_-k< zZbdtNGZ@#M{(-D9v}9^H$YbnTQ|t|gy`E8F&z>0eLWxfJO~PBmKEGv@_>#t(NxH#5 zC`U$bI={(yd|5#Ak6rHP|Gn4vTdq zw9!bcb8KYbZR}$h*g!o+j6Ur{n9&aRz=(b9>s{~Vp*!t08aez<;IEqhOZ&jsA@i+x zP^R1upZz`S5O@Q$cvRm)3xD-nopmF4Zz+F!kZ=E5ea+=>t}lNh8_3)5M^5B_&AQTm zBeWp=i5@~x&c_C))|n%SscJMOu2^6E)`fOpA1pi1z3~_GlG{V^jN5{oz9jzWFNDWQ zjAJ9WW3<-Pnje|hnvQ?Q@_Jh618BHsOf9w#^iK@!1@wCsxIU7k59s4>oo&M_R=O>e zJ2ky1Wqkw(*A?3+XJPIu->_0d<7@4xb$@Ll=twbx4DK^I38 zUvDxFe~tKi;JTUr?U!2K%*ORa?ahf!reCri9=6ie`Bvfw^5xJvTXXeOw5>M9`~&YE zvvYlMC1=_yp5*;^cd?(o(oH3L3pFt(pTv$w@f}0PA?Ea#0-FwvSz{i23I04hRb3dK ztSZFJuKc(WozU!#Vm7*?sQywsTJfGVaLN8Y1iu*!Vn<|s!EqZfY?wvcfI%@!qQKKX za(!|A=ei12+57xz>KFXSowh=Hu&vOXTwWZcU&a8Z&bQHAJ1nu^59NMNdHehtJItEq zU;txHy1r18G72?GvycGZ4Ock%&D)*4V-mk_1hFly$mF}X6Av!2qu6EI`9y9|XUls6EXsk(i>%A`IImo`U(T)OpMJCD)4|#oKLtg*IA#XtP zd$P;le;spdqRUsD;(#~7r!44KyzbE#x(f#Hel)zhVCK5~onsZtw+mc%`IU3N>iMph zy0GsoWOtu>d#+ZrC zr(&~8o*7K_6lVT{7!APs=qEU@jac>jAI%ifiJn4L&dDFQd)Oz~Qr=@Y_1br&Isq+V zi&;b7|0!Q>IbYB>8sn&(Afk2^+@de(W5oSWRdR%Kd@0O@_^X@0wEVKb_sM=Q6u+8ud&B zhuVYESd={LjuKDL`Z^Q$0QOvxv0j?GK9HA>))R+_e%ZZ6@osgt5&kWME0NpS19@Os zfNSwGoqZHeD*pUB;=>aYkbF9~v6eNPzE{kB?f0o))V8S!uJnoIOT~kboNGkei~quS ztFkGF@|l}G$(+c%=*c-#S3bh{mpn$Eup!x7@fmoB|Jw@sRb@zzB46xUU}>TJYUaJu z@Xwbly}Eh=Ha2a=htS!`A2y0i6`WVgc$KZA_6RliorXLry=4^G6|+#W_0=yrlWL#F z8{axpLf%whtjI9v5+m)?+X^vc6Ri*A1FrU6LR$8Q^~LOb=$`Wg(v!eB=`*7p1)ZrS z{;%_f6pvNBSoIQrmGiFH^Sq0`pl;E&&dQMNEFlRqDp0kiGoyKAIUVo{xG`iI3jA|{r6P$)( zAz)w+#K^c7v51IkT0pPm){q`%pJDHaeZjuTPU7@PUNVW@As)7w^sH&RBgW7#BYOQI z@MUK2DVWdp7N#Og|2xm>3)!Oeh))5}$-K+JPKa^acs6j<#(^CI^$XEgGcEuRTiq3i0Xj0SPPZPiBS&v2xM8-v-PvyDyOzw zPUZX(a1zwL)ai0}LT{lcIKi$7T{iNMoxcP+F{8xLWzR+U5DwJ-Ri@>RB&KI*TyMbV z1uOc-ci;iPpC+wqMW>2gX4v!>@EhPp<00f^{e|$#+SJed2x~NrA<5l0&0tNGSXGp7 zRBd{{AESNh&u*;;!Bb7zcCQ-8oRkXzn??V10&BOs=QNxCaN=ly|=XHnbT!|M{i=ydrX9&Q)5kp2YnO*3}*Pa|6l z@*Lyd8ccZK=HALCyy`UlnslTWKe~~$T4?ecTsJkymkM~7WeN}R{M+F@h2N~~DXcH& zS;tjp87eOPF#e2*rXUtQ`Xd9Is4#sff1pP%)0uZ2g{gK&L2|`#zCoTn`1;Bp5O2)M zFQXi#ArBrz2X|C*Gdw!~82%tDKSmh|$NK|o_%JjVrcdrBzfHOSO+9y*#rp28{8d5z z`1Df#N6GJC17R55t_^ITC2y*-#^W26*#5Oum|V zB|n|Z$(y+RZP-q&zh8MNb1M0!Nf%ab1G>;gGg*Q2#(;M#CRJ)SYuzO6WKCzqI77oA z=6{Sm^uuoqIoiXF$!3&sJ{i8kI1k0zUD3bx1J9z40p!*Sj;;nr$~&5L>5nVvA0%Bd z3WXo$g@gUte@YXB@rRbT;Q{5-KB;j~-_$wmO)y4ekK&~8>1D5C?MKgbSATSZE1Ivs zQayR8??j26&0N<5tZm5K)gyX*m5u&D{y}?Gr*y37>4WoyYJpp{xG{olP*Qs!H|7}| zV??j)=du?`{6)r!+8v5_qZ1s=e-XYp5xY^Xi)BZnb?oNfyuq3t8$NVtdS83W`whHT znLiKCCwD!SDc$Y&$g8uMPcG|gd^PlW@ztefqMdWm@U^?{bNR7}1%*rk zn-6@;ri6)sJsbXu?^2BPkrO-f&DdU>(F}DGUq8n;(GFlK`R7efFn3eVG}ijz1The%Z+8Pj0u`t9Gl+YOmV;Ds8^z*;1RQ zvwt=?Bjim-#uX0@bOq9(B#FsEn#Q~IKa%sd1$u*0ya?$^wlM!MLKgUX$cXeaS19j& zA>&{j>z>ZD>_Yb)$TMcx3#W-;cQ)rsu?DTR+Y3=*o3uEbTRYfZ$RI~2Bu6tZD!%k% z&t(cvGPk1-^ERhh->0wxv9SZmE-z*sY)%H37yDzZr*b-bi?t2kFG4o4lG-DlmAA3G z)jpZpGB?iq6l)`RiDPp{Z4}`X$)n`S|#CjOSkB0ZFo)|~HNpIkZm>Xd)c-J@KkMKq9HC&rsUd*W;WZWd} zGpufRHf`OBz469#O7W&mW3<;kNd6qYIHa`GD)zu$K33b7aU%|X7~}Exqb*Z8OI-5k(ucZuzvq}$_u{dD*0|T6Sva_| z_oa8>e=c=v?nyv<>a#j)idV@DCt9j`r?-kkamCOCaF-=mLtqvHoBU7>E8#Dmw>I-#&6`Y2Yie5fz|eaZ{{EH7t+3K==Zq0ym%F~ z(YmR@Yj>S|isv@yO*lC5>)~FC_AQ`{?`OZB{}<=$_=s@sosBOn`zkZ}Zr4%Ei_@>I zS>pfM8UIkKOJQUD zS$K)DycppOqBO7>bw4}SL%BxXzaE=LnN}*{DZhOhV-$X{?B07^i#)yMJZbXiech_B z`C0Cb?6Tmwk9(ClD*Lrkn#)*nR=E8x>-oBa(9-kA5|mM$Qopn2=Ka>xT6igEho&-q zE8}8j3j4zcGKF1r|8Z<)ba}BFT%}{cY%ed$c5Our9~$ZjMUa6XKg(^Gt?IlkcTNmD zdmC6B*XyFqx2M_DixSHPnm5OFyG`uPYJb+^U&}wjKgxe3|1tbcr^lb@bQMSOZ|0u> z4xRNCX00w?zlId@nsG~>wcVvNqv%JeZwd9;)T2G?DqxS-bG}Gc&&Yh1?KT_YxAzp) zZ<1}$qX&8Pp7{N49rDU*hpiSsobX^s@ zr?4=+t|+-(`aH$h)VZ5ZYI$)3^u8ns-RIbUkbHbR##~?eg|<3gTTyJXFv?I>93Ud@&^mkC~GnG)C{imds02_G#kBTs>^NN+Thg<_W3<` zGMBb>xYMbB;^6Y)Ow#AtQTEb1T)m&k_bI-Q@vi!@9(N+&e~(z2#Jn%YNWX?>#hpy1 ziBra&yy_dCuEjRu=f}jm>(BbhvAKiMqUx=lx6D4b-M=!*XHXU`zd_uO3vQeQ54_#IsBq}9%-o^@TncaxVnO|5a(STIQW|~4qCs| z;4M@+xn8$A310>eGfC?OH?_$%exuD^Ng5tD*jrGWL#%}skYDGpJe6LXKP%N+Q2QsK zXP!x43{Te-HqsAO+xz`y^3`qcfDYz(8R|{4zN}3-p}Dzev3o(6JB)IxQ_I|j!(DDo zs?)9BKHyJJ(QdvO1{}&aGrg|ZReo2a^c?A_XmKND_X2Yj|N8A~{aW5R)FGYa&yxfB zs_S3ztCKs54g5DGi2d_*P?IBxGxaHG#uMs?7I{_0CW1& zjDaNZh7BiwZ5I0gc(Y`W*_1ss3e1h1HRf=}&8^1JqBL-UW7!e46SGk3%Bg%S{nk|Q zFMq$^ux1V94*Ki!*!*g)lN=^_&yEh`Y(M((!L`0=oat#?eVzJE=E<7q!l?Jh6HR%( zX@PEMMnt<`D^}mxg^rUxj`sQ8(DyW8Q`?5aJA!^g*FZezP}{_IHxlik{ma~gMt`33 zecgSrefc?q(5=JX&bYOHO?sJYJhs-q-N0`q#@sp1cE3D$;up5jUKlWtVMsTgTISB- zdSc5@yc64g;?-?g=0*l>U-c?x;f5bt-a)%Rzt7p1uWdsnr7eov6zS=4Ph@s`Cwg~# zwV57wl-*r?(cYKe|5x%gSMm|NN9CC#O68ejC~wqu??m%<&m7g}PK|_chsIgVkz6gVlJ((9$iTCLxGUK4A60zqKrZJDg6qLQ zGIsDRo_HJ2E#S;7%bv@q;}hx=@U`(Gn&{u`UQw~zs^;axlQDOsrXXhSe(NhXpU z)ZifJlh)w&`KQQ4jl-CSxBe0RE4)^6)iwN|q%840L}ucJpkE~xdDlGgLH0)BtKwtT zk98p5{scMTnPYQ+rP}WHe?^-l&$hEUWP#dXr2mdQ%&%d27#jc|Pli z)CWe^rmCY>tSefgL1zT#*G8{^4rc&Mk}`vF;g-im>ZEaT&GI9G-%n~eu|tfZ_p#QS zxv3$Lhb1SlpC2j9@cD`if126{PZ0mAgEviZdkc-p-ojb%r|JjcMJd;-;#$wYf&V%1 z#?$#X@UQ0oI_(qw;h|&))71%eK4Pt9lKaMe$I{f+o1{q3=v&;AIajb!!K^ z-T0v7M6C^e#(&STc(#;RYlGTBe9P%`qweRy8liyQ>L7N{8p~T8WHoq)1#VwByQAxEWqS7iSydvEN#*n1#O$!Ke6cG)h*050)L z>2t%RUD$+OGV9(qI15bs{o#9zp@ry97YGK@RreC$2myypy80=ARqud9xR4%6^?dT7 z6GQ9?aK^;?qF|F=N&2({uf7q)JE&cP-U$8u>pSqJMK53^kP~t%-7ArSQif!fUUw06 zX{MdLyZyyrj2foxvOcC9>fhe$4j6sK$8I6kDR9(p&$z8|=D_P2XO@%ylRJ3sZ^>VW zZJiTgEf#h27BT59_rnF*B96{tXW#XwA@L>$ zdR3bvcDvhSceo3{Pi>U>EWWO|nD5o^q2CPnt(2kl3bsa(1oW$RicWsq=9s9bBBIG; z{Jx?!sP$G|p>A-#Yht&z3_kkfHqNq%J6AzV9}+CJoD=#ybcsIeyQDuHa+c<62CEC3 zkp-Uy$F(V)MR~KQ7~$dQeZ^ICCb%KWkquG{GEcL!uDH-(-2;q9{qiGAa?DNGbTw19 zc&z5CYTBT71$k(1co3P=Sy#N2d{fI~X(G=Nqr)A}{yJ^RZ^8yC#<#=c#B`!AjUB^r zzWaUrz=)T2bT02U((emm)C+!vAH!&On z?z-Z$+{+&_b_HjwlJ@=2|7ob1ybgW|YWG|1%avj0o!Y2x^e^tRFWkYi<@8p*-ll)pcRK*yl>=(A? zC<}efvd4PeTIPX`&!G!&nFEhuH#LY~?clxn6)!m6Ud~Qg94+~|iRQym;`$yP=S~A= zBggp2p_ia6jRUQ1M)5qI=P^8IdDd9%<2lB&d{ig$%vmNwD}Ifg0kAAi0te+hP-nXO zUgd=iWI?|9H2c%xByB|&ovwU33!ZYayz3*c?1EzCpGewN-m6X5kgm1{+#{I%~mIi#Nj=1{< zZP(sVeeMB&?$QQN^69c!8CSgGcD}E7AMh9Gn){kxpIhOoEen!E3BX>)IzG$raw%Ux{5VTbfPu3o{o8OP# z(hlgTfoJvKlgRmdllubtP+K3UA_5UOvYV>C&SbBvKDhVQaY4UMqYdhR^`G>e)2Um1 z)6BEzMD(FPRbOg6sLxXL*@B}DUMF+L|GBKQAbakH+&~cfr3N0azUY`-(i;j7;u-zN zOE%&ap1Kn`=-B0~%PwSpn7*3(C2&Z8D+Z7SzCu%w&%mkrLS+ot>x$FB(d}om_5F zt6q0~pPxv7vfvoYkElHLZ3zy?6HO?O6J35}Lm4K$*O(Iw>hH>XeJk7jLyMXW=kxF> z#Tty3_Hz#qV@3LB!*IV#e88tPwwBCWU;NMjKE3cf$v)p>k6N}eW{h)MqBdvScgXjt zcn)VbKjm`9Ci93Dec6}ZK{k-GudhLmvK`tmn1>%QWA2*m<6Oh!+2|;y*n5!8jcgCL z@%=^9Gllx=iB~|HWEt7#teA(d$t~=~NB=D-S7*AtTe)k??dM$ z&{teAUi(ym{rkZuK9(sMDaU)7J#!0vhu&4Q_888((7>-m`jIee$c>XUF9tDhnw~;F z*+w}w^Ot0jZ!6|dxmsG%kCM; z9$b^=5Q}xHWKewMfq7QYe$&3jvSK~p>c%|!@`JSo@9=$=4K?_~CkX#%=!Y${uUj_t zm-AxFu*ZyD&3AM1Msn#RtjixVk{ypw{?@Re_8?;uKL%Tz5%NosEibed_|~q(c4Os0 zTj4j@Xqd=~wXx2^uo37y(82x=nN~J&KlwpuXxDt~DB_Gu_F=0Nj!6tjU@z^thokZl zSYCY3p*MzA@Nd>R`9|XG<>vXG_ z_qCranAJ}9|7jEaoBQ3QOJ3i`-k4+(tp~39kAEmk9VWZCQp^eM>1Lwh!^EqJI+q-3 zB2EuJ$+kfne#w8LZIVa-{=$rP-DMf;zoCPT@VPP6GlntDewV))8C5YQtvK-(umv<3 z3&B}G@TlPY(j2@B`V${UpG(}lTMOanz~Omw#s%j<&l|-#(4)q=1nkXEzPux^^Krf! zy36~e$v$ed!|PeRzBpp+=kl4J^~JH#d4;~T8X45UVpS4Ih`oN#J ze`jxAKJhv)!%iaCz}p8?z(y>RYJ(Uk3oY-Vv-bJbZpM!#=M}WSJ-rB@roGMZ-cY;^ zJs*95pP>BsMvhyNS9{e5YUiL zS?r}5Q&seTfRl6uC-((7`8+t;0G_5cHF!(N7vR#ULx<0rlC}yDT95DDnxU+6{|^!q zgY*hb{J+w}SIYFDxTT^8(Sl-^iWUMofCl2=!DP+0#pPT=@|Ea-{eKhPO}Xzy2hs~v z`hN>;JAtlw3;5Y$uPbJ<@Q+J-3a3Ngp~?3k$7oKu-iy>3k$?Scrts;D9WTb*QEkB6 ze*VT#3R_jtjM}rZwWIK#8k^&m@!hK6yWdBQ$kvZ%3P<^FTA;IZ^8bDCjUmyL;%9#x z9rJ6fe`?37pExsyd#zhTIph-K*21ei*HAxupc6EXHn0{OU=mk-9V6zsI`6k+|5L)n zfI&Q(DCelschMOoTCAZzS<_6gClhxt4%~dRIGCSq@W|JciP68na#1keUHC*vFLKp| znZgH=2~2oNr7Y4tmg+sZEO=!^^JO^7SrFKY$o~y<18jPkC(F<9=B61Ig>(Rr+JFMQx-BqzNev~GB zP1G~+NM;d!g>U9cY{;CD^4Jr)k^9+q1O8U>TJ)3bB9&L|SlrlMTy#lyaS8dRom4h9 zA(0L6;U6fDKfJ}V>0gzfb-W7%4>lvUc0c;Fe|D!+HagZq%;+w#mJfKxE9~zax1Y;f zbHWp2hTvR{-n_r~fhX`+5A_sp?LH)EtFg{Ou7W&Y0f6VdT!}HeDIt%jY4#paL z7TUiWOZvZ(F8xa|c1dp{O**bAw4*mo87bs>^jNZ4OFSR)YNntEV10jk3OI8KuNU}a zLvnA(bhXbT*|C>*VSJIKQ(j2>B?ngP9WX9(nWJ2I5%c(B-qn#V8$!{!@ZFH&EF{w6 z)R#7v7cZ#q0SzK?bKp;V_YdeVN<#!EZVqu>*_#Te>iY^OBu*(Dyo zAuC?i@5=|1{MdIop$_!DC+j9JC0>N+X^w4y|-KDv?ak8DScT4kEeXJZ$37&mASXEV)22*h4NcnBnQ-9f}nt{a=NDh&}=tDS1aBtTQ-IJrnFA&fpx~mX9&Vy><&U zuuHn;gg4?Y;ayrPfUyd?x)6T2oAG68ePZDE04~O`hWz8t-oTdnru=(&zu>{K*vYJP z@w+@)4PKPTWPDTupYr~eyv82p8u|$u4S0g$^unw2uXASG6&?6?QlIKo{B_mK+AmV6 zt5B{B0r&rs_wG?rRcGG+sascH%C_jn*tQ4s{;DYxSyg*=O%(Kl{1wy`SBzcy2S_WsoZdcDw-%cUHr7qG#96 z&Sh`Ky`uI09DJuZy-B`0^uzBOn7fx8g?`x6<~^S@nkCP4R?APgeuDj3l3Ssk3vvrK zi`R@Z*W<&6Ho{en=wSFx^=dp~=IZKrev1QRV1owp1Du0_&WQ0$eNWWjW3kcWbv=G1 z?;bm)*M01`es>Zvvodu;q3#OCSnwcE3G+R z_P?Uu$bJ1h@Ase6H^3)5XK*iN9AqN2w}rJiqQ56f8~l`HNR5{k7m1&w2VH$*(RRKx zjIQF`tI}=NMDe!j9Aw@`V~yKT>aQ-MtjcNLtd(~Oo-M3BTbRQ};#q61zq)@>zuR4V z-VJ_ZJWu8Ot2v%&y-2dibwTT%cvoPJSh3&Fm&iL<>i6#e{*O%=bOp=Dj$h;6&VA?P zLHCB~w%6IZ#=S-TD-%a)>UUq}S>mK2H^H8c1aYk!_0CZ|a=$N@% zx};1%d&+CB7}eHiqh1 ztIZ+NFVS?QEPu~(WrI(G7B#1ol6{TLDA(3xs{h(Eei?P{KY^qb^fe#SR}Q*&rT zv==p~m-Yr}r(Zav&7hrhs5iw!5pc3?GW{Zlw?Rxku$5^qJ+-$)yN``;<0GscTufb> z`wHwX!EC@^)b~8F1Uw5o^5N1k_F%+}$G^sUR{O)sZ+*4%H275>YVB41a?H3_d(W3p zU%f8%MfoCxcg?v4asc>4I74|rtO~!%o^T6tLSrCaR=I=5N8y;Mf?q0CDEVCEL$ zLScT!H_VkUzmZw_%tri+I?hgs8J)|b?2W^>Qa%l%jLpft`lCDm!k6q1?JLk8upqx7 zW0C;ZI@Uc^pEP+e5LXsYFwh!75eG;spiPus~3{@aN#pS-oy7!JJo5! zPd&HQ3jI`Mrs5)RHnLXj{k;{PQ#n-T8RHS0H%D<;pCTc$m;GFTI>n8^gm7t>8CG_UQ;C;)K zn%x}m6=Mf&i{@s6E8!@D&Q@LWSMI?FRBY>sb8qtB4?GF-eoWz)4IjJ5kHd-ZqSnA0 zCSy;1qP2%61ixH(V0SZFw!SzA?3^7X8Rx}?0+)j2t-^i__LUmL)lfX+S>HMWnO z)$gVrJI>oU8fQH;v4m3A>$k93i&<}*HOxAD_M`pHah}%KM+@Mhj80=;wrp;#X_ara z!sHkIVEt`_cYG$sJM4|T?aj7r?^Yv848U^aufNl`{ zRdjwT^x8uIO+$Y3rxhdHtvx?xMlq3Kt~sW)qOv>0M=@+Q;vRdo2b7pe<Tjn0a#+9WE+!0TPI}0n%l~KC^Dtp@Sm!t4or}LZ?9Pgg z>b+R=A*WY4K<{1tDFHOofnqMbm-!po9x$^-g~c&NW8!@H@^P4P9C z6Xc08h=Y}42NY}6H=-k>WLLfoZ)UEa;%l$7S{br?cOQ*=MHw$@JI%CG)*cIsy z`Jy_Hsy(wRus`cD*xi}+m9GST_Lca9%n_vVf0c828@9)`9f9pJUA71F1Lw{g2>f5g zxwWSL?kVgKe19p39lSxC1MH{o1I`pWL3W8jo6@7=hqZBXUdjdqPqLW;`fao*aKgfDg4!N7Vubq_0K3f-e>zb_X+U!MZQ_4 z^59o`>Jso5_B)&(5ggL5A+MtAxmNrqz(Wq*p4qtf3rjfjoHN0`Fq1REW^(2^b0y~~ z4uH-KVk6K@sl=K?%}wXRxdM&BU01wZz3alA?2Eg`O+RB-G7ZE>(Epk{l3k=S!sCP! zh`pG#mc0k9R1M|DF{m&zp z0$UXv)#p{}cB{sxZns9AI=*DH-m&-UCD0A{x_TP;s@tpyE3jFYT+JSY8vQG7)R1TY z$X|h*Ph;QYWT!6hl+#;w61pp}?PYs4IMC6)aIPgiVO2$Q53+?m2~X91j_uHo_^YV; z;Vt2Bl(E+whOH=m9k+W4!n110K}J$c>r#(}zh ztMR)E8mrqil0~{#IRn|#dN7R9M!0U_dI5B&voYkO>uik2dyE6n?0(tdvcChn8jBF+a7vA4#YaI5%dE}qF)jh!GRBAPQO)nk9$m=!HTVtrIP-gP(@D!79XG$X zE>^Qg!D(QRE)4Ba;q@qc)UhjpJ<58#_RI|x*-6LRqd~kLnAg|&j5@&K{&(}&r0>@8 zZsyrX)7~8}F=6^~2YsD%{hfiH>P9BzFT@5E@2ZdBxUq(py>pEN3CbS!6|qrRKl%8( zwHd?SQoDaeyP{{|u};sTjYj4%19}Fpk@7fN);#GF=1HMt&6A$4dD0m3r0?ww{V(`_ zGzae&h+Pn8P3DNXLbt&@Avg$SFmr{-febQO^I(#TI^#+6h0Hr+FTnTEciYre0WGFK zc-%VZbX_dhf9or6kKI0T`q6mm22V^sd4Kg^;IO9SMSK4bG^@UeKDzg}27Qz-qg=nD z4e2J)ihRI0@k`-T`bPJGtov`$%_aXI&`ltZfkkV*V&Em6}_A0JV0;MGTd+#lF9zxe5p+xC!Mxd(fo z4gQzCvIv_^{0k*PnDumXi>v|TTkY92sZZaIvd*Lx8c8t*D&N2u zBnma&C~6M<*1cD4fj74NIN*)5>b!AA$Q$3BQmXWtcEu(x5h?Y#k}1-0iXUrVqt1FG z-yz}OD*|6c^_j&lyX$FtMS9r3YCUzY|4~r)8LGR*s;mdz8E5rYrj#xT_OwrvPo3%Y zR9E|lnUf|~B->*O<9Kd6zgoKm%8`6%FFCz!xLl#=2bpMD2x2Z}M}{RS;9;JLP+-k0-g(n_KCFU{@ak z_|vR`lRa0s+FelquZ(lNFtYbcTizFp+n1Kvm9v(;&pDBPe6ZG!yT4Hi>^J+veHHmp z!MM?uU=fUobbqxA+L_B(h<0q?6zzzHQiZkPZ!LE9YB$bxBiEua(UWNFI@a=xms!Bp zS>}87OL5Gt&}o#|g3de>zllFKLJM2XVgG!5uKK!B(WC6@7~gl-{hZ9@fvqk4h^M}W z9bN_|;bOhTd}zt`*085~u0>4RW=_z?R{BfU;FXv+U9rmDLYc+bR`S6Ed01r3t&zP; zwsZx!TG9`$`n#MCa5Zb(n14d~2CP0$ca`RZWIHQx6y)*5HU zxkCCAj*)lif-9amF`z+>?GYMW z<^L&iNPEq?J2fwb{SQqvvW7}@z zf$w2Vnu;3&+7hiaaxMD0d+n>$75uU;&Ji51rf)+&EpgLZz-yCTX`f|P8cJat{Q>;( zEd};J1>+0N6^8w1u^$3o>3g)5rY*+$9_ovvndbmMbJNfP*P>mubNAYx(ZM&5Vk2EWLsHzT~DK3+q$vn)VM`6oD+QreXCn}&icf+#&*}w)re|7lR3*IW&0VIMSo6Q4__sg zAFL*r;}#z$;Ne-E=U`$d6CYr#Z*)#}umvfjd8sDWpF|A1{X@SU>--HqiTvXrP6)5m z=WSx<+G-p2km8b|-&XPvuf{V5ZjuE1ohzGgzX4-4&xL0M8Evcqiw?}zpMKt zj<;{$*nu;_qa!~XeXf1J&A=7JC1k%d#v0H1ylDWZjjwHiZ`N094~vl@Uwp=XI@k}v z7zgs$zKkV2f9@INm1m97ZpwJ8kR`EP;A3Hb_qpFEM;dXE%A4kk_<945Vv<39hP`tl z-$d-oT-I4t6vO%Ki*Fs!Z={Hv=Gl$hYn|ZDbd>rZkEB<-YNLmD_)G7s->_=+FAU~| zc3l*W)#6Oam|+<~41s=XToeP?Q;R#GhaC9}U;nSM&SmvD4YUUQP5~Ml&EM%OPBs($ zGQ_$I#obJRepV* zbPi*9gy&XO&wrDC=fc?IFMv(!PsB^|iR4EHevuLSMT$$APTrkRW{zVraS+NWHl=bp zhwAPhzg%t4^aL_hzL|9Rb@*%J@o+tO5G)asyqoY~9hUF?_Go&q{?}OZv2#YxA>S(W z%R&yxhE{w!AsCS{NoRev33>EQ)~%SV{Yc{v)Yr1e{{JR19F&=uh>cyIU_kBKj>?Wxp1pEQy}+|3p!JK{5Z8UPKRlqZ=U3v z;>BT%_Gaj0{i#!qiaXu;^U$X)|7L9eo8)S5!k54Ow`0w+F=E8tLpmJvZ)2PlUwP&4 z4P-&id+0Y~kJslWcfC2*oVd2%{V4eg6JJ^BzIknbFkk|Az4dU+L$8cDa zR_08C+P6b|yZo4X7uVhm@UD*Q7`U#>f7!t?aJG!`dW4*Zu>v{<-|!i79=@@GxW)IN zJN5@JK9@a~?3e%He~z7L1ec|f8wZ4B;<$zakyh6FrW6GUeD>s{R_aA;2+6EJA z@6PAl*5I9d>hRrhwRh+6ZV&Is`CbXfOnR7oRJHe~^IrKkv_Ajg+Fsgwm}^{&O*RBB zG}qYGSoB{=k5-nL?3Y9K$~Ib>!C#+OtiB)pqy5dw!}OP|1-#*_&_sbVsArQ034VC{ zmWcNs=4j>D#%SPU#4?Sp@*ZCNwN;Mxr`{52z(*f+vpwV~fPS*9)rrkmb) zjjZL2v!FQB{G7h3zKk$hICvz{T%Z&!kI8S*E%RNT4fpV4U_f`{0**nRw+ zzVadGrrhc0h!s!%!CF@_g$8KyQqJtv{srxA4EP{(qcgeHawjt%H~E}ick)Gj?q*}y zzaO050}gGzTa{sdhn;ly&xUu3Nw@hfV%RfxR#q2T$85BFucIH+{9eUem6>aIKg#_4 zF6iv?2B+$n%+J8H3#oHCbz1m`dytKL%bWat2C@;n9HeX`>s!|sLKrzCk@G~^+j2%M zICCj-L5w^g>}M;pUY2?Wsi&JVqrg@uvhU9x_H);@ddfefeX-GUf;c+%SU%zAsXJ+h zaeL+=+aqQ)y38VXP%-o|SLO#D!z%hs?CUp*BmQ5)Tiw(n|MP2HCo->AwVyZ!4rGTs zdP<-BC^+syjzo;8`#gCcp3m&8^kDNx&g~24h=0v{t)q^yx6Xv8t`fgySW}v2k1KTt zvF74BKjm=#GtUj1^Boxb6!XKH_cHS2hAtnO>(ZXSF8XNjZZUJ&Msoc=?f2DwKdtGS z4j!=CJtH~%S_j`{D6hG$Q;C5q-$$HyCH_rkGS8ad0_`&&tU1&){y?0)bSruHFfwE( zw6A`PPsAhQl{Vyz_@p@ve=GnG1>+sM*VbqymWjBxL>rt)8*wyvB*_1de?F(D z$H~GsQN9a!#2j?XEzKTtC(g)e@QD%fiTJ}XHde(i*O6i$O<=P5e^uFMF~l-|JXq<}0b|@8A=S zTO)kaOP#5ogFE zhQoc1d+qg|Xv1HW)&Bg5a;X%-t<7FK2U?<>S*AY?`B9?r#scX z)D`(m%-v;Z{(r=eTkHL7*>V@Ash_w(w?&<6V%WB_C)kS?_=wS{@Hd7ZqIC}6fbRo5 zXTUS_Hlii%fe*g1ke7<_fX|U{pXw+N#`>*hS zY)ee=1#jhmc^S{ii|Cxqyqd;P@}QgNYWw5hacL*<-Lma1%7r{888=kixv^Uw{H_q=3Q{Y9Ly|=9qXPKio8M4O?_tXl{IV+TD-Mqt} zaXNA}UgaC{s`m2sfZu80HyGQWvc8M58bh_MajuW8##HmvQ41LOHTd0Fnd)d=rKN9p z*2sT-A9jxCD=hLM@J@TfMGqak*Z$wdw7HS@U#g9(Vrr7JmoIRtl3f~Cjjv-NH|VF< z)zN466egna@|AEbPmcZZt=b6;G3|bKW_Bp^~5)Yv->GB%M)OBUvK47yb86UF|4_zTDJ#uGV4tSFQ=IPtw_X7VjlXu7KCN>H9+9TEx9@e=2yg zfmL`Ct;_yyNdNpD^d7CzyXd}7@50weYb$WEwwyKw!S^ESPN_Yvr|~|`^>veOa7CAr zGZP(R(_9NDqHpw1LlejmsRWc@OtPJKlqKYvyUfqW9JrazI=43dT1G6?zr-a1{d;P!(`#DJuX*30d7r7$ zzw^C2sb?9u5?+)aMRXuK60M|iH^U3S2@VfZW>JoQ=I-$0j_swTk8ScF6u~cjT38Hu zE@y|h$y0~UN|)~Kpp414%BeBET+_i8JeeDI&DhQR%-Ha27eOym@DIe7juG;utmo_(Py1*=YzYvsWE1qC3V;3 zwdhs!(Q8%f!HY2+wM?|-En%(UDpJ}!(qm`pov?|)H z)9$f!D_X77?SF@6HI9-C6QNnrtL&Hv^eWtn=A!su(p%%{R5UGG6^%DS$HoL~Vdy$X zpYtYrxdNTI(9>_^kI=AqIiTZo%oQFLCw?AUmQ3uYjvlke5pJVxJGMCZrS_@AP0v~HTSw>ydR1@yg_Ha`6Ur@F@ge&{=LZNiPLNw`Lib1uMJsCQyf zqd=YozWr^DE*k>8g}IcqK0jt-H!vna9Fwv5?A_SV(DfR85an1+=IqL@g2rNj$GVK> z#k4D1HgQ`&^XIm=Ge64SR`hwgrq_{+t=Ix1w@h`k&uc0Dm0XYx{W7{;_EZ_!)|kfz zr?0ZPC)x0Jfqv(>&ket}2EYGY)-Z^E&qnUwW3tB}^WxEd!f~OWu)<)BYraCB>lNTb z{=)Od^A)X;v#=2@p2eb;lh2^rDPs|{lukX?kC;eXl3RjzIsKF#oao#U=t9Z26%Klv z_Y5@P_j#7E1joxE22-)gKQP?(qf)VzeyKroZ~$2;`vgZFX6f9BgHe>HKGUc zu5cqiL;i+zVG`bXKXh=2{cMsevc1GRvb`e6>6{^WYPQ#LJ?>%q3p|M4k$;W>o#zZ> zM;aN9eWvqvBNHUU=XuvLw)^O_`YzfQ9UlZ1*#RB&SG3*%E@aop4v;-ApGvw>eVXn_ zh9lGMBl29Zi{3@+va5ujN%YI4jAV#xf{aD~a_BeYwmG}gi1Tmo|MrE%V)>u+!A@i2 z`JIM+cBk>gnVrV+(>d!`G6cE)Y3%Af)Ga&&^q;QDkU+jiqkBup@PcSJ=gB792P|3q zGRbrKL5=9jg$2e9n6$?+UcTLr{B6ROE#3qD$BP?$;T3-yeYwDUKXHJ%{ViKt_C~;a z1#E2gX0BqMst?{#oItoxtUz=&1ix@*Z$);m@Vm1#8t{m4AR9=uAsUI>*a$zK>V&jl zdrN>{_Lc0Tz-B5z55RlacjeoEW(`$0-%pPk@XG>k9ePLY?Zkf!d`@CDf?4A)Jc$M( zX3UkGJ66W6zm$9N za#s<$=6)CV)9IVWx`TW9&gxfSbMu>n-#u-ZB5zs@?B+{NlsrkX~-2%%ElD!$(NN(3jD0%IQ|3=KPDDFp5~+I3+WB% zi_0&7-r*DJ3&o>EcZccN_AYWW` zKCJ-V0EbgxtV$uhOMggD#DM7v#q1du))gKe7ugibKd-R~crwS>U}N2cFI=~=Zf1<$ z%^%h{jQ59?k4$_kpC^&)b-K`l@`q(t$&S_d3@|>?+W3fG>*FKeRpYaW{%L#^>(cnV zn@Jf|OMby}TfR8*Ag6f4kXtB+VJY2m*k|D+$@A^(a;%Rkwgl7EtIBR>k|pL|R4j_5*kA{i+93FKfA zTz~_~LCKuI2M^-)^RSJ&-otzf^yKiZWQSyk=xXvWd)zGYKF_!E*(9Iqaf(2mP>;q@ zv>-VW#4ouP?Mfy{CXT!|)sa3E9Ew|L3V% zY}&x?f`0Zfpqe^e1Z zM*aeus{k(Zz)1g=TAKo!OYjFa7k!YeBKRX*%g&U|k;(%*^-Q$b^AF7OpI(-2Nx!1d zf%qv39qqN{XO6Qi%jCd^j*Q&x{)cKbvOqK<`M@`dUCHkeAIhImY*RTEBQ||5AxFT+ zd~yyhP4f(7RXfzPIAB(hfaS{GZT zvZsb0(TnhtV*CTy!uU%M2|vP1cOJTOLR(HYscoB7Z#70&kV zCoco@bn@?>VT@!eGOzC~w!ycB&NP@irA_%znq!F<@1PFp{33dgy~x;7((y|u-)+zz z#%~&MHS%n!o|Vv(Y4QT2cSTPNc_unC1snHWl+6@s`qKf{TsUSHWA;Vhk~}(EfA%|) zKaxkH@oChxyv+PmI@FuX7~f;{ru1r^&Si@V4z-`BY|tKcC>|j@&ITXftI1;gi^KG- z^{GMLP{uSk6PR(IKN#u>*+}Fu?o1Vr(6@5R{!i&!cs-WBMbpBs##VGK{v1!+%Yaw3 zE!*)heFLj#TzVmj|8yii5Q~c5Wjn^9^PYK(XW@2#ca6?l;pZD=p{~YtgU;Jmnu~JSDp%m!vl?AX1!aV4f?8nOSX;g?WB16K9oU{+me+5E(*i` z<L^w(KSO;z%rmqb&|j?&(}10I zs{7TZ+EAN|sdFQ3%6@C4J+-SgRljUF)i1czu51&@invLeRctBlgSKc#@t?pSEW)D} zIJ1F+_8OpBouj2S30hZUWZB2a+Jt4Tclxn>s9(CeMv>DuIwkTcn+EpXRONe_7vz-? zokVijBG|qiw2OW{Az4GiPEV5_DXCuc)I+)QUB)5`-0q| z8_qw=$rMNZjV$cg_CxY9pW5q8;ydN27OuB`aMWM>pk2u_J}sK>Hr6=8gZRFs6s|F7 zJQTvLbqP_v5q#6YiPk5i(qDFpF~iaKtQQZ~B&fV{JOz89So@%Lje=X>HDsO&^(@!o zkDsBNwwR;7^qca9>TIraR`k2QIpk@sKRBPO&th#9F_4HA>~Cq-*<90%P5#I?&&1bu zyqjV%C-Ae#2^%A3FwJ1^8~%mbQyX#YuZ}$ZEx*S-i}r@e#WIO;Y$hkKk>@O0#=n95 zxjLsg%{=%uKO}cfY5{u@Ryn`LW{Sgi)3VU(=fd)l``5Udw{M`oqMy%DUTZzFY1U42 z-w3^T^DM!dp2j@+H>txSXH^n92-aC;!rXsMY;<)PtxvmyKLx^Z?$JPtUK)UP4s#5bvj=NxguD>#dnx< zO9g8X`h#(bA0m${&xK2sdAIi+W&E-7BzGn>@n5tvi!l;Tzbu?Oyo*ov-XIn*9r)tT zH7q;1#@(D|J%ZMj+P1gsf@o}R3A^UUqbD@yS>Kr%O(u%S0Sovo?BVk83E0F5&iIba z=34Kwj^@@GL!J*`2u|Qx<>Q`p;hp}RwBqlqPoXcdl3ih4!hWp>V{LQ0_$89IV=dtI zAo;zt)~D@saNgABUFvK~WQ|QH%t>!bw3@Gg@>S{Rv|c0H)oW}vhZASfM#~igtf}jB zMGsA8c&0$?SKu@Aa?s~A{m-P4r|{|dyQ6xtO@yEO1w^ zYj#F!J%*g~$SZ6@AIf_cO?}pzPCX5|SF6)a=qpFw?60k_-bY^MNqigR-NSBAa%Rv= z)Vmd(vgMbG%OM|V;|*i}PWG;M{v)`U#rLf>*qhV6j^K~YI5N%^WZ;$@e1mKtMzF14u#1&6{YsV3bW&S6PiPzG zqLi&_N4XdM+>1`>#ouR)#j6@e_K&e2at-;<&?^z|;_vjMPwmRLUI#wvzn^DkE@eD{ zIaVZ37vD_FkY|szqta!{uQaoaY$}F!Wf#}7tEKPbynp|HjvbI3ig0$=OoP5b2lrgS zns}Zi=%>a}G}Z__l1<`?4DaM;+^BJ-Q+n0He47oEl;=XdfvW%r@K zEXOF5JA%C~Y5L}@9dwfR5dQyCCz1aWF~jQ|=@9gR6H9Lh)|nO?8k~=w+~XFT zo1KfUQbGLHFb-usyNV&hFoF21F#L05x?zhNoUSMzQF*>3Nc_KOz-PCDD zF(dhG@;{6T!>{G`j2#$*?v5>|_YumP6NdMFj51%K%>C!X;~U^{VyGF$Q@kTy4|p6{ znrzwvk1_i7KjHCYjmNtj`oMW0;`Mr7ebM*&d9efId7d-5JH_wfb@9IVUNoFRPMPrd zbOT$GK8t=g0-v28_Rpk^E>q8fJRe8NFY^5~zchNMe*^Ms_{;t7wC`~SM)5{RW7Ni) zw8?iMYjT{ooEe5M6X?D^Cz1JCRdY_*1MpA3BOZLG4BLHJhNX>`-)f<rPLp16{cC2(qu|s~e&aOOE?5~t#jC~%P zqX-|-=2NFZ6MWMJEI&HWu9TwN!O0a~=>yvWw&f_!Ci$H%_F(&j>!G!eCW5Yuq|b07FpJrS0I|q zQn&W?9}92OG4Pr-cy;E>=tzi9;ZZn^mWW#xhkc9Z;wkZxc&A>c`Ys#^7vdlBlkj-7 zEfC@xyRX?SYfcOwA6&I&HddvJ5*5z%62SfvWEy;H;Js9cJgS#z^<8< z!+yfHjhF5And#w#;=nosWC;H_YatIyc17nnMv#lq0{w-Cj)$M6H(H81-`3dPkXhw4 z(|D@iR*!ohGD$I^1ZSTl47>7@<_#Hxzz!CTVsE`+%-i{Sp6z8%#dn??;(P+~4{@D( zvft5JwiDjNTwU=+KYCKcos2&aIU^d_G4VqigE3XTvNsiX(rva-okX1uQZ zB6HKjXR-F5Z(2^qHsm`a%~~tg!6nns-gcd9tM6E6Hcm&L4~%ucCF7v8!HIOPd>6wR z_P_tB*n#J$TYb{L-lm*&nk;D08lQP(MB({SfYgy0Lf1(+ez zIQb3!3)(5^d_2niC%nD&tE{{KM#S4fd|fe~2I`8Nidz)fS8P|FusQ3y0?vs8ZM}8W zFJ5?-b9?4Ar<^42)0%R&eT(=*P(X9<7Uwa+pKK1{8z&nZns^^EANieIh(kS*CSFwxeNO58 zSh~MzVqYC=n`#}Gctw6j7r55muy>13==m(l=$*li=ab#OfsJW0O) z6Y@f}?kMHA|^*Lx8yH5C)PUP&GW)s+2e%$Y>-?GCa@itF9D>)_}J(fT9 zt!(gKzLg9uHb*_HBj$(=+6W?HX0eN z?*GYWamyVBS zoPo`pNHCUJPySfyNpjgWHaf*-!x_Cd>d7{I=5qQ#yYi>D^&tZn{IF8${b69gmf}CG z46p5X{{xuXh6mk4i+5HIwei1TXQk=sjpXSd2S|zb(^olx?Ogn_6UkqL4YQWHnE_`h zbiI*w6FJs>V>inV-iU3g^+y|7+rUPp z&cH@x-ob=UWT&3MILQ_}*50Vws5bt+Ve~o%`_dFYl>a2Vt6rZ;U9wkIpM092e(HS< z8XPZA1xHkRwI~|=jK}=!J7S@a*6d8XW*4hX>Fj!&K|7g{=C>n{13H8@MT??M(WB_} zkLkUIlHrQ2e5K!2T;d#ket<8026vs{7bQwS+pl#d1j9D!D*ul95xp4 zpLnMDN<7axGWJ`^CXLkMXtFQmFDyl#Nan=L*PzTo6|^%-zXodd=au>c)CpbuDK@5o-}#P3HKx z>Mq9n@?hVnbn#E23v!aZBbNFjbfDr{_3x#36KT#who*Eklhz5Hggn=}HtDZq8lP9P zoaYAl2qK34v{9Qg(K#xH$upB@_%Uyu#heP|iC;8F%uAqW_S=>n&Ldpw^fDhVTQli! zerd~#oWcC_;QVEy<+<1U&SkFLVXaZi&fs|y=T#XeKg}7&&vE|(XYuZ&tnQzDU2Bfk zJ7Iop<&kIwh9u{szIlLLz|fO%@}Adq_C-(I4V;7g0^dK$cROD1qMw2%m3At!$s+hb z(#JZpQ92+FOiAY>ZnB)Ej-S6C=WJ-T-w?pM=k>n_dDw z=GvwehyAI<5seZs7i)1mn>ZdhH|udcBX^x+*ql9R9f{*LmzM-_yk>jQi5X!WZv^?R z80AP1$KyAtI3B-29FI91Y}sSucouk-K2{(9PjS4`xHz8lwc;AGE2oz>!T%v`Pk?4c z`(KaMZP@xbp{oA^h0AXn#smuo!mOvnQ{`CBzUXnE${ zX`guq!6O<>)M@{UBeX9a*V8s|6zz-dyPzl0J^6?$?@If*I_p#GzSNvWw@?;ykf$Tw zX*?Y1G^X({KfuV2_-}lWbB?q>ow-ZZcVvEYzSoA`^9}4C$t%+w_IEJ99>p%^!BKfo zOUO9nmbaLk*@3SCJwz45c67z zz4TuZ^BP2tYhzy5&wqd5Am1pr-p~Q;Jib%jPSv3@+SeW@S5KUniPjs(GQ`&C!zg97 zuBvYayh2`g_ue z+m+9yjRUe@I!y3?Z!7I*y>0kBQS39tC^ZMZ^&1hd3BElI9T!Pm?AphNd2qoUb28+z zD31M`a{0)9_!4+%0Y0P1x;gxfNYe!GY@TUOCqiFzwjk@_D#PRq61-PNjK`yyA#9cT zl`D9bq~GgJzC(^AGvw1E&rL&l^fAsSyjS&K2rf5fMzM7+ugr=VyVZx?Cy>V?lXDx0 zpXq*LX4wB{Ub@b@H)6t*Ooi@)z+saiPbw;b}Cb1qleX%=@vCv#Zir)v*#ftRU z2cb!gdvAvLZl;LMaAgHu(B3s`G!dP#F1hnOCwZyr0gu7DbAG==KU%0iDt*Mcm=SW? zw}6Ww<}b!}%yq}ePimp-BG`_NMt^mf^5Qr3Q)8lhxPM>6H#~9}-=~0Y;kv=3pWwHF zI={)cv;P*^2t956e8ijnZRnVKJ~N&1LdJA3ropbpGCa(a-iBQ$m@q zIPSCD>-oRZ#=F5>sKG2fA(+)hivBBCm0(W>u-mf7i0$HoSe#?@F0^+2uOmT!j-|CI z?TXf9KXyTP>hpNIgNF~(9q%6x@-(OMo9VZ387DWFljJWtM~b~tBb8!^)~`OrGF z*O44a(4Sx{pxZ=8bzGb9SivFI1pRBgg7vcCGl&7uhW2Ir_4T5E+q(#OwbrSL^-c7< zTIN23Y@JlIOFlu};ydxD_%3B$&DGYt_MhP# z49$guGsYdC7ThUDxa2>mXEt%?^d|pla3;MR$dE{nGkvwr9mK{nM;M!;|I7o(>Z{f` z&wiMBng13AFtcnfc#4k(=^OpCqWJ(_3cS;skYHM z?tQ->JMew(6$gIgEX&QauTXFb#z&Ttza)S+g!O6c>^i(D=v6+L)}1z7)#prak}bp8 zi1~HZNN!yUT^bk{w~<4}wj+jZw?{wJ?oI@cQO=WwS38%TL~dukQF+-|I@>Rr zS&437Z$jtF#HaqkII!;`=$`qpmV$gS=9Qq=T|Cou7uV0%uBUUot#++gZZl^c--8~B zWmkcl&sJEQvOArV-?#>QX26mEZbK{%| zVSoe0GEb;TKIB+qGVEW24WV_G$~ky7wpcfKTnfKMjCN1!YJz?KY3PymbZ$zz3@@hl z1h{GrV8&KRzsUFVz$Ja)T09ZsI%dA;JM<^=p}tsmW@RGM)b5?Z+APKSlNr_?o0s#Q za_kz-r^T=>3mz!??vCol*27sdg{Rd(nsdvsmU9 z;NpBG);ukR?t=aE#-}H|hcfX(pYsjL8_Fo&@f2%kCNeHt&%N1KZq6TYW{uWdDTlr6 zVbzy3hule&iE%dk{hZGrANncmXU&(za?f~HggLhyF(~kuUl5~ia^HQbry@H$Y7RLI zdAFz`=4DOhso%poD3f}PEOU~=Vb+^sMuUC0apFVTCp(*Rm-0>C=DPwkTto&D7ij|z z(O=zI{5X3ym!W4rrM;W{Z;lxI7jch&u|LEA8(d$?|0VpR2ls!3|1AF(QuYG=Kg9nm z{y(UDo;N{TAot!~b^Mva-+XU%lyT00Kjw!c#Yf2P zPMx3hUGCKvD+qB28~gaF^w4Os|^;i92r3# zg6eI+bmXi9&IP3n>gZITjDqbs*BA$e;&E?qV%)RH{ij^|8uy?+)eCJI1?u8I%72W1 z!|3)-gCBSw}Gl4e(4iR9;0shO-AGW9XELs>0e8gyOuqsgE=_q$TGLZR$t6UQwKAyQ_?-#a_|DE$ml>dGD%+s9n zqE@AyIr1}B*xriMW8U&-LwqD@Pq|&A<*au%vC0H(DG%dx5v<*@M-!4zeegb2l))TUb*)5nc+;-((Dhm%&qq{3n97*6XW7T-W)P{mRY4 zxp5|Po^s-~4ChV?_uwcNr%%i4;yCpmq-68V=x?4=$qPweAC$eP8c{)c5 zI7@4zpQCIjU+v1G0`u24vJhJv{oqJvPGViKWb@_tghs*fJ}8|FZ9IUSHcV(E18qPb zQE(asx6vH`q7BZu6mKMRE30QLf^VIb)r0%6LCPzuhh$qqw>r~+vJoQ{!u$ih6ZcgM9sz zNqb$Qg_YGR=f@q(dnPy%|LZ%>syHBBdvdL>OaE`|>#_apfbYijapPx=1GCYc8t-Vb z-D|#(_0aeoF>~dKjWb5jiI;o-`iHUYJP+_Dx|Y0@zYd?r8fWzQ%1y1YUig1w|KDw_ zkHJCPQscls)cP=4eSlVFAI6~1SW&hb|In+MX3rA(t{eIr7rUAcRl4P-~Oq~-seP+M<;%reK|SiB#MJo+K3QmPQahYH~g_; zaqqPqXE#Krk z#Rqto6I{&q-Z$vZ;Typlz*m#ysls4&4st93tP$Y2^?@PuB=B&bXCKva)j|Dr*~5PH zX359;{hxEcTsAR%XH8dg-A<8Q%0V;Z<4Xs$C+?$ zYA(ME=~uVQvB|%t z>%GBPT+_{1bidaT-cMlOHbTGa_&3w|qs3eIYOLQe4)X_saS%=gSAbXG5?<#5TMpO+ zPk=k%OVR##{V9AKz$QF2eTSH$`cVjR9tSTS^e2gDs<(eyeWgGSf<=-a8EI#{+ z@P;gnmyxN^sq)ZhUtKFSs{MJPOuZ7BioTUhrEdq3p`0U8Jp}Ey8g?XN*7R*U)VEj7 zLZ+f`bmDjkn3=V)_yb|O8p`VBP_37V_J+6HK>OXQQptZqsE&qvNZveWL>wpH$ z!Ri+9aU{=kXhZK{|K0^W*E}oxH~iUY)-i%pt;_Bxglooj^Im?6aH`xFT9`7h{+04~bSc4*7s zI}^C{ZJMRbR_H+Drc`Yp7)Biq^D`M0EBi(3$)Xz75_jIj@Lch;7UqkLJyrp)u+D4s?C9 z&H?^?sOx8g!?-=*tmV5raLPVd49wTo>X9w2Irs7JPNl7@crV*%Nf|zcRs@UY$t7RX zZNvLcqRbbxkXwK5bz?UfS-X8=d)lUd_8GY?}k z#-UydVM+i~eO#j&uZ+fye5BO5Pi3bfr=ZW6IS}{-!tb@v*?A$p)G zLw-X1(`4R$;Vxj2ep9=wx81+>T=r5@?;Y6Jp{@+uzn!t0$s7VU2lPpK@_UQMwMS4g zA)NOM%f^5&jQOhnj5{zgj-K$mw2s#RH*LUnG_IwWUo@RtH=C<(-fZ6HFF9O(pn8yd zjh}F~L%7V?cT?{}_fYSg8Ary?$lRQeUf|cCJ5}=j=4#^vbO`f0jZ^y`X+Fz-$Vl4{ zMbiV1yk~@7@J-IMW5;=skpbob>{u?nI$O~;y??;f{@nfl&K~4UxGy;35WjKQGXPCyN_X(x73e3v zt6fjvT6%Y43BL&WX*e5vlKxb+I!YYJSbZT{=duMEL6q)Iw+?- zC~>}TtO##c%3tfuIEsH=Nk3?h+^WI(fWW`+Y5G@zF3Z>$&Or4IXT%Slaj$hmb1FI` z`Q~b?b8|IKyUIzB0tWc~?ns$2qE7jqb03U(YOkeqbG3zeIAUk_stwv}ZhTPVdIf7V zm*XWWZe{CE%D>dLMM_eX-v;Vo9j021CGt~DMo*V3& z);q~TgZFP=Mm?Vx@Xs6m!-4J8E!mYf@sTL=?3T9*xBWWoE4^#SghFYJqQpH%<*&l~iODaL_`$>Y3z@bd~{Qkxa?gQo>k-L5ur1J!7R zxRWtZjdXk_>t{+HR8(6}z8%}JEi zI4*=vJ8IXT7A>b0=bq=yr;eA1w?$3CFi@QYes!ig@?raC=u*1(cx034a^Ex36OMOi z)%W-9(l_8k-!)|W(6L=IjqK}vLRsNC(-L zS-$pP=x5{>{kV5_t*r+1xbUp@c8qIJYxkP5GmwcD(SlKU$w${eu6U^0MuzQ=*e_v6 zyyQ2}?5mu%86Rx(n#$kWw8@%F*?T{sJ=uB&ZPRA+4s0>?Z+x2%9MfiUT$^gI1N_uu zwQ*wWG2+MKF^x?NFi4lw@oCTx!799TV5?1nM(?ln89Y7&9=D9wM|}UTx+npD#KS?{ zf;uDA8KX{(gZMT0-Fp&OCxOkA3`g^Y;PFu6?APM(&`ZXhzVK<3U+~NMgllAx$%UJ$ zEAvCn6TEB4zf#>&(D^@KWc|ub)dBMUBzfOxE_N)Nc>DXYJIklCJ~GPt`CdHBT4K|l zU}XFJ1oWo8q|N4@YQ#vvS5Nx!^tyei^efdi#p#J*>g@EtWdD>wIq59sFgj(sM)DWC z(fsMGiRob-#0!2T`-1=MiLV6fAkw)$Uuz+foH3~N5dGyLXVTPOM|B)Ze1G3$)+s%4 z%IU^*Dl0;)TM<OZkt?$9A6mm-FtU!<{^`q{RMx7-^8=2~#EM#0HBuOG zyXF)V(y3afz_o9&*RF}V(dH4>9T+EjR%>FHhrA{H$#$KIEQuA@I4=c# z<-Gbp)>+lZ(bbdK|EDn*e!}@#&O)J&5AklHbCO~G{3K&B|N0ZnT>T5?i(4jm!V&ub z{T-d;V&Hqh6iFAW!lgBXJ?6Z7o_GCIW$PBJ%J26Q_l2xt0LAKxkFYm@XZQ0=_Y1i$ z)vjlA{c!C%$F;^wWuE7HYwdZK>ut5`^;|0^vV6j@kN?rB_)0Q;f_puEU;h+y-fN@Y z*r$&7_I;W7eYsfO`*)n@0qzg7epB|K_E#m#oEukmVo9Di+LN3He)oTpappHconx1@ zczQQ>32P4Z?xXMtzcY)(N3b_rvS&D!G0}UCvukGMS-)jWs-O!x)t1`-{O6DJKL4qN zmn^b2AV(Z3uf0^nrgBYAG6!#EIfIA#o-c%FMke`w?-kKlB3n%M&#@z$`KP^PBhLko zU?2O$@$e^gP?x^1!xJ%1@-Cw9S>O^M{w_iO{7*)`+0>0Lsm4DcdSorbM{cghbGKBT z%eV)IS>WNm&spyK^8@ac4-C5zqr)rn&HI>F70t#sK;PdVcIVpcw=&r~lo|F2>T+C*H?>V{wn))7IxS6suHxb(F{|Po^Ig33}tgc12J(4Ad1#}#&d4{)UsXS%M z)S+@^Ym?uH-0DT1iWd#+g~3y(Be%#}@3={_seu)B8AMlRr6z%*Y0ELt}m^&t^{09OjW{ALg0% zSblpGadN>|%zAUd*+Z;>Z+X(L%;x%A-zU~E16h3+`MDXlDE3gal=Tim{}22LvGo$` zNY4)Oao^|YhlvfI$$G3A@ij-VSl=*a%1hshkNqaR^BwTF5LjP1g)_d2va#YOfEUJsnKqwg{cd0q-fA?&CuUuJ{bB^8XDmFZa@2>f2 zpSzLgfB47aDX-s8c`xzZ=kEZ1$_QUk`n2r9VL!+72T!rwU6hYn>JR-YWW9aB)$*WS zaj1_ogj~r>o&ENPzRzd9*}#7jYpmX;{`dZ%&z;G4IqZf!&sTlYaxbOsrX49)wAhN? zl1yu~EN3tEMec8QJMZXo_fXdk?r#C!)487m&gPB``?s@ZYZ3KiOD%402DzFF^q2Y? z@|Gj|Ou<`rU$Ux7Lblu>NmqV6>J zjimuMM;{XWF6Z}Teuwzge5^$s&(mI(w${^@#XhQu)N_vA<33?3r{sXU1-x}~Z*h+= z?B36PEBDK|Z$W0*-1q*YdZrGBI3XRoKUhl8B*s&`wF`NSuOoM;RClUjcCx{(|8jVEcN_;PhQbs5DS z{xZrL#b^9CbkBRevuf{F)ZXpYJ@V{j`jiQt(SP8|(6;*4brm$icnD_gZyK226TCBu zwl{OCa#~o<^sf!WqvQbRn=*AYAqUl;Zj<#AJlmQlm-kaWj@C7)o~E*0*+!o-J=ix7 zGA?PZE#4J@pFN#Lh@!0xe% zRpqZq^e~q5HdG_%mPynX%MG~Ocy5$#_ivlmfX*@(f zb({-#PogJ^j@Mcma<@`uGQSyqTcNGV z{O_Uc)*N^n>8ZBxe-Z2Hv={2kmS4QSL-ovG&Au>fE$COah5Gzabd=`h%al_YBgdRa z=~aJ-@t$53--*|Tefvt*V$zm;w|$fq-L%kejb8&f9h!1qb`%$t|M5s}Lq+XAI`797 z)f>sZ>M!KCsd$aEEk_&VOxC`ye=2UMJbKeJ70J4mOuKV7utWmCEN};mg+<`X02l9# z;%)H5PT#%=x}oi%BKz|*#p*$D*3CWVSp2{2y?dBkRh9RD>eBZnsqQq;X@QO9kv*(>eP?^^iX zoL;U!aa0|{w0&>#3H-YkY8~$$8@h=`bD-TTMX==P$6=mr{`rVwBp(XC!#gASNU(>y zO`1aT5x0}}OOBmId6IkM%iBm^l{c5P)$*?5*;|#jku)lAS^CXoY~r`dSV+EQqM=sz@$Fhq87gZw>8pJ{!n3z(*Lu>Zyfx{=WvD)yTd9mSc63Ow~2CDZyC? z-8S-eBU5Cjr_p2T51V}X0>9BQ>W6OfZKs?xx<)p%P5xXGU5X8AQC>PMhu_$O;u)2f zro63`p|Zq3;z8NfY0476sSXxp6w>8-WGF}DU@`g9THu&@>KPmLtd@@jgW5v&ov)ipC&#!kA3}zu@$m|Qwi$UbeN}u(njdSqO zx{}@>p5H!*9y>gzJv_hN9UPwDzV$p?^Dlgo#QzU@`o1u5KS12d_<8m(u~9UK*4)|1 zGjGp77zmq6_Q5*pF03o*Wy#n-7VX#=bdjC19J|iMCYJsZpBm|hIG+UFfsX$=>;1B0 z4Bp9(X~M1?xDNY~a*niR?xQUEZenI8tZ)6@p-nDOsezGa319=s5*SuqGsi(L+ zw7rcy^MK+L@a`U8G@b<=RgUav(Y>bli&9SCrrn>U-LeB^2al!gNq@ z0e)*9FqY?AdA^JL8$#;F53KsEn3 zd!X^H>;aWkwFk;$`Y?T^dzKtQkG2YZJE8A*dw_MG&>m2EN7@6Ti)?^$opuL#+ECTs zjpWPI4&{?gpuSa`w)1Tx{ZvTP!~Od}P_+ZVaBCbHSB`8h*#Ro2Y6r*$7~j9^DRcG_ z?UBB(_HV-<$L`T@l_7heT9;YmGw|(|+fn7U2Lo^#4oXMuQCj93Z3ScS5rkil^|^GiGZuHBNoTDrHm5 zCCJB)!XTMh7>5 zOIgDi$W6>=9wzUSE!3I04nFQi>2uAcG>@7^UL*Zna6V;8cS{z^$6L*>`OsGKt3H~a zeUJYg@+;m%@9yHa=2h_`u?3VD!=~88GtK>y#wov2nc5$q@s(g-;xg8@qGrl}o--4) zwxxB6-{KQoecDu~a53wx_)+&JIU@|8)nlp0T-l*3iD`@yE3q~fbIt-ou^)c^1~GxV z&N#ujnzAD)&NNNtc7A!{1%Bb(dxC${nuAeZZ);{Rr}l5A$WNTX!Qow#4U;Qedu1J0 zbWgkHybJZK=?1_K{Mfnti;9>wuaUmL);K(T5Gi8N8)>wU2ABs$s`{f zl-5XMz}f#F<@gVLVXfy#a|_J;Xvp_MGW${<-ZY zn!&*6R4hcUluZ)nVdQ9EIKS=4Q&!l|D#M|!iZ5X8JLZ71Ks?GA`<%zFmGYQhQkgkQ8!h@S8#{3@k&P9!sZ>NdHgDs#ny6zxkf(qHor)UTt6(ch_HE)4U^J7k#8B`rQ3ao%TdZ9&0b+ zy{zA89Yo_n`NjK+;XA500&i=tEIdsN$qaZ}?N{6Nt+4GD?at;|N59CON_llWug_w) zu9$%TQ}kTm-%DR8Zs3O2sgBy9dWTpcd`opz9aYyqSI;NN-`x$ZzyydkwfbN~MEBBn zDogptm#1>H2fTa1^+B}`&GXilp19B{)ffxh+Tw^o9b2e>1R6!IBdx}1B*WRI$H5oW zeZoh2y+4Gpr?&f^3O{KL@i&(s4-Ku2X)Srk5#OD{d)<{!?@p}#w#vWXuKW?s1+#R{ z+c4uJj1S%t$qd~leieVdhU|>A^g60XC_5Qr>X+UY%aP2mKe&&%IqSUat5wW&3?7Xd zV0nO5eK&m-o*$Kdj5Bcef|)1Y`_t!XxQI_J!Ok$m1)p*J{eznfkZ`4q>@cveTwcNm&82i)v zka3Rtoll8B=J_sry`v`YPXiC6Jo)3}$jJ!_=#Z3;lXwt=7+w7Ri5BLo(?#ll*3wK)Fdx@ zD@yuMS9M0b$gG%WRK||#fbMB+LQZjpfYWSl2v#AhTRu68JQ41c=+Wo=phAmZLyP7F z`jvip;oY|cOC!vk!7WgK$wr7|Qhfg7zRuNZzhzC(XI|^9ym`5I`nQ&QQE*7mA^RHg zz0T69qffl>ea18U;J2;39*p=E-b(Q9PXGQ2@AQ?!UZdUX)LXsb{$zN{ucQB?$OFkz z?Hiy&pNVt!mFl;$QaARQH`cJO6lXtX9oR}?-I-S>&x{2Fl{DziM%9@*x;1Ybjn+-? zHQ1{kO)iSjg_roZs(r?WK>Aa(yIM4ae)ZS{Aq}B@3VGU_#7|88Oro=wd!Or^#{P`L zs8@F-HltP6{RaI*Z2rMS3+Ei#>^EQabkIAq;Px_3)K|pZbja5_)_EqeR%d$AVn4Lo zhmUGsptUxutXyw6jY|yt%@Gy!=frf8%f_}lefTnEOjtai@gMWD4JTtu36+yM8?sxCsm1E zgPw|4teo8s^hVqu~QwBwMMTO18Y5+SYNs@ zX}j|h(1Ep9;m03?Oi;cf`A}(N=K4~V|012ezWDExq+fa_YedlH&++yg+5m=VSZzYnj3#V*oVxipkLCgU>>kIy~}A400v{W$eC_^ozH7D=v47A2=V!y5AAp&UBC(oQhj zkVDUiXZ#d(9xsQEuB4Go`X)J)smLMZhraQlO1iQf`gkaZG$%YHhf)T6#Rpbt~bQvj_4}-c0t?i&~}q#5@YO7WD?`q zNU|RQ{U!Yp;r|5pD0gDr4vK#?{x$YBZ!(NWLYbtpG~Wp20`g3I3B*6lX-bl9idC=5 zwCtJ0qfn-J@?z>Cy(^s?^6sKo@Ue=V(U@zWeoJui2Fksaxp5v_1o@?L{+lbnwzXF| zXXrdRbbKGY7Cqrohc$Y}*@z?DvI+RZ>*zC$|2KYeeXvKi0`(7V1QUoyv@Z#r(JCmS_}O?sEv>uxiP?$OWzI|JH) zdt3Pi_$UYGZ<}nq@WaVQJJ-^!#Jh5Bx~sf@1)G&Q1o6d;$wfrMqi⩔+|Mn%n~&QA2XVQ|KHF@hgv z1f9Mp%oFZ=$PNe3(hqIKDQn+|VQ4?)D(3_2X^gUuMrpe7quh7jErDW?h07b$Tpn51 z&E8qge{*I%Ji)h*e~g%}(O`gg%^7U+0=O(ii|<|QeB&RYl>2c%0&hk#;Lh9U5KoDY z%y1?PJbO2D^?H6kWvz4X{_(ZmmM>VI;_n)>gW>+FAjIpTcv zQDS4w*_^vzIn*<3&vVxGE|}H_zp6IUuBh>KY_VlAbWBHEQNOPaF@1k$-oX5iwE^m> zx*29~cy6tc>!BUDo*ZNN!T6~G`Dqdc{6~ps0^7TWz<|1+8;6vI4&H_*6OFDNXV#PhB zYffG3NN?Oq9B{Km9b0Vo<};@{5$5Kx4%=@TKH9mC_Wj+IGd%-;VSAz9L&pb-MUQP6 zaGDdu84)L?-zNXt@b2nZx1%{rg7(IzzP}MdHC6K?kWzucjA-mPuT9~cz#!6*nP~}?>=bR?iZlf{|;}or^@Tgof*-7 zKfa8C;MK&F|2^KwiZ_OWuWDREn>zdy_<)e(`hT8V%m1%3Z=OrKSKzfYX$*6SdCze0 zIr4}f|C7F-n=XG_=lUAv0PhC_@O%!o7d8aqjk!g=f0i?K^?ro+R)7vWIKD40fhV?~ z7xhnoSGLi|arnL;dZ<5R#3#n-ulN@1EBdB$!O_m!soRzeAF_?FeBavyd%W&+-q4vnB66X-Q;h3&=b1ND{Ss3P>6eD_JJ*0Q>~O@YN+(uWL3P?fdI-XscvvM+kr^HtB)%%%NbZCveKom?hY7gslzeD=b++$cKZ zN0qWbt>)(&wV*gw$3x+T>D95>#acO&?6EfYm z$QPks%6V*`^`#e+l(Sj90gVkXozWeWpfR>6`&`HqF;cC(KYHVdw*s!zK<#A z(@H(dzFw?cBmycm?LkDf&nDg66#9u_!jO&Z!f98joV{L>jt);Vs(q zpN=j|pWXUx?qU7;Up#p7KmGp2d%+`&bPk01^o|T2YbbYR6MIo8SH5GlNwkQXi=6la ze|Yg~d~ze>d~!NVS^WL$9Y)wc;&Yu(D0}4YqUF}5ca_?}P}N=WCo$4~6W%ZI{mt;C z@L}^6|5Od_uWRWm>0H{a6^x7Z9nur(_j!H?y2*x~`rg}+bs@GibrZc<3vTRTpF)ze zr^CGp&?G`S(NuW0QOfA0-J*SryZU?`e4+lUGbVX4({?`vUx;QA_Wkr&@H77IHMK^^ z_OG(16gt#pS2+i-(fJ%t(I28KHY_&L?WYWSw_^uIlgLumla57SwKJF7pLpCYpQSMm z8DifW#xa1Y@G{bj+hsyfcPs`)9e@EHI=L7esf2urxA!AT=T}J&zh_ThV zyIPMJ9>quc5AcBnA7oShe_~6nyo9|kw$_fokj#TA&RGl5ZrV_a&W@VY24H zT3Ee(68+!jJaa310u%TV@Ef1Pxh3_atEN$zDl3vS#1Gh9Cxm4wUp0?Oo@zRaH6eXV z=Xq<~K$ln}_D?nK(c{t@V4x^%l(g~W+nH;Y>viFDVyecKUr(O#^neyM7J1EdxF@Kw zKDnm!2kKduF1P!_FS)G0LDvi1l99Y99LMr=a~28fZ{>FW`zz4eOndhc!z$XES$H`+ zSPRUxvWC_A zG%>53t=A!{U98bmg;5FZ53)O@^~wR)M|y(@*tzyTG*7yt12io&JHdIBy33 zc={}F5E-a-#YZart9of%YVA?|D?ZV>Or*Kh4{6WZLS)tn-i0&hSJ}vwHs4)obCflc zJK&=iz$B?G?n-^Np;zVxKzOsw%}_=|m@V8X<# zHKiG=g;xo-Grz9}OFoj9j05Mo7a5juV%swPk^I!DPQBT0G|=ulGdoe+$YyMd^Qgzr z&vKs5Z-)2$O?O}i@LciU-PE_4^}^_J?1!>bewXTxED-Ita2`*`seN8gb~N0h_v_>S z_2pg@-Tyh;KW5s|j^-w+bBy`C&Nq!_g~3j_vQ3lVrJ9{V-IeV3Aiwyio4!^|VBPdV zX9mA5`K6jTFNU*LbUutpK4Bh5`OWzW;aT(cHSC|Gougm|)nzy*m3-}B;6$ei6YCJdF|7iVp7nc#?I_6GHgllsg~_;PO$F?R(C?osZo++*BDBb~ny7Y%5C3_DbP zx_fNw{p0oGdbQCcZu2O39hp7C80gd(Fj9WogPaQh&oxc$FGXzIFI>Ea_(@_SS71+M zY&XyN5WSnydrCdbFY4`Fse1)FIb9wv&CrXvle>*`T{MO|3)m3Wko%+LfZLSZfqljr zH~bZ6jDC+X5xIJjH-$Z+^_fZDAbgszCV8Lc_YBE*#-I2_^7I~Ja%#RtfB!h=efS%S zKSb`_gugzGth4FAB3S3l|Bb>ogGRou^?>+P$)-!f`eKjY)FNC06QAh}=Dc7ee3|w1 zgLTG9n;GvpbHLep+D>I(IJl?pSm6*`wVN?u|p%OXqaaChgIXKQ3b4g#5X{ zeZ0oFsRlWPt?Cb2U^f+*XV1IViJQYtE;-;#p4RC+g$^(b$KM*=#-Fi&!mU`4tb{Y zMYL|eoBE0Wbq4g1$$V4i5jE|4`R>f)?)J*(4E+-5yswarf9n>m|J~LU#AH@ql#03K004YI$SZ=wJGKljKw}=pzQWgo+nexjrcZlp{j%H6FW;fLrOYM zydc{-oLe^@>&I;A59CHKdYL>Ci#28Rviy8T!HMNtr#bf&`Xh~renWQHorN8tK8_-1 z&!I0?9hdXoq?2!n`5nYpNhi-tly&l!w;@yWDPR07ovggCqJxE-7(Kbpo54NQ#~0iF z(bJA~6z>w-((kCgUC9l>wOh!O;fzV>+)UiQ^l|MX^=F^cG=0Fa(toOdg?}skD?c=A zSRM8i+RI+nzdA=|26U7Dtszz=j0Zsfei7aDCjFb<8#JPS8`FPY|B5DWrGGiQfg8V~i`V)C$FgKb? zy|q?xIce{LpH>oYqjbNYg3O_gkCGm_8S3ZPB=ZtFhv8UX`ayQq4$4)Z;opeHlANmr zo!*W8Tj1P^81{^8;Tg&PJ7*-%x-EQ`%sD?lrQiD*GB{2wK_1;7;y00R4gZU_*T}YK zT}Za@&EM$rZmG^gkT)-W@bEljG3nOBH|x+%s)P8ihxkp&1@*JyI8T4unU#6VnVxhL z_`(N`S4`Sd{>%LctR}8D){8b?KiOD#-DG1nR}UD(vE+5`WxpRIK1a57c?^WI4|!&D z{%4%~dhYeyA4L9L!ajf*x57VmDzu&D3wRHFRrA@3P58w@uMXNrRv_<+wySvX_IGzW zit8})@GNpw<4k>}bHCAx^qFxJ=YC)l^1fmd#%A_A@2n}?gmqUAIYZd`&Gca%Yb15a zYfJ6;<*~zq1ea`h`37`Gcuh8p9dPl_uTb68rlY9e-RNt>g4eU~ea7&^He?vf$gZx8 z_S|c&g_xa8d48g~$(BcRp&Z=A`HMO$)aHB*=2D!~%syv>y%@+&o%Jv~JsJ#}vIdvR6fp)~A znm;G#b7GB@9=^mL$vIQW6ET@rAuDTXeZwYV@dO8@o^}lvTI7)PKv^( ziYHrBD)7JfIts5ul24V43hrPTOQ&pO>0Q+19ev9@yH#UZbvWbre(d4Hw&c@%U;e~K z<_s}-P4ge|T~qRb(w*DOGV62fC)mh0)z&C7x}Wy``y~~-F0DAlTxb{Eud-x^V_Q*H z1Rv5NS@V<1JLJbC-nB4?=!haqh}}CV-0aYP8fQDznR`pJr;s5|6LEb}lRNPzk>pP1 zjXUA#o!D_Zf7H?>b>)hQ&JLgbWS7$j#3buPS` z#MkeGU$6ebl%Qrg^W{~;o{?qFUcffaV5850_EJaoOybOFc-iQ1$KbCf%9U(0io#IDk4ya{>}^AKW5*ab%~VVa_<>Q{kxl;k z`AF0_DUR&4kLSD|;`r`9rPpgPz%)qo(I7v{Vy@^%j8WwVB#&7}M+ z{j%4(pE@^SZ`V7K4Drjzya+N+{vgrqmfwvvt~x#E9pr524(36c0~OypCDb2tuw%F2 zZ_*qIpO~k4(p9{Fj`uU*XFbgI4Ydu1Wmg z!lnILN!mEy*bv;C7;)9kZLDkIb90k?`_9B}w<|-ern$SM_=QOF{-6#V5#bIjC66$p zwN6`~v>dJ5b~$BPXJ4}~(7xL`d(f#X4mfv%?=p+Ju1K$RglXT%oMmtEIkzdZ(pkuF zWZ?^oxogh58X1@}ROY#!&ZW8){Z@zl8RHx065D_7$wS^LoM(Irc7b$qe=_G-#r>s- zqcfDT9q{+|nfpr;l^^fQtt#iN1 zKG&|acyHJd&3g@S5m_tlB?hJ*A5jAAM)`_Zw?1ek*^5e<8hh1p?~LwlDYWixNtpK^ z-IBcjXkluL_O;aYgD)zUr))F-0NX>)q-$pKT)Gnd5&9y&kA9j-y{|3w;hTE4?3+qI z%RWGSQj4B-?~#w{&S%|igq=))T4#+?K6WVhHHv1LSx$j+^ zLBw1r&Q;H4q-&f$o@)`zU+O-qL0{O7=q8UfFZ7T<=e@Pi-9-legoa zR$iSCA7V_VZT}!~W04vC*bDe8GEcK)gserb)tWlXz0bQHUqf|0>d&o3-N~A8Ej}3O zJR@#7Sz^HMHitsr9C5ZC7g5(-VMFj+=%#t6=A6yMB8<0pZQ0`^67A2QxGV+FnDYrNJoPpqepzoYp=@u_fZ zO)xJC$Jj#!QYuBIXywbnJeZ}JH8gSM3ES+JPT3f-N$r{s|JIZ*j(gM<*Xg+$DV>f0E`u!-*+D6S{262JrqY_#m;$ zvD4^e-fzr+!AP1k{WU*>UkUvyovT z796U7?)9`TV?@|{KpD+DmOJucakir;9$jdlulU^;<=fa#niFXaZxeI1+1%^QK}Q&H zviVw=o9XPnOT@p7zvqh2xa;u8YVWq<)czHFFZ6{PwmX||YK}Sw-axPV^|aqgjQ*+) zewpiR2yVq6G}GW6dOAjXY7)OJMc9v_*qx|J{8>VJqt`q4#Xj$pe_QGGVng;JC!|A& z-$1YQI+n4&B;BwQylOmCg`$ocOoSEc5St-i_zqZ}5Ir0)5JJ zt$W4HUTh-i=zj_7irB7Swk$y46Zy^k}J(MpDW9C6_;e6_F#k)`7{7FwRxGUuE46cX58yjwz^&=!QA z_2v-gwM}w9D;iTqnSY;kzsQ_GvT|?ommv?o2Of?a;z#5^eA@uuil;Xg%f1}>bTsGt z7<{9B?c(E9vBJlW@;!Tqj}^Bn8z$uAN8n>(636rL1n13sJQDKpFX7KJA1{Q4s*5m= zpCHCpa<3&ZhgRg#eTpIZE&O4Vcj7x>W7>j{IzkeZZ3mMK3v63 znOt4^4NrGb59w#|n))gQk4s+NEc;w~mo*U8PvgJAl+42)OaI9y)WBNrm$A{a?Dw2c zy(hu*!}M_@wupSOjZM3;fp)Vdy&L;v_si0GvX7pc{&?7btN6xT+Os69c*TA0E6Jza zjpiuh8T?7{_Bg*@`|xC=^E;D`OpZ0SwUdpRYglvR>P$`vo?tHg6!YRIZ!X8DM41Ce zvs`)P6+Hi&pALln63Io)iyQLHi7m!c+IC0ak*jHMEq&JnAMJVpU5hVerskjc_OGVh z|MU2>7=Jlu!WkC^2YdRwLgF#zPF5)j&Fb-YY-`);YR~z3_$0J;co(r$bNFBDigytU z7fbZIALVzHnD_8^vd`7|uBYOw6VJ#7%(WXYu6$e6kC=}CQhG`dG4Ctw=J%?moTv3A z{r(oeS95mILHV2cEgR(SFwcD@{H#uY;)#;#r?s$1(L%3)U)J?Fv3R9Yw5!ii4E`3= z!v5OhYMd#0_Hn!}%}*`sQt8nj{&QL9 ze)qRy2lpi}af$o$pG;m7S!ixJdV#s2MmpzG&Wlrgs$x?W>xbS7K7;Lda3tqtS2J&h zp4rvRmopE#*g(g|Cg@lA-YV3CUfAs#R~_m&!KzHEXU~zxkiPDfgw?)k<5MD*dK4aE+t33YL9{ZGfHAT+9;-%6Zw~ zS70|kV`eV(;>MZ-nPr@*y6gcz6Sv)W#!V-|S$4_YBd&=b$TSvt^{M{gJ+uWMfOGUb z_QV@Hiy-HQaiyFgpx8^{8vGUC{;&A<|0nqNN!Dx@te$Ml;?kcm?f2lf)*ch>&puCk zzKO{e-hC%yMdty`WZdi}jo#~B7kj*gtFQH4J<}O?T`Bwwq}O=^CVMNx=j_p%#WS5Z zpx;_g3eOwhfB7kI4`U?r#MWU;Rno|A0@puGFaOa@$qc@Chhz-#0iQz#t>Y}SSHQI& zdl&fj;JT}9aO3@2@Y`N`B+C4Sb7L~t2lx$)q!X**d2M!*6X$;LRQ6ABN0xProzUd# z-Pj4Nljz+$*h|4(nDF)HRBY;2{~BU9rBjKODP!C79ew*#KL^|XT{V7<1x`*e<=3XT zo2&s9>z$e+y333^s?TQVBAh&8fZYR+L}Q$TSJ&5VM{eWdTXi)&S6x)^v6I2JR~eM0 z{HjZYHY5F+_{(134KVDe3E`vX2+vyhA@l`M&&tw?7K5eF~gC zzOTIR#Qu;>i(eb{Tffg5)VHGkIX@ls+M%}@svuJZP!+eL|%{z!Kq1=CB z9qqvsb6U#M7@mMVsyX&|`QF?N7yw|;-&bU;J{t2Aw^AOwo>n>V=>hVo9&^dpXj_iT zeTw?cq1<@Na%PiH-_yFLaMzQRdnY`ZwwcE#Bi?Mv*>Z~I&7~aSx2G!QsQ$ul7nYsM z>B)fK{$udl$)|Esq(9XLXP9(<{MJOjhkSqh*7^Qce&78C=025tSCf7MebhsGt=$y) zp7yTYM|#<>F=(|tiEJaC{78Gq->^C2wIR2ng_JLR@}W;!q3^EVvK;ZU{J6^~Uzp?} z7CQ8KjWUE!{tDj_?)giUb3$^^dx89uQiI`oLQ{Uw%kutIyHEad*5CTP#iXk*4tncI zS4TR{3y#nCd21-I)*kdSr0*#9d3n;+P~Jk)9h2(wu&IMM@-QrjwAmJ(oLY; zrTjKhwx1)t@a-+q374=BEcH0HQ;ctFj4Yv?bACPwmLcmM{O@Ft)d^%bYtQ|RlR^fc zB|eo}qs1kLxp6^pLlA?0MuxM)$kWX8hGGT#JTnqZhgXGP7$;3UQ^rcf4k|_1n`u+F z$v1>!Xi~183%{^Pna#x;O7nT9_cp%=GlPzNJiX3;R4`9pjX-&-+3eOr(xalP<(Q zH}{vZ&ohUy&lBXS?WG?Vm9ftglt){Zy8!n`5Oi3d?n+&m+!NmyO}-Daq6Nm){tp&J{$Vcz|7+}^48HAisCW# ziFl|=_ak|$A%8<@MCnOa#s4hhpAUxEp`1e*XkF+q{`v0U68v}D66*JPzT$&B`DUc( z_=eIYz&n2%aoDLrXF_pDkVEDk&;9sJ&f8WjJFs!n@cjibHnyR5crq*BHlo-h0hWsFqH$dGPt0^I2eZSs{ew05d@uN41$J@S<@ zUP_evQ?%|P|9D!jp&Yd<9hOz5wRqyKXd|3Q(fS3-6|IG(ws>55jr85RN_j@=*ZWs90^!H)Hv1i9 zO9Ar3F>hZ3dn_ z-4XTYlSj{%XTVtiyU6BwGjS=ktO>|2z(2^IKGL+T2mfaB|3N+=Y!A`1YRAZi*{V9zrvJbXJGclr9AZARrb_>)z0Irp9OVBY%x9DQ4tZ+9 ze6HFPFADRS@5!c89P}oYNjf9{3%* z^^E?O4nIoo$*X$Di`aFf-Om5AT@K+j)31w*YR8^nBI#e#|IkWtJWEnNFhY-&3j2?ofwSb(8XsRPsx=Nyib#8GetK z|I%%uNrwE=Z%5|OACdp1M429Aj?`%Vq{DiOZ{`>2plbgT!+ei^tBmf{;ktB(bpfaOO?7!N_;5HLjPTE5 z&ORNQ)Z?e2pF8AdD*K+mOXh6D(Er0+xR$YLq*xO%@&DkriKm*K+LTq2oNFNO)xQTX zx#~N@Z#6z&6uEw6zASMW8gr75ab%gsTyJaNA*|%)VsEgdNLv_h^N`Qc47NQ!o|Sy3 zJ&Ap99OFhA%VUgXBZHjAZ?lFnZT!@oHu@#R<6Qx+34SB$H;1_GnUvSe|MMtgHfjBb zk;lXlM~MX+V{M=rzl*~&-Mz})t=unFeYKvHBrb}xdF2Oh<9t@b08h=-eV(7d*HaIM zYS|yY2wQsXfyK+ZLVx&T&boW&>@KHm2j|+nqt7*2`@SajB_I5a6_HdQdji2#IRA_8 zl+vMH^E}yyx6vJ{_q`yn^_5PL4JkaA8ZdzBo#CLC*gr#c!KTsvE&QBLJ>S)t8O{7o zaJ8kV50`9P;jBFO{XYEq2v)c1Jj21KR?PA3LF#;tS6|?sT%Hd-XEA3# z*Nf-RVJ(0?A>Z%g%)rs$KIS z`_V@~>czon`tS#_!Ks_-IYa&G*#0c)7&m6K4>3n9=7=*BnnsJmVSPo%dgxiFx@w)7 z@4tzb)c+7IGtiQ&lS}=(n0jWggB72D*M#%DJAZbb*L`hcFpoOKIh$GO;>e`rBaK0A zg&sG3|2*%Q4cKbrk8_@MeIB14{H$-*=jl`K_;~*0n;+s^CUJND^f&%xzx7>TbdP1N zu+F&Dt10$5t&1;5H!Nl?dZGVrW6+6a@UI$nDQ*}K@6LdkgO8%t$dG17P)9jmBCfU$ zzjDO1Jj2>?|6*bdBIb@Kc>hEszvF(*+oIUZk>(4v@1R3*_KL}&yv9iCY{rJ|A9odT zdTlF0-0sS0Oth zjE6)LS{k(3WN#e)tAw#3&?)d1|7Si3CK`Pweq3-oJjz(EPvL7ytaA3>zb`Nu$IZol zC&c08{B~h<#*)vKV(?$jska1Y@EzLmxOjIL*k4nOnAgVn_C|#H0Pny64f3C6eb!hT z)K0^1chz+jopc$zwC2F2!_%Cx;RpRoyRa9!ra7%K%RTLwUe^SdVd_%((YVYZ=eL<} zy22cjpZ?~kaZeLC`eyc0FZor*W@;cvMA-w_I^-t68&eya69d6H_>J0h4qIvuvU9$_ z6S~@2{K{ZH&W;%?RL@wZmbfnJOI_>DwZRop){iafmbmV~qWY=MSbfo7)MmS8+f-sd z*9OyvN00@4Ym((|TFG&k&~d_is=Sp;F&0Ph*7Y2MGE%5M(WT1`&7@Js-sOE zjq45^xyGIR-iX_@hO@Hv+!8GO%0&O9^~;@43{GUNY?U+ijr0BG`4MMq)%kv6Qm@-c zJDxUf4BPNj_D1(I?2k^KnN|iFX*ts$90}>i-b!#G%5_s+yQ9X#4}e{%`eljtV65z` z1@q7_?Ok=*J|~rp1u^6#xZlia?fyv8zFzTWqR*#k*Bd9_5+vRc~|Oxv5<@9xb$MSJJ__0YTX0k!#ZFG+i&@LHk{zM-9An~i}0 z|I;&zv4M0h^m&Y#3EbZS4aAFW;B$sHR-U?LS0A{1_?;m?U(UGgzUrOMu~Ex?-$Nti zn1k$P=wtf#Saj>TIY)bLJ9qWEiP)RJ7d3O<{FGhVX?8i$)M5ue=z-W&Vv)e#eCh4i z5s%N>VJheJnY5SvX^g+q+Th(XA74P5)&`uf{%~wIb+EA4=VEKXySdb`vt2P1@X&n5 zkYU)!h_X!SNih#ZF4zg??(`F~Cl)bhN4xlz%tN)5HE{Gi>*y87DZC77e=Z7EQ1_H-ooSpB(@T zjkS{Ou=DT9b?&S5jr!x5@7nHrmneRx*Xg``&`sF%Nrtfk4HNXO=(mpcwTsUZPnR|$ zhu8C*`uoj1kL>tnsTba5EIB5!*M!bnjA8dD?5h}VfCm+;^bkC^MY4*$J;-8>lVnpO z_|ebihWbUePr@MH82)Rct(w=%4r`{3vFLIqVbRtUw9h0eZC(nG5___V*b~~EiPPq| z=_E#m-Q?GXToax3-3euxWkk?P__$v&Zg5}C$iM1@GNb(l;;2_3_wcD7J2>nn^0eEc z-Nga?^|U!9d7W|AXVAID)d!-)qc+p-CVYLynKzUygEq&T9TR_7&o1VT#UZzsSZ(z? z-#~`g`>;2k0awKbWAPcaOYI4L2x^aA>A#fPa?^p#656t4ci5J9RNHb@xh?NJit$E0 z{-iC)20nO?nP=^qcFep{ZFSuCLEAm{hUIR8_B7M3db`}N2jNT7dEFl&9rUgHa?Y*q zC!S03Jo%;Jx@tUs(}B;WaSr@PJuKhnIA&V<*x5c~H9k^^5-bFu&ce|^+i#!i` z_k;AKS>ave#=j@gQCV;?&9ktfFZa|}?;Wvira0&jkG027jIee`%C-|<9QLhijWt<)cn8Z#Wue8f6I%H{smstdhA>AVmtIdk{8?l z3tntXt`6F2z)WKtHk+%tuW}NJ)vQy~SBGNRr03WFsm?=xCpCA+{+PxYH}&w6u>(DA zW(ZBl%eA z>Nd?&`kZB56*~{T{1=-R?;TZJ@7N=4J+KE< z|B9{mUda&byu{z)!$dD9QUgIt)N(^RmA1&nV}DC%KMlxt&e-0JU3Me?FGkmcee2(j z-Vz3Zg?`Yv4|Rqexs`b|c-FE{{HS5IrcIle9?Q!b*d?4nvd5T)J#(p(G9!WZc-LdA zn1Ru7O-H>p0qGuQ~9!;gdo+@wtu2iH#>Y9Wl#&|KxJpOta6MK8^XpRO}gR z$ayuiWuJCGQZ4uDYPmy)%awg+tv|42S$F8OS(3wNlk0ZcDR*YaxNPh2BB8_H7aQm@N`f34LAmaL=fbr1O}`$Wo?|EwL_%4V90e%AR9 zojfyBmwUqAN|J8Y?B$N+mtI`Q3j zYW1J`p!nVl>@IyXk{Su^G5MY%#2M8yFO(b&zl|JK`TDlLS+&h><{M3M?AR-B33@hL zp{=Vq_QKkU{tA1@8Jl>%FMD@y_9krIo7}TWFB}S7ER8YiT(1V1gkQq_EOGV1q&OZs zVHvuzlm9;izhJxilZ4;%ew{&MIafkk@euYvqw+=)wtq2sJIN$Btf5qz7UWHiE-XYsWd#*dN zkN%3){r@kl?guX~?*$c(r+jy@aD59~fpvD<$Ok$XO&BpR;m-?kR+1@yeF7YLbgMlr z=D+fZGOm#J)@YCALgaLK-XS__&le+pEqje4M%G^pu7mc)>_I<8@R`PpTftnJdB7#?{W%$z^hNadmT5@w}ac=Dw7N-@~flc|Sos!+1Pz2O3;Q z{o?31r8n85_J4xsJ*$G}{aljR2VM4IJa5O?5Nv;&_OmO!kNpZ!(B) zfxX|wA#C}fU@7Z6!u3w*H+StTF}eObnBH6d0;acOmQS2z`@(-_Uhiuk@#{0$dqv;A z(H`|*tJibvK=o&04Yr5&U1C=_@})7aIC5@}osj%se`t?g6Z^8iTx(@ce^}1(zh+I) zxq|lQN-G`K1)Yz2)33lDDPG~d8=uDOFGT%Gvj)TSHYb2n`Udrgnqb_E*TB$HJ&g?Z zh?y&?KMxr2DfJR2`!IYbtnp9K9$|~C9mZSXif2--2Qs5aPsVn?v%y&LI{v6-?=buW z^s|wr{rIG67xg=rUjf!=3%+dp0h`_*_3uoq#<%xm5X(Fn9DqN3*@1f5x6jg~Q{ zx?Edet)?)F4RfL2!#nX9>5taCIP25e2Y0X8?|z>8sy(lDYpw+LQG)uKmtm{6dZz*Q zG79#A_@WUkv3obz;Eat1Cyv&v448%yYy1yP@Y#k>NH5as22^66@<);K()kK*RH z4qUp8In%aB!a38)T^0X$#s05xa-0ju8kWNv4D>cF@U&^NM#C64#^I1_E$@29?dWyCe^Ge1 zvKtSWWlWVCaBg3!_z*XJ_LgAN*KP@FowcRcXk(qRwp3fpmA?JRFH7HMt=DvxdM)_$ zryp;-Z@??!jY+e5-3b|Z4(ks|pQ}Ykz{NCwV0wMHIS;|Kwj4 zpGb~e0|vTyO#e3{Tl9Zjrp04^;C3N@w0EQh-d&i158=)K01rJvorJ%%kUHMJL3;z( z(+q7@N5zxR;rZ*EqW?4v^Mb6=OA#IDiY7!^|R`VsawMYn=w#1urW`>VKVUbJusv`o;aHu@_bE8zXPVp+6fLARf^^6l5AW^ez5} z#_`8#@Qn7;PXq(*UHq^8R!Q`;&JD0W5MykxcLXeHt)C04Kze^B=@(cVg0C23&r5gL zwTzUu8GUZZi{xMS-q@t8-y4gO9xVA(Oz||5O+E0=3cgWzxEw>UhI;J(A7B_FqkcNE z-`mGJxaQ0YjM3ol!R;4sDvo>v-7_A?TzXaIssH2fpJ=hIf?X~>drsvH4bpl24aSSo zk@W{72OSFp_CKiNQ$e9AY#FIStjS7!ZG&auIF5@M+)`i*-s z{gE=B`HqO{GK0E|$4wPRc{B1(`|^cj9zzDi?g8T@%h;wI#VGWewtL*Pc1JN-s@IG( zynx&gHfsNA1CDS}g&CD(9Mmpif4$k~Sn2*h!6rWv8#Tll|8HQO{yD7ir@=ZE-4w^r z4fZHL7QYRw>H*|TO{5pv+kT+~84M1sbiU5Nh``U)voUn`h0ch)k+`ZjK8yi)Dzdr7 zdq^1J*%q${UQFa$yw`;hE?fq9tJHb{+G;oW1Y@+6z^~bMG^ejLMYGh z?O*Ci{wZD~Ubyjq_8EPC9b+E9l*astjQQF54Z(596ZwcvZ?N21{GMB2y`ykrX*T6( zzrOx|jc?51x8!0&A;&w`vu=L2G>3cCWDm=|&xYyE!e>2wzw<}J7X$~A_c6}O5*EiB z)OXe{p7VbKAK2^l)EixN;&${CbZ#ak(}vDUarIGKvKOHq&E3~R^pmOI)*G;}3r z)q!)?`i>T7?57iB#6UC}$(vZ;VjZVo$H2-AZKm54JAhtE!#6+V+ycpih+%q0+;Xzi z51gKZ<8Alvljcaid-jE0A)VTQ?7G*q+@G_LUiFoHe3btc+pV*Hh>P-MCkx{Q ztUG*5eZ&v%3QpoWk!u>)RIXO87OqCFwtBF7r-0RqoD3~d4u8-Pl+-I zN%n;{^Q1Gr=*niAlDy2TvB3UBE>6J*dfJ7o75CftLodT0dbHnq!m!&2pS{r?^}my5 z4em00?CDRpMl+0MV&=3SA{!GwvQv0C7ra|*x|CH54wlv*XCy~LT;M8RF!We^Y@M+} zc2YC;mN0^Uj?ERt2K;ka!5H%$!{EaUC%%zAp|#XQwp>HOc0U1bjqqxc@cSmxXzf{; zNP4gR2B95@jEQ7z|Je7mIy!UbK$72AP4a%k|H4I#+r(64v89-&cRdV_D7rv6qRplq zsiQ5@&pjGj#Wf|xuo)IHeDu?V`$in$$H$ATZ7Uwj0doP~Qy*Q99o7h*-;XQbDT!o$N;qt6do<_}n$8d6`aBi9? z&r_wtPV6L}kv_Wv{;!USv++&8i+cUC)>twAT$|_6+hsY|;ydi6e&Mt!A??(!UGLi$ zXukDr#>j&cBZtmUk)BuG@8eml5!=Ytn620zCU$W?br`Q5`(u3+ymoAjMx%OuN-?xI zWJ9cAoDW?AZrh`|FiuPR5@d74pm}I(SY=y7wup45@DVNg;J9fmhindEy@obNwrX=6 z1D06X=BT^!FWVf|^H4(k<@9sl%2x5!IXlzbMO@c&LHT@>=a9LT^G#$EQ&;T+ih(hT zJ@3lqs82Ibf>-84vnsyyPyYa4sy(UWd+0`@|B3=h_h~dayd?8W?lw_Z}W|xyqQ^T^YMoKjHQN zR<=is&R+OyG|+p|T)rvI^QAi?4)TOppm1JE|H@Al%9rAwkuUyAH`#-JK)&p$of7Q% z%#?sVH{m?JHe2>R-1f+G_#AU3GqcpY?YO5(AN&mRhjmu@9dzbsYtNuNAKd(mpcw z&#jPsgWOIU?S4D*Yvdy2z5!Mle9)0BpS>Y@-FnJ$Z^|bIJbY!ustO-nV+Ng-W*(IV zvmBXN%h-M64`cUKWqeJ~a!+MAoYQel<^5~CpHYxc=Q!_cd{29<5|p#h!AD^sYx5)C z!~*u^%Pa9AjRv89K_Aqi-!$+1lXE!I@?8u&hCTiq4#vl~!HY(=RnI6<8w_|^G>F@y zfnsv%3)lwKOFHIfVZF=el*}+>`z-)FeaN$rO~U!(Ox6zBfXLW`JvR2B#TcgTs?UNn zWwY)aE7~#Xx`SZF*7I#)v57u)Nn)U(Y4Z;1m9W`YV6&frm~tPiR@(SJ>L49x(oWUo z_OLD&Y41a*U%~P{n4(U#8Oz!K_9wAL(ecnjdSCrrZ|n;qoDI;B+($ix$qd#kJ_Gp; zjKt2sBL8gaC_WM1($c?~65Mt(I>BCB%J6?I4S&v*4U{Y0cKS1=U!>Q%TH`(D+vQj{ z`GHz58+2u()Z6eSzpJ)NeI{3W9GYlssgB#hb`Qs6()6k_Kxcr8b`8k;lekXgn#MJi ztCg#TtC8#7lrtWW`vm5R?Tu3cjf2jPDZv}d@KN&Z6Za6?O`ja>$$6;+J}Z1oI=kY* z!YJ|(tVLV)$C^?qD;Y-{{}*%b0w+~@-~T^z+1u<01FX8@rW|w=(U4?_B-tdi8I&|6 zA;~HvL8Zx%U_>QxOl(3E+nl`s%d(4uf}&zLRMXhhG@}wrjfsQc4R4?Z5Ye6s;~3P2 zT0%+WC;#{7%nYn6Cbqx++aJ8n>+GD{^L@V0_x^mJ?_)uud1MNFn1q+JHu;BXYC3;p zT&M$O->9CSWVluQiod#`aV6H1zJAYFXCqf<-yh1=cOqBEL~ZX(RjNbKhJoR3p1*1ktet{4vH;fuazY`W0zy=r62N=$c01v zzWhr|$mL(;lQUEPYTWdn@Sz>0Lg%lDA1y0ON2U~G?tI973VKW+hmYtWWR_&r#n4RM z_0+mf_WI(TPp_q(2Q;i0Uvx^$S1rpK^mP_E5&cRJbn%^8*_%rHZ)IHhhU)1>$PI~H z0)H2;uTxIN2^TuvycG2za!+}YIVbvO;X^jC#>nK{n8|h5{Tc15ZtF)mM>+qH^XXTj z#~3fkRmJQYbI`vnIH`wMz~8p3{&wm@zmsprQ>*vr+C=`I+ee-=Ic~~xp3pMhRSn`% zKU?Nm?87l>;Sz5ezo(>tGqt)ro#!*vzg1IF?@#AI%K(Z&8O< zG+;Wr@hf}CC+e2I@P5YFXk6y;PUv4FYqf_=s8_hZju^4%U=Fa#4;=}vhSoYKNSMeL zsF6*r^EcKxe*|Bk(N(SU2zw_JcNr5gPE0ns#;pO{Xv%xgJ85|F9pg%}^OW;&t3Bxd z#e1nKo+6(V7;j|NA6j`6(+cr=n@#EfTvAALu4;%5L;3S33O<-Gi0Nozz@A762n2>#zn zz8yiI%_^ubE6b`w)Qs(*HQ&v|G*s(cG16aB?>wCIU~CUDmZHgKXfgpkYOS003eec& zZc^v`B40R&ciy;1*Xjz`Yy7@+HnAXNf?`4MBo?Iao~)cPa=SjdsLxw>FVFFONH^S* zY;Vp%JG4152VFu(jh(Ld!!NV0)L!B>L#JJQTYM6Mu9UN*HK2J5obkSshkkS2?#cpd zZs}*e^Gtck<U)#<&@yTJN2~0u$B=-(`P!9J-Pk?^$$U9@zn0hmaGRLr@%z zII4eTjvO3*H|Apg6?w*q+Bi9`iT8Uu!2@!jFHH@SyyG2@o$IFAr;xgvcNOpV?z-=O z?_0!R?%=%M;yC4gufQ>pcBD_V4p?!l1;BgHd!F;|N!wn8obzdXLu9S`ja}9T4UnDm=p5`3VJhQd8YuJD=YiAl^wMGWiwxbDyg&0QMS`Hf=kOmkD3Q%j_X zvs*e=mR;~7m@2S!xq=IOi`dhD4L;Tt9EFeEt#Pakv4LY8agQ^Lz?T(#ZGpx0+xR_( zc?eTnFk0&|qL%#z_;SFu8=NbbS?hK1(MsQkZ~LqY%pZXcMGK;X_38VS55Bh(oXOV^ zevG-ctUThIn;lO$?&W%Tjc0DYbbGlai=5~0?a0Cw?zQl@;L@|Bu&tG6rt67pZ+Q%P zrXhS)+_7)tA8l)T@o0M~!9kn5SvRS6Teugt$2d(dR@-BYbUkbj8zCI8YJ1nv-kJ~> zGXwP*dLLDI|NWz;aeaO#w4RgQ((fiFEpg-390TPVB<3zD--G>xpF&*2@y?A=%l^-z zf#&q2PxhoZXY1WLz|=>*_n|S>^Q!gpBh+)3Eg*Ycdt#{W{2uu6|AaNUX9n{5|B7eA zy*GH~_Fwe+yVHZdY^1t0wiIKo*niULMvfu#ZD`;I?Cyf&x%k`Sp~XCR5f3_Pl(A-@@)>X^PEmaRD)&Hsx|6$g?%aBwv?Xrt=LR%C$SZ-UoMp~`Q}9mr>nn;Z9J zS2O>JPo8D|@$|SA`sA8}4CMiNxbn#*&>Po?F-aYn%B*TU;6CX7W!7BOuCJ_K zzlZBPPpjm}5`)7>kZ!!n-FaOlFZS2eVZQCewV@y4G%z1Ng?$|GL1f3*{1Ahy4*78-6yv2tG-j(_3Em z$WCl*WFmfu_Awali^S49%QZh_8qbk?!P>}*9}+vK55MF=?;Fc2zDO=&`uz|7s#LId zzR?%4A9SBarq^mSH+4G9^}W6N%uiJ7GfTF$Ma@eOya&EYyTtN0mpjmzI%^LMos~zR z^L@lT#BbU+kUQ?>5r*(iQ#gU4OmAH<5lfHc538 z`onw)YUucBzMWxwHD-}5PSEziC>NMw*x|8pk}2@n?&1#bm&iu(O|8EA9^C`hX2V=1 z{isXfhjAZ!41F%x27mo)^29WU=2M5b#yk2g-g%B|Z{Qu~f~5ORW4GE@92GyEzQKq4 ztj(+q_$lZv^1fecS-&meN-xVuXJVUkd z$x-NU&Op!L|7G|=VRZZ}Q7(7HZX_Hj33(S1sfJA&~zInBHqW1?~DU$+e0qaUX(ahp~w3CHiQpY(_O z^o4X%ghotHIOn6e3h9Vh;6q~~*n|&_O>InsZ^T4S)=-Q}ejBgruB?UOWL@~+Yt zxxmV`tP8C%CcTV_WaM8D858~1m@IsoW0C^z8WRhjV_$n^Ob(vHm~g0We1<-!(4S8X z8<(^N4ApVb-W0WQL4JqhGM%wl%($ozJ2qDOz#68pvTfzV?X#Yz-t|^*H}6W$;ur0G znYI66eibrL@@~zw6?yj)YG^C(&2+9TY3^*-S7I+|FKXpSgt_=GIgj8@b2+#14at4I zFPU!)`T(3Rt$ynUz9pJ^Dt)e}+U4*;U4}YXP=qXyiz7^y2#}mnFmz?I;$Yu`|FenAIoIy5><% zuEIYN`1OwLz~S#b%DM`@C%Zs#+&UXuFV8sSh~pO6voFivo#ciP6RoEY%CS&9wz1l` z5t|0Ey9P@mU3e3|`YpU8+eEQh_3L8#rC7CU|A(xbOdXj16us96I>S@3Y4I9r%LFKj#E1W0qUjWcy9WF{hQz z!v`}JS08)d$Wz?=MrPbdW`P?`Io|hK$MpS-b92#POY{7OzSmy*KDsZ)I_Fr%x&82| zCNNV*28TcPxnQL+u7w|;iNR~c*rUc-7vmf=&h07t7cWW%Yj3?s5}5ft@$_i0eo7+D z+g85z#1(PyOFPUZM)Adn#)NUH7gNrdms9NVZLKPYF=OnJ7S(nsudXo%54 zgO`4E5p{5haq)K}v@D;lev<9R`TOPEH6>%`ONv*Uj1w&WTgC*r-JtgwcgcYtAJ$$~ z?XLFBR(qeF(&I;vaeMiu+Rm#8se& zgq<7h7s+j!N1f+~kQs^v>b+PtAFg3?ii|^MbD(cvceraNx4U{@-%1sTeepf5>&kLI zhn$CzeD`_2M=G8F8RiN9Z6bA%&Z!IFW3Q!?XW?<4+pD_e(VP=|1)E;&I?$okVykV* zu4FL}J~jtSvP<09<9T z9?4K&otPYW9}~&MVTW14L);JHT2V(GnC_q@UxDl0z@^&1wLQy)OTlsbAh~e#Uozva zzktTAXy{K`8TL!D@b!x5W^0je3Kjg$&kp({KjH*g?1*;Yk}q!2MyowodJ2DUYxYU_ zBNyzj&-LOC>;If-(VgbpNWGcuq30)|ug16JMZaO*=y;8FGQG4+P~&daUV0`^U-InD z%Jb~a5*42{8D~_)ER9BxN&BgDaVY(?w=Xiw+n2=`%1iIeBnIVdL>6tV=6Y_6ne)PH zuk-AyJomcl7ueNj?cvYP_F`PK9Q^S7;TIZLlWUdlFRQ+|>@U@J(HJ?<@cr<>e4dlN z(#jYZ>I}6w#71J~?gh|{RlvqALOYh`)fjX3LTSid<7wPP&qzjwpFR1n-n+fYsC%7Lk+{pY6e8fA+0`TURxNY=R^?E1dDtx5A zcV@7+*U8pj>dwkTH+kYU&Qdo64oN*4`w)FrUn8a^Ah$V@rXRw+;>?Oo>0ABuPktSH zKe^O53S-V{uM^l5OIO}pQ|46kL`!fJ{jzvh^xeX@_Rg^V>5SuM`uRQWrAlAFoBhoT zGk8z)Wr`)$&s*%OmXUIPThrJBMojv@5Vj%KaJGiD?8sS1V?i8LCzJ+U;Fj26c z_9DsA0UVjw1W$L+{=yvmQe+lqgD?5QkzroP2oB=(fw(z&&UHO^9D1(A9+f9 z4}CToj69<|$RMBMovgc>T8C`!DrH7-#@;}#MOre{yHUMSXsvxtBDit}^k=hnuZ=Tw z7wP24aHOC~oAtA_DcY;!d!nDlF7$1RGx>b@FIw~AQnSy^bXIu4;`<$pT}(7L4nE^q zjQygfwfNvu`gS=1h-pCF9@qBADSytU|RGVt8>nC(wU z<3D4+AkTtp!RNFb^kv;t+SKWI3z5Il!F5wvJ08;7wvg78JD?asgt-FkP0^ZZDXqS6 z0<^ZHEP2}iFHFdE`{IM>I@^sF2HZk^qZg<4k7|^~yKHxTZou1+dl+0Xg@yHb}iadzU@xudas>p;)~{d zKkeM~GjcwE#=W26Xa11;x3eeO&zhb7Leq-tek7RMz-eN|b^o*&npUlz`fR_O;XT3J zw0KJ%PG{@9QR4 zdy#*i<#->TMJ<46lUtYln){cXhhGrAD<9*NE3uKSueeRKwMS%sDLS9L0nQdjosI6` z+@9?%SsaEV&T%(3ZX@e^&Vr8aDOSezuFu$h3vFwBRXavw*}$AkBXytJ7~5&!+hSZ* zlf;Tc!bb0Bxn9QU0q+pc#&YB# z%(dORb8Hv=7HA(b?MZg0O|2C2SU1=YGH&<3LOrJHxSbnFugPA$3fN8c-<2IFnf4E! zWM)jp{tn?nUZ#OB>ju(`f-~0d1nt~oU0yk9`pc~!a*-n|>SFmOw>=;75?|}8OA{}@ z>pk=t9W$92&Sdg*TgltiI=2+Zh3FsA$X4bjrT;IZ?vP~G!~*h7xq9F(HtNQ5EA2-% zUQ^ze+v!DGy4+XOoLNt|rXlXGi6vbdId0RJY14=!YZI*;zsf+Fkki2H}@5BWP>Z^&8e z4JUHWaGu6_I_DXjvz+H~ZcX)-_I;-4HF7@q=MUl&an7)B-B}NM2RZglq{O{YbWaw#yDOv(}nyYPbD)z{2X1AAtwj?O3z2> zzi_2I7s<25qtG=)WD+uuI8sH{L2Fxhem*vE6q*Wck2JPKreb5ZJm`35llKwY9_HjA zitW{wAFTUVa_O|@Q{&=fur+e*JH&YO!^dZRtS6A|r&z?&yh9wFv3HQ4=?8;&)t;5j zvhwCLsP(5gm21lhbhc~`*&q#buPtAZ9W3GbB}QgX@MR}Ova)5r7#PlxY(1jw3&E&g z9<@()P`8;m;l1a`=0;x-6AYvyq&Kdhf9dQPAN@A=5H^hTfZk{S%DRr+l4yHwur596!pKT-cobH}2kD6qwuo4X^s{SEr? zqpu&nLHoL(2TPL+$i08~^vmeO68iAv==eT2xsg3?PrmOJ!_nCMD7^V-MTRnVlA-(P zSBm$=+y6i=*bKfAV;pYfZ$mAZbyGG43)7nd;oPLVN`DKC;+-e6*TXws2!4+bT;m@D7X4)Fr^ocMdjLG%>EpOhTA z_J%Xue$9o+PQyp}eU2JN^m}zf!d+e8=-R{qY~qxkx`q4j-Sl3^`>uoCj64;t8vB65 z?kUwTBv#1T;%KBT!?_{L+PK^zYGy7%#xcLZv4cLz_Saq$vino%mO5%|*RihQc+0-& zc=j1?NT&Nv9Lu;#mr?J_mrR!*898Ft&{$H_gc@q8fUFs{2WpBnL`OHzyCeECw zem^vT{-@1G+ij&rH~YSnw2xzobBgn1v#2zhbF1kswQ_Fcyfuvv#CbB`Mb4GRHg96D z$4!jmrdQS_i$Q|(LQ@P0#^F) zoecITaxFfY+&cOq*`_)?%G+#Zt#Bhpieqwm5qn1WmQ=$Pzg~PZcJmbMpfr92yet`t z-WWRp+?X_Vy!qV;FJ!<`A&vcp&Xz5!xio^|{dWwzR>w8TdJA~$8?Sv99fQe98X()rL7zbEMzQ4 zBZp#S7DqeB1dfRu8IEZj(>Z2vWI5(>1dM+ee=HE!MDFxMQ8@%Z1+_^X}Qd8_N{LK{K$!TL_y zd$kjquU`B7tlyOH=zQ4QpUGoeRQMsD`HEZD`8D^7%;6X6ruXt~yZjt_bvk%#wj59U z94;sdr|c6^BsP8M@Q-E3nY0ruKn}`|o6otO=i&9bk)P@f+Udv0kMzXg^}6|t$$~8N z+&p7t*+Z7tsMh;wPD%O2Pf{~Teo%e3kM+&hmm}yE$@wJrL>rR#lEb1ANSnwTuqIoy3E&UZVI*s=0uUPCR9P*du^}6z* zLjB6O759|=B%ew(TIF-rXfs;K1dY_v)O?WE*G=I&)A_#Y2G8c%xFJ_5g>6gQN9`c_ zPGf@4!86key1onA()ohWcQ*M&u3@jQitl8zzG@ME*dn*pFy@o`+zo|?J^6p~x$ZIe zPUZox4VdD2Xq3Zbp;wN0W6z5r-4%LDli{5>&rG46BsmX?eZH^CPYvdo@OK7z)C^2E zxgircck=xm=0;?2XV6}KU-=4pe>~Ti`v`(A>Ab#L2LdrFMkWPnaVJ4$1~#Zk?0<+aU99on6FZQtyy*eF+ABx@hovXV7`-U zk$aW}^@U|&PL=fMe)9U0>6In5on#M-_5AMOyPAi>??Y}r9op`7*mBtJ*mBpFRd;cK zZ&_*f?t*s*LVU~&rh*UIw;JEY{5_j*#`QZz>^&#FOh4GGENxLgJ~!Yt@lECOUHu`} ze@?=#%Pn^AOoO{2GAM&qr$#U&sA8QnZ9CE1G2KBV0{*$3o~Vb}hVYqzjYO6#M< zhvRww@39%A$BpW>SO3}XW}Ovn2oI-#2jNzD2yp-|;yLJKC@!!Eg^R0+{e*bPycrLT zAs*nTAutLLjPW&*^sehBqWGFr~&msR#Nd(duEchC1)(!QauRf_C`@BAf{ND_@<#tvg`upZJEd4cugr*92f)7 zjg6&~zH+N$#YbapY4$`e4wyRZx)Y4~aa`?K*8{ulFK10pj5xDN^X~X=H%Z*Mp7m)b zgS$rB=5OW(&ECGz*Obz+Yf9ns_(x_G_7QUwn&*%|TgQ9MC5%l>Vtoj*PHR?J*SbZ# z)56%a0c!-=C|VM3^iCUN0Zs3kT%CW=7$%Fr#`uZOQ`T9dTXijc)A2Ful$1$NbeF(q zDV|aN13jmZwy^88i+9GQ=fGr z6M*MRJ^$foNLzJFiNkm1%a>l+=NI|DxrDii&N^T7L6OdP`km?PO7N{mygSf3rbRa| zb{E}FjySqIl0MaM498}5sc8~>!JX2>*srEfGXr9(3Hyxt;OeHBD;}%+Fms#GjMgr6 znrlkYQT^^gtz!i@F=N89Nk*`lBk0N$_36O(e$59FA5k7~6djg9mjvKluqy{nV}1ec zOku5|?2pj)uvV5^Pgz_NKBCMws_htgQ0zSw>cG@Q>{kmLh36t>vev^8g}EGfRfFLfQd zEfc(Kt}E@gt}aDVUtx^C;@-Z6i{l)fcFMVa?V*f0z*<9=9_YFL=p7}G)two7RW}v0?$Javd`SOM@$AWp# zsrHeGb`nFy2C2{Xx^;%VZ#$=w^YL`qWEZvokI^7CE!-q!a1d+jZ6Vv`5&5RYjEbfvSk$)-g565?v{H$?FznT;1G=POcj zZ^PgEMibxCH`R{fza9Mj$U5=H=F%s_^ZlV8qqyJ0;qONnOK6JUL&r<~?hX6a=f}W( z1ASp%Uso~KB+sgE`n{Ak^nTo4<|l}MB?`>Z*uc+y%`pk~DEAt;w8V#NZ?0QB#5b7@QZ=6fQ zF_>6=@9%+KW7D7iq^tSVhaL1i@HUzAz4OtZx)=VYFJZijJ(2}e1X--M8=Z?>=EM9} z-bviPEc}+qUhFp)E^!~ZUHbF_FG{Sa33_fuCpTxEbq(0girE}4>9t z+;3hmxy_}+x$VT_zBc-S%bZc)#uqf%jioceNoDT#yf6nqeTr0RN&Qh@1e5xrddSP1 zPlh!tw$K;#1OESUr4P$oJGmA?)MOYiqf-dHhLcC5L3`hR?+U3t1}J8f6Y@#<}dtlcgPGtmd9nb5An1-YBQS zcG26+o1&|WQ~fn&YpK5Qt8%2X%a5|YRr&R)D0xeU8fEC+R(@v;K9X^~g3Vg5ENd8< zT^@HuXceiS$#fPMyC z)?kc%40_A8QFDVs^cKl5U)Kp8715<%r@p{(8VE+8;id!r)TrXc6T$mVakET4!$`?&Iz#I9x+`vM~&@0 zzmpfGfNv)-jfby{75A^rrCpT7HcueJK1UpuMg6 zmEJ-7MsI6j751k12YinN-?T57uoYGqhkZ62)-wY~B7~#=X2p1j-z07Y7KIGtk7_R; z>_X2m`I6R?&dQJ9A z@=YH7h-`VDwP*Sf+Zi+e)U}};Qhwpqh+ppHePeaI51smCNxqEYc^_cCe;nDCNlCZO z4kqBEO-T)w{*Lh{UWQHG<27VQ`>*hv+TKWfk+`3KLi1yRZ5Q6`8*xKQ)6k zy{7PNxZhNL_Q`TffqrAVhPW_bbQI>G2F_!O9xzCR(y;Y`k=qSeGFTf80eO0@b&CtrElaOE0K%oCHIjB z*s+S(Ke7~91^2e}HJ-(|Dt?wfgRx3clPJ5Y{5We4H&c@-%-6H9OUWZ3C&pF(z(2Vp zi(QjqO|BY-yO(hYuL zMeY;$vGMFvrTT1F*xzDGz72Xdg)ZfqG30!(cfp$U)@r|Jj=7oot=dy#58qyyURzrK z{aBF6Gw#T6;Z89Qo9oeBCeZvzWMxx$eN6%0;$DN3@aJ)Vw)$0s=CCJ~d#-ooCmjbr zDCQn#Ub)>N7ujJw1nTW1Y1cC?1F!Y z1zFE9UQZnvFH7(u4-_{z4S16qm%6XlAuoVa^WukqeT2(iGPiHT-xzQWI<#YyXmpuh zp;z|cCH^Bi{W`El478dW2;mp(3Hl%!70nK(QTZW)u^CuJgUX)|;Wf-Dq1$7^vGwE| z=u7gUhTk~wPR!m^5^f`-7Q2G^(1jH|3%8H&)>u4zv7E*(0I-fzD}C&Mmeywq2qH_>)=%dp}?f_RFHTqUi0>S5!A5{M#aa1J6ZLGkNDJ<|4@-PUXEQ@vJ*i1EZqEk67;) z9N=4_JZH=fy_0dHf3JVwIcQV(`lk0;?!Og`*xq9c$hJ80tkV&Fi$35h3%k+kaW^vt zTcv-H12rA=ZPx0?i{z>xM`bswKjcFB(+zrZQV9N%_vwOZUdBddXuiNK5v}a>i^q{s?$Q z3Uw3mybT)odIsH-MRr4P;%&(@>80uLgmlzUo(}a=5xa%Hs9(D?*LbWEbn|1Q!Q<3E zE2PIkyU1}%<3#`AJ&pZ+8DeUTVS{1ad zj6p>Y)n_@Qi=d2K-VtvXm-q|P@VbF_((ns?noU2Xm!y-Vi^T84`DQ&bbptv{ zGF5XmQTi97e{a%9sWaax71n*=n&N8>p+4FUok|bS z95Wl+OMI!i?Z03Q9mZq*=VHN(JoKMI2W1%x8{V5lK3saR6eDhtq^{X51>*3`tqRA= z#cAW(Y{pJ&@>{av)vH|P1ZmDSlA(?>_f^MQIxXZWXeM$?!q?nxo5S2W<1INIPo`Y# zt+5m7r{b+I0aE~fOaMkhUc?do!*_%$>7{mH+4TnfLtgG1^pEmTEBzg+f8G%>TPm_~ zSvc0A{`sNCxgrx2PE|fi_iWr%(Lao<^p3_=v|7_YA+6@$NUO>r{xW?LuS$l=K9v5M z0?Y{`*+M-UXx01y{c|e)m;PBzA5$*411BR4F?Ra*b>I*6(a(;dkI3A@mq8%+LYZioIWk^FPNjiD_t~=K2&rOy7P!GlI}ce z>sW#vo?63L$vzfuH5+1O!2V%ikBnMc;W2Pd9*6t-stWFfcj?a14nUW7c)NfZ9$Qz{ zrQlwD2=!^I|0s{qhhy=U=2fJVG>4+v>#Zr#)+~?xR*{cO+$?hcimij;dXOnRYp_YF zV>7myxP2U1ISo2)E-Z4V=LSo}Qar`-BgG3!iq)I!v!y!dVRD)_tWWy&*)`r6-c27m z{1Q1trS)d9r#W!>YTB!@k(egyTS6VxkafJ@Gq%I^)U=Fn^-WKCTr-*bRb5Tl-BHU4 z*5lIEDx_kIDDdvOKk2rnOUW)3^ z;nxnoqU~y>GA@)yzusQc_04h?}25yqcJ-_xSO1#<{KCL(+l+1LDpoc1Dq!Y zmSwJ_cpfz|7_ZDTN5-qs`jj8ftno%OUYqIb1n{PLCdHC|Zm8c7j@bo4ZM^C;#~v@q zNR8J#;Mop56AWWjWd61Gt)hM8Tf}U}k^^vL{5pq>)2qBIKUg_6p^agk=E`q9ADc*a zMa*_09juwoZS zxm(d0Pkd&%|2Q>JVg^61h%fUK+kfJ(2mHqeZU1rVm&FY>Y`)9S>>UxrQ%{#71=h0_ zcbDR3M=6paW|Cvh-r7})r*?+CIl^X*6@D3f>MFNW@;8=Vita%cTT9TJvx7$qj(49$ zKDz688}r2DEOIy<$14`8&rV-Ne=`^Z$71}_&>{1}N%Vr&l{VUoeeJ`2$?p!or2DMp z@n*Q>CG(DAf!(8)ySo1s?%$HGTwl$%Vix!FgQeJ1_?CC{%ulEdxf&em8+!j1z86m| zb?wH%7ypiXikInG-CM&qbYJsqYq=*sOz&yVHf)>z>At>eZ1PrscNNdo;u(*Un<8Gz z4jJcNjPvko;_px=FlK+pefvFCTfkaX9tjOZGENK{P29)#6laN~TKr4NpAqfZCWhSE z>Rm+6tYfoJa^4|N?xxa}KZylSuA+BtG2{YS*jB*OXU}j8XO1f^$vK`)AGM|>RzQy% zVyY>viD3xWzeX?1zfcS%)XSIQ7h1HJ%>=R` zb{6pou_2yh{gLF4=B?xOFNw@G>1FPNv@gG2GFU!W1NDq*dRq2m&5xOeAEVen1GT3s z@qtQ=CRtoUd|*i!ABdzlqccLA4BZ#{TU8yMqVGfXwD?>)t|m7HyWkRxg1L>pss``l ze>&hRcgtA4ZvIpF1;7~3RM!$Rf4vDhQ0=NnMt<&-rMR{I2>hC73H3Jkm(Ff7OWg6S z9c!oUp|sG_x~eqX_S;z`&Il~hwSq&m@dP|+0hh6QT%k+|^iaM>i_Vz4i;G#qXU2XC-n?5n85z$v(8=c$OYZZv#<(ftc(1XpxE6zaj=$f; zhXrEWg~7TWMe!}ZD_t!(X(OS!S{tQ{J`KFcu*rGkH8N51LGT*q=~4r*HWp`v zur>i}qxA{mvul9M8MDEuz&Z|CHwaeX6P_E9q2eLIdIfE(pUUlMwEjHQ*JF78So+#R zp49YpO;1Nm<$ufTt)|9jXUm=>$0hW8;5XUB6~6~N7`jj#PIM9S7<8c+LCx<8?McQq zLX1GZkL+W`3`85Ei#3e-aGP=pvTOplk{)liz*D*+QQ*ISMk z_ARpD4Ymk%=R+IfNIZb`n|I{jXhSS!94q@t$q%0y*uSskj>wOn8C=Qlzvh`wqDQ4e z-vMqzoo>C$mHu4;*}JRH zHV*mjh(}pBeT--C(X;6lUL&-Cj~v19%OlcMAI< z0F!duBSpqF?F5>?Qd~M_c9)w^?(%z}8NHVz?p%u%G4~Qv-t`^CU^Exh$@kijMY5w? zpg+YP-V|@(ek~6EWHk;x1$uFKHVVDVR#1MIbZZoTw~-^_%{cALez7xyFHWI`oa_=^ z8)~=o@T|ji*$*+|B!XcQ&+2{IFM3|zx1)nEe*YlfaH_UVzH(2`C#tr~cetM_ywP^i z`?70t+*{*T-l^Fxm3J#OCFXO#X0xoNMpx#$BZ679HDNM-Ju<67G*C!{{=V#r?-hUZ z!rqZReiv~h`L!wf83oQ|x7+T#v#}M07#jJ=9Xu zb>#LK;&?HWilEQg6N}#(r#n)M!||)c_GSj3KraXmy>s?PasrF7=s%1Y@PABg2JB6L z1oFp3SZ}$JxCwJo4dm9wUF3ngc$D(6Ho39|SCyB0i?Bz}3z}b|1|Yi3xX+iUVU%bD zzF6wn@<3Fv>#b$&%`LelUrP2`O_z;e?4ijpmZR%KeXSS4onl%|;9ayN`~FSz#PwSI zYAf-p&msqhes8FKu#kI#LDz=Du!8HdYxI5DGd0+T+cJ;f?@132{pQKge0=KBc(B%c zNhXbOiH&7@iC;5+U*xR#mh?TcMs|SoekkYBMT%id=S#jHi5p}d3uV08tHJXC?TeNr z)1k#s##7hhn0o3*z@>RblfgG&ukqWMUrc^sZD})oRE$aapvrBK-E!+l))|mv7d5Ko zf_{|@V4m!0M|zmtyY!k;+QyD`nD^n`24bu8v72J#(kXu~rnqf5*Q4JvgTusTwWm$t z5^84&h4J&ey9=UM(lonTk0I|@tc*U;7{cb#kzmy}7iQKh^Y~&Gk>Z9M)8nLDB+3X9^kmFtCnC8#4_K4iHZTCSt z8);j1`2$(j)LDZibNP+sOsXFYyK~!< z*qjaQ=d_dlMb@9_XW`{31^lE&V$a&siN2{WSwlMNlSdkSuZex1CM|I%xYX)-zZ?1< z4~`H6f2iqMvwwj~8JKo;<}ZPyBT>*kncFt(D~w?#gl(FjAA% z{RB16yXjAqxQa3GwsB%%Jl_2h@h7djQ~uVaev*F5zELi6y+NkB#9dCt?g0;Xy@yx~ zaNqu?z5bNL@AKqii@y&v|I0h@Ki;9(yv9Lmoa*Vn@;)u%um6gVq8v}f>t6|<-Smq1 zMKUDMbF7zmF@|3}$lsca3+Dta#b2o@d*<5G1YlCUQv2cQJBjwD^_x7iZgXV~_wY67y#M=6Xxvm-DU|&)2&j~(Xg+DUNcK7GDqsO}317>?@ zr!?d$eu0sHpxCGfjVnHf+=w8D1)t(`k{jn4;NrJz!4P(ALCvMh7TgW|HF$^nK-Oqr zrq59u{z$P$HT_7YyWB>bxkX@a4CB~O(WgpWSN`HY;EOR9mS6|wMr#Hx7;kb12_{cQ)`Uj(;9_mW(@}-$P-acnsJhFmj znR6$f7}_egRl`;NQ_ai-IGzBFv$c#HD`+l}xnt&LB(F5j z@^1BU(sr-il^@4m+}3h`4t*7`DmOg_eiUzi)m1H9=A+W+Z#~QP4A-add%tVo}SMbwGZt{2S9h4r;#tEwMiPk^W4Wu8NPWe8XQW0wR*YP)LL=~@sa6c zlU12xHN(bkq58FPyQg_9(O%qL;-5#qPQiYt`71U5)2y&;=h*jhtC_;l z_Y%)?EZo~_k{q}En(G`ZU*wr`tC_~J@`YBjhib{f@dO*38pQ`#56-&q1BI>Lerh5% zfJ@O(b3ru9-=mlpGVsL4XPF}+MpmV*kgg0mqDouB=?L(x`FzpYoA_c}RVJmN8|2c< zn%^?29Z8-A{N03XF-CE=Zg=>c7WfPCs+xK=ydG+-%x$S3$wH5-cbI3CIJO$BgMdmib9}}R-W`i6>=1QMP<~AdHYjStI`gux4?#`xv&B$EI zc+tLO@BYFzPdsrTwasg$&yul6WbW;ZkL(<)B4>}tUhpDX4`mkp8!B%#*K>a1u~NG^ zD!(La1#53~9P4E(vNoI-LEauq)^-Z!`zo^bqrj}18IrZ(xQMpg9o_-Mxa4+(GS`Tv zn7;{SZ#X9cO@%oI$ljXVLI#VzByX8>4dtwCv#<}x7?0sHcgh%G2luK8SChHT$c|(Y z8y{Mz4{?`ebtS0Ua00;8D<(=?mp; z$3|o@eF*gkJR^9eH`E8oTlL|5t{sb}($G}6{sK9B-7#n?iT{$ukJk8zrZh$gXi2qB z6r+w5`^mRLA2^~Xa`KR~r>bA4Zug{LE3)?7pewT6y|ID#2(&dB+L%mVL)uEgH_(=H zT@Fw)vPN5>{1pF)wl-E|XnSgq7%Vv-$kld-`Xqe+f+}r^)@pO!=Q~IBc#W>MZXQ=^ zN@*;Rqv?tcR9?-{T$L{h?qIvOn=wq=;`uKH&EzOHm_GL+V4qBz%D2%NYYbkscX<(|gyVH9WKB=b<9dj!@66!S% z9>K2e*odB&ZG!(IJ7soOwAJNbKz}5=L|bdA3zP;gab&U9ukEDW-C4#z4KL3gd{MQQ zHd4pfqFu%N8`Fw8uzrj+V2?MLvA1ol%pXoXDH>eC9z>nkXVa}gzb2~>jO+3L>>I3m z!ahO2j!GIQqFTYyC6Z$?v*JbarZ})iP4|oIvDb(5r*NlzP9pIWgYOc5-}%6}QX*@I zG(ir6tJ)>?!)U?+j|W?x^V;c~;?RxAj33sUE%h4*+}HOI`@N!?$25n_HtVsripd+CMqnb7BX;CT-3WZp&}KP%d1-dFvbTpf!8rRTg? z>ndZh|3bxHl}9#YEU?i+8A)F?7NH)7Ze>S^t|c!uF0vscCuNIC|H{@LYG-f2$60?_ z)eg;Og5<;Gh(J>smyAv9Nc_q85Kkpu-51WwG!Dt%3uS&4_Wwf;>H%PGgqB|YVHNh$ zbL2i(=ty~SVLn_0`9Ta@v?TayHn;i{%6Z@y?4hg&_Stp?cJ*N>?1D|O-UG}{L+D=X zkcZRJhpTj-b}DoqH~s#Vb!L~ocQjtJvOF9gEnAM_qlOE8-`Gpvgo_$)Y5kDKG7fLu z0#1aF-@{w4_f~o97R6R7<0;&*H%F)!j*Mp)_yGsAYvT#7LLEr|!?6S($FdD;_}C20 zlivp2jQ}S@c`E@vL?4O`4aM_Y$(;$0fcKp3?uJfkd@S5FKp%~BnJXQVH>tKHcWU@& zt3>xhRs0`~MXfBqRa^P*RcsOM(TDx%HrsZX%hJd`XKPfSs>*|5pNf(fyF-535I4I- zM{l=J`>TBl`;%f#d%i2|&zi7~Nrlh5$iYxwCOVaIR$q|6TNr6`z@hj4gg>fF~PwA@j;q#h~t&M$+#|Iuqf95KD z*8pA{kblRb0m-B(w)kOZjUWDi{@giCe;)mPRDbULFX_*YC;m9SzOTwxvbAcs9T8dP zUJGvjt28U!9`X{nd^`5Z$|uORui90jThXj+s$=0cR)ZJ(s?L>UeqUsXd*S~eye~dJ z3|?TBP9bNhDi4m@C)6xU>~wA_)$G51UA0^`+*`Fj3h*Jk*o>SA^(_3SH8-Kn!5)Usp{U_(t~>_i`m>xKTEsmNQcfl=S& zhYjUD!FLL9OD+%9TZfoeZN&FXR^u7(h3|&QQGwI9!W~_5z zzjQiynX%%^DBuz?}X25 zJkogia`ee!pNZNn2hcYmpHy|ue)st>MyNR>#i48QwT_Lf&6LhT-^?yl;%P(mO=yn| z(=|h5wrh`}YbJhhZ7Hp}F?8>dm~D}`Yhe)C#@vLiG{P_rd!aokyT=ojL+nu~3Ei@5>TEGBll*zm+ZD{ zU-h3fH>J5J#p`7sDK;9~{q&)u>)9~gRG9~@#3POse?LNl>B{`n!WL+-Y9qwZLrrPs znu+lWpTlFk@>Pb%c;~8rb~VNeT*un=iB^v0{jV%vOg_=jT#O&Ef74L?F;_4Rv&UM=O|ak* z#Z*Hd7F=szohW=_^31mqduWm$>(pW;=Z}$%xo@=QYt9K;!L#OOn&1h|0faPfu&cpy z#|mg3TUmTTo}(*xWlxJ&G?$_JQWG5HhB-QaF*{$ut>{0beP;;mS7DofA2Jtsio@md(OuB{E9Ip&@8w+82n#92&)_#$vs;8Z@sv)KErac8`>-aTpfdn0p5E^|m> z%$is!v>aicRpT!@ki8%BE%1qsXNwl#f#LDdBlOH%t8!yDFi)>Jha+=h*zpaP=1SN{ z0Xu&9oY(>OvaHRCy${$A0JrAEUd^g@Bl!qLV9!MtL zCX(0Uiw0Nsz$4FxJ|4KL$*=d)ru;?WOR=sFuiBpCmM-lPXAfhX&`B7N=Gy*Y*A&k^ zkflAB_FQs&6d$X?H@rRNUUx9(-nWOjd%xABI3}{9Xo1^m^8dn||MSepb7Y=trNj#J z_RqGOM|Uyz|4gfC<*;`$@4th;IRtkYkFCb(4prlH75X7wSB=vN*I~T`!BmUK!o!NO zi>5_CN8;<*3jGX~BbNemEheZ~pzx%aP%ZYW+?85PFl>vwfUy6yw#a=N+LmH~Vf;7u z=C%s7CBI(&eY;(WMf6AdTyl-yBwxnjs|wDcaqn7O=`z0a963_)0y)jB3c)_U;E|>d{cBX{Qkf2o_unB>*%_*ivKVD_;F}#_&wJ9 zgzpHB;rG;@{PU0S%(3A7V)c7NW$llTaqX{;(eA7CVR(D@aZR~cL;Ik1Ydj(wA+%Yn zmF0Ed?pQebcdj1`H^1b%a5*%_@Q>P$lxvzVmYp%QA2oYoAU-L^TpC&<^QpsY2X>z*6P>Lv41ac)~*lbqq#$#A9{TW z^!-+FoCMB~)wX*KdR$MtwP%OY>0fjGSmX0<<}E}QvKNN;LHpy%UilsGW*2C`$vkuK zwx1YyZSTHMkOQ1u5yn^}Mb`9?*IVD&LtKyALADdCBZt;xSoZ>5>phbiC`I$+r8?Lp z1NxTg60koC_D(&vK~sv_NS5P0cd72JEY%Sow7{v>AvbV+M|k}Utcx=2eX_Cy4Fq-A zB@t_5sm|KOJU{QyJ~+fCxWBY-3488YD@*$Q)z(wp!>t>GuTFNn@sm$=Ph}7HnJs1J zKK$~`jxu?t_n|NEBRBrO@IB=>3(i*dR+vbBb0kCmI_U%Xe4TmZVvf0h!cC>m0!tfv zq)}rw__S&dTB~^G+(0>+ChG(yyR^jIN{KZR*zn}ZabNu;FQJq$d^1N*ZDz3a57ZCU zGlu-@Nb3F)^-7t0U+k&|-@A=DL;F^-h9+R$R2?-e6ROcKUn;^nD#KdODEZ4VYey+Q z&GsVGd%ft4UT@xncK7gv`+|AwdveOOcE)8#Ii~N>&N%j%sUrsx9FB=tPE7scZ_eii z)R7#kH3EW9u-0Jg21dOb(R*fQ47_sOUnjVS!uu5a_C*YPPgip-LKp>GdpB^9Up%eX zQ!V^mFw0WA)max$7_R@PH9mNHTG|Nm-o$1>a9DAd}>&*{);`8z#}=}UIX}PC|u}L zub}^1%U*jaVzZVl{b^ro=;F}lLYrE2`A+glmb#38;$6_N)}qu|s;{`zJ%!)NG(IV? zB(mgTThuIKZI8y|o7#8G-X2e;*)tE^G#fYgd(MLSowNmBf*>8Oi23}OUsKaqZB*c$71ZZ?8psP6O*=8cco*$#3g5AP>Z0!z4u#iu zQM(X41B)BPGSCS7+BRKo)c3v0MT!--J*d1)6Cc>9-wgQOZm}2~?ktiQPkp%zyp{ZX zptVo>4Nenhjhv%3?g_@k)1Hy)llVgGq#7BwN__{`@}$p(f2R7nt}&{!&Vjzp4GxCS zp3N8;;MDk6$HmH*T0V4K=tt=~Yh}wCFYT*pGWpWJ4{B}t%5q=-YcIv2y;SBGFGdzu z)_@eaKLz>NelhWE_L~&0>$B9yO0h;+{08lsT)rfkJui*@YqMSeI@S6olkP8NxyBk} zWIVacRe3ST8T7L$tsBsq$-7JEB6qUZpfCMoc>l)ZmXI@Pv!>7S{wf|tS9Au4*cWnM zdUd!4?beTtac^Q>=e#`rR)KG!+ludF|6X`Lioa+wt4a$`JT7Pjh8+FA;z!2?1Lfmb z^A@hB_Eirqnxb~0g+HlyiNoP)e?!})Zn19)y`@Nj`dvl(R&)dHl^8Fcf}g*r)X2NW zast;{R7wpwQ$Uhpy`NQ(9(e=L{rEF#AW z9N;U)_x9Zi&GY?4p|^bcZ9MnS(IDaWmS5(2GyBTNTqlw+z2*IlJO}K?tSMz5vfRTD zJsM==ZUetG?x)?Z=B(?^&>6qI-D5Bf)~r)Ct%;(Vdd8y|y#8wvJeW zv$A~pqxdegbMPT#i}NWzNgIdwJDH{}ovmKhg`6KG{_Uzf^s@I1a{U@O*K>$(kX-CB zU|3IOD6N66pf3-{%}cUfRm1J?xYmNKXel~37x+8o8b1b4#qryk3$`1#2K?oo?bM~Tyf2_h>|ID8|-k3?inTE$B%dlmjO`f~{%%!ey76U%vtI?Ie3#|No`U=N8 z1UyU+ji_k=|9dz&Cq^ltq`||7P(2Lw!qYl$4`V!T&i&@$Sy8(A=%i z9C#PaodM0YMQm>hxVMmhe-ryw@FY4SQtS!#zgWS$a4wz{&V}#v%Z_*E#0t(M)>;0T zDa*ZsJe$HkR9s*LI1a~~euRBX^_CAKOJC!=O&{s@Pe6vpCb6b0bxp{J5qR?9<9hu| z*qgyZMxAl-YcFNruUdsG%U7|N@_}K`{{|kqo9FlPd=@;A$gse$-Mg32#Y`iFYL%TA>y3 z>pkqP+!yV_Rs$BsQ{&hQ9Sn@_DedQ;`YTvJj$S@}ffF2Bjcft#dagIo7u^eK7x@wL z&wTi2{sSTZyi5EOv%N`M213}y2b!zanCV;269b-Ps(8sZvYD#4jxBV0wl5c7(RC6Xu|7$c6?rq>8=aEUFtU!JoL|^VZf%VpW$5`|ISX%ozT*n*< zIS=?kKlnd~U-}|GSNJY6TDY51r4ivpcH+FMKCZ|aYRVuJ!Pnkd9IQ#$`#Fwts(*iy z^K_1B9LWC4cfqsP9-#+VlkLRX;jb%BL&sa_GT>1=r(<&rG#nR5FGo!#$e|OZ_l&s? zn{81^`%>&jk3~2iXU-CD8O?dt1{4E`+XV{Y?l==Gm zXZ$^%+I-rpUOuRNhqJ!@+Dkv>`mABsr*K{NcqY7#zfyhvgIvFv>l24vPjmeyt`~mY zZfg78?|it`wA@cTbX}|2yqUF894**mz~+VaIkF~M%$HL5o{iXAArky`+hWba)_6*@KR>go_P!LEooc6?x&+ zyfXy0DVepj-&5-7T#K(v-E{Vz_}foE4ZY3t+xX6u2iUi@c`H2D>yB<8sPvEb^)2k= zy)XaEQG5%pyZ;;e$)eb|(a%(%emdY^eKjUK`VaLtLx2DFQtYc^^m#jL@rU+X{Z+p; zrs}WoCZ8!@?emo5OjsLSb?EJ{C^zWbKx<58qqj+aW4k7EgQXRcIqW$cv#$;HoNToH zvn9vbn;4wSPLs^2bNF3kzvPe>klmd(?748^J40Hykg+&z);rzf(K{db^WIQ)%SSo= z9{6@)G>}ZtH*Z_ZSfdAfGfO?m^k()3t8?sfL&h%G7wz)pq3k|4xR^GcUcuNqPOx?3 z+EN1g5znedZYy@MY{VFQRCfTo)&#|hJIng+cQd~^;fl;}>WPtf$;`&G*4yYlzEq-_ zy>ku%$06X^f2;cR`JkTuXm9d{ENAsAcOms)u<3Kx@44vK(?Xqk(G}>_D^7D&ll{aC z7kgIc$NdkXpZ+FxWxyPLep)Y!_?c&9rXrr!k=@B@o$*{Kull;aBHe+UA-PBYvif?B(48<#zBL`ITPqL*?k z``j;Hd;;CS8v3~Bm#ppm1sWcizWbq-c*|T6iJ_NR>e290+hv;17O=;=!EcBDfQX6tJ^}pHID2dI} zm{Gj8V)v|*-IMMvuR|AUF4n?ERb9DJEx=fu=YQbQE>Hd%F>d#G^kl?zS8ShRcg26p zbeE6AFBH6?JnaOY)HQqN4!4Cfz22nz(d)o-`W*aq>NzFv6CIvI{JXm>ncDvNfEPbY zds5K`zw6Y7&a_dH)#&ZcYu+rYr}lauz-DMm@oi}QU?Z||HL`I7{y1&Kv5EEVgw5Z4 zU-8tYEay)8MH>m)Z=#K6+Wi>vIN}Th`g`n8k%R2@((fPx@%1MszzM(Gw%Fi-y=gur z_|@<3as%I~=NloM`6>>E`_sY!wz_a2nfnpR+_!3LY^|*>+W5a~D-KOZIv4pBJ=Klv zagKM3{13)J_RJC3!2>Z!Vy9ZWSM@o}HG8tRVx!@oX0dtBkc|eu)9Od)pI#ZT7s(9< z8Qz%Jd>6PhH%b?@+GN$sW4EPt_Bs1uTzlM$&_ksKRkOSRiYN7a|C&iKSV|q*br&AXNo{9r+ zNP`)85B{srFm0#T?D^_^=3C&YuTF-im~R;qvAr`t-W&E?JbO#E4e8=owT)!%rjlsZ z0WLc#*!sLWQ=tvkVR|daEGbELQ>y`fQ`<9xdfKil*4maYnSV3?V2?~v+xWrKf8wFg z2H;zQ<2Kr34^lsDk3J1R_oBy0nt6WOk$T!Qu-`^)uX=Oa zXG6D)q1u+Oq;_t32fW0X*LQZ81gRO6Y+Aofz@7WyPuPR;h(VE{ZR4NFbT}{q5==MuTkdO>&al<3IY- zRl9cW$J*ok4$wXG%WK{hYopgnz*)u;vBh|C1cD{HmM` zn4`7%KyE2Gy>zF+>30jKr*;?9XZM&nemQZ`b{;Y{ea z%lC@2;3E#@Hu}*NXV~ZzttsZ5CQity%1~@Y$#2=)qsSQGe9xw{x0t;S*;=yEH0OOc zMRQ(Om9^JTMlSYKmd%#_ihQM-v*uUxrP$0T(g8GA;^eJy^Ar9Iq6ZA_HhMsZ^Z?;c zb$&C}W3O(CmD|3h_;dVk@|R%;fBodWm9O9XGyG-COEd5>&U*?S>U+Y~?qJHP!^P$x zvU{Zq&t%_IK8t4NWfl6v>*LnYZJXDWenB4E#trf%-OV~IDz7B>k=DcDmtV#0i8@Mo zeX*-Eg1y?d3+ySRK2iGCkI<_N^vPIzz`yl@^i1H&{ny{mHRI7d*w2dQQR7)o;lPUT zoo4*FE86knwx1SEDXuThs`^Px9}c!|;nLE#@Rc+(55ZM_67^wxBiuhs|1tH!b%T#D z!K(QxKT}E^uaB4LV_t7@W+C$14GD)F{B~`z@|5?3L(U3x=e|mh0}i2&od-X#M45vD4k;D8!!uOxg3>XUg$k865#U5UmOB+Uqbr zEx(2rRi3s9o`!xXo_0o!rwK0%FTbgLP-70jd)hhW6~-KVwiNgKDuT;Q{J`=R&pOX5 zroZMHALEqHHAVS3OVQ+<_3-xv8JQjA-;F1$Yle6QiOeDra~t~o^C zzU2F%^1Y3XUA_Wnb`vzq*d>R~5Y57K((;o6OZiDJH8cyn58?Yf9?dd`*?yH~@taOf zM}AV#Y|L@r^pi5?H{m^8n#Q>Qt;c$zfiq*(dRO7BeTwmLo;}Gcc6}>?^VE4m#a8_4 zHD9j$4lzeL2;Us*H1^|d$1Sx%4_b$r;K=t-RA!>1e3yUWxaJ|Btky~}j(Ok-*M?_W zRa_CB3cn9QLx=vVEE+mnG<5$^an=lUO4@$t6~5^O9vhnidhJHPxBO3FGeS!b#>!i< zF|;4^2G_>U;D1Jn{Uq?h@B(jDB;?Vrt9YJE7t_&&h-pm5-`o6a_P^VtK8_rTe~DW~=n&pW5LcuH!a!J8L= z&0GBIj8poO+0S@cIJ2rW>tWVncdR@$Jye{++~q?Sz1h|&;H?{oJ`LWmCf`b<8>X+C zG96hdpWNHxPYw0~xb7DYteUtd0Ir)ofhw-ESN4v^+%;~@!t?QC7S4~ypYdbvcqe0? zNS_n+#0m6S(3q`XPM@O9uAoYv)(qhM_VoF170#WE_qh1Y7{~BCsN%Qu9Or8XRt$pQ z$VlOLhwvL2IV%<6x4~-*IpkzZ58noUfe+%%-R_|A_gF4#&%N+mbSpZZ1AbdU6~8Un z<6nF0p4wx`VcMAKfZsEab?KgxE!Xr>+jn}9{wJ|^;=|(0bKU+> z`%{LFg6q*$HypTX5Wdb_#Me8-*YWGjp5$V;Txj&9hhOoE%jP7?E_7<>iubiIoOF@# z9mqaluYCcJam47y8u7}aH_Hh)V}P&v!B{ynLcdO5Wj^sE52QC8Xadi*ACz&(HwT{Q zWcOO=dDXq7Z{jDocLh2Oe97gR_QxmgAN?hDZl})6jG;;V2;P){zce~JkFh*ZF0kIN zo`9J4Vh1tKoj&>I{r+%e|CTW6NXHkQ(Kh-^3o+&Loy~^d&9=Pz=fMB`$v%4N&noTq zHvID4C3MQ^4c1-Q*p-%fqRA(OWRGne!sEvg@pUd-F`?plf7f?QLT=~jsxxRCf8CRaImS-rp za`-LKIhW+3cpC>>e<3hVP@bi%qn&Y4rtif`R?nkM`2ZVS=0Vv4?pr*3R0ZM;xX*Ck zHnJ{k4`|nqaz?&4|N4=}FAbDVBF4D>0(3!OcP8I@Ph|U;gIE3#dmEeL=%7nuBsJO)G>x6 z_|`(dvL#e!3FjDo)w6yy?=;V&SqI3$n;(5p+!J@Iy6HJ}89vco=v|#rZBHko@ z@r%q;w9o`RMYH!G`5C$X*w;dDYeko+!87Kp5AFxnEnWoAspkP(hjySt>A%{45}ioD zmTe%tTlF1$8?8R={5QtJGszJ1?5XPhSi0Njg0*(OrFQ(NotKMS!u#2Gm(3yGsXaHX zxq~jCed<~4-A?I*o~z@K&ZDu^Wa>}TUn`!8FReDN&E2$jg!ZaqYjD+84!y_?y6`vo%Ch2HRzRvo7{oH3+m(P|`e}!J&7_E!WYD_uXHLx-CQky^Xp3a)A z#NHmiKX}gPUOzGm96a!ByVZuBUEABseHWYCwyX!f-DbVMb>+$iMqqLaFkuf%lecSd#-`B!SliN@Z$I$aThNc-oz%FOf+yHD!jq)h<~|Aj7~ivBg?FBD zXKz1n^&tC%=vmq)?9e_T-~ry= z^XeH}!bt}9Z~Blv{Mks>4Oe|ghw&jvcevSo{m4RmYw{&E;Y<4FkNQjR`vI~M{&M;} zuP8o{K!2A0W})N#<@x=kh43NiE>GuPKeEJ9e1cb&4!4KrXE@)- zo=Vx9-5+k|hmOQv%sa4oCfW}ZV*w`E4}bkO_JeGPU)R1*q=(4?9gVf-gOKke@}uB~ zz-BOh6m(O=FObD%e`6w!5tV0R<*?7PF8*0;SH;%L7M6TzMyAV`<{|Su$#i#B>6BZM z>4)Td7!FeKDbc0;w89(N&dvEg@(}k`rltDBeZ*whJTD{_H@~PnpFDsyn^L@0w)|Us zf{fjaIVC>ywYTy(@gZzs+4EV}cxfISVVw0=)ff0j$a@!Gpp7qZxBQxXGZp-u(mGs} zPxBPx&xC#`lbqH#8W^|Yj5_oE;U1D#8GZ?`G2?K4#W+}NjpK}A_(~qT%etcU@cVfW z7--+U+vzcUr5@Obo@95``}ECq8u*A-Odq0C*P~@r_M6J+eh-Y=>_UZzkR;`6XMa=HHc!m{Y|iJ*&n1 zDef(@L8I8em|tC&06yz%KCt2z>`?fu?9lhh4z=Clta0&wvo+QLyO}m?z9RK2nNjn} z%|091|K*ymXdv>*u_nep0ZvN4l08||rRJcI$hMj5^oM^Dzp?z!Y%=`?a8XR4jZZRm zn)o9==yT)f&)M?dV~^BixaMQ#SGCv1?CY_4vChYv7e4k`lU%dTS~uBh9&5bym1r%c zr)W>xwUF7ur@5?q3cO?7numN9@SUmi7;`4wf8r=KF*YXb#<4Mt!8?jGG_@5s-JZx$GdhBwxY8`r-htOO^) z>zBc50dV>O!5RzsU&?O@zbwChOPC2>TUkS`XLo9S@r^?<12560#wNYsj9b~OqFixv z;BiT`x{PuBC1bsgk)`Q6sWL&V`5*~Ygax|4c$=KC{ zxjRpsl=E!a%$Cb|kp=oL%d`>XFl9O3OHrPuT=72+k`g8L51cJ!so|jt}euQ&v(i3i5wZ8NV&Jouwm)(6=xbVxbA5m;> zBD*?NY_9wzhl$huz^9}uc;){GTfjf{SX$Tayou3Py;E%u-6v`fTLxa1Zi(z&*)p<))uwpF z)bm{8ao`Vakv;d6+5>JHlVq-u1=vTDxw4J4ujN4hGd_f5?gW)Bx9sm+%? zgQrG^PviHcJ>jn58^(`EJi~7EY|aiy&+e3-ebWHG%JtQ~hcA~u%l;SRH2(b7naGpW z@{;TX@voW44=266bRKf_gWKTIjQf=GaPeJ?M>5Cgu*RQ{FG}N)U(o5p4~8!vd6Hl} zb9cNM|L1?R&3gFjoJ0S!=~kZKv{TxxU~8LoXbU#lX8!r@;FrCZ>wDU)TQ_o!ou6zm z`Ph_~TJ%s4Z)yyxvdD!$N^VZnYv7Mv9X*C;XIX#YXFYIj$k%j)7mbdP+RAzjR&|61 zbc9m}P25Nv9l`RD)0D|p*4$+$X?_j){_s!uenCx-QJtC&cFaD|*ci1BbR0cKdg9zS z_km_>E#zkgAG8l7om>02!VB?o?cdH0z*lhA?BBAlH8nlJ8GwktoBbeboNwG>O|V@X zID@gd+;8@oHBOCp{GOG?IHiXfym8;zSYNH}S^XQ1wZ`8yUXSsbeV(d()VkO7k=Phq zB^&XFPt-#s8`~n;C|K6ywO}Y%if*KrNjA!c6fESAGrBXjg5zM z_>8gVh}Xn+mCiIcVNYTbYk++@Gq|WE_-=jwNKrgRGS!>eO?(BkMY+~Q`vW!o#7?g- z)w3o!r$4!pUy&T&M)&ipd&O4G#^L)!;D*s*oSI(B-dy_j16SR`o&tKQ_7vW$Jq2uJ z?I}3yooX!73)QdiVC!Vp=xJ(4|aq5E{xg4=pQv+JZ2NqpLliORQMfzn(^ng*M9q3ZDR1di!an^ zuU#?0iiOd;>x1s1bQ04xZD_1E?Hb&qTsn(#$J8^Q0{)*9$eC*87nMw3scR$NF>yb# z9$F#>XJ&q3Nia}6p8S)tmjoC2Jv@Ae>eK8)a4)+?`yGN|v<}$I;u(YR4193n86D%! z%gsz(V)pY9aBtlkXC7Lk+IcyhPt-X%*~N-q(U@eT)W)NJ#k1bh_e6eWL%-u}_5bTX zu zTUoRq9ZLG1V(kn)z$e~}PeOlEe9}b!<%F2Ri#5)-i7Avm`c7gA@0i8+i=oT2-x$5; z(EE z&Dro)oe)2o@lByai+@^yS9bDl$@l<$;7M5n^j!0u#PWTWKJ=wQ?3hXDNavu#P2x-o zYu02rS42D`kFKm3hC}EZ?C(h5I9vKg34iY6!|Vsbmw>(alYCb4due}XIMrL!Iw?+1 z`i9XzDK~OB5WV+@zm4uS#^;&u7@wC8z*x1O_fkjxPw^nxH^K|~LAB5LEo{ecY2Oq3 z?OoVzAH-%;`}(HfDXjxW=Q4W6xc&>k`YrY-Z8f`hMSH0DD9zsXyJ+hcwdDpzpGK#< z|HzLkQ`tim@7B2Gb83?Pja@7MY%}fD(~kJGvA>z8^J}*ElyG63emoUim|^h1D_+aB zQ@vivb$j*ty#dispYlgtwQLo!kn}%S1F;&vQeM-y>d-v;2w|d|$$e;st*zvJ+(=DrT@2C-^)u z>`Q?0{mtaQ%H0=UXOZ8M_Um%@Lg#&zRhkp!btCt3t$Ht1uH#>8r}4eu-&=G>SXbuM zbuxR-#1S>*B3#XlhpUS?t0}qpb z#K_NS>x(+WEnGFaICGS)UDH9YMZeKGxizfS+>^GDqoN->>9(Nf)b3ye8j4%D^X;GB zL;naa95Wv6%?+~ehkVt(Ux)Vn;A7_@zh|ZwmZYOfuW>E*0Far|$ITd^9mz`3kmR?K z+l(g$?y7w&e@Aro(qqoY>w`I;Hyt~NKE8}Unh$p(!@Ga!nRoH@F7fo?h^Mzs8H{+k zV9*xvbmdGmddm#-4d7%u>&;o4zS9Sc5A>JX#o$)N0~xFIjfpa!vDS2Ujr9%r%zwpL zbv|GEM(d3A?4ca1Zx|T_%w)?5em^(sG0rADp1y;uDNhJJvv+S3|r zo#Ym~TgT~Av|U>hGdJPh@!FRCMce-exHqPE23MGMuj!pGGQikjK5c@Z-emBS@e5a1 ziC?h(Q6Jc}7JKW1&>{FFI_wY~GX6AtUE|j~qV0#_?OW9j@5<*s?7L<@k|W}S>Q8$f z;@{d|;+$2u`i;>h@iB6!lxwzra8z>5E8kq@Tl=f`w^Z+c%>B*S?hU|-bJV>zr~CVF z;a<5)bbkx?w^H}ks=cqWTPeF?BAv)r)__m2!8blZM?OK~W3|U5dqBKHbn*~-wayR8 z=cPD;9{7S{*X0{LMqYV+l?Sj_&Lw}^Fn-_hu^G=^^ZJo{;2UH9H$US4iUkq86i1^t zAJIe#9VZ<_t^gnCECmM(4tP6iY%#C8|KFxUE!+3c7dC^ z&sA~tEbdowT>vNgOuPH31~$=cWm^g ztaE!9v)XW3kq-+WUedavs2EJWPyVF6XGp%c-d*AQiNr1NZT3uGDNFvk*U}r3G3%tF z)zu9S3=#isH7Wnmdg34w=)i?D&!jKK^5O@);`JkZx0>?%!V{?%<2uKG6VENyAjP>P z#fv7ePo=x0te!A|+$8_hbk((5?+Fj#_j?)tU(6W_vgF4Tk4i9hllQH4D16l!3N_ET z=k5K=(b0YN)iL9TY_+{!&J7Jjs)T(>Y?T zLCPQcwcaD1(tOWdc@EpbHOunK`ZoMDu9LsrUDEg5Kg!wV!c5%610{7rEsj zYw1II@Ya8h^Zm57o_#jGV{@*y!Cx2N^~e3CyUOni*8hHgsm|iu(MWfoGsTy(t|`WG z+u!z=Hk`#X%I1_o;W!&G;_)RDY?1b!f>* z8d|6Ig$_S`|1d$hfzim_VS=)De)AmapOd}712MTMdf#DV;yzIel7S@%hkAn_)77(i$%YgvqIY@Z!7Kl_jLZMX7Gp=xd#aHpKeYzPy6cbM4L7sgT>D~chBk()17%~zLjyt4W~D!f$= z(ky%@qjS;lb8tgE&7#gzIwMd13GtnlKVXdcOu1g)0|jTvWw_6qeL{J|Q~l)g$>6*4 z%4ZGrmo|fM@!Xx2mu?#@(Wdxt*-C9@u9ugy{dJ*RZIir$Me-01{fzM~>_xuuJE~lP zIkiPD!3pCuJk9;#A?4LkKP&T$<&&#R8mGo`J?&od>HdFGjoZUz#GV}}{%>lMEoOQ&w6vAge z5Y*O*d{%KtZ*jSseH-OP6wkQ}__o8(&ia0TsqkCqu?4UA&wshLq`gsxa+fk)cXEA8 z^}2)WeD!)7*OFZ={MX>T5Lj91yP-|;Z&{0{wq@=+ku{m#c?RcZy}QGhb7zIU%d+x$ z#DNpTDL)A=#GTV(lqJV-fO9MRo0eVb-3#m;CY8{;Oj& zBAKeZFM{hP;QCrRYENr##*RHD`%L-6;9ZCRl;1{vU*Pu{e&6ADGC%Qv+PwdkIclw1 zXuAb@BsttNvbH4up>kx}=p5iPXan9d-?q$~Fe6t%QzAIo(7EN`OAgwTLq}^Apu;l8 z&oM^j%xcgX=QHmNH_YoUT?~!IyZVtcZ=#}N0!x1O_3!Q{8rd~E7f=Tnp%(L9Z=F>Zd3 z1HX2SoArgaPZv%{G!w}W>zq52k5ZmEb)%_+0BO?spA>xxF5+!-m}|==CzKnm<=srC z9Lr_O2gr>_o`6c7a0h-bU#RxKA40F!e0!L${vR@VRnSYSwAGNgn;5DkWzM=hIZ@8F zQnx1O3RT!11K0G%kp1@}MAM|U1zX}`Oh0PtyIePb=gQ-yhsbZ)H6to25s^ zoJ={7>9Vo=J|=K zz4N<+aA&C7?sCpW(;;os|yZHuSib zdJj=Y?Wj$g>&@+nGWc!kS9u)k=f$(>p5%qV>BH2SKW;1<#~;#84VI!`;kfn#MLQeL z?Jr$&zR7ESSU8iST(~h_uArlh;pXoF^K&(BXin=Tx)aU{w*)8gicP>pYj`qin5ORc zs=9^7ayerWEc9IOPoa+V*93juLA~)b`cdkR(RP(jPh!j}(|W7#&c;}IGwU4(Zc%-&ij0cGOp*GGimIc&kz6RcO@%`4Ov{ipD~$yk(~e0y>(6@`D%J&5*}^qvm(dE9*+%pSjNP zcAZm{EYvwh$u%c{e^O6!#tz=)2(^H%9WpDM?0^rpscgq5LVH0Hd$ z=ra5GFG{b%x6W94OB+r`pRzWDucnm8a1pwI_bfbodyDm{Vv;%3M`ia@_TN=zS!+(T z^Iog)Upk%oNx;8jUG&uz#EFk9YE5N_N;bXflB3Z5Y@odI)8HqT=arQQt*HPE8EqW9@w8152%aH!wdm<-YLcS<2(PsCc?yZF%J%{tb4= zZ9hEJ`3d$bz^4s=guVDQZyQP5oKpg)cCBF2HD$mKJ$~o@Fl6psf~v1LMz@Q`rspDfofkP9}%lf7e@M(#Uf*d&h9mVQ*1( z*0AptzoFb#@T`9E3T*Ic7QT*bxAA$PV?Xo;=b_K~623h0p%v~(l<#-|IatWBcLMHs znQ|(#F8t@OfCFjv{#@i~=H5zM0bhf)?j_}$mLDKyU4-tdxR~rzax>neJoT3`ewC5r za7eO`J**}h|A+iX7vig%%zbTswYh1Y$IS0R_Q1)tbrpNyXKD|8-29YZOF5V1yLtHB zpHv?H=)Ou#uXhS7OD8_y6+iF^@rS-(#*TjWUb}%MbN85gx;_*R85v2Rb-*T3xE()x z1lwuMnHX_+^&S~r-m8`K$$K@wJ(vdGP4k8fjOUPNO}Wd+;X7n!hRKZzd_PUR zbM|Tj@0sM3oOiWXJm*8$;kk=T4&^g;_7$gpL*wcXYU9z^l!MnUe7MwDxF%?_Zf7p6 zVWBY?58FhcKKv$jdJS#{FN71BDqeWtMfQ#ZS8w869=Tz3F7FJT%ge1Uen7dGX|p9u z%ssGc$aIHE@7_vd_FemdkF{XdDif*6UqlBY2PXXZ)2V*ew-oV zd2y-Ug&(z7b!7QK1ykXi)sRHjTdcPPFN(g}ze9^mXT3<70IGY+R1jCK5 zwAKqd5}4o2oN8bHdRsk7mu_<(uujwOk5fqvxY6VH!jGwf0Fea3vIEMM;QQ~FAC z!TF8=ea%`IronTabII^5VXu2hzLELhyL(R^JXvzzD=QE1-HXp)pX82k!{<*8q+>KP z=8dsfaOARb~8eG7iIZ${MOBup+eVlxwrN%1U-&(s-N16#%z<*VNWja?}{ z%#K07w$)nR#@fWaGh@nol_poroA&5nkU(dZoxYg5S>s=tUd(cBwGP1N(P_XN%~^7B zW8LZKtzTo`DB3Sl&U@)w(yd}V$5txwEumt)tz5hA#Hi^E9 zE%uP|%G&7;2M9=>!tMgZv7uSD$ehHiY`wf|B zd~ru{7L4!W(}QFqV>`huZKrNzQwbi6%jhQPd{>tH`EN`k&m8uSQju<$0FSzPKgFJl zY?){;^U8A8TQkn)T4QXkSJP`u-dP(T-})_Uz-!viZmQxnG{m~Zp`9z>C-RL&_UNYY zLC%$l{-hUbt{G^MJ%htDvgDRw9-ZK40vlBMH|qm@UEqM?1)L0f@9dpxozn^B;KY~3*J?CT!@;HCAo(1HgYP~L4*u>$90dQ5!9j9?&EAI3z6iZ= zcFR_NxGr)Q*Kp8geXy4!U)Nwo-=NbNEofM|iPXLYjVSLL-U*&Kb(rE zTLRJec)V2|*?rpAl1`>vLc-l0tj`=^l{CCzaT(dQPk1~RxV?up+swXTybFBhS~v+$ zDt-;Vp2$ySO*tdN{+#Rrt!-&5~XZ8d$t)JjngWDs--MM3am`z6By~~_U49dU7{N`*;l-udsMlWw*9J2Wmw9^DW zUVrNV*KWy0zvkO@#rCXX43Is{O?kgR&v_i-3HxMC4*M43xsn&|_v^~qx0sg(CV~NV z(1V-qtxE(}7N6}n+SK>>)Tem=Y1C0a>p$Kn+8JtMjYJ=kZI>_>bpN94PUUZ^@LX~_ z$s8UW^VdZ4`a`HR)(!2huJ#cH%AnfrA08GBc({U-BFdnZq-9KM!d zEyW`=USp>*=I?*}^&|6An(Kz}ugrTv`EU3ytbS7un1c@R@C|L2$1lOJa6R|@{v*EQ zFfGmZy7-2J=0M(lbU%D8`gVkD73rJV`bEE>?2l3wsRs zLMYQ7kM?yGSFC64lq*)bEz2H8iu(8{I>AZ#DB7~?!k16p621&SPVr1a`PP)f?R!&!pdExC zNq&ePO}_3y#`8UNkOJfJ`zogYW!~PpTz}L*`B6;&6V9W}zAWlLS?&Mb%kWp^`sx3& zxAfmY|H={BJg$HBRYxA%M)sAqL8trp-Nf%N`2CRI5BOcrZ`9CCRR^n$r1+O@3Xkvd^LnE90Y7FZ;7_W4}Q_1OS z&FVG$D@nV;J>`KIe~vF|mv5}Kv0mp-E{~r7arAfjsFnwcl~bNRa$c6|(^E_Ac{G`` zzKqSzGB(~B%TX+RN^O4YS!49ZF4>;ol9Rd${O$?T#IWi+Z6_{{;{MFIvcQt|G&aTe zDu;&+eCM%Flfk{S^c{E3tq<|-wK?OyNfbwSojdOSTzKO`?hX7HW5i#Mk88s7*>%zS z-hAx|WhZ@gDVEEWQ(r)5V0=l&TE|!vq)Fv zU1T4{E#^E|dLrY~zs3b#Y2AMR*Q6_l!w#+qW&_duH&`nzh+{NRr*Mu z(PR3U(!qSK>q=c#kBR?Pe`-r@N>9G^Zgy>CK{GZ zP&~1TX&zB~$cr35u1KT$?kwd@%HdBeAWcjhK zkUqNB44OXLpcN;TE6r*hG<~T(!P&qA9aOSFG&;<<XKWO>`(CSXcK)LLKRB{+u8Sw$(qHt1cT+8>c znl>ee$7JFy!2D3GJSR;q67&J_sR-YyJnDPMAkMeQSNuNt0mP$(Z}3m~iXCL|q(`i> zoRqv&O#dY26JQ5iI+-z`LneJU zNb?=j6uIAI(@yJJ7=Gt>`DQTwF7TxZer94Y?53&Z+3;KS5&p|)q;mjI;gIGR1CI>e z2)3+~&hgZN6Gj&i{fe%n>m5%{XpO~-fvM(n+6?8CWG;#BVhq~Tc^M<`g*VIv0bb>E zeU-<6@s0`c^{-zU>ErTk$yXd>k9Pj4=*#G8+I!i|JQi2?ixf|+{pS>Udu8{&%)9v2 z4yU=+`aE!cd^^BbuMBa{OJb*4mO3*G-S_xe}aKUJ@FuHzrL*8Z$wF!h}MsWN9~OkG{SQoUCDFLV9G5B1GQ!D3Mv z|M5P(bC7cE&cn6#cXDq5dwp9=ZK(XOtL>=&A6B0ek2LoD`Ek$xy!yP%bG@s+|0iX# zvBu~D`~LKQ8Eu-l_QECQ1Cx$ki)Xk3oN5D4|9s)=M{fS(cI)LBt$e1<{Fd^c;aAJg z*^wjO3|lG1`U(H+EZ<7ZTsURMW9UpfhEu{V3mumIu)xYZ9g1Ey?r0B|T<8@?bI+Bn z+{!68=U%C^GG1}l=e*W0=3Y6;&h0p0=bjEX?s^Y#2-M5JK)q|GRG%NTay!BpZN+l# zn{DN3E3sS|&jItl6|-lk5HI?1=GQ%9Y;x2aQ4o%*+_(?Feu zx2e-eoyNDR(?p%7x2e-io#wZx(?T7-qxLJ|d;)b&c$+$ts59wp>P)82Niur`5o48p?(YXTi#*)6R3Xz^-p+*^(Rq(67?s&!}^n{KbiWI-==q7Ury-}r5g zuOE}cV9YOpk1KUN+Aw|z{1bxVMBl`3{1I>OANlw4Mh7yb5H&{dcc1oJ~xrC9B(cE|H@a6N0rj@VM{{T<&cKK>Q2_y-yM z^O-#dY|$=0{*5c6y(KHZvNY;GXJm7&o@mO->!ISa1ze`XNQw=PrU_Blh1l7tz04*_8M6`#WQw0?EhqY0-fDpzmT|Pmvy|F zxQFF|WvvL5he^5NX0V_A-QVsAc7OXL>614NK zo?l3LLt)ih%I8tu?5zkosn@~#S^8`&?5lL}-(tpeW!dts|4yx)7RtZmefyy5CV5ve zN*3{i%DK@o0zQ*(qGN<}gVby1zG+;aP3-H}^N#Yms=r3>rxlC1{j>Bg_d09aL7xfs z%37F1y?b4tHXFMK1A=r*yStUgY-y3L;qNzliq*QZ*x-3vm5Z#!zdjhvKU21x6;mF2 zzt=ii*iXFKswp=)uN;g!+bV+Po*#LwxBA@sPZCGiThjT(Z-DciE`395Gw4gSkWdaK z=Ak(28O%jFY!b?4Lp%|A8m6Ze!#p{nla@kHAb4o(f>#S|5J=2ESpH;QXIMHL9_5nKIiv;7ec|)z z+f5wOCxP#bG~-eHPfB~4i^Eu+Se`uZ`g;%9BNu_MJkPBPV&1diuCKf&*!7i5f>>s8 zST9_37l(H4*-$X}ZPq(c$OSsjUBk&H&VLgpv#;(L+_<86Hf0N#e*^WC`F)jIeZ_rf zzJE~o_CeO3kku>7mw+?oY_>~%Z&mQ*ZD;aZ0IazO&YUyYw}3vA-irpu-dC&7I=19< zK_Yhz^!S-l{qohpF5>=dV#9=2#KsmIQ{E%QL~OOJZt!Y(FzP-{JV9=XKlx3(%3JVW z>!~rEvi$9#$+JTLI&;!QoY%L(74dkT5hwmXnBfCI;S#*=>pbfihev|9WB}(741XZ^ z(_z~kE(y0R_I>sJq!jb9-0Ms2z*T2rzX@)oxPB;qO@RJcYy-C%+|}@*ZQ*vkpXbbh z_Zd^)0#9@X>mk~D&|MkSLr1{qA+^~~TTN~s?>!zW$4ev68eMOzc}BnEpKs-PyGv{@ zb?T{8>rdwmg=dBrZpZ{yZh4S!B3_uF56&nC%1^)^W)K^3Icu~kxTFhtl?D8_xZ=gTE8>SK>OEneJz1%Dmj}Cl1W#sc)2Pz|d_KhZ#N&0&B;ogz>NA|{ zcY1;(eZ*5gsfedE&_*}+1F3-^2Hz8&@E`OzeWu?_ZuE+eovN5*AO8O&G5Ajz-laU~ zXA%#jv*~f?g-V=ncZ>dG+2w)GjA(4}%>K&GAH6%+S%p_T`(h>TN{;-rLS6>w@=ZA* zdKQgwhGSo{uzXBT)XLEf_KCKdh_~9zwM}ja%_T;h9ePHoA6=u5`wQSL7nMz8Sblz1`;iiLf5o zEjhINJefG(V4{8Eel-8TziZxk_?JlJ1e8sv2kee3~{f( zQ|I=d0dAs`7`lt(QcU;+yahky$S}DGYr0Hcx%RIpHs`&qr7Fx6?<}|}cGWHbXW-PG zCXa&PmAfz8pT7%OT~R(Kf>lwlv~t%XV}Vx=x=5i5co&td%(LK)^n#Uv?V>Y$8lB`y9>e-3*4 z+{Hn{T@lm)6Xmzr{WluG6mC5>C6HGxh#$K{kbsK)ojKwx9)kOYltftX|F# za=(P<%9;7<6uwivg5OQi^JzR&-b$TUT1B0J=lTx2+W0Z`)W&m{ZXp-!x^OAaliAyX z-PB1@f5(NdLz^^xtOS@HdIG_ZRUB7=bL!$aIYM*wdd-ikLN3S z?()2y`x({eH=h=bD}VbI^9@j)jgwxbvz+Q@nfj&9GT!Up-khs5@7@+H{7&?)`kPNZ z<(=u|T5;AIm-y@{zdb8SMOMq={uZrs%3iT=<+RL zhX1+MGQAT}HlP1_)iS;FG-V6;&s59wj!)S_{^wWA^iG!Rn{zI8qki?y60V(U{=Zvz zwvhWy?lmsGzm$9By|O$vyp`w6xKFrl*pPQam-`&|Db7ev%edhn_ba(?^Eoq_a>HTn zuj9VG;D#L|Zdl-c758`WpWvUkRD%O){^vNZSx3dt&*gp|_m1A>KEwTd?!^xU+dS8u zlrNxMFkHy}9PYE+3sy_GpU3@D?gf)&+|TDe$GzshlKX|+U&s9_uJctIUU1Rthi6>U zZY@BW-^`)&;IBtV4?RCRdNgTSS(x}R$(Cl+S=PdEbaW0%+%gX4FTfeK07dT>0?Owf z9vvOwx4YT0GQ7_>YOJFuhbai$Be;9%(b3Ty2XEW>EucJuGx2815`Q;3dI!Pdhd5}R z=3wx$e;OUV_4UzF?~T#X&VQzV=yfEsx0t?hODJCGz!NxsQFJ_$|FJld*;W+&{UWu$ z`18#E;!$^h@zw19;={WJeGFVQLgRdu5PxuL&M4 z>@nvqzw7QHUcN6F$?hqBC$)#~#Se4ta#>OSw(q63ggpht=dXbe>+A*JErBQ7oab(q z4U+Q8_EW>9*K*GmUt9ESku;x`qwcfCqc=WV6z|fx>Ydi=pdm95?81N3kiQoG%y(%ll{Vc_`87#w9Y#DHVQL#F#4aC|I+qjM}AA2V=VaeO#B zqX%Qhfn&_6!qM5ox#4ke#%gc`#|6iu%YofuU{{0VO}`!-cXvl{ zi~+|OvT@h)2#&GLwn|Jg^2P{`G2j>jj=mkiF(x>o<4C`m2*=khI2Mj?ki%H;6CD3n z!fm zm1Jfm_9C{^qW!>RTV>F9G z)6kstnZQo13|{k|DegiCs7FsZ%Da#Azaw=)@Pvgfl)g5o%UmDq%nt^2xuIY;bav5J z>}BYG;Ug}(1vH0kma!KG7j#`koq<67Aa9Kx{Cs-!p!mZd7Df+#$s0X*i#vMok48oh zN*}B9@$sat3jV@>tXP+GgCC?GD>mXIY)IV@e4n!KaW7xXNRD!B|L>$9!SBa$?dOJR%gB9>Ql)Fm!>bPKd9R#{<1c3T%MCJQRmmS zu63DV<}ipKX>E|qt_{+@^o6y7%l$l;I@a1?ZWdV!e3iR#j)e?Ovi=wG+s5yTXN#8G z7aT3{pIaFmec)Mq5QD+dFFsq`!+%}wYU3Mf92p7{Bdj6g+nKu%MT;$Y3DZ)#zPs^tM>;g~~MAP;MQ`VadL_+*+e^ z)M1Be4<*C%9hr**$?HoNuMT$OS5q5J)<9sp&sUnfYlHcVRs{<$=nIIt^VHP66BEb8>Bh2wxJ8Bu%nnexnYdHu6%=f4;wV-%%W?8?;X4=8)=#kz5#p5 z)up_bOz-E67_jswk(oc1KLbp!A82fuKh zE&edhjL(nV4S=ja(f(n%_;P$;OgzP;}SC z8tHtiv2ht&3Oh`DAM&^2iv^l)#bk3UctrE{=ECsKqJ({@3SQtZWRZmI2g;bVrUf_E^nts9b#U5Y8 zvuU>te(KPd&h94D&~N%V#<19&yS>Z~DjD(@vDZ{=V*HkUH}(PhL%gSV;+7jc%$ZuX zf%!FE-yAvKJF0gT##fgikMEq`AU+qLj(PvGuy!A{w`A;IZP(r8QvWe{qx?n*o~uudBgws;T?TJL-e#7B zdT#s6kO|b|r+2q^vF6qBseg@0eXa0hJBEx*s*eII6_-}RG@1$+L@1`5dZhAp^;@q@`vJ07OVD{VS zFYYpyk!)z-nO{+g;RlyqC3zgn1;v&;-^iel(JnDIarD-G3 zT6RTA{Hd`pVD`vj>}}VvHuC)sd8>nF+R&bMJ=gZgqELG(wzmWy+0*Q^^PbnwUK%>B z2d|Z1o9h;?*Pv%>|D%(3l$*AxuqIHOdNx>C8>F~iD?OI`mJxhpjHQXT)Ml(eTmj{Z zDbSva_Ena4S1K{~>D#Cq8yPAM!T7PMBv0nXf3+K_|s+}_YG@QkyQJ$ZcA=pyy5Y{B7D zi;H~p*=NYGo<8-+xzOl7U0GdNZQwIh(0<8YbYOG@;3fD9mfABEzBS}1%XOC;bE}Qt zQTl!Y-Cpn#tOniHfkhupZhxRX<$hue8eI9qG)KO%;SB{bVj@DY=nC*%-v@r{#$qpGz*aP1 z;OjAWU~A_Dw;t#Z*)Rg#q4Nz3R=~y1!PCI~B={bOMw*$UU04*>=b;IANw_Nq52pVn z5Bvgd_1L5j!Rup;<(sUN?fGFHwstJPgEik4+WZf5uk}yzZ&MZ%E`SF;=6*Z(KK`#a z$E>l+=I&9ui}aWA{h9{Hr<18J^ho6qAv zfz8_lZD+WiM;mqCK%jmz1?E!Fn)L_iy!xV#JY%J7F7<2=I)X+NcceHL;dTel=eqDE z+El!i;u^$5I(R;hXM^xRZDWXYrHducSJjyuVNhL6?lhwb10ij z-R`{j8~stgk^0&{?BLm2#-?!)W5jw628tI*!k2yu4JA^8r6KqvdO$$_qF^rXz5tCq z55H=06^}y9SU1=7)6VsaH&!ZpTBV1#kU ztOXYLvW1L)hkNPkiv6-ih|l0&I4K%Q0M{Y#PksZ@pkhVpdETz~;fsAFTk^jGjJpu)9`F?NjyqCvJrkpPLW`61Y4H53r<#w`rfiImR(WOx;2iV zpDJFDYkTB!a2uRU2@mn%Wzk6}*E%*9@IO&cxE`BzHXARJ!;v4i_ZS?_Tt-py&37Lrtwv=9*esw(CjXQm$5ALoxLx7 z3Y-SktizL`_BKCs0d&fG2uEVB8UQyCoNvDziqBYZcB}L0w{2f_fm}72PWDNRTtgtsEz5!n_G0869=F9RX(ORY;|vnbZ(<@MQwaKGrA(T$MjXYtSot0FLntepcz% z%vtdk!+v*ApGQ89tP6LgB77Df*4oI96|5Bp)>H72m+QjkGSC8W+eTfj>9c8gEPWfh zGxK;T-A6p(!^_3@{BYT}N=165^hnWz;sLtTz%ETZPMWn&KMv15QjuJ*^ADkWKgFDP zLnlvxx5~dltPtaDp#O=m7Ho|T1+3@OmhgO`r+ESA5%Lu0pb6lxpg=#=Y4BGEb=+s@ zOK`OEd&9Ut46cIL*pW8ykEI7n$_*pkQu>j;>DJ`+1`B-TA28JVwE%O;k)9knDRd*g zGfcaRqtmxb2Yh%1|4GU$>M5sgxI6TtZ?;4AzW&WN8WR(GEV|8gtPLT`{t zuM3|5?=AZ1fgj1Xwc$lC<|`)d*J4d2^R!mteb7VrB)Bg;`S4b~C%Mhq<Vl6K9lL5>Dbi7OW3q+uUGM z0KH=qTRCtl%XqM96B*Vb_*B>sXib)(&#eo;tZ$z}dwIUQnI6}szRjt3V*YyIHm*Ij z#k*FuEwv$^Od?nplC$WDzTugsEy-`mY!l0qVqEF|Kyp~JGM;k-3mA%D+Wuu>%oB|) zifAQ$Idg@ENAUeXn|)kcb?aV=g9EllEUgR8Q5NBe?1aH!ATz*zC+nS|9oA}3AzDAJ zooofIo$Ljz--owp{E-}qv1axNFdjkHz_Vi5Uv_3EIKC~EjSz#rV(DGX6+MmX1V5Ym zczP$_SUrx8oq<-<%oSeLkwYfazieIk8pY3~e@jPMqcWaJH;Z}bU3ubQMxZO##h%2D zb%D)DPf5Csba2t1U?(}7@D#K83G@clS!`fsXD>6lLBiuZme8K`Px)NMuj~T8jLcee zSm=#$G-rtI7?j5l-c=D7&$N5 zBpxaIaQ+DNjV>;_6fV!DUh{}_d&a`O)-s~WzEY$+4+ryjS23z{s4IM0OPx8CY2BoQ z*Kt3WdqYE2nWyi1sn2=TnNJ<*${K5id%o3Z;FqLKV^BYuLo+f#K61sp%^Q&(G!)ds zI}~rJaVJK)OM;Ewmu@_ly5dWNJl8(t9PS75@V7krKWi)9TQN3@FHyePxxy~irW$27EUKe22DJ> zbo4~NzvQSN|4Q&5Jg1$S-$t^iV?=97A6aM%+?Cy}J{7;DeMI4_%4Cl!E~-J#xpt`2 z!upB^6hk9?kgrF$7vYusRI8y4;g#@CcqANps)|FxAK{Mh#^6kWd+@~I3^)=; zCP{Wmx8O`mm~il|rLjXZ$nd<8XRMp>>?v?#-I(7*vOs#Ae20?tu{6FO@TNTtuK`zN z2g`RA^Mhh%M*IZ-0{pHXJdli#-dC3ccX&tiC7#s*Z1i0ZJH3dtA2vKqx^4`8MRvV> z30fzuiR?A$c;Zb%@F=aR@Iz(N&9%Pr6*QvPB?=MG5Py}AZ&2`}O!l+%0r6+8*Ba`J zFR2gVjeM5U73G64`aNaRyVZ`y(2Sh2UGn$2=#Xw-Ap2DQF!7rv?1^Fe(L5xpKEc}P zdno4niQcwQI=aQWXuk2nHlv42cYH2WsTf-dczgnSm(KkW_?0GTUwVstp7K%J{?23ki}J5q>E)#ax&Isd<>-aW zOYv->63fW%k6)jh`Icf3tU^WcF;=#hJwCpBoa%k4h3{UlCm3kox8^HXUE?FCuIkl% z>n-@x8~7#o*=hG6`y$ijgQkzN?Pp4H2VF|voaa3|v;Uypm9LwSu<2^k$}A6J{&Qvw zdM4k!o~7`K>-qLsz@_HLrw#R|dgJ@lI8#-h{yXVc`Eb?tMZa#_yra1&Mo8n1YuvP@ znDiE>$Bern4J`jZv@L(W-ZMV^Uop>`e_y&<_o>8yYi(0e+_k=aF8wc-anaeXGT(XA zcRFJZvoRNwP4y@DA*6Ras;1Meg z544~kzc;vGt5>|Ri+!!F*zC^!Fy7T0O!kMUe`R@c3LD0wK5g1*?-Aim64-v^>t0do zRhJFQvD0{$c6Jau(Tg5;XJ;q0hTWUGw-N^?+H*@}kvYWLG!~Fa@Da{YU{6cGhJUB& zm;8hcY52I{!g@B-&Yqk0R$BZXY^3es4z7t+MjzN7?$kB>T>jf#x<(GjudBT(eIt~8 z%<0m~h}xT6!%Q%+1;Zc1@z<8@O1BT9&N>-*%rrXy>0hsJH>*Dua5~NOTy>^ps**;=~;T*Ybyu zSMx8xW?Vwd{d{86m-4>=xY9-<+XGIp&es_N9j#uM`u0744#%wO0G3Ih19CIdw@42R26KpRddo-4&?D>VqjIIyX zMc_rFO#9HO^hGR99|z_|NP) zSz0ku-~OJ~Nm}8bHuy&I2KFp2kiDioONu+dTLIo4fIc3C)vM)8x#;i}4h3LeUZROxCOe8qbC}ow?>B-`r$O z^1DBUPaHR(anY`YJWPM}nWfK99hq5&bFyDjCx1$vw^GM6@QLS)c!hEySgSP_j_^Bx zejBP6_>bxTk`dOqhq>q5hx{Ad%eSA|-#O|JcnZkz6KlRByfeZ(`X4^bI^c90l=*7o zInEIv-~+T`>pTk zJI0)s@3ru+In>$t;;T!M!87^FuqOguj`2&*P)OU%MFM^f=0QAaPlUAH;JxYd1Y~nU zUs2@Vjydc_fF1+7zflpekr~C(3xfR(de=;pT<8pi+nSeeQMXQ^$HHLv6A9$L!RC>FV?y`xegifUDI0I zQB2yc?cMfRowcv3X`xrJD<9-uXFtfsd_dRIQ(WJ#Yxqy`-h;Z9%;Nfht{G39>xXrX zZQH{2L%PNXNpLN^&N3X26#tX*&Rge(ddjh}RV-{3oBRXTPGW&f<@@iAc@6A8?122< z)xr8JdkW_U@q62wW7?T`K203enw%TW1-8jN*(~hQjE`BwP59MZb3d2%z=h-xxgO3^ zKZ>j{tt)-L(e4HDt|GDg+y{Npv&B4XeM9zp1piBM7PTu~oFK-oIGEy7oi4tvOTYLB z%019Gci(?A_Hb#;Yss>Hjvt`?a2MUIeV)iSaG`Z@)l-aNEEmRBOlVNK#Npc0SXKVp z5OK{n?ja7E-R)m|kJe^(`xovFa}6Z#+KS{y(8j{O_>#bd%&GOyneg7vx2X2cVQd}D z`+WY9k%lEb^@rr#IerAX(YJr3Z)V07Wot#t-WZ-;c!F~#2 zQaqn1BM%(Km_?_D>WM6NCUxZd%in4(4F^73f;f)+tw?Eekb^K}X+85$T{2$&mwY$* zWGxxuy`|m$V#cp>`ET-#hHYZ`;6Y`YTg9?2U5IT*UFBUC@Tb-9xU0ZP zi>uEX7;-Bg*c0mEHg_0b5j+sr(Z21LqH9XmjAqB+t#NM_a~6XaljTC7R~9oLC(Q+I zY7V47qE@IsX3l|du6fY9eLgE$MZ7)hc-_c=sOUYNnLFY_!?{dcbeg{hdpiwn14ATt zXr5@CSY14@U&~AJ8%6I|6JOvL8jd*130?-?q3tsED}5=Zs5MaeliDYsT%K4C8NhnE z@YTtE(p9YTk9@OK2zWzl(xQ3!v_U=(bgn(f3G8F}!2#}tTVk?`M~*?yT90i9XUfaz zVh+StiY;y>_Mw=H@Z97d<l-=3(6h!Qnl_=q2s9SWK#S?sRjsREaSyf#bgbBb=|b=Bp?UE#^zIy* z*J6ntk)w`l25ZRBoYpH8!-y0|t35o67l}ca57iZmjKP!Q3&l4@Pg+OSx}v_Rq1*=9 z^g%2rcn+QLT(L^6&-L@$j{H`xm=XpL%f07pM% z!i!>iqF0p*CdHzKKl+N3??zrunA0RY2}iF#kN%5{? z9>k^RidPk{5zi^6q4Nod0|#fBwCFwR>icx#mUPSrydXWJII8@#2~V*JbY@N0qKS5X zgE*Np;Vmjt2b$`puHqxwcc5INL~bkl{Kve-XU&jj^cl*t54}X5&CDYZZRg99b>5ul z95={gQ`|C&{);-;$ncA45nHmgJ_Ijaxf-2Dc@}*E-h$X&k#BUTS?hr>L}PLIDUd^% zd{wc1v$WjTo(ky{&AD>Nw4SlGB>p0ySPuW~_p!ED8uvwW(UKF$ZROp_4%dDQ+3AwsveUO_ow{uGJip>+=|9=& zqQhx_58W2ajQWZ7j4$KVrRQ1~JN3i{)@%8Vl{Z6QPQ8;kh*=Z;T zOX8QZ4_mV2;Mrwg>vTr@p<}H&9cpB#&jYV8;Y@ zn`l$G74L}`G*{A>V>#`$A`dR$v(3TW#a-DGpAhj(x!RC?5syxkw|c^_ z_(F2ormQD78OT`4V)Yxy=d^SkdVu*B&k5IBhZ29-W%{tRwgnIKZE@za+6InhIjgJf zS!k2-o>30zc6MnscFUpqneOVU@RQ7~t}3UNHHL89%xf2Yg423SS@QQ#Jx%-VWo$EK zkLb76hGzK{tqNzdL#1bu=)vB`xB?l)wa&Vco))f#X6`_2V-KYc9`49G5xZ3XpYYpb+n^B`Aevy zd0oysqWLcB%kIe1zVeFKQCI7(IzLo=w=BcGHR=_3PkBvisIRrhh+C*CkBJR=k0 z&&fs}sb;A!|7!TkRo-A4_|W;|lucx?jrkqUz$3IRy&t)fGu6Pw8m_zOm;DUY9@<>a zbw70!+uOu_KljRGiDxIg4g9XBOg7F22VQU}2Nyjqyak?m-OwgnS40<6Pd=w;UoyV<(-s^PqntF`)=;Vd#b0kUX_V=9m=#{Q{^VI zUu&!HUrEe_>j}!$hWIc|c@Ou>+l%mw@1q6uozJqah~9`4@AtcSZjvt}Jx6?@-pad* zKSX&pto5qmL-1C)9(Sd0sGp)ecRzFdP(X*K`(ThaFv~61TQcaQ%>DjympPS^^apwU)=8%gLe%%U)K|6YXao^_5SOpbhceW`};ANBtBqBp82-%bIK%nkXSN z=({*W&uT41GA)A6Pg(E@_r3h4`Hy2eOP8bx|Izo&msHtn?*im_)Qa2b=-=+ z{n+$hccPzd>eSFj(Xv;;e!@1!xk!B>AgJmwvEgloJzy=B*;X#CY(7pn393 zsN1J!$WF;Ntr5$gm3^b{-%1vD6q!4oOZSiBkBG;l6Qys0z1BR}TCRLZ^__6Zx2CT2 zlVS@KB^DrRLqMy(c&<&7afoeWv}G6_$Oiq@iD&* zxyPK(?adH3piDN#X7ogXceF;Gvfx!0o2M)}ihl&mi-1)+P5Pvh_slY}fegM7V_w61 zNr!lWwbU10S7gywS@_qbPVs6#j;*=G5e+Q!`)NaZ-^_k6@NZg6o4oqZRe+}<%#&*c4jQ%8VWv9vRkgQz7z3?p^q8tw8lq$bO_QHy6=pQTR|DqxC z_RGk;n~CLe|32njIrXA1ohzgFf_Mx%V-z_qT_E}remhQ)xIq0 zqZZoBx@v2@x`tifI0q?{ycnm? zsKa_X^(J^fNBJh6tG^ADsonKK8TL)1yr{a!3i&9#T=(-{a%jREr2UCKgP!!EaG-uf z=Mk6nYG4*FW0c7r(s;#R>R&otdPed_GC=FarX~6pUqLe#&)jkBuu$*Du}QPk>ExO0 z|E<=Dmo7=4hkA4a&t$`FbvAq5loffVe6P(J>e0UT`);B<*lSe+cAjqq7vclqZIEZm zhg1yXLs!=8>$#V|KU3f9dAFY5T(8T1)mS9UbT1jYoO{)g{8E|X2tAZ9Ym_S=O7VaK z_p?f6Yys$iI+A@&3HuY{Coi|_g*we+?x4!t;=6|Ly!I=a4hQ?*#uQd&XpI8rTVm%t5~e+oHpw?abaF))32( zQTsrFRE666R> zIM70lG3NI9v0ORus}=!gg1o+#;=UjrBwssGVjmkYwUoFnm;IeHbbi!AAERrfL#2~j zE&Mxl`Rixs?-KfZfbz>CGxRrlFL);hP4LXjhWa~!9#&kW1>G*4F5MmIa`d=jAkyj5 z@uBVxF1me}G!WEc860gXyeOJ8^M8|Z6(6(8vkL^&WJwbg=ZY>15?yXKehxvRg@ICg)ypGjcz>dv26i zwR~ymWcJU-hwvxR8*@!`bsD&%>0#v(#-*2mH{O!P$0EKzkiqw1obA*XKTG#4qJ8P= z@icNLjn2-7@$MyzNqWe%uJ(ls=_l!Ai*o7lV9zEoV8ttYC~NL}YwE-0Dzlb>yU}V_ z2|35Rnrq1^t(D29OX?ckEZm!=r94-RSnrJnwxd}J_ed?H%;x=eWSVqmKkv?`uI5EP zvSQK8D4$Qc+EBe^T=#Pw#IJa+cP#FQ=uhxSPV{oGn51G_;u*<^QQi&hCv*&Ds;@r8 z*YYLRhWeHKQCUClZY3rlx!CMmIxRY-a(n**~-28mR#=PUb0N{znr?tMb%uYj{5Cvyswy!a$^^ACTBpif}MIAD{Hh>`AN#l z7A^#z@dO|(Y2rZsm&y&w26-0aedT>`puD{_=Ba!W<>DpTNDk%l zw?sn)uElrEdv!f^gj0=CaEZ!UnuxAM$KsxUggv-=h-0Tf>nO0+E=@> z(S%#sxPpHJ_vuEx3GO#>uW<@TdUp-ac2Mq6E}K;2AG(J;L!K46c6k;p<*ON<@8Z5d zef6`1`#V*)#2PGhMUTs=YX5psqrQI&Ng|;-G zvIDi>+Mo~VxI3t$xsy$`lQvS+Q@o%+-EP_teJ80W{7PSIon}2{(uW!9w^FWo5-)2_ zMmP~JMX#Dy*_Ao&Wsi=!qC3V`3~{J2NuI2sp5|$swvx2dS{n6)!w+MZ2rkvLsW(BH z@>x5mGnO0m6z44Dgj?zmuj%66;9h(-1{^uw*~v568ZPB(X9Z>A579{v^(4QuymtrB zRZs1#;r>bXug?p2BklWNWHj*#u_kfS>0&pzYEF z+}|I>hSX1#n1jw9&>l+l5tR*+d(>6tSGtz92?1P{bC>J>r|!tB(T#okeK31=u&xj$n_u z?B8^;fvhklGiqVu5NmNV%wY~YH;Z1UENbyy4*M;4KW!fLW7t8Wu>^Kqi@QIt0psAy zrkxnEpoE33#U8}Cwa-tbsh8gG@1jk~&5<;Hq^ZNWS{PS`eiGndT@e}wzC>|fFn0;s zDb28-WIM@*3eLH}hSJ^;$@wq8ICZ4CZXx?=PSbX>!`MdzJ4m#z*oX2ZB5B!7VLV>% z$!?04DQB;7OZHG*I$JS~Hu{JZ+5c3=ma5r*A(p!S*)`W zJBd5&O`y)OjsH;!{pCVB^wY3u=F0Y%D6>Xy$)|$$7l$#AOc~uuzN+jaof9Hmxx&Uq zvhi=Tim?WH9&__6S9|0ounwAuXQ|hMZPPw{?9EZE~I%}!Cnk}So+dF48=AQ*d=S|XBp)>pRg6Yrn#0K6R|c2 zaqbpt$Q$4uJ2S9VWEZUGKFz)0Q=6K%e%cLeB%ZBlJX2dLll`DJW!E4VgY!3}A9LI* z7QRR@(Z(|Fb&g7!`!UAS&%Ms&7~p<$kv+xSizZr2;hb2sFWf0+kt~L`r1(KLuWYPd zo-LwZ*`Qs#t9n)`T%*yrq+117hG+A6U+dv2Pg5qDA)OcC4qHZg=?dtem3WZ$buKC? zuFN~^y--Yk4fo4*&s?-IP0&3r6X5 z=?&QkQYjLv$})tajAT3VvPQk<8r8{oPz^9BN zde%#MVE535MH|bw7Y?)*BKX#DFBoMPNSBRJK0$eoa=|)I`8vu4!w$*?gJ71;Aswzh z#DlUuWOoP`8>l0HzlZvpxOOPh`*(0Joavobe($7yV3+W08P{DrmrbR-j@A;nI+SVu zvh>ypo(Ue!hw`vAPqKg3@jIXAipd1A);;hF^%MhH&okLE-8@&UMLJFR(7LPii{?ss zEgHA%0F^iANxDn1Je|L&b#LKXaj`gcV!Wr=%miiKJTo1AD*-;EuJ(9J=O&5`JB9ih zN0GW?InKVMpB>Z_?qoM;znae4Y=LJbgJf&CstZ5O=f017*%h*#`e-M^v%ucu-5A%B z2jaCqx}J3rYz)n<_S1`wr0azP?fvehyt4=mQZDr^;Oo#z2>8XGR?Kh#6ttz>)j5X1@BUprtFatvXWoLWyCYVzI^P0 zMO@!m3S~iH_ZIK>?{3_SrbP!^i)GrD-p7vMUNIMqDaQSp#`6Nd?bH+O@kTw_31$%; zi@gzZh_PUEtV`3*5PBb79!KX!(dE)dCTD_(Pc}Dff^pi*Qdet&ir=8q>j~l_DeB~? z-giS3a&5X^HvL;Vu^zx0T|tSq0aTwhLmvV~*=wD4|>_oVxW zg0`rStrEvhiRQ46urCxNZE+3+yrs33h(o*wxC{pyp>%+@iA|OE`P~-wKYf^`vah&M z44b1b1^;2QBvRNbDeNKoj;63-()+@*!UOwbpRcoD2I(iBr7pHd3vJJ|ImlrOVm8w4 zirIA7iU+urqYaxQO70tLEGP0du^Y&bm?s;YdxPqdDaD24Hw zcqWVo@r^69C3_-X6S4XB0e#8-FzxV+iB|4gus;;nkz7;Ggkm^4=R!I|GA&k=O@XYz z)=(^*I1hW;pi{>9K4kuw#|wY3!9 z2WRVWKa!D+qx>auW^?2xTA{v@j#BQxM4Gse8`>gYVm)e>i%nG|H-fP%S3)u+$+di! zHgJ0e&pW6;3;RjqP|Qm?=-4IxtTMJ0>nSn%OY%&)eUhDR#c=G&qV@)c{HSN*d&ynx z@9f}O?MWUt-`BNpCK;gX=DWI9eaRB-IZ``%SFx;^McHk55IaYxs~T$W7Jrpw4rfCX;ZpJGAL3SuS!40rRRAjou1}*C(k9LwZ@Z# z7E)XXt-!^iASMV!Xx-DcsHiY8*Yl`rK`lehqLI>}O1~s3GpGB#& zf$Q}=v#BGP^q%T#9%O5@@+(;;7&q{HhwAfu7WQF#$q90iH8#yb2j$X@lHE4O&7+k@5oV zET?>ea_RjY{EAkj8?roCduw<;Ncp<(y=so~p_^BF(#JJ)=9fPjGwX9TW3=@&3ijH^`h{pwUq$Byk|P(Z00rxHbs&CM>6De*jt0M z`;_yzf->0_%70MoW*zs^*TReDQS-Z#GMxdU@hx3QJ<3JjU6e}?+tk%LF0uy%e?R3t z)YW|t_q~mJebgIlln+oYovrt~C>PzRzW688DDS5{N4e@~tkUnBcxIr3q}$2AtMB6Z z0A-KzEJK|;xHpSsKVK}@#rJ|GoNJXo8t69ZaM5u$btBYOxz=C$QsNoPQjY}mZKj9; za4(*il|mQ0Wq$}At(e99MqRD9NJq<0kDzNU>YCX{{S7?Vd`Ho{G4x&3dBk_9)5-HK z=vfn6Ax0gopJ=_zqHb$Oy8RLSUD`m$FQ;w?b>isEtvUK(jbxm~tM?gx6Ec+yUI=tkCl6oUx%7_g@XJ7b=5ImWRQf}8{Gxlukrdd%ZD9?Kx} z_>H1Vbbepd(f8TlRoc=Td~2Gu3w-%LVC@my_~ISfqhmQzIjg~!Dc zrpq}n==orOj-9W{zfexA>EM4e*1;V7OWVpDu&A$dDwQMMk{!qY6EFUuFaJ37eXk~0 zOup|{FM&NT`(E*8#ZDC;m%eO81`L2do!6q6wd9ukcE#}&D^@H->)`Uk<=-e)r+e9r ziowaJQJ!}<_ll!flu5se*R_74GWp$Vua|Q9_Cai(a{2Fqq1lJt6;12R2KgB3Z!_c5 z7~X#~zBjPV2M6j~zL9L3G5Xed5Q0y3l58EF#V`Bn3a(>W+UK1l&&B5*z-4f+=ZcR@ zS4elu|B=6w$m+ZZ>QG;K7?L@ndC5w_9iv=2MB|eV)|nmpMuOVez;nftHLe`b1*`lf z$tUr%+El&y+zTefa@D5JXAumNGa9$*WV!F-UiccIPGlvy#*{l;7kDd(1_YloPE98Sh*^|=O*q2v)T}hlIhJhMK8jE;Fn#{ zoDYpbF_k3c%c-N-Z>XQpBg}i2GR0WryRLD-2lvuZN$%HkFaJ_;7VWv&z_TaOEgePX zHV5pCIhG6kIE`JlkmTMC*&lrGU(he=Q~sRjUou^KNb{jG!6}E02xNMcSaE`O7g@+k zetT1j6NLSn$Vu5<>%irB5gA*2Ah08rl;BzFNj^(|B~r*#V$wPv&BXtbOm3n52yN?J zRpopL@6rm#5rlmTh+dCWkvPm<39Jd!5j1Oh><8-hN%xOp$IN{Ga6Ns}{X_N4N%s%dvnSm@P|tBM+^LUfnQw8V@>T7V z=W|!n-??${uY&UyQs6Ev+!apX4&3XEl4;z{xDRkQ<6d|R=CV;g#(mq2=W*_nGwxfs zpUu4md`WPxeiD=k_kwR4_lwzAm?1A9jZNst#|HOV=*rkp*IsAsp=ZA_bT@)dA>W#P z;%UyS=bM8Io*QES_b>Rq&V&0^-tXgmotOX1_J74G?+;+xz(>IzFrAD21ZU(A-p{v1 zC|?)jdv{&oH~tKRb4oZDL*KTG8~N|gCSH)?neLNz-XAFNExGmlui;x`&P`tbvfGj4 zH+kv)@cVat_jBe+<|c1Z>~>$@HR|m;(XQo$?RMny#MtwEA0iLG<^8U5-tRW@evi$0 z9QV>TFvax#4*rqHvM;p{z12WJ0LODt%I!)2*$Zf!vQ`7R$GykB;8(pQWr`8$zOR@M z>PgmFl&dZ2iJ)#!Mjw>l@%MZekh(gnWd-nLOZlL_bWR{AKXX4q@nOz+hh%!qB-tgkgR(grVc_!+EeS z2yrw>KN@E%;}=dhx%r@N$H}7)^8Q3N?-w(9e@8m+7s`2mr;#T%ocDL}-W_({?*~53 z)9>+HKA&&y7;fb&UkvF)aH{P)sox6j?i{||zw;CP^9@7M%pH82L^R`G8p673UkK~Y z&xWw>*cQTCJU<+##(Xzz3C@y}_wUW+{rj?c|0|iiUry)!gXO&cu$%XvDCYfd+R#=* zpZxKKFC57X-|lDVJF_b6dr713flI@_`}c)?rz2tCednK`*Fh)ja})hJS@1xAJJaBy z3?7US4;J+WmvHhGz6lYVaep88&o8{)f8ON(=5YQ*bI(zxG3i{OXLu&sJxp1XmYa0j zq+^3|={?b)>ij$!b~$sXoBG1P4UAo-lWDlH=XSp^#Q*gnZk?4OUN&7B&dG+wAzs$+ z4e^p&c!GvwZitUo2Y$-YZZ^+ZZs0o&FPGt8`brsjeEB?n9568cUfvgeBs+e9kJZD6 zZ3g&v`QLd5-%$K4zyEV;D)}Y8nfSMS%dkWl&lXWW!T&M@VDJ5W8}ZSpsa^Y~rk?nJ z`NkrMp5S^HAF&>Ifd7M2Q_nxnw-pii&m5*M-%iYyr>54>=8msUP2Ise6TGwOAL)z# zd-;E!|0R^)O`R_O7sU;uiwP@po#of!Fq;DZPxD`Tfp0ecbZW|YacZiM-}U_W@_sAt z|Cs;YFVoLIFb4jY^WPaWjAaqSxRbV8Z|B|rMZ3GFrVjo!%%zd&1mPrr9hO&#L@E8sykgU+U!U|y3JHnYX~R4HsS{7A)LHP88lZY7Uw*LhVs zrz%p`9$wbc)9mZDv18N7I)}4_-KXm&x-x=2W!hKzE$+3R@^NGKs(==Q^Qm&*sLx9O zw9Yx0^;Y92*nMkx##tU0obPRSFY=`Oo99y*Wo*Zxb>!i5p41-p*(c3JPo_ey)UU8H!J;t6>&if$tasMYCV~ovnrnt^D&za&HzvCt6Or^s$IgLfJ zc+LjEj=`4#Mx%@#NrmT3MU9u9Gqvs;7fgRQQgbxKJp4M(4@)!WzsmVx26UqH!c5M? zh%iSwxk{Iq}BJD97_xs@lFBh62g`O@C1=9ynQA58O;$8ORb>0E_d zm?PyJH0SBnp9l6U%oFpkHByZ!n5SRhJTT{<8uRr3yyg2{%u_T2>?QX7)0W~vorYpI z_-~gGAI##vq>1^uyZ!$^bxXxGK3VJK8$-)2_y~PBhwBA=f9OZ$Z&u{P$8w6tjMZAR z&?xk>yd1_Zv{q8Z2Ky1;XA;k-ZMEBMlkadZh?RGcXQ}?NNdnt*MJ=8pKPBf@_(s!$ zDfskt^ks6d{`5?B^^WR~JJ_rA6TsmJj`08v#ZI&~gor$C|9pnFE%0sZPb0g*!_Y+C z;Ch(0@5yeh5Z|mDsZZlK=8-8|{4VKKzS*Sji{0=Y&OQZ?Yp^xeU}qTaQg{YiFHM}s z6aL801+IPr{;@w(Pb0T>z7zb}+x)=`Cw+Zy+c4ak>~AB-KYhj+kLh`}lJ(h2a0X6! z8+M&j{i3&zSk0~Q_7|#c*!Ma!>GN+R_G1rM9(voh%HM!T?LBRy4YPDbRqe$L)?IA3 z_O%OMII3@8Z@mP0;C|q-K6mn4G4$4@^lus;sBXEk;O&}+{L8X`tLRpop@O&e_+-_z z%xWL7r+_|!D{C|f3{4;#V>M7G+Qk?+SNEzR7A!mD8 z+p$ZxiS8i#eBJx7rPGRkPWtCVe`$kQEp5-T+}gS~(T|7jDf3Ob z47Pm6t!0hL?_0dv$-4$+Nv`K}ZKo&wuP%D=XpFHjpL^bE7+>y%2N!|Y!3(7e`0ik8 zyRY-n-UfdE^}Ed5zl1cJq`%hk`>V@o$KqFeXXD^h`3g%MtsQ9nmi0UOYs<11$%Suo zeJ&9C_^g7mnJeJio5-98>0qcklw^S!{|G z|1i(k#D9lfgdXwdbk1I|x1h+L%p!Q_A6l}rtB~cNSMjjdoCoMo2I`@fZjckE$r?v=!{4P?xmLdC+a>%eA9T6w=2AF)zJf6sYC!5LJo zr&OpAby4Qja(t|;a{jzSO)@c>}gth*mt+sj-ZXxi{P`)ZJWyF1`fYkxh*HQ!UItB->Z z#cK0&-~qXubc%Js*8yC?_}!Jjw*By$on7A4&PQr%`rXQ#`@6i3>&Gg+2N=J#xO(>o z+{)DLXVxsvY>W|$iMiu^TX$#WN9m_3`o3-F{W@c8dBt|uRAcb_J9%#&?daR(9c2f* z*YW=hdT7GO+DCnT13sO70#2)nXX@OgBy{=+yePN@=T~ls)daWTO#r*b@mj+DH^`B} zQqkY^g%A$q7PSF~{OxHta@!AIv-83Lf7h%Bf9o&w<}EH%goglscOiH8@K5~eKV9&a z)A#>ASo>kb_;Rd7Y}&b|+B=RN2!1=q#w#6{6N7ggY*^OE!QBM&CtMoDK|8@o4tR7< zspgV6xF_5Qp808THjN+h6|CD1uiUvXfNLdm@#c<&-ki${l}iK{{CIa0E~^2T^$p48 z+Kwh%#g)~LA-B@|e(hNWHpXP-9O*hw->L5eUcvMy@ZC%tDMtS5!qK~$u)G3}cAbKw z^}k^peaCFf-K)e=KR8l+-Y`B?n=>_q9{j_~nf$`fHTby(KUdy`Ol|VWe?=bt)GP3? zc=xHFO|^+{#m|y`;%Uh~@w2`kYeS)8`EsfK z732~wWys$RIV1j-ocVR|cO6~)Uy;9`Z^HE|Y4;<)LH@p^3Cn*m{$AXK>s8|D-QbA5 zVAVT59oV+Di3c`U3h(9oGugbw?T76WvJ@Gu+@O!%_hxVEzDH{x-QiX)-tp!jU;XvS zR_Ti0d31uc*=wrF9JXEYnrh$QZ1G-BcMux6OYzp;zoZZJMCYTM1KHhiMWfFWeF}E^ z)B4`Wc3vFlfsfsb9=P}7AVzjhqtACef<7RY-**GwytrOx+>Lwx9_XnjE4OJ}_%`9V zu9_ZKQsXM!MjzpsjqTWp>gQ$0hR%_`3C3oH=Y|Wm>9L)nf83d4L)V03yQ+3#Y$y6X z?bsT924iDh`sVPhr#aYfjO~XSoAqR6^fYr8j_m~ge(u^9g zGspHDoHz8wYd*HQ}cyPtT? z%lfbpd_>v8oPAJ_$Uh9?GD|C*jXmuf-hIsp->^ltWA+t%!G^5jFuVQm+MRC-bnn_V=-xGN@?M9|PUMjvEM?b#>y}a2pj_m&UXm!vk`m<@f z<&t7O&i6wUgWPp_tQK`gI6E`cH?eGy?@+Q&INi{}j&#hnm+F}P6O~H_LVxg%Ev!GF zLt3p-?|J7|e6le9_;GZfd|Tys+u4;>#T(m+f%mONzAYZDbnfLBITFJrm|qU%iDeUu zBv&52*(Uhz2EGp9mM#=*md!Y4!dBjPc<|01Z|cqiwL#+77v10EbwVS3^M?Xoba^cN|`|^ZdYG zS=EKT(sjOf7I3|NK?AO4%-9~qUI8ceW5Bhv_IBXXT1tfe1y?6);d54vGPlZ`U>&D4 zQnk`fKsSPOdfwnCGxY@fLAH2?yDx}uYrcd#!7Mm`T`+zdx)O}SUw}K{5sVfv3U0wX z6SnpSTzn%rpdazUd(c@;o{7OTN!}ITG6W>h3_8aCI@yRCmw#l<`XkxnWUy@(`4ZMg~#LIne z!e`Mu!z*(-hAW~$6S@@NPBi#MGDNr#EFu4f^V8vy|IhqS^NM)*bi8sZ55p^gd~5K^ zrvsQy@QV0Cbl3qc&7?uT`&$(c?_yrGFSXs-8}f1kHqFsX_~TcA>tBH@lr5`5+0uYZ zFo{2eFY!lHu820o6PLpiGuI*I=ieQ~L9eP6-n+Rnfqjp1c}lUuR&-gcwC(Vzww3ZL z&q2;e_Py)Bs9M{u%Jn6`L!ak2d;Yk8Ue+<<<0K zqwjl%8hsR-dg#f@M;bAv-}E?G3;Ka z=tRY)FCsRreMhfv%**ef1N1E{<*nMqRn<$Hb8`xPLl1Xp51-~n-yxi{K(XnoYMtoR zz_y>!ull@p=S6|Ox%Lk9%^eqcvey)EtNACsx|= z5}pa{+9uBg<5+d_I8K?D#3{6P>NsTEzM6hcHy_Gd{dx1DwTPE%U-`Pzygzds&9x84 zG1JyK;}zyZ@s3y1PdEnwx-UkZA$WF#pZ9mecxgGic#-W4q-vV+&{vxf#;HOXc%R zY3=9p%pWqInezGNY3-H!33#TTeLsuQ-SGa8#rx?eEAM6;P220gv5rh`9N+U)9t!r? zpL0$>I(#<%Lt?c2ke5F6EEM=X#6a97fJF$7n()E02D;LHP6=MqR z4swH(8*?YQF~~&a#$2S_7<6^-!{{nc5WnJM9xWG2fi_6Zj5lcIbqk036f(zg&#yQsRfr{+oV6b_^SXz8mqwgV?%(F3%Ao zx*>$I^Uub@7*UQG5ilu!D0ntuU!3YEM1a9e<0pU{<*8ZO8U9n?C*1l{KLP*g?Wg9J z*kkZ6a5Ze7|1KMx?|I9f5L_LXf|E~-Ra)^81dqN8*8zO;FBMOets$C>G;Hx0^JuvH zLq7o+#Up{A0Guz0aoWEejDOdFQTP*#g0%^!1)PFQunNw=7HYs2!B1F&P6~3#p{M`z z;?z@da>ibcCgY+>3z|eH$d5J2hxpqUXV4^e)oE$6y#1xVD>NDSuFz!QyMnjScOCP7 zDw+&@*BegwuA)io)Yr*(wNLo2qRGGxzeaZW(pn2RK4FK$4=+cL`z9)COZ+hHx1K_e zUz5!XEs9tA-buWS{^z_dPfQycutNL0X^#t@m)POJAwOx_4u>A6eS?>qXJp~qUt)(h zc%(s#ila7Zu}?h0yv~6Zr|od&S1`Sz9S&^McKELWF7j?e-o?i1`~s`e@WE;J5KQ{5cOGX>E>Wn_lXw1jU=YxcE{))CyBNiLv zgWyjzZKLUYkW+NVC$RT^t+8$9q3`^r-NzgS`svBaa@nsu3&*x}I@cw%jezqsxC?9} zbaF69D)5>{sSU>kyK$%5PC_%P-oG=BRHi-)mZ_^@lO<-va&r zWW{LM;it|~lV?IZ{H3%U*x`-2Q9Riwh5p3p=H<5?cNt8V35E_2oWvfc6HQOU!Crc8C8Awo89%hyQFnh7GmWd+r8)Gi$wwy`w(c z+fh$qA0%=+h+DgJ9!R<7<(-A2Eu{m$(3=wa{fo`3!QYIn!&?Em(H4I*agj9k=I-kp&hs3to>}yQ_*ak@nslS= z|2R9^>sCDW0z|EXXV`qFrX21WSps~^XtS3-meI#lYF0H0@2q^waCH$lHSEVYBWYDN z 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񀷝!ZPrjKpzAoqedwHKf4VHNm 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�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 z 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ⅅOb}sqWMSPB*zP*-t##p|ejqW6yj_@53rhnI@T-8b6 zG)_ro>6_@IcQM|1_5NV#x8Qr<`8}QZG}7FE)9H@JultuaIkHCupz*p7G&l>1&nL~= zA5L+!2Tx}e$!7i1&%uFwNe6r2&+OgWf5^EO)R**0_R?Sv(^)CA`8|g^%I2*$Xid|P zc&{^!0#Q3Zn{W>A=UR-HKPuVLIhQn_;QbP(>kZ`D-lLq=7GS+#Nv!L|lsWq2C7cqEqd!hl2m1DaXBPo%>Y)Dd=xNyf zPG_$)-!qjuQKr&Op-!rg>ZSS!zvJr@E!QV=g8HZ&wfTQmpLc2h-uev3zY+YzvlaZk zz772=xHs}m`f7zIAEaIx>am)7svgQ$sYm7n^%z^ON2B?V?egc;qmgzQUXR9dyEM`+ z!|M^D9*J^28o}fEdPMjp`4V+Xv{yZ7^ApxXcpcv!R=FP9r*%Aksl5NJJ&x7mq-uEQ zhJ2$b@t5i`i~MNuZd|Z)anHWgj$J+u&h{XD4xg-vwBd(^zCk@Ddn9ijIg}|hp@T|h z@9|`E7Cq)c$3o6YUi*-9qPzNnzvgy#W3+*OQQ`X^dVK$0ysq}}VqN*i(D{u;WxN{6 zFT55z=)vc)HVIw<^eC;ZdU(O-$Kw_IFW}`r-`;&ZZUOa0k5>4vaqo?Angt%WbB1X= zhkRw+ZR1RffXVbfab{b-lW|0SO|%g|iavjgCZdJPJW(0Rav3euaV%vlzlFLbOJjh_ z@-aSma!2$ow}ZxkIA>dZO0q%Yi{PqHS(E+92iY)bCzTOHx1b!AQ5j=~ zx35=DjlCNgb&OuOBV)zuDQJ~|R%yyxw=ueXE-B%RAGlwrl?<#~bDpw)-{a>CI_uXGz9G<|+ z`A5=e4x(|gk}gKNjij4aNypgv zFzF;47XnYPq~EV4jq*&Xqyyf)q%+{FG{W-;?t@FF^Gib7Yl9qPPl)cO3vk!>2f3em0*~&iW@F2-JFNBY13bFJdOXiK zo_Zdo8_RPl&ln!oI0i=ZDDTNUBYC1cC-EF*&O`m(2I{S`Tx*mO>r%?b2br?pW(@r~ z50ip{zu_4w{~jd7L44pK4~^`7XVU_9PBYNY^A-=4;to|MIby`Jz4!cPm2rnYk zJr93DSWkEX;RHhMpRx!)O31xj?nelNgdZlXCY(yh9u4;#!uJuLML3c0OhTQPIhl}i z9NiBQ>Q3el5{llF2z4)W1EKDEogbjo^jnJ0Yxzh=o2|q^oF~VlTj}l^kp)IeIeU7%&9oeEUZJDMm(_O_)zdU;2 z(em88(w6ewef@#M2k_At@HyDI)s7BhlKOZKnWo>lu3{sPR=*uXQwfu*^#bt1H9L|^`d~;I}MpwEt|Kw zW-IWw0)O}UdQUp7;rr{@i&uBU?!O3{9a>}k4ErUMJzakJ%q6p3{_j6owwcG7`%uR? zejJ)pcbp$|b^c-XMD!3~`IzHP6Til_~n{_5FclravB| z4#1s4+JIT_87C$jPQ}}mm0`eVLueF1^t%u^I>5zY5j63h3 z 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

=PS9^(c48}4dM9Mc16Ep~TJ3a`*#3x4-} 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

i40t*N-p+u>GvM_Mcs>K(&p-w^kp)g< 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

rmIfI-<&LQWK3&=&}5^@>& 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

4;Tg;{X{9GvM>KBksm7-J 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

1+O}LX{49)7th9MAw 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%0D_VHqym>K^Nzy>!MqVE<88s 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 JCV|kD`(IfU$?E_B diff --git a/extra_lib/lib/android/armeabi-v7a/libft2.so b/extra_lib/lib/android/armeabi-v7a/libft2.so deleted file mode 100755 index 6c50c80832d011734485340a0e91cbdfc5ffc4e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 304108 zcmce<3!GeKegA*vvYW|fB$H&(HBI#dBCa%)LDDwbSOy3o*eH`^frx2$HoF@VU9!XO zhJw;Md&z|)E1Mf&Ov(vhr8bu3qD2LrTtG@w4Hs)f)H5?VWDT@NOD(PZ-2eM?&U1Dr z3-tf$|Mh$Q_r>9Rp4<2N-k$ICeJ*G6xhs||ibNt-_!qMpEu}^lSk^q?!u@e8YFRb& zEZeG~Y?_r)dH(+HxD`Hby=Cc%Q(wxX+jS?wSK15CPte9$9dTLEM{aL5? z#mAl^X+0_z{-s_|8{kcUVfiEoXyo}@YP`zxZJwW*+9SaCP;2Grm0 z@D%k@^*38(JUanDH~DqIubB5=8TdosPt3c(fATEi!L+SYJo-B~0Mk{uUjS<<|1$8;cx+SG;r#|4{hdeN zxjaL>|Ayx;mC4^<@FaL<@;uA4f#)B1_VMWNk9huo=MA0aw?gX2Y>6p#M41;Dxm zc!1|!^wSKyk>{5@XY=UqDW1ucEdw6qnZtYdw>o?QeuL)3;@3&ht~AVUs8DO`d7gOYqe5yiVHVxtHfj9+&5A z@)rV^@SNn)-=_m$r6>#kV&Mz$rmFY<+pkmpFCl#I{{qhk{ug!6r|uu}eB^D~OnRIA zx5{oXnbY2?ki6Lw@|hz1zmFMsj)8w{;M;*eq2SL=;qteuWb!Y3oAP&?{58Oux2Y3m zUt(U?h8YHCCZxk;Coct_Sv*U5^miW5`~0^v|2L217kPG^neC@mn7qFRZs(cLvzzB~ z9{ug*N&0V=l`~La3(u8R=?>oSGU+(*GM-0FT3{7Vp6B z*N^kGOvw8>>96se;MvNvi|123`uiK6%{<3>zRU9fPajYC*TYMHn3w=RL3#?l<34@DcZ7c1J{io#D&L#H=R4pu_5Te~ z>@5U3Qu#lCFSkAJ$FOSu$KV?V|6)`BpAlhdXD~Oa{%^qd`u<=nDE%$ck2%4->X*~* zrK^MaS?NC|-OwAvbV`3=g1na^uY%-q`%i2jZ+;mKxI z|3T!bxLJQG>zAW5FtRzviBri^`BR}Ipj@i>7D_n1Gw#bn{7yx_nXjT_%2XdR#{Q%) zhYb6vV4ha_f6;&ax5w)*L0&d7_!{a8-$LX+AA7S+dLI2hiv8qBtNrJIi{U5K?#^#2I31TJCgdH;_Ycu;4tdWv<*m?v6#8eG^bN@4RUG02CcOff#}O;06TWxTY1@u* z`5&KPznk8H{GSbCcGbTE`8RGK=WieB1p1WURQVrG#&+)w;xMH>@TYgh{TNjIe-i#J z9O+zBe;fSd4+k---yZ%S#rOwI`JZABPk(0IKmB-uJ^cy#JMz=O*Q@dK z;OlV4=~=7(u&0pTH%PbrbVguYMojoaVfqwmv$L9DI* z{{VSyJ4(4}zY_g#t{Ol4k+1t(h%@E;;YaId{b_u!;?1JJ)2d(HB$@=Ig*w!a(a z@3)k{bjP^7enS6GSM~o<>c8)n`OBM|GP*J+>T5Q|97CT z++)GoPVGNL{+zu*EU)x4$m`Y7ar%A+Kezo$uzpc_8~S%az8SqK{jczM2Cw& zYbxXZECRkP!bhZj{f|u;|7H3=fv{ae-?`ZH%6rH88G+sv-@-?j@|PKZZI6!6H!nd) zp1~@;h@PXe=l$d3@owZZ#C&L*@;{rwKiNk!{5|l{xIbM* zUeChuvA*`{k!r0e+d8c&~F<2qBjcuhR;R)eIljLq5L)Q)f;|)BcjZoUYDT%C0`iF|0Oby zRn5<{;qUdA#^?VpBEQ06WMuGlPT=)qfhNFAt*$XWZTpm)u4)gZ}#Hf7`?3^12Fq_gCTDIl*2(NBJ@Q86xxP zoy&L_BHj@_;^!*Hr+Y6lGwGMH?=^Rf+vD$}-`m<5L�_?}ndUtRG}=;^#s5Tyj11 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 z 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�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 @eno^lg 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

~T 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

a#z_x(97eD8sym_OM!B`(Xp`&0!I~U%*^DF_zx_ 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%0AtLX(Q;o5gVw&)INnbzwGttdQVrN}B=_Mm|aF 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�ll*2zdtnE+G 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 diff --git a/extra_lib/lib/android/armeabi-v7a/libmad.so b/extra_lib/lib/android/armeabi-v7a/libmad.so deleted file mode 100755 index 6d530eae42d1e8b67853c4521c6da56c403bb2e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 83688 zcmcG%eVi24mGFP7UuK%7m0}poIGJDpqfT@*1(_rxnZ!m%MMGlqq7r380|SDL+9E0@ znDo2=!!V-_GrR~xEE8f(!jm11>k@<6Mp2Ql2}U<@jhnsQMP&#kyKdI(lQnMmeNS~Y zj_f|a=l9RAKNR=v+;h)8_uO;NeW{wST{Zh^!!T6&7gh~QQmv*^O@zr-Lxq%zHYrO* zDI2d$DbF;2)==d~lOaz8czK9^;8&A0lsr+%1+SF*c`5RF_R)Ym6+t;swR5JScFrk1 zdD8Mox!|AUt!X3pZ@+T+m6XiosTl=vE%9r38iTwfVLi|1c?7=v6a3S7KE?Clawg#y zM#X0nAIDS8b3M=Jc*?(4BA4-elIJr#=kc7wa|O>wc`Tk8JRjm2{rfbD={%p{Y3BJX zkNjqq0(Eu}O3)I-#}iKA5x!o`^KqUzJhOP@m*Tm~kNyAqUpPR2)~IGCj*6F~v2r8` zClkt;)$$~G#_*JX=awUcbv#w0(h~g`&lH{uc*gRK{#{DqBA%%{lSUQT#4icbh@rZi z=R%&Vc|_LF=c(i=|E?nv4-y|CY$z9;5z1VVUpS~OGF?iKRUw3V7KAJyql)qy%FOc9 zN@YoR124Q8PfykpwlJ{Lmcajz`mG3DxqjOj^?yTJ=92tO^>3&C1Nib!~% zumzvUUil|HJvItn(!wL@kBo=FZ>IdIMy1+<^kncHn)`lxe{}{ulYwujf1m!JP_K@O zQm(&^s*f`%gk^&N*Jrd}bq4+`qVW+8;cl{8QjxSMz@T zBWK{BN4gJwmdAGxJZ%gVEb{5uK>b5IR3HyAe?C*>|73hb-W}SXLMZKDLHphF8AsC6 zAL|VMJwtx^C-uKW`)fa^)KTIB|3liV2U#{qPdlSOb)=7@GDtL`4-Pw`ahdc;2(g#r`q8O6(rqwMtf_4s|TJY{qnD# zf$uHS^;1i_UFx?(f1k`p{>l9MC+cNkw#d1Z{|n(TY0;^Y{uOXXp?5)$zMXU%hM*NX zq+D!52L4NZ;eQPLJ@98?0RJ9g`6vB5MfvFY^7}K=H-rB;3NQ<-;BTS4{FC~3@T8b5 zuMtZ5?la1tB>xcnI2@E`;NRmn!k<_P{tq8$?=00udHzex7xD$)>!iy+X^*1QKS_V` zjP|aB-U!NB6H5L6A}s#|UfsU9ZPC5UR^Pqy&O7}0(mONvuU>iUiZy;}@jYu++_~D1 zF1crAdz&9yzG(51yVasaiFT9^ z!J3t~FI&B6>7BP{7OyVVE9Km=?AFBrqEf~OdLXn4d8fPN6E7r|fbU*bqA{r2R%*AD zy8WK^H7hgi_kW=Id+r!rVfpICOV^b78(>_sdgUFrs=G4;YnG3y`{iY;@AQ**uc3pt zFFM`jAiZq$>N{5x{{YPWca(Y`z%03E`SN8SfH=+N0Ae{Acdt;(S1&6uX$8E5Z>Pba z`1WOsZoemBSt)tCG=Oefw)D=nQvDLZf6EA(5k|HzzMlrJ^~nz6A54@|ci(@-k=jv5zY5Sdb)7G-Jf$)~0 zf)3xec;%YRN{}wQeQ5^CSa$pEcitOtnz31wS-f)fqBV<`w2#WW>mCs|KW}N7>i=Pa zO;hbFmn^;X?mH#CdrjNYi!Tlmw+CTcyF}o_+Ldir4{rRx>|hWx*)WIus#SIg0L|N?I3Il!sZ}s3BqI$ zwg%y>Aez&cez?ESEWbFhW_5-*}3@y^x{>Db#p_F`9J5MO+# zSbe0g82k4FUOBEt#sBn&_w(N#6+ba5u1CdR9~D0~Dt>rWJU=SFe^h*URQ&N#ac5L~ z=cssYRJ>8rAGPN?SYH8zc`_ylw z9f1W`r(t$I*TgR<(Y{?1*Y7tSaN1DobN1#tj^-zgMHdC z=X%QO@(j`mHMgK59fkjdzm;aBD12vH#+5bT#qx`bPbXi6FF*Gp$;JBV{lJ#Isan|==y^>eBct;!h*18MYJH`TrMK!71?f0V_Bg zfUl$TjG>$fgz;+nW(H#|WBe|-4Qq*(c}ZO6Raju(A-_W9z%!TmwYVtq zk9-*FGZEJ?XBI0zG1H%SGM6H@UskZuFA1S32^})$k(CN)k@mxC@Px=pl)fjR!DgNd zA3S(amM@ju;;Br|^L3QyfHd-ybPV==;+4Q+icT6yrx1bfPyglATM<8Rjw|vmc>?oY z$tSMV26W#x?=jL!t@mU+--bTnS&3i$UPAR3V`jf6@DZ!u`zL7efAr7j=u;iiYh>h{~L|osSEzWXxq=8nmU%4d^r# z4^dzAdK)+-tW;UXdIK`y6qb=E{CxMU8{EafG9h+7khsCUia7gvyRx4i>xR+kpCK*d zE@Lj~$)sCb;(i>PQ2W4V9CsiR(UIf^k2UzocgNk}&I0BlaE$+S$cJkttv_3ePb2;S zZL+6WD|pIv6V#pZ$*2#H*^lQxQ;M@?6jzr-n8&5QRGvT6-OTuit&%oRwUlX_UtpYf zM$GNr_{%EY!_#NGQcvKO+U^a^>C*%AyL97Eox;|-C3@;-;e`z^tPQ?=V2@nUDe%*c zkS{Xxbc=DCKH)#9mT6-q^;={Zq!bm zhWQD3!h>=fFOinH?$4{dQz-Yfg83f7UPSVHJZ0v*kkzLnR@Mvq^03D<>@ND2_2BWY z@h?}p>LU^N@N=`>%84`Gp)2})9)#^aA7)DQr3jhm;+mtPDs0d^pj) zqIbont7Kd8pOMWXeLt;JY_Xx}BH9-j538;d2KcZ&aa_$eN^&;0z;;a>7xRsh?945& z{TRnJe4`|UBUbd1Q_hZl>QmZA5)89AZv{ylVI`JCf(D=-` zga+wJgv{Yu;cLWVUcuMjK=U^26n5z3=O{<7#c^BTcz4`f7k!G%`@T=SjWT=~zfI^l zY15{(LtntV8u?do^v^TrV$%&^e)q=e_mQSbckQ%RH`iLP2kM{K zhpu-DS4P@&S+~A0b*%fs%o?D=v4<~bBI{2V3-a@!P$fqACH#Nk3 zT6!90y-!PMseY9*6FKw!3dXlQt|i&XowyBtimXNKJ>FQ~2gFDFOeBmR3X3gMXGPqw z3Gbsb-Nyd{793$@LgdI4Ibv*NTnu!!$e)zSSo!72XHR_jFX+?j-?s_joKt8)--m_; zkJv4zkfiMjY*%vzTVVHlS3y$?dLowHE@p}DM6 zks)O72KR5IU-ZM*&Gh5l_pk-Dsc1{3MUR*I^bYw-Xd$hfQr;iQ6ZxxHPX1fCy zY|xL5cM9JJPRfkhsa6N56gmj&qR(Y}=6$5?zF{NO`p+~n?-w$8fAeVDL~vQL6{J8)uO z?;`J`z=<8bgLv7_P6p;SU^X3&xiV%whiADmjxA2VH`LIjlj(l%o70`b(9}L1o(fMU zU!h~!CAvA=@9ldI-^}8!fyF9`lXo8N}h5CHiAJq4;((R`0@x zo5(BSzo{^vcxm3=b1KJ$MCVsc*cV#X5+JBZ)1TU+(LT%6ostLE3ASZ z?BcHear4|eh~ppa`czPMJ88yr*MpR0h+h`uV}EK78;^KOJ>;)Zjmafk%;9(q@H2rI zpA4DZ6%ES7-!g*w5 zW254SN5%7_;`>L%heyR99~E~-#dnU1=SIbQM#ZzE;%i66Go#`wM#a;k;tNK_-@KoF zvbC(;c-Gv<9u?u+gsFAyr*ihz3igXvcQtdLVd7kLRQ`l>nlgfJ4 z(^jacN#n278s?S7M1HZZlzj`OU&S|jUD|k*HpE}@eKqD)$m-B_DqD>B`w)&>V|IB7 z;)<}EXWO4ooh~&%HW1kiJ@ZoJ6oWRU7ku~VVj=A;uY|+BkHOz-}lZ+2^3f;=w zG7=*cy2EPA36rqekN2I}Kl%B>Gdy*qMW)}m)KG0KMrBV&`s4E+K1!QmtDE(3SF!47 zXEDosvCTfuHak7xuaR0`%qF{w_2|HVCv7*e9!$%O0v>Xls1HB z3w>pzokAVqSkpn5JB7>Poe{*Z58}dCDXX&wqsC=j;X1oJI!ky=emnYre9xHC#r|Bk zCvYL^Cn=ApH1fw70~ea6!Y%fOsIqnVujr@1Njskm@T>~*SP#3?$QwtU@TfW|%KdiY z6WkkVQ(1%F&@}d(rYyluJ;a)}Q;$>0qM9}^VveF?61c+Pnt8c%x_!}|ZPcv;hhNv| z(nh?>ZJd_#s;Mh}j4`Il{ifvNnJWzzq0 znPm@7G+MeQSd{(w-BMW?zC_@Q@Zdkl6I`(%{f8i3u1}vQS^@62g8HM&l0n&V%7j0r zJ%PQTQXd4r3GRQQOxce6jByCxuC&MM^K#4t*O;azFfJ1rmkAGHQ)PW1yq(3K)HmqA z@JDzo{Jn&ETjuX$z}2B=Oy<<7%g5o{Y&#Lk_Z8~$-QK^`-hSHZ1?IIi?BDaOy&HXp zug!cZ)Tk}q5bH`Ki9hbJ=OgmLesYW55&a{)kJ*yP{*}EYiq48BEJ@FGtJRih+)8V) zs~<7gGo|e?`xyzV1353v?-+5ZTW_u})@8ekCi^>=gClOI(PQ&mZ0;M%KIWYwZrIr> zWvE)hVwk=v6aB}&o@Rc%D>BBMuCW+<_$hwmQu-x4l|7q_nQMm1xG#fS+1v2J=eZS^ zIN=a!*@F~&S#^oSUZkwg9k&{ohmZ}EJt^t0E%k=Cd3Ao>TijQd>XA?Tb#L+aPI8P_ zF06F5xy}3If3i=Q&gyD4=*6rJMd^#I^Jm~cCKz)mt4VkJ{T>#&?O*u)`!@It#;gYV zr7zNl>GUB&m|?9T^uGX%Yzw3hx# zU(s#5q#p)+XH)6rs98qt5jbc50Wj5kKpT zVrvE%lP(!+;%t-7bKf23gmY~Cn5sMaHRJ~!8JEv z{PeBiFgjz8w{_|!{n2esAy0V?GzpzD*G0a>Ue>_FIJ^_R5p%A4uEyzp;Y&h?x=q(O z9X=mpc1IwS9o~!54!(ag`YNU-xHi5?qrb1l9$FH6mqMQ+BL{-HSMSda=Ct{|D>^ra z&W$pLb!N9$Ir$3zJV12KIE_vHw}BCvuP_*WgWZBAco~-UPK~+ElRcA9GoH+?V!gHA z--9oWVJBne6wU(AWg;8!w~=`$dF8#L7I=LsF+p@xw8mZ^Rp?dhf!k=U_wX}LcArnn z^u=xs`TK7XB|b|^{J$8EqmMIUuOAVAOz?|O>H9`W;`3zBWxZB;{4so&&M8@K_g6%Ju>8>i#a#XU(cQC@3^9aFA`cE>__)V+%nuJ z?QYsL{B$fxix2qrxJ!PU9L{;y{qyIG>$3QYxt#aleKFS=?)TQMJj<=4tao9hdpye; z@ledI-_q~B{?lxGOvByAI#q-PWEByAEV zNFN{GK0%dfvtn481OoPw}DFmUjy7A@geF6 zd;{m7C5F>F zNjfKGY1&SQ+%dU!on^jdQ~lmE%dd2sQhU5U+FOUL)F&CE!+HJQ`lu@~Ysug9;5F{H zBYAzNW4JB3ey=Cf?@3uIv&TF9jhSvM?W_TA$BTL0MmthApY%I-p5;Cqdr1o|8R`th zU(%KlbN^-YIQM52SG!;N&Nz1g?Mb=#VeP;SMqk#lw|RMctGg-Z6h7K_jk|(2&;9F} z?v9F=wdAEq&!Wv`Uoyb|q845(Oe3$f{nI(E?oj+iU40fh9y~|Ry4sa;(RZ@fv^!FQ zpG|xRyzBu+%4d=8OT(iqdzz_Rbr$^VoIT#!VPrYU*i$wi*m!=G&QMmNZq@CSub@0l z*_iBYdLiXwo#i@7`7H8gQ&yQ-slPOEmYbk&V~3aPhwcr#<}m$iPq_P@Q0@}u^yZwfphKSGh8mY-qaW9_4;%NVzZmDB)&q8|yysW<0Ys(U|=&S`sDx2zcJ#)p^bKdqSQ$~@h>e~g;|_wCPI?N;Pj zCy*y&oooMzUI1-EV-NU7+Rt`nj@I4U>h{rQJhfieCHp;#x+ZPzj2zXeEb2Sp4DpKL&3ZmMS*ZnPHt7s-v&fTlGwC$x28UL z4y|J|8+C@fWClHxN$au0x9J#g3F^e~P3tJz{*yy`$8ATo;FtL>xTU`qFtd};0UqJS z?n5u>?bjXEeeiC6p7tr1F>3~QBC|;^%s~rqnJj(DZPIo&@J zz_$RH6!7g*p6u2FzlOGCE>17N zTSK}T_yl+s5}yyASa!2s0ZcL}dKw*-?e`XvA4x6KZR86Lt-z)zPo{uRt<;}+BO#sR;2fs> z;X^M#UrB~V2S_{nQYAXuftj75|H#~0+KQ;Oo<*Hz;NAhQGPObrpT}fY`E9*3T93~Vo4_5)V~e4|0ml%qd!b{jYS%k~7ad!fU!g^}z7FgldHG~NxR>kP$`|zDs=R&; z7#X7$>WXX)UHub%jCf^og|>kg9X2MvTo0~zNsGR30RAxLL)X5f4^b|2^JpHtT3NITKvYfe9 z_aH+xj_`PuZgAia_4ZT0Lao%j&aL_>%Ic^mdTZNSY|+gxX_K_{acIFIExJnVZte*4 zE$I}5Ut&`u`DMBVx+>Bebu5p*NUqnpz9V`q_#&iRsJE*xuh(WvycQcRzD-XSzANlo z7Tuq=8u$=%Hf!P0x-?^p?(ZSKHi=DpxYDgmuhOFH*JSp1ox84b zpGq=z%w-uX;Yp1AICEU|uK3jo-f&A)_bBAG@~GZ6Y96Qa{n&>dT@7tbly4vNk{%lK zf}XFC$2nuW_Ic+c`}6KFY=CvmLqnvs|}ikppBd zj_gL~tkTEHmpNOLMW(>(P%bhp!7NR?z75YVisB9Oe!%d-IG%8Xkf}bdlIP(f7W7 z0gw2cLhDY-2Z59MB{H~=JfU~kK_0WrtL$3fOMsGb#CVI5Q;wao}bA#m386ZcH!Nb)-d>Ta*4?ikG|Us7_EW zx>$S%i}EaTCG*0}U{9~f>%GGzx!Zl!5p5~-uY=tsFTorazaWwC(c2kku@hs}ZN48N zK1FoSt-1nP507rMZA%CjQsWVJwYD^Z+X#|zYS^T z&Mk-Zx>QLQtOZ8=pdHudb(D5iB+=cJncz^1u@$5T$FQCt9Qy=wjIxMY=IhLA@`NX? z}Q^tt@!+=mo~T(V@MU51|JblMM3o#iJ#>GjG+2gSTl@$sAv% zWj<9?M|`xpd`Ui(gKU6H=6n-*4Qbi}E|zN7oAHx}D9f!ps#}MV$%D7*Z7cKI8Adiz zCArxNtTLAA8t{&V=as1qT6`&y8JY9-3SUbBgHKVZHt0sm#GhI~x%g2F8B_7q>VR#K zHlWi4Mtq(`D$V{tpB_7WD|scI8v03JvCd?EnfL%NI)%;HUD3BTb$Yp@ngEYYd4lrI z$dt&$>~jR=tpX(IcXRw}0r6ju039xBJ$Ee)}CJaeViB@++RWO^aR? z9V+q~fqx?V3n+_Z;Vm-m%ZGzqb(ZU0)UzoQy;rdq+JP6jiex%;@9+ven>uxrMW8p9 zWvNldjTi}qn<=c3n4O}&Xn>J<% zZfFr-NN|gdFu{`nkF3{gsNV)`HEl=IQa4)^Utij732@|S>vKmj zDS_X-iT&6;-c>ikx7{0xmgLcn?9s-8`Z9L2Hc-AQTNE3r4|aRkZg&dTJ;ptm<@lk< zR2}*1VCRU~<0gU0bbGTea0;!Y^OL*1B=H9F9paL|fc$KbKb!n?kT1G28RRb{-wN_o zkf$bhcUO+jo3dg(Yhsrpv*eJ1k-P5}DV3zO(YuT!Jp&{g#w$drqGim&=9I^-A z1rGci26r-E%qVc%-No-R|GVdJ)=`UlxJ{e&J8}+UUssfSXJ@l7&Hkgig1YEV&i{_M z+3cREaj`RDJ~UP|I^h-IQNugE6&aBw_GmfBQ0Xom$!){ODDAQAPK@=}DV3Qn-E437 ztW3XWJUTR@hF2BSdDcMTu#V++dfnASBhASjUL7=VnK4zzoNeg1?cT0wlXZf4)JC4I zKHUZ{BGyjN&hPNHKDC53v-plXuzzXv-cIjf?sGQex3iYRcdNUIbuPBFz656`IU9f< zW6gH<_P1GhAv*IEo-}11Kz=JT&x!+_jqjQ_41W7o_7Ct;H=OV5 z+GuK{zG@C@>ePng)$}`?8uC5nzuFAL` z&J1}wzjqP-%z(Fj+e#fvZDma}h>aNVc0Sgi9pc+|ti---^&SV-afZCz8!pz52l*!X zjhO+~Cqv$jr!T}G81T03TFG9^Ai4=$0)OuXdOz(-em$@?&Q`AnTC(h6?^tyKc4xrb zwR45eW}foua$CLKw_f1;yAQ8tuOhukU(GpIBt6zkrOi~dt~oc!(II-k8y z*-NF(jM(R`tm(F}kIPvG;}RjSE{$zO&Li+Z{Dd7hUaZA7nB-dyHjA=1v*3E>Vt237=x<{SDI;RJFJ*z1GId|b|We-aB4%@)9B9D)2 zZPJrIyScc=WG#@SPsYO|aZb>;Li^8LhL{CLEY-)fM=TUS21>LFXRk!E9bn(=sg$e!F3nv++7#y zfz?y}{Y%c~idRlU7uy^0%~X6r7TuoNSQLNBuzQN*&_N6Ae(z`8Rqdu9Ir?BQZ+jf^ zcfVNZhF?|tdP(Dd{pD0``CM)O&AhkIQ`XIG=w{KO^A$Rgezk%#8R%ve=;jo8e`+o_hv;Up*P@$SG9T2rQ*eAC3<Ha4W2Q|Q;JQ?+gF@NyIJ>vDt4L-BEU;TN~FFUL8; z^p9#AeVRz^LQl*4Jv+Tz-D29r@Xf&QM%S6ZHnB=Z@&BW(_Tr(U;FzVOj4$k>24{|R*KH4S?9%q{HYW4C%6I4c_PS}A{c za|3Hn^fl=n-52VX4(g#_c7K`p6GPsbM~A$J(Gy8@OY0VF+E*@Q9k$h*-GTkN|3W=0 zw-x*)nAyNA3}8~g?7qJNI)>QK-RiXq%*F=2AcMX^K6cRVAau;?pg-9$$Lo-Fu?bo3 zp;?@@ioFm$E4Iu)7ERs-<<3rRi&9c*su~x6Pk&BijdKuYh z%&?9$w|er9R3wFMKDcW{&qSV?Q?}ab4c1LYZx487z1f^D=}pm>qB~_hK3Z>zzAWp` zvfdQ^ex~j$>rG|%(6)-#=fIop!C%|t>&$waeN=SjY)975^uy^brszjP-CPixRdrx9 z>3;7BI2b?i_`9f7OupSUH21cOX@geY4+l?w)eOVcL~*_>T}) z{hqspDaWnOZ$VcWZrnE9SjKQwzI&uGy~X=mtGf_V=eR%6-G#G(-8c3U@ zYs@Tn=aZO-~f)5h!P|BbfY0c~7Ssm-22+d4^eCOnolpmT!7`;b1Z zq=i-)a|PWeN6~Bsw2OQg8SZ$PtZmXI+P4O6iQH6EH*|5{4RL=(;sO2crT|9na#UE{ z!=X=7c9cHRZ|S2ee3rbg2C#;}k`{RwpLX1GTwtWW;CXxIvnPIpEC^kViy!eCJGd_i zeHCf$OCmQ{a2G;&9J98w#+v8K9T8=3j0(?{wbhGEmUV{XemCIxWYP2X4o|^vxq}z7 zoyj3n3jl_J{nC(mz znrX+U`+rGW$Y40xrd5)?GZhOF!`%oaRy+YQc@I#q$ z4{eSc33$8{oQ9n#Qvc)fK2n(WV*WUTQ~IpBJ;plxTVzvV*Lff6WSH_lG3(QcAF?ZQ zDLO!8Q^qm`k0R*A5N#;#HI-%0M0SLCybIyWsoZBtVAo}R34D=vI{bX@GsWr0Nug6Q z-%2vexnb&&Xf*YZ5?|1u%*UV7uJB0YusOvYq0~b<8;iQX{MQmLxw9nmO7zAj&>J#- za#!#@DYwx{+-KrG{mBJ%g3Qcs`4Nyorlj5j*MyPMsb+~CAjq^t3N z)G&9p(Un3&GPAz8<@WW(-gi#D)r9`8B=6V6MgD63_o=sD>0e)r*sR^MJw@)&6%!Wz z3So?}nR|aV!V7pVcbe+n9)#~H_d43Kg3u)VIBB`#B>et@lo1!X5xptxN&QuSEa?}y zM=3Z(<^`t};FR|b1n2MIi{P9zs_wS`DAlD;6Bm(RAK*tH__zdrrR5Yp4ljkiDFH6- z*!j4|l9v8Tn|E`Ut0AcW3gu;5ZH^W9({*0$@>j?Z#vv-&h;1L&O@5}yeCEWWREn) zoULID|19?j^Qj_wvDOagX6+drYdMDW--n}44RwTm;UVo#P{Wm>l9zc7Y~Gn5`%@AZ*_HB}kwYmrx$kwr@5e%SQ_zne2K|uxXFs9r%)U#XpCe!B zxQ{vm!2b#5C-YI>*d#G|3?wlYkbKxTC7c_}pzBI`H5P6}Cv##h? zDQgJw$CE$0uE0rOxaioV*((c1QtJ6Tk{isaq{| z2&)K1Z-@;SxU&PeL;x2L;9`U#FX$%55`L2w_z+=)wq?9Tj>>IUqF?^-FQ?vW5x?L$ z$ zeLhd%8~w}x69Y!(C+}*-6X-wA|BG)xgUGPLe()te&mk@2qte_vME1Txy6h9+ro>g6 zcQt@J>gUroX_;dQ!WewzuHQ+89`x@Ur@Fo8fRp|UetB=?YuvYt!Fzd+1inuAC9)#l zkPth?T~5YOyFUlV+gDxk+fe!y#;9cbJ#XiMpU*1nV%O8V{ zBN6=OMDYHak>{O4>uRwn?nlzgi*>v^7gjq)Vkyy8jXGj7?<}Pi_llL(S*W^Tz20iP zpsllq3(+Z#4qH7V@}3A|ixAhdm%w9q3qNBEi{ z?emwiyMwY=P_{BCyPYsW9{u;<{V^XNK8YY~jACG1qacCNsAWw)*!?Zy3*g zX5PO}@E%1-SvpkigX%1p)g5}v^W1^^DSZg-(=zt0pD*n(ti+e7!*7=LX+&*7=k&t| zbU+gSIf?(w`xVT!3H4_GM2vZ@F}BM6d+y%LS~G-yVA@08H*LoVi)>9g+YOmX7nv&* zxaXh!@K`_oBjTdVs*&vncqb-|kAV*|L45tSpTf7Hy?W+GJ#$+2EsVy_@D_WjrcQME zIC;07HL%qo`U_jc{u*l_+1se0z6BoMJBZdm4|~2Lx$A5K7oO%AGJnE(XIczhrqE$> zpZvqnS&#h9d!)apzRjLV8kxzl$MHm$7Tw!y_ZF?3oc(p_3Y$F)@cMFPzv@+FdG~T! zuRieAR|}%=#Ez_CT-JvUkH|YhvXMN56K=Cn;G@sl=i#t zeT20SeHms?nmxz9X?88sFnAq0cVS7lyt|!6D}?8?zgESFJP_ z)zB}r%AQN5!x=l{Vhju2Z;XgO6MvBTkA7s`C^YAOH6r}s4Lp3#FS=v??V;RQ+D0Fq zjPl@v;#Y>h zXxN7*9)ULkEA{0Y5cQVuf_pdfLd4 zm!$n>tHYn)E#xb{`ylg(HgyZ|%@+2L{ATt6LS_eR1IKMLIcp`a75pNHGMDim<2LnV zEE=gZd$_+SXJ0DoxUDw!@QKa3a|&x$2YzwSUf#VJlgG~kPb7yPg*PI1X=EnK-epz$ zhGNz1?jkm}HwIpVaT{x+^M{d7wLs=vAo+Nn%o^V9U7Itj*|cLcP^ zLxQ>$i#zmK>QyAAF7NCx??orYn1k!5zv_>xn${gvyu+5|VLjl#-*WT6_7+7iDEb>Q zkNIO}jPKPyp7ct=s9LNIvsZ_0a8G;H>!Q8z_y_eW-)%Lf_QN*x>yw<2(ksMeb$2F6){vGS6jy zGfbZw74)HJeEu``CbVWl$S?iFZ#gMCCTxm*MXos~N}%6Dleuq?oss+YVdh4bP>t{O zsv0|sqGNo0$C$|c!L}9T-8g?N>`myc62DHsqXvud&h{5Y=Ttai7dy4c_03=FD=z(5 ze=&mHy7}*}DH`MZM)3?i_W_=5)RV+lq@Kyxt+&^6?v~~3AA1B(ghK z`f+(zpbuW<4Ei>0vu>KsdCk(7^aXbe7b-)K>8$GX2JeEG;TL_|T2bZb9p(6RMugn))#*{wF{fl~e=ac#sf8WPk zD$TVf#&fFZTju%7e=e;HvNd6Bb;%Y=`^@WYSN`SHF0q^PO@eB3h%ujoeEPQ4YhlmJ zq93N(<30O3-Z!I7fmN3HCj%$;PkXa47Cj_$=b34*6omf$#=*ij|8gqcC_W>)*I`dg z_J@t>^4?CCxvyPWH%s1>QF**Oe^O-eUfNtco3-WVO5ZPDcP-xr+b`=b7Y!#MrkXFZZ+`_(KVv;>+B67=5aJlx!5_;{nJDq>B9=vkY*0K$kGpoxew1| zti*nb55Jeb$~&V5@36tAg1k#7I%~E4ujg!>j$LIuBG>`!*$mM$ar6u0QY-rMJZ$>8 z@=jCMak-nqoj+AX3`v<;G5uN{4 z=n`AUI`rfU>{kLkC2b1-txR7rL4PVU9olq|IocDNg+8I%|7Mzf4f^^e-_HI5If@7U zU2#T#OM7VA9q*6N26$eQAMvd$%b5_u4~tn_qVQdwiJYH=crP^^nk?V)>xc^fWsP1Q z1Njbx=z+?~t;M?hhT{Hd|KRJJEuj#5U_&Ql|CqXkwb1blWhFU!p^&3qqrWbl;P%Tr zfF6+_-ZAx9Kc76td$$U{$hkrTV=A^v{I3J#;~V<6i~R!VfKP!8;Acgdl<&(#?SCAR`xIgPD_;*yeP7S>KHf=bPx^Hp zbw4gPEe-w*@3WC#$vBIBsmOKc3ae9#-|71;?60dV@1Wz;Rkd^#(IYcNj-*fLu{N0u zo=Wo{eR}XC6?Qcgp0-{w-X$4xkRNEPFzFk(EZRW+U1R)uT}eA)gQcHcQ{EgAeIxol zG#UD*aK`@Ji@q;kF=d}-Z?>SU4zH@NqbPGkbfeH9vb zFyBLle%=f@uZW*5-;@gp zb!#)vT6UOpX1T7&W%)&V51M&hKiuxApyoh}!@if2GE_b-6v>9T$JW zU03-9_u>3uf1G2i*(&qhS~O$5ky}_OhZ>gW}(Q=Qe0eFEC-)Bs2g*LgPRFmwWPM>bbbf6k+1vvHn%pJ;@^Ciup1phY!!|DoObi%lD*@cr{QEEw zU}E4&pj%sjOYq$$!L`*m>ib*?_A{dB*cfmLbcVdET(ZkO#VOE}O!u(=3w`uAk>`#D z?Nm#@@{4ty(1mQ&rv}h1++WJ`-3`^n9Fejvub#A=Sys^Zf0e$Xg9Oi`=XL0V^mn$2 z{8HEFlic;8yIp1C{VIpebWh19KDVDoC3j-1SWv~>___D{{ z0(=DCp9N-daZMm=QcvFbuE*A~mvzy5lOOSNyh|(h?2aRgmN~$;b>X}4DZSO(cJE<* z;a7(XvAN$yXJLaAZ;|0(uO@KZ$R&wgJ_AoQrRCX^}A<@^H@A$|K7yc zdK`Ty=QE-w#P3VfzWCHDKgOLg!v4$oMv%o`8}o~MwS1GYv}TLsor20C`&sUVWf%*_ z&19UahdD3DcJ8|DIUSL(xu|1V-e>+)k-OSCZ^tK#+>gq6+dom{U5uQ!?bAg)6`2an z{T5^0CpMtyfBOgAbq@E!z+Vsk2Jp)qv*D{6&Uw29e=g@eJOlheJBgqjGiXQbyR=ir zAF<`GOdoo#uNY>Y%6Eh!eDC)typp|pS#Qc(oA=YJYWM~;XPFZ@bEw_V*s3IcKII}$ zvR_n_>MDK-nNmsa(dMg|*Q`g&W8{xD_9=~i;||95%A?vQ9?4V@|DCp2vnG~2MqY;oXfvPY6la)0sQkdITowRsk@oJEdQzP*^eVt}$PFZ=v}7s4MEd5zjxJ>@KHB(Ofr z)qHPya&9F15_Rk)MPpiaq56_S@j2U`!b26z}ad_vYQ(9Rz61Xu39UMct1$Y-x4tk5sx8KahA z_6}2<(WR{0)4RRcZ{#Q@+br)1{Et-rhy@yNaAO+$HMoBX0*dw857y>yze87 zoxQo3%+Tl3-c4BUA2f&_LC)%|oR|MJXEk{}p+)bRXd$Qa?ng`Z!HF$d{7=qoER%05 z;M0Wdj)LrUS=`aA!6x(G@WeE9`g!zmJ#i+Q`~8n*DBlOQWFG;0 z2VJrjtVwV676X5Pw&lKh1#5(`wL!1ZLgzeW{SGa6=)VO2<(o?PeZC)`i#=NUD!xgW z?~*pzoxHOOjp=2&FD-LP?lI^I?VPPJxN*VNM>&5nsPIGu-+B9Te=(Qk+XtW9fp58> z!1{11`@ZKl*?s5V!#bJ%dwmx3P<@^LeVsPY73LCsV1#o-@bsCyA7PiiaoEIukhI;w z{#50!N_z~_KgQ6#l74->s9f12_hm-tQVYV&0Yk=`|7t_z@pp;j9N(??<)b7M73LxQ zKV)8b2~60YKaqXi31Pc+B9pu}WY72HJ0KOTf1~!HsK}kPdjaqg7v37kh~!NsPxifL zSj@LP-+7sFfv!mR={PdVSM_`t`IPVa-U4Z>;Nz!LazOyp7@Q;SN zs9oeJtKAa6Z*tqS{oW_0t1#b+iHf~t9+qSooNa03uowODfas4K`7Q!&r1@5N+6l`% zkbCa(u9ERxc$j8gkmSD9Sh>gM6#f9u^J9DcxXhn_AuacoMb;zg7S6g$=Q4b!s~3I5 zc|gDCvj5iR0K>fvi+!FSv48hN^7?Y<(c}ug6N2ucJi?xC7(czq-tEPcD{a{i=KDMs z*=n~JHrsT>62B~~n`yHtxfyt;a36h3TG&X&>+Sm=@$zZTVZe9a@7Y)9tR})*K<<_+ zXpy_xwtlc^j5*gGqJLesGyc^JbtTV-Uj4XR$@8I*-KBWUn0+PVcx9FIQO+Ra=ejoY zUA}kKWp?S@WhI}=;4IQ%UW$)mWZA>YVgo2&L%C90eP2t;_A(aYucYDY3dKEW>O5uh z&ZWct_%QF&HZ*Gt>7wibIDRvS-@F<)nGyq$LDxKC$ZFQ}9=;k*d=ttmw#9V%9& z2MU+b-nnPre84nf4OJ)puUi^_pntu z3^&(GAMgBwQJV=bNoPUb4QoH2rq!;i5xSDR0ic`)DMn@w{M?T zuNIy%UoF_!9~s9dhkspYO|ySuFVn;OcKLE8`#*_;8?^7o@IHaub8g6Ck8<4qpk6fH z1+E+2#;AHj=C+(Q$yp1d_M^p zsOH|pU3`15cDC$$v}*(ZyZOq9?zVn8(w*F>4OQiiMb8gguNA^6r|@&LI8tk{hiG&5 z#&;c?(G63kWOb+c%aKkWe!QHs#E0$I@DFZuU$u%O(bN+CAZ^W??)tK)>`hVj731TO z!*j7YCiK?w&Et@oRJe=uqy#cPEvwtq1kXraRjfU~hCZh`#@*x%CtoYfZxuZA-98`3 ze0O3QM-y~`V^V-4GE;C=mvCHF#&L@q0Z$CxW~rZ`?Xℑ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 diff --git a/extra_lib/lib/android/armeabi-v7a/libpng.so b/extra_lib/lib/android/armeabi-v7a/libpng.so deleted file mode 100755 index fcfdc89b324643ad6ba271bf1f3d1d525d293cb2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 101916 zcmbUK3tUuH_dkxGGj|XLycBq;0lW+sl|d@hOhg>-c`q${01<^m83C_(8Pm$r3NQ5_ zT3K3;l_jIuqm@BvrDZi^&__$3tj8P`FN2|Tl-uvU_Sxsmi1zvXzyITF&)#e8wbx#I z?X}mwoPBWlkWn^K6b0qc3KoH&+;l-mMqIo`6f}aMPZrFA9(mzH80Fh@mxzKAwgw9V z1s&)q__+bVV|q?xK~F%KoX>Fo1Rh}(DxhHC`AEuTc>ZC)6eyqgkNdNDI-=ViCEo}E zUPpKc6eh&|5K;rE2Lt{S@H)gH2vG?C19&aMbxyYlxU~q?fJ+hU5NrrT0DBS6Aj|?h z8X*i}6~bG2yKy0M)(2gz~^TG&jY_3@z)4H zB7A|60$e0wdeV^|k9Y=xhVTgVJcFAlMOBAPhmE=NZJY2ul%`A-sxE2z&~{Kai&9F2wgCgmX9t@nbyw z0OH3H?4a{7YRCb&4B=J48xhm<6psfXegXkQQg|8o^@yh-eg&Zffm}fy;$p<~WFme6 zVG;s{ykJH6OU`1yC4f61tVS4$&;aZaghfaBAPz#fDucpHNDo6;i7*@CSKvn@{Dkl{;Kc}O2>-u4 z6km<2o;Mkfah5dcSLB% zVI{IDiT{T<_&9{A2*C(r5dQ9Y7#Tqb_p~6G9sqX>NGr(#o*1qmTEvfV zxL*rAfvpiHBRow2f9^)C<>`eywjzETA(X>8Jf>(MLMskG$>Vj1SMhXUv;@E|gjpOp zh{ub0OwpSNZ35sgk^VQrGaQ$WIEkkNqn7}z2tdpWNFP9YWB~jWPk$ePqhuMvhX@l0 zXz_du_*sNXj{g_pEeI14?n6jKcnx72g7Tyx@j1eJ1#yRX2XGl2e>oukJWp@n@oB`- z2)`kWLwEv#o?{3;gdPOo$(AGacM?)VIrIkNFrNOD#}q9`s0o1AAiWbI7hyZXR)l5* zdg>7z2z?PAL@>i|EkGRjm^rYC$7c~&AiTig?ue^+nxdr$8xh)p*IvXI5PBnALUi8rp79*w4-iHISIcoL5f4LX6;Qqp;0FO`BXmZHLx=*d31J_?F9=59lxI59V-cJ{ z^hNw%#N!a(gU}x7_K1@Z=oyTVNeMiUa@-WeGZ3;6dLZN?%t4?h8DTSmL;#*t;2j7F zJbxgMLlK{oNpAb4wKhFk!N}q>rE(!HJjdjASi`{>$oIEJex8nzu%EX0CBL!`<;iDK zej5$u%c*|&XRy*^P?~uDQW)l@60Ea8NAz!X#QZ%#RQV4FVfEv({ZjtVP|({ZQHbE> zhbhj9!B{UFKtDwumqhN^4BqcKVRc0iumNB#2b z1b#pILy<2B?cWc>Bs`M`@u0Et{(<1-Xn*VpjDOC*1N8F21bOX4`M(3cG!g4`UcL_P zs}5*ieYhZek3|seRfs+l?LB`@UPlu=8cO^9dwESw@Mg&SJ>>1m`MrTjU_S5@` zVvUDIWi{S4em-0~mMRbz) zc7zKPYMVcTKA*wHrc^7-KO1m2EHYOkpUVFZ{+qxbVlucefFGJJtVg*en?$z13deY% zb|??k_b=!x5BlniH1T^yhw%`g-}hiBZfrD^{1;$&tucNS_$9J8=qr<#KLkPE4bay} z=zDavymlu3gD`|IJ?0;86VTqZkdGc}@4K*X5%#Uv=VzqfLO=ahkX{=u`#j=Ti1u4y zKdX5CgJ6%mM()&R>f9rz4Nbe*;0E!1y1=;W41UfzDCnj|js42;)V8Uxgia15E27Dlfu*UkT86 z3i>M{pugInJzsPaRr}iw`}-4B`{&Iwbf*?RgRW8vBaE zXGl~1eIU;(56g2X!G|HwR}=l?yDR$d)RXcakn;6+!{1uq?@$lH;V`nuZSe0XNAP}( z*Fn&SVjrhLzw~ZV*vIK_puRfzZ;<1xq_r>*{qX_pxsuEC3feabo4KPL-i30?L-HTR z&ocr3{u{J!bb$W8ggwriEbsqGo;}FFFCf1X^321Au@1Z_zY_Z1fz3L}8xF6UgaNYX zMR}h@`ENtNLGbsaMuN3y@0)K5!f6gaii~dK{PuVS`QzYk6njf=Vc-9NJ+yvao|lMU zchuiGpudMeF{dD}h4b%+@$h1ZsKWiBpPnfqJA0t=|At|mN2lMz>FY55Casds3@Cp) z_}c^8XF&b?VSkFfuYkV#V*Doa^4rk#J<3D<8IJk~O!E8lToe2Q^bIzw{QD5}i9)}94#xPr z?+1B(L;NnHeGLKaYmM?zD36Ghk3#=!8si^-Z=+JDM4yHBRb#L#`W*-QrRYzk zeRCn7@{m4ggLW;$Z%?$QQXa~`fqv-#eRW5g_;*43+XvWB7uZKN7Hh+J{V)}w=Wu!L zO7xMi{{e$U!3H}Z_$AoSq?>~9E$3H){6RRd=*r<%;I9kd9}mHgJT0I7QTaIVIRSf8 z^nC(C?uT;rq4^rzn+ z-2-GK`h%81L~n<``tvyEcMj)(|HJ_P=`Hjf1Ab9w{q{Kl^yvZgz0e;+vaput{rw!u zpC9kH?{TR38T9`|USBoza{&Gi&0zAp5B9;xT%3jqolS53^%%DVQ$BVH~ZyiGDNe?;7k6 z&1Ud_VK0ktIJb(!yHMY2XpDu!=fM9OHWx~Jwn4uG{_^{mN1>m$zrcD9dLjPrAnpQr z;Wik26ZUjpq<=m?2mO2jf2Hs%f*`S{{q5C2{|y22!}H)jXu5yA=b^kClc2f*G*+xhvWi`?$ZoZD22R;oP=z`d83@k%c%nHSJ+R%1X+F0w1dCL`mzLhME?W)uksN6W$1HhfIf$!eWwD(*XNM0b%6fwL3uaU zOF%PzbD-~@|M0I5H^6@9)ye0#RNrrqZz<;Mv7CMv^$+Ob!dUrTu-`Y~534u~)u|83 zhpmtL5S#+}Vgvf?bLi`LvnZV9?H!NyC=aRTdGtqdK>z;*!9NJFmnU23qY?a^0qeoR z(D(Ca{QmGWjF-7Hg$^Ax-5MpuVWyB746>a5m)q z{j|S-o<#Z4@Sh6*5orHx%x}58d^Y;WjYITGF5e#Lb8Ucq_W|9abpLv%J@P{W^qq!I z2!9v*OY}R{e+}cI!|OOB0v*Ba;s5sD@b7p23;T(@h_fhO-#^g)O#$ZvTG(@5v)^B> z2c7az`)47%79fum<#QsjU*`O_qkZ96-yZ`V)&C&u!HV&>ox{D+-dAu41sBEg7a_k9 z`7k>Mr=b3IKKKhoz83uv3;!R9!8e`LFVLa?$NSeCUqc_4Futbod>8a^C_tYORfrt! zUr)usKJGgO`FMTdu&)=Nk>8P!{JCh)E9hT(4?^$+^zWoUU~lMGf=7V=g8}_<8TF2~ z!GH7o?@<0ow8+jwiGB@~ctY}@AB3U3BK(Jo%j-b@eE+N8{!gRcSlCZjp8p@nw+Z%q z4~G|^{^t$c#z)YjetZ26^{s$Cpxapf6v%e~=K*#OPlx@~zU<$B zT*msR3;G9YX7mfue~p-LU*+&*^xvPzN5t|wp#HZ7k-e9r`lC_*B&_$8`m$h;mr%bl ze%8RBp2y*ta(?q3^wxKbe?NEw^1cgtsGae@3-m(*)~lf~oEuB=t`h=MeGcd&KR_P` zQSl(y_herFN3B z?ab@nKVDzIQ*zW=MdlKz=0{x@N(*^eJ#G!i_w+{{YznF{lHs`+_ zaX8v%;r!;Jz7wcVIj{60|6;&;=Qp&!+ZM>n`Rzt01)=`#yu1tLe{YNPI1YaTd0S&V zpxI2`$3cG{%FE>CpN)k5V1Bgo{FSiJAgnLCa<~h|-;2-t=NCG6c0cUj&&0ugm51zQ z1C5V>@%Ik$Z}jy0^YJKu9_5wx+NltKDA_v{ zi_oySKjKaX&z}!@zYkb{y#f7Op&v77iC-rCrhcNo{y`|09AN*y!~SCf{LjCk&nKYI zRlNLV)OTX0{9c6kb%nhv=lx+gFN#C^kH9_@{hh)1RUVQz0s4;YD+*_jrt+I%uS;P} zW)A;`Sa0*scMizo#(0kA`5Phs6OccZ!!w|-9Q2Q(&jqL?svhrUc)kmIoQV06>ZbjJ z4*c}shiX~cW|9?s8{@%c35IRbey zK}+qMi~9DWzRn!p34JOL@mqm{U2gjQR}bLkru*lc8rb6p0p|^w=>Pq@v44kNiT@ec zhw>1=CiLfuG30CH{C;TPiT}v&kBELM`sW(@M`^zi`2*%*f6eVju+N#9F*Bz)Bd;LC zUR)?-WMt)JP0P!eH)lcKoaq_ac6)}sFp*K^&B-G&wM2G-eNkcF%-muXlb<(@*v-!= zR8hG(S<`b0{{~f*S1^ZBW@TsR6crH_p)%&on>~&5m_2)8M$tUGy`WI8=KkbqkiuSA zFnwOOjLFW;$)1&wJ#75wj2U?gbEY$f3$hC5Q}L%797#f3RpvxU4lGxD>FbH)>rW#?winVz4MkyQk3 z&6-oNV2&_5XLj~%JIf?al+MT~D$XJSb7y7D$jZyV1u=78R-r7gEENj*dmwLm-h9St zaaMkQK{iXy_9wFo=0IP?8N~$|g)_3P)}%f{(HwhW-kjnYaw%#uOWl&lAayV_+Eb9h zI<*f8uC!`;4%%C=2x1qiDn|Q@a{@7}ET_Dc8G{raj4XhWf|pSlNsKsK=H8N)qi-e6 z%Fmuhosf}Tm@Odmky*$cML4p*7G_9FCA8Y*!_x;%lrcjdPG^a+qb3eviD@H;${4aI zhM75N^dOeV9X>%Wl{a|sScb`)I9WD?0-H@X82jKsqgYmvlCTe(B4-t)4VQ}-p)#3f z{LnO(C?3N36b~OQi%~rO;R!5ju~LOS3*!Tp#D@U`^XACyWx%2qnTu}8ot;%Qi!o%h z(~ImGDuzs)4T6jr@?a!yAS1{jkmiU4{g7wpczJvlF>|*s5@v9#n_-_H-AgoLb!wgBtRYNj7%An1Qh2il!r3|l%dD~ zWjGSReLWmHQhxOm&YVWBcxGW1xlSm`pEa)t<{(?UGNOo4pcze@H)95fit-lw)tgl` zI|DP$Og|$9qmEr-Lo+0i-G+qOGpo-i&V{w+7UcT}7L`#3*B!E%z-(Z_O)OL`fT88F zbqii~tjr*DAhq9-U}9nG3UVXzBm+%g!e&fqy0k9}K+sHup*kaLUcTHF@_ctE6!{g# zB-=kF+UFJJ(#()iG%HV@g&78|FD@v|$&i)I3Nd_c*8ChyfHUMJjUSaWN7j@d16`?F zz}jOb8~rG(bSE`D5RVycx}pWj3xpY0c$@rNzpEanqcyiQd;5|7gZ_LZR8R7B88Qbo1@IueiR$qa$WLbl+Ao|vS!PIbJeQDM1hsn z2ZsaulA}~-#bMQna#&qda9DN1O1|P$Ijs6sC0|*Ka9CY;a9H*599F$Aht<^$hgFBH zX;F!1yT4 zVl%U!m7g;;UL8U52v#;dN)7Vl!Jv6|Xf43uF{C;;{f>~~Rkz3>Rox7NvtiOu^*Iae z*afLzp1dcST`)&>szg$hn>R!D<_ubp#WzSyc(#Sf%D3mrdlI5xQz-3fW=>Q2%B#;? z>Fn566$NsWiLCegOCdMo)y)sw7+F#{h7-40&a|UN-UReOc;@D zKJXC`oL0Bwhi}hkXg;mU*1;5t*^awq*6gg=v;9i2XXWPV7NWQ#b5y-W*c!t=rMr1#(xjY=6H3%+4*4Td!Cy^-Ms0 z3Yr^;Ul1jOW<6sBGb z$WeRt4h(1x%gUxXRcW)VTm@209c{a1r~p=n4W-$}E$x(Q$1_~0IrxD7U9%Mf&g_@Pk=hTupDJoPk=fx5unam z1h6Sh={h=6AsY^aRTZoI3@WD1lmyV;gl%9l;OqQ59m-N?Tm@*+m+A~n`Reqo04<2s z>7Me{MW_adb#8b9x)=urvOMgxQ&wRLm%wEjXG90#vbc;5 ze5RbCn#!%dUd~k4WdT*+zQ|K)16O%65`xJ(;WTvG6~K#4Iel6pWS^{Xy>-DNW4V3F zgnX$In8P^UVv)spSb-M{GiOsGph9J-ESFZ-#4_mL63OszWwRrL>Nb;u%4v%X(x}Xs zmV-TGj{m$y&Qi7qGNk%Q8C3nN4644F7gY{>WKi|+JXhH&@m%FtfafY3B^gxrNiwKT zI5MbCMlz_*S~954XfmkIc05;^)nrhe5qPfhN<*H~S!d7`uCB0E+q`}GC3CoK{lzxa zYy#(J=?oDt!TSl68J_KNXXPwfP{3ba$gJi0<5sJXam+FDkvLv`eG*uTZJYvZi@Gjg za+FD_dv8O^12bnj+dA<&XeFPNA>chgcCVrWii?V;XUE5LU^b5z^LTnbB{Hx|%$tt4 zP3(|efv7ndZ2zfb73nTR_iy%Q z;r&0wlWl%rT>5|%u_Ms+crPMy$K2#jGFx@^>s3^l9j!@Dz-1}A1{Q}bWBb|0#ClLJ@Z*wBW z_K)--At8?4&+iuM#p`0dzE-H$h3V^cbwbTusUPpw)r6(nE(odZGb1wXpV^1@JntRz zOu50f+P2Qt+1BPYqwSRR;MP;puyVmNz$L^Tt-zmfh?#J~U8HeOx}eiMP@OzH(I)i3 z-AeC^jYqD1**EB#WzpdwBTjyG?aMyeYnGxdX#-A%m3_&fvLU@seus2;8ReCwMV&lU z6D)jH(@NC7r+L5G_pj!#&EaK}JI%6%cM{)g_Px<8Zq}BSrNz2ZZ2Iy8=e#e6ZJux; zSbMN4yzKD{8cju&*yEt5y(+`V#-BamDwN)M*b}Nk0~$Z^gs9N{jURY~%^L7_yG<%K zzVTbnY3Q25#|R||GZ6M6gza_Jin^2vTsnz0Rit}G-GlqZID<k%r5Cv-g2^oGvX+IE+%6#7lrI>w8S?PCRRl>-<0yuUcA zq^>dPS5spuuZC*hOG~K0pDT%eEp1~(J6oDp)C%#b-kYGYs5HAd&Fi<&9CZjiE3f_p zo|RXBag4dXtmupD%|)-J30IvCQ*Cq7zFM6&qC$)j<2IsKwcwoX+*fO2xP7%@p&=Yg z^|>5k@Aka!|EDO&t>=)T_u-1cOs2=(C>vVEXtXSsaon%rl)By~PWgmuU#&6JaPraN zX4@FA7(|*YXb9RY#v4ve2*Bku1aB7NGu>#Z^@L7WT_t&wNS0NOPilqG`&ovH_c7x5m{K$u^_;USJmX?T#Qjx@AC-7lcd_=e4%PwyeE z74wybx*J1isWq@gkH<*y6=h);9_d%;<4}=G!4T% z-2?J&*1zhB34pKG3q32Y_uO@F0PbA9(5vEl_g$R=aQ~_A;)w`=f39yl+W|1O&{aRr z(=H(IaD5Nh+Hu&LgpdHgKz?E@LNegXxOa3N;Z@vsw*hX8xI02Ggx$d31>AU~?R&{a zElyLc?qs(Mf6iMaT^wgWpkbEYv*DU20d!$|%}(K3nZ4OJ>QdN&0$i7?_h6K0F-l@+ zl#p%M_qMhj-0zZ3PZN5zKUI8>OFENesCm|)t68P{x>j%K9QjV9a9aPM#TI4LMK}AR zFGV;%O1thB%=QE3MGYSB-VUQWjBaIHl1`pU+?6%O6c?1MT^9~Xv`3yhrxij@n4*pG zt&Y1ROtGsg4%V79-iR9!&Ax_<+S5W@t(&}I_7rVdr`)nM(XB7{9%%M`esLJ)%@X+B zr*)zbY!jlw_BQ*DG(&m;(woB$V4MzWZPVFYQo`JDSZZ_PUAAVQ_u`JUke`OuIog?R zhol6nzTQwPdI#Jo*?RHpmO6xPMA z7T2LzYjOcA4%$o_lQ@x)#;Pn!}aFB5{JPXrfrARS4f$W>csg6uc(r$61PzecUx>Hrik9Y z5@9U1Un4i=iryrG%tFjh<0$^0$WJq?rQ~+8PK!u2Udr>SPO(PFC*jzz8muMqJ1Eb+HUA?DLeDr4}PG#w$+4hJM3PpNf~E)}?L=y55m z)|s6v#J4*o^w@6`PZMUG)FaGd6TF^gK#7B;9wp)f*}0#lc~4R<<^0kt#2i8%@h2S! z&;e;uSFvaCA>d4|>w|4|t86x}*`U2(FaVcH{;5jZ%F2HN&O0g9L-2ltba~hzX{-H^ zwA22(bEC93akEpFrCgQeO`_tm5XGlyS0GI}KxhIGUc8aSl53S zY=u!dz~L}UJ;mq`B_5Iv`^!wAGSp`S>jv$L@kHfWFrKQK-pUnXVzRb99StqA)`E(3 z_na%!^Lqj5Vj{TxcP8m}TW*XuRlAL8y(9RH+V!jF_k5yBBbw=yAExBnemPqu9ZwYE z?{c+*?)%%!(d1*AeXlnWUVPxwv^un~ib)*JB(8$Q$02b{od9VsosF3##0Q`1Z=-T! zV28~L$-a4`knkIoez;g|w@dbTL@xdEW%bm`pn> zZ^v5I)Xs$*l1XS5ODs;Mme-oaQsNl4w?sN=)!8;1T35r5TD5hlMSHHLF4tpRxWr~( z#|!W>V%P!7i_qV!`V0Pswcjk-G^jn8=UcEIHicJ8LR6)sv(ow)bz_~Jf;hn%QFc)Rv-W8Yp_^>i1z z>wA}0*u0`a=+)KLD@gAR)r*p@L`?2188SOd`mt>$iOH=IfOUw;y7*t*WzK#vt$;DJ z-;l^~o7t9%d288uA!d~{Fp)+fl{n`Ko+P0?7vMj=dy_^bjef3tNqVp?drGHV{RY9( z*+sIqt4r2naJ=GjLz$NwxjlbazP4al! z0Uz!bqp%v^HFl~r(KXd#Hp8@-{UzJvD4G+ z>v~?OST$6hH?e&cBG9%FgwOHqjdyS8sL+T1i8ktO!M1H^Wrq#0BwGRMyRX?|%R~HB z^R_7+So?JDyV*Qk*nACqrE@~XR-4S%yVo|xHgZk*@^qc8jjeuir`(_oW2v8`+Co>I zupShw?VM(t)mA#R5A<-a>%q}Uwg-nVr54{uKIM;d!RA=R=JP^AyvuA8qndps=SY_W zTN(P3&GF8ogP9J+K1-+k6(LI9LOKp7Nl1rVc$r_$?emB+wdh9;@5i><4%O{yn;$Y& z=sz&I#Ay8o??#kQ6_c<=k;D+m9lQhA(QDdhd)c&7hlG`$>k%tFlevya_j920o1!SZ zhw#7YenFG0`w6${egxBfKj^;e5Lx#^3f8`6Ar@<2jA_jI&egdZoKMhRvSps&Je+$c zyvga7Br4H@m*6zrkzQ~P`y0Gz*`4@<{%`Py{|0YberGS zO%H6Pq*;9T<&t2?L{AGnlU%>(N&b8$|FAiKFaPlX zy48O}mjZsj>UE4?tNq}1nrY)Uxry!?RX@5B` zq@A3PSGh!3g0~2kRM+a8_}`bm zS^V@R;i-5)Q4CrMXdiZYde^#3(G0U1n9n#ShGEtM(;FqaGUz!#y#RG%(6fMg0_x77 zX8cOB@fOKY(7IOn;Ev3)@cbUiTA&Glbx5ao8#IVeEh;>mNu?iGIwJx`0vL2R% zM3Ru85bIGucY`L(+CTFy#Op>4l35jFsgiN&*lPmEfe=VBVv|9vd zqw+5yk(Fe=X`j=pm-}g>OUleWn!f^)-4@2$7Q;uqvq($b&|{6k;#;ZGp?57 zCD9p&a#e}#Kz*F-&)nc?Nh8~!;}#qIt{~OlQYLd)fXw2S!gno``~wPA`W7torz>)ZtN2J zGbz0!SRj!2Qaou~>4z1=@6 zxSldD`O}cx_L(DcJ7%_8)+cl1vUuhJHLf+w6#u7jeYcD(Gt}8?dH>AO%R+KT9-)*_Giu-3!Aaw7JS3FFMRA$5*+bjn5hK*Tuzqdj74NOq`MXNzzOQE`wWv&M`X zG#1LCmYFKB*PP$R{Q+8MMeBA9m1&ch#AX|{)qX&iG4j7@JsoWDnY6^>50fgQt^1Q z(%oq(6?dUTe%mBl3h9rP`JmIj$j!Xmsw7ISLb?2;*HJEi+BY7Ofp*?>e!0nTw=D&y z=Ly!1y2%xNZMrHmwE0*wao1hDJYR@;6=$fcq{Kdlq?97`vR3Gw=sqMR7gb3oapHcz zOLuML0<*0z_FIBw@UKDcjo`f5kW_89#oGGW#F!xOP@Fs@<3tp@;3gpoW!oL~2-hyp zZSqMCT1zE%`^4!pw|rua_dGW~_VmTRx!Je12^?^enyfY3jCc=l$b;Gni8Jx-)O5^4 zJG~}f75IGZQY`nm8j(7TgKyL3}Hu-9%nJIEZF$=|Ao&k&S&u7^3kb$?BLV$yfg+j zXLU&>Q97I0CuQ`8v`WBB(=|VpNdL9A+JE4j^s-ATwF=QLX$MX@wnvG5nth)({w94^ zvQavd^_#TMfl!XH^}f^EUTH3UuOTjDFYO8Oq3gR>fx^)1Z~*RnNi)MD}-FcVawv5w;>E z;wX42gK5sR~JEZTd!%qBa($s6O;v7@d zT{}JZkaQ?2t#g&M!-_vW-$y7h+YH{(u)9(#aN*eHa@!`jRJJ-%T7=NYsdHf~BAB0YVMF0=t1&`-xBx^C_ zWGoS9;(G6o&A)g^9%Irm(?@8rLiZD+3u%`52BTIb=WCYJ+(bDBoE+gy4)T4>&)X5sx6D}Nu!@HV6UPm`&q7o+ZsRTD4Zn{CPSmy5s*C^N zxEtlQth^ZCT9JTpSj9LT0Ea7_!>ewgn-E29o8KtjNAZVEx}IxXGXGlFv)~mdLpI~E z1vGh_=86md83Lf@B>x+fL(GA+-#s$_hI-X z54HPM)I^#bc-_Ryo?|poYT04D>`8|2!0-dm2DyFi23eCqkYA^2GLG@?fjP{rtPA3l zcVhDUUm^Yp^0ec0*UIL>`(_Ef9)zzIuQdK3TTc6s$k&TC>6FAq8V&ma25q>(| ziq=~XNvT#%l*QKQ>vu)87;I_q0jW`xQiaLRj3Ou z&r#E0oXFD*FZBA-Z9hP@z{dYF_W9K$_W2gRx7iodbk-Bed~K6&Gsc#`%vrp7UzFbD z>)y15y?>dz8XkmO{&=(4Pq6+=?5&@)&tq*Hi&Lox6g+eTQ%s;W3^j zf4-`%&X$MSG=IEHvTL46GrEMB3sb+GDE3*Cb`$o#sx9h>hCfPrDdP3CE+;hC9EHaQ zzmS&vli`|UKFuIil6`!$Z(aQ%l&8HD%0$OPb8lUyxdv|?>xsi5Y4x=APUIzlUPJSA zWkjQ|t@z}=*a2=W{@Y4p?OIC-%xO&?a_l8%mhpvr}nf-yezYN{(B7XAC8f>c9Pgzh^q(Pmgt}wjkqSw;r+q!kA+h@3%ydk zM;s$N!*^K^)&%K~)M&LIM4&&h_DdNjZh&Wk@38|)kHUYv<2~enhg*D~Z4b`k$70m| zaZ$85Y;+TaJd)8SVE;$&k(+l5y^~!+&-u`roz25XIzAuS?0fM>5=M*>CBMBG%hrt} zZcs_8V_zid4If}T*0Is|8Qx;sQFFTWr;gVnjFO>zU#%Ew2Dg0BreF<`N@d_V)2%}9 zeQuJ)dy&R-%3QN;IMzqolbU^HA~_0Jo}c!=^BnbIospm+b<3x`8%h8tmQ zE`9KZG1Fihk|~zGAF(o1*p!6ztJxOhO|B=oNx!ucjmc);B}wQ#u&&20GaqlYH_h;v zthHsL^}CLnaC4!<4RN#FlKgPJtrD6|w^I8?T@=eKkh9Teqn2h7UM#!b@#6?R+Pc~! zpiXK7Nw#0AJ3G>5W|A-ClCQ<;y3F3_n}3n|smzmzJBMtq4ojdtOANE7gHGBT+{u>S zz^J>EEuDppkS(QP{51O}f@=G;avR>xILmDjk~mO^XI2D{_*X>fkdz8jt!N6vTIfxw zFWs!@qqk`@OB1CG-gg?{L$hpkj`{F-;B9^;1^HNEhru3eEc^Qy(<^Ls!Xt97=|0LOANyI& zIrz^d(XHc*uHU4(_HO0=$@?YMfj615k7lEJ$$+~Jxt^M4w5vz7BJi>1dyU|qb)M>FYSpxsO)0Jct zYJbBBUXo<<>I`IgmMj`WN39w*vo!nqO7i+8_3C=i-FXGG+T*XgE3`>^7>s*eG`o;) zlF$R)ny-vhG|`r6f@n01W;#ZXU!N~>eP+VDTC9%*@Vx&MagDR(wE_iS0!-3Zy;G8_H*5&hFr4A7#AVXZN6;_w3rvv7;Er4xTqToX+3~&+BRp|F~e^e`^h=KcsdWaUX-) zz2odgm3G)|wBK^tIq(G*>-w`VsI*D9(SF2f{SeKl2sI;ALqkWyz+SquRady5+ zYq*VeHK(Qd+F~7hHeaRno^RQ7<*`^l{b zX!6K^-}w;IqmaIcI1KS!2+;@8Cq!bXJ85Vj)-SgYY$BKuqYhXI~JXh5h!kk7d; zj-!>3&h}NU$q;IL9c#6FZ2DTWxF~{FYY$+rcF}5nAQp2^iVe3Itx52WRrPkKwx|Ah z(!D8|T^fBy>+So4*;r`wea_CtsFX4O#tC^Pc+Df<>}&MxYQExm2ttHW*gF}!l8s6F zcpc6XwBF#>VeRfR3OJ=)n?&cmvGw&hVcpp*;n#^flelMh^D2H1-n@d}w1$gVkJ70r z&W%Ofr^ES>fK%^5Ui@E^PWu7*6nYIt#aj5=>p1tPd63p~1pC~VJakWda$9!ZK3He_ zqP&AG$l2(-+StWOw2i(?D4UOURFiKv#!DDZ=$d>VAVudTO}-sS4P&@%NbSVBy2>zzw|#>ve~uswAQIT?g(?jqhXx6fM-2 z!|NxurJG#@AHi%CF-?s58vWGnrs2BKtMw^5Ng$eWQnxUiyWB^6m%VA%;HMK=J&&NC zen@?2LAA@30KXpS_^&BHI{QMqYX z2GPoWCA5h?!3q!lrz+a7(dF0Zq+=MX&qaAje*G@LHWqmwvAi!?xuLKpI&UCriD|y0*WJ`Fmw1t!2NL_QF@u=@s2rxyHB)_eIBR#nJ(Bl z+pj)*qiW=D(nPFtCT`PiVCg+N#Cn9M(na>G*~-i>%yx#^;`rxCrT#4p^S)z)idoMvyB#Ge<^_gvI@YQf z2g8&)o>wso8RlP(XH?7_hIz;Fw2GO*FmF4SshFt@v)%EOikZkT+Z+p2%m{{g%TcUi z(irAVhh4>_Fw9oRY!#EpFmE{WR805FDf^Wk_=C-r!C1x0J<^@Q8jsv(n^~WU=(7tr z<)HQXG&TobJ*)J`4{Q#V+Ebm|Abj0(Ynca z7dxpp#J6Rq^d;i!;$vdIxJ)$Sf2D&5w*HFU$MzLC^RtRL!*~NJi**WiEGDGnvr&2P zAzb|uH3Xh({w7&g!mls-P3pRhc7b#nAf?|-Z+lvd8U|mo9;XvMT`7=b6nrwhcO3^W zvIknnsX;t>(-g$#Fh?E5iEXNPlSAG^-qTF)u$DK)!h0BKA0(!L+b0(VOAS2HAn;fR z9!ImzV8@VdjfV$Hv9`nSQEQCzUwrN1V128cu90SxQ&ifAQ9D-Q&B;c*Il-M_q`yVl zV_k(eCvt07;mygD{LKlyF@Y|k!WIgaS&+8WO0&|AaIp{0uwY}}q{oapXjw{1#s2P} z&{Cq6zMo03KCaQgFY3IL>ZwOMK@*AAQe$S7wk#UARI$g8)_e60pJEo#p=DDT+*nWh z=qA|ykLmP32WMD^`UV7oS;H+ERXB%y@f5s8?;^xm`^)aqy9KXl$dnyb!^ly1 z!On2hX&0>;Z}0j{z}vC29C+zZu50?kgbwJy_p zr`MlnG@Fb%^v-I$-5Gd&3!^*5wAuzVVPULc$ystF=EUg{)wNx@ru&l5h#y5w8sm-a;PND0gQr9pcI?*O3 zH~TI(?!>n|bl!7#h?jjq1)qWY0P@#w<<3^@Yb&82?juFF#Z~E0_h0x5O$ZHgwXsdY zn@J%Wy>oxF@7qS(kn5~G<=%ABw-o26m~B_51l5W`&Av|>bq{slsg?*rA#DWK;Ja2!IwyEHG}Wb#;z!lE)Fs#q+Z>y;x{Qd*>LT0@o!S% zDunIA2K*)?d?X^3kgQ?9TKrm)b?jG<->%69_G`qiIoZU1gEl0>mrQ9;);MN(l8qNq z_Wuko7m4$x!T3VqYouw#13Slx=UJR@3}&kw8D0ih@Sb-h;@gD=Uvi^h>BmlaNtk^-65(p(G2sUL!)9M80LMfrW8J546_5PDFtI- zn76T-QZP-}uL|C`90nDG6GC9#b{JL6MTWumkSgX6hI!Euq+)(ym`jdrBNfgrhPmL_ zs$vc^%r}lLD&}*Bx$4-YVm@Y=YmQe`%uY_TUd3!@m{X3IR7@E#sot~bMbf9dI^b(ZQqVVqtq*V@Y^Th`IJWHSdmip<|OuRnVT zU%TnBKOdgn&lXf`HVNJi4W^h>+q2klN1>GsK7E5=iF0WaVvhH_HY8Xr2F#LIjv^Oug!RYuDsPXf=|(L6@2=i7RPm%)4e<~^L3-aD!( zLQP+8YOAI{X$ZlZZC|9kW}|f)t=nkLwgrLKZ2$kR)n3AaZ3M#o2-6UL!2gA@8^H_T zw-VnX-i3Wwe^=W&$IMjkGdORjbA{&{XXWmxb&Q#R>@TCes@#}UWi{qjT{Xm3?J@MP zvKt<%vKr=9UDX#df5_*qvm+Qu0Cq`u_VfPe^uV93j2H%zXYDvlzdSzoaq4yns zHoTupx$szn-_LCJ`6MmA{Ge5fF+TW&e7bA^ZLBQ}UhMN`0rz~c>heyh-(xt4InLz$ z@TT2RiBzmj1Bwqou^%_Y;ML!2^mVRByvgK!=;kiW%qDN!n?mp1C~xwvxmm8;g;Iid zN&WlC6TH$*tMOIFvD3}<4CA@^f~PZE9W?k3Ha+bzdF?kBFh0|7u3_;XH=gn2LH_53 zM&F2rCv&Z~^}<*9zMBG(U;gTRO&8> z_d~b%o{ltAggtsD`hw1`29MU|R+cYKH`+?@edt72>Ifm`!^y&FvCrYDWlubvmgyGa zBzLa-^;u!PZ`752*Cs3<#l8xgP-wQ*``)@j=LmVItKRqE73Hh(LsD1V60r2a&C+oR z@FjTb9e#Q8A!%Y(qt806K4nE%ts%6F>u#>WXxtQ_HgByL&5gd82AwS>^IcEa zaQUs2&Proj;M>+nrz&!8+uL$CHi|p?;$23wPurY53!CeGKU^}E(uyUgK`ag0ISD=S$cTfJ7pIej zSMt0^8%&$WK_{pqYEilg+CKvftbP1Jy#F_LxEx?$mpg`3ir*Nxj%=&AP&yHxK>y(Coh3YTq+?5hli z?H?l)yZz(s%#ZjRI0*9*mLY`g#qI5`_-~~)YBo0ezHZW?1>x)ttj@L%XV2}!-@|Vh zc4;BjY-b1`=^<>SKT|K?^J(xoa2kjcPn?L;ty$1p&tj~9)&~DSA?hEGfd9IL-8=4J z%f!08z14(!0`k(`snhZr)n>U-E4D8 z<{(TU4*$OV)#LxZ{PiryrRN@VTw494eJI^we9U;UN{jC@&*QBHJ>G$3o9KCWV6I%h zS16*@1#zHV27R+E*Z+Uz)2@Wce}}RuxACUC&Y=F=+63GhV%!GbE{RYf^Q)91!Xaxr zSzmPTDA7va0RN)vT0LT!Hm2$E%2_I=SEPA$nrZW+mKkHkKj9*rAEZo_}lpv}KWo&}yQO29N(ft*d=Zm^NR3tzm9(biMC%4e^+^ ztW-CsqWaQvix1(;qiU%R_kkJ`hgDGC6#e9isAZb!sAXZXPq`+8F3qcfER=U_ce}dE z(0ePQ12B{Ey|E?^f3d_Ynhm&fNB8v2&T46=#)Q9Tk>PsWC{`O|2c6KyiLMf3zbY{% zdqFkr2Q}#x8gD%~k2PwlvzLo~2%m_X)4|o#mMI(s&QY+$xQ}ZlS7a{_seVQ3YMr)x zQ`&;IHsE95i07My%OjI1(Ym zj2E=0HA$bQ{nsV-PhQx5kReXz)#{E;taFPG3DH+QLeHOFv+lXjMJ_4U{AAGJY=cT_ zPm3t`4KHUzIWeGI2d@~~zCss`uUUKU1qZ5EteL>-)SlKwf136lFRAl}qMQ&{=i)We z`Ql*h;%CZ3Y})v-uGfq%NpOs*Dv^RJ#qREfU(~>Fteb*c3A%UNE)r{=)r$9jSreie zEQKWqF?)r3@y+oj+qaX2xT=allD0(bq3iQLP9rk*?5x#U|9tbnjQ}*5a>fjFZA1ymwH=?wR)f z!7+AC@{l3t@V7aC-8vR)*1h9V_O%)~WC{fZN*0sLq{@p|6`m%Dr{vYKuD6gmThz(R8u@SKm{Pakh zkS4sT^-1?$4@t6{a}+~J5)CAQ6jXcbI`?))@g}FxjAF8e$P|#Bs766v#FQpk*I+J@ zTOEm33og0MaZGk8pr*>f^qn@fnNpe%UEi{_TDOO_G@4QW{=ZP07`2N@_x){j8suJg zf5CD;zb%()y6)Z$IlUk07k~MevAZt!*zWuG4_R#LIm{K-bGnO0x~6Bnn=pd+Jx5s2 zYwmVl{I8DQ(~dD0(nG|AkQ$vP49Xl+a`9?N;q7-bO!)OSF=93EGBO zhggePk64G;fLM>%h}f`HE18y_b|1q1=8&3$AtB%r0v@`UGs4Qk)R^?lgN6G%oeb&K zL6M=6VnUk}18~dhA8C3?Oc49L^u#u#G_$X>^2VCMMkDZ=nCU1R#>$p?Na{W=P}iix zYpfF6pJ>%W+Pfw3D5O1lx1{+V(tht{+;E~RYGTks`RJR3m4({{GvhedBP4w93W{tM z*`^cP`GhkKEuV^Z_w+&E8=a^_kGe$C0gVetigs$2>LqPHWL=_{bhwMJiK#}bqN;T@ z>4xW7%kDn$b*0#tOu{LeZDvhT9YYRnd z2m2EXHIVN${A#9BTFcTpO83`D`l*I~Z>F7hr!CgwJ9S;p1lP*NL%bTjzEIQW*WD}0 zuUtL0`^!ROoc_cyldfJNANj`rY%T&J;Q zpW6QKrv2sq-eZc3a|sDQxV8z8-Sa$ddVCkrdZC!q#eN4J@;)G)k~bl3k|!b9z+hcp z*z;6V|F_aky0=1tZLVy_^}C4Rh2s4kiDv?r0kMYqH$j6k+5}zychWAppT$_jTou}S zvDWr%IkYH*DX=%#g{rvI!Z@4UU6Mlt^WnRd^oC!`2Xh_^ZTgp`sr=0fL$5jTaK z+Oi2!+}3{h7Fk42P%zq z5GF|z2pTS3j-WwYHw*6W0IN=d$^=jXK@3DR2S^0ml{*Qb1jGbEMa1113~o50QGtOB zi4#cDo%{EFJ(Cb!clZDM|K{_l>F(<4I$phcRrTr}tvY|Dqmvz}Wv9)P0>jz7C|KLT zYUt9X2mhRm{CLW1UJK*6DvgPpCk2GF0a22_7aQ%a{ktK`xYD@CnuwDUMSg*#nf?zjuaeD?R3}9G5Q+W=!0p0H{=-YY2O(4SrgD+ zYHfk!X8if~H&Te)uaRi!2)U&rb`v+_vb7H=C~|rJ21W$~NeCvOA2jPWz;2Ti3P%3ahNq9@qb{+KAZB!^Ns$Hh z(Pb;PDXS}yii@n2LLwDoLrs67-Y;C4EH3FQX;X^rYOUN-Z82&x)4^)Vo*-+XJpyV{ zPc3k7ReQ6$)vYS;FWvXWFHZI~+D-F}-&hr>Pf~i&Z7MzB2zVPq0f+K+1P61LT)K>T zQF_xt({9tW8YZyP^hjDvje6Ju{40lC@T2zbN4Zp*rkF~nGTCvOR&_sJtMY}<9{h9c z6UI=jw=pm6Z-#Bgt7%r_709VO@#5w!Cg7)ARQeBxf4g)pQW4eP^t5T0>3^41>)ywB z)$}*R9OF-*r_2b8MN!XcpY-1z*M(Vmf@d{X0BDG?=hUisiD}in%myUY+?cGwtjmsj zGQPKEG@vVER5?HPBfHanR7qCk>VUP8+ zSFS+%sSSTT$_&M7BHPVTu5ojO>)aeVwVQ)?OR8}jFtcV80_KF8O?VE$eJ<`bS|7d&f0mJtcmwN> zdvdCpBanzo_DUwG9K_z~2b|;3{I5#a?Bqu&Q#ryV%-h%r7M+H*)47$W!BJmrIbE;t zoQ;1Lv@F}K85*A=tonQvaZ`_)_Y3bI`^&(jn%CU^2^)#r1niTQ%uvYWO$3K^NXkKTGXW;=lq@HnPGMKKHKuMKjqL#d0V@u$;sGlU(!=spq;DwVAz?Y(+E3t$ z`)!I#SC4S7~wO^I7|epP;PT)GA^t!D5i9QurB8ATAciVM0~ zvTl`n#Q9Z$S8syTqrlEvwon25;YNU(4Q2<+Hc18(UxgXrusCxmL@tk7_Ax5tq3F(| zs*-Xb{ms~v>o$VB+P)D%-H!=7W%XEPQa5esWSr`W9LCvy{JY@R%%dIQ#C8-TxaOhX{sfgKiX z=wU^jrodk7F9Urf_K;?>Y9itfvFLle@qcCDy9TU6{0AT)9#;-m&VPo*M^gAti@##^ zk$C?Z@m5?p|Ap~i^g6joJZfTZ5ngb3%${)rgHeB$pe`n9rkarEH?ptp+Xsx zaROM)PJBQ4j6p}E+>B6OVt5~%4sPLn+eTRCD>1Cu^IqSF6@STO5NY5v*Tj^suV^E+Bj><6K1ka+k>Dl=0*7>Hm zc#TY9wpialZCUkX&gNGpm$&N(VNTT}wKDFo_NzLjL#^Bt#|$P4g|Rp`4kLQ=5q2{0 zCuP*MzObp-yUa~e6e6UkN7gy9W{4g6da8Y$Ji#H%5GQ70oXhzWUIO3k3w4{~6xE6$ zlxIqJo+=Pnp+?o0a%4vSY?1MB$UPSyq#sEV4O66YBQa)%qV}r3#X`DfRG>vgF~g`m z{p6U57M@~;utVfk!Vpk7WuIc=P_Z)Sgc;F_IWsd^pPV_LjobtJ{s6mlcYzu5lqm;P zZ?}n$YQoHPL-!&p)NC0l)ci~J_L9fJvwPoAYZcOY&H>{r;a8AL64MDnFR?RSGdTwW=(# z-mtMqDQLnLR$6K^VK>aSXm{=4702s7UreVe-<8GOXK)J3XwEe`(wGMyXM~Up`N~$Y zu#FkKyVgHzckLquD&aF}FvnJ3kp@4btjnHxvhLQJM8P0ztkbNSbFZI!i>SF%R5xSA zG~BD}G%MP0GSe5<@uFaD^LV3q?T=P)#{*;TS2&x@wu(1u~E{}Ll#nd+%@s*?+undKQfq{%@$q(>uj3@5?8-yuy2$~RoVUCe{0 zGS1a|@q7+(;1??SD}0_JH0Hq*>-Yjq*mq@+jI8-_6~CRW(ggC`uDD>p=k2aNxZ*6N zV!tZ+4Eswqm>_a2hRf-OiaXI3KxK`4)ef9}46ECizPq+?1zD(jy-vM&@x49=xx5g_ zA1JrAiqqPtbl-;TXFij{xfsWR3@(oeonDofxJ{t4-pYd9{B~Rmz@g^-o>$}$oSBvQ z%Frs-v?kSTQpZW5a5%x{C)N1q5g$2M_->)bt_W7wd6AvLHH*99-7L=j8Sq~0g7@M! zoQCxQyobVerW4}dS=l_2zfjeEb)ziR10- zORDkKqXj`|!EkB;(#Wmq*^-*N|NEBgkb9BpJdrS2J|AQrJeNUdRKW1%i|_S4NNs5q zUvRZy47XOiaD?g~ku?r&iR^9#pYzLBj6o}c{zogu{97wB|39{Z@6jJ?Z|{(%LSJZY z!|o%yZ)bPon7SLs7T)WVHSYG&2aNd_;{)fK@-XTAxqF;UIf3)y;|z1;7{fg5(N!w~ zVIi5u@hXht)dkeIlxM40-13<;g6lb!amw~g*LZFg1E@X!WjvGh7T)WdMRk~iI?OGA)lATj+cN#QB8BuQ^LFiTVZuWiV!Opb{ui1_gR{{p z*XV)lO=8P*X)wc%iHm<=O+?S{t{t;xW1VU-m)AKA62mBYOhHl&8`^JLp|HDl>_Hm2 z$~v$7lXdY~fWT&=W^;wbLUf(mnqhTXnW8m|@7B`j8U_mYaorc7W?tG2hTfI1Vm@L} z%a%6maCCIVmDU|#}LmA zb8|$n*_`FY&@S)k*g? zSvW0*&Kjua9EdXi+J+U9rqxaQvcA)eQo6OO zG6%I}N*cR91bf>MT0tTGIz7^}k=wAQS{DDy^vYkQ=gcP|?HwM-4heFYIYWaPl33w^ zXcrd&ne)ldyd^z4_bq7(M_O{nrOF6sH7d*NHH>CdCe}5Yk@z2?3BiBBSH({cWP-~| z*l4wVx*G5Zv?fPPv!ebLftU4jOrg`}7@hZMhl!nb8vGI%96gF)nZ-PDf9f;LWOWr57crP^VliIus z@ZS;P%lEqC1DOP^6}`lg7DYmkHTla}EB4B{2Jyx(bNtaxshAMjdA|jEOZ`5qZrJkO zwLh$Z;4vcs^Nh_kO(5^T5cbgTG->LV+LemK00z->R>YsY}r1E;Q$4aS6T`vc<;YW z_6tZ~I6TltJ}(Ob6d1>+8Eg5k}~T*do|Tp3sswaF{EcEd_gN;+W}YKp3+S5?ebvCqY(;u3aJY zSI=GXT~~U~k6haj3#_YLijm{}VKI62xR?z6T5etP#rYTYxSPvI%{Cn~ge1>4W}E0a zBstr7Po@-v#q1EmWBV;&OXN0|hrSAL=Y0#P*CVOs7=H*Y5mOr>PVdO6d1z0|`?)Bw^YW*K2*7U+7evxp(z6$7C9Do?Aq-*)hZKY5w!xW~jMA7<4yz zTJqibcL|3+O)&XO47k*pgh8LueWsDL%|?8BCz;z#&p4HG(5z?1Nt~Jm?c<#D-q{E0 zz^;5oY)1_^%zWkiZgX;fa2s{4Oj~(zGz`IllYUT*BDB0?Hq#11Mk2eB}w4 zZ4y9FM{NJCue87MRi<$VYA4Ty4cy$WxzKbIy?JU-?aqTA)qQnp(XEQwSC-e`UI)s( z1K6r13=0IlBWQ51LQo*I1a7;DR!4SGdQieZUx_IKKhL}yV{JsFKAFp2n9OhUMO|Zo zZ?E*gw~u<@n<@)9S1=xQ8}odu3| zt?7AI52 zT|46R&XU*U^*pW9Nb_2mS|!Ecq%N+!_q$BkV-|IKKZimy%c>e3iF1*Dju1A2c@p6y z!c$EAF?9elbb8a;v^|2SsYKG0Pj6u)4J4|o<9k`l>(#m$ExI-}xbL3EV|c4;VcMq4 zPb4?|<$5+k9l(w|VyL#}OB&;RXaOlSbbjY;*_%Ghp-?}Q&Q2P(>UzmuS!fZUbi62~dTg!c_mEL~27DXFacq5`+(_a8 z1u-Ew`3d42EOwrZ<7P%*tmYy2lEIAp*s}Q%=3p%+sb(c-LULi& zPWefJE2J7`-H@L+Tp{l;i_Qd9k%!_LN6LCl#G7eJO`R`ZN>kX?gZGsj$80-bJu~88 z7R0_(Dse^S_Zjt6Kb)Gix;HY3U*m+9R*_ZG0$iEG1i+Gicd-;=9xn|*?EFGSt7e6} z-7hhz#xK#`(Fx9yUl^rYB&YE+qjp=8YV^ZV*F&X}qUe`7^RAq^|6e)tuACLfS>?(} zQHaw>ahs$x_j#A

AZRchwhl{j0*>J8rN}0dD4Ct$Ny%(lBGR)H`MvV9C8q(E0<` zh;G?#;1`zGdwNc7Vvl;>*SIeR-(h{+g6VtPJ3IF(7)Hc3-gTvW3XlBixhuZwdWMHS zGV(6PIR*UStS32uNgL>#;GaiSu*-E&P`t%%=X3hyj;Mz03(0m|!b*ONx5VyLOq&Hf zozcQHKPe5486)|IL!NB1zZTMDvz~+vdXi3{Cw?;Izz`FP7`+_BA_kIU(W;22fdSDO zIQN2)=XHq|}A8->&;D zoK3P2#?FEjw5bix9@*?q7z@l=qkM}8*7mCQ-$Yo;&GO&Wg_)d;nZD~35nD}{aIT>O zRwkpwCP)j|2rFMK#W)03s(^!qTz9+-GL7hF&>4{_VfOxRsZglUzDv$KKtb`@%dS?KZrl9WYF!`Vh=8sEzK zaCRSqkB%e)CK<2DrQSIFi&E44g+A5GGO5&MnQM%Dad#U3t;U}yZskvzYgTsEB+slF zr;08~dywX=Nh0=yOjxz$ZH&m3rnk|9tX&&;-xQvJ`<@)K`%q7}Z&Rf^W%;H;_2iQGM;~SY+H(i<$9I4?Ok@I_*Y%6z3XZN3lGs{^U zC7#YM151t7nGEC|T( zr(1+yUD$L=QWd({H9=oXy$c7mtZPx`&y8Q(ka>jPNss|{PhOTum`>0EX5&gYP7nfC zp}r1|xQYBRdCX_SKL9`bm@D0NIo;($@MniR3&+tJxz*f3uKDaFNWqJqNA#pFPYx_MLaLZD_)+J=9%^|J*AaL<;#bW z8^7BF-$45s)U9ui5qs|zJAT|vZv3Y<#rQ2Y<<6eiH13da6E#*Rwy4F)F*@U*O&en- z$Lfq9*Z{MCi~Xa`C)f8~&NN(GPW;mhdj(K)!gXR#iMZ^VDC$tiokb4%aH5HgiQ#?)kN>r_iCO^Q^ zJWk!pJojOV%HDVA=Qs&FvIIFjkNGeq$@JgSa7d#{L5ha0CO_Pn$G|sZ%)`}dNHW#p zv`r(govC)tRW#Kw(-p_+4%&R)_5F<%#-A+I?&UJIe&e7Kp}$@=*^gpmFBU>pRsn%VvWX`{CIft!Y)g_^@>YP}8mRzqhGS1G>BB z!ue)MeL&XjAmFQh+@Fii^#8KIS2f`pgV{G4sny14qguYIjeIyiE)(VZ9r40joY$I9 zLQ35WvtbG5uCwt!THnTLW(j8gv+*~qPiImdyYbJy{C(z2#_wgC8zi@?XKNY`J6q!| zw?=J3d&)7Nh-j0_9Ia~Ax!N(#XY2f1Xu;O`Kgv0^AD~)a^yj1h+5fjO;S}on*OZI9kcOkZjN_Q3 zDmRCtrYa}I$N2yUp8o_m;Ou{A-xFROx8;H|#tHnchZJ}xJQE)}HMSI-qEocao!YSC zuqwjSlz@{o&dk`=0l&-KCh_Iw5}d3RZZu#em5oz#yJkc-c!68mQsRHIy4ke>|H?F% zY=nf+f=ouMF)qkVFy`Ve6aN>Cl@zzKGBaT%B(u=tf0bd!PyJ_qzPc18MjqxPJWR7Q zUx$4EbFS%mDf0U&B=JR zC9{-hn=@aB^#_@%%m7uH65}CLl_{|v$blR0l;lw`Nf*#WYRvj&Ir=HLYoU50lZRbqSH`Ng|xxx|m^&L`r;Z8)wo z6?LjLXX?IK(+_)3_@RUrD12i$88GrW4YOQ|A=?&xgn>eJ@sF~$m^LUDTujpKVjA0w zk~re-u3E(!5xD>=u=%|~a?F7&BrKZ_j0Jp_p09l+-Ra|365sD^wr$BH9YFFksW}FD z=TL3s_jgzaH*~aTFtqa6?P+n6xUG}T$L^ZEFoKf|UD%0=;baYua|H2W?rx0h9c)jJ zfVF6^GxQt_Kalj?M7#<4OX#4$`EM;b$xTIlD?rBk~5;Oe!`BATD-l2AD(ULf*|U&iUr4Ra1bCK$-L7p1`=mI zVv*8}`gU2*X%mZJZz~)Ypw>2;V9(AO4=aR`^z9*7q$T@X=jC3kG*ikvq+}`Rw?m6ew7OU z`c>+8I>ZRHDmx+T@jP&1Nv-P~B=K~<$(JZ>*-k<05cNom~Q$UUM!S<4QPgF?$!Sf(}bl;}h zO*ZhF#nUZh>C4}@S^QAG)8nqVg$baqDL2B)3fLY~oOe&7 zQgy9#2Y=Dp^#Ed~Hh~n}(Xs~2&5cq;+@$0J;`Kr8m$=5aNoO${ji7m`E zL54dgspgutT%*h*?tnUf8zg8xwX<%@{O`)t1`xG!UVtZrBCbyXpO2k=R+Rpj#U-0G&84V!PGxT=;9ih=yTC_Z0H_1J;_Dhhh? z38vsG?6p%3XCwEbAkNNftjTX0rr+R$6uG2BW6%R%s<#7Y-Zrr&1N28dSkiA@SM%cw z@7sTTA*1GpReS6|tjaJQ)~_7U^~44q)^pGd8H6tt+1qhy@TFbn_7xzxspf9_0sGzb ztQvdTe!D$wyQD0-826Q3<=z!zje9Kqe3?dg3?6X!$WlYq^-Ku{c%#UE3h)$Iw6&RZ z`GK+TRNW@+2OW5ZUWH@92jbn%80-Y6s6|WOF>rtrKduq*?i}wcX#(CcG*`K`YTnb@ zRZs#K#oPDlkY`MjVp_BKZ8QHaGbANg^^P(pLjd%`)!9t2dUuGRf~4sX!CzPwzw{a# z^{!!Z)kz^=P*!W9r=Y3lH6`&;7U=!?L)JN9^MHO5?+@6lIcWcJ4WyF;Hg&@UI)eT= zkcj4b#3}P~;ugkVy&fWH0-2nzAp_SeW;8Peq|uRDyif`YP^>gd%0ez>h7`tpW@E?j z(Kkz&kdxLC0z9S-TPUf$B8q##HcYd~H;2MISSyY> zqAW;>Qs%s6lfMk9wqRUn&B8)yxba`5Pk=t?qi75-T(W&h9&pRpz0m;qp#%dwbf8t<>Y}9Vd1?t`OcVdNodcI9l)@ z2OE-~y#xD^uOa+N@cf78XXM4q`An7s$qLQk4zgW%9c!ZSrNxkExNL^q+8e6juUYiL8}R*>2&BaK5sE;*$!!##hLa&dIor5aOXh;9q3gg_64;wKjzQTIa_E;*} zXy{q`ew2R5b|L-oRCRc{*SG;p$Oyb&k~}|IVShp~AN9)w2f|P9rDsOv;>{Du$;l)7 z$0sZ8^A&M;TMS#?TWnv`_h{b{!|PY)^k;%Ak}sfjq&;&-4-Q7<8XKFlO?cDhC0w_S z+6o&qGw#kzi<4Jq3v7>VD_SS04*8|N5;uMS(PVgs(LW5PsjC#`Ib?_SYEIf1}ekX;@;#w7riXHjVS1Y;Ei!F-L zj6;_JUpJ0oj7|7E+=VeQ@r!!KZN)&$3x!;(+6NTd9b?9~SN#~sfGHf?G3P6@V_@%k zB4&0oJk5JlF_^`|G3QT&wFpss@$UPE$K#q{w?~-|O9|W9UGDX)`xU7?VsSis^|sMtkq0q5o=)((=I zojMR#m_=D9z}(gd@FBAYRn2J8G&4b@$Hl>>#~y>PMPoWwuTuW5McJr~Ic9Kc;T`(2 zWpVNF39m8MTG>c;!XCq7!ER-Dp=E(Z(EF>7(^zPZm>Yk&lFlgz%3ENOs8V3ZGuid7 zT3gIqy;@^`MB`9vU?Y_$4F=K=QM;48@C!$~>Wfoo)YsywujN0~m;FV3)&I}+9rLUD zJ^`HIAm{7`z1Y71&MRaXvw-m?x6?uaAPgRBcb&o4dYQG)cGY=ycb(OyK~>XR+(ZU` zxjfZ9A*@i&k|Ep=@I7WA=t6%o?zbRZ3<#g?hVVDt5Waq!$-U}=up-w-)~`r%C`jhs z?W7RvKShAf1+OhDfCTC!;cqsqFo83FsnKXY7S8z-?p%*mb>q!q=H_i`vD%fw*-zJF z)kvY{M`Cw1@Xi7_V*nm8-$5{{b2yFF-mon=%91UQD%nrr=^Sp~Ct(Yv z%fr>72$TR1nd;#QSCKP&S%b5*`x>FY&?J8Rvz<6@5kwz+8_bjOevYCHJ?6%~!&^#) zkFl>{bC{8pD3dL~IwXkBjV@wE$->6TTrWCbx@ZY9cv+%>_X;;UDNSr~YaTSs4UnQ< z+l@0LjV1%}%g__^;(kQ^*a&twTkyTr9P}MZ&t$1SPA`$px@0cp<+>bNNoNJnJPB3@ zlLoR{$L91Voog-W&@iLku&~j9%Mf!Auzn5IDS+xU_JqMK*J%Rkq;|u~mZ3WJN1d=X zcfhn+3^a`yTB&!}DViNlI~}&*JJhO*U;lbs=VD;c~$%L@CP!l#-iPaQo46iOt{4Z~Vi+!;&6vd4l zUT3oYOFAa3#`@KNeSZy>fSI!18=ZWB$&bN5Q(*yY`o4)Z0PMh}kv~*sm|tqIoN`#B zE{9cWvW1ucFL*sIAvTFG*O4u6^3`?D&dE|Pm~YV@He?H~WIsVA94yx7!@e?4Gt?;q zwU^=(i!b|OSIZdUKPWR`clEq?lbBpLJ&qamr3IQiWC=T>Ni3{mN2#!uo8|q-V%V@8 zCW=>KeODVk9u}l&cIa>Ql;?)N^-9lPmcI2o{@rJ$$BhBcsBU$t@MnyQ!F7KWs%_WKVOW(rl3G21WIJ7+>A z6B=r@z-P#LJLkR#n)hz~zs5-D6qj^j76}<=UFsi#Ro8bdX4qF|Mub2YB*B+rRznXU zVLkM6B}F*=M8rH;=q=a&4_05f_G4j*(MuaCTVjkwjW5-bX9-bU)^^1+1Z*ji=8Yfas;_=!lTuEmn!FQ2B7H?47 zLO1x6Q+CoDzCb7O=5?Sv{bqy+^bM60+UERfDeB#?WvTxTxlHGKN%UxOeu?&+Baat( z;QWVx!zIEm$Ws5cfb4eI*}GQmgl#0?dI50#E5dvP;?H|vcNSjUDi%nzMjcLk0a&&p zKQQoZxl|!+h5wpfLa)nj_(cjFb|J<<@)-R*R@I&2_nim*P8b?0YfI^AUrTB+`C`sh zX)9=rzeuUAaPq=Lv8jy>AkU2OC8}(waC+Gk#gT}8fHgMdMqWQYf=^o?)T?a+)$O6* zWF@bJ-(;;k)}p~BCGQt{>>WZPh7>F1)xIe1faO)P{kpdk<=}e@0?h)ulN7@4qP20o z>gVg!_48FbAM^ajD{);u0MzwH6?p;ZRX<+$&@+I#ev9gZXlJ~CkN7_ezxEhFR@UJ+ z5%eFv;3D8j*>McqcG{=BXrVex-9uqhuF{~1S_xu?y4;@Fge6HGS$8Am>Lk7V_qJl$RL4n0lqAKIya zb@B+IMLZ$zb~?o!5?TEZz?VD0cOx%ygllA@nY@<)BjF3+JIf60j6^XDd0+BoLa$N!MFOtV-=Y9*Y07NAC)5G3&B^%vY zq8j~T<-mj3ze4tQqlz8>q!i;1xhHv#+azv<_rUOoe6<;66|$bdo-OQ?k_jo2C$r;e z9}LQdeQ-8Qa(mxe;A48_AbF&s7Jy`aI{7Ua55EPWE^OG^LU5dkdazCmx0DyfQSpcf)>R^_!d*X1;tKJ;iC8qzPyAU4+%8LUW7tGhezN(fWuBU z@CST@@5AaWw{29%cIe?pu7mB^PvE=aWrmpooFu!-+V$`&h4|MIfTPpqCiW35uy?u! z=R}^u#9|hE_YL5=mLrZGo{k;~S-ML7C_G1#r}LROt-u~n_I!6EGE`W0jQrR9!f*OK z)P`q93c!vVk?6a5Ojr_hClX(vF_H_v>A!dRP0v%!$4+qqMjz$~$3dI{jKOYO6o2e= z`c0?4ZfVDAKV$ezlw!l5UfJl9zYOT9$L_RE&=K^xjn z%e&|%u`lx9XK|izisF|o@4CG9ituCguC3v;6ULb@!Cq|!_R_dcMj$u?#t|DZqk58^ zmSPs;=zy7>1SrF22jeKjm?Cd{uU=WG4uF?N!W*0h_$C1BL%^?E&`BQKMe#$}Qa&#w z@C?T2o3K_*lxqvIfKE@RcH zS&X+yunEAbh6^ta;142?940Ud`K^O5884hGm^;DS3yCKVou(Xf8|6G4{S})+cklLp zJ%ukgmqNZhIfnqQpGt->kA5UiTB6v|fts!#THJ;Cxy`aJf5sqJue3;ADeubu;}fFl zT;7#Maa}XP!({90N_$gI`*)XbWl_A*{q0v&$~-G9DN~PGFq04^{;utU&FRBT6hD_f zwYdvstZ}sHldWdhP)0~c*p6^{E&Q<|boG&QR*FIot%5B^XaD?>Mgc6kFS)WvO?7tm z5A~C?cQ$o6d&kz%)jQANjD-4T3t&lo^ERxwCsE(5*VvWZbU`C28LVEzgNvsN;K<5e zLEkY12v`?I6YM|j=z@J`6s%L2`IL<*3|_ww@!!( z1?*!wJW6TgIK5SiB3Otvr)_Fc#CZo=lP7zu7R6{6#Nyj-gMv7FF3{BvthJ7y?_7`n4U2rS}98Vz-OdawZ+Dmw?=&D*F^b-tM`V=2X-L8zUSU^4-Ty#-A zT5AbF&(YYu51%m;05hgd39cLm-ysp;A9O-j*9pUhRwkt0x=Zp14;S8$RN=d%Ug2*@ zN?digDsXkjmB&?!D;M4&KGv={5Gn*oUcCZ@N`w%kz`48j-v+?mnwa-K{2?~iw@JW*GkMLJ-LtGJUjawk*{alvv{ z_b8myPNx(JQKb3Jk*?eNN06pTw00KQ{9LKW0`fF!Vq5LNlC-!6`Tv@0^fie?x^wH@ zj=WY^+PsnK2boHKVH;q2qn63~`Ywmr9@yzvgxTDQN9}Et`mF6Z;9B%5!(2l+f-nNl zZMdF980ds~k`vyWT=0&mKO@TkTsQXz%opO!{}j<5nXX)JbHYEo8~%*rqKg(*V68zt z@LdZN664q`(<~YG!Tn??_v;>Q;3I0(^*TN`KIVRg+2r3L4sTOsn;wA=_qKN=x59TM zZT2;nuliD0tN{m2-m9#K74HSsQ?OgpTi)HA!aJuYlv37M=0@CoVG^Mb0^YG0C z`OS-!>Uwuxozt3*^%{1&bZxb|M}vN1ZKD#*p%kcw5)l91Q=zgdveFHkX%xCUHP_PHxEQA?@L? zQ|XNyesodmCQ;dO2^d4C-%Vm?`#PI?H+dAGdWfRERW}1zGSB(e(f$$WbO`XG;T70> zM>vFV5g{32140GDj|enQ!)A?uH@%nRwqfq^6qZ5CMG1Z=`TQ7vWr2E{JYKIVCsvf! zyLoz9f>5V$jHgf9$pc5Hc&T~WLS;Vf97kJaO^fxt>NOhTTF%7Vqs`$mCY8ctUX3*d zzW)ZaW(b;k1=At+Y277x1xyf_?K1^lfOj9qrRGZ5@2B<+>7ddsSSxKBJb#Y$L0a57 zTcfD^nJJqHU2)>u$>jEnRKd+w$wS zZ0~MM8SMD~R$KlCd4fNeINL&fQi=6t8^U)8)GyQrn}oxS{3}=0Dy(NTS_LnDu1JNn2$9zi^>J5ozGvo)4(&H_;>Y){> zXkSA!>ES}Fi-lGfLJJFt8hEz|1&%3NuG)f;dz1K}%~_ALR(NE!<*7fa7>M|DHlpn1 z^8Xnd<@PmlYhjB(+b-a)jSUBNJBPat_8Z$StUfkKQUo*dYs-Pn%p2(K>fdH*5b#$z_{#( zahWNP%XrtgjKe%SM;@1zs+kq=j}uW)%8gF6%tp;=Y&u%Q0ksaX1D+w`<*^y#*kYbe z6ly&ew!p%Njj)o(nmqNQE5M$J)37W~Jf@Fi>>;ih6K1qBqZ2IQf^z>v)0uJ%t63f~uqHl6hUH^zR0}5TpVm{haKxOJ|4)L~k`{Nu2Co=yPJcb{{n-ir zB%dJA*B#=ZW+w1&(tL>jc8Gt6AC}8j6(pWMq|>$SL_?Io$j_P!Y^u@j7V4Kb<$l=$ z>Pen^n#47&@5;GP1ol!MFa08Shx9k;an7xt1GTBa{cPM5<++Lbx!gNgm!-u$2dYwi zZ_iQZIHZ2aT*ELvxbDOCb%f;zI}uC>dIa>%^sapf@m`$!km?@$kZ&<#(msT|oiBv+ z-RXtkvgXT3RE_%FRH+P8RrH~B1ATd6q3Op?{7rhJXNsV2rggqO}c!7)V5Qj;W z5AtBfqul`#7fpGkn(3)Oo<5N8dgJbneCO%P@!K1i=b{t`Xl-PWydGtPX(j4~y}WZ4 zULkeOom`$MJ}b$4q>V#dvt>ui6wH()JM%j!(B)GiA&T&4am!s9qngAgvE~UyEuQVD z?q0#iAXi%T{mbU$9yE!uE!OV&_)*svi5*|Kau1Pu{UY}fEvIa;!cdniFZiY{WMli= zG|)watq2VWI}r{bTtslvO9j^ZmFiwt?>~>7EK~o6IbWS#LDcfP;$`qwsLf4ceP^0K z_1Q29=Y#TomT;*_-p6)`Ob5KT$?M$89{bogdhBD<2R`M$S^u^n_3~oaBxb^rt+a!k zh#hQz5GCVdKs&$twBIMhVTJ`vJ}kFvI&5AsqZd0@-2LBPa={c+qe^+4{$sY%f53V} zW*IN^y~=FE`E?GYSiqIYboEn{_)e!2qO>;|?CPD-E!%9i%OnlgByQ{spmoe@=Q?If za}9dOdH;IztKBPYGdK!F-?p}2bFH+UJKQF5HFmrSzWL~nCUI$}&o6r8_s!>AJ=-MC z>+JF^;>3gBHJ`xl_61v|iDBMGKitN(0ig&%gXaodneP5s@R)~iRlQ!83hpPY#k|ba zXPI-=Ybyp8A4~0zb#{iC#hxq)^o42?;;QescIPa{$}~05)l*^MINZmMOkw0luYt7Q z9LurPYw$tvt<)B}|XkJ7vr?kl*&hb8kF97i*HAJ@Kr^^P+j-^0OMx z{&?OwPa{7ouKKxpqfF*C1MeL7Ti=rVph-+@UfVrRj!J15CuwnO<^Pv$KCbWfO5Tay zGb*HpAo3K&*MGn?ieqYyrEYWia00hmdLCm$bpX5{z*|QFupfh9K%o1V5vtK0`*0Ny zK#yTFOp|qR)}hCDVZQW)G*z~+7wcF*dA_^~I^1riK2l^9;J?kBRD3EGa#gSn!^l>> z6rixp=97@(^R?_mtwYdfk7K1Y4LFwEhMZh;Xkf-8-L_78)z6aYs{v^yw}r^#MF4-o z2Aj+6VnMqZ6jK2oUvIas!<`0q+uGOTPKUcK?HotdoD-3>)wmv z4>;q!DPF$Ew_3!XqIkreVsNHmReIvS3#WQldf}-Hqk2_(i)#d3_^9sA^4~9p}+9u@{j5+q`y(i;r{OOdC+ipqgJt^Q5^qW94%aXUeaT@}euHy+=yb-9hlIM5^+imu z0vsE4crTf6(+~ejnPWrygi3WhW{PDM`ReKNJW-%tM62wjJnUh^x9?KLXwYz4;gRkm zJa595Ax<2ebf^mRSOl=x)}lF0E9qQySOv}88(`&YgESf8QG_XxyHMT+DJD|U=qazI z8An2!rkXe%0a#^xh`lY*6Y_ zs|p;1Sj&)O2UGo&fmaF}N5$@Kyt(=qDDr@-POfaD7~K(=7&s$RXmwGw2Jynr7TZ8q z%RlKj?%MA+ia{MmZ0fq~@phN9KL-Qw8|!TkXUl74GK(PU#3C2z37{f^*#(644iXO2aG8 z{n%>k$C&zTa~}R*Gm}SF;>8jc^9D9 zIv8}Z=|Iq)R+SID#Mlko+lE_KNYE{U{M@3=t*VI!?6=cNPNTAnJ=(8IYo7`0zr7l# znb@N|PP?cdb~XbqqE0_?x<7C%m>>6e{30VTBRC%tK@3i-I>fx@dEkqOV)w^5{slQq z+V7pQG9yo0uqINSBt4jjK`onG=EaYwv~QjlfAs1A7wng}zc2MI{JT6yHHytRtDy6w zp6$%4AU@oi-FRwi-wlX6arOr}{VJI&@v6(WV51n*zE8UL-bKKl@X>%^{wvlB2o{75 z2u~q=jzBO^oHgsQEtr=wv5)H~@8jHE^Ac0P&fIIX0??)13@8IUAj2Q-(Oy9~AHXgt zTp)j<9ik4qB--8dZJvN#PP@3dWx^vF^4)9TI}G;PB@GGKB@M0K1-<)SQb_sdQs%bT zC7bu_(obh!$6ot&Nm})~6z~&|{I=kzB39O>nqrtZWw=4XC<0!WYFHLpjO8V-OLtjy z$Pmo?neS;40~tNd=Ta_aM-#q>JAIe&>PHeG~i5TodOw zv1`F=IQe0ZXoAAvHIvV27K55eCbV7TTDSr_K|7E0EHz>p;qTRXlG+GgZiKPz;=K+& zKP+`TG$L47EOVS`5O3pLeP^MwEcj$*#=`;{*&ZdI%w$bJ7It}d;dxiB#(h_<)^As> z4$mHwcGY?%?yB`!%!K^GD%O1oUAr+WvQo*DYgWqH+JJPi?!ub0wSl;n;~IqPSzLp0 z{S?>1xSqpx2(IUG9g6E`xDJC=$ic7=GyR|&Y!jWSyI4T?8MQI_jPuz&qt>8BoI6{m zaz9g7?w3&;I{?pqT%F4AOx@YAjM}*2cn;(1RAFc8KAnX7f{fbuiMYbTn5qE!ev_aJ zh%#nmovAyQc&6^ltc+S=Cg}iX)K1%+Q9C`I?3$9iH7G7NzEX^Qg+0?Q_;kT0rZnq0 zreNlC8PfCNXgf6LvQp@~U#Ckg&5&*cRNZBQ&)yv$Ty>Yjbz-pmMJ#>s>+~_DiGN@U zw13EuOq4Hl4Sze|kkYKw3~59FwD^|EDaM2Q6~KgoKODfI?^24H;o9p~shnA7C@bUa z>o}|Qu@{T0?_a5&3B?w8t0!3}-qFFsUkUUn9X`hCyx>>NI+V;g$-z-NJ-iX#2r8E< z@s9ab8G7*4gJF+!Guq(=-&Z)@i=uD3z8ef5cp<^Y=_I4kOUOitB$3m%8NO5J5G}*$ zHg+pUNK(fkJdYFl7?$KV023a#7~JI>+;~Cr33iwG*~+NX zh8FAvD(f{0IJEvD^L~29WI+{7PxoFHka9yw0%olNoP86VxEq*kuT;-kb8k z`JFtDyYQ60ODJXQZ{?}<2A*~i^KatZ0$Z2Vhf%Izh%P>k$ z`{4DkPppII<2*rK>RalRCIrTL^^arWcWo2XB(9UpSUW7jxo3Gm1@MpXa68i=X4~nB zb{U=$@p8{g9~;A~h9;gCU~M-?S$z@m9c*;(aY^w*=-cqO@9<2ko-D9w?CZ4&QZTa_ z9F7O67jb3>Tci=2C9m*$_-gynLU~S?cmX*u9~2j-veEZbdyi`n7ub{HucD{Q!%>zw z5k7j$!z;+!u&f1pGJLl!1YVDsoJR37G*&3zPjIS7a!8Hhm(AI>n}3G95dy8f1`1sm zinA4$|9Tx}wkk<)UUPa?G4#6THi*4DoferJ#ea3K9@rUH{VXJ$xQSN@j~=xIzsd&X z$1HpGtJ0I;V#Cktbw&MbW||Cl*hm>Q*z#e??RC^wUVy)=rjUs^8BXgpF3e_yjU0T( zUq6WzWxhdw&C^xeRm~4`x>3W7x@KjEUbR&}Prh=||23c3Zm(lTUAI_lC$aX-H+*{S z2jI=Oe{!uWf7Qp%9)9|C)@F86K}ly=NTnud67qS!!)eL2QOxfAOgav)Isulwo0k<& z63E*0aqj+NHtN%PT=bsJ@T>+e&BwXDsnvfVeF;}<Z4ywG@R;!I=}*FU)U^Dt~di*lqc$9Fy~BNPA9Lt zl{f{BkadDDSotnnN@_CA`=Y6HHEJ2|sxRtEdF@Rh`fzW~$$=-NikP1D#OinI{?Gm{ zTzVd7=Ll3^*SM7-_gYaG?A8HxeZZaSTP*umeA6mbdM(tuv5n&Xjtq?07clB7F=8vc zeAou@)Lpupja9|?4mKauErl5#TQxRuELJ6aPI?@-ePDHHDpApWckiao7HIU(0AFK$ z2QQpV0Y}$Tle#~Z#{OK4{q1+{sjVqtX_Hp61?)JlvF{olq0+)bQdQ8`YY=#yD>fuXMg-dj@cO3c<8O9uG3BUpG2^dcE$Q)*1y$rPfi{j7-R7|AW*3rUyF zjtgGlHI|KfGCp`&DKzVxea}Ltv@;Uv+%C@k+O|J+CUPvlb29Y@+tw9Zi#1V+%lZQ^ zcC{BSt1iY|2z)5H!{tT*f)VYnV;y_lrmfeoLzgXG#^n+QWg;c`dFWH3uI5;R|0)1gzm-4RgC z%R8qAF;2E8QHOW`ZO%w6{SaqPx~qw=@?lCy%@Q7N>mVB6N4^gPzc{JEJeO*Yo`w!_ z3~aVHinrQe-;$dkd4?&d*n%e;mB@ec16N$p38}wSZtxbBKnhuB{Svxg^&| zqPbinLsvsIA;H0Fh@NhPE~sv|$GbE~J%sa=9&pZsEJh(l;xmxBTqHaY5B;ny=#>j; z$-?u}2jT7o8>AD)4bt)O1~G`fa&w-zyo#?5;j70iGX*tbd%?o|CbtLTmY<#P|BUxV zcpqz_Q}YL6_0P=cp;c!EZS|AD>ACXR%LDPnpG)I$a<1ubK`iq?y#F(FD~nKymSme7 z#l*Hm#3L?zo=h#Ot=_I)yVIU)llyd87hN#R{rrYY*0@3ZSNlesOVWJbAX?iqz<+Vx zf7QOm<^!0$oC=@b2t^2v6OeVRXF1G9K~9=#fNeybpanH`oJmX>AoNPXE;J=d@OW{T zGy**zo)FZ z$^`$Ea*Vtizw|HIc;sXokGE0|kgpw#zm2~^+xiJ!uq+h^E#!o3SY3kUrP)Qk#j<3> zn|%trv5G*Q&5#SpR^)`yZW!_*x}pc-W}MyGEwIa;4!i7_`y$rhet92^GiK#^NwE}~ z@>u0-=3rJ{0pH~r(0$wnz32C!Jzp$hMm%2|0G`mT75HiqrE$gucExRe7#GwPm;W#> zxGV0!!??j+ai<=}4e5%TNaI3*aq;loQ28C6`39si+)%K{CW-uKcR&7tPZol zTq~^oG>7i}275djrJZ7JD_s-szv%;6Zj9LUSa8R40)>S8clhZ|Lxb3y>G#9uaXF7S zr3CXiu}!(bikxZpjjNS83HLYfov>q}@6PRO4JUbxK6CIJ)v1C?`x|U^sAam&3e+~3SDDIU&rwm|$njB8Ke?{w=vqDJ z>4&XB4YMh=>Odd}e2N^e4%1XR)8otm={3P-=?=c4 zeJFjW4tuxDvpVDyDL=0hPS5SiAfjFr$258w+3*L@{{KJiy?b1g)fPYeJTt@0Fc6@k zf|3s61qBuGMrB8YVZ4Bfx5BdIszV}-ToTNqkC#(wRw!h6E6PrX@CIH=%aUVOX4V-L z3r!2l8U^(Xc$wk;e%F4Ufx)QL?|uLH{qxS}^UT`!z4qGowbx$T1LcT8ykCMJldzDn z5Gvf1=C#e{>&%rOR%E-4m)L3NCB7Q(3VA_6?#J}^1P0R!C9(juY1A#J;A#bI=p>VXVT!*@bvuhh|_aoaulP=BVvq-ke%W8 zs;-&Cuy(j=;{3#vWYGWKPz9|ACp-@0MQV&4l8_v1pd`7PvJqB|HG+@A; zgU))3S;0(#k=CCcNgQWOVW4U1tZ8J@H%mKdX;!UzvX<$ zt4p6<{_WB?m%C;BxO{p>zZYK3c=iSLsBbfr!S96MuAq0tg7Au15~qu!SH!+T>C||` zhtla*;iA`-y-6<)8h->Gr-K6T;GJg=za;Ln3>{>S*JhNN`M~>PUb)E2_-w9X)VET& z8k~r7f!~feP=6-8@GuLhDkGbkm)0c`^d~Bxt1|Yw{vS)K-qex2~y>g`X zqxYK6n0qMuRSwptmM!F5^y9q$O3h#N+2f?o66l(XLGiZ}f7S(}gr^n?G63T_zQP-p(Gx$32^c<(Pdckro5!SO?Nf~Ae-_Phj1oz~F6U*$U)*it$Q#Ut= zGW2(?)&}Dzs;MQh6rS#sI7QXQ{(?OB<1S?a+G-xYVhm!3@p&BaLe8F8HO1D_SVH`% zp87a)3s&oS-#gZ$wf_i5-;h>v3mT1|q#{1>48~nMh9~J$xNDu&*nm8qg{Y~a1*N|=RxE; zzTr2NzZ_}R;Oh=L&^et#uinM^KM6f@GcTV$=zNUV^7`}A?){0HbI(Ut@I$AX*4d5? zSZ6y5ozhc~>+uBAgi7}p%9-ha!1=y)YvI#sy!^6g@k7;>wo?gM2QP#F$v_)#TsDgj zQjd}auL&P^CI1%pf?amGrn2<5{xJ%To%UnRw?BKV2UaA@W>J`bU}mTE$AJfow_&0@ zZ+pP!l6ej*;de~Jj`Jg&fE(J|XOum50H{ zrhR;xzQ%&~{mgo$OiJ42v3f z15PJcXMH*Azh({2e(qX7Y}NQ;ry?VB8D!Z&UNzX0M(t8><;{x1!kG z4cvcz3+)_tw$fWQw0i`{i^VuDTaC9p4~92fjxs+9X(!xMVIf~?eFV}oC?rZC1)Z(M~^_PRhbrEL_LwCZjn$`vQStO_p%RqY|{sYaSMznQH$Y*y1 zdDu`-@O9;A$pOcF%VHVbOTqP!;q7Wwz*L;d$SuwjBco#!3dJm`_i1cu)XA^G&`<>V zy6d>J^K0-Wr5rbiN}(HWzNwIz55ufC&12@HFbA3XD4i;~029VwihUN6FUR424^%Ej zI>~5rg}AfF2j8`-S`~hv5id7V+Skk;EXEgRErTa<59(Ln6VPu#>3nQXx2%$r=>w!# z92|A1Bb{Gb@K+rlKW50eXVq-;*K>-au+dNMdM!r$2G>|j1Hd?-=p}j_MfECmzUyJuJMjF z4%{8Oy@*=QMnA`S-(J|#(AFlxTnsb%IZUO@G!CZ2%oGCCQDzzr({X0Umty^*2?SHPi)41Vl_#MtCyzW-*xve#9DYgjGe$SJt32vaN9zmU#%DP+A@U!@z)}~ z{P)Vn8Qv(HQ-+=~irW7qXrjJjoq+q8)ge2Mg<`Ky+>h@ehdwGUx{U62r9d)KbUh2# zfH*qi6Hf}z7vU0${I3!BKST_5jK!@s)7UB;f`&C;6Exjy4?cooZ&h-&%MP?x#Y^fNN!-DN+C8DICXGohh zp_y)^QteSZnPu$n!jfcOFw$>n{np&9vyb_l|5BWayc;|lYu{_ZkFj%wc}`(<1-Spf zTb^m8`=4I}7rN2d6FPIQ1uFx(p?CJMZ0Cx&67C?kfm3nEvDbbVQu18gT8!K4aRY7T z#R6NcZ-MQ4H#(t)mP6vus9idQ(v_{n)Sr9Vv1LAN3wOl^kJ|5Qrr)=Qm{H|pNH$RaoYlGzq2EOhmCI!T0#cA!8kQtV+CL1tgjce`={ z+JLwrv&*=FxVwrIm^SPER&wJ<@5cUuA2$hlA*8r7J}(W5QtIVf9?~leFX*_yDAVw% z+>oDahl@Ve&$h|(8g;eL^tL$*g^@}VdL;VGOtiF+mI%E|89xsDg?;pj9mbW6dTZfr z`Hn;PX0Hl7&q43q>KaS0B2UC)yxI%sbDk zQOn0;9RMkA4Q|l|$CnMl?Rr;D47*+b7_jxZ%@$LZit+6~HAcT&_e*TO)kAVG zZYGYJi;0JZBJU|DA;Fld~ z(8=-!6#f#c-ZF5zYI9$M-!?@auT^eQY?l`}ZSId%#3zlKJPmZ5ah4Ya&31czokVSE zfWQAJO<_Im=R?B-^N@=q_@I?KLhl_tDv}fT)|v}3*`Y9WIOW9ymRC`ACLMuwnxs( z;nAkYrn>Bn!Kw(S4m;|takn&uzM#9UNnYr(cNAzpdg^Df%OQ_dZ=EIi)ih~#1c3_3 z!8cc@0lk+sYj)5X-DemxH9IwhlpnP$d863osAXvi+pM^=D#6&vsUgP(>Z z=z4(*j5qBz6guTp4p__$8*=3*n|d`jC|%TBqOs{T)ie{{u}*8+y*R?A%p0(nA5#+E z)7|`6+g(GE|ehcS_9o! zA(^G}AkQ&KPfO{^SbE=|{~jm5p@^lHe+iS!@-|9M^YbBSs`@AJ zGM``IZ6_^!NJ_Ne)&S;0lA;B-{3Npi=7Ew~3G*PytcH0oGgI0mIa+XQ2(yb4t*(oC z%j`D6tfkKKS+| zJ$A=>ui*=uWmcG(?*81d-fpNhtTNw?1!HsU@9R_S8|%jQ53k_%9VMq24|aV)2igEvUUpp%2`D77F1~BWzPFWqoQG`qaQR zUG=Hm4UT=PSEoKT*+eb3-l65TA~Zin?1LrHWGl9h_a0~;F6VcFR=@8dTcjTMQw#5Z z8*PRQs5QwgN~~1OU9=nOcbDXs9Qxhk&F9T)4E8?WEMks6{x))}LJ!|?g&RaC!{|q~ zPTlx1yk#ZsIaCGh3BPms1@yF_;J)(A%3n6dt>p3`lOPM#UrpsLueM<9fxhV{4=C!M zLVZ&&bc5SGxWycJXCp$T^Oix4yA79|R^6L=pa2q9q5Al=chY#v$>!aLSh$A6^)ObS zMIP9p1aWxz#_W}=8LhdS5UwI>R1GGMP5MMo9 zAB7OJkY*p`-4AKzASd7S1my1y*Fxmf3s{OH#pxy*J0c)2LZi)YgWBwy5~_b^BX5a7 zo4oN`+)6oKVEJX^`ifsRasmIqUE5z$x8aq}ZF7Fv$m8{E>*ctW%W>8m%G&CfhTVq$ zK(|KsCpj*9?(f^D5$6kTdQZK)%=k&0wW#$S+;dA*dR4}&rdR&#G`Z3f`uF=+_&Ir1 zYLx>j-*y^QIY8xKndlTydC1_U7*XkuRezhcwfQIWAw!|+mkUbtExP$QyZH*vG&L}# zHeZE_)>5t3h0R*!%1B_uys2B29{6?k0ZNAd}p% zdU<#T>Ek?i@MMN+SO`wGaFTT=BJPG+jxp@NCT`Fs{Rq%PS?y}$7Z27e2J&Neg-qm}GBqT1XicWrTlGtC63n!zL`B ze`8jpCr;$Bc9r|h>2-S4p^$ zzkycN!mwt!QDEbW5}|cgGfcCGB#`k=IzQ8qy!PX)=Al#hyw}u7dfh8dcl!st&*n$3@$qB)jGu(Bv+=?n zlWg>7X8ABR((C3-It__3OU*dNfy-RyRd*L1c+PCcu>d%Jq~C)b2;q6=y5@kV%_&a- z&AuuT!xe<#^6>od-d8U6WmviL)d*A01)Mzry^J=zY-Zcw1>I||h=tdzRIcZ}%DodJ zZ~nlKnHzboA`xvo2>f;>R(=Ycy#(QGgH9g;O-|7INqqKA;Ipf9rslXB&w|^2#uyEL zJ4VNf8|;)~5DWLq1L2~LuDP3x(Ya@hn{wALbzOQk_sr7hrE0{ht@y^Q!1)mI*&jUB zf%Xabd;*`z$WxP}#*3Acji-?-ZbyaVG$*jWVn6UDY(0T3hZ7&dRcqpKqGUt7jfi(H zVx#d)4$i0$Yc0+sZZbUkurR1|zm2&p%+fQt2m_ob%q26WfL`Y}m8CEhrzdN1BJeG9 z{~GRRn7f#!t>UEFBAro$FLyGihvAH3ST7Tu3(0VUSqWVPihNW$(=ej*nH+Uac#UG+;oFHChHF%Xlz7;a>${vbAl_q&m zx8yc$7o zMu3~(+e2}&JuEovz7#$Qb0ywUmVevsL$1Nhb*Ad`c30Aj%m=qwW3hq@@;$HosNILc z%UO62Rhi`Kk-_7BN;NPN^%4d7ZkGSkAx4|^J@83@k$h(-*E`JBq{?@2ZM9ah)Hi@O zE^hxe%8f3r5k?oyS|d&iMY|{L-I-l85&p(WSXa&16`co3{}s5EGDN?*6#Cv>eMY;7c{Y%k%Pc-gvKHgY1<9D4zG2RUer_t=BGetGiR^?1MW zdrd6#NpFkf^TX;}g;-l?G`~aBgj3F11!fD)lU(&&-6uG+p?gfT^mW#_+eNwsx>L9p zye+a0()=7`85Bj<<%(Ko&KFue&(v~Uo%P^t)ySZ@CqzB57Gs>K6}BT^Qo)4;RY!EG}RNl)wmUW3Zp|GXzx?{U5$*@}xcAH+dx8u^Az->UCNk$DQ6{}cqnZgkHMI&i;OPwQsKE0*ortF!!&BuK z7db=M8+cYQJXO%0DdNa8jgumd*G%u}c;M&;94WlHN`_Vr#Jd80}(lFg_rzk1N4pP5RyUEhbndVMbjSL?f@jc%Dv{LMT_7UbD# zXX1@kded}x;1%fU48Da{;&hK6L%hN}&^buAaQ905_Djmil|3xg?tvA=b?nPHd^=QL z=n0#^cg+hXUfn5M0iYA zSEN=V(+*Z;{c+ZYu-bD#R?;miFl`zb^!DK4aO(K3bZG_(x zhM)h2{3!RXaICZ5hIYCSOuWCSr}PFmtKd8}{R{PL zL@U(!9x&vGlfHTW;*LITUZGTzL8A83p_2AedbOn9Dr*X7H}mVQEsg8VJ*I~E8o)WL zv!1FYO(ONy`Hh}tu{8ex=4xRrN;6Y(SwSv&CqVp-rWi>7fl2GJ%}sun+(pMI%jdQ=Cd5YnE4r9aJy9Y_p>J zvAF@>{OG51YRh)lt>XI!Y=T4{Kj5o_zC#O7kW3yo?3T&jSGGL}I83b#V=KX*8)jIv za(hh7))mtsx$m0ys5dvLr|}|msk+p)jr+y>=V!FT;!F$lemPoYY;bJt!;)j!^}?r&)KEYJOutktBnoZ$X_cE!XpedwybTy z6wt*e`mJbq%G_TH_k06ks;KZpe*6S&KqK_ya53+iz2ML1Q%cDVKR?6o&<^WXu|WSr z-z#(Z371et7B1{%bAYi7xBkR*V;V-7i4v<&^XF=8i^Y1^qrU%!Zy>%eCUe|(_?F`f z!uQc6()q7|o|~95exJ!^!udy=^&0M;k*5C^=prD^{v>PBGrH&Wb)_qGJ*PV1j{0(4 zXh>hf7ToWU=kt5k0{ZJ;x83yJ=5?}8Eo-qxw!sz*?d^~dqnjS!Rn7jK_TRYOPB+;U zrN&R{tU?XRwNl$m)r)6bq?aV8%!S_7^rQE##Z%`|Wi3qC2x*C}x6ZTCogvG_hxE<{ zrQWyfIYXQEY8#z??7_bC)CpItUp%h_qy%9$Hu}!Sc}W}eospf)^*D%_)IKMA!alt0@P{gjc7C~a&v;7%R1|iaILp;xW`X!btoI9A(u`NL@kPS)}L<_8ARIA+U>Q{pKLjAWA4m< zNIyTSQK#6_XFH$&lnw7*Zt+4)`7rOduGmuZ9?D;Kd8ppGgwAJLS|WYqg>}|pHODv( z^EDqN%NyZEW7boxnz7tSLBH_I@_y8Flm+u4G3rxPg4&s91N+SCQL_hHzxg22JI=P+tl7}Isnu)tId5yTK7`vf3c!yW{U3G${IJn$ z$58Se@QN+i_=+tksLk4hTh8)rvhCa;oFT#Nyln(<`mSZ3%?atn+MMuiY@79Zt76Qj zki4UF-g@hoxZm4m-Hv+>PvL%zIHm?kV`?9q`PErZwyiPuj?&^phVW{$4s*cjByPnJ zRz?Y{RA5Ctz!9rb39B~i9)?rB^_7-#^s|09221sD7w!0|VDXG^O=&M^r6Sq#sV#k{ z{aq*EG|#PURL-Ge-ch7=lkm6^+h#Q*Eq)uF5(zN1Ss!8cdh3D~#uHy11f65Ny3QJV z!zJoQELW?R(LK>N>(?w?I7~^c+{mjq!4$P6KGXVxdFw*x;{q;d7ZER)Zq}4u!#%3hlo$nOiaDHvz#jRx6hyUwuhTaM$^PU@SlO4L-amhcHw21F-w z+`Gu5FhZOQf3l5UJ#FgCr8ew-RA^(eAlVkDlD-D#eC$f|zBM=-=%w`z4MlC%XPXtc zp(oo;VVzmud|u+mjE`F56RKA>IS+_sE$v=Q0_@b~mdBfzcEh!&v3@xkdF2vmHq>HGaU7!s`R{GIE$QjOp0ecw=;_hwk7D+& zv+il3+)m@RL^xVMqw090ZGezf^tc(aRE0(DJn_J*t@&EDX+ zNICUw`L}s~0>^y{{P*KKi*gwNNq&ajU5zR0gV;H!2hs-7X6?r6EYuWz;PYul3(1P!j~z*iPj z3moM^0l9?xV*EP=?ZLk?NELN8R)ulu(>6u5(-b;csHD;-Lc@_%((xT2JZ~ z-Fw=0@Hy6%k{(YbG#j{s#xzIEuh2cdI_utM1M05T8rQ}bPt@Ol>FGAtsOO-$;1%4P zxEkw>d^X}#ztf!jlEvzETZX)-Khz*Eju-QLIC_o#;mIp>1*M+*eP#@bU8VCk^vF}% zbPp>rw$q8m1m8#XVS0 zt*UD|IgJ6jwjR(CusvK>;mJ-?DJATy<3wCafy-&2gLd{8%05CWdrhmo?7y}?Sa#Pg z%D(-UQp&F%@>8SimLu|EqfyVa3R;PxHsUup?jnJ&bIKdOY|;7tMzzm zK$Jgf_-d>Sl)chQwT5vY`?@hEXUGqXz33MuD}e--P5m&1;t}dhYppq5KV>~>I^5ZM z)TazBrLYyND!_tP%0(TZhIT40XqQck{rq6J@ z+Y<7F%BfN#xfM4ZGdt&$OE-+_tVK;_n4bz3K*tT}c@XFOkK&t-kK|{2>4T%y+nrEW zcfEXAPt&7iGRQLyXDw=N6P1Y{Kz9~`rP6!+FogMKH(AVFfcy&0bot@kuGo8bO4Bvy zaU}W#w)S(N&$QMmbDybivl(zw>p4(iDWih7M1`Ib6}tT)6;u@(2PzC|Ep0F1$fgo= zG31nVsKa8ED-K@)$~qsA)|tbi1Ev+Cgqv}%k#w&1!Z>dz>TAIKU*w+OcL$&EvqP5u z@D6!?za5JF2(;CwT5=9OROjRJh&~o2`LG2y@o_i572~Z7v`di|m3=U|ax-BnhRK8L zyRFr_8zxWA2c|b+^5PzbX&X#FTtAo!S~O9UagXh4tQNKSc?){5v^o~|qZaF&o7{;n zAUi~T@g}~vZq0`N2$BV!y*T1#&j2dR>!tL<^sZa|o{ouD>SLy@(2)+=9{J69YuXdi z#}xh%y%T0e08zK^KA5?GbIW-uxjXL=UHzZtS$^N# zQZsk8b=9V0v^0{wrDW0=f_caq`10~98Kph36rxQ$S zZVKqh!6Z_)shKG24BFj?$&*vVR0oq6r-JDwOg@|vCUdiUR8Tu*y+GL>5@mZbSuKn8 zy;_nF21)UgLgQNXDx3a zT?;#(hJF@c-#i}u7T<69j7RXMH|Ad@_#i8E@+)G@;szDQ9Y`$L6wipG&TGvw>|D7M z*CB869pVwI!w6X(exFjWjHWYHeX|qfvx2Zwy&9`P>wKQYcn{%^A}qB%ymO9wcJ8=m zr+k6M-S4D-C^`uFLb{z^HSg1E^=qacN@F~wF^8qmPIu{kJJH`LrK^r|#;tCTBX}hN z99)tbdlb^Kq%nwY#`@#-6VAL4b|-KU*Bk!9k5B8Ze+t@d|Bf|=Yh|8IJ1Xj!CP!v* zm#cBRXdIJS##*Ui4BIu`hoTy<-bw{lHxt-RK)&fRTB&5v$8Y~7r{ei%3D@3hhDM_OL{W+Zq) zT2T|q(`x<^(avi{e{v_CgU;EX_Rqd{Xb-xIpz1mWpYckTwd3olh^Wo z@8AW*ZGB|5GiBYKXYw2S?CA4ZpG;#R>fZ)Ap~lC=w;G5Rsd!OyC%9le_bKbbRQ4A& zm38w~^s1)Yz7CfhRl!(tQ?7h-h@ej`@q#1W?)gMxcl zWNP&ZNYKXjC;8i8eiXe^PBOsdRgkyfg)&I^qAqI17s~@;u7KAqzIa~Ghj74(tMQ>; zzPjjRe(e2&$`O;Qe599CUUcF^=i+tHxzg*P7OUk3cc@4x}o0Y~DkxSjXMtWb{C%_(qJzJQeewfF-}+PTj9qAeXEiK9X*>piVE zU|UbvvRB0Tki9JQJk;U#F}M@tMSXARbQ5HQ6?%G|iX^r9Q7d(Lr7D~h;djB+y}6-<2No1Lhi(Mr^Jq`b&?zKl@C!6c)+7xl82P68my*k-Lpc+Ua2 z;S|C{mfUlIOWF2tr*pUDZU8E#4Al0JAau5UfFYUJq?U)~dz@niLo z$MK$Gf$eC540`f#m$#g=+*$o;od@{v{a5$1c(_kP3lM#;*wi@9y08YaHE-kP59eNb zyh*73s0^?8x#Bi(DL;f8{0nsSs>+Yot#a1@o<4E*p0I)+w@|krvc3Z6Z>5`cdAhvt zJ{P$m3TU5K)yiDsB70nfZXQ=}o2qE1jW0i2t8rb>xT#q!r6Z=XPK7J`uS{cN0|e$jjGVLA=enExI+~51*qQG~T0pU5=6*@hT4QadDUT z>!6&sO&OD{>x)$P*3Nahbx;HQs^OJUgdo>(tJ+73nfBLLk}4+70Yu}Dv#j4 z*woJ=xQAK%R}&`*^Gz#SQ^?C@{O~Yb$>9AUlQ^Kl3*2m<3fy4b1+6apTW||`H0P#TBR{vUcB4Znl2rgSOQEC0rXyZQqj=);HO`K_G)gu4+3(3f{YK;IWalS$;54pJJ+2ZYD9S7d{5K$zGQi@Nez%-b6IcOUmhu+)m+L^;5|2)tcKm#kIF{UaB$U^>B0c zG964S_t%SKsh2L5ZROuc_-)4h@|^ySn;OdNC*XX2 zXP_(I82l$jrsF5M!9JkJ0?aGr8RKy0%ehI_pl(v(yvutiq;mYx?!s?frdw*`)+3eY zk%Cgyq=tW$x-@da{igk@Cg=P2vEN)jShn^1U+t~#yVbHcozOpyub$3oL%tO}NtNP_ z-ufCUr8D&ms!f!&`rBGpw*`%_wyI(Nl=aJR?+Gh;XhvLyUZHrC>PWFw{^kc>a@3R# zHKlxARX}}$DEjC{`A*g=iabH9P2Nd4r!cNS8o&*8hPt|)y{YCVUTnXa`LzC^UcIe-ad7IdvNtJD%8&B>|B@%=g|t{rBTwY;Vfbs5XB6_IdUtWDeJP;s8q1Mk zha4LzN0q9JQbJ3+%-u@m-13O6SDvQHxe+bKI-{n~un8Kmlpoj>4mqkia-6De(lpMf zxunt5zBJ7JSJ_+kGJdM*-}q9)AJJ9*Kk51bTFQfET*v4t-#X#GCsCHQ>6Zq}x4QmH zxgtLsQTK#KWv|UG9kq$^*eGMUioJ+>kXV~u{xfRC+B}_ra^~4{b(Sd0YID+r`=9T1 zZc>YR4*B%j?{j3m6**E)9liCzd^&n7O8AF)Ssn7ST;m6Mh?HH4^0_g}+LSeJZmcdb zKG<6YuLnws>I*gD4jND4>cv3hp{qUVcY0>)Fp2N%}uywZd;5 z_A0&cdO(=P3P}Y^NUX{oQXY8wOW{)aF*}n~jb=X_cJ_vG=4T|k;Se2VM%Q5nvvTgERXZvmGI@>RAud~?> zp0cfvC)vq$wi~OD)~VdrouIK<*`%(QSJ6Mcr3+q)8gJMmUTrX)jAIoZzs`1jbBoov zh2E!8Y-_P9@aoemw!uMK{YLOAUa<|#d&M@$cq8^9xDF|O#pYjx_l{cDMV+$EpID2# z_j7{R;NJZyTP$`5zXrc>Ow?1W#tMmad{CXM`>MekFhR$1jRIW{cIY@$w(U7+oP_G0y%roV5_ng|NtOsQyiS zpUGl%YAi7OOF6eSylNgSnHw6`oB07@^}TwO*Yk2&BW7SoW^)01OoFY(_ub!kKY63N zzWd#mSAA@vR=ndkZ&t!9kSF?_=@7P9zi)UCdhRL5a}Dc%`>*w64R<1Rn#i~56$E|N z;0+Yw+k|hr3uFXFLN@?pMh4;=0l5(!zDk0yo6K zhm*T@QfhKqns!!vS`y+9k4ZLUWTvP6KJ?h(h%!z)F)b-0IX+XXOG#anobmf$V<^~I z?WF8nZDdADqIPzoAwD%NJ}Xc=DI-1Gs2v>=sGX9QI6}j<(_Z`6@J9@eo3bb^JtGB$ zjnB$TUSiDBW~FO0le4sG$&2E%Ql3xNCK@u*m%x~ql9j7{K0Y-&nVXUZn3AMToIGoq zc9|h1D_LtyPf5#S={fpkBq!N@I>lL(k(``n_W=%$aT1V&3mv3zGu3fE?3q{OE! zN=?=-OUW{5mnUbWYvVyo!eegQ;iI!WqMt+DNp+AwbuulNpePN zd}6W|^M9J9FlGQxO5(v#)22_-E=-Qk%0>XHY;9V4mNq^$HGLV{8uE+RV&KwJ z^=4+FDJ<#K7E)5F2|So&I~^AO4}YpjmNXKb0}?NZPs`ON{}gdsJ*<%Dsf|4@z_l%yS$sips*kfcZ3|Fi)?_#us;;E++H z$BZ2p`pCra2wkLJs?25a8EMpO)6z#E{-gL1wzHq;D7htPWB@~l(2njDGEkeoa3MPW z99Cb(%g*fEQHWbOJ0(mk?YHG*;4;X%t*o5fFdRu;KXraMkprh1fru9*T|}U z`J7l9C_1@iMKZVP>Dno}iE|i)yw zLNeN8G9xC1xBJCJ&xzDN;Md-ci9$oDA!ny0Ar9dx_9gTR$k$NgCKE8v$jCNQB_!l( zC(e$TG6ha)(o_lD#A;x3>>tgq0@DAZdD%X;I7~Mj(YgMl zwt>95XcHat9!QHuL7kHFS&(f+V#y0q(iW!s57nY!r#{B=7Au;KHV8+(ml`6<%f@L; z3^e8%FiX$`Y9D9WwA7w74AkQ}tfP#n=re4HL^sK#!8apWY}xIhQ_@nhfB{w!+Dt=w zb}HzdtVJlaZd3y;*VuedYnSEd%=R|NTD;xOzJQS&?Q}4L2*k!yq2F&hgrx=~H6UC8REI3+I7X0EJ zXhVZ4RSLChiNcvnKzk}Xr9+j}WkP>3k>C+QBgSfxNpgHfY6|Pd=vzbq)J+1~x->}I z$w)J3`1tJv;tvsB$XRQ z;xe&Dk;+3eh*mo*86$EQ6~A*FG_mP(qoauqv#4`K(&&!!NYI9|CO?*~b|D5#YG&eE zn%33y^AJJDKNi`vCZ_c-{kn;u{U6>e4u*X$9N#*!!*Mbe=rK+>ccqSwALc%BEtxJ( z78zKaq0KHzSdf*zU{OYVE?QTzeUL;Wa%@9OvNN-^nb{z3F2)^k?UoRqxOfp3xuDsi z_$5o?DUXQwv>{lnq+}+>XJ8(%&pt$7Ee7m}SrK9t5N$*{VBnBCFKbV*4oXc5#F7vT zAxw7o%|*k-EQU4hats<6Y2ZfvFe!b3Bl2u$#0Zeaio(`V?ctKJ0L9WGBN=mlnwSV% z7(7mMIQ{Ijr#%h*h^F+TagaXpr;q&UBmY11gZKZdG$|hay28hvUsw3h_@A9d%NvxA zre8@Vy4ihrZ2+gO&oL`)&bH=0VGOlU%0f-^zGv{mQ3wf(6WRr$HlhW-r#`))=%Pm zh{B7rwpfk~OdDC+DUs84V$xa(zb@xXR7~gjQXE`5hqbSbMo^xaMq18OO|Uvjj8DXP zMtu!6#`a*+((q5iO3T9bwTk09#_lJr86}!YlPryn6ri1Im>b&Hi5(swPx~Ik-eTHG z3EUk+c3D66IlUtwHQ_GTeW*=w-S$A(Kckhj1n#o@c0a`LXfJkr9#|XxDee!1?P|>m z+`CM<^Ll;Cv`CTOoGx2j%V3e(;mGJh3q@*o9q#saXJ3yx)^TRU#AuP8B5#50+W3XE zUt>$kj(nJpy-C^k5fWX%jKH+*&@ws&#@YeRatQ_saj%b|f-No5w4H)Ew4cuI9r2~T z_a7u+U&FH4G&7-KU6tARK$*$jb(xt@dzm}h0rfKGXUxtpre|W;Y0sOvN_ls3YiEUs zo7Uu|+2TS}8gJ*O(He768k-6`d9p6u36ZYwAVy0jdPY~}P1oyb>DZ1V*}E<;^JyTv(Fwq%?Zmm(?vcV?thk#VajaUa<-R;?2h@^Y2di;vd8IY&n#9K zICQxG84d|ilXQ+ako|w*V2{&*1B=xK4jt}x96IX4!7l}@&K!w32xRQ#cI@9-v!>5> z#FOlfcy{2ze7eA;!`+UHJs(H<+Vgpen1SLvr|pQzaUEv1m!pLVagNxoB|gp z>{#|p;v+lEGo8xLJRdB(gCi2^=noz4_FA*A-W7?aasT2*}vvjAQ>N>2^gUis(oqmXHID z>~S3Xojp!R8)329+ja+?I^6AaT9)(ppoM|jWw{Jwh_(!}X}CqAZIS4gAlec{KRX_s z`d;{yPGfQ=?0;Op(E}h922N69r0#$>wtGhy)vJUdbRKQJDh1NKwD&N(XklA z#?didBiwM(BvHM6tuC&^?9;r%AZ;H2r8Rx$aEt-;`@o%OOpSxlQCwHDwjyCKh5Mtm zW2fy44JZyd(Ka_dJ8O9Q!r>y91H2n!D#l-0k>N080Xt7|$k$$O8ruT3;z~i}BGN7- zb8(8%$e4Ovt;s1(ht&YB>e%=;TVf8ipVf(#jU_ydwj9o8Mdp#cIYiTu6j87}TuAWf zaid3sj$(72LZA3T5G?bYeuj@X}eyWgA7{`j{~SGMx2C;r>_?f9$RHqWdGE?ZjXykW{$ zL*Gxi;k|9%#Yc|iHaPtw^7BFeO#Zd!>vJ!RIg)+vp;xATGko8YTMzGg=E~!r{JllK zHsUkC-HE^S$e(?F)S=8fE-y!Y9k6F{ZQmVF|M1wyFEpuMn)Kz6e=Rcie&fmS$9=fW z>i*h{|BO74{@?y@E%<4|iB)Y}m{9H!lV{S#6;%frODziBx>KHW3MvOCy?bqR*5SMA z$?H#h#THii8;Y-o<{Y)TMsGUnGk@phz|_4r$FDfv%uihX?`|_USNO)ieKmM#S)Ehl zKR)j{_w@^dlK=VZnCv6>oTqH~%6s0ni$hc1zwt=!v4)4Hz4Fb&&+NJ~e969BkN^FX z7Fqb3lig=+IX58Tou5N84%RF6FMiSMiLKuaUijW`W1s)vzGmviGku=gerecqB{h#O z|ESSz`m5jed-lyAN2Kk){kN5$;%V2lpY@oXf8H-~_b;O|58Y8sdg;sFPrmW}kVXG8 zk6ZSk)g|iXulqi|1~*-F50YXiVhXc+ek1-i{n@mYufDne({F#g-RjhE80grIwun+!QX{nhK*DDvP|vx$F-wE7Izhe`@=YYdt4hb zW^9*nA{Ou;@s z3FZ7l8e=oju_)xYNF);t;Py6qD){+s^+bs@rox z|3J-Tqf1DI?;L~Ha^kwOqr6OVDw7bCdPT?HpSnjf&O6(C9V9JCHiPX;e!qRPr=68T z=fifQvA)&8TxT?N;N8+%R6HnR%Tr>3+Ba>3f~N9}b6^)TE=T(&i7G4fPvSd7?6l*eVznpIj$;S?(R0$!#4|`B zN2-f<+Wi^64!gWR%g?^={iE_aB-2%S#ko$T5DO}DAR!^pnF(p9J>z4DLV6CR=%^dU zG(uS+bIPU?#%=0oEba7RvLB8EnKYAwm^i3h#M-M}hR2>aRiBtO(Y#}8&&G4d_R%RE zG1kNoU8f^8A!%A*ZAj`ve~@2*NSZ%O6M0UQGIhX<#Sq(o*drV$XvfWwBy4Q&B8;@q zc+k6@wrpf<aOY09t|~1p6&{2N$z3f$R|$G_3EvSy z$^C#ri2jPwD;72}xL*i7OZF0BGK0m!9Lc_u;2wowliU^GP`JHbtxdXP9~Hy_Y$F6vUBIeaDfsGWw2BTdjLi=`+lK{Ao4qWo?tKGE`u6D zdqK3v5d?j*B)Cq31rmH$f`=t|N`jRVye7fB5>$LArZ-T6Itivq@LdU>lHfH7D!!NE zNpQ3TbrMWv@Lj>Hio(4s6fjsSluPis1U)a3|Jy<;gQdcH36?TgBs4R)TiAI?3|Glu zk>K%znE!YQCP^?)g2x#|xXWU=!2bdLCI5jEe9*3y+&jU&a^bk-eyS5J7S1wzu}~?& z>k?F4Xt3@~m@PN8Zm~$2O_hrK5Yohy#Uqxv64X}h4PMbx0 z)^)%GGU0d)+4l-UE#N+xV5k%A)eII3KJ{cT5n>oDWpLjFPMC97%es%(?;Qn zg<^sSJcYbwvhNqpN>JBA_7cHB@PI}LlC`0q$b`dkz`YZMYYM>qy#suw*~YV5wk|V3h=eoGE;%Fj<0e63mjIAi+Wj?v>zC27#vw#osN2 zx&rP~2ssaty+|l#@NJ>cO-w)3T@07ijo>@N;qHL{auOu+E44 z<$_vE_T56Y1dYCJt2Q;Zt%@7cwki*h3x+@FTKPDID;C!OO@vhpmIwnUz>e|j6hVwP zHzNQ+SN|y#u2cw>;A9C#GgvGb3GQ(dPDcTvop?r5JhYc-1U&>xjA-|q4TyYq5bX0=X66Bs2-Mu6j zCczj9#!7I$1dS5R>e5~!>}2jG!dXD-pLxqD{bHe9g4ZOd&Vf7XL7hwfdxgsqG%hE5 ziC|%{SSWmf!YPEaD@3SWDW-cJkkV~taIdg#mFRw4fIG^avzo#yg`zcp@4E@bYbkuG zP%6Q4306t)I)fOu)`{UfB{+w{Vj)Sgr%EtOf-4v-5~?KFEV=9cLFw!kPQOU7NSObU zm~K)hSS%Qry+k<0AjV_Kep9k@>&19J64XjCP=cWn)I9)Wn7u^El3+POw6D_}DLt$w zHUaLRAOyZb_WeRJgC#=ft7I<`Y_AdAD|qIKa5CV52@1h;Gwc|*xGm&fEVvRZ?k^nA zCny(AGsp{<3GU|wkJkaw|Eji z7%Ud5-XeRcP%Xjhju8Dg?j7mkggn&?v!jf}r;`2KNfrKZJd6U!mw2 zxt9pKj{q^gtow|ht3a~0m-~n^x7Q?CC&2~@@_jkZ4dE67+U2K7hPDzPM4-8tK^&(9 zG`etjlmHOnU}RzCfTlN~ks6Q$dp!Y2#=18?6HbfCTpot|nSdl$-2;$ha2wm&(zSqp z^`}N2_MZt-4*xelrzjDV72A03-V~0zTgY?8(|Krt+oHJc{udg(Ju@3O^D|TcnWYlU=qGme9`!BBJ60u;09>C7D&Feu5J z*kw40VMFe;=O;)aq6E1~5fP7S{U=SIJ5)P*#OM*D{(qPML5+#TvX4)WPe|eTfiOCa z8$OX!YE%=QWg1y`g(u&W?=AP@z4<<}zVd!DZbYU5o8+u`JSdLSdjmHjDK{-McZmqI zGPn^L$*JTf8jPt~+z7`09+8pGoHcC(Sg4eMXiQ1UVX@iYwP7Ew;41t}-9{OnPps?glV-J1R-gt8q zcKRp`jaP7Db_z#h6@4^D*?;zt!xs+D_$XX?nE26{M0Wa7dNei-!)FgiV;Frjwoy15 z2kqgglHknT?Bh`ZIY>VWM<3dIdpLs*{SV(^=Z=7sC;cA5N3N8Q5BfLzC==;NY0+;Y zK6|*(6+A~@5c3iL?BS^MBAjszpaEg%D*~NWQdoPqCt;^@5lv~FRlmeDJ*;G>AB7_v zFR&yBQO0PW%IdD^{hA>2B<#Ub4P1IJ;h{Qv*} diff --git a/extra_lib/lib/android/armeabi-v7a/libz.so b/extra_lib/lib/android/armeabi-v7a/libz.so deleted file mode 100755 index 2611089837c512f7d3b155b0adf9a359fa33fc89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68056 zcmce<4VVIFo@StTR>x6 zH{0_Dh@h~}IV+`iDuSpD>sF;m0?%k?t%SPP2i<`ZBvu~OE`BqoU zNZj22^W6LV`=K~>PMw$E`}v*UIaTvV7cKgfWm%^6OPkq7xr0-TnM;~$w@k{I>|EoR zEYGHx$$DP)_`h|HQbAXS`nrzwMuuN8ZN*ns8N2yBE}Kd@mqS}!ZOL#Tb^AW93FFEnPp#kSt(zp3JpHEMsXY8`uHWK1?Kf3C?wLzIos@MX z=?9YZlS!&%A=ihJ{AAJ#xz6PJ7}q6SpXJhTDi>;HrgJUjI{r65DYzm@W4-2n$?+A* zFW~A)$}f74=PHtI&@XM8oRAJT^ApU=@m=#jRa=oVWWfV>TxB@1VamD2DV)&)=loD4j_km4BPG_0#x&Mg2Lq zAoGB#=U2gS*&h9D^Y++cp3eoo9C=t=0d}DR2EW{!!Y$0zGc!UhNNq&-cFr{ZLZn|FTs%eoi^{TR*kmaU6VWX@6_~ zG5V}IuKwq#uX#W};q&F=p8uTuY~Ya|YWxT3Z#VpwOe%jn`PoCq`1u|1dk`bNg?4(r zk9yUa$LP13=Z_5@Lz_;kHGRbc@< zh?4tB|KBCee-Qf6PW8V`I)9)!cPRg1o-aECnkD_64!*Bnj?9tj`6sBqE@;{%$nD8PAU|}N8&b8OK!4jrU)rhv-Q-JjHlOFpKSp`$r}q7n z&qhC6{MG!qo5|)uQq}($&s#s$-+UasUOukBZt@2q-Ztv0{i(;bp9wszpZe=OuKj;G zuK$0b&iAobqTgg@f{)OCwEq~t@1y@)F|e=DkH)+Bxbe2r?qw#~!^!hANmrb1%)e2t z`WKLH17ADI_wc;+6MP>fe=Gb$CF1(y9+Nlb0WNoDbB6 zN%GH;wtj-|E8`GSzCivV@NMyL1Mtm#$No(;lX?FALBZUlMF!xM#iY8 z@y;P_{RF?c;)+$htFFBIiW{$9bM;NvUcbhyTGQ9N{@f2AdvM(sufA^06|2kTE6VHL z*5fNyUw`eDS6|m_NXzScH*EOi^*3I(=AGP!&6?h|eXBP1UVPov8?R_(TIog9ysCHO z6|2{;zGCC5EBokW{c47c|9_|Ft8TgRI%=&pSKZQk{aXHCbM^Y()f>54-PgNneee49 zda{1~_3O=sjqCe*uQS)K>g&6HwQ{S=UozMBUaLg8RU1Kvs@GkwY_rWRD!6vTRc7rM z*I&J{*Q{OLcm0N5bMw>;{HTO4s*_K4$HP-rj3kt(Wv} z=oO%A`)=H@&a7=Fv{--jbsN{3n>JjR++A_ShK;LMUvtIkb=O?6cGcB=KzXd-svB3W zU-RBso@*qRG1?VQKHig&@$o{v9CJ zUwv(FE3@oI1S=Wz!t3E-a!;!TSFhf9_4U`STK^?;#m4ne>-zP*Yp%EwwqFw$tm?b^ zs_WvrnCPu1Yp&jaxLv=d*Ia?1T(xmsGn4e&l-(rL6fls-6Epyi`OGXt%8_5t%~m=Pg0mDSSz=7)rNQ4eiG4ZawU1H0tx=O zZ0mj;ir}^SLmRF)q#HJ_S^dEeCYfuKbWNXb(6^hfUUReLd3~&Xajuu%uef5(s*S5! z4|E9-)!(5>LdXjW@lFms|H%T>TsNTFJ zU6`bclC+eh-K5hn{s+1&b0W69rj)hBGfFY&-&cwge^4n4w-=N$pTDehCiA}1)0lIV z;)nT4@y}jY%4B+2DU0U6Rr*Qh9ihftblm;nargeX`&Y)@zcB9p`{V9wb<6dFqn|$O&2nMv4QGWHK+;YkMs=c9>7$#U$W5Zo zLSydxi?3VtPO~If$NdfET>b4kC)L}_3+tDj^~vzkYX?Ku`DEypHigDMM88~xAwR`E z-m#x84*BUSWp>3k#bG~FI}~+P`+bZ1EOqm>+x#}_c96&O@$;nZg=6(|)Xx-}^*iGF zLw<%jopJxo`V+?0&yTBr!npbqllqgWt1)bMFl@opW|ju6F)}V{I8ruy13V`jg7JDTvDIK5;vP03ZT_t<=aF*+k<|G8kXIUySOAU&_aFw zGkqRCe^UMJNt5bnvn;s5&DGo8h4ryT3kKdUEEw1^ZP5SP?|4CVX~{ROKHV3=eb84s zwNcutpM|z*Qw+xPg@LyX*Vxz*@#{12C}q4LZF_;Ky%^c15L*6=(Iiu>=fxMwCi)3q z3NJ$cJN${jm!VFk(4=QJsUx`C#?@&bS0^{FPRF=9o#X0E7*{7huFeVL>P#G0XHu(< z4}YLv3=i;Sirf4jLUS8An`BQ3Cpk~mZD$}%xr4stTrj0QUdjxF#_{UNUBl8dXd^jn z(LMuB-ad6weeT%UTUqX{LNo7@w~Ah{4f#N^sOX zarl(6vx5n4C3HSA=sWF$zVhY5S#QpJ;WMG}?}~(vakfXM=GBLs`=b-UHREoN=DA)y zZ?;D%=T83wXt2=U6WRXuXm)LThgCm=Y=61a zyhS9sZc5~-qw>FLr;WL^o+t2NG>Xtxdf#8{a@(qrSjOyBoD_wMn2JZ?N^{%OATvB7veGj6=GZWC$@ zXAa}!2jX$krs7+fivM$Hbt+?tk9Q(7^FMNblqw*zH7`hwqTBABe#V9d&hE%5EC@5j z-O;ILSv}=Aey*}R8Y`v3C0&iitUPu5HifC~{&30cMx$-jj)pY{J+Vk9?`RN#_fs=> zG_uC=^X1*xZpXJvyQ36o7k!R-CM?pAU`#)>HSVXFYcx8)Li>CrR9p3va?bS4T{{{% zXO=(R&<|<1y*uh4b!ywfu`2Kk0nbD9v-`F%wQWlbPuvgibf|6rjz(wo12H`9q`39~RMfupnheqVjGk)|B(8GFoQ+>MO8ErI{m&CPLF zHR+)G?X=I85;_#m@Y{>0`zfxmayDGPrqMWExYI5L9ha|Y#A8`2heNd!JyVRAohe$r z-*1C%qTN^tx-CoSCi+ufbc^W)-PA6-n6`{-XlvPL_*r`t`;z6br#ph%D}w=*8eVjL3MTYs=QY=?$f@vDDF zqs4H>Cq@z^cAG7+-z2lXiOC zduJjSo#Ev}jmDX3|G|M~d&XA1%O9lu4YW`CYiCUL(?*)Ba8EyD4!EET(xbRNb+eLd z+Q<5|s)laKqm@4eu`_XlnIx?mmbmb z8rmg%QT=5L6Ivo`ExpJ9m+X_|JJu=Zm~6)IGq(7drA=zFXorkiP5F%5&|dPXwj0Ll z1~MA!hGfuYPR5Q(KUmh>_qvOW+01LTJyC393kRZ%eF3t%xURm&3W;9d3J#YHh3(KU zh5@`Y;L*0I5=uvegKU9xMX;!COGl)i@6wY52Ix{GWe{Tv!pLh z_e|e98J`keG2?XQH_am#|7z?=m3h?R+W#Q?7k|oH>+9Te6~AW83tu(-meh}0XT5pB z-+U%quX(F)d+3~-t3USf&(@|D@PXPS6C<%|YBs#o;t z*%th@ga!uMK_}6`6liNI&~MH=G|1L~ANyP}%VQd7YzF4vih8a!wo&`(j13JnwsGtS zE6uT?eW3B>gXO6AU2LZEDt{H461Dd)_#1p0tLf7;*LB*G^Xu{#S2{07mMPc4aVkDl zdOdQ0oUuK+wEjP7-{;^*n)UU6;C>$W>uSp5|2WilymX)Gk0d)5Hh7-fKTWh+SL=_; zPJcAt?T<8u=qNvOrTap(o_?(uKQA7CzFVce%Dk!6ojlJ}=^ww6JZ0%t`}DZ>D~L=} zPB+ay)W7oc)R*Jc=Q|bpSQ_Ir&#g==P=3HU6qHym9B`fv)aTI)&U(`nieYZm{ZU)# zPX9dmpXZLmuo&Pzle}d%)Tb9mrsG?5e~9Nx-UmxgvS3Oy@lsCFsH%M zy3MO++@Z+2`lir{w|+0He}HtIGlI?V0vj3&{jFJfxz-LTXSKi18H(mX z6VW(}Y|bkUW!oIjVm%88@WR1YE-ekMvNsjE0w(CqJ^8d`^KZt+?n`7SEm#*qBg^*c z^br&o=P~Hg#=0v@+lA!q$`EuIiVi`idDO)g9g%(r2DR6kO0r@V{q$*!Kc2^bPG8+I z>`R#&B;!rG^l&d(XFlm<-BT~nZ%Yrh#r!GO39ZeTR~(5J#Lt%3+lt;-TC%f~I)b~E zzl*$Nsg>VOUi7@3RC1-Y*~Q!&Wc{}!`z3#B13XmcnUk7pufI<6H)fjopOJ6zm$2SD zuuE6f?&t+i9R6==1MO~QeWvx`FX4BgJQ6Je?iAxjY@6fr#`UZK6d0X`BE&N)vHTF<8<$6}e8Ok=-ZP*WBv_9a~X9Bxj z6P;GpJH%h^#q&J)ewcxJ=rH9l?Vqa~+l_YQvzGLf$#r?h*j z&Ag>L8D|6=NE>@30)}9sbEUt=p`NoUmRs>haszEUvyKD`xtg*7i)&3%$ z{{XxVIyjFp{*n6_cW}0V(<*qu6w!#blJyw>!V`xd6)%W!YTcZ3w};qY@LnCIsrMI( zU&MCDpW1HzI@?-H+b!7zSIM-EoQRH+P3i6e@R9ze8CS5(=Td(LoN!lSUGC!^8x-5F z72qIyEga%Gp0*`uAzG=9bXu}*1Md_6(v&~%MDx}=I2OF%&0onb6+`K_>VD&2#@>?c zmCa5Uy~!JeW9K(*{sif=!H&2i4eOiR!;EtuwA&%SF<`Eqkt23sy~oTpQ`CI8ygo@|i6-EcDPm8} zq1O$xm7YtU#ryg2<$!xAD9E=k{#4{{8qcST&#HG3W3}`G9tW|VDGtW^u##u7Eh#E~ zGZejvye>$_o2}CfF+Yxt+0;!hcrmsEYU2ez(tX_C3y90TW#%=@v&#nk?~!j~?HBtN z`C&ih`f21VE4b8Gj3+o-;EK%}2I%{YbBHzEl6aoQ7pbpE@U`4S(e2PkKBM4Di6)FM zx)A#dMVCJx2g`%p=hSb>3uZw_#*Xz&V~e)NsZLwqR;L-~C9bEZ{p&xEy(Qe?IlT9H zj{kry$(li5v|e&Lyh-R4%PeK@(A|aZ?$ESM5j#$Kme`Hx8S5gn5o{~W&`#*FRpa|b zJBh5z-HK_2;7VmX&O9K{|4$Sy`FSF<4G66PcX!? zp=axOCf*`%_%P*|Zht4+!LwD#Gv0Gv{_8K z`jm}-nRePY(A+3{&E(wl4~T=0w=qrK-T)38K&$E3{XY0e-?hIW|ItR4nZJX)Jrwow ztPkAee_hGFai0WFWSX+P-Nd=&Ggy_)DaF|Ppt*_TzyqPh80trUM6OKC5ZXvL7;C!a zd36lo5!rCr``D&~pW=G5T`32wW4V!8MwJeOS%Z!_4fdDP1@(XL@^ zj=#XFCG|6*L5nZ%7Y}JG9;HiOa2j=1ILa@ne}ZS4OLR}1Z^rzR?k}xF;~AGBkH4n3 zrKa9q$20L(GS-sC`Q9-*z;@Y;1;DJnJ)uvGeLb zjjzRkohjxM(JYj_QLgcqz4b(DPX4?}>ixz`F)`t-|UUUg+@nf|B69w9fq3seYMrXCR}{=e@^Rz!)3;{as_sc$hKP zFvcjU)#25*!5hJ_zzj#ti-JT~^tdy@V)CeIeq|9?fM?xOr_2~1z7-gfe`FUVwlNcY5!(DkYEw^Q(0 zw$7Bi0E76d74v>sC_h2+s5YAazX2U(YeWyr{mJW{@DzH+>#cUPJZP=cg-5&bCL8xz ztyh>zy?Bi#xs%`3@)_Ihrq6g+(yx4m@xEenj%S?%T;uJz=B<|Rt$C_t)387BoFv+2 z9pts}#NpT4%n|wA(qZYdXx{R@FNbEa@14w<)<;=4q92-@j(+Z}H|Jk?e>8vf{m~G< zoqRm;54ugYD$oiV$?q~A^M~i9Q&r0Fy>2Bgj30`5Y5HZiI(y({($on(P8CU4a4j;Mqb&W*60WTAkNmHu9GX!tSjMwEpxK8)4A7J(({73C;B#ZGwPptK; z^b6jRY)nsOPn3g>=1E|7y=iy%|k9>-CQzdg#a*Ep|+Op-p^0qhm@4O}ZRoGUoz z0Kd7cSf+|~?DY)w@$an1BxAjd^8hiK+Zk7UKGl)W2yN(7V^61Fjg#g+!+kgR8dKxh zTwPo@Fjgn+TX+=dQ+wVOLm-$XO*6Dwx&+tfe&H%(a9Jp@3^BU#{!Z45C)!6Cc1o3XSn zt$pfw&{F%-8ZX{w1|HE&vLhZlT-zmYz%ChDtM@SFvwz}FsZXb-%5@>9WMlpU}K^JT*mTO^-fFIUS%(5 zX|R#@R(W}37xzTdk;hvd^7DJc6h2ZHeMv^Gl^2E6k)v5Ny_s687DnZRT^^)8Z{}S3 z@A9wO9nf+S3D+X{w*F88D$+T*oy({q^)`A>X0|(ZGLxc4>&I)uD3n< zFZf(tl=twQHwS~VJ;*cj&F%tqpj&rQb%*?Rc-ro=_gpMS9`d7S)72mR=``Lsvt_@M z^B)?^LKd`M(S1Aj#FpdxHtwNUe4pk1XUVjCS%JNuC(-j85)z zoU6(ee-V!neQH+WFF#rcbYc;`S2IcQv7q7)cQBuEfTzRK`Pa{J=3yv$7UosEBCs)}FF2%Zh zszTyloy~pA*OIR$-|bA&InF)NJbPC(;CR8sf{}cIy!WeX@z^Qr3cA7Dvl+){Lech!vFEA+nqp~h%5SWQCnH^D=O?<)G zk(&bq);y_j<~+au0YBZrsP zZ$ReSN?ZMntnKATZR2z-iVPH{L3=A?Y(mni;0 z{fw)*cWM2z;v@OK3NZ!uHh;dS_{oZ(v$WQ4E3NaCUVfZ3SJ~>zk2CNzXKweO_(%L($pHPfIRn1> zLHB&)Y^H2;^bESEy)n^0Yghb-sjt|G_7BRG3*JH6t+W*b>GgA!UcYR>*Y5TEDnrpq z__5dK94z+Cs`dKBeS=%g*e=Um8tye$20HVj^`iRM*$C`|zt>*+>-Cuz_nOslebFIX z+T^!raX|Bz>^JK@7g=uM_bjlw=+~3rFuwdSGNkhFP@Zy^PgmANOk5=JUoXsk_UA1zBxs75?C&{;v!>b@5>>s@?*z0Z! zWQXOOV1ohIs|!!j^GxvIeDe&~?2O|fqUDB|j>8eYSG-nlU}W$1>g_Vpy+AzO%G(?U4vNVk>qRG_5D-R-A&K3#}I7lgznUPb=ueGcXBV4$&XV6NA^Fzi@$hx0CxsE}hp^SJvR0{Ahym4z*P_Qqx@)`G57-^U*Z{`;GhYiF#uZPIwLojJSeZ+0RRk1Ax9`66jYv{}6!4zy=p86^7wI-RvxnJqG z#aPmXzhIsdA2aY#W9AuKV`*IY9@MC(zBPt?>=ZIP$59`gEsFbC99(Xh^SUT=?3m{P zbePs5JK}hC2beAf#tdmUb@HD2T~a>}na~&-YXW#_49RYH^}fjRDzVHO^RtHIiOxmz z_FzN2lpc3`z!}qLX#mXAV!T}Td?i~vNA7|lJ}Dx+engxq#>)XO#*@GM`;4tV0`O6r zUvRE(5ofqF_&jO%-bOcb{&aUJ+Q<1k>{=k4h5zw*=fPX{PWb-#S7S3&=L^Can1yf8 zIDCI0TD=FpJ^u%M;om#>ieLW`zMo6*z56}zb;jfS8}Rwd_%ke**RNu~2KckW3!Jj| zfm;jr87~vmx!7Wz z8GVI5)z892zgX|Y{b8Gqa2ArftKzzrJ?Q^sQg_39JbNyA#=dpjzCe2MI9Pv|d@EMX z8Z~&F`d!F?@VD%3p=^}p;&TJbsn8>De$dzm{7rj&uRRxdZxNPGS$1IRLz@eYF;{rZRM*F_-)&!G~<|eM?KWfIeRFleo{|; z<|$LmBv++v)l2LAjO;+%&Zf-v(jB#Jex@3)t$o2|Ik$!B+LH~dhK&(UF7NA6o~iyZ zZ~(L69-mP7X7K%;40aM6yQw1^{HXn6kg{vdJovTSyw7Am)fh@}?Eo(IM|>um2Inob z(R}$J^FqdB?dLHzc3tDhHi$l|uXRRRG^;i3d&_=eA3M8hyx#!L<2gXGiQQKFxUEB) zz?n8rHQO_%%t`ETmiCgN7$)j|3Vvz~@lW%V!}u2gk7Sj-nj`25y1yy<9mx*$((lOC zHve}d3vRRR2Y4>Kpt|hA{aW2QCguz)_=W?mQ$x)p!G!4Ixn7BU+Mq=j`vKqLUbaK_MexUd zfW!Rf;onp#cejRl=La!-#z}ktr#WYLI!`u+?4}HKAoGH`%SmLeMq6}cqGS#prD=m* zXvz^-x>|mdj{0__Y2ETg#4y^@<<1MKZ zk9of8>YXO`Fxhj}S@_-OoZ;`DdzzmsK~rp_VxsCJ$NF9NlX--x6B)!-<7|&Y zjXWinpJL@m4bElo__;ZccGiiSz z^EP(CFH~9g!nX?Yv(LUeu!>$VYTp*@s|^Gt>c+7P`YBb0qMOlgos-l1Y8A>9Q=N>@ zrS*Q^>Gdx-|H6=W{ovhF`6}map*&?@h#W4i{}u3M7(;7_3plHgh2JImdyVp&8Aq_= z$JK8mU!onn2sSZSYX2k6dxnnI)YU~{S!Xt#9gQ_MXE)ft>8P&qjr~&N-ZQMaH98o6 zsXF$CJ*syDM;e2p#F0)#XIV?;;DO~_%zFnz{(5KZjXZhLTD<9`?suvKL2guI{jg!f zqxjtgL(J3}Y7htY$AE1=yiRjYT()+<`($vt;G<3t?ef4k!L4G44>ivC#9+AlL<@aj zZF&xLbw&dDpZlC4)~h28jcY+C#i?%w*Z4h8=4H`tqXV6xai7X*-^YF0tdxIx-aK$# zSZ&VTE9gV#X;Z})qXm?|Z`SGlT%Pe!y*Mt@QBC`W(UCZAc3Tx&VeSf$tKi$_cGk`P z!OgU>cqim$dk9)Dt`j4kp*XK_Uq_jID8V4Ux8Ts8zF?QUttMV7ey(EgZX@-&p@DRX zug~q^a7DZ(?IYFt3*PR$hBM8VBKIq4uXdVi!RPBKyWdMYS88vzzM3_j#?*O~mEipW z`qp|{K8$n|zdF{wSg50FsKWTWU4f^JsmmfPw_1K4NT(Mq_`h^U{cJnFrB=-!%^I>ew&Tg}3=LC26 zX5-#{&ws5CR?Ip7eR!gK=pNb7_p+az=yVC1R)F0CR_Pn|3wwgRz-!T2YaHp@mDp$P zYnQ-n88nnm7r<#QZB~pjS5}Gt(vM;%5x?eL zdhs9W|8cs&2N~X_3s=%Nw5YdiWMUU)$Q~?1PBf>B--F1zY^LmE%-bq`=Yc03iw|C;;$lu5^T z&SSngjdt&%DKv24Nz0yQkkRpW=IPwK?aXb*(UwVVhQ`i7KiQfGpfy(voBWz@jngTu zW#qGrw?ThQne2+}%bF*f=UVdkwZGz931fT{BTIZ;HbwhJR+%}ngr8mX`ej38t3M+9 z0sU4QcnA%(Z=-opbcCM74|HBVo^u0iH!&CDLGG2J^}dbN5#HcS98r5qCCd9f(RKJZ zye~Np?-S`$Jl5XG9LCoA?Sk_Q@A!JmKU<{->MOS6?#S1%3!cWh?zq0^9@jUq_*hN}mJU-p+edy;$3 zM0T>)s?UL^(>d=dI_I>$LI1i~dl=`+yUvZ6GKX~|H}T(5@Jci z(T9Lh_M$02UU26BXvTz)!+I7tXS1$()0npw)pkY;lD(8U?#`%f=Av*L=QfP*)dw8y z3t;E`MZtXf{MWx@twa5kEge_9&rSYoc|Ji8V`HV-;ceeHP^w%n(Hd`oRE@=z-`=?k= zmy4${pV;>y7P~W=4&2hS3Uus&2a-{~N5~rWrg~e+L$u;OfxV{c?IZKJWWcI=hiv!4 zr&3k#Y0LgJ_Eu}{B|A7LzDhPd%)*QZ z&ju&<&zXCl)>=k&(MR6FSX!SAd>!x`_|b>$(HG7d2(@S99F@#K1FsnJec(=ORO?-> zbvB37t6QU!pYno}cX)y8ZY3_^)fd&aM%`vBHfT{;bhfhY(EY_>w>KQk<-Wsg#wXeu z&7ti8yzjskr5xUW;hA7)jXB4@54+<**LRmMO3DkzmG3^os<+vj!;>e|pS`t_q3wd> z>)@Nt<2@$Jy{{qM(=+i!ovp-MwlYs}=0NW_QLgs`7bN!>5M;hspH7;lPs@I~K2+Ko z-JPE0KkyOOk?gN;serrL+Fhe`sNI=&AQG&UC3F+F4jc)_KeQuJcd82ZvY@G^+%mbaDcqx z7U*Np=2RLtKV#~%ndj$yuo8_pm2f&K=M2I*r2C=y8NXKvzwudOUcBSOx0b@5FH|D; zk_!8>#P&YMS(rkF^-+a=rheY#W)5bY{U3NbekWeGDDChJU+)a$?Pkd{GV~a}zs~%` z&+X>(Z=BK}E^5j@{23J`dfJo@t?);;07;vgnqwOzAMOb*6SqZ>JIwVxUI2X$A7_3j?xyi zs#T)tTJuh7o}+35_Dr=B!@hXWZ87}$>h@@Q^|sKA{+#tCvN8IzsH;j$g7bLTm96dA zzP3XAp4*X(_%pgES`2@txQ^#|Xu>JL3<)u)3y{t;_r)|rCKzWt?C zKWkNoYt(zuI>&oav{`xbmMC4`>WfBAnH=U!Hf!MOQ`j5gH_k|7qC3>s>;4qETg~|) z@T06L7K783KEq57um)t3!n6G!pKfurroVc$&O{$_gSkT04GrqXvtBEh6SR(|a6Nc}Kh z)F<5K1*MM-MRVzsxOAg*GG_%`@by0%F8;V;#h+y!f)-z4{SplM=E){KR(|J>SWZ@+ zybag~!pHrcLHlIIk#+{tp||9yqY5164nODXjN$Ek>jl33<+ku)b4QGe@n4GJ(EE`$ zxnpmn%HfiJulqbQu-V`1{vaq_gMZ4o81_crig^dF@_(Npo-29M z9?i1-r09pm8btKYY5#{cNa=$*0|6f_a2Q2KOS_|$*fqOySCsK~M;Xp;=j^*8t<80o zJ^pTrjjVyoKJ1Yrdt|)&0n@ZcshOMnWzc@Fc`6Xiwcgbl|ISH^<2C=?*b>FeG{^iD z9cDcnE&juyFwYs#2X|TZN6xQ=4?Wt91}Ft6~m&T;F-Apf6Uf&(}Vc^2F+c z{k0e5kJohubbqbJzWAP>bk+9!#7y4()7ZAS{eG5s&Lg#5K}T_S zX{33+JAImuoG|zDtsd+rXO?GZUDFNDJw=UkrGMun<_gA?Po?u;pa0O7ux(Vfm_2LS z>0Di|q_r?GmKU;r!T0Q{>~+@$!%_QZ$o}FwazD8Z-->g=fplO$XQvcnQ%qFPbr$mT zpBM-~{~`LL&lBiVYw%R*Q*nRlTW8u7W7^NRGE&sp&$lv0jI8(vB5N3c+X9iNt z6)AX_gCBc~#1esxcX)$bx!2!Y+%>tw898a^``>SOl!s2*TRBMBd~uyUkQr8GMVK1B zB=ot@LC<}k9SUbV+v9on6f+PC#=Z8-tc3^tU$I6sZlT_9GxxX_auNdHl0d$xVm9&j zK7?0|IT#%E?V7wh9LtmZQ0-?d9K}ySCI&e(H#&=VXvzcO==uV-D#d!8Z&KKm;H%JI zW617&h4g?u99Z}PIvbq9uD{7#uqcVaN3I9;AG4o~_p0WF|4MA`k+TOw8(bGZF%;{UVoZ7F zZ^=Zutg}McS#<3GtXJq#dGp@m^$EtjOP}=a%YUR#xpDd=UFkq)9lj2*#kbO-;cj1$l9;Hm z_T|yq)4_SbC)u_N^69xMe*KyIO#OpTV6(ny>f*sSt{+A(Ht`Lsiod`7SDY7Tzsh|M zSy@@vndoc<`6+vK`sW*j&>7yQI0Jne@{uo+mwZ3j?`tmITSJyPhpsc*T6eNO2{_06 zxYnnNjc2h@%v+t`IG-_N{b0-z_KWfNm!1wDcdPNZ>hp285)i}Z-7Vr9j0qf*g`aTE zS3FC2wt=%?5pMBXJn?z-?%;Ra>WklYt54F`OI%NV$E}dBJo){EhWfUm?CM_jX(aFM zHE39ahV+jrE1VsuF`ik>OOZ9 zwAmbPU>OKZcGYw4f$@x!G` zfd9rj6y`kniW&Bt?An#U%lY)$fRF$7{Aei|*Qo~hj*Sz~9SAfQ=he?N;K!OU(D?=V zNB;?&gqv}&8D;nZtwgs@-a8k~+Mr*)0!{EObNG^Lsh>hdc>gQd2i-;IHI$|CWB&(f zOqX)CA-aejkFtihOMUodmj(YF|3>Tim>w1AFz zAHk~wx0reteSM2Qt;+48HM#}A1zuBj(!otZSE(8)uKjSW613HR*m$_c*p$s-zdl!c z4qo81)fm5|@%zHdZt_@1EaIDloC7IV8ZFo-q7y5@G0nWCK4birZ)Q(?Q)pGTh1z$# zvB)?@#wjuma*-=mqchfkOX*qGC<%_mzHlP_FX6il!tY_Hf;@9x6g$%51-uI24{?Lf z2grE66Ws6R`S|aDa^95p0nPJIK@;^I)1}l4FIEPdfb)abvQG~U9(yQ=i655;qO-EOJ{{1C7~QKABtQR`H0n5x zM%RI(bdPs{upv#mFy*REL2K-@c`o|t*;(9w@DG_A5?YCeqMe?d)OW1S?bw=Qbl()D z$I*QWeF%>xPd4Gx9plL*JbMP7wEBOqzQ02qy<@1kF<+=QPT-7(`0?1KRz0?*$nA#8 z*c*>jkz4Gk zdRJ*YQo-)vJD#il8MCW^d?I@Xz}a$nuc?TwFF)5fp#Eyj{?Y}`Sr#jiVk=#YAw8Dg z^%(O>8#=q6@*H#Qer(G6!r#BqRwiar!hbA0+gJ~bvh`MRQ+V0~=y=6vK5Wi8vi)h- zkLQA=YxrI&<7X@1w*{i(W8%XZ@S&ae{+Vk|z~2Ao zgifgf_5-*MAQv${_HfvBuIzb#Jii^Feb)V6L*t1L(q*gobR%Uaw$xn}o`9dc>_X-? zyVBTL7<=PDp%N@QjWaLAfppG%U+r$bxz-o5{tH%P%dL+wW(7Q|)krY!D{*F}yd@Nj zmbW=Paq>`bgN+Q>@YMbR{#bMDnO)c`I~hBcfeU!AXO-3_{-vwXNAP;2RAJ3hX)J@j zio;%u?NmH0{u^_BklLbI7;RZHui#}1*}~OjycwFd%@EJ)`6t$JF?AKdrR*v-+L4JR^Q|0TQU&) z3ghHkvLN}EEc}6V>i;9%_%6qcm|x%#+ZgD!4|w8pv+zuQgZL+2HudXZBc>O)iC+7h zN}&1eC>xL6T>3_;2Tl)s%Bmmadt`a&5XaYw)yBP)S!H5qCBE5;%^hT&@EB{qwDU|O zU#>J}B15}t_eYAqYJHog&KT>xd~H`l{(QPnX{6lO8W*3>+8kS?_^8(6ih*e@zJ{2z zzTxJecaeG88a>fCkOK$W$mJz;F zyVrR!unSjm7HC;;ie(-jExj0M&A|7+@T<24inV8*0bjnxqsW8mOHb0|-ElEnZ`u8k z91H86~Dt{^Lel`KQPc=kWO6Fl%qVxr|M&g2(930=s$*H2!?B z6Fd|b*Sp^bZi3FVe;;^s0l(%u#qX`^wov)*>h>5X%>}|M@BVrr=jWXe;vTpil z2S4E={M4s#oG?1*w~tmDp9fd@xWZ2~=qa;CI%l(A*{E}8m&JQWcJ-?8ALs6f6*|c2DB77+DC8qJAkPLkG@+r1}(cvdxqy!xk`I>c9r++>~ME&ZgcOs=j-PVR;B~5 zS#@YQTRL=4EE}%ksE3e^)x;kz3z*NoIUT%2&qu3&9K0`q+lGFkspLa6m5hj{!l6qv z1&@x=gRxxfM-~OY{QeHs0g7d`*MNT%_^bH+ql@5;bnAA%9a&lV$9xMUq3LYkYb$N` z*WIZ19WJY1i(H7FelKUi;d!>W)@T3Zn;LT(ypHE3^h)w-jo!vt%SxbiljPLm8#Cki zI|2SmcAIo;%IU-G~=?T$QJZR%26 zx!P#f<8O$J>u)}FME6I__XLt@(N?naz8}&jeAT!UfFbUac27`Wx;c$8+p5jyde#B2 z)bDIPM_x{(z2u?=_k_{SO?lwCY>)g)`9GRJ6i<*1lK*2>n=u8^Do0Eq=9k-Ar#;=! z+}xD^3(@b@;ian;PuNDRM(gHE;{{@C58Q8z&7sZK8I^y$hWUd19qmEl-vkCbm2r_3 z)}BN3E!&Chd&!i%L(JbV&c(No-Y>?Mj^Il^db#r$rZn$t96#1d#v-ovuCe|d8P60y_5Tc~JU9uL<-DIMSbZDn)jZyj;LL?T5dO7d0rt;hI1bQX3Rb+I`CpCKC)f?W8?+aC=^b0W$EG#d zUc1Q;ty$yuf(+lsJcIpT^ge~GsO?^4MQ1+rtpM3O_JEpwqB}YI-D~vD0s6{2M$#Yl z#E-;w2tARGJX{(HQa<~3Wt}bD7M^nMrr^uyqgARTvFRavr|-e@rao%kH#OGJ(#I0A zVOFyTcOiBc*>#(;dyqM#WiK>_Y{qDLB*^&e|5eDNkEhHc9$Fp@HCD@J zka5zyS1cPXyCS{UI4!-GT(;WD*2osM>`nbwW6x_(IJRMV{E^rOAgkz)Y@yo4b_@Aa zJHGGvy!I_sUv;{Z`mMUsec3eCwUAfU%hWyvpMVWJCV&0_e8_0tppMQ1y+VN8aJ{~o zlMYXh0>(nFFMNIM$XzMp z=SYpsH>Wv&7~65qtF_J+cIzw#u(Ds*X&kS<^hdl4$Qc8xK&*tnW00aBw?KNa&Jp#q z_tqaRs`2fR!XRsoLG43xwrDVNxHuQY`@4gY%QcT{K389DFe-9|;Ac2D<#NWT1%sQM zZ)|-}OfcBYN5r6>pI_TSY^vXPXv2BAt)}SL=M{ED^9|!dhiNmP3Z@(!^5@aFzL}#v zt{mUK(|ch0yCL#7tRfe4TNZqE?oa1b&Y|8svowu9q%Gzz#k&NT>RCxWr&Q(KV})@p zt8*qX=B zru-so^rT`|dru+doUOcwJ@KX5bK5H2>?!ugHft`=^esuvr}N`A@9svAI~1|Ud&DI_ zyHtVayBq0}7dXK9Q_2O8&dK#0DysHq&&j`gN?{Sg$rLKupD3je(k;3(8-KD zJ8DCpZggM%fcDET5hrC6_H8t8czT zgIrCiJNDo-+Dvs#|1|1M*15=|f{SmE==^0%PU16jg0G-6lFMRQ&2TnQW2E8ReBcl* zGsfRRANMgA$A1UlM&O+fe7^-;`Yuho^JKl9zqQ0!gt`IFsrYI7j<~)bZI$rNcn^^8 z9Ph*ryHB|2JAg*Mg{g$|u`lW)$DF1%>O*TpwZ%t_d1xHY;yUaXvc9Ds^_hn5mgFW4 z?TMcur<_N^hvu1Vvc5ydH>B_rO5UJg(E2yk^cQzncH4mJcS`Q4ld^x>7^``M#EN(5 z?A%+(ZX7Ea*Iu?-W4Gu-ziF$~HpSFLuS?@^bWo=K{8(pVSe)Zvae&1E7HlwWn7_T# z_-4U42g%AA@r`rZx<$ zOY6DPFf!p!<=uiAUFDro)-=CiJOO#uGx0;;6YeSxN4LZ{>K(#kbbFez-z0MenUlXk zKk?sMnQwM5cQwDWA^B8WXdQo})~YaH6`Hm~HbG~&yE%_0{g(VXiOrO5^d!2W{q5Q2 zuGlVE=$Q1wl#1a6@NO>n$nVEMbYgSrI_sN89%h?+qp6e8NgrK4dT*p}Zn1~cImtYB zI8)PiyY$Vj$C7V%HPf`Y_poe_zS-4gnm!JH34m`~?TnUwLTimB!9@0VPwyTM=ioo3 zkP~=zUJ-p!3>u%HZb+AMUMbDrgt6>R{!-RMi+JBQ+7`aXM8IM)!LC4ctBP2mdiv&qjVzkv4Lz?FXc&gzrUVrxp@a4~#~%pAFx zYkI~Uxgl+i{4?b>uHWMRTa-V`^&;1)7WFCrDA!W*S92{_o_gQp*?;4j!u`idzfSo> z+*i4N#r4lz3n|l?w13lhkeAjni`#tqpWZrjpf2ArJ-4xZJgW$u5`ZXG8 zZ(B4t6&jo}nX~8f2g9GudY$#hVEFlLy`lA^=JO2xLkT=rnoZFM?m=$pcOtP_D{Ho% zf~<~Znm*t<>gaDWize%!*GlKu_jFhXo;lCn6Aj`MbJn`9F|zUPzn*wsYSDJX4{SOWoQ2o~RG}q~FV^qxobG>*~4GF~#kNf2HqD z*NWk~+NSJed~a~fa)7RL-JJWQlWorUxzL+7(y8g#YJCSrxXpSGy0_%w1Ks>B;`tq6 zM|ZyuF9XTd*ql@-xk@?wjfA-aKHt-dWXC&!S9H}kjU<;owm`7zj9$wg{fkfR09@pA zsP1&|kxkdxYkgnp5^PW2BR-5C>szsQ4L_^G96_J9@T86z#hl^a%{8RK0f#x^KbOv%BaXZ=Mb^5kjafCGpaf}M~3YgMGzAK0=>!NMG zvX1Xe>boAC!6iA_@c3J&4U=d&Rjg%B~I`c)4O3UAXZuTnlXmP;bnyRGTRn^(fuHm`PuAOt;UBi6i zsFF4VegS&P&q~?e%yv@dw3)VtJRnEyb+@H;iM|UW)tH-_KV6dKXW7e6le`+AT!3fjju$ z?R|MzjceQYy&6}eRf$wsl#Ed%87o6VR0>I0&GVolVP`c^B8n{;TgGHaMT8`oWk`l( zsI{78%#d07e&=efy=~9l@AJOL`+fg>$8&f5I@fjI*La@ibzb9r-IOlrH}&bPNLCIW z!r|)$qBF1qT$Hg4I${Mn4t5yh;##sdwy1+t7i}ea)UF3O>sgX#UD6{-9;NxCZ@0iM zClin83|LA})8MLz@<4WhWYH0EQ@r#Ji3{R(fDAQ;2r;I{eoPZ3p{z!nP<}-PL3$&EB3s;7GLaPy!J4=r3IR0PqDqBMP{N3oim}F;!p*S75kSFR9$L1)yFUuB6MkU_b7NctJ5kALJ(nlGuX zZ^L`e(I#z;ef#u8`{yK@jI^k&wt@`hQ^nsl6U&q86WK5e=q{~oqn$EE-$W!U02K&& zkZnpqIw~CWgHe9k`$%oTs2Y500b%JLn;#&QH3<+ZV_lEpS4O>53=6=Sx$XT%Y9lgm zHWB*H;xuK^A9aP>3pzyY0}t_FtwTt<j_Xr4@0v826ingzQ-=dckk-a+ov z2l|=kc4FJ-Qdf$)_iO!;_LuH(g-^Tdu`xF`8*MY}zT`dXF*4}ip{yJZ{783BdmGDT#|t}w$HY5E;8^<&ZCnTRo2cK2{;0Aa&dT_^ ze!v*;m25N@G9%fLEvGuo!aiQ~Az_zG>dCH?Y=*!uwRJ3At=a^Xi+G}maEw4u$HjeR zF4hOScR=?lg4sg=GDgLWBtq&$&71?cx8$dU5W-1@J!O3LfP9``ZknlAE3zIoWg z_IJGa_PxD)GX1q`9VF#@h&cbLeEL6?kNZC?-wG-p`2A=39O}+W%EyolP(F-T#pT?E zz8aMqXDK|l6%Y?y>oBpWI{^3SeEIRv6_0V0ZE&T|c`88i;LuG%7 z=Vx0_Z6DfkdE}FU4P>!#=3{4x4M~v5mZhRaXD2I*b)4Seg56?C>=uldGSxfMNwkls z59{&U0q4WuOg@wKn44b@KD!Iap2>2O!E1WQ)KNsX4s$-gq8fy^f2Zut0|4`7+F&ISeD1hc%YD48wq0%)-5yI9p=|!3VxCsIwy8tlu$%?I2vJ6L|l2Y6EchXlu-CVe7Oh@_& zKjL=!)KB_L{J?zN^Iyj_Nl)5dP&wqld(u1FzqjC9n{MnkoV$R0Q2q^(|KHIDayjJ2 z`L%4k+IK~=k!5&7InrD3l=#^mCwPH+LGq&b@0bZY z4={lJM5gO0%3o( z2XlYYKWp&j*XJ{SdcFY9T@1R5ZTipSd7QQRJVP5yPw5apNB<&o zd>>luzwao#rwo0WZ*rqS4t%BlM&As9XfE9IpgYp=#y{r|VM(^m64|ODU*sk^>%y*( z-lJ`5P^9}@d7Nh@s3ZPR-<9s`B0Q|eU*-*<2cnKhgLJk#{8OI9^$hyyhP*_gKTmn0 z{3yd8bm(7nKo0TBV1EpaGf2*xNzT8>j-GA!NzU<*)qlmeX4C_zj`cwNwEspLzr#Po zKl!Kl14)lyGicsY54!m1E3FGs8;H3d*rPt&?F}YE%=>^ZusL;h&>@=p5zqMu@$MrR z^P2F_L!FC}Z=e6c{G=`qbx8(s1mV5{!i_>)7FesGIV2Z^r!@!)NApH$ydFa8SBFT# z)A$&2kVo68T-d8!&wkaXJbZik3*L7nxwTo^*DdE@PQk=On2m9V3eMk=#k(n}tLPKb zS$c8e@iOd$C<%P0{r_>Ot7}SDVjPA&wagkJ?GGb6n%lWVJZ85=eyP4Ffs^NJR=<VfB<|L!@S=~90Bw3qkq%A|?s10>IX)k_sT>kFMUgg%SMKF})~Ba&`mJ$4I^ z!a=t5J#Vr#(z(#qFF055AL9IoXLK$Z(h{$UP#;cf4D1oY6HhKaf?ZPWQl|_Xg*vJQ zeUVj$>?nSzZJ;^Mdc;F*WfS)3|78ya4>Cho7V51$BW&MCf$zAG+)Ux$f|)K$dj_c= ziup$^^2d_+!(15p2ZHm^dz?pvH5kcxMD)%%7yA-*xO}vg?ca~+gS`x4wBLcd4f}+s zP31SxnjE#IZrn_H8SXYkLvDgR?KNO=Fz1XlQ1Ke8$)Ec#=swaD?|*=O5ovV7`WwFa z-3Q;plIenVJuddG;I|>KeUA$52`RybRX%!hv`^xHvM1v2_B@E!s`!$%D)1P3jeSrg z-*%q-v0fF1wO)*A#d~fX@EfulV3OECeFL)3?cc3QYGAAcb>)`W-w7Gew`iQy6Jf`& z=7czlaNoHkv9=KFQFPDE0sH%L7RPuz+mC0YJ7yew1IHmlo1XW{-Gu!(DGg!VM6u4{ zyPvhRUNr#z$%f#p<_7vE+aRQ&&q1F1$6+lhvDOSaMC(zsUPbF!96tHSK48d=)}`R)u7NmE zF6^!O`!bO~;v=5_mu0$&xamB@Mf|o#BMSqJVO>Noz(bn*p?QMx0a%}fePB5By&qaD z;y1V=Om`E7Ki1&xOV;3K{>vI%BG%v%8;tM{trzN(I==O6kNnUY+*D9`@L0tGwkLOc z1C@n%>xX(td}_~k`yPdMJ+%6Z%&2UBkh3C3q1FwumPOojM*co``tA_M&Y1tBHDrn} z7xVCO+(cn+=TZ^Q^Gw!6U6Rj5nUFTdSjpo_u3SM~Jd-5M=g|9R@wMcKDWSEExY}3_ z!d^Z{{rD{u->>U&W(eP>gx2E{VP{Y;;Kz=WDDG3y8X}{S(u7S%V5>u228}r-yj|S? zUwJDF-u^}R5C-Sn(s)ut`Zo{HiIQwa{Y&_y27LG9IjxP+`Xc$`fv}H6(UKNn%G#brOYt*b;o#FrT?2jvITSL~AAX1apq!dQWri zBPI3(dr6gPJ;e_Dj_8|!`?#=GJO#81GPQExCHfL|IO9zg<&~#7BHAMr0ZRMF)X@Ip zzP1v|OlPB;KpuAB3-#R{_=)Jd<6Cw3?E;E^wwPx>-}b5r2oB&bX1c!o0kdpoaq0 zJ@8cpzuizijOQ?)=Ovt3g?V}YCb2H4igGK!o7UxPmwblCklm;_|)knFh9j7){+>V2{ z11V1A;g2|(#0D;O5q`w-F~Yo{72F0$gT_YGCv2|=IQyoA-_Q-=sV-2RyFLv2QIIEU z<8|;IT-rCPl8U*DFs%LLZf~GGlfF}0^!-ISt019ykU&H{xemW(T+~DGg?K{yTcmuU zGq8W=3-;G3V-FJMC|I@htu^8mor@?(dlgLtXSvkoyZs#nbbv5jL>IXZ4^X@P=noE1@B=r+EmGY{u^EYii`VW+6 z@tWIDaZ(vjPI3OR#wo6&G=D19HyzXk$`|F2+I$_zf$~7>xX>G2Sw6`mUcAmn>#bTQ zLY#+&Z!t)1&aY*FZDOGu-F~(?49?0!ynmE~`VbO3L;6ZKk@C($8HQM({rQ_X@!pY$ z`XM9-X*tAewGvy?i1{Nb2iY0YB|FHK^hwUj1G>b4PI(GRCg|sh>kR3mRj*&$kferi znx_Eod8j8|;E5mfhuT_M2kI-qe&$kN3}b5OA->BlWHWO_-%wT-A8i-HQ2$BC^d}ip zAB+#1nR^HMcP3emz+7*;y+s&WQ`0#I|9te}aF&IR#P+I|w98ZV9EE?3@Q+2*e`}Ye z1AX&DEK7QCL@Z0__;|=tng`-T2h@Fxk&`K1@NPtJX}U=B=RTacp9vX|-cenV_Thex zoBD7As4gSUOz=OZe!lURQA zZU@OB-URPea>=HoG~}K*FT$Qcl#i($U(#N`sh(3E$DV7d<2_Kv`~BanA|AYFj&{STt|!Vw@sb@!nUv{!uvSP*)`W+)eGb-3Jo%{4X|hZLUyk9WO80hv z2Y8oCx}O6!SG=F2{p<|seh%s@n^_?)F4`B^da^ZSTjiirKigAp*m%kV&a`^2Z$)(# zHUaJ|GsGhaYT~XWaC#1R|i~Or#o@^iL9Q6fx@Q?W{A<2^VfRGK5757i3i(;Uo z^d4v|(p{aK*gltqekjdlQGYAc;{cKym6PN~;{cKw@r2G)Fu~wYA4qUunD4+FJBE2M1@jO<`9wUk!5Y*!tW8-n z%y=uffhKgO#QkoD+UoW>DB=~Bt$kjN&c@?6bVAvreR3=Klk)Vh{*oG0;V%e0lL24J zHq%@z@z()$kLF{oz;o&griJwo5`T%$UhuCX;c@$1Y@)m#5=pzjG?rTS#Z0p;MG6wYeeUslV7+-YAF&HEr7WjZI4{KZ3$`Bo`t&*E$I zaKC^gDIwJT=U@=$i1r zGo)z+c`ztDtuZl}lWXt4l{UzgoUcdUvR1AHXA5%9Hwcj5{M1qrW3>|WyolkfY2cTq z{Bfo(wVx=n7S765rhL-3?5WQsLun$vG*?1%WGZ3U^NcgZsIS1X!kI64CtC)5POw@e zyvs0?ah7-cdxjWqUPD;oixtY8-|>b>AK}QI&-;Y;9PyoL>}{dB>SLS>s6Pp{?Q?L` z=^I&uDXwdgn$i`t$ z68P>=cNB53K$}3X7@&V?C9LDZMv;z{@ZxIu7=w=DrHJ=C(^|YdtxfFmqx~cdy*I+dQF<)iq}q-Gj1N*_!;nrN#JvgS zSH*AYD=DKKX1NF}z?dKx^(a+XCs%^GDEOyulE;pJJ=fg`?qf#iZ-#23C7P3v_Fgi zUmQg=W}&?qG6L*9u)>;t3C_Pndx!qamNh6F>53}m{#mJlI?6{EGfyGq0f8Qp{Z%bN z-x~dqeC~HqJl0d_8Qc%4{wZ^D4ld%toJ6ud(q%aa>W*w=>a@*hox6SPM>YiK&{JOm z-&>P~?44)~p-b=U>L8zDew(fk%A8vR-ebA`QXrz{TM<>3g1&^Lgg&uG>i>jt7eVwJy63(vJsCJXo-1#qD^bfyEfC#s;N zgXmj}&l|BqzEwHMzZJ$@xuE<>wb4B26ZnQUPnqUb=sXNn6Gn)421E+j|BAh*8qiHG z?EBF$fv$Ii>`C5A=Wwp4JQU>p< zS%6nG_e*?mL)%g~4(&-vs`z{xhM(GC1-s0_`#7vH9V?E_CK^ zYfyv^_esTloQq(BIhW2!sFPNpOE4aAps*A1E;cB_(>am!JrX*DR|mY7cSshB&rG(W z{KW|eARYx?oRIB6`zK*X5YH&g-Pm!qH8>z`IUe*S3}-BZ{~R9p5C%D5eBB3eDe|x< z9r-fM#oRUg(YcA>UoykTzCGTGTJd=n{09wmrUe84tgy-koe4NI*R!Z z5P#>F#jkCUONHDJC!JAD`?nOBIi`@yh`q2UlqbH-_GfI^l32$HLV3>(LfAf>?}#=+f#)IAm~cVF;qe>joq zQmUNL%ogwQ^H$*=<|0rw8JG)Pba0 zF;Ai2?R>_&M$qZi@XO-g|1)oVQQPYL(Yem5v0T?&sj9D6I{gj;ZS6vskWBhVJ!zwtJ)3j=@Qf)b|uVj_&sCo-nDZVpD&+<4R|i<;5r(7d}nvdN$RI zbE4}zZf=0>f|Kv7t&0%-8cQ1T_@2=bRvZE&6m7CJKLaidOKzZ-i{RKmV zGV;gXzk2$S)t90}bwLjXFLbM!a7*p} zM`v!{cUnyNDLtS)QEnvCv=wSAy zAg?r*n`dK-V_=|%dyxJE6Ymw%7>{?aHYx-y-OJKD*TRmQb)mzDOI5kv4$n?#J})d@ zy)5bE_nNLxJSG`G)PBG0&KhsKyWd>g^QYc)EEo~V6z#4xIepi9Z_VV&jSof#U%0*J zTg&}B0nhx$eXj~Jvq|zjTwcg~7-1|ozM-q^kok7X2d*wtdopT)yu$%&ncf_ZO7Tjr z>eXHaezT6Q2<0l>^*NbY?|xJLOZB{rt5tn_W|Ze1+h2LP^XQ|qW7Uog9O-uE#NnV* zCEWPJSI3W@-J)81Ty{%EUgYqJ_nse#s@Se=^hhqg)8hzD70l4lyd8?ajo;AWO~r0@qTf4Kw;!bn{&Qz}d@A$x<}WZ0>he?}Fl3S5 z-5aC0d7<=y#q@VI_HTVp z-}aqVwC{;Rf#nqQeA|cp)gIXCDIfVbS=OAlM9%trGp}Ywjqm>EwIQa_#r`&Hj=GoW z#`_crDnfgi*ZNK07^Qk$cB0DZlbvLG4ln|5@)Ge#6vefie zdBN%(RRg-_RL{vR_1bFm&hzEA-2n@gHw4RMD=2NVG*^GI!dEd|YZfCPH~H+wj!Oz_ zbNc5kwa`1Rx^->EdbQ$v4JVo(FY8hBNab$Dot0y2@4o$f^od_c{KM`yIu*yxF*^BC z6qOqqHSvT_qboZpETBW%wUG)wZYnH|wjJK<{Bt}$-)ReUpKvRv)8blX!RrdOO6PdF zX{ASHhr1j3W_{|!E1x>if6}9{Qe*XIOIYrqQcbu+Xek*_C zv$g^g{dZ^1B$uALX0qX^)4tuu4CT$sPi;`BywP`7wewluDuaPbe2x}QcE2E_=QsEF z{-OPb6{{TExmNYOUX8qKO0$eHSpaKOy)JPc=7Y~W8TXgF800mfCF-}8S*|lLr(4^z zldG;wI$e4@xvBYUSyfA&s(rzssWCYPYmMV~+|tiTbkr=J%rU5Px)av2c)fMA`;5w* zfgKwQhE*11=%**d%g@fxi_^(wwm$l5oV%sWJbUiks7C#uptc%I>$^MDU2p6%OxReb zow8^!o`m4+YimBgu=~DcO426v z^fZTz%4&`5>z6COie7Fg`})DH(j&ZUV{~A3fwNU+g8gh4P4!M)4758u46`uYYHct& zE3nnO(Y0||FQu|sUKZukcITwAYBQ5{dR)&M!fP$+cSK}(_;tDEG2?j6%%FUwl?M%N zuRhmyD(`C(^UW{HyY^$W<)9O`hUSraN?nKc)0BHx$z+^#GL09cdgQFW?NqS7)5Vr2vs#)j{GL_X zd@sG~_!+~nNT z`~B30_xUn=O0)HR(-KUK1etvcb1v3@$*gW2asB=MrL9f3iUPCwt*-f-$0%jyFSkfI zm}{s%;H|de(7`tSx z^I8ltwr8myeVnd+K#y^5a5c66zS+a0@_|$I&Cd3sNi$=1Jt7r@NO|2^3zwkC}J4)O%t`nr+Y^fz!e!bIlRiib@6n&W7y%-j*8m(OKzxZHw0V z=%wxH-7oo!u&C_a&Xn>O9@VWS2F;CCXGBFEzn5pJS;i+D#pI`1o-`~E`>b8&Khmag z?2@R~IR$~6>>L0c6PCi z%;Wt^iZ4pb6!Mp)$gSvPFJI`WrM_Y*G_7&rtRHqO0Vz;Q?FOc!%=niEb)k zyN&cGUajxiEoxWyzFm3U4yg>%+v@&Gx3uP<&W8g3E?3?S)ojc7q_xi|Pb1APg45A; zl(vD%kB&>$7IvCizofI!W~xQyfOW&yuD?3+rc4a?R}ClHDk*KnZ&*jTbg=5zIB9IxHLJ%t_`P-Zl^HT) zOwqzwO7~C9TvPJd>GXjS(`!2}bGR2%?ASEC*0sioJ7?u9pV@hddtA)YUd)yK*4NE- zLg>8UL5Jt_^@fU0EchgReJiiFYHviH+tE>tfmJ`A4)!fRGb+!53%T{GY!m)M~w4ar^s@piMur6=t*z;OKtUTk_!B*b6(p zEX;BHZ2OFPzdXM5ozduoHyX2S-u`Z_)UvyO*@v$iQ$F2jv;WAOySQrBuu~7zSABmt zyl%{+q7MtIS7#orsp#?HNyC(3j~}Q8RyO-&-#`AK`EG2!@jbac9_2%B3T_94HQt%4 zYgobgG4EpU-?v?e>G$x`BrBcE*JsWu{Wfaj`CV~$&TVYcDA|8xYFXyRb&%B6D{nPa zu0|@3zdkN_n+n9an2c5k(y?fqs<3+yk z_s^G$GH)G@*^#bgv2ADc*X@R(1sPiMQJW{9Hr@K$?e|+uhOSCcoIhpFJdxU3|JAqF zz1+@Ee)MVV>bOaAs|pM*B_(-ni9f6E64#j9jeq;$<5=hG8xlPCIj$I?(>YNs{N74I zd2RNlQ{4SG<$Ml&3E6XS+2R*DQ#AV?(L5A-xYwn_hje1!W(|5VWZ$A03-?%Cp4fY# z?`OgLaU*sfXkE5@`=;VujwzQMSlBQJk||< zQ$6hQ{J>r(Eh@J+_c?Yk*`EEIm+(v|E0I-Mc=rC}Cl3PN4T-7|&g6KyWX|g1@YQ5* zQ^!os*9D&sjlEK`wB~TuW#4h^@P$U9H*bV3KfF;}N5lBri9MD(%5@TZH{H@5yDnna zA?~Hzs}q;7#~c|fm~&;VPJ!=8<#Hx5-`~Pvkm~%Gn`+<8UXi$|Vf5|9mEOmMBc8b0 zue)X0XGqjaPW|(`D3|GK4_;aMopt=Y^K<_<7cw{5_A}|}YCmg7?Z?nb%Qvt;T>dS~ z>Yh%?_uy&enM3=ZFi5$mlb$J9-miC;iLIxWajj+6uWR9aYO>uw+NI-G7t8$y$5XqS z-ubk1Rlu!99Xss5c1WbSyf}e(UZEmPFz-ZX{l?ja*)5}LwCz?rExj$|$M~xcDq9+8 z8+CqH2eq=xet8jnFUz^x2@0z|WQ2}SZM*Y5#=+;c-mr%=r}jRn-p5M*_@(CDJ-d@s z^>uR}#V)V(9iFzhqJK;GkPWh*j7IvTZi!E_9F+FTWkX+Q-uPptil0?$_D}70>ekzR zFKgESSXDUC#<%lUXPL0xFHhUPSx`O5?y3p@%cB`jCwOiXSO$K%9Dk>?pZU4)4$0AF z!{*lKIEdV=+MK8L%4qr+k+eFeQ}eJ+pRMBLw)Y-WWZ3;#59`Gin7YaU)D!M#L+v z%W4c6(w%*7rCRX55e0ihR%gzw{4PJJ@1)L?r+ql`eo@cC=^8td7Z>->=vuXjJLPK2 z;(ubMCvh1`YCE0;lp~DnG2f?eX-*@#^{0*D93` zdseWd%7*bP>QPkw+_WZX-Aqpt_b>N*%Iyf)a%SHd#RunDXU#*79d=S;Yj2qr-nFgo z&Al2cm!60eUG8wBinD%y@u7Y;8eJ?57VYIP^ttqa!&<`ok#j42>(z*BJ>Tw`H8EYM zIeYlw*6Z^$CMdj~y2x|Y+nXsy;~zI!fA(^W9`wbm+Xm~0c}7lW?{9hW?9!K`Yj#dh z@lb!$MbY1GXR+hfQIE`fCk)-ZKHcHRz=4}jIvahjZrY)_VD6fzP9n3L1I@D!PD<98 z&}fNm_wlC}rD4wZquZR;+0Q0rjG6JaheBM?c=s`P58PaR=~niz7z^v=_vad&4>`JO z(X#umuU!be-*vWf-cC_{w~p^)qxVm#^e@xOSC2aAwzKr)@Jlf){*UZ!4V$$MRm=tE zA&&ZMvpV^#EM4$$%z*090h3PN`Tb3-oYKa|!n~!E)OL3pn5Snured7&?2vEgKR$Z4 zFU{Andv@;iB{x+ge|JCW^HxE=n(BX)qDlH|b@u_Al^jng24CnB7SOWpndjc2JG?gT zR)3TmQT1?99_bW5v|7UDLXr;CKb(a^Jl_xxhA|*t%Nx z;oaYYpVYr-xm(~Ee`m#It)PsVUV-~dT0OojN%p?_vLnmQ-cuo{>T8G5o+)g#4v#Ds2p=U|e|w7D-H8=yD_Zv|7X%J1*#C8Gen!xv(^u~wD*9qI_(4$J zgc`SnkMFD9I(U2ZY@;fZLypyW7pc;bf41DcQ;%aU1v8IcFt~MUaK`$F)Y`z_zb`9BLV3#s~k*f+`M zA+NA}yqs~w5ZSH`2bAsRKT%tD)j@v2sNOQx2Z~iVoU5wbm9zW`dT~Qn96jlCSLvpE zedfICFY0}(u4d$xXY{;Wx&PSgqoX?yJf;?V;*8tKl2bv4Ulqo4x12qCT=saaYGhu; zmgn~-4&Po8bwuuwk#@x6PVse~Dw@B0jZ9Dr4j8i}z;%DU`Yn|WN^RSfnVjCgDelO7 z(_zE-ME35AZmf5H{tBf(K6%WV%lGyz>k?$XAS6)X>5sd5i&ov~FXTL2;_CZk^7St# zYeLr+H-G7TqIeuHckR9V_jfn#yuBgD;z8*J`AKacH20%Z&2Q*q>%kW-P|%<(RT&T^wQdRc5+;8;gXI^^ZMtg9@n#2U$J&;!@Xj) zWsjRrs649avGPvE-M4pZ$ND`v`nmhV_>kD*PB%WDG@28d8zs^?F)=EM?b_JZAt200 zVdOOpmWtat?;UNQJ#zfr1KaL&3c57`M-(isRI7MBO)lPfxa`r=EMFt{a$cuTll&)6 z9TO7uDCc&-yizzgn^3+MXj$@B~D|NAkO;$i1i*Y0$cuhBD> zX-=W~-$l>Vda$`iTz_My^Ikz0<$jB5nK08eYo)z)`sFKC$?V&urzd@FZc46esVX~E zV6R$`6Ek&3yz$z^4E3;7&?J_MrzDhrBVXC6QtaE13H}!;+Q@ygQqeta8TSUB%ZVPC#Ew;X> z_nS*~zfo_Z?d6|&#EdVsH%@%ytbgfu?POMp`f00u22Js2EviZ_1Q*qMoNlpGPS0AW zm6Cqb?K-10q0-bgW)T?-m4UC#6{4PfJ(dR9%_jaQS++#!J!HiVt7Q zHiUarx&=lzcC~UYsGe<~kl9IH)1`y9K^H@du!o}!thai%24*e81i-8^rC!s@ExcH1 zIlFa|Gi!%rUGLGasFiovP;}&&W%=t&&3NOLO8G%oZ4D2WJ83`v7Gu-5);r2?kY)5o zb3@w`U6u4AC?vdKYp~9p1oI|w(NSDV03)4`PVIJ zil_66oEPuU@*X}iK4VJHjBI74g0ELOIb})no9Eiwv;?UKS6SYOELC6g-c@tlb87>c zb3tL}9z~NA=H%lk1}fVHVOJ7PTd$Hem}{eJ z5u|9UZF!-Oy7~%V`;4(M&e^gvqQ92dd6dP*T3qa&VbC(~sCw4+1KR128=M)v@Ajsy zl^!0OZ$>*km?X0A?C>>a=F&>zjULza?;58hYni2=p5Fa*Q<{RHs(fC|`eaHsGR=gU6RsYg}VX_H#Lu71ee`a&*cS-!k|rxog2 zj)fg=k6fp=X~lij8O&ENaS8tHY zA>CK*TXhcBly>ni_@FuT-4(4*8EqPQM*BDsc4^w9TswCBVPep!aP5-LOX{auOtldX zUpJs~W>YQ$)AfIpL3oY>wK{OMj80 zegDYLZ^IYf+d3g;)#Js>ryRHcO^w}Y*)5MA(fr6gi^q1`utZL9ZRw?JtwBWtbAw~X zCx%*ltq%E``Yfmv46HI6#!_Vh}R)}h3}bXw(m;gm%m9EZS>Y= zmPU(`_3t0b`tSafvhnLj`?ecZi|6tloEkRk;rCVQkH*vuuU_z>sOD(q>L(w1R6HIw zrJ*uV^}+pYpXR&G502k6&W|nk*dupaaC69=#;|}2L*2O-=l$SZ*!FwxOAq_ST-LFg zR61+s_46A?eLHt2ZdZv$)5fx?NA_P^cQNzI)uorNs%X5uK3*~M#>(Jvw@U8l-jq3M zoOUGLDmD0f)cXEo2X1)Qr%U?2G21qIIUn5E^ZC2qh5U<|MVCMCh&g;~n}t^T_OH=9 zGYUctH%G~9Z8beTdCU9Tzoo1iYO-d^e8shDqIv6Xt@cmmZ-2RZ?59VoT{0+$ z-{O@N=c0a=-z~Q>_VL5p2^+3EuW;Pwnb=up#L9c&YT32rg8kf6n-2KM-8{G_=<@WqRaWtdxErhTZ#+^x+97Xb-lPs5xvRZroUZKYcS_rKexcJxg_CL9OpB_M zkDbvM#-DYa_pms_>=o7j!XjVq14>s`YZe@Nz0PCPtYOt}2KNe_|9E?)#mS4u`ZWK> zwoeW{BlN1o1i<9`XA9p2Ja{6ki5lYK$(iZUWmaa>UX!n1Ihh^D9{RkXW@*V4-^*Et z7lyOP-MATQwDIurFk=lJZOc6;z9s6E@6f%~)O%ONy0N*JxQEzFCSDZ`J~BpU?Ugyo zBYg|<6PfZs4i^5KUd~rtG5byJ=!Q*+-YXMtKN%rBc59uzYt)cFme1=sE2q0e)mgoI zp!V7EtlyjdpLg1B%Dmv()1+VRj#>80Cxw2z{DHmUo>kUw!QV@ChGv#eOEEanKQmqD zV()&-1*cjkc9F5>F5|SUTfg77>C@JZE~5?hTe_HbO+CJ9=chXz7u^atbZvi!;^m4W zh4Z|Gd4jNtM*YqwTCxjg+iBN~x?TEog?|iRxU_7L`uQl^z%sQCyCU-ZF1yQJ?pswT zup1wm@!|WOw$#@?4ly$y4%1UV*?a17d8e_70O- z@W%G^Rl7mekG}9tJSRMz5ojscb|?PwmviQRouiXGgxAja4{W`wN5F%`;d@EwUy`C1tazapRp3{ zk^jE(T<1xB2Oaq^ZSvrri{2;i&`8hdU%Z&RsjBPZma9`rY;y)yw6aP9tbO)=N}s21 z-*0&I+|2Y%4F+%DO%3cK|DiI5_tfL|+WFPTUz94XoxY^t*)TuGrm7qh07*5b&rLjM zuIqXKi~E*<9de48065D!_u%lc5OZy|l2h04XqkI&06{p3OSx6I%}t&z_($@A{&tuN7{-UFG?B zyitnRXX~afgQ6X+H*_;|GRk}SV$1!rN55QprZQpYnl5kDJ$BmpD~{UgSe($?{89S) z%|izc{NZ5ad~)-Srt0r&<}T1Q6LpHpHXnFXBYDz6SyyRvTxmAZfy~A-e~T!MXQcpxc2(~?5_7iMLYA9-*@a* zKV^S(tX7$S<-sWR{F9|S-B>Y~hHuOM!8g?2++Z#+S6Qp?7_!o*Q`VS=3rYusRuB07 z&dEtiaR-3d`FK=MCaTQ~1zlF>;e)j0&c}L&0eb;ldyGN?tT;g-m{r75l zg|{QP4AaZ=U;h|fqkOzZ^zs_RaJ{^Jg4`p$x#CR&+;O2{(c%8Sevw?$;lqa-4>mCw z%AM@(9%396x-g78(cM2NC>pV1XBfj~)&O?EbzlH+2nYgR0{Xx)Wx#hp z28aX30;NDtU>D#4)B>8odSE(G0SpH6fpFj*pbR7flYwhMKi~im06YhDfh~Y5@DLaQ zoC1~rUjYSRC13+w0*rutfDh0JbOO?WnZSL(95@av0zLxjz*=A$a1$5^LIC2R#US5Ht`p5cCD;3s5~!JvB=^#%0> zeG2*%v@>XD&`qG5Kxcu@0<8qC1RVxC4DR!&Y{UICXPF1F-Sl3dEaTq?g@s{iIv z`!|>R|MKeazq}x24NXlgt&X^~adnbhoh6sfFISgeF5Q1~>HV8a|9^RP{a;>U`O7On z?n+9^$|@=(P7)c3g;>jxTpE%~Q*voZF5=tI7xD1tOUh3vmGV_ee_`*xIDcXHzc~L5 z`*r^v`>7iLZ!T%oC;JoP?d`?&^7oAN4-Ih-k7gnw!@b>ux!xgO_!O0YkT=&mJUkRL zR?_?JE{5@Pk93zl^ACww=;Pz>>F*s9$qn`n4n;g3xZ@oz^}#UyA)cYZVeXOs9*A?1 zcX$NSqcZTsMiADP&0#vSBN$CZyfMp$)n&taDU~oBMOZ^N58%Qr07W1+AFzU3i080= zY!?7lPbrnrQXGljivbI`%NY$t4gB^4`oNtFiU`%Q1YJujEB1k;VC{h04<492Gdc|3BQ*Cqu_pk@^r@UAYcI8 zg`ldy8o&lL13hA-qfU$7bBRm+$ zb_MY2meTJ?e;j@<0Y<=m7wK!^cL2~2?qi_D&tzaS+${(Xd&-^(bYiSf6fH&UP-f#a zA2v2ED_uwWu=8vmzzFU`pv3Q$fDPO)5gx4;dmex{Xq2`geNX(30mi`n80qWbH$=@I z2zL>vI`=Lbs!EhVHeF~KHDFv7c_g91` z`IF9Qq5S71@{fQUa!|S?kw5X&0PcOD`A-1G!~G25DLywq zAMVW(`7eWe6x>x3`3J#00Pd5Zs=yk+4(=}qPxAby`hQU(e-HTS3IBURWq>$fEZlg7 z=r8quqeTAF`hQO%{{Z;!2mb}2#Lr}4GTa{!p5*^e_5X%M{yy+y1pkLY6@Zn14cxB~ zp5#9d=mz(8iTq>W9s~CiiTp$09tigtP<3D}Fb(e3e^dX@BYw)SJJ19EcZ0HkSil-? zyl(NA`oH0q`hQ0ve}DMz3;#z!DZi_LNpQbMc#`Ko)&DYy{Jr6)7yKUtC4Q{{Ccymy z;Yt2;fv#|GmB{}$xJSeNNFx7WxQ*dH4XOsD08`=qhVUf+f2#kNCGz)#9|QQ$0ww?P zz&N;{B0SZ{Ie;GAnL*Zu-{GSEw0IUP-;cjC%@+_vaJd33zufgca zvp5>^7z@a=YA5+~?cp&3(Ik_C(S;I5C^S}4 z!AM3GqYpKVVAL^6L5{`!m+)|J&q%JHx4Rd5HlBXoo`DRrFeES}G%AEky_<0F2P2A|xd-`saijc0yh5Y65&lcO|L`w~1#^795!?uGbT}AB8gsZOH`qTS*gewI z?~gblAny?0NIx_jI71*blpE|G63uPD#|;ff4=*Cp zJ;c+S8xbAs5gHWnN4%b)UfvRaf8;}&Zx8=SX%yk!VczbPN$Im7|48p}_n<+NWW`00 zK9eRUjZk|3uVKJ4FYiC%lZI)(`)4|T+^0hMxQBB++==Z7=NZ~A4{=XaB8{K#OA0S} z@}GVt*^Pf{Xa3XA{A)Y23%vTdo%v5c^RMm9fBKn!9cTWhpZV8u=70K`|LJF{z=o~{ zrl6nqpMECizuC{^U`GAtKMjPVKTXM>7G}ihucPEo8#Ctg$H8jj1@wz##k24V=*`kv zq%!)lYUsaeAVg=(p?Al6O@FN6jl}wm6V_}Zu$HqM>o|3c44ON-q-jgjl%_>#bi!X} z{ORDY3;uNRr-wg%{B^~j75-T0Gq>k~`qOGixeL}%O|hQpj&;>@42u=ZV#%;%S#m4| z7MrEY;;?jBT$TyTip8V!x&9&lZryvTdw3w%+A9d1aE6J^mx;}rpP-nVn~Q-Z!wk@D zTb`Sn!?)5Vx|{!4Omq45L=UL(6FRjmXA)%i8K4Nm7ZA;o<$v$mwtSBz!++ep{k|=? zo$@6#Lqacz=^=i74|;xxFYHP50RNalyW7IB-94aJJGBF)^diOX{ru08`&^^8<>TAh zmVXAN@Y{N~Q=x?J=}Yb${(}MS_j3ml&E+2x(?k3|gWBV@1*PysM2~R!oFSlx)c9+N z!oQfJ+@s9e-F_0fO+v4WDe^xQ&$E>HZWiQk7ytL+M05CFBZ(g13yB_);XfYTw)_Y? zkNclR*!#_>oh{t;|<-Y^S^#px}?(ETRIwvzQ*>?{T5$GJM_~%D)_c4Jf6z z%ndY4o?kzgo@?^^c+>qXzLyW(m*txTwYzhJiSFY^E+D#x?-EYWRrtS0fgX|LUyq^t zx%|7o&^HqIU#Wl}w4D6!pn$?}pFC^N5PdZCi5{BS%_+tYDFdaZ^ zX&kuPe=9It{I&m<6W7r-m_A_R7u}cs<}-ZBZ!Uf@EV@s>P`BmUf6Jii;e-m@FMq)> zLcmSLFfTzr1MHVr7X|tN763hCA#X$E+UZCMwUtl@P^xqVpd3)T@RPXnWq2t z^+tMX0n>cY~M(Ua{a!wih@!va*Ky9YDS&ppDA8R!)qf|-nV8X3+E4EGMA zd+k5Mf+CrLk=~2(KRlGC2bh7@)29x^4T_-sr@z-?gvK**(C|=kRPMq4p3FesPy}ob zhFP6pENZm}a*vD*_xD&B=^a6G`EOpN?^G8^Jz?4bPQri?afAH9mtg#s#z*!nSB}LbkO#>{@e#rSsXsG(CDRP^o>(FH<03zFVdX;X wPwc?IF!*~Qb^P=!7Qd0VFzF*(1s3*t{drMZbV<`}cVWH~{?eol$#Zi4AGz%6q5uE@ diff --git a/extra_lib/lib/android/armeabi/libeditline.so b/extra_lib/lib/android/armeabi/libeditline.so deleted file mode 100755 index a4dda63f0e5f21c2b574cb90c6041b36f60465f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14428 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⪙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

(6w4Q8{s_O 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

6VosCR3~t++J$tlf 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 z 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 #&|sKAzk31UG4p}`3z7#np= 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 $P=6Po>U%g@6CZ_Hdt%Nqzb;3x-P(rkt=7S> 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

tW1$KF+uj_YflPK`^MMpWW-Qr;>LN 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 dauJy^ZI zjd39M+RPn+t}!Cg;=~NOhnCS+1YhX@aRW1GV;SG8oidI6RC~p!>-D7Kw=eN^)`;*H zZ^?$|jl^=-yF=Jppt)dL`hqXkeyH#ueSCvhEX4|5xy31*IRt+uv5`^scto&$zF6bz zdtL!<`vcX6|SdTsF=56d7h8%B5pzc zi!0eDG=t~0q36zDiRw4O+bkKG0iT>*k^{$}9l~i@i46X-(SM4(y(G{x=%< zrFayB|5yI|&e{?5oxdZP&V56v zjMi#i;N2AN={xkw{=R<4`)Z|m<;or1zHyzxBL}Z1zHv2knfjR*$*>>f)&9>Thb-#T zbH!W=?@fxuq0#6CXt%*Krj=c3vCwA|nJ4QCEFZ4ah^I4^S z38vxn>n(np_!-)#UG`10ZUe0Hi))W&FYo04)4og95#_rW@0Vk*Ehm=Z0PlaS?|G&= zS8?s~OZIpBHsu))Pv=opCH3uE@~A7GgdDKoX4b`Sk=|b;RvI4jAJ$!7=x2v!qRA`J zkJ?@BKl~%PyTZ61VxN#1J2{t5xw%G<0ajDOQ50HuD{h{C^dFGFv?E$BN6&6h7xb_6`0 z`G?L4zWZ-1=HZJb*7~b>9wP_MZl0y#dv(kQtzF2M8%vU}g}AUGEsl3L-_Bw^BXZj+ z{IJ=9R&v`^5kuU@_t&4&<=@HoiqF?N*7d|gFFdWyKbt)#t% zc{j3m*C^&{J$b^U*FKbd!PS1b7`N_|I;%N_r$v+cJ)LyOpb3vtbt=nnShPA@2wDQ5DjF09R`wq~pm%6lH zA4@y+V-njdxQ;~Ob7{AaGx4tWT4U^?D)px`>3G7$OUTsMp~;x-7Ha#EC-x^?YzDWp zwUvDg=#e>Mr)|~+A4I=!=lcEiFM5%#ZvT-HPm$}KwR!Lx>M!<9Mg3(nXV&5OT!OFd zEY7T(_7wU{o$ZZtFNM~7!gKE>7rOA5F%JIy*f0%w<`TL~?KE^5^qJ~betFR}K48{x zR%Ye($U2yCBm=1Sh%{?s1$aa*TX>l5erEVP%H&ziyBVx6kb zE9ys4`W@CQ-;~vRVq9KVr#IYVZ8DMaVezn&VVa+#$b&+2uSb;OXp1P=8bq)bfVZAP} z=6m}&~GZEMCLGQ2ifLGRgsk?SO^#NbGzN0XntgZvV z7qz{yvNecF?V)XFT_<(T4fV}X&jh}5T@Sogg026*fNgCNwsFAL$yho+!%hW8>8{!X z6vDRWSbg`cBex;z(~M6+yeMJq4eFD7gH!m8sOx6FWc^B>p9%jE?}BfRKo@5#%c8>i zLEkl6#6-fI$MCasE#8l;Locp~!n^o~Z_h8B!L@Ww$;43SZ25#MeRkFOHka5(x5ml1 zXA^@E>Y;nk(a~@9orw(6*L9XvCw9c(bHvcs%V$}QpTZb$mX-EAL^zu&q;K^Z8aENv z+8n3wr@tOK_}#5e;UhKhEp*oy^L;Mu#=+Cwe>g%+a9^PLsl6+Ut|q@QcGU0qIXjLV zx$1Y#7bov3?q%t^WPrrcu97)ZZU^2X)!*2$^ zMt)6ejvRR^HNm+2UcPvO*~U+_6ZeX?NpYS)(}~^_eR99+@#>)$3w^z(JigG)(eb5^ zN9_`5`QKx*NlNF)ik>z1ZUuMvy<~%(*@z9MbHF0h$@<#;=Rz~kSXaIW-K|VF^9paX zcc^y~WBdT)pXrA_z*!ugUtuZU)A9cF`jL=U-oo}-xHjug8QU4=m>FEI0p9;Rm1{}+ zf0T_x9Tn6ulsc~c^N~a4d+ja%=%9PO@BHK2-)9Hi>%DZi`v*N!9g_E79rUbRu6t13 z<#L@ondS|~HO2vgkJ zc*1x}*BOrOdLDBkw5z$-xJoCFSU(yNj2hc6s|`50M*fHJjW6+qx!r;C9sDojfd22i z9Y5j}Y(T^LeY7h)e4TZa(9a9~#0TLbn$8ZKJ{TA2zJYHc`y>7AZNM+gne!*$LU@p0 z!OW7c0-v4LcLE;HgZ~Q;!a>-7>zSi{7fi?czwqt-pVh5=SfgvqKFYK2QYKm|b2ay09QvU`GjsDptVe}> z1^7ijA?(Bfos_TW48#&&>2k#bH2=$dg|+nhx68C!fn8@O51!NVTl|^1qdA?$=WsIL zg3d9OU%?<#;>-d07rsS5LpmQ{#x?wYeFl!_msF$QROdte#*%(Bsm-e=hDT!? zO|<)3*NsMOZ^AnGJ-!uV&Gkpw=r`-pZv?yO4ZMdq(7C;;vy(cJA<~&9sm`IcSC7sy z)>5719-=POif%)F7WJFtT=daFb+(r4EX(8)tS74%SjQ$WVg3<&k3Xr)hDS&j%g^(* zmSC0Z9S^L)8|q@FTrcbK)|L}x9%l>>uSLfrcd2u+Zvcx`Umx zCpG2A%8xKEc7UL3gs3f;lo4{X}}n{jWLRYPSb@Lk@Y` z04_g~qh8^Gy32E=2rD|NA8@3OD+Ux<6K zuouWrC7=3Gm-9E^Z3o~f@%#&c&Sz2#1NxS0j632R*q2t4*i!0?Hd<{)pWZ zP3#>QgM5;lT*^ESu+6@4igJx)2W~9sUJ?58;`MJG`tpRAIsYo_e{Ec+|DV|-9~ADUAGg!5DwW~>F75}HmreM6zB&HcJ=9%(rnV%{A0AY$ z{A>&5PJzDP81|vU4rI!>_g?BxU|hs2wP*g(v&I$A1sUWAUCSQ0pYVLJ4|b*Y$I(U{ zeYS^OPH*5V{KXqbYR1jH)bA|Sr~P;4f^kRvl(TvMB4rbk-(Ht|x&K6c%849FUhZq` zm7_j}Un81$e&Fbya%4=SLwsjOdpU^3%Vh_KB%RhMdE&Ldng6ZYpG~}5p*uXE8-DxR zkwcQR(j%lV?1Bzo2aaeW%l`Q6z+&K$ALF)9(w~;1ALEm{wu^p@Pw1NQkso6QW6{X{ z_xXR0K0HU?Msxor_bQ_?`wrK`d8R&GLR%Hg6Y#`*%MSeX%_CdQl(+Z2iGF{Tev1Y; zkIwxZ-@os6{94>M!Shnkfa)Cvu5Uej{oog9zpNO0daSS@wZzY=#2kmw*v_oq1UF zJCyD8SCLIm0aMu*Jqg@iLwzp~dZu%zKFG5JgPv9MY%b4Uf7`Q5{W(0Vo;mIW-=BPq z{q$2lzg1SNTlV!`!np_kfxquCK2`Y~ufzxWuzMG=3`<<)Lf!)&mAkt(;p~izVs5(K z!Fc|aw_Cp3hh5w2PriV^V~N|3@6V6p*@}B z@WebPT*nd|75D<0W8Q}nnBH5oDZV`232El|F5(mXf5}J&NijjXhDp8Wsc9Pg%ZENG~ zO%~WS!%a~^kI}T0m^vVhgpg*qm>@+(P-6(T=ge>%vznA9{u|R;`Mp19W^hHDw!gN& zeZA&2JLmGfJm2U3Jm2Rl-ER_d9DU@Zu8+(y$a3k8vT?hSIUV)5)kN7m=f86uzQ8(! z;{!I~_<*V6Y{`*% zCU^OY$DJIX%MNG}ttt^iil_5vsBwxjY0O87$h@P(i=$rmzJzK|;Z z3ky8~dG4GK-j%z+2V$b&$EiBwm+SVmWJm&iBc2eH(upfBrM}*;{X(c-ub1CRvWHD|_UPH_7P%PD95K+9Kdpvuu&{hIi-9 z5$9}c*odD2XVZUMeUNYEh{zVnQ!AqrxJ1ZbIf*~Qom~ULG33lo@K?NJEu^#cp|i0T z(%Gg;XT#n*tFaaxz<+O-Z&?2X>v5|6{%iPJhjI&s#2uex-`K2BH>|IDhBZ&GdG}m^ zXB#?PJ8RxSKL*?i``F9cB#`kmufdo9 zoO@?-&(1#=zM~k0eAN*)(%`Ok0^SLwZny-6(G~!wI&7SH}izi}>?}*dRRp)h=zmCl7 z0tdI+YeO4)EA>sn{*Z?wk?G%D*%R5CBX8=?zR1pBv!4sw+d`I&ypuX>yjLu7-h$#| zj6;5C)eYTh%Blr(Zt>SA1|KHQKNLobfy0lWn*#giC37#M|1E~T$-mqJ&eX;+yR30= zX2IanlX(Jf!}3bn_yKKXBoBeH{QQFFH|lWvez|9(?=(og?w^+j$Sm;jG~^)EqwP;pC}4V%y9Db(anc?6`V=lNA9?4rX(EgZJI9~ zrd7By!oz3uk2>27pCjisE2q4VTDMk-yp{sFw(O}{SYoeywx@g=*Hm+CC%>B*o5?^Y zMPh&XHG$fh`wO*`sayn4HL7`OIA6zpk@373m>JkaGrRrBtTjH#G2=RN>+oGsuPJv; znffrFwA`-p3T#mAV~e``(b)|-@|-VX6ysG6f?(0*-JNngi#ia$xJk8U{;1N5jzLUw z+=~u+m$Q<*g<73bow@f@o`DYxY9B9htyOCh2bPWa{y%6>UcsxhaIH~mP4m(-q66@x zVhZHpPl>C9UFzNqX1;=d@yq0WjQGG$XYOL(7w}ZRt8%fV zYY2YIsUtSFIg+^^*$18yTQ}%Qo#`&`aH-%+uM%(S--8VN+okAw&`PPtCpI?j74{ie zIoCf{s>SIo=Wuuqsq82D4RkihOmunUa_$`Ts+gfEyhz?CzTOOT%;9Ip?=&p!ZfQxQ zyM%VbHU9sfTII(xogVv`H_LvI&V#O4iDWlan>8NO%O3E9(64MKXsDDgE1v=y#6EYo z94KAtogglAg7ZL<=7nmESgg*ip~l-d?QxCZH&tH|hg_fBGWM6~ER^ef@s=Ga>_+nD zs13e05E_&jDV9{mNW(B5#XOwfBtkji3q;#~ZTvIED zZo(Ma)7pE*yn)GN<_|yO+yVLV27-0qVln-!uQ=XT;+oVh^0(z)^vzV)zm)$K=evae zFMs6av=yT*y%#k%(cb*ZHgkY^ zFYy{}{G8`h|KN0dsHYd*hjdOFd(}3#<=D@{e7kJuFn2e2&)%Q{vWm4xutwt3+E)Z_ z!29!_&2_<`xg@!yJ(Ix31~&Eza^0?|9Jh~J!x^t~vvki8PyYpD=epm`+^v4enQKD0 zD37EW+JpBUNwY5^o&BxdChHzf=IKv(%-o~7CB*;u&HR*Cg08bA#x*Pb1%5B^o1v2! zeMRk?JaTH~Z{MQ1742oTo7b5y<4(`XmLk8Db_~zzd;^F2tx;lku{q$7e1x1~LTv%` zl#F7^N3{QM8MtGJ!zgZ=D6pT>WnX1}RnS3gxTaE&*V$K%QA2;q0}(Ik(7L2*XPjtljQGAw zeUb|v2(&jXmP4lG*H#a3PxYrei{M@MdexW-ah9`gykVIhZ&-;l6W|TQih1vs_BzHu z{c3Ps>l8Cx-ec(vyE4tLKYL_P=`nl5v)DwWI|T9es) z^S%%7*~0pAe`RQMu#a}!cE&8;&K}fzg&Tz-yh7`%wQWkf&!)-!X06M!;K!rE5%Az7 zUc{l7Kc=le<6fS3@^zfx+F%1mnr6DYnCoF^`B`d|?K+Kn8ryI2y)&mZyr#nWk^7Y+ zg6uz1%8SNd45l$}V7q@WaJ#?}ybcE9A7`V-XdUIFi)5G|>%I?IMV#lV+^z)eFq^<#_3ikbh%u95LiGZf1TnU!87}`=%KeB3pv) zvjjP_1evqMAa}4&G!OCKSo#BjbpZNFud0T%gi_$TeW)5q9jGc-(}EtNPN^z6COk#Y z+aVZUzT02*kTT3h9!7Gp(1HlTHoSfoH z@3=XF{tUhYCzJmPd{?-8gI5|+f_H8V#+y75u2hw1fQ9 z#6!@3exMx9@GS6o@H6C86=e4aH^^53M?za5JrF$euP0u$_W&2JPyBs+M!>9%-@+r+ z@sII)EWhP1TAap);CDN}+q3X)I?(}VKZhR%E3)b_!{5_2>k^!d3P20wXD5?JIkeFy6K8d06_#rXT$EnTcAj2p0q02yfHe)i0zL3{O zz+>CKgZ}P7Cf`B3cLc@UUi3Tz^?4P+Tl}a=eWh+J8*0qoFqXc??h5@M6DAXXjpluq zJZ1SxY@UrPcR@bW95O3U{y*2+v3=|u`?&eQQdUS8Zvt-ySl0;uZ#8?-JBUT_`$Wos z-}qZ-hiAt{>f^8)g}FrQ_uKFX zC4r@lT^8zFP93fu`14+Q$%@l4U*S*OMmOK>`tHyAeaX5!xY7nJlinS)2P_>vf?Hm` zo7L~$)1cfFEAPM0zO?LqoV}QSxA=28Z`ImS8){4KXb#Y4Wp;h8-~{y^_XhW|PL{DN zpdR1hI<@Lq!R13dYa47fay?^abY&%Q(LIZMALL$~>nAuDp%j63d3Wax;2UR~P-m~} zgcI$u%nwOk*PW1Qy2Yq`^TeuSr6`myMmeK{7d)^ z`Kr|V03Q7Q2Yy?re7SpOt^TNd`a3Sz>)%Q}o(BBbul){OTnLOcM%`zB!K)jn9~i@q zck;{?eqijw)mypN<-kuEdz6|DTb(uj)`@$=wbOggs^74Uz2P{XQXg4UZqDuvc0``@ z|MEuc+iA?l!RGo(8`fGwYf4L)vJjjTYTM z<(&_6?Gc_kfc({(Oa?B3Z`46{qt{JkJfzwTHem4(<80%Z-{;y%nt>06Gz0B~crKcG zuiPNzx72-a@*O94VduevK}ZW7@8)kFHcgFew|DsQom$bt6?SDc(+y{=kJ zt??fM23uJ(#WzylpJpD0NgaR?7Q?yva6D~C$w_@48~m~l{PfgVb9(jzLHddZf~Dvb zl2!5C+Ui1T6kFaM1lB5?jSoBe=a;Pi$8Bd%<&c(WE}f5RJ(u4 z*s0;YB|Y5hnd(iYo8X4m9+&wyXZ=19ZS4^Dc@e`E3w{4wM#oR{kEil(|(&jil1fcIkVCum~_?^w>2Ws4f+ zkrdzLn3+@`vThlAUAd!ejYLO#Qi zAB6b~?^iwpdj{VnE1r5=Ryf(~$;;|N{xAmmPdGibwlb@ay{nc0^B7~*WJN!CFaJiq zgzOoCe=WrsVkz384b_iPJLIeHkPdn3Jf1>lOxQmTT393PBO{FtS;_f;=z3bKd*G+~ zE&2TCT-$Cv>GRB>U@aJjbA7Mzv3GL}ITqtn_&RBEoNn|Md&G>Hk1!oHPxrXikgvq;mBCfj&8w)$>+R)A% z#@ZXnpNw1S9l5p|kKbL*+yK9|YkJ3~>*43vVlCKWJg40Maq@MwVoSub%Z_nI!#HxC z1{?k0XE`F-W}TPEUtP0vqD6QnyeRCG{V&aV_gU!wi1y(oGmH7LzHrYQKn`{*6p|ZOg zdw_@KyQ{-;UDX(MOMb+&s@EgfKFXe*^*kS?4%W-qBC5{>eEdb|p7Oy-&V+jyZTB#; zaF6sB;DyR~MWvlN|Ec6Gs`p11^w_w(Fb))TbtH_ z`>bD!-RpHbrgytZxZBs@UzxpPoFvuB!ap z$-q8uv$l*Q^o1Gi|HFRcI=T$GGT6TL=dG#B%V(dDFU#rm)Ia=)bqaGFPWDSoew^M@ zzcGh?Xh-iy=}*2V?dP`Gd)$N{!QyOTi#i`quvaClp9Jrn!801KY{ZTsegCGhO8?e) zhmKWvn4%rkd44PV)~oEz9URMVt^YFk6Sa*8pZe(SH{I{Pd~uH0MIUzEh1d0zHyO_M z_*L}P*Z7{yH#u8nogpt>FV~1+VE=`3C@UV>8$9zbCtl56`aqET3bM!rF39>=9(j}d zn%BxW&IG;_z$<+lvk%$i`Y(!R3*wK+3$CBZeSKTpZ{gZO-Nzo!OGeoH&};j`TG00N z2LhWK?!*H6%HgzK?WuK$|r z>Z1jok>FmEzB#94+@`MDoODiC%Ld{nszr^Stg%LjPpPj#jTQY4ji`3L-q*3PFWCj} zy#9Awm!6#9x?pjH-*MW~HMRFb{l3oa()|J5C*RWIo}PJ{-woL446i73lVt2V!%IBk zjZVf4uhN)LW4uu_CmbjFDV6W@Zp`Ydif<`j0X{qKz>wz;-Py&5cm2KCWtu~`mG*U&}hjIQNHNImG z`QGejX+6EO{J+58=aaqV6uhU2@oc)(di5~B8C#`~Ym>|N-;;YmpIODA|XGbod?2gXrdAqkc(s9YCx2AADjniA5Q_p*l9Y1rD z^mhD>{9o7UHcKAPaqf6tyt}~rnwQ>tbI5xU_L{Q)v-~5SfsL-#Ju^3XbHt0&u767&z66g}ov{Vzm{$HW=wM-` z%^f&I%;bnE5z}-B%JBj`51!G;D^FyG>W=T>D?+Df=#I);NILtg5Av-XPszhP_GTw* zr})oF9Y?xkrbjsgJ6bZ_gZGKIn=E>D78#dbRJPLYXwGKwqZwB*jB%($_3N6kGM9~NFU=m)o|_#Fjb{SikAAF+ zeV*tE(|WvznV)ri?K~)So6Sv0@NoVFuZgwWFxv4VlbKJh3mY5WmhbVJztrP_qrRD~ z{bPNok;EbP_m}5gQwWYy=gu<3kyxXv4!Hiy)B#kDx?CwAjD=Q|A4AQx9Syk_VGV^l z`$k4yRXkF<>C3nElpj5<3p|=%IUm_GY(-Bwr?@4#%BgI=Y<6+BIXaSfTjUSvi<%FX z>GK{gZ3vo}2Rffe-N-lqZ9V(}=yO7kx71mUO*OyFv!hj0vI)G2k&8*}U~><94|{s4 zIf_qN{&3Z^yp?NBS!(dnmaeJB{1UFs$b;*<@bPdh#kGZ8Q>;_Ji5by{VDx;II+~RP zHQ4?DAN)Oh7W285&kR22@;Sjg+tSqTB-WH9<|I6{i^QMQKDgu*7MI%!=sX2{z4?2N z+5Ep`J+>~nzp{1D!PZq>__5no`ZND>h3}A8cHW)Hfvxy&*^_1$JA-rC^Q9X0wkz7z znV{75%y$N=CEBuTrRNOX6C6w*^cT`zGQG@;boNvgA5hGPczF2$IJTB?wo`*c<0G!w zD*4f#?hfBm4ualQJpR9XF5hG>E4NUuj2v{$WixZ>sLw@m?bNxLA#?`!aYlt@$HU=7}#<=34<^BwQt7f?HQFCZ< zIb#F7OcsdyY5b3|SDgC8!fDe@?bl*=kl?&=!8uV7e)D?>tY0GM?Ue-+&7%G2DbGwd zIX+oFNB_1~ck}d@$T>kz>BG**8qVA}4Zdv;1kX9p8NZjXz7A(%hH>;XK4J8vC27&r znt(k!t&x_`R|fD=SfZH#!;T%sah7(&n18>Rmas+Rr;mIYf?Yg?Xx>pO)I7 z@Yi?6a^$Ne_N@5Eb2<1#syDbou|M>?Sh}}t({G#lqEC}rMjQAMn8%{*KydM|Yd)k~ zfWwREHEmN~3LZzF+=d*ME_wQeF9mV-P;ZUC=+C0v^o1LPN3p|qeC0)amA%0k_2;+q z{2cm7jd_V073xd6OmB4t&y#2E&tu#vo}c;omx2uNS%5rmO5MQzb^J})UUa42s^#@o zJ92{2{E9P0wP<>S$$V${?%;bS-(%@-GT-g|p2|1AoYqHwc4zq(@M)HPXL zm6Z0yW9tvMdeOhpxA=az*cEI7m&PzB`CiE@+j@ z0-tC2?BlbG&v*EY#pjo#4ZDQzk9oGiqiTNhe;=2$$6orT!(R5#CWBv%g+n)<$~= z&z7%UcohZr;ahL_AselRv+wAGv7fCzXw%NpM@fCKN0>gtd6<6#ce8hd`xCYI`wrTD zWJErsi~f@OxVjSd!5rF3HJE$=JLV)#g>?X-wNqh3oc?rjxs|`)L43kY>VlsFZ}@fC z9%F5^=bWZ~l-HUri{`>w?pehm;Bmmd8JZ4h?$rH{H@`h@`R1G2@Xf=Yue|W?hhBZjZtzb@uff;BJ|9)mb*}q%@XAm9>%;@Jn)(NArC~ zHie!P^3vYw%t_dYDe^}d2SVZAlYVA>RrfzuLNLnzfDKGx@>o^5tFW zU&y(Dzs&Y2AG1~OhJA5AVMZ$-D!evN{c}zA)so58-n znf9SzR&HI`uQjsUv(dv-W5_$o_IieWw(}UvLhNJPtbs%`J0A zC9d%^f5B1ypT%{UMNKdM-^)XoEeB>z_5W|H!_Va0N;qf6)|AIDT3}p7`FYHse4Pn< zZ16|dDP}M>AeV|bJh>G7Rvr@X`mN;d>O4Afmv%^>d5g0_@8CZEJYUc2cNf2#c$Rj3 zldt7SCd?T@)1uJVi2tM+J>rZY!f)yIF@7h&J+(&;l-k}ubiK6xe+-W4S~&Lnx~k@Z zZZnuLrw1|n^x%{9c?In~Jn4bpVf?al`TrcXPkRZ|MElqHirrFgXU9#vcal#31H9jb z_um1XHiOIg=sS7;7tkM9z$=Bz2Wq<97U^;=4*8fS!rby@tK@D`j>mZNT-xCkRtbF$ zzHw5YCPS`e$UC6pkf*{!_Ast@ zw)Y-;iB7h6N!dAv_Rj8lXM42M;L&%{UWVL^tiiUo!8?2pXRc{3`K#ddqp{_i}r0dEtZyf)qAM4w%1=4WO8Y zVpD>Jl^_a2hbrHw(Kw~<^LKJ>jQI}jYC zE%kr%-*lIsqVFoPtjGI%%g=1+Ef=%Yga!Y%L1PE8tz(R5dukx~(Fc3Whac%JU;Xic z@@u()pp+j7))oeWqYiO1Z0rwxwYPlf*Luq%@5hggk8L4i+Y27QDO>|4N%+kH7h9Nj zkMZs+yz3UR0ZIeGBi=x;*Wl~Qe$Crwt8(&TTvO3G zo5Hh(T$q(#7c8PL@waB?K96}UrLFhDZx+>YN%-L#_$+v64FI}&_pt>4) zhkcmnbn8gjKIha-OHpZ;+TDe~DFty|~UinnD2QOKl!^yF4V(h2Z8$EUGL&n{L z+#NdhoLLsu0@1i;x#()j!N}2feGkQ>1JqgW>_t?Ebqp&Tm``YnU^nT^o7y<;e)qX9 z)GKKC_WO}(4@#G#Hbf`u8rnDx@H6N{=tc0Z9SeY!uA5?CTsajn&J7^4(W>zn7aAx@ z538TiLcg3Rx?lT%Lfy=(>t?09-(AaUI5n?Fb+V`T(z0r9IJ3whI=~oW{h^$XPUBp4 zblgx!tB)sp+M3|r&%S-uZ1h9jnxyl**ZyR`4y%tZhRM(M19|E;_PR+MrJ`K1&2yTXP z67aJIS86&SlWfTmbp9lA?qTIm|6jJRn2g#Nj34|5=)iD39qXq)n0J(RPxdow6801O zN212Ho}fm{EaodcBJQ!Lr{s>FJ^hI|`!U9m144e=JI@FbUJK_=;?k)&J>)z}jj2=g z$hc&CsP@N6d}jRwW5thVkA6B(y*<%al6X7#LOnk0k=%ROJf*tL^9nW(wLE0=oG+W_ zwq+-6o`~IDZbt8@*=W?tLB9xf0ASqE0YckG`i-~x*r{hSeH@!#dsol0sntU+s`B&5 zd&0lesXCOqfhDp zt9@$7zH9uiwwlfOf+}aD&lj34uMmxRXY$UOp{{#{{}b*Ph9|ux@a~yS`sL`Z_>;W%<@$AKXxuyEj_`_bEgCem z1RhD=nE3nq#ovejW*Rz)Pw*z4EBaT^&_ahX!k521dN=w3_$xkK5KkhG2kwUbIX9JK zsk@KeIF_1%+kKE6zIC07qcsI7{BU{jaa^N3UP*zc2q=<#R5^W|-FPQzHW3e!cxv zt^Gy7Ts8GGH`ZVuML)YY8udgo8RTpVcz=a{7H5fz=Fr9RoQ>AhPl)Ahg0 zHOW2xAB}A|PS3qH#;trKoHIG8>!|ZgOyA<%ZrwY~^UL_iW=R7N**yz+wu@`xC**m8 zXLT8&^|$M5Vw5wx>fQ3Gu>7QqZy|qyy#r;{dJwNut%sBHfb~y+2j>u*YSkJPZz#_} zuZVf8-gPGHoFaP&sUPui>MXS*Z#q~D`E{^Wscq2{I3s|42^|W(1>R*PS(h_YUy#i* zDw^K#~Q+Gy-(!3vnw=Dsl~)Zt*1XKFSE{ruM2%Jw>Hk(-L`73yQ? zv1`z=m0!9ri;p%%T!%gsQARiE9m6_Q?eAF`gWID{f(rM;e?;v+m+$dqwArL-5@tItTYe zPqTz~8S-)Y%w;U+fnRgNvD9*(!ME0qX|-_?R~;A14%WAkBYN^IV{%19UG7v`Cr5Nt z-EY;9XN|gOp&r5-H2jLvfsj!<8uPJRB*!*F7r-t9?BLlkU>DUH92z&{-5N7HQrz2A zhut&ivngPJjaBKGkPq0eIhdZbEBI2BGctI8UXgq7)F^g6_Rr>>*m*ja&gAh4cWE8deB%`KCMsXHh!!I|dK+e~fkWsg@XOg}oqe5Pm zgZ>TkeDI!N;seFqO|ov~z9*)5S8z^)Xg!2C{H+0R z$8P9+oISn|zB;r<$d{I#gth3YnH*r}tj>_83^XQx_(@+F<2n1Q@^_$vm+n8dbUVIa zbnvD4%+8Z97@4oSp`s%Pd1+nH?T^4-m~a*}#hTfv&QaD!U90;dcVr9uxUT#oo?&fb z;J5l}HCKmpqtkIO<=JnF?O{Hk`ZwL>ZK-|iA-xovtB;)h zeJAPRE5d8m?Uv$w!0oz9x;PO0iaOF-V{{&WSP6L!j}p8dE_DV|txndzD_m>o?UDLg zD}E8iEr_2O@V~^kmNJG2JpMxJ*+1Hke+|B!_ONHLBdpw4EByNeq9u0JP-{b!3_bcV(1F%zMgR&4r4oP&IS^0D0LS!0;g_Ge&2&Enj_P{#-6q3+8WBBHrP-o`OebV98a`Tu7mY~~95&A3> z9jSrfXV<*-s(8dap6Os5(&LB0r`nzMtmW0B*VYB&$A@;T@{7cK7xTQ@GIl;FIzRAD z3H?;@ch*)mVvI4$=Z7V}gL5*$**@BxUm>5l_0jgZ_<&cj?{7WVuBcF3dED&L+DEA~ z5lm|ad8_dr0;lD-PQW*ktfAhQ4_mU4@f~sO8_F5r5aSFUT|2erV8&3d8u>MidUf)_ zcX00JaB}1jzQm_#T;)dZVV=TmFtmZ{;(_hSO;W1xZ6U0 zQ^VHQnhD1rUDR9dHyeY8@wX%y)A0=Y19c?O8%9YMYrix+EV4AiSybNe^014D8Rx)b zhkZ26OL}qA+Y>xYpK)lP_wW&1L*D61?`&{wA@I@j)O4swS6=hOvpwx8kvx%{OFCLd z{4mJve^Um;;s5o$CGH|@J?!>g=8}(cjwyK1%zB6N&47pCpm@9XTE~koR3jPu{P_9} zab%ri6@&MLJQ9DXYAwuR&F(aJGUklVYCU34Aa-rTi-9lm#$PM%Yz$2XJM8e6E7E5d0AKl*8u9+n$7HS?&AAwX)@dR3sOaxU$aBfpD0?4Q;9p!) zZzrSc{4bqOYhjR`mN9Jq$y8L&qrn3d4wtXTuG%iZRkAK-x{k45|H$NeU(3+}(gpQ%ZDlfTE4SlCtpz+yeLoR3<9?$rrw_as zx<~onv2#!L6@80Z+9AwV}o!;uw`dH6lEGgh6*x~zs2OK1qpy?gO zlxW7S^rH((-kv(|ldxlc(sAwvc8huLZfw#G8}a?827=dsyZBY%dk+MU4lFAxpXKq_ z+)Azh59;jou#4DB*k3+?ytl~hYzEG^v9?RI`0}MomDuwKziKYR2jS=9^0;A0c+M|3BHos%*HtR zQe$$;Gxkwet{bV5A*SI*14v>{?TC*ix>PMSAx+65Uq!)bPljYOUA!K*S zHc~uf%+ChOrNXlE!$r!nkJ z7tCM&uZ)A-p}wE|TAQ$wMb`@p8{?18S{~V(S`&}6rtp(AGoHGunkhmH zCH5vw?)F|r?{9~53}d#5 zO~HQ>vsu&YIm?_1&(r{1vlUL+Ndb<7nLu;gb@)I>F(DSy!F5 zfE=7+a>TYmkkMpq1QwkL#n?Ge52IRB~EHlLgvU{9W|% z9dweAzIDxBSJfD9rH-id?>pbXUW8sFDd@AEH2@A8kJ?vE_cri9tV6)q-Y}e-KtGL` z?(J{XY&GGG>@{ka@V?}m713A@{|h$Dm&8A>Q7*`lQk@Py$9Uqv4f`zAZ6wS0+UVT$ z`_Itsf;N=5c&)^ zp*IbUq5fy$P1qbUd)YC?oLb;<>^0uePwmkLj=TttW$?{@jCnG?!;J3`V?NB7f22Id z->A?17h`|F_11~aF>nLFapljbJq>Mzu#g>A^ABKu<$y)00Sn@dr|OW@ziq@DCy$gX>EYV@)U2abbR^XOl3#dFYe-xI%b4VV%e|F7Uzu7^F=cVf#*X51N$OKXbGSxK;_vO^w5 zCv5oc*)tZ#UL_ALXzYtrm{uIWQb^rg_ol%H8OMqYs? zh=txj%5^Rd4tQVUtQfR90T)jRA7V#D(9K1pBlPmxz%nL=LW zSy!rdXvY68FqLm$jUk@s;MZ#&?rmcq`V{8*N*=jqudX(5sHAl)^;VCi@K=CKQ-DLn z>#Yv6240a(C3r|~Dz>;AKB&BuTMG9C>B2zpchq$KjWl*DzW*m}rtiIZVso>FZRY?3 z^a}Y;C)DXo>($6xP`*j%&(GKK!d`#u`tA7g@vF+0f1Z5#PrjXF+cDnt9enl4UCU4U z^2wPbF9dtOgueq@K9TPU`t23L2Z8Y-t!?VrP`8HnPmiQ_RVBluH_QW`!(H+!k#mRe znIgkBANtlZ_5}5M{m9s5TNr;{dw9*DXiRbY3c6GnL*jk{*(-UQK(1n=Z!S=)xqaG1 z(~kk%Gs2in7`;akaNc;%dP1Nb8^=8)#%(az#RQ04l!9$hV-B9lIZ}LX9s71Jl4{5t zZR7kYK2!NDxqE`K`F>;cMALrP1oJxId-<(Tn*SH_d7b~4^2v^xXf};xFA1LzpYx4e z<01LX27FeXsZ(S7`M#6qtMm~kiQ1f7!rDvD$%YGK@5*l=zMph@gH6QHL;7&*@%>ZJ z6KTaiN1pNjBEG+%h+O@+>*tC4)ne|VkLzmje0=_mHr?T2o1u+;P&f`Rl-==FU~jYU zK{Twjv@d)rQ0##J{pWb@p!jLNw<^Eq>8wS5!g%;1xed^ma?={N&S~slEh3A;JZ$ct z%)|ETv@TzxO-$+3d}e%&@&n7)sIy#jj*D=qzXV)>g>Bd8;Pr;*#QzGtAIwC?~!W~o`2L`&Kr#l-p!iYtY;&aWf3qHErd89=Is94 z_0`6M^A6{^4!^LQ^Ef-pCSIo>;kv2O&)fzcmKymt_>CHPNL(<)!%gr*^f2+mbHxwI znQ820alyk72f@XYV{YK0`e5wC8M9{|cPMwKn@0RFyCTG|ndtF~_cZj2VIeMF>!U9n(VC(t|BuQk*z^wR;qonR|K}6q z9+~n^o)KX`{5Kdw4A=>V|A@~;{xA!_kGbCUcY%A6`n^H!;a>_~yAYa#*0w`uQD;>( zQCe4(ztB+QOfp-~&qrred(zR5@*d}_SDn+x*ZiYAEB(+a;UDE$qx#Z3y9m2b&mZLZ zx$hqzXuZ{L#93e6S#P(9pSIEN4|r}VZRVZYbC$inx{v2{f2*@fc1dVU?Buz^hwAOY zPot^z)dTP~#hi|tHPqVg3}dJf`066o7jC12ws2)SjzA@N0@GkMNke{LZG;$+C8)rTG+>kS+iiFC=wI^z{Dd~XYSwWPeRPiO_09v&qWR8h zS7&ea)?ac)4(n)TIMbVRne2~@58n99Td)3@PsG*xD^9+v_g0{%Ma_z8m(^RniFehm z{0zbm$+Na!p4hBw+6xrQUT8-(NEV+7o#jNsisdP8ad#D)d32ZU`djQm=<93j0Z7CD zBecDi@eJK_@Fx3bqtx=$UN{Qq4i-1m`60-X`bl9WyHco>FYo4E@4U1=IIjlc(*PgYomOgthFQ!lB z5r2$tVz-?CWdD*tf<;`4CksNP#Rs@g#>xowRO8=T~=}`^aM|xBd zzN$J#swb$}S(<)lxzc4a75sxoqU5>GOrbXy$>q4u1@D$m})M53^^^>#$S>8yvK8_&3))6qk~la z-g53K&n&#B8ieT{Pj##kCHaQ%VLRv$z&+WSuZk`s==iFmL_L~ujrxbGyB^XibF-OS z7$0;70`$xye{`BxISW1I_C;=`oAn=!Ecn&;Tx#N{%O~j1l&DKmpIc1%LFll`yB?b% z?nK|{9+>fFP<#4gB|eO4Ykt1J;dg)Ntx7-PC0UEt3#tR-RetHN^83sZ|KZbJ|IeF{ z!D-G-KsV?;v(s;Nfh+#9guBAKw{5Z)VH}ZRJ>@jdMy~BFPgz*>$7VK;DUF|E+w@_L zCGVNfV|Jc>+p=fS@mO2UyPa{_cGoM8YAn^yAJN*jGk?WUWmB;>?9C8PU%}od*1Nbd zgooB>Sb;Umux5-wIz!C8=U5xh+B_G}iAKy|lZ!9IrrtSYd4e_4dYG(o0=aK*2ufUo zHvJ}kU(Q;#F(#8Irol7Ba`1DYM-F-B<2<9j-)>_~@F@4OGyDYKw%T|3pZC=Mruw^K zfBdgG#W_FFr0xrpqbq-=Ni7dzTEpy0lymULYJK@yry)Ym$2KgA*rKN?=xoFf>Df@np5<175ZW>@$JPu>u6F!@-KTF6v zXy#ecFvycx9=t&f!p2(6WljljNp+iKAAXF!yXiX(9JK$ozvTMDNx{7-d!u)h`oUIO zc!ur7K3?IaDY}(8f*Z03cpqjS&%(!^g?ArOzNywn^x0pKUM4(Yu4j@juTjsTZQ|uA-;!c;xKGSi#J`9}B=`K&4TJ)p0 zy8i7Q?&uRv*Qm?Ky4J4o6YaCPCOiynHREFQA~T(h!5;SZBp6GK|0BeYzMISAhh7Q2 zUgu+TpIn>Q&zNW~f-k=X-^rVN>Gl!n-4T=Ct=ja&2+{F74|4q=zn>je`(0`>`9qy{ zc)etCZ&dwxuHlbMvqpJO?|tIJk~I>TIpPDr)8s)Fs;x)&X=%jqgz`N2zef7IzZ6m>4y zz4>Ed&EoQ!NYaa>y~+XLr<}*NlR7*@{ogN^%bobdr4I{A!p%XsD><2i^;e+a&CgtK0BtwjC&L$slL zCGw^Yj%1wA(N=4{FLc8Fvw(&AkU!)$`n_#PzfW@Q_-yLWf{W1{w2}cQ!7(d~er8x> z+x6#s$AtT*&zy%mhZYuryNjp=cn1H!!L?m{4DX6Re3AdjRja6unCL&owFkKt=ljoi zem46wRB!N`x<=c|vlBi31;51~-pBXx&hNeQjZ2=m_`3Gg)TR_CNmZk6R^dX6Dk44afK^W9E}PD4e6+U*xV*9@G)bU0Pn@Vt1AD z=sJuk)9-D|UgZn#TZQL+*yq{H{JFO-^RT5sBhEqsudbPh{Jy}g?3oE%m~)i<-PXC6 zl#9;Za154l{hw|(uQqWe>=k7Nt}~h#XTQ#{bH*2ykzWTU_Lbs zY&e%Jgn5zLq-#Cj$&mBPSa1K9Te%otw_x6qje1SlXRDSOQ)$h+Bhj0ps@Z-=*7d)g zD?lT)wP?=udEbUtTsgz_p8$@k>lbx?QoS9z(z{)b&e1FQ7c)lcOcL+x_O_<-{zdZQx3-br81hPfn@nf0fI3T7ZeAHb)RAAf2mRyOgZ}pyfN%L`#@Fm6@`tKT z*+bP<)9w=s;98Ftxr#l+@UXY8;=C&S{VCdsT+zEbO5NeK)%nv7e#hWpI-^cCPLIcH zXKx5b9R*TIB`2Do-*sjU-_w&DGbQrT>-p!`FD&0%DhmCrf zl5M~m8I7(~*Cj(Ar;YxAoKxS@Cl}_|1`8Z)DA7@x{ovdSb;vEe>!80F&M!t!_$&Hs zqtBQPUU6MK+4Ii^ot!%SFUeXpdqCLSaY@ha2n^<`c(tDKSAbm-?{f~(`H}r>4pDe1D$aNLr z&BDy8V1dhTUm(P0m}vI>Wh>iMj_%^Do|N`?k*|wg(vP{?lt+hM?#+~pl7*AgCJvaCPj6(xz@nO3| z*B5^pXOH=x<(aqF?~ZWVObYHOgA+URl=Zbs}s7>0Y(BfdIH}SvlA(~@6S?VI@ zS(A+G?`w>s;QGH^ABRb=*B-LbQy9+!^>)<0RdoIP_-&=YcXEG>LwoRdW57l6LVoLB zE6-Ao*I&W2zZwr?|<{`SNP8G9p?FyJNEzbY@QzaOQCZl$QAD^6@rl$T|(~l zrQl&0qv}R3uh?eS&aR41TUAwFp8RIUc-_Ew#YpPx3U9^Fk#DW~oviiJrSAIPlB?e_Lq}^pLgD?@Z*J ze5jK)^wH9YiMBzWI(+mk*{U-|8@kq<5fe>u+QD!PZN#Xe3(;NDh2S#2f3fSJe^)%> zZJk!~*LFonG+ss!Al|ZqXRvah9E)J?gS6;Vla$dXbNGl_$+C`nS(QA5L|T z+Wo;v_AGRU$W(A!HFv0`QyjS_n8@$qgp$9(ih8)Q^jY;-ujpTC5$HpZD9 zPF)Gs#js9-S997b_hi_|nRP37MTzcAoaAXdd!{kJ)QzL&v9~K(>h^8{Pa+@bKRG7( zhBU6&$WHITGn4G%71ZI}hyD&utd3h=2mebq*0tH>BM67)%?Hvw#|%sh1QcE35>Q;s6*Ej#Xw zyh-C`e%YHwbvg9Q^$2Ijymi{umA8J+eJIpV(1oM;0GjBF{F4yn1OE;@Gtpjv-Y9s=4<-1b z(|D;-$SwY#Hf97=LckoC2O7=f;g8ttH-<`>cCd()E*QD13 zpW;k3@!)XIxf)-#U3f^o5C|4A_}iy+?ijYGAxE$|)x+4SolQNwi0wW&+oF~Ru!N83 zJUj9e;K|g%?lH=(UKem)u_u`6+=H=2$;aLJ8kcz^&%Lxf8QsF>I(A&e6v$&MxKW*l z`99ei_z}^620z|x2Alb8YNCEGpPxs~;NyJe@oD9=Ic^5S`uTjn#Pk0UGlTz&&jmdD zSi}r&<-?*6j_322JpT#H49?|qIiGX*{5^c^8a`=0st0URM*_<^g5E=31>=iwey?<` z5D&lw?fZ)GjP@e7!1pZYAiBqq@VUk_PWTMhrN`06whQ+8u_CoNGt0_Ox=-i+4yrCT z=OqOb$j#ZuSuyf~Y%`ZhKEtDq@-DP(TjgEc+sbu4AHyG^97>(Rpy&0hd>X^h-|lHP z=W3kP+!!ZYxz^6X&{v{%9#tPst&f@?W1g1q#|x?uZ!au@JDNB#cl1QYqG#*5y~ zIoj0HEa?54z2(zge>ZJ_Nc-n82iY~Nqft*f@JrxQ&+rF=+tFzo`s`G2BE`opGH-Vv zQ11H-;5w84l^4(g-cDxD&Dbp8OPI|wvNc_7YKGiXYKdF(2EzRf)D;gb;MJB^?mYGr zblcnw->^BW(1i}O{GWND+QB?WWa8!csvd9C{Ck4!tM3V-nUz($kPjl6LqQw!m|A~E z=Y&Kv%d2|NDjWhAm@n_PEa>&Vo9XoRe3a`t7p`%AOJ;>H+>nn9J>Mg@bzB1YEGs~N zMYm$3$0hUl8Vdt~!<-%FHktmEYuA=xuf^l%c^zC^S?u)CS1Q&j;+-z%;z6^+ShJ7@ zH5X{o!f&u4#*Q@z^!3bY|F~K0C)3bj>AC896XWbhx02bD^zOaP@y4dR%k9Vjd?e*X zEqO0Jhw(hwQ|{PT^lkPj#1gKh`ISaYmV6vZE=)x-vS@buf768Am+lJ>rM6v}->n*J z^J6PLjY;qxI?l!z*(*8N%Kex*bSy^gXDjoCa7M zdFC8%`h~Ow{>0K<`9yl4Hc=ULAEEtP!1TlrCu zG%yP3>^bDhb3vr^9P)s3Bd80QB)8PGcluqU`l_-cBfP7eW&CrSm#@a3$C@-}fNhaB z3T}neslgVT{T?ZBtN5w1=;=A?#EX`7y+Mnj!KYO}KBe=PFT?hyZXkTGLBpbL`KGC> z?M0_8^OzSliuQ4Qk^Lv^RfB)1fAuXIXk`xYpFv|k7xEDN^I@Ns{oFCxVol6XeQx2p z`Wpsq>6&O?eL<5K#qdFf{bXwWB*DQ%?q=#q+!5r7XOBD=`#ppKHV1J@3mF$HtnkGD z=Q_|Ju=vMj(;Dj1&X13^1OKSG7XElG_;qby(EFk@yZmIb+t1EqkMhht;rU^cVvcvl zTx>H_lL^{8Ecvl!*f39exUG97_#=GnPuP4y9%6WA%YE<&1OE{3xP|N4i#UJIUe4JX z&`4h6*%-`V4$_&>-U|*zrgnm_UH*+zsWUQl zcSUtZCQ@fazIFWY!PG2tG4e8E&^Mvmt?@F==93F^?4izc-PXCrSNflVzfNX8T7x#` zkia(_&8p7-6~0qqzmT(GOw!&k1{@d{ab7rP*;fO1zJYo8KRSYi?7D>SP%e#y?=fcC zc*r{POMw-ArqUaO?gIP4S%Z57-wZV$h>{(cX(HQ7T*?n`@A-I&nG&|ljj!w1J9giTl=WTv5#6s@E_?z?eHGy zLg*m=Jifn!4~tx#aW-?(HTAXTkIxRz(H33{pJclxv5&=DsrfW+GB8M(HP}kPn0BMA za~#+>%x@9%GY+|&Cg(;j_%Kv#e*GWALHaohR*-i0QA2&*h;}#T3%aYpz2-dE~@SWT82P z-f;+gg)YF=2{G2BEgznRIvX5G*ek2r8)g&V*8B4Nhxz2tS<>9>mEa%JKiZ(t81OpM zWbPdf-AiAYcsc$}1DqV{rSn_3Hk17c@P+8AFHiKO|Lg2|)iDqpb#9jI0h7koEYc?L zN=EDK2jN~MlP`@*OLc_KSjQ{rrCYoh*GjFzq4?3Z=o$HxoyzlQs88iPZi>kaQ2=^ zlV?gliqlrxsxMCVj+c^=(dl@-V`|$0Z* z=TrfQ{l6woCwx_%S>cfQi};Mi&E&2%i5Sh1h=6TGoF%Hgx7<@hTB5-BTu{$uP z4cZT70kF1G2ah!~Ug>~&?EY?atgWeC*muw{?KDeQm7WUTSjhLrGrFf|wx)jQ!{000 zoPB;s7x)oG7b8NtnD0N1JlAi#{(BX_lSS6~0%T%_eK`eUo5-kWn)(vJPIzM>XXIP# z1V=3Us$jxs^sF~ey!vhP33$|1;GkkE#3GTIQDl{H=yvXJJLUc~?n`dznLpzG)*<)x zj;^bn9QU@HCq1XbT$d_23?Yc1Aj zN&8Dh1G0shU0s7Vm_s;cwH_S0&STa;BH&u+{v~Ydp7+JwCc0QT!5p zMKImUbBZC$rrK(D`Krg4tk>$Xzz6Butk;8*1x=1uS$*jwWIMG!-#oFyl#T?P&r)f^ zZ=${~1vWAGh?TDEW`_Ixj=@7XFRel><{|Li7Y}K-v5};|@vQDQuFv9nag^+4;Ezv% zcpNeAPVfHDbe8XbCST6Yf0i>%p7V2~4h9D~!)7dgwzf=PFoXAImel5lChKjTVHr()mIi3|aBEzK4yRep}z$Kt4rlNwV$eG0~#vir5XdQ;jCY zw@26M(3%Oplm>!J`L5ZfM~@{6DyG%Is?~*x1;G-wj((fgFVXK!q!yo zLjqs(giC5Rr{cCTd>0mes;G_5Pg~>bxD*91i{O%cr<%u^y6!MW+T4mAAh;zR)iYV- z>sdX+KE8{R=&?5`|Bksd>|pV(Q*Gfm?P+}PWedOc&;K!7_=V`dZ3}C?UZb7&vW2x~ zLA?*z!d}Zn6XVknpJ@92b%J^B*AvWkJ{|uw!SuX7!Q}YZznoy&_{{pn1e5wX*NJsW z?it5@EaJ-FhupGT%k=jR?d|QvUo<{tl}kJqG47T(fz=z(J*pD*arRfj*aCSYukhZ| zsnlFTe^kw-iF-S|W5DY*o^9WQ4iDZ&z500;hMaPb^DKbx~F}|uYs>`fDgxP^sr*Sd;)xv4I9d{5;}Ss zd7dLD0h$u6jKMx#n{>Qb`cm>suJ<}ec7f{||EJXLGVsJ0bT=7XmCfN~Zzzw=YRu%t zc64-|0`M_P%O@X|IG0eBNM;!q@Ymm*h<9 zMZZ$hAE9~gIP(x3Vx`Sh;qYtpl>{c5zviU5Z8Q5r+s%Q;Cb10@ZcVRl0-o5iJ2Y?U zBPNTkldkEDF>`5IHn=g@d(G*^Uf$~B{{{YEF~<|bk+H~Q^cjCM{7m-6Ec|$ihlcad zF;3U>9om)t{t9P|Ol2IgQlIy_bCg-sMI4nKDXW8*F^Hri1y#QhiljHzQY9x6!tADm@>W3cj4#U6w7ekabw- zxDW0A;BIn=ivBj|0D9KOF?%lVuq8_;@!6Vs(u?wJ3+t$NVoqQ6Gf{J|;Hdl>!LAwp zKrX=k23!R<>C#)EyHk0Dcy7(ss`<-4A^HVA;t`Vn;$foQOY5{7%1?9;*$UEC^{n`i zc+xYG8gIba7y8MJUGtHNFHBdvz(MWmdFjb&ms$p)4K4YJ%&d_22hQOqw9%*V6|z+> zkgXK~pA5EcGBu~%&D_s@^TfHy(u(rb68Mg;Z)L6sTG9O@_7%a@0%MXq^^jY6bbs{! zh{OM~or~Ajd=Y#5!u_09pJXa^lDEWvVp}58n$o4?p40c4Dd%j{2lCD6FdaZjP|%(u zSB!c96L!~Rg@x_6X%sf!1#5z&#s6O~1luD8^0VRXsYrR^MCcs4lMNw%ug;`ZEO#vT z)pi^>Rx-bF%w-FJ-;=%NAADx2Ex#7DIwp>7shIc^ z&zxgV<{P_mWDMAK?BiK-!36VSdJlTR9$zpOJT3SVx*l}YU4B-$M87EmjoQ?hWDRoA zwERz!!?HmHYn^41W`Be71(hGDb<%odxF%UB-l%KZUn`r(&ev=u**@}Z+>YM#Mua-l z^dXx?d`xyrJ}dmF_2D?!PrTojX3cm4mBhAwM-MC%Y?Zpd%)z77WKhqZXvI{v+@CwcSuc9?Vf4~dIR?+3QB$BX`+ zXQqh$LmPb(@C0@vHUH#H#)eN&`pLITJzfmB$o7#h`7X=yR{v z^4Qqii!=6NC3w1Y6UN;$vd_zZeHCLS2E~|#=NhlZiq3+clJQ1byqIuf%|vewIOBjr zZI`?LC6lnxKEZj&_!M@3aEh(*iMMHd6Z!tO!+hq_4r83dxAHIKvz}UFEQ|?XAT@Bh4c18@3EHg=ge04k>O|3^MKkOV*pS_1fCW}0a+9E9 zO6`hNsf~6BL`j+``DHPt_TCw;L%|tR1}|?X9^%u^h!iweH-N#O9TC ziPjYn)(=tizv7XyH4XWz#*F#T;lEn_H$(q@+po+S1L6J(>*C*=FS5ilR=Ht4n5#5r zAbZqM$H~wQ`z;4+xX0l65%K$_q}LczyZv69(Y{JwnM)S<$cUj1HI}-IGb)FJFX89# zdh07Y&418ojf3tII$alydFMF&%=y?;+0X|2lKUd~J^uRSqYc!lp1H-&Q}4Xle@dfQ zW&Eg)8b^}z8%gs9(mI^4T$7@$&sfW9y*i%nlK0Qy-t1P^m0G9PW~nKRF) zGbH~8s*chj&)~bGI6sO<#Qyaxct^}yg3QqCg}ev*#j)h$ekk{&i#Ri{ zd1vIM_B!W`ykr*{vn%=RPCo5_)qa{a41N&>$-$L!^pEgBrV8_|J`2y=P2RuxpOeRg zlk6>Cuidx54cq%M)p{$Qhksbme@gXC`;SDdMXI+BPs#YFja6@rA+6PSB_H?HFOn72FAd4<TQwpC!H0J&pL{Gp}Vkr*nn{e1S{& zJK&$=op{Je_?F&@|0j~@7{-_@shfCYG6&DGc<)ko8<{;1f1#eUdB%p$@5t~zuX+Ey z{)@x`N@O%CWi#T@UCYAI)(lK`;_sNOm)SzPH z3r%W#(++3LhiWsmSNI>g>wC!SbbDRze~Ep;Unc*;pJjtP@>Y||#~x}va=w+kPi^xe zaYJ50A6|5FTCdz3j!V(3#_w|IV$4FHb;f(ick|qh!C&)DZ7aJ+oi!SP*Va30kjEFX z_FA~_>(&}ya%f++*Mqk`6~Q*!rVW~M;_Jk?VJ=bZ?xq~=A>n)t;$vj+fQ zL@tz`EO}F?#|Y&iXmAEP+nG(!D0+Y>`VQ$=)YfmOEb&z7U}~VfNQ(Uk>v{g~!-k19 zz4XP%L{_}t|0iq6Q#?QAxzHkBd}g3%p?9|n!@*_nG12=6(PQjt-RmE}{8|4OGoSUx z_U`r1V_!)7Mq1B{=iN;m)IJs4-RIDYu%4k0CehAXhv<2iwGVy4i|9sNU%I?TzNuXF zSF{&vJp1Lc{+I4b-{X9bCOK;uyp=|49L=8{_~<0^mAz2S$@5uTDyErq?&6iR#-MBP z|66=(8dIdpXiUWe>G8F0lq{rmm1GX-#UxW{PeA`i89TDMOhEsVyR^sbSoD`o9M<2Q zd{p}UW(PW;P8}{hA`QOItzKvL!6229EQWsrZ2}JuWmt`AN9pk)Tx6kFwXXNy1)WIl z*SxN{`)*p0nRzDp$(O{*4w|s zA4>aXoA5D{?kmdPU!6n0OYa43>_SJj%YNLGZcF<9U1Q(&-$fh7t-lKQ*<#7H*k+)^ zy6)9uT02NS*ZRQ%U+Kf_b#0b+%#)T)=qL8Z`mk zS@fya#bbM)_kVHi^L{+X8MLH}rvI%x8n5#j2T7A!7f6=ADed~B%kf#c`!i+sfqcpF zH{H_jy#qRpe!RbU;fgW81-X6KUT6rp@`>-Z+07~15c#q(jf{JM`ck(szGKgWjE)SE zrthE~^(QtVPl><9v1yK5*^+!YXzP%li{`}3MfZ}^#TTDYAGwwOm0f}QbPx12>C@h!d(PB#N(Z`+arAq7V&>!JysP%1)>`8E_tB4wlF$hD(Bl0c zVT^?|HijP+?I!wy7Q9WAIWC1fo2UNNUGl&LenOWn-Cw#Bm&mOtvSdG^UeKs&B*7H;58pKD)x3H1>#i301}`}GV@j;HPo^`T1hUf!u5 z+UJh2M~_~YdGCdgzN`DJnmc!pu7h-)l#`;2c^NZS87tazT^EaaHMZw(_~`jwMrG zsN_NM(@=)b4;7`G*8Ef1Kf1xc6h|n{gAYM}|MTCc_lHEgTK~49tE_{DHNX6f@74Vw zJx58S{UN10!nd!oKcu~(>c2`uOt7__QF6-0Lj5C}LqB%PzT*2~x!7$O`--?3H_G?9 zuuRqpywiBoyRhu^fQK#iRohLy<7d?S5#Hs{7q2|pYAxkr4N$7uyvpAwQedAq`D}2! z4qJTY{Ck$UrJ2i_^V`?>ABI=Uf9jdHd!?kc{>X)Q!$aZQ=b+;~i40)7@HEwjIW3xh zmVK>+H*PDorv2x8?;;k;r*CQVx^AIuILqy#(J}wP2QIK{77-_pYb;&xqq%1TJ%?+> z`z!j6F7BgsC)g`hPI|fByp)*!9>YB;e<5T)T1wKhcG}#l`sNyoKH) z$LowA1HL~wZ2KcQ{%34h8P`vxhKp~YABbUbY@$sJNk{y|^}oUM8{idV$rri4<&U+$ z=tmhRan5(x#k2IfvOmwsHxC~k*)$HOuocb2Z^kyj&xxZ(Sr&POww*4z+RTQaA?r@S z=C8gz%3c)yu;0S3I{&S`$bbt<*I0d`l`mi0y2P8y9;)WLiSqY~)fPJNIT)8yUN@Go zf1V;a5;?7OF?r2Y+(za=^}F_?W+6914?b~~kLlYicw`P)1HSr{_O3fJ{Q>`B_jRXd z<<GWi;*1lhU{4(|NEwtxAa4=k_;ftQR!?TI)RhPZb z%TkZG-e2nIVB8MM{@8{O(I$@F2R%Ud_?}o!AA2KxfyT1@-E>~Mm6C1EKyfy*c6&(2 zt38LfE^%wXn-<=gmzjg70w-AaNIsV=R;BG<&d2t>dz?~^KS?+X%hH{_2W0Jdx zRfe_7jJSh*)gRdGdC|Tx{*6Eo^^UW+822_D{@?-jtT?Acdsed#vu710R+o>g!I=*C z!`r{~Q{o}Pw<7Mn#T@5aC=O{d-w@1m8<_9N*CYN3b~-wD#Nvfh1WSF^_GF~yuN8psyJYQ-#Iy7^0)BQIUAkO zT9_a8uHt#Ccx9e*F6gr^WH;HuPDan$%zZU=8rWIe2}=HXS-{VSjuUb-I@FnhV&VF(<|y#bsoVJNsOK ztw0cC52Nld{gb$#_^Ubp>@zkRB6pY8My$0_>J#^#Jsiv4z<)Oc5%z5U*njh&zi}42 zANs1x+8=xr#b<32d*CdxTCTtNuH^opj^{t)p5T5x_Xy+RLd6sU_u1B(Ajb1d^W1Kp zr}NwiEE_YO*?T4JHP0Ri@S9^Vss@_GmWTgh&J!ih6U1k%w>aIlIHPoGa2{!%Zrc{N z>nz5vVX&5kY0T9Ptfy;CjUk;<|$8Om-r6#Ny?4O-ysX%o5Pvc$p-e# z;5#Ob*1U~5e2>6OYno>Iu|2af=wgi`o~n3~O$Bo{1aY6@iYa+^47G8@@-y-3bpA`{ zL+phyHd`J?hKa8A(Sdl)w1r~3G!>)(j1A|J)NX}fmD4D;nnPA*ei2prFCJ>0XSEsVw2 z(@!kE{x)wRb#BhC@jLFK9P8SmW8YT1a+T}1^ZvY#y8gKXgZ>p0IMhK@VGg)` zk8v#)N9f0P$`_q4RlmWL;1zy!LOzTI*9c#Tpev0|ARZ^Oi~RC$ zS6;UAx}o$l=AkN0Wd4`Ddih`Z?Xm~px0SpWkk?AiSdTFmR_Cwtpu=UnJCnanF$}FB^OGNZBGXXG(}geOHXrWkfd=6VqQMKG!H%bf{N`8= zK6q_WJhzc{caV*=_pdx>Ltk3^g!$U1^Bn~5&Cqv}wn>O)bI7kb_&qp;b$~|V4sn{# z=0oINjg6IsHXL}7bYYPhy}lJi)|n=r4DWO*WhLx;%i_@?t1^*cMuY!+iPJame)%MjoBwoT({9__xFyqrs)uhm-gGT*q8FSJ_mXIrhp!B$H$ zfaq6s?jZl_ct?lL86KzSfLi8&c85722OmtIp6Ab}UBuIv53o~#|E3wU%oD<~GrKXA zG1NxCH{a)ID|^#x=X-4Xe{a5r-cQf>gV6reaNgG3uDL(KoPMgG3jIO7y{4@5v80C( zZw%*m+A9IilW&7;QM%xR^RnWPx0L=7+*{^M=X^NYw++1!`-6{BhuOT7Jfv7LdN;h7b^S7~acVmBSgh`37X#7lJ>t zUkKiX{8MjjE%)<(mh$saH(*i(^m}7mO#fcm-ck9;YgBiH)*Hk-BLU7iYz?L z*~Hwp3AtnwIu6bnWsX+=Rd^a}ll11px9vDTq{G`5LWc{__ufK0+R3aP!??&FKrVSe zu}ud3oail_%Wf()IjhNcHTkX%#^`_9h+*$q3T;xLlLWp`HvOuyLOxok@==w!_3&*g zD3kS{%DhlzqQ9t?xq`Oop*=LeCf~~#sK{>z%g{7 zXUmK2Zbe@F2W;81;I#}~Ym%GGqV*`}^9<#t2D|f9gOvqnAv+q>Sf4JpyW9&~%a*e_ z$We~u0p(*6LoQiB=6-mU_ow_D;!PVP7rxY}!B6?brrLAl(Yg2iUvSK;T2xBhJH#T|^%Ibcy3*I;6jbYckOE%%q3h|G^SXMWw zT>hCK(n@z}7IXqGFAZ9hjZE1I4^`d&jq-(8Ji8t_ZY20Mbr&v;H&n~sTq!#+5Oa?vR;uMcgWM+*|;AXM&^nTn@xDsfQMqITn--n)OWgdCug*;rVr%9yYAR=VK|2FSk4$)exY~eiXmTe=9S2y#6c@f zLhi=@kn@1&g3FC1&h+yn^M>+hen~Myf5h_}58t`tqA;I3p}&hqF7h(e%KyHbdSs zS)2Crz8M-C2mMHQgZvDQ!p~_F=~%1tz2X+DFTkNfr^uQXe$71xkTuZ}O4ghm%9^Wu z$7Q|zl<2gZ_*S=}^MX#PpXY5JvK-TdLZ4qP0T zdDnKz+EHFNaYcK~5yUT=+|7PES3Lc2Al^sWD)Hr^d;dpdvo4^z1G{Bh1Wt0Zkl@yQwjLFtW&feq&?2 z03AISNxS>TGS7#|% z#}(Fc&zGk>!uc}!b>(_^N8BC2_vc<;@_}SE$pnf`WfeF-oiS7o&%nTPem6m*bLcU@U|#tW;1rVVR-$x6urvz?Ol(27Kael{VZBeB8ia20mioF9CZ7{yX492HpXD z(7>MqK49R7feQxS2E50>TY<+6{Au7F2Hphh8h8WnsDbmqc>@mv4;pwaaL&MMfL9o} zA2@5^Rlq$4{uFS=z<&$8$iORr(+2)1aF>BU44g9Xhk!c_ybL&L;5&ia417DVW8hnX zn+==+whjE3zzGAt57;vBEx;#;Js}!i2z=bYHvk_o@Sg*F2EHEnkb%2^4;uI#zy}O` z9dN*V)Hn0V38~Aq% zXnzC$2G}z2{{WwOYo+~v34GkZKL5sL2RLoue+2F_@Gjt#f&T%x!@xU%lLr1GaGQZY59}ED5#VM6yTG=A9|TSqcnh#) z;LX4%Ix6iy0({)S>wu3K_9%<4E%oJjDi0Gc#(k@0jCXo z6L6P-Zv;*m_&vZK2A&U`H1NBC+YJ1tz>b0E0yi5t1#BDm?Z62GUj=L#_)6dtS614; z9r(C`=Kvou@Fl>Wf!_pt$iQvD2Mv5a@BstQ04^AKI`AF?w*ZeB_)ma$82DUZ*T9p2 zM-6NP=MDS@;6Ve|1Lq7}2fV_-ap0_hBfvcde)UG$-@v~GUS!}Cz-a^jH*lAMe*v5_ z@Xvrd4E$r@q=EkvxXr*n0(J~s0&X_22W%Vo-+>bbehJtz@V^0{xT4bjF907m@Uy^2 z4E!Bn&%pl*e8|8DfDan@3E%?;ejK=9;C}($W8lYt#|->Wz&i~5Rbbb^UjZI9@ECC3 zz<&=sXy8YIa|Zqb@CpNO2hJM!A>bYZe-=1n;LiXrGVmyH+Q1uuy9~S@IA!1mfIAF4 z1e`SRy})e-UJdLRxDUA5z&T*sz@G$882A&wmVy5U_{3W(?Y|uOxPk8mK4Rbx0(%Dj zE8s&0?g2h%;M;%?7)V!Yk_+Vd^K>!z;6RyWZ(|qw1M9O+-2a)fKvv(6u85{+oCnck_O%i z+-BfU13L!Z1l(-k4Zya6^S}uM4+C2UUJHDpz0&?`fR7uvANYuYR{?tl{uJ;b1OF}X zK?AP{}phLfqQ^62EGk=k%5;0rwweUzH#LJH(N(L=U#5De8U{8=?#{30%!FD zT(hE<)rg|O;|$JRjb*j-?Fjc~-t9*Ln?<`L4bLwVmgVx^=H31}%X*A=hj`aafNhsN zX7j%J9Lst-h6bm>vRe553VCEm+sXTG^6ezuk9nWtzY~<_0Y44ApZjtCX+z0=0LRKE zzWoxoi#!hk&*GgNE_Z-$Bkx`zpO?w^Fwal(?+Ma&aBl>crKCH=`y{xo0M1kHad2wp zI?lfy-@5pg=kD>Xi+q~E;Rxky1>gBRp8(%1SHIr#PX}-Uc!)Cg@O^~mW^mZUw|3qi zckn!$ zZ%x!K#eI*4vwMBaIx3*?bLpdHjP9yEUJ3mUD0Co>4xeUkH9_wIBa^d{7- zOM&NsTZ-!lSCX`|_?9A%Wn82De}ezU_-`v|f62F{l)s&KDd72}e}Qrm;4_OdMoH7m z_fgXCB+V@T|1tUYlh<+8iFZ3mw;edkzbnAOA$P=uzpX}?MGPbO~AWv;LNm_#AR9&3(0h#dQ!Im)Zp=QmOIamtoXt+7B%QRz;llhmG(_WzxY zhnJjv?)kTd{E2h>{ZOBcO>g@W>=v$NKW6c2?TvVeG-XjnV}`O)xu6rIn9CbPEcQB1TnuL50&{10G z8>1=ogIU@mCqF4`3*B{efN%1Hir53iS_@s6gFRc4wCu-QIbyad(SXGxm4h z#l%f)plxb6!y}$f99Fs$q*=FfucvhNsS(d2pGf+1USteDb9&@S8w{iNCg zUunj}xCnWJa|d>%3o}w%|bls`uLRu^YAfJ zKj$ceK07+w*>qUrh>i6r7T>UO4zy1v-FKZu8`|2dmkx9|_#S;-gFjC#-|$12QkWr~ z=4RsZRcvV=ytd*ybqo2X@E4j#8NwqEEy#a!ls)hr_U53LG2r00Ji>dI|MzDr?`H9C z+?@4g#a_{wmu=zmx^gZ{KGY={KIhA_FICLM+2Qlnvi4xxfw5(oGMjzwjxqek#?aBS zrzpG04htVRTY0co!Pt%6y{_Ep;7^su*N*+2H>>@yql50YbWrX*{%_B04Wb3^yvyCz1gyC#my-(^KCH>P+)?1^98k)-bKTCe`0HC}s; zy?*RWV$?g98w_!sM_cO5$MB5lEc?F&?53TTV8fDqUNS>lBo%McEghWsj9*I~>Qsl! z#&UCdB-r?|C%oBd{EW%t(2~>NIv@>>m5yr6W!SOMs z&57&89t!?dYZZg$_&4x3qpcW&t*`3YoV$|X+?9p$E3w!Qf>$z@>MdwW`_!_r4Cf!c zW9-Ey&y^)LIqjAzcmC0&et2ifDaOb~tL$`Q5dR~v@>>Ik_p&LC+V6T?ZE`7NVqAgozVsQtDbJXJ);n|Log$`P zVVS4B=BPdYad_YJG0`$~46Qs5?|NQm;>>o4S>qBv6#8q!j#hNUw^IE>>>;kY*9+Uu z*;0;K?EBCs>r;<=@ysSKn*D%!xxPm;8Xk=~N6#9ykl z;jiL>^wC0M!DGK2+R4^u;D=e}SJR*WOnw#HD9)T9zfMQx+*l$OLw%fbn!u+mxsLWs zYkzkRXG#?DaefQ$&(~OnHXg0ZBO6ezMNEs@oXUj;_U6kmVvaQu|1CCQO}P#Kx6t0i zUQGKg5KTOq02ldVSLuwluGe{RYGak7{Gqo;X(m5}dyf5^{uOV;61)!Wq5Dgy{osM&O zN4eqL51#b}(%YlZ(AM(0%wDgSxjmfMo%O{CZKSb8n@yR;oLs}4Ty4R_}I8$#b##jdFKaU=XzeuRpb+`+hPV=ph-D%-*(-t$R()u1)`TdUur?4|D_ zee?^^_*g~WNao4Qg}%m!HwEugyUOoeKE9HTTEVFioP0)cU8~b#4E3d z{zPA*VdC5sFA(fdhD{qFgPgD!n~d9p$3F#Rvm_V)N7s-h4?hoi$!E)v38sB=qs&2H zq`o)#ab({ZY5yBOb0YVQ-%;_ubsbeLj%8&$hK@?NF7wcV0>x(8jAci+G6kM{cjk+)hR2 ze&`(6ubx5Uz%5+*RejL4o;f&(G$?zwbW%V^R!JI0&ot?DNqh&CTl{U^l)BorY!l6 z&Szd$ds!*fcOa;N7bh>O_;$(m;5Ya|v1%?|%Q+`4^yw<-RD6H$UhcO06=?R$F^hF1 zazT!^i4@!~PfuFN2)*7s8+iwMk8w7OXd=njn(e@!ymiFh9S%O&hJPl$obu0{arhE1 zURYIBOwm}z#2qF8&r<)7hEfaP9Rr;yI__Mf2b{?eGxATba#s)gMT{KtBWD zpQ`QQ4O*`)L1x!HX=N#scd2B5p!aR$RZa6=(!^;)#WImyhrZ7v9p_vh6AXVSEdthE z&u;}zkY4bm{2SqYqj~;wzE$(M6j*YX&9{X4ml%-8;7!;PSN^|%=Vk-9ke9x-nCIzy za|}G0Z`j@;qgVcGHuN?Y}<5ZZ6up2s*l&uU-N9_o9vp>dG~zCZ-*yG>|4F**oUjn^L0_^ zZho^!#EN3nyJlQjZkARcr3;C=6Z}fc)IN*!;((LSTQS_@dDt3G!EmKcl z&!1Bt(snw}TCqDL*2hW_XNfnPcch6$hbUt>@|65(A zlL!65kpY#lIhTLW;|!+ktO_5C^Ip8{+i#aoyz9SN^axLDBu%IY2Q0o_rVk zLCASs(4Oe7hW<*Pm8M|QC{98(jeS;{uaSm-kE(v6Ta|l`DHpzSG->Fz`mNs{C=NOU z#jS6%h;LP)>A2{O{_KK>ypega>vH+WDh45Ptb-p6c}J7(z6fV@^|s<$Lb|S*_`>kL zf6}&~KgPLyq?t~db4Zg5=>p#p@Rs~L&UW{~Po4)y=3Sl9yz22G(x^`JG9!~C^l|Oo z6z)G0ST(@3x=uuGYNUsdvzARC(~<7|&{#2I{wiXTgkv z`t1g;0p4j~)+3A;;$A1+Nz$$CMpvS?6c13J-bkM|(3hX4T_oRcFKi54i~2!pI>&4W z?})?Y#rEdPJ9!^>Y3T7@WK-1vzH)RcIF1Tu3p^vM z$~vQ^vKF|RkTxgrL$0*fW66P<-CTRPE~KnYwU#$Khy5%#?f}O<2LI0i?>6wmde8rl z8Qh_z`rRf!(OMPX(b@>Hn=3faKMUtybymhux54>s;JnA%NPJMW^J1^DaDUj=Rh(Im z%bs$r__%z6MK^Y4V@MCRnLh86;3U3T0H-P~Z8Yx==pA&koaX}n?KgM}*8>J`cu9yi z^fP5UXWO0GzW-`)onvri-E*|f*%-_#j0Cldp~pFWo`wE69Q%wj=lb{+h(Uv#C|npHMN%IkkqMt->|L>*T$Kyrpwne(APg`8AbzE-xV8 zi%;%wu&GaCPfx51(R;#K6-2l^gVpb z;KL_+sd3$Xao2r*YTn(~lGmJeV`(XA7!YB+mX-Vy#%wtNec-2&i9X@X$SL zeDUd3w#G?su?KuI+0!_EB4T~r4&&-BD18LksnfvB?~^{na|?QruCUw%nk%NX7qEOWy{5zZdSQAc=B$v)>p{&Xu-bn=;E5BX)t zLv62lz1yw!!L7xd`XIaI@Er#jOZ0)p(rm_3jy67T(klN-&hgcHZqAeV$xy$EoH23P zMWV?*uZQ-|Kr3o{(MGqs8hRNFD!za>lx~CfIh2d+UP@AzoI8~{`+cP**PSVUe#zZS zv2)Jn@H5GxXU;$1txU`JM7{>rQT^M*9I*Z)GwCaI-N}2s$ZTXR>Ky5Wui4M}2h-2{ z>yY7U=+C;yU|D-y_3UNIUv6a@A3O3=UG9NS?kTu4>(Sqd?j}JaD=g@U{>!`gK0+&v zuJ}B25HzxqJR`|EbZl#is%sr|5>MWHSo7ven|xjT3zDnQt@U~JuIJageO}H{oPqag zZ}#F9_$5U1>@VHj7vdfv&pVVS`Z&>C+*)&(_ykw20Jo*s8p{`(bKc+uoB<3i^*Vjt z@wVsuUe*^nM;SS53-LL~KV6DWar=5HcdYGs&KDu}PwZB38wx0Qi^^4fqv9tPIxO0% zk+qXm$37$cRQf`dJIl~mQcTDlO~VvL$ex_@&^?kox%S@)Muf6J$*G$)c(v08=mD zFv+`+=cOw=`1g2+wc)ioF3o*a9t_X@9CN+;Xu!&a`Ze*ike@NG#Lu)=hEJ3xT?yZ# z-PO+G2@z*LYvPIiCd!u_aQQ8+e;sv7P^SBrat>)sm`H!4TMOq9XrVf%o^F7R4LrHwZ;RnkpL-Xxuj`7V{ zhlwyp)6eSTtc!nRL+}`7MN*oZIE#w$6(!wv?z;={QtDL4SQB4WO!Am>XOeL|vxdDM zwL52Mvk#st*Eu8XZ4M**h*z>FV8bWSCyI}2Z<*N1K|gaw4fRvJ?m^%t?)47mJy5qX z@~=b3@k8jN23!*0H=2|0lv25i04Aa6br2_b) zZ=WK4mwdzsbyZeOiK*mWV{IuX*rSt8Lmphkm&HSr)=I7`N8#5o$L(Xj*udOaf*19w z-6ygisdkZ{=L^(%4|>2CXdlTr$RWEX)#cntb*Zs4%TsJs@#X`RF^=}Zz0+3=iKvtF zqVQ<7zkDX?+tN7tK|K2J!RugVD)fy1KlE+axxPc4MroTrN50X%y^St8!TM0+SU$rm z`R@>I!XDsDjShISmT}PK9pe4j=V*0Ca?m+6jVvQMMl>(^(rJb^*<+ZU$oZ0^8-XVJPqO(I5vM72T#Y_@!596BfeT00p2Yg6*!9(}(U)^<1d+@i{S85~{y(Y!XN6Fy7ZtNazb7d{i%8`gKlUK>d&pFV$(Z}gWZ zoDMm})8RhKw-|GY_OsM>37b8A+DvVycGNr!9U*_;S`6iHe9`r8Su^_>oF%qwKe~MO zF~T;(A6@OIcH2qWVLSlJzl^r9iR(1+Li*V5ui!}8$wtlF{b3wv&8-f6B4bx%&ZUgS z?yTXzdHAnl%bX?mC-If8#+K2((!<}?+{fONUGcpa?S;G-9=sIZ*qvQXz19YtwOlXx zO7z;69Sz<9t>)m37P0g+uTjeYrWoGSbYi?hq&4+=4=bvXdmGxzET(J zJ^H*AbDj_RQ6jlE_yIao)uWL*o>{*a&3l`A4AH)--z@4~PrkF5izJ7t?(8=));91R zJ%Q8fpg*}xKAFAvueVv7f*f?$%sOu(&!Nmf|7acg8X4y7n3|thb4rGpO+VE^BT>nj z%mru5FBc-;&_72-%fhoAJi8`s4fk~(Q9YpH5La+q`n!``7P`o<$x5AKoTH_E>zM7f z>c7oOPu~t|{DV|XG!^8}FsMUJxGsI!u+-kWS zTdf1!LzxQRmwV-8z2-5^SB>jj-{W89`>VHD$HbqOnP>JAO8-C{=&tN^+K_nwoa(X< zaHibmkcTMNLEmN2A2RtY>ZJ6_=VAU)`Y~s7D7S0=knFB8F1bEVyu)VFcjq_p%sSOY z_FxRlCP#5SPSI!@8g)MX+P#T0_iblGpNwC|Y*BGqSAe7FQ*!svKGv)n!-f99n$TO0 zAbZ4^BjDdt>X{R}^Q(hbr?{nKuRtf9`zM}MwS)V?m6g56x6l^XU-arR=_yX2-w@4Y z3i)7ZHjms|-Ct(?oZ4`BX%FWb6FY3_Joa+u&GOox81kEl7ot7Vp_J=?;XVES&JT?F zp{!eA{fsSVhJEIx*&KQ0g3X~^-c6i`Rm_PdZ|(JFHXOcv2YZmjr@DP9u}GG(2ieu{ zpNrmLI(xnSImV_lRQ$pNgT8cC%3pZ)uy>uwoz6dzT2;}TxZtZiN68btlJdMrd9EGw z&jsJ<$lMX|8_a<7hgSPL9;oKoT?%o|oX*qERr3VT+=jzFqr|iz&z^qr>?eL2vHO}0 zo~xIT-(RoxYru8QhlS(93XW&wCmV@I=_C1;D7ceYt4?T6xswq75#!H{m9*jTZKK33 zqAbNNx@aMBi-`X=*|hhS??Z33aKOLfF7C^S)53cHX5?I*WfHba`g9!{3+SVgtRtaI z3wk_(O_^b7N77W)olF+T#WUWe|elFq8nVqYOyGj3x8k^06F&Q%C?eY2te zChg&qUSl@GzdBpw647x6UO>JpGdpQho!`j*H~-fqtx&=KU=eyok98 zzV?seIerbg3fZQKcSfCzrP4}_Fd)=#KvU*v>F@p643-PF?BBIg*}xx%AyI|o6GvAKgeYI;Q{?YH+*W! zmkdp4O{JKadl*l9{xuv=Z_;?W6Ph3%YQI`yHDMDVGE_Hh*W>1zf?av-wJcvG(IG@s|wn?9gu6zReFh{X1 z$*c2j?C0RE=bG4-J@DHM_%8+jZm&PMVsWT14{4-nY(wzg|9E#X4PD$P9B8`^)+(tn z>@h6XF7P>kTv)=Dp9{GB1OlJ>`prh{|8!k3`l{2?)`R;Hr<=t1*xwkK;hKsWpqgD>vD!$i% ztH!?01hiy-ValolhuH>}o~e6I<;*0NOZ~pWx*XiGLksa)2Va^Sj$`;!j5A$o9^#+o z0(rt4KTBK6o-aomG*I4Sw6*p+wIAuyo-2j3#lA1^WY3r*Z;O3`X754zi}i5$ygpdw z4YR(0uEOUH!A_o67B;dT91aTnud+sf^T3aBSDpp#7Iwn>ZSKzc;DE!Oy@;nNQ+t0e zaPK2NtLmY%fuhJv;!)8#TKiSbKCE+*4>PW>J-lpgI2hv^hwi41cnY$`t0!%YxhGHh zM%K^W7UvHYM#{0|Do^bzTfwb`Vb(R+Pm|^#_buoJ#e<)wZInjmhio+OzRkO3NwwXA z5;3CKv#!8%d0&?tDeL_^d4G_y^A_Jk0~$x()^g0rm&NnOJ4?KnWAqL1JY%bTRVGIp za;>E9T0cwY5F_>vw$m3&pYa4d1X?P!c*DWfz}2$RThyVCuCJDVp~|Q1JUGY~L3)gs zhg~ds1C<|j*suLRl>Z;-bN7Rj_EBxxd0cWsIm)_0b|KLTeIDZn**N2U?*i-xN!R2) zNWV*$urZYD+MEZ2+uri(u_}IFV-C=mdtCK_-=_@iy|GGr{O3|mNP7ink8)c)Xs-Z$ z!2dJUe}j&#r}gJ@c;7s1ox2!UoDJeVl)~qB?7^Tw8|Q0dwC`t_ zOBeV*japC14%kw?ko~(pvYxg3EhT90sVwbb>kL!cVIp;uol}}JEY~f~gU?Hr(tN)^ zvoWY&#e5*T+`GxxMBL~n3R}xMhjmwBujc5r+DE_sB%_dkY1zY4X1+CuG6OS}B)zbf`#dZ%v(dH-|XeU<)K--#DR z3iFGytFO{ny#m;y4I->9q?gnBV%MuDud-<0 z&y%m(!^u_J<2&@v>@nIyZ5Ou3XM%>j^1G2Zt5$ve-S7|EB?2v~T`bYA#*9PzAV1VO z>&p|{^gL9a=X^Sl9+)*)X!omfB729tYJ2@B?S&ol(c4}$ifUUUt3+ji|^v48b3Akh31o6E*&n8K))JCccBwkTn^^GQk&Wl zUBNuQbpm&BCBb!Js=|}H$RGaZgWr~g4)*fUS6KEK^C$Y%ENL|^goDn4^_T-YDYudL z<9*iV9z2*l^3F!yk(c4kD;?$o+F+EnknN8AzH;Q#2%TsSYA25vcKxCi)j{LFVeh)K zZ0m;vx3a%oAO=18G~n|!%DeICb@Sx$L3A=2FS2==mtP+=T)P1t{oc~=z%AmwtGL#M z#@w}~DgVHJrh8Y>&ixr<2sy~^DLT$wMfu<8>^cj6p>vm8C`0}}E1;1ut}J>E`%ImN zXZFVTAj=^?N|t+*WV!L|Et`EA2YJ*+cQTE8RYxd#Xgr`YOx#EGIf*3uVTP3S!u?MlpC&1nhhcuIfeV7Isjc@7+wAp5;(7V;eW ztE%0idnvjB?72m^Ir{4%Yylc6PcbbOD>tEXk@>|NH0Iu_GaT7xa45&YS7F~Z`~1G- zfcJ@O`ijSs&xiY^N-O=sC8X7!#2-pq%~NrXXa13V<=>{f#RFPMJHq@eecCwqzI>&A zLL1CZVI%LHjvcJD+W)Gw!yoA9?+p3UyGr*U8wmGju0K@Zd=TUowT1fm%(%hoV~e(U zmhv6;Nbkgc^#7HvTIh4xEhzuasr364Y#bU`Gdxx4_eN;z%s%ghSIvT!8#xP7HdLCg zWjFGP%U?bA9(Y#Fix%VF{a9VY`wEYj;;CLQjxEjf0)C^;gy8IRWG2SMLyetx>ek};R`z0%N0uCbmaq*FEzK4!#fdj=)&}9a0C_!J z6R-}Mie5-O#99aK!27KU&=%uUWAjD6^}s(e;Ix#wsI9xf@zi?J+3;GOmi&z)^cOZp z3$yT^j8}>{#IVoY;mKBQ_2OP{h_P>FZZEpnVeI^_>#HB@GUpao6b9G}W!;hmKXB}3 z9)FI0)O>m3m6KC`LmP>{MUy#nr+3!atP%koDP+ zXK9?oShI#Pw>`5DY%dAVIS%cH&f<;YRTH4HIseL9mvQ6Rnc~%7##fHMo#sKmh5P)_ zP6FDFK`$Dkr^b+H_#|UU<8}gbq+Q@_QRsRcysVFL9MUOtQQe21udzlQLK(t2EkkI& zzF9H^_|M@#C(pUCE;ida{J65vT#9owoyr`9&eg9^GM}cH8*;yql+r+H6vU3Kn@oB2+2pXR$b^PT3t>YNv6 z&eMD+|9q8Mo$o&T^OMKq%Qr8SCl<5Y< z9P{q?G$u1+%>R_z=^>Lbwq9jyX&%UUjIDwhQ;cEaLcZ1pfiscps$V^OSDoOkGiav4 z7q#DdYD_bJx*5}-L0%fdj#K=nYUBIf%U(TpNm!=QJxX_4c%3t(*ehru-|3w1<=D3u z760C@Mem3|dM)i6j!(*{j?eQbYt~t1T}@e&D9c&bYHb~EwK~?I!(ZJ>Xz5n#$E$$3 zbOy8fe;(sW=XSD}aIxf(s=OMH7qkF0NiHOfSl#4#F zl%(wA@5IL|pAYg`V&OP$=>u02ryRa2y?>XJ3r4QEH+bU*IWHwmUxLSP{sF&{+?wJG z)@FYTnOsS~j-SMyFy;M-s~_4tVSUT{FKg6Kns1*pxYWa+3ekaJluP@#tY4<=ZHG@? z(HF`-hp)UhIK=fbm&bK{%{Pu5p$(3|gSZ1(_^ou0;ISeH{{@$NS9*@6#dnkc$+s|% zfPaL%zRB}8QzmOJKMoztJ1fmU^1O+w7JPNqlh&%D^E!w0F7n&I$-ib{sSP}3Zxfzt zI8ZsCQU1j%80X^u5f{6vG3J+y>kojN@WRi%7@x4I9FMGFJ_0BDp$3^~_l#GM;fr4i z?LU(AD|B7M_}o3~-~F$)|GQ7DeDJ;6Rp){o!O_j zt6TY}-pm~%qF2UXaaZhE6&HMPE4UDE{x0%ZPWt7fTMYa)F7?0iYNMY2Wv%spNuE_d zXvulf3C|cmROI}uW5l5d&rPlKuy?V(d1OUuh_NPk=Mg>Y9MX$*(*GXH%Msc_w#8AGe#vvrV+x-V@xcu5 z)7Y)oZVG-g*)9DW{UN{2HqwsP5*L;=xB7;&UyFB6TT?u7PWlO=(6vemMaS16IbSgwh*V& z_{PCUIR7*Fo~YX#Tthjxo4g}w=^Q7Qo@R}zK52uNgu}THSjSFm-W+J0jpO;};JBQa z50=Y(JjVEdW@mxBzU{ZS1vi@fWb?R(XUk$-I_S5OuKzOsenWM1X`4KA&$*kK8(sh7 zdS|N*HkF@keHC9>=#O>3iySK5lW3-fJcLh(8*TeL>hKUWpmAQ$d+EEByN$|5{70zb3cr``3t;UU~nvVD1m! zT@=5$;QGmk)ST$ES*8$rscQrO0Q7i|b-h zFYV-_FEwqR!LOyRp_jiu<^&=|^{YCLd%h?jtK8TMsG&nA+F)@-){RyzL49koANo{#KWC z{l)xy<{TT4-|@&ZjA7URYhc=-Z;L$i5*h3Rvz2_6f0{bg z&@bPoo#N=N+vr2_@$LrpJpPqy>Na#d!@(k+6Di_D{MELgv4B0Y{eU;{*}-Dho3;gt z!Ca!8w?8uyrlbJMOZZl_JVDKCMJ@V^-cqR*X~;Xr!(Ptr%b$#aZ8>MqcS^v`yi zcmdQW0Y1|Gy2;_7_05CDPhCA&yyvI=MR;JTk#+5z_YW37@~QsfQWyPi27Qx@jY+1j zm|(50bH-*-Zi4ohLBDdAL2()BR*-I`HyreSslV9ckT){(a`KNJBMs}(9n4dr%^6n@ zGaiSFN%9!VvFDa0MvFVlxoX2f&a3R3NMGHSVz0)*f0;aL9~>^WWYEi{hlAx=&VqzS z7s7+uJop%}#aSAWg4>5~y7YDDhyLK@FJPC*yU-2~dd|9&9O!25c;p^%nLBM5yvd(f zPd|AcU*7fy!+ZxX-ybA_>$0~LBmC38|G{9=--vJBQW~jcZ#e1hgD*WV{yCaKR`Ae? z7ls}m@7+pYEh}2!U+=+((94pxR7(t!IPcncm*AdUj&JII>iyiwV?*@E$hjkdOPk#6 zpsVCrb(_L}8&Zy^I@;j+Tk2U0e1+;uxvKBjoR@s!scqprqS7~cuX?}CeJ42eaVAoX zbI59)2fRLX9Xr3%>(zO&;^*Gq>pe8B*V_k=9q;sd>7R86>F?eYq^EQ4D*B1^r8mNd zuvuXp5`hMy^jG$B#`}#Tbix@17){Iid6~P58l* zM|AS4D03Zi+X8JU_?vP12vJ>kpLv`)8zI&Nrp~9rN#xfWOV9@+`*cSJ*2XocTgv zcgU9KmeL;T^BDDzEF=AM#G0tMCiN%o;JaOsGZrd8WFO{>N$e#~(Om!ZdE0`k#Y=c! zxMSO7yGK5JZt2zY-ICTX@}K|w3-TF92MjLa%}0ldWuSM;OQkCOI!4~3 zlv%hA`?MVWoUhC`HTIVBKk+^qDU|Zu#cSiF9R{W!PVw5W@*GK4c&%i6$@oWk_W>@| zL9#7n`{MhugHnvII?9-zB|b{e3&=C8izm}H#im93gOBmg4$dRpfnU7JJ3_tG7w6Ky z!oR6we=xb@h2TPD!1K_>Yuqq4Ch>i3WX@??(j4%YLuO-iR?!qU7{&6XG(3b&E;<|$CRNIoz>@%M!dxYn4dgn@J z7zr*0ZX*xHqZMv5^-VOLb0^h8(`tuBd~f7?i}@DeTQuj!G;dDfo&IZ1j0ETDJ9SaL zJ^@_qQ|0kC@KwIiq&w-29s4J<2{h%6^n=!qjGg)jWBMdKM$dc?UXuSB{S{B6lgJ_e zWa$4K?UZu;BXt{tSIAHP>WUfrE8x&(n*3R(PL%v7x{(YHZ}QpyBfg39ffwc6eKGd@ zS}0q5h%;<`>hqPzgo;dFPd~iBiYxUzX(ghRKbd`u8u*gvu#b9eknJciSz$v2{!#o* zuLtMZ(4_Xf7g?2Y)6&d*k*3_t{a*79#%Uq66$#e_^-e`D(H!$B?X`gaHu6aFZ@pM=!Sx;tmR-Ir81J%Ioz0iSacyrdizoa! z^{GK#6Ra`$XW{d`A%D==Qad$gh!;fu^;wtrP+tw#t<`%=l077A(~&k;F_wmo)X=8t zdyUnkL*3vFFWqY$YXJwha6fx34+iI0kCDfhxGHyIB!&OQtkp+UZ^?lg=lb^|>Zn+G z7Go<1Pn?~}74HPc29L2*sI05cTu*mUrq3gCL0{dX8QLdy#D|=9ml^raoM)u zX5cHi_|NYFcjWeP{k-VelgF0P-$$?^R{cZ^VPB?)gKhBZ>KveVf64PwzNdlHz>IrOcN+Kg;t9o^8G_=lL0)bLM#^&rk9!-C95JAn!E>l&_N+4j$**ESIti#A#tX zv?0^|f6ToNm=x8S_g&Q=GtEqk%`hn9L~3x16CJg|F-{T;t)OD$*=;^lq9ofO8dPFB ziP<$-^Q4*S8Aceefk8nalpon8=q9a_UE`8XD;Qm)E=H3OVs@*lr_u!6UGuS7lNfn_ z|LSfW(IoDBJ@56rT-4Q5Rj1Cm&wcK5pZn|FXA<&OhmEXJTH}8MJL~Lm+mV-$`5eAQ zj+}D#g`Qo~I%2!4CST}v(Fe&Z(!u|2AM}~A%O3oy!Pr>&CiSzHms!U-zYhI}`+)E9 zzLD?0eG5FI?Lsf~xs@$Ul1ZNzuAuKXKF9OhE^TSZ_6Pby({Wb@_J9SzUn*_)n~%$T zx8g&16q}52t94Fx3c>IgGSU5kt!CKY0o>AwWD}hjn$P^|XN}Hz)3GU-Kd$=HXMH1S zyu78|82(4jApLQ>QMbLw?jrk(>@Kpu3^$Tzc0cw?u9vuqKVZ-K_uCERB_qP$(yQ;@ ztbf0mv3c`9&p0>uSDx|gv#-o3KqQ+t|7^zf*Iz&5{^u#XDLbR-ho^q{f~Koxy!u?b zvE%h~jKTj*8eQLQH(n+2+9xQOd%E3Nz_oXv-FWo+cH_Bc^>1XxrhGfu=#s{QXQ&67 zX02pxK*#RE$HSSyOYrfW+A+oHh1Lw|#1qkpi6N6t+>TCs-;7>26dqqb72Vmeuo+mQ z;Va9ZvG)4XjeA}{vT9RuGW5WE=w0}0Shu0_8OtuO(fHXv@&jK1y3Eb;@p5il*r6=< zX5n8)B>yy(`iKcb-m-q_KVkl`(rAThHMknmRcc&qwDomsV`3?7nszYxEUmnB9TqFRt-K zQ)<@+)+NB2ITwBbAH0tDAMV!<5SQB;1$I*+wk6dZN z+JJ1av31$r{s}#M`+efYwZ`zbAKx+TPobRT@g3+K6Q@lM=BCDAxAn67eaWe5(|9+Yt1i!8&it0FDw(8#{%q!*be>=i zUT2S&T>2>T?e1&W_?KZr*ZRfzQ!Ueh(WLM7wMn!heyKI;`@cPM_$uC8^jUmmaJ=ff zy3D@X@sA~6b_>k&&%(R3-#{@pH=4#XJI}JqXL7$jY&th!8@luZE4(W%;A~OwGP4KX znsCbN!c&~?ZgiiHHU8h=_fw8k8-CDpE@$Ir*H^;!`pQRW_cd#uyVcp||2DbLeF8g_ znGwCMaLm$LCzO8Kf5PEeZmidz9&irM$Ij)v>~Don?7`l&)){nOLq9Q{?^iCuJ|$Wm zBDdIDtC#QlomV99+xy%Q-z&nl%9Ujd)=sR($ACGE0wtlv&vgRR{z_myn- zbEhqW;rdUB{mv^bXix?P;L7J7W>3FZKDQm^0Y z^!n3v{u=t6^sqz716vsf=|LAW=O68cR>6CfR{z!g#wc3Vx$7@=O!h6_?_o@0CDU6= zytjNbao~UIxq1H6XU+2)=|^M2^up*d%A;wHW8A?1Qu={RSY9^1syAk7_f48HoN#HT z_xZGr$<=xxjo0^-3R~ zln}ie-nxrUbxeMD6Bkj0cKhgKc zYxYq8LCG+z0pI-Xkx91>O!jZRezL#IdC86C?rsw-?wfXuj?KHGaol_%1Zv z1Cc5XufhH_;5j*RhC5?DY%77TDgQ<@^~uJf{irj3 zL#{XBi*;gGi9XlLnT&;aeZzbBo_h6-%FBK?jc;VjlO2z9d)=lCa$TxwYm_~4KXypN zf)3!r`|ABnY5s$Q`t#^_+<)dB_d(wxhIk+HGyRjVk@3=+GAWU&+79i^D(}@ScEtka za_EV)voCtd(fa=WkF@jkcWCE?T077}(9V?qz#j^XF<@NakYk&35>I4a3tr79%^mWB z9oiaWjEp;+i^t}?vnbPq=-Z=8i82YC&T3bh# z$x@~XUjAxNb-kCZ(BwX3IqtpZ*sf%iX4;9LG&zu;kztsZcQ{{vKY7NO_XDg|g9+t* zWZ#EX&AGz7Z#v##jDM~@IK+Rm_oEH@h%qc{e@M%5#HZ8OZhXOt-EU@{g1*XWVoo#$ z`ql`(O|w=SI~U;#)cDl>>HTL&c6G|yQ=$EwnU;c2^(0nw81mDw^~0C%x)nc32fi9|%agYiyNa>q zXVPP|M_PNG1>@{rsDJ75FgZ(t}X4FmL+!0`JJ3 zhfWzqrrw{tJ>c=mx2{+`gZE#`jQ94iXXG+)sInj9JMzRHOcXZwoyD#G{`3awP+n&H z@n+6L9aFfe#NRLQyYDpkExNYbkhLF*X6<{Ll8YV1{)YKm_-nL~qfSQmOn<_u=0Coo z+?dKcV^aBjjjY?vY5Ro;d!`jH)JDINAMQ4o-^}f24CqGf?Pq;bOp$VTyr6j6g7SrL zBi@{Gh7Pr7Qg|9mJIc}9QS&MODY!!a1GsJ^hPe*ce)-wJ(+%KD@ic-vl*B%2&Gkdw zX>24^xQ^2Ll0yp-7`SMdv+C|>G36_IwU)8x{jKjh68V>)9>Mb#*7Wy7z z*;!lXTpC_G*YeWc3(Ll6oaMw!NRZT z-ptGczZ(Ml>Rm7wXvZwf3%(Qn|GYLIfTP6TlP9qQKeM(5&+KFHAX*mH`H_KfpZ0Eyo>!W;npNsz?`J@NHGF8C>tp`y8oa@HTW^lH=HsaG{@_QcOEj&0Om(^@hW`)N`_*?@?{d{U zYRtp+I^W%xfACzs*Z7>muVTA|zxulOR440R(jjhljsLgc@|CCB4g1M<6jl z7(1ui>g30&l!`*|4cE*Vd^px_|Y{^7JnPVf&KDB+)F1*5MQcw zUTb_e>-r*lo1cL%O@!`NrC1kJ*tITXzLzfZI{4d6;hUI)e<#Bl#(1+~AniMA(^>+K}N-m_=M z9Qf{h#iTrBCUf_a_sYBaKKKM}sSnzV^9y^v`>PWDH0Qg=7v%4mTZXSbbYV-c^Nfw} zuw=U>LvklJ9($&{t3t?8b8?rq^D}nk7XY~{?{HsXsoct&qdb!Y!p%kr%81=ZCMuBcEcaite@FCoF2~AxcKj|Ke1n|4p$%J6V9!4qWtzHbsqg)=tP_) z62L`X9N=Q^6K}Mi_!9OJ&RcWP8r7!sDq?vL4SpLN??1I0n%{#NWNGHy&P4;{)9eRk z&YmHzjGEjooJ+T;$8oY3ygZmH_)+lkU@iBnY#+A< z`)-}`Qe=kQIP?|9T4jbtmHAYy%r%smRSNbnAr~44mQzM`e4_S#KJS%(ejNNNDPC2| zR}A9D&C>VaIo}JO_wYQ9?h#JF3wahw@_adQoZ#Ff5-DE-&~AMPI^gvFFK0q zqP--%OuDq%y^MAn;K{$844r(jYCk-Wd1K_}Vka>s{n-V?DhLi_|3={5%eoO|%%w}~ zd#xWmHP}0Vy@7YC>jvuBT2zkZ6!e*N;q z?y$jJV}EY5a$y)vyE*4RjJ=YW&k^L7NfAS_sl?>{&LB4~d&(^O0t}LCp~dlG!w#SK zVVhXaes{Lj4=vMHjX$(P6EUs?R|(qK!S$=%?S^ozu@+v#R-y76zK8y3e_l0)HwEv` z!gGbBkV4T??tJOW)#~)0zW3?gQ}itvpM@&kN94 z7`lbGR>r1>D`uf5zIHz@ zWE{}B%ti*dlXp0SJm1CM2-(8LgW*3qbLD`}VjcjFpiF`?ybHlcLh#pO;sv*u{GKa0 zV54a`8^b1k8)W7}hP}nT?5Cq_L3Eq1%s~ExK$^_hLhS>8tP^;n3&E#_FN1yY5o=8} z1`Y7HD?YY|U(NqhJBz{jM;iN<)8J?D!JXiE82plBsUq8_*0oSH{njxlR&f&s_6OQ( zV}h(GxWYEy@ofnFHQkRL3Hc;!GX_poJ~5qqrOD1Ed3L_as-2xSa77poyU81K|0?7m zeBOM+K94{?F<5gRJMoRfN5`htzEL2C0vN-TldRp$_!KF}dg5*lhn=0k)?B>S83wjc zlyhke!Zp_T8lFJBD$vd!OYgq-nL z&BY~-`lEBtw5GK)#^j;GFWKkaGkJx>8G_z}p_KD@BIh8pFt5?u zSbt6HqG^%DO4jj}=YfYaOk;eNCXBuo_PmDb^L!)i3MXRaLU*OXb9yRAhM`0^pxms)QAAm#cMuB6hA^PlX0fq_WuRB!d2jT^9;{lR~Y2)4S zfY|>D9>9puDe>aB;cEtb`3=U- z$Y>m|EPso?&CDg4;y3e1$JhW{0?oi07&ol8B%|X#q*ch&e&j{`Z z+K~O}Zxp(UQ%59&PY8NSGH;^}{86x5@OkE<;1&N2cuJw#2f-7~(5?-iuk#hkYo3d@ zggUCcr8(d&^8!6*EbR<4#>m)}pK5L*7iny#Z9o?Srhu>Tz4*$Opf8$-VaJH|($2L` z1Mi~L!5L7F^gzKd3{Q>Hueb5b`uLRKm#@@#3~OJ3{%Z{z3#|I?E#qTX`zF39SVxbK zFq!tI*Df?;0qzA zu3$fZJ(sbWzSuL3&jo#L1UHJsmfS44B|$qnXClP7hLc>(;qmY}?e)r1hvr#Kc|O4d zdFilA6N?F*ndvJ$)urdeT%Ga9>XXiLbRN=1C_2B)+EJjlw@-~NN=iuf63b2;8b=Xy}O-Q&D#p(IVr(792@OxF>8hjYIy?IBAY|Yn?O%Ztb@dpP&A@;B!!apXJN%Qz^f z&(oPczX6-^-gF;jiB+lDeuD9XCS$<%m48|8G^K|t$qX?t+;>ucGxxJfoXddT-p&0i z-p%G-_UU!PT^)ga!%?4bCiMgI`#5nj;%b z6YsmJXI;i}TIq+{-DtKuDat5U#8#fC_)fZ_V&^uV@Lp$nVnYCziQd#@tnt?^vYa&E zUUFTpGtpuUz@uz2&3qF|<|{{_6RWh%=Uks423vZT#%6su?C1=|J<|rT-K5F8%o@pA z$;yMfgZbA(`$u(dzNwF;@>_~8K3$_f(NdlMBG8Fs0LFpXTWp>1GBd&a<$KwxUMJ3Y zK|y%?XqjAa2SlsM8jWfmQKtMP^)4uG^KXPcq^GZjrXq>;BabBd-RfF3KRD;|C~OA( zp&v)*5$)ypW&!XQLLsM+k+11G_J2#h9w3gRI#+h#7u1{xYzn})D6!4geJ~f94~r6O z{2iS6bhO^gaAhL%JIwz5KH~H1@GY6nnTp_Gsf8a{?NSf@FE2~3@i(y7N6(h>Y#A_W zj-*)^>h#a~RsI6t)10_u8}^FY9GD30w=pleOM_mI0qrLSgS;!7Xrq<5v`%Y~{X(~U zUAaLoV-p)utnRsX(w|I@SlPlhe`ygvHn3C;QY}v&(ijuz0kh=G!Op8bxyXl&A;bU*E>%q z`uy3de~JX`gHvyJh%bIBL&^0QA|;xuzVhv)Y*FN1mu)LXFkH0OpZ zjYV`w=4dcKZJyiq9;--yDF5L08=S9v{YLbp;mQtRNYQp@q0jHI`>3nhZk9gmrVpjU z2EUE(G`DW$+go_9_VjI&&HUzF0-PmzzN5Io-`LdTSm~ACLh!T6h&qaszH_eSY}wK2 zETqg<%5?Bv-%g~A_Q~|{eNO`3W3Tk=%m#nUigxt3;mX$NX-;#AGp^dYoFJyyU>{6k zgD-p1=CtKBum-Gq@-*k-_t@nQ=7!E4GbvI zEHO88!<^^$V|`)I*-Q}nkrNnOz7mi6y*^i2{vYc3$y@vgBjT+#Dec;3h} z(QOyB*qH_I1#nAScky0hu5UW{Cdo7H>C$)N-QB?035*&al~El@>ac>c@O#SF%SuOW zD{KJg;GOT(&&~Iq;Vh)g7&~8?$h+yhn@C-H-of)`o_AT$IL|GfhYG7I%@%adyJg(x zZPtYX`|Io*ok6S5p9tImPHXh2{adorW0wf%vxj@tn}^<-ine<%^w`OR@Z$ZwqcWz;>Scca=>-L2HU zlyXh>4a|)boKpwn_o|8r45njsg`YmTV8R{G2-QASyrkqKAgZ!?4sNGp;ZSXg( zpW>tn+x#ck`#BkTXiRaqVsWoFH8vNWw%QqEX}q9s?jOhQuXVt%z%lD~GqCpn(^px$ z8-PpWFWs!0cB9m_`Qi6MrVqe_(al-cba*Tf!{3Ya)Lbvr93uz z=+$5?&oGZe+B24~BzUG69^EVEU$&_@&$ixcIm0&fbFcGBI+Cm((@tfd8hWhpO~254 zs?$Ucq-O4y@x6R2an23TB)|o5zF%>?>8h_qXS2`B@El!O=O9XMu*vJSAV<5D(fM5G za1Pi~>RCoT*tyDKD z=Z8x3FlTaMgC|dYIk3C;^syI9xzQ+3?)YQ(Hk-mX--T_y*SFNwgbmJ!aZYVp&OJ7F zJu-25tZA&e_&CWOy-osHBnt=iQ`gs!Gj1fVUOHaOnbO~K-nj8^99|NC^I4u}ah@s9 zpy2EQKH<4huvqi`uruEe<>vdQjZRUT?~8x`$5{4*jr6*4zLmVg+;n3H*An-&0$T+B zg=g2gp-jHA{Ft*##LG=!()zczWY3F|0c@TM7c7=G3dif3UEBVaGs+}u+*+4{FmwYns+0+@P{sP~2-nTul%}meX zBPn4+p{^YBHk9Cd1Aj5!JZ<6YFl_h97WVkt#KHYLGW!K~*(t5^x(n=e0Y_olJD&Y5 zS}%?_Za*03JMGz+WvulMj>F%`J$a#ncsbQ2+x5<^7Pw0cIPd43_LB;J<=bdV zlLwTT)0goh8Te@BOOhYxAJ_x-e)RhV%qh|1x#WZwzmdEr+S8mD-Dy0+3FbUFXb5yw zbawEdJ&5n+`$CcLGpqe5vZwYV*7dNs+3&QR+~>)^@NnV@;%;BW->Um3n4gM4Pb>fO zq;A<5jBUQg@^!{T`Hkc|l--wHQ-QrgGAn$zTtPOScuYU~=|_Y*^!+C4kxlRr^=zV! zjK$iT%vVbA714$464LWNO}z!m8sxVAA@AxkwAzra`6xa!?ctFPMYu9-r+gFbEMg45 zOL_Gp^!T%7%|Fp*ggF@X*ZVf+s)N^ANyFi0)HxT zl}5^TKXzPyK*!HcedF*Y{4HMd&-{HSLBg$*1`0Nz(Bf;OH zg8bp^6(~^#dKm}K@O^r*9I`m$Xf&)j7)OSYOy8QtCcxFkH7#izzHG*TH*qRFqcq6g z7`trox9T`8iOqp}6ytpH@%Zei`;XN%nYz|cSLZbNO|7mZf2*$Zs7w4#b>03h>WWj> z3)IzfE@uMP>Pqpq>biou8f$eu_b%%C%{j*5i$4tf;C6QRfIsdycsc&dG=Hm4*HNEn za4Ecsd0U>Lx^t2@tN0S0>iw?cZiG5@j_YG%^Il6^9y{M1&ItTOISQu3uNxjQ4l4(? z=5n|E$;lV}%Rk9H#^xYdX$)hU;QQ#PId=>D-yFUX-7?PMCg@gWUrBEFU&(FvuVQTq zBae$_+zGY)<_Y4qINZaiqS7w;Z; z1__wD`CE3v7S`s#-jFO*TINVTV&0d4gZZo+l9Jy#Ss%52bR-m?P^d%_1=jikGAj9D zlt-mopt3W*cX0C`WqRo!kAE+lVco-Z2GYOdi?n#|oR- z!!+cz6LS^M<3=cxtSf!Hv5>1YAP+~$5B*+j&dSkZq*xQMEl0?GaGh+;{BGh`xe&f9I1Q)B zCt9M@qYzBYy>9_#X==oBDRkH2mLM3Uu)CIvH9bteRH+jQp+1Bec;UZKqKtO zF|FI3Uy#S<=ZVek$q&Of3*?mBOg>ZgD`87Q|Cq}f1KhwKE#)c)h@(-g%1g9A2AH7n zKsUMPob~RR*o$I2QF7`F; zI@7V}>&d|Qq4l>1+y^~bLCRr&8_oBLgHy{jC!5uTm2Mes9U zd2SVM@|uBv`sQA@?YoR2@9X^t8`qT8m#@+XVsQO%ai;h8*43``E{((b=CIR2dF=!G zW^%Q=S^c5T0N(|Cw#eSXw|K-5G$Z~HWgOJMNMX~+4Nt!>$Y*o|{_(Ei_c`$r@X+s* z9$D>vKzVARxj5g%sk4nXr;uwS{x~=ao-rQe8IqlnwT1p}b_KWar}8aZg^T5$aCGu+ zeZ!t_jZG2V2YH#C^G$*5Qkd!OqEG6FXlnhKup?cw-lyx2>67{Y<34?9RG%KM^-1&N z*gg@f+N3zdV4M=n3G3xxoa*!!g*OCqq{tk3hjIGA$t&EG>O29wwQqwTtm7&{ccquz z-xRjE#G(<)xZImIj``HZxG_eYdsm$!iR#=A7cOh*1m>c3z?Ho~V&)QSrOLUjfe%pX{pfNzvQ?bpCV!-xy+kB*Vnvdjb8!dqn$}(T@v}0gv*H zcY%{B&%!UzGgY7XTTmZ$iJx5vT|QB(uMVeZHsHOT@LuM*c<&T=uV}lCxiGyp&(9nM zXEVIuD4fvrWz;+8|D$?uqF%)`kH&c*Ya7JlAq(8Wo+y^UvSQUc@1I5*D%Paq&-&SZ z@=f)y{^+|TeGJy8RG}i9O3SnGbNHRkXjD#`F4mA>jRI%NU7JkfpGh#6)9?{!G@Pu_ zBxl}4ltXtJd$~DpX$km!ZwL8$7xlX>tW{QOmbY{{ad=tmFYxBmK8{bea95?}L9L0z zx6S)er74H+Ez3HTf!Ai(^G&|wZq^HveTA}vCt05qV<~yGi7|^Yc8$<%Lz49kxPrNn zAs1+R!^m~Fat;yaPhYoyyk9zph+MuCI8U_An&rvvCHte=Ry$)-Td*Gucu!xm-S67{ zQcz!4hWRrG`J&M4)!~Zo&Aakf3#K|es~@W3$w+;aSerLtDi*)vPMllIg_;F78P0YZ z`l1;Kk|>*0f*S8(sO$w3g`%_ogDLxA4BRw=n+9+b1vgRVa>SSv)A=r5-?nK7BT_8>e;i_`JFB6e8~ucqu%b>%zgB0&q}d|K@0N3NftO3 z7Rmgi1VA=utH}m!<*k8i&{lqt-&W>PB3X@7R*o^{){-n|VrQw>`D^0!V$fJ)5m^Cx z(|nIYt8dB*!y`+cJ|;)BWQE$9i&~$~WPOUJauuyn@tVBwdg)DhVJh;1@LH7@I6oeo z)n%RU!;@pc|D1Sp@ej)co!}r+9DbWj&`BRp29~2T!I_LD^++brH+7kylV^faa)H+W zW95R*0`c-Zms~IvnP41wt(q;xbt6Y>yrI3x;6`KK$XM$6WaNU@6#Tm&xuC85_tpYe zvVqP!sIQ}S*+4iJUPIX8gyTlmniUCPWPBS6$fT*N{1f3>B(-kD62Il$(utg}MvjK1 zvzV{5IA86|Ubl5aRsM<4_7vb$zbyWiyr$S~vzT{&k@&GIn{f+x5TE^BahQ1^IfJ-= z)}#+i$-5`9c1=dsk$j{w!MM;@$qU2Kv}B^msms0Agk*%a@-AzxyFNnys7JU`A0JNU z-6a~k0(ep%i-n4r_~<+Lk#+(Zi28#5(a-;zef-cdeKhIg!+)TUXO8M)V?wgSkAgl% z8N0gt(7>1;l^;@@N0vU#*patVW7nmzLw;zj$q((woTAhCg^VBgj?`p`U!_LL5DziW z+Nv_dWY&gYe2P`RGdVS@<#OPctS+5PV_md<6pW9?Q>+d*dY$~!rq(&Q(Ndvyl*uM{$6x$iW zzZom`VZ*G-m=Rz(bnC#_yt9T%pD8X0{B!~D z>Or3&4~z7fQ_*KS!Q08KnIF=8Cii-hd--RA9Ei-r=Hdo;My?`1pXOWpZsaT4eBbo% z5r@0l6;BHDOl@Dz?~fVp%RYvEn{{gGEbIrxeeiSk4yW#LRu^q|_R{*9XRP5V&Td=? zeWLS*`oB>y$!z#s6MN%&~?(w3Fb?p5gjQ^4&bR)HLT;xUuT z>l?#Pm3~*aXW`$e>-U$PB|9gv$ncnzcE0;W_J_fRs?DCWoo!9#uFNr6? zd(*Y~nUxN_ab(GC*0tGt16is=vK0NVuWLd7=hXUd(SLMc^*^Hi_p1NM3+n%R+NS^F z+gjhc(Z!GLe}q0C?SH!3|JAkrchvizhJU}M|NZWNV(%W^|8TAUg^TEa8~rcr!?r6O zz1IJlFQDFk<;|Hri?apkd)%h~nOgtT>i?Z@U)OcU=zW|A&s-OO()d@`bk-C4|9Wa-yHv-{~CXAAfLq1@u&Y0jla$KXR7^wU#+j|&kwq7(h)Rw_`W;KdIw(Kw_G%fKLFflE_E(?sbT`R z=p%X?_)7D9=|JE^O9HESnPfZD0!HAA6smIFrIfv*#{huA@Bnf|0b|vEkFCC7moI@&u(u$vTSkrQJLBh^ zg@%9Tl#ub5?1*6te4>+SK3VkRWB4mS_IK)U)t_one@6m2+ad-IJM8wZ26ApIjwxMk zCQZ!Gk?HF8)dcZVva@TQdXRl7I*ZCc&Q|#`*iXYr_;0dQG4YQz;?Guo%#Q(sMcZM@ ztb}Lk`=^kve!?DLhOfhk{behI{wFTf6e#@YZzs8#<=JrN1yYIpZ0DC@w@NQ+De>Aj<^|M zjKT-k#bU%O5qs53Ugun&V*x_~*pypC{b;fn3*Kwrw&EdV!&5tYCts@KghcDMVg!sq zPw%wW*Pr#9gY2hd3`RXOjeajzd!8KiTz!hur%==Q@_5;XX|LPZ=C7P97`FKvh@T4f zHyT4uPvCaUEkJZt5fb(9MwG&iu1jw%N64 zmCmX&+BVhR<6{f_su~xSQQsBw{CVd3<=db;##H#!ntco7*gFm!P>1M9aRQ>H2=!i0 z%xh>0>#y)T>U|II6*JJmc-vN=r~RPQZiWv~E=IYQ=li@#r*Ll*XF-`MXZLw$e3;k{ z=qO2h<^00P9vh1KSU>^X`)Uiqv>HZopg^H$I*1s3Y|y}RW20KiD2BAv>e%z zwYS1Bdf!Sblv8=x76fxpwpMO5t!O+&E2HT|bfC4UPAlrW&Jq()QO zFEoyI8h8L+Fb-d+;+glu$5YfXbqr?|P>*C>$x9Zxs@8GIjfODneU<%XzQUpA=X_JdvM(*o`jw<)N503j=5Ig%5n*p=t_z^sgL1d zVp8gJxv@5e5{I`ZCfemC)ZBfo+(QOjvE%c{oWOd!_cW#;mPn}}bqkkymW6f`@VxF^P? z{Ow`-mzIqq(5H}52fSBvg=ZpBw7}%&2+x!fDQX9f)IB9z87j!t1 z!4(@T{;XVkku2v;#?YNPhe!S^t7D4OLp{=0!sso;y);>YuA;Ily+5X}ETS!=1Z_}v z)kc7hW85{8S!M51G~W0{GMN@7?uwn@ltp`1ejp%|v$2d+oF%K5TI2tjSsze4D^N zlDuo=+J)qE#-4X=H}<@4&N!mX_)yM01)p3D-xF&MV?&%7WB=eOFI4P5Q(g1PsnFnP zug}oqc{fL$an9^h+)z+=j=rbvdb_RgX>5hzoco^SMPBhT7`f%V=g18Tov4jYX#Rgx{{^G!*WaptKJ{MWnT=vo@@t1It_;t!g&`~E$ zFKvq=mqs5dtRMGCVXG+^7Qi#ip+}%lkiwO|Xgl|5x?7->kJ2=lf{w zZ|PAX{#O2(X5^NLar?*#pI~iG$2*}x~AN;;$DwIuio zWnZj>iZ2KI78T1>$GMSQSJ`s<6i0PQ7MBe~V-vUbRTN92vCx<(A8<8hXpR3>a;ykP zgVd8uQ8%*muCqjI8v_077I@aDI72>M%Y8qa`kLGE^O)o}X1$z1pZ*Z+`{E+;JJSSHZ;osiibX&TZzObAK9fGW*tnyU*aw_Z`$tOl=kXY zeXf>Z%D|VXCuYNYt*U-4-WksIJI!63#nyhigMGsx?6FBS3$HjZ-O<=lw?R&X5qWlQ^?5rPVpWlbkd0JL3Eu;35NB=Dj)-r7dl5Dj>oR_)hM~N7ze>BpO)5Y7%Rvjmg>n`DEjGe*l0C!3-D<6D z$dCu_n1hWB+3kd9u@kdSWWdc*3z;p2 z%m&^hv#tOAk!O^{_2b|#Pd&G0X!8qs5BfUv`rPgQYvWi`h%Yx5-suajoxm%(l3WK( zFY{jKC`EWLy{D1$cqfZ4(|7tMzEk-x*UGbYPSW`SdN$?c3%$XBA6L&dnsUv>E%i1A zYu^=W-|0-e(cgXHnD0inEm(ABo@CFuE)hlt8Uiml@YQ!7b1q5lP;;ICZS?4QGi`Sn z@5HmEuU*}=*wklwqKc4wTOv?Q7!|XRpB}M0(pf%{mlFjC#fJTEg7TlW9 z+Apa$MO!+vvCeaRo-MSt`S0QPyyMn*@0Sb#UCXAUxgO?uh;Nlss^J;VpCLc@Y-k}5 zT(?q}&Xb+;p_yJfRh_f(SBEQ4LgN{piyrFshW}vCRlwJ&Pc${|@LDf{z5Z5bjlYue z9|fnaf0i`5!-nzNm&i@V^(xovUu-vQt~A%{f6XuN2S49#>}OILw|?o{i$2$Gw6b5~ zRpYFmNk+tn>L<|eV(inX%5lhr@}b^}JWm{$ZRLFYY}A+Yr-y9!Rihf4&DJw^IgC)7}dm~ABtx0U{LCy(_v&T<5+2`}0QQT59! zN_*H-QIOU*w!I!Cjvl26I66 ztkY_92CwL z*-E+5xN#^azHt&bNiqhZX5^pd`QuggmSf6(zgCt#qK8y>Fh8hUW3Mp}_O0+;>X`4I zs(okhouxK_C8{;QRxY3~VEz{6#?qIT+I!=e_ut?>a2$Un1@-E2Rh}@-h zjk0&|J*MpawX#2_IdL;tGzz|wcg35vyXn=_Sx;e zY-9DDWYg$_&J7IqW94bdIQg0S}yM*3RD-j(V^1gQM0+@Qkb{ z8D#6??f#LCRePdh7Bu&6A3G4}kKsFS5A2X1+8jQ-igS(DaK1?-%RAtV7}tB#=%?Dy z+H|_wFjofsRSrAZP-m^6zggx_#$i9%9nQM1vCoV#)fik&`ES?GB@Lg~=Y5y^2f6C? zjpuLSPIWaZPZaohl{#fRRr`&=ImjB2g?DToJLuiY-#M;X+%Mo-$~Bv7A=fglIb4gl zmUE@KGF-Bea^{zR8&{rd+D|#34}Sd{=D*?`wD)V}slpv{Km0yrsLuWgz&{SYG^sw1 zw2m&I95EKt*f-2c{XF*>+?1hI5SS zxocxmi6^HSx9**0v~el!ej;mfPX<{Qo$zlyHDG)vV`C$jS3VOO`V~Ay&x5rPn@U^i z1wTUWRpmXh&{YC?f%6)z;?frUMB@heM)FS_J9R>9Jbc9>ZY+izgiLZElHNLU-40^l zcRUlsz@MQQ_|tpc2{l{e)N6>7BF>_P_?~&hB%@b2f!u@qlSt(JSUWxtYy=J12#B-y z%Z%Sd*^Fy(nt~O*6@8C$s?pth_5we?uUHY7;4|hELr%=z%KC>8A`bZl_rKD2vyRU#{}8`f_aJi^ z7*u!LQ-f~nrJBF!=fZ7Py49AEPYj+O)c=WFsQ;GJiL2P=pGf`ZV{=rjia{T(pq+l_ zo!a@w?Sjn!-^2o0FPA8T{N2Z+~;sDi-h1@cIZmo^1`trk|FJD2fCcf2Q z&u;`?6KU_OnCL&hvI6U)iiV_HxfE-RS8Y7VTBDN{a(qRsz~l+Y_#$AD6Nh zNOMJP-b$O`T5XK2|7(28hXHlhUY zCR|N>9|3P_&)za}`|?cI1k?cINdqwgot-Un;#N$-BA_O{l>?&QE;wji)kXpHOQ zYgpi%OE_14fpGy1fDhI#c!#HPZnX-GE%sILFaBc@E1A$7%GAand*{d}c0l8dfoS{; zX#D(z{qBj{`$sI}^wqX|9`Uzr;A+BxL04lM&NX_9uZ`taIhTHVmGjbPe(1i`yB~U( zOMB>3&;vPcX(Q+7%)Wzy58v>lpP?7#mcv_DOfzQXrWwDw0sRj>CV$*^|HuFKzdSPq zyas3IjOVOy&e{$Y@ogmW$*}gqgTk`$h)!Ff(-v%c#Fb&!EF9GQB{x-77nFZQ@uUmU z1@S*D>A?Tcfi4)wcTwYqmi!j&>|r>EGbVuzeU7zx5xNJul9h)iqR+6-AdgN8>K0E3 z{4RHnWESFgq25e{dL!0b{4Vl`gz$6J>zstYC8)Dhs}p(5Ft${toC7~52eUVjGlYyQl#1(RLA`{^!6GS4JzIdS#}DE_WhFl*0X?WZvAb=(7km53v={=ci+ zKFfAjs9tPy%5k2f{(IOzJi30ZLq=lA53$BXl5M_hQ(wU6(1;IHYuMA!>KJeyH{ikG zKx^YH#x5TC{>g#Md{oYMjSqh7XJmKOc+O(pZ3u;&b)Ba=8p}!3rT47HUj&U&hrXF* z^^L%n52$~JwFOyvHTa)j);>GYLjrsf+Yc?*=-GjuONF=Z2|t^?!Zmunhdocd%-4I* zD!S_P3SzwE$9OC4<+TqkN<8T#Z>+KIV9XizANvdBr%cWhk2Ffe-9ewxEPsm*SepYnFupvJ8Dze&K5M>o zYQ7NHov7_Qxo50!ys~mHzry>9aXGh_c`4d#Ag^}-KXWl*<$dL55go=H1`BwdS%JIn2z@Ye?!DHT?TzmHe-dRQL ztFyPmQv+{025zWDsW?LP0tV9v^4F|(Vv<0SM1&GlsYetLiKtacvTLp@pGI&-y`p`K)_*IRUY)u$sr zhGc5lJ*OMn{MkHj{t$6GZL7VRUsK#2`Q~{a1y(m{wJ`QMoW2&c!tH8C&|Ave!VZ9;`MN^FME~j^`SWDG_Y>U&oLVqWQ$e# z>EJ>BiqdQ3x1-!wK|a79t94WH-T`kh#9K^9Iwdh@ zUc%R1=% zTVs_oDV_`btPw-%0}oOE21 zcr@uUVe(FhCpI(JrqF&J=LyvAjL=&4U_W-BjJdYsLL}ibFHsSXN z7D79kYm$va&}5$S9X#tice~$t?RNj}uj6Bb7imBGqAYZhfxZ~Wh8#STXPv;hEWO54 zu29+0EO012A&6B4PSL^;_=siKRf;L{e3am`z##q`DO~S#!Z#YhoA{FAqN7R1zOcss zC2Nv=yRy4=+u(+N$1L)5B)3)?KfQwdz<2o}b3-K|Jaa~kQPi0i#!kr`0sTPF4U0Kv zmvihNr40RZn}H+3-;MTwBRn@gfPId$ER)76U%3VY-kW6%kV$lg>h*6Nc`TA4&QfcQ z@Xc94T2l$VQ1$P3Fv?tEY$ks@(YwKA;BV{#q^>$XD7InZu7U$U&g4?t7KEH?dH^+qa4MGxsg04pKI>iq|tgk zzPIbhkG7=UxNUK}vGgCN8H>24bG^E#z3QL4rrnV2ApKr-X%BiD{1Ut14nm)C{yu<= z7EXQ#e!J2!rjBPm%rC>Un%*L7F^<)~OK;oyb|0R`uO{c(^!=W*!DBl<3E&nVRt|)u z`cA)(>Tci``_6%`+%|t)-9fyj$CXcqGLx8u;Hs$Zw(t&G}Rb|FnS& zK%W$2n8>JZWb(`(p@D-$Is7n;y%9ziIcEId`$_nQ z#vdC(#92Rb^NzCv-Rb5Lbf=NCoeyIJI)(9{#Q4u^jC2@ z4bVfqe$iILIOO2JW`00poO$4j|HYX{ocnyw>%aefkmsE~yFK7T^Eu#2*){(2*pS7$ zBH2O88wVO$H)8M|!zPCYeCErwHA%9-A?lH>7@IzQK&OD${}(()YqH{olvmM|e2Q&W zypY)YN!oMvDe)T3Yxt8zn?{YNNEhiNrd)oBc|4n5lpf-gBh)>f75ZE3b$c@l`Ww)#rPA;to;=6$Ju{Me-jq@W`RfXuDjqV@*~NgB_EY& zG-TT*=f+HupGbb7e`oHr6~u2oT3!i0hOB%bN5nG7h{a*Qi@HNO*7Y>&EA^kpJd%7E z*!&Cd0GrEzCo}J?5;g(GOYKaw^$QPx9-u=%GZ9^hy`0jO+R>Hx-jv-T0nJ1T@Fe!o zHA?;z-#M1%;<=;y=YqLFy@4IW%KIsJmXU_HGS?a{>^4cQ-&_f<(i(poYmj6=$?(7V z;!1BfI->e(F*fF^LDr5d+*ana`ih^&?KXz}_lXARm+l)2tGs_+N8gj1-HjO6zkTG$ zN80t?AkS@y{f1f_1727P_8U%4ay~gZXLmEcv5dy|qw<3ukX+FFcU9abL{kOkPR@2y zz#Ro%^W=W7u{7iykL)P>gXr~We2Trs_kVfhu*!yR>i5FU)v~{Qj=jH>MgI%RHtV9ZkUVQl_fWxD?N+78I#20%?|=Au_cPzi<|5H+ho5-uN@pC-6-Vsxvazg0Ugq} zaGE%%L_a#-6^yz4(8Y7HAG`;d8CuhxC5@HdC0<$U-W-D$#Y$!IA`4z*X0`w2T1Wg! zYqP0wDXp()jz^hO@e*Z9=mgY*?j6|AP8{unvB}@exPR$3a0Koo&k0BB?;EfG{_tV0 zH*s`&Lb$2-`5VT7OH7v+Lf4S&+sWKk+|J|FcYjTPuKRH>Z+_#j_Ca)8(7e;@Jx~8b zr7yc@n#M=MrKUG&(s-sk)>-95*pDl^)E=0l^OLz_U_T{)vVUx>c-UZXE4diY-UUG&ofoFnFiN~;{hy4DLN zUaqKIIPpY9Wwg%8M~;5_*ipY&0=~!j>90YNLg?c{;ngr!I1|CAa7+9!{%)OT2!82% zus$W$`^V;jj!?Ju1c$9!JU;XpvDULz<-E7ym^11XyDuEyQeyuExW!%-*p4)Q%IT@I z4sOGSl?I<@L1$WP#0M+CCI>Ko=P9RqoT9&ZXA72{ikuSI<&88b*J|vs<|T3E#PP-c^_ zwxx$QP|pv3i;l?OL&jiW*D-#-}B3#hL)s5-@-hKT8s_zOmVMi+A#kSoWKLL z{>7|*?-bt6F7f;o>^KfI|G<#fLtC>l$cn5P(UeV2DcQ`cvg@)eI(4SkIeQe1+4?)D z{@uyC%{dR;*T-f%e~bRq|K$ef9B_ZP$^(~ZPIM{R=8jR%L@WP2>R#i%lKW*`L&ks~ zHSVt5&fnSMHhAfC0loFBe1T#4>Y2tzu>E+{GqraU_j9=F zG*lleWT{C#;4ul#lz+*}tn%V>`FazFy2-WgLtQZ3-`a{UiFx9(c-{J z%~mog>1aGwdnR@R^Od#O={_Eef$TIrDR@W*J+d(D7m&5zk@j*m+Owg(%%(~dfAtV{ z4E5;)w8=W*p3iTXILaaRQtJ8s8Z1@%!^Q>N{|WtloHhK9wjufs+PK{rvT1|5Ro`Ul z)8DFJeBdL(Bljo0Lp#{44sho4p=HFg8V0%mb4_;Q4{8r4y2k_bGgv!W7pJ~)Bv@Zr zFI~)@J{X{2vYzlKVy!cD=_g%?3z3Fyi z@1GHC!W^N^KJsC$h_N?Pwvin69_7cHe)Bno$@#*XN6<l!DG^X!!B31}HS{PYyy({@m@>)Iq zRXUW;;*J~g3n}gdUCLta0ZWW$6Pf##WI!98uppfZ9t8ch8afASJvm_c&2Fejj%*^= zPg80==L(R=jrVhM*tn7f|IUS-j^u!G@Q5gVXtZAXY1G<7Oe1zoi}QBz=^$sUlD@8W zUpX{ld@mVXI;V23V550Pee0;nyOP7vznT=^_hEj;S3kn9Vh=ycFZRarC-~JKi_h{a zzVrot6=U7c?-+jZ$2KW8^Q-)F&U^VA{KokupJCH+{Qe`qikzKdF*$@_mQ-rW53auNgfl7+9R*|Jof$A6@l@K ze6zIno!S{aw>58`Jm$NG+IOGgn=85Ma31?DXU4C(pf)}ln;R%w$3eXfjbTys1IK6@ zf|icb&<@^DgcqFvFIG9h{$ECw7V721hg8?L8my0l_tAZvMcZd`)#pLIeSN1sj_5nq zQ_j&l^oxma9MXOV#a^IixG~lm`1p7e-WY?IYo7!9T3I<#wJ(M8ha-%y)*l1<2(|ZO z8{kUjCd5*?2?oFNPeh!vD8pXgVC^y%8=* z+g|(q;W+IYwA;!%J=cB2**5aI*M5J>KNMmfy$o!UA@yD`{uyvb6T__E$k{53&1ZL_dPa)ASG?3uvBfDr1^P<4 zF;kTrUc(L`yl&#TnUhbHd<)!9JVEkI#Cd#1G>{932W&cp_(9-aCA>!x$gtGgaL^NxBtM~atvdWqaW5OMVh2*x6WFVcfv?`j-Sn{lp7&isY%SOR>&`K@ z{y)^cdz>8Ab?>{YA2U4sHCLNpu)^UAM{j$hBUey)|9b)rZV6iajTup2S!TB2#$rnU0%;CMU(Q=SY4U zwY9hCV?R$h8zMT2QK#YtTLH_@4|{*x+9#AjFz^sMHU%X^RvSp4&Qoww@@*< zrHW;C95&gVp_SbmTG;Mm>^+!J*j2F#yAMyuCd zPM56%+(dB?9`Yr)u^eRQ>;n9MZ&VfcaoVG=R8>z)f!LJ7%T?7E&n}AUi)BAUyDCc# zKk}o?q@q z&s5yi6mX)m*QSCO2b`c&ABv~H?zfk&^gH}3{WyEfJN!X@6XyWlAA^r{F^&i6i~Jad zy_&*z-+%lXyHL%a5am)~uIa2H=?mf^nvWlg_6Pcks~?{t9>Z8Q^oi5!@6c<;-8s

pzh@rzd)9Hkmmc%mWU}HztsOTTe8|9)`SF_@PlEr_ zUh-x$o(BfatGvb!oZfK~dJo@-_BFqf4)eYKt>%(oY}ENjEy<&Geyd(*qrPSJ`i6c> zeV5n2JHEd7So~;xUvJd+8QKFbtr2rnXNGZi;bR4Kch#M%^)Csm%;`WmS>9b2XFq_x z87t?9J_z#}hpnS+WE*YNaS+u{TT6Zm%xml431)OL?6)rQ32rF95o5hi8{mXy#CJ^A zuN?VIDR|c@Mf?i*D@SzCcklANm+u^|sa#XI(x$fWuz_3g)ZTQ>$1T2kHf_|}#4d>4 zPh%%M7c%#U1@U%ZR$Q3QhVD%lSYH<5a}r%Q!nD{3=h;mK^cxX<`bP z%T^wm%&~UUZ<;tS3EcORQ|CtJTn$en%*WfSHt?u#z0OFeTtVvJKXTT$akFLlqMMyj zU+YOMO`iMA^HnReBeXKWaolAxJ43ZGOdC<3-4Swyj%qLYS%dHc z;E(GTuT{J#IeNmZGfaP}lmBVx!*UKqF-XcEVC+L7v3-?yh(hnN;(wF)DKajDW;zCa!e~;hsl6%$F$d`RNy6CjtQ~imj(FfMRM2Q$e;B#niUUn==Y))(9x0IJ1)hS(Bp22=ueXAHV z*-sT`ApfYoci8ja;SczIjG1EG;>2tUe#^exPf=d$qVfx<56au9nB6suRhs|Oy|!4E zFaO^ZP4oKHnK^ z$+qk;>-~7f^_z3>7v76^Op5pkb{*DH^}{h&A_HtWtUg@vJo##F=V{WHmLQ@A;p zG%^~fZ-4b^;cQXmA^zW77z##RK{e&b>FOF3+g&q+U>K6Tdnq_dJ{or*1b2;1T&;!?6B ze!pL{gZ0toOxiO3dcPx`^JBoYi~h@}r!gkp@z9(MaG08`q4_>PN3NNF`}JFj*K_E% zNe_f4LerYtvcEyo!RJKdKEJ7_gWq%cE%^}MR>5XnQQU)gz)Y@|UyLeNA?T&OuTxI8 z-3C58y#F1iasLpweI~*!wlSSK`P6s$F8ALZGYTI+0XQCK&q*8qk)1>Fpe(-)Z67N? zE60{(P^~>jwceW|kXk3Z_CX;U$#y&BJS?OdfP+&4LVBb|(T+g-&g zP=6MjdR}l-wyCTfX7d>Po6u9JgBbrsl}q@pk9;J^LgPt%bL@-wUMz!dW)J)5HNN8N zlGzoq&vh%tRQ3wVjiO`i&rzT5en+u;%&j_)jh9A|t(JwB&DG^1OQR#C{r%`)2jG8) zHeP#%Xm&hNx-E>Q4^j@E>%1GrnN!i8`!qIRd_4I3tMY|fZP|+Wrf5LxYLT@_JX8K} z_2KvEgL3;a7W82;F$U&)^0g%#+4sEQo5068$bS5o{=jSfzRcaBbW!z-JrTsh$qoxI zrT@YaIE`>LOL)#5WW1MD*zeYwq@G0PN?)?~L(zBdw@u!{@2O4IW9ZkZ(E9Oht6l5` zQM=^z9T%+nCaG`eM-tfP0<-i{#pp=~cn!P>E|qKaO=Ul+zB$8w?D)PhrurUPJZh&v zJu{IVv=%njzVo!tHH{8QJ?nYTI2=9}j(@GgAiL~}hn!lzacEk0bIn!JwT&(qeUU3snm`EHmw(NF$l(2*Mx>fHHgAGPL4R}*w(heUO%R4`P0lZ~V z@N?<5jN_AxqxNztFMPAT5?n6`itoL5UgG>>@B?tAv5q@?@jpFRZ*y^!mrXd9P2ZST zz}Mo6>@XJNx|MG<4$Z)6ISb3iU<0ss!f%Gk=my=xe0Qh5%e)c_o|wG^94-k{!vnz} z&oj&w>~lxw$~Ux+ow=fzdf*w?S!JTt#$5WE-aEX9)&ax^cidHF230uhEeW}+8RQCgMQ{$pDD;5R*}3tll`X~G3JbB$RpOp z8KuNf7*i{6J%=1snqM}hfk=lj>`U+jg%;*uLs=NjBVY$tm~ z72kV?Vmrwx(|N&gpuLg3Co%3HBJKp+MB;P6^BnTJ_CKQEXg{;^%V=M0!>1-aC}kJW z^*;7<8~gmu3-D8>Xuf<3+@Du(b!~u{N`?bHpsUtNj+{ zb20r&U}eb3l~9|+pryT@q%mirr|LfV8+)Vn;Q5L{W$)d2XMfTQGKzCZKZl>$>--n! zUAE;6c1p$LWT3zL`q?d>u!?uB^v8N+u&S8n#xn!Lt>-H^ecR zEIOOJCA>j>b;v2rzWaBGfsfV&%0&Ie4sG?(mlW~>eU7b^PMj$#eoOOtU5Pex7b2G^ z&OtHOwY-Yjn`ChouwvBXY3x_$QZCPWi|tE%@4(yaZ2)fhWSwXBvPTQN?Z6ifE*?v7 zh;Rfwohe&oc7vNeUA*-Pg}dq)RsFVX=- z`;K=-c_gd)*{jT4w@cVE(IuOii%~ApJJG-H{7IyLeYBUDy4LsO`W4eJT|jaD!dVpi zg&wTqfP&PJwT~+o-_!N0|#=?6jv&!3FF52d^b|z&#MgatFeA_CT1rZcWg%a!rt2wmN9`5@qdk zpWwBYt?ZY|ioZ!^$H?o1tN@R(m=7IXzoJ*8tqrdDb#>|{p zQ6J9Y9qU=eBL1ldI>FCA{%2gsm61NL_~0KQXFRx^@9o<6ORnYnd~yC0U&VM#kWW_8QhF^iJ&FQT%_86&mKM zIV~BQX-U?BMUkxhyZWU%)Hh^fWN-H1QC`oGnV*s#U=_X?)vI~?*T#IlD@)u1?0=In>EPqtKJ;k&YhG5pqbBi-R(jt+UyA{}u4XdzG_toUwon zL1j||BfdqBjHb>t$aunIjQW_{f0E+TnCib3TJGwy@-#Ti3v-2VZG}S`2kML3%p#ZC z%puOOIhTDZjG6YkiJx7% zNIVH%3(jVK793P3`!5X*shD|HT zDZzd7%GH6z9+MVyP<^j4YtP&po^w6zQpZWxA=hQB@{&2UOCRkFbC~ynMdi;W->~*B z*u1kcCzi2SPZE!4%J(wfU$uR~?N!%c-_L9aZcDWL5AWjJ(tv#Y-Nty8 z&$E|1%IPzqW=rovt~TaY|Gkb3^D9$U`)|;%S#!zrv!cgj$;%~qW-95)-Q zIv+}OHWj*$Y=)fMk;g`Wzt8dp%FQnCc-{uTYw?jQ7{3@i!NA*v(-iCc!@${0jJRww zOQ53^>$YVkRjl-Zgq41yi#WO%GSNio1>kX#mChhnM|2Vgk1Tnva$`dS3o1$IC~gi^ z;|8AsIF)ThIAz}ha@xY^z33}$zfq0bwKDRRs7y0^6RYp=ZG(W3Yibizbl@+ml=Pukb|!}|P@E|@ULG~i{*5n@MpzO@JX@%M#W zr$axbePKMeFYF+VLu`4?MXS7Z`=DZntPqGTuK`cKeDgdY@juJUHQvJU@4x=oEZtRk#%Q@>&RXUuPT8160uHscosNM zKxf!=a=%DxR55L^T2*6D-Hv3=kez6eiDIM@it4c`hcXop9~XR}}B@;j={o>e{@ z8P3UFRqp;v=>JsK7y5l3GEmcW=3r^iS8k(!O>YcL4xI%%v0#d);qTO^7(^@m>`$HC z@BwtLy{w;+J==2bs-pV_&M4hFvTE7{yuOv)*cf z+uWXTYY({fYy7K;T%8?#gMr~30ny(KctcXQQu^Oay~3;L0*n>zEY!u(Y46OqxA0&%b&Q6+(gK=pIA~1l$$1nj(?uUp81f> zv4@#G&d}Q0hX)vY>csC@Udmc&nUk>74umrp`(^A|*4ZZ(W1TWJ7`*L+z8AF(4~37$ zi?4?X=&t3NwLvp{v<*I*`sQtnuPM*o&G;gRPQ?b08XWOw^FNWlGi=|^c)Dx+x7~xB zS$Ri5PJ7l^#+7zcrB|U%_;=nd%XZfc%pPNs$`6DKiAxke$7V9Ay>zPIUb@_WuOuG1 z^KhL0C>Q5X>*M+^W9nqdi^5px9<9vx=&R+u0o-rEU)~5?4>R}QTpu*Cr;B#VpQ3Ei zUx)9-E~or~5WZqz_h|hA?Kk@!-a=j`jkBva9I|JE7ip(}c#Se{X2zfN*oC>KYx?=oAX2iQhy<7}pe z?MG)aMY%BQ`!ku3trI!FNix3rTq}paAWN=^9J%(B#+P5|;uBnWr*J#$f0=wL>|?CO z1wp$FTShg#CmbynqO5tW9%6*Z% zK#mM@K?;Ux(B~@XGm*Qw++W204V_+aEBhOZ&>H=;w%lB{GT;c9C)fuOSEg$CH!gGT@;{5xaJHk_2o3JsFkI{IKoq>H?XD%w=Nj!ZIvEg22 zRnMAG^M4xaH~o*#B(_Pm3-oLl|Dv(R@K%YJb5TESpz zyeGW)4{nKM|HuxAogIH4y30^`C;i^h;{_YzO@7lA(m%YQ+(Dj7beAS#eaM}Gk8kA7 zK5!Ami5YxZb-C)up5KvA%vS3vLzf z65q;@Q_pB^j+Gx6_-WN3J3e6HEAsX*7i+w>u@0N|HLPD(meWm)OAC5;OEFN+`c!rx z{2XUNGbIqSlbO zl>@Ie+CoNZnwUhV(Qnl)`OwN{%Ce2g-}$Js)Bh;?d#uD>gVKxO1{>6!=so!1qdXQ_ z>`jHwfq(JkdyzYbeQ!B%!4o6dlC?RKe}Sw0Vc>$No%ay5iHwguVVmTb30^nf4}|y! zkkh^_UUw)4{p(z0hyPERp+M(sDQ}5nPT8MKspcC^$!<$*fq^dZ3v}1wK)s5S9t_2= z_1htyud61mgTRMDSb46yCKzt;TXS*&?#J+^`0HW=#bD z?B~h3hJG=7R}q<2{%;e(58SQ#&Z1B1&tieii7y=}RYvn&W4$q)`*Cdf%dwpz zt7J5;S>~*}k-Q_=ETNB8&G?+0fr-t|Kx~3NIH^0pEy&t2A;eK9~x4tIPsEd%`z@ z4e^*i<<@TmYmhY*%iy>x%Qu}eQ0{lJDKXEdxRK6U={)5df&ACed-yHKPwL2kxwgnKIzln2)=NyXy%Ht&TXAaxr@ihqeBkuUhew~ z$hfXonWN|5XIWNR2--NQ-%a-!kt6s!^k326} zu+fe;rLmbZE|cLeCVh7(KURxyo?eUYu{P`jMtpFs?3Jm=XUe)&xvN=cgm}TC4}(Lk zDZpge!~O-F-(VA`E5FkeA6THb4)RLhld6^f0_9as=UJYsb7y}?d&&|oiexGFwE+`kKpX#Rupu4nJ8SEMLHHLX-EZk{H z4~~~_w@>xsJ=j&LBSU``8$C;7f*tBra^qff!Z5k4-ST115j)H|V!cJ|@@6c2oioh7 z@GW9~Kgs*3pS82Z7X0&YdEraLW#f63#d+2?a6BtNRCYLzKxh8SE-(nKZG@hb`(gC} zwi%Bz$ry)~lwaXv&o2=dP8-V2cY`w)4yVUL*X4W<5BqCQ>j3hl?FHI*xl{PU7yH$u zd8+YTdmDdTfBr?DUvdrf$6DINyp$gGA;#^Jqw8Yr9NI3eBl!3f*Ki3mWtq*@59o6K z`?_4mo6_Zw=g{}0%Q=3o+_|279_x$f1TMM*XXd%X&28*2O1_00K;Jt`YFqOAvPy#X zlbq$D{DhLh$P*J>f{vp;4Ffy*HljYAc}$;H^8AGQ^WI~gui&}H_Uzx(zWMMm?{d6D zzNz%r-<`<2Mc_hmMGY5%2cHY@C@-4M0I0#UFjx;fibZmuH~CvSf8S+Z4KaQTDslK& z?Ap!MxzNYVH0M;f%=sKSC$Jelf1cvnQ}7UYMfz5MBRpXXD~Z&HOpbfPZ?1edOTxbxMTeId=7z&w(zUT`u_-7(5s zgd8w4b$_^U%&RQ=G3yBYT)ard1vBog@(tDH6ziLXXuOWq zJ*|o4bV9dHls0hwsTce*w*{Ztx+wRxaJvwE!egT`OM_3H^&s3SmosrPRpgZJQ^A{f z&(u1tsee-oisAWU@Bn?>ww*qLBk}5Gw9)9}6U-N_iONY){>^)LXUV^K;)|?{_j;9! zzRx-bT}qZuu>Lx%TOa6e@M=}`qPa51M<4OMO5tL1iI~0N9C-aagH7Ds8!kFweR&G& zKs2whX&F-p=fj`p!5^&QTi6qht&y>uum4k_>%ooH<|1?J-|OOjSU>Btpqw^w3fq{Tk0@cz!Hs(Uz^X8A3NT}t_D9gW!lWs=1H{a z|53T~BgeGKz1p;V+VkHCerXq&=j)^KKrZkv`F(siv?05X&b(d;FS2F~1xfT!*G3Ms z{Yf{ao_u)unw|d=Xtx)d zHJ(?|Iqr%HZ$aizUToxe{~yMG{g&3YjN#ai%Z`<=|2zByowxW|yEEKDU2(e<$sO7QEZL}**KryBaec)Gyuy6YI;r!Y zpp#CbGY!I;n!N1z0K98r^m|5Iq+!dkgu47B;^Eqhc{d;?tUToBl2RYZu$0GoLU_Z za(=UXM@R7l3_6QkIgc#+jR;4AF%ArZNA2qTCgOj_1^4l=Bp}FY7doLu(`_KyA1iKnYld!AIMF9yxc{6Ou;4Rg)3d=R(}q2?DIbui}Ll2G8Z#x z@-Nb_7;|!6ZYp`j0@9J*?kmz~6JC9q!p|hw&Uf7<^~sB}EUuE%dhH zSI%I6geQCnU!i5Xuxl{qGqv-s8a{dCvM9!WEB~+Nl3#va8kihtJ&pXXwL@{S-2b+A z)h4#!Zj13yS$%`9@|0qEN~Q=rW1(bWjq}T_t=J+f23YU(w3ZMz0xc=W>T}ZHvAaKT zK5&~Dd|0qj_TF zbHx0E*Ugz)uG(l`IW-!Z3Jtvm?^){I8(x1gyu!bj7|FGMYT|2Q+ty)UINLL^HNxNZ z&}58r7=^#78q-Wy1h1l|2g%|n7 zg_pl({wzIQ^PfDwm>dyY?~Keak1ym5w4oVhCAsr&bjic`xgJxzi1+jO&z@9WPjWrY z^^3XWmAH`oll;HFL-4u2aJuJ2+U$z4-Vc@MrJ-kyzv3yJ;qsU2>v-I7hB&wcX|0Mq zy8cs~#nV%ZDcEx%-*1kE=w!jSH5M7-Dp|{aTRo~nyt7|8q>koH4BmFA+P0N*$e|tK z?*ZBuZZ(b({nc?7_j-@wO*j+2R39-oTFk@soO zOcQEc6l1SCVvcf!VQ)3G(Nx2y#w_AF_HD=~@H^_?)-!)9)k8(ogqK+ZH!IrEZnPs^&c8>4fs&L`7-`s=t1(i`~?{g+R!)(UIV;! zzqe!==5O8~!&t#>)NlS9YqVI?P&Az9LALlNb6vmX_mR9QIJ@B0KRI^(eV=*a)#l$eYcF#IeYb?Z>+K6I z*4=ikx$J7otk@^i<*BXjvtXZGsk{^{^2VRB?nvH@1B1Fa(XoX za*{uof6Hqz;Hqm$ef|+cl9bKv=p4))GY7w2pM#F#=@$g^auC=Kzat=b7_E7aXa*c#e7g7206lYtA+0Mr!TkFT@@&TqQ1k_Z(2(UE9~F$}E2{=>-^kkz5P7(A&Vo2$Ky zr!&2=xgwiOzp2sg-oxbTW2}(P>%8N4$>wUK75zo~HZB5Fu)PcPNsJCk=)dDoa{ z&()tR=Xd&;=iBSgKf?1l$JO;z{oP5tJFy@ARed#^tI|!Sr{0(8_qQ#t#aJvlfxe;( zN?(*tDw*&`XiKpG9d8n^73qcdp!=W~p6DH;7vADeM<-19#1gUwUvh$1`DN}tWXJV2 zogKTwB65;~yNDj8LnqSsp=l@bDT2$Iyt}z7J9A`*5lngPFm>O)d^3WotdE{wiYT>T= zFnV-qeNCQ5CZ0a27LO1!%>Pm?7D4q*Jg&Zfr9RQ;_gHJ}kA9FgF07B|Hr`$56Zg#f z(dk3}`t7bS`fl)L`I$ahFMDUb?Bf5TY`R`{jIv&pymG`iXm6YJFy(=0FWpxCg?!2x z^f~OVoi~oe;vVy)$XX6R(H>uH*D>VmR^CN+Y^@*SZ`%8y`-G|eR=x+>C%=SGb@g)9 zx1{ncaz5+aW8mfy)}F10kw4^bHOMGF_ga^A4z|uBMz48Iv`rciA=;H|onn@4s@Y7?vOnR~A`Xuq`6!0x054_-# zkCi<}Pw`Et@`_bRqL0M!xyI>Vv+9;j)#;r`%;|XNs*&06Vz znb;Td(*INK>;XMHf#1*ayHO^|?;ZNh{}bxp{T;u%%-!J$c`x`y-6wc#-{@~y->Gj7 zes}dpeTX~YjP>iI^}alXEkd*;I2F^NF=+6U$Jn=~cjPk}fByT^qL_wMnm9q5DI3b@x{IksEKEd_A+=3?9Z^pL+3njmh%{}6p^oVzMrMm{I@3b%}PwDy8m@9$k- z*3AuwYn@7HT<8Q9!z>nrMbTKa5{+2kgLEvL9Xa7i+ zFxD`(;22~76?o2|a@X%x+(Baw3_Dwn&H>E_(JVM4RzA`bE9q!H00;H!8DmrV+v{s{ zqY-cS@N;LG%@_0-Ly)u9hA#G}y{`43v@u)>{~d;ZYoDlelmGl0F^C!bkML&ADec#9 zFAexRkPV=x$Dof#7BjzS=aGm`>>*#Vl$@y$?crDa@3Ip9b$CjGc`trtoc+ul*^}V| z#7*U(8^v(PSjU%A|GJZi&wOSmFbU4Zz;A?qKfIA=@Wx8}^KKx#=6IH+e^HD8^{*@q zmWA7S4snw3G3a`00zG?&g$_r%b0{<0jD_F8H>dFv%}ZvOnZu6zP3!Q?aXA5uN_DkCcuk`SnTWpY|>oGZd9st9LncCEh*4yIIsPpLsj& zCd~S%T}Jef&PjrYR<6s9mD^opsq|*}9{kr9|95@G`EJ|32i}AZ0{`#e+-*bbU`(-t z(BbUueDk8d8xH&V|5fH9`zjy#s`0kXVeY>>`TlSN?SF%-8CcfyA0A&#a%M@y4~Wr1 zPmbpG6zYpp#$<`pA+E>di2=%blbWGd!Iy-$=$mBEhH5;2do?*-yk=pP%Ug4ay#Zy# zfGZb+Y$#e2u1k;AV&NIfK5(hMU>&qS_Zny;FMDG)kd8Qv{V(df+gN)JRxLAxO&^+* z-ox2h{{heNuq}Aoc?Vu%=w=O^SaqBLYk4+2BHEjQOlpI7=i{$bll8g=d$7e$Z`1(| z+w4bxj)hm%5uZ(LJFz-vpQE)08H7Fv1}lfY$=r?QkdboU)(OPaXk9q~Oxh<`f4BAX z^h0}sr1QY*qcM*ck*zsn)Y`D#xALsl&{Zq*{dL9y8jbAzeY!U{qwmXZgscSrlPxw) z{o2o_{VvJio+_vLqLaD)dfr*N!Lp&QgSoL-GFWX^_#a6&mrR*4inaS=NwVTrwFjgj z6E{gFCWe!oyzIG%l|Kc&OeOAg_HN={neVJ0apT;a)ZXa_dJb0GebGAmWX=};Cq?Y?bbMGk4SskM<-bATRG)XSnWsW zqtK4%LNp=T5Iu-4{v5i@(7xvH?chQC&J}|soSjQsjrkVmx9s8$84?^;ubgH z{<^|Gc6gE22(6{2bVd1;($unI!Xzimq+C3`&K6G>Ulku6#J<KQr%~*KrZ{FLj zvMVSjf6&SdV~9MH<(cC4(F+e4XL#4^bvfJip%Z6)c`|ab_Co3WF|CVD&J}*#BHt5h z-FFy!`6`ph7ahQzoW7xIu;C6dZdcTEyQMC_?5NahW_ErqTe&ft<%DswOzL?d$E&6=YuzQx$tKj8iX#yyZa66HuTth z13YUbHmrx>Wusp3S$=<>`wMwCkKf6q^m88X3RnA0#jp8u`8|i<$`{dsty%kz6X`4c zC;pD}l-k-Ndwx65Y;bzS>ubs15%x@2h3%H))`VQ9*x$f8=#Nacs4Hhrh7ZjIsZR2`| zYh)jEzZ$#$P*7a54|#$A*YA@I5pd=!>%pdA6n;@m?~B^hp1R_>T<36of@>xh@E2!r zP2V2DthPjdis$R251)jmEczC-wVrtb?VgeUY`Fy+uv>t~8s;)%p%?%My6Ocd7PMp+ zkr|3(;lF$PgSYehgJ0SEgWov&ga6F!58lb{kK!>baNeA`+;4Y>{bb=P>_}_jGlTvU zKhWOg<^G+}%3ZCkQ4W$P?&Ey9mKJ|YDiz_~DZrm-??`EX@UFW**vz{Z<}!9g$=d9D z$=C4u!sN^G%MAFtzr(m-(^T%T=KPiZPv)+m9{5l0YQL4Zu$w$=+U|&dQ*pHXlU>Vw z(d|uz)#cXgm416>nD^))xpmMEvCn+hoFDL8?d5(i^qF$WHD4U|Tb#@No50IW%(uqLTw+TbanVo5HnoxAS>quzfvq+2^q|c_|k8N zY;t2c#52P$(~svV8jG$xv;|Gc$M)|9cnEysR|Xye zA9*JaAMy4FT31Zz>wZ&)`I^Q5?!v>(&3+T}UHrnz<^0>=A$P(Xw8#Dl_}A_5k1eb( z;vI@3PtlfSjLke3{}2sCJOv*0LUK7a0M~yWUeQij?fGoa!4IiNP=%`PZD(~dne6ThEa7PXvK z?eGHaYsU`cTgdpb-ANDBI7IikIbAA^(6nojbmFHmgF2NX`TXCp;!CL?A`~iMnRyl+Bk`LOq zE6zZ&q8WeNMGt^yqnALlOCxeg?9$mF-CdbzJuAn^&vpAAopozv z&_jsRlilJJaIM^M!@+^-FnJd`{Hy5WR}|NND3QM{Jl9$l;1BP%sUv0&;zvg}LH|{q zvJD#iWfr(;d?(sTy+)2(n@4pUQBinV5kFx*8J>b8&+)P} z_Ee+&_1Gc|HVN$`BF1O@<^aFYV`rJg7z)kDdm=mFFXr4I{^C05v^Z8?#{ANrotTIG zf{wNp{K{|N>)sP$SN9D%(3H|WVZxnKo|9=K4|p5r6t{(0(}s<(jr>Y&p(#L@{6TfUb%&HMmSR#T#y%EXN}C1>0lgHvSh2dl<(N|IxzB5uN2rCx^BVp4EpsFXgN~zk{_yGV2cJ zYKD9fNpOMxv7)%V1i0zjbbq)4I9BFQ4*%8v^;7QwclGQxjj-x&^X0N;Gyg5E^jQ8x}mbx{% zQ4ZrQ^|zPq!sd1tdkx6>%Cm=#<8PYl&;JWN4xY!%!xrFG=1~8#(#gyjzE5L&sK?sS zk8WqrMbQ}w!y67%MXOHX>*c9G5&vEjw|mroO%s5*v9zW&al(K z+8h2he(m-&F%9U7#2U9QfxhQp=g=IG{X}y>bKw&_7w=G>!fc*8%$oAAbtXA}(ycsu z?H_;r)`P`bY@_(#gCyOU_0b;V5ny)2LdQuHN6Wg(y3(4l3vZ^Fqp9qway%nmIDbde zoT2U5*mlpnlr<1|PQ-_L<;v5d^S7^DOl-m8)BL!ZR5@*(*Lm7?Tq`|};@&yg%I};U z%k7+OvO6d99sh@twKxjw(`gqUiTkFN{$-fR)z)=vG4RMJcWw6(tEPiB8NtJ|ncjBt zH|`J|fcvSkSd z@rQ(?|8A7GH9_5`R0#9r3XJwzK;Ojsm!@`l+q={@{Cw(8VzlS=M|l8OAuIMi(@)zI zEB&jy&i=(*^JqJ_W3rXqF*%mmG1-)MOy)cO4<==^lD|uP2-?*yUp#$PQNAyymwxmP2C+UbIF)N*zZZ0#KKKasz^9r@SNJpP@O4gF_glu?uJqi< zc!T$7%=5sP1wLRib{#(3O)3XS13uZ&f%8q}Mrb$Wg>&R5;KC21oZkbTSD@>3mg6OC zroexSO^l7bc{0S=eUWeszAv9bUOdi>z8u(ldQbIFy%E^K*{R?)o-c(~sf6rR3Jv-7 zh1;kN@FQQ5aCB^2r?6Ma_%*+wV*eBa++j05KKZ;D!xUp^9bUgZ#Ta6n-Yx$_oY-sO z0~x3L_<0~%L~>;mTR|T_f((5Ma~hkm{3pAo&4v!xx1zi$QQjQjkv%g$Q{~9@L%D=A zthnw&4)fy{jh~ARk>{E(@Er64d^@a1=f8oyn|jzg^QP=H*qWl8Ui!w^g(&_Fe{g8I zUO>)2)`4t=-29W#fjSfLvbecFI&<&vsu{-CZ+Mz<$la^CflpAn(ocDp#ulSI0DZ`v z4sv0FIU3n5efFaH=oUOTnW502UnE$&@Z*H?S)`6^iT0t8f3G;)EOFfSrD42uDf9JG zWP?lbMH3?}UmiYE?Fkwtr*OMNe$VtmR;>^MwrHNJ0q z96RYl_{yHVC9ob|i{7xd9Dn*2_9$edy#|XpxUmB|>;YGiPJET!!+nwUI zorTCri^5nh`axnK=rv;@Ysq-5G_Mxd?$^pD%>KjiEPbP2F>?FFON+uJ{=X?XXe!|b z@~c=pSA9{8kaD}Ma)~WpAIR?=w`DJ6Uu$VWRNjIPjtKX_OMKB`!OD0~;&~`NWeGY$ zuXG@PetC+It}L2NU-4*vG}nkvW*#b^{3*zu9pq`e7ntwjx`*p-uD{~Clj{yHe0}43 zznNyqsF*v=+XV4;vJ;5kWXVy|m6qM$gJl{qdGZ6O>_1xODR^@w?W_rB za`icz;S2Cy^N0S%c8mP8>m&plhYugUVEVR*oTPT5;Q{vn;OwHe=BF^|GS0l3$M;3iQbjV} ze36)nyyn(IouLu=if1`B+G_WS)uvA=d{wcM;y_j|MjZm#TfUh zTRAeQOM9tyt8ML#QJ#}msJk_b?UM0SyNcy*z;+t%BDj3oElDR@SZU^&XiL1|k<4Al zZL~|hk7S5bqz&-2JBkORZe*cDs<(ss@n;^bcLL8-MXk^1p?T`|YHLXg?Ke62HDCYr zTM>-JhUt6RD4VH6@m9)P)W&zR&1l{oWbS-HT}fkZ`jwEqi@j%%~8scQw+H@n+@ZB7Ji;( z4akNai#eZ^SWtr=Bie%ACcVmBRQ>RSNq7I|z1CiAGop3r!wp*Rs`vY=^gC65->~PM zP=B|ScNVytgp4%}UOyYYHIen~mBy?s$Ytw>PTNy)*2dT&KZk%!}QHQ>*{%uJATet$qDj7&Gr}% z#&k9~o67gnCk*jtmcO61oA@1Kcp7n07HfWN`v~+th#i|)JH`n5?$)_9v$OYxKc!!a z%hK5PBA2Iq@j!S1G}Z!+L_fwK3(vee@fNWJucOz6q*EeDdyI=k-six)>ow`MSEv};c?oR9Z)`K?SYt0`&ujGzSlXMcK?QF z;`Q)fp5H+qFGgm+qP(f&RQ6A-0S{|J!J4M72E2k_xc&8AiMRSo$9${2NBXw?{ck@( z{Zol=)i;eXFEAdGMSiAps?+crU=oko#{TmkoXa|cP46$8BUzF7FsnQVT2O3)%QJvae{pZM1!D{oT{NE7ZS(*B+(Suh-u{&im`? z?~mo%rbyes{#DB9obAQ+GERoQ!t|v<^Rfe}+@+M;N;&OmSB&6(_%iFJY}@=No|ye; z#4C;4^?Dj`ezp$BM!wZtqc7d3vd^HGc`033I7s-5B6&T*{1h!HhRD($3VvsN_7(D8 zvQf;>V)NAhJ)y?jO6xoED$&y(&UBI8jB((%=6T8xe`v5%uW*A5|IN(xfnsW+96T#m z2M+fg>InB)cQrAZUXXL(P5BR=74$S~wMoBnye)(Yk2j|aq$Icp-Hdt7q8L7qoOKgu_3H;CKt43%$N zq;u1{)u)5tKx=Fv{J1~dLrxL;I}aQz1#X@9mgUMgl!Iq0hHMjZp7xB#(p##=_bMwW zr#UM6o0=xBm9pB~D!+j2gf{Q3^s5Q{-%0t6C%Emzea|cFyz)3Q+)3o6K}H;(%>OPf z1po1A{6_B?-_A9G-woLeA3-FOxA9!(sZGt%PPVq^UU}VR>ysX~;?S?($}pF7hKqDe zou8oiE9J|V59b2nK9eUbs7#@6${Bn)v=RC6!HxRx5_M}HE4IwCH&%5{j`(~+ajEoq zK4p%^?ouvcuPMu4yqI#m)TdYp#cCSOIcHCVhZuQuKSn!UyY3ISRCf3eOye9F`2R=Q z7n}UBSJ`M;zHDBX-1?ca{12M5Zy+0N2H(BZrI@vZx3aAM_R&TXnrtl$__5-UpTy^! zw8?8s%!h0bz4Sl9I+Q>*Xw7>%E33N?_#K~mfKBUEhfCfV*Yz9tOF^rO3zJW!EBd~M zKb^Ov?-jEuJxnptlD#5%5B{dO++JYCU)8O(Lv{wmH7edwc2eW7_tPb4066;nvG7sK z{a0f_KJ)G@^~|H5rPL!|Q>k80mU@&Y;Y*a!_$Y?+V8*K~qul169zOx>;cNIffK#>( z>2UJxCGhXqd?z_~6@I6c#2lwQ#?qB-@k@~(=mh?w-?eI;rk+X@G}C0rmqC58^kt0W zWx#T?uknxd4h1h$PP*3s{uj=zsjjkL3U}JXpR!L(`vo5WmTSyQ+>`UUp3fQIa5V2M za#;A&|_wyJ2Hk(ZUDFphk8fM=ILkKzYY>1T5Z+iIG6`K`WaZ^AYF zPWkMoa5z&8nAE=76%6rXa)`W3U6PlvF$CE9{I~h7d?x2oe=Pm#VbO;AX^@dbuhUt( zR!k($duNSapM+jVu#Y8AfM3LF^m_6C5WRl60-f#=&2o;&0rrCL$MzG^u4FLvDOLEx zh<0_(h-kOPgLYlf?pkPfG@{)$;QbTuovPEW=5AN%eY(|r|6O$3!napN-+qv84Sjo% zHCJ|ttY3@4l$>yM{mzcPc@=y0Q`@85wG}@pO=@6n5!E`Aw<=AT`xvU|(OgRQ`McylilGluDa@-&K|SQMn>S;@=3=?M%KARH~l^R$#{ z=;Aw_k7Q-`AHL}ZvbuOz6(XaQAv6aW;J@)CX zOFv&7aCU_*w2&ee58b#m;oQp^8key*XB;mv)9XaV{==WnAYQH{t}BZaB-#Il-74n~WKq&|@}J>A$D< zum|B|KaZI|R(wk9zvI7*nHwv;+#kv84US~@1UkQP*CnTM%|QoPTVhr;(duTst$y^kq4AdxTVDW%~DUU zP~E(w-%n-9HJ^Pkj1zON@lDXzoy1D^G9F3F$u4vXcJ~+fp798F1Do1wqpr!o)(4#I zzploBB~JOx*!*6g56GUx-9~;lKMou*;IPu1S>o&u8~w95dm(NYs;X0Y88%xne_7v%ShWbK}Bk(&3zu9CI*FTP}OCv+TvrkbADQ7rBUc_{UORoK1wjk|38t zJGm5E(OIIo1AZloG~q{#!_R)j9BIIM1RCtO$;ntEW;M63YM6tX(=C+0{rnMs!;;hd zBgDe$JIO&u>hxgoC;D|VoE4TOcF7UWl?!@drBPn(H0a0WPrTqA%0_d&$h@}UWvn^M zo887dkCmhgQ%{cn1>R?Q=lvA@@@Lf~IgL$rAM$&yY>@}K6@ODRvB8$fS2j)V@i(nJ z-B&!4U}v9VcM2b8%K2H?bU88!XZyt*mo>(?^SkRXnF52*2n}d`;xQR9g%C- zBFl^Kj3U!sxSSaF1*`pCS!^QEllrXjl`JKAQNb~!A*ecRqfqZb};%~7B zeb$pooH?a@(aLEUccCrvF6*4o81$u>Uag(0bNog|8_A9yZCh=s{e;>F@5Fz>hX=|i zCf&+Clp^LtFyLqGZty{ke;gR1@z;EVpKGjv3H&qej7zcvTxsld@Sk{ob;)lX!E#Ik6iu?cUwZOzTCjS%GKheQpho~TWPGczfE|;X4{=_teMm&dSgyT z^cKrQ9~s6d`=4PV!&m_0NM_idb3U}2q0TxDMs-RDf(BLRzffmmz6$rxeII`4lEZYi zTi$suyqz^yetAdZh5eVo54^ZgU7e>5bjyK9ZmSN^o^&cx910Uz;zu*& zI;HJIc8K`FEmiE3l^pSi341fTBj(>GQX>mfc* zoJBR#_2H+@3pQ4t`vS5IeT+Hm10#W@A?D! z#J%E|bw7i9o#mzbncOQ@Uias4Kec{8i~H$YSi|bSTRbl~k7vF7ZUI*l!Hd3m%5j4( z@MC$hmyVR5^xQzPswwy0sLmGf^eLX7$b9MNIp;`Kew1|smD3qC?H=|L%KnIYp5nP; z+qHM0h54Wy$Tnl}H@th2>u*(tOJx;bESsj~!YjeWkKEe#?c6&h^vw))r*~GKrmSMQ zAE#~$d_GFK9jt9L8J`$7Kq0+W~#hdiU%# z+-HbYP+u6gR2E-BiOVLIN8E9%n| zIX8Hm|4;M(5z42q`{2Kg+THcxTH9(z?TRO8{TBVFsQ1aV8yL^82nXyHVXQ~W9l+5? zJ7)q5eJOvOc7H^VJVZ`-&gi>=Gn#kezq7U*FV8eh%uYtFKm)tsd<51PA<#cXstPRi6 zhQ?fY=%@eU3#Q~(grBC2c;QeLn?^Ope{wRSbL$y!QC2+b@zQqoqawfZP0`sNJj(S$ zo;lPbz9^p4%e{DuML%b&&$&(2@6z6k`NGAf>MZK|ZuFk<&eqDT180c>eWu)*l)F3C z>^Fh;gj*}WWyzWF!%fwl*I+Y&et|V;GV-^L`m?D|Id;T*gq!9(_7iug+T;vXlODK$ zK8S6I%1}o#qVX-^ zbo%NrR=w^z>=lJ-KmQZd+sCt{$2_3^cAk+NpS1w{Fm-D@epq6z(Z&qg6`zge;Dgj1 z&42!jwh|@HqYdGAfz>Gu(8fTRpp9e+8yWX~Ier%lRq^K8f~mlqqs`~Q@y>76@Z3z_ z&U{g_6S0uRfv}(U9m>z7UEx}Gvoohs)^V%N1-F{yf5LOC?OEonU8tVf&$zGSd+5v9 z_zWD@JNh)TLH)uW#W%(!e?09a&_$bpP4Zu}!{xEJn|7LA>ZFWS9Es>kG^O0>w>$!# zXkYXu`t4^8nQgv1r~mbSHp*^ACM<9HM{=w*|e>7lYPz4fva1{mqNa> z==Ui1?e+T+?m169dcGSR4e+}+t-aoxtKa6nuYNBa{W-ry3(8G=J@-le{|W!krmbj= z=J&Pye(Cq?IY;gPSA{y4wSIaZD3;#t^Irt{f|&A=z$OZs-BGc6PRUU2_*^PWeRRg;CjhWhFx zSBq@UiQ?@>_xMPbNx)N+MREh?(Je~c6@iYCs@!gRO2pUkKE?Zvd>?WSc~dInTPb5R zrQI9Xy|1b~l;ZPU@Z?U~_`cs4jN`q|D<+Dn4^O1cWSRW9?0>q7#>^hmiHM@-u-Cf&*_=qXln~Q>BOLj*JD>-~XC-8Q|{|@MsU1IuCi!zQh09 ze3#<6p7pwZ@E^@*Q=8AMeJKURRp+j#V}jGOn|*>W=9(zuyfmaxawYJ#Fm_qtlzwqc_(jbE&NS!y4ON zvgyo!c%S5G<-pv|n4)G?<8;O)c}?S*(yVjaMA0b8e7#nW8dcf#@4$)CK5XY65$QQ+ zR5mJi;fb<8oTGZpv7gJ>zslHK{fK^O4w50EeYMi)H(}#rKfrm-l{gpkICDrahYseX zX9q5Lc;CvWUbgEdeyZ__w>#VeG!1&Fak}iM=BGBb7Aq!CG+LMY|HyhMSH?rw@JIDe=DFm! zsI#eoZ4^Ea-Szz7R_3WOw)Q#3yd(>24eeU878laT>%m5ZI)BSrXn(XG;xmWgtT`_A z@1DBAXpVv_oj=xE>Ar$?)<9#id1`@0_5C5nrE_K)`|$M@jH{k#|Dzv6zNq-Y#n6A@ zkCR`{-K5AjtaA}s$XR7<7Rn>I9NChbJn7~2EuRN&Ss&4O8z15gTA%y|=UHHNRYQ7| z{E6k#v-Y0yPR8~rV7`z>KjK`BlkkJj82nxQe;>bZ3yNm`@+Ia28~F{*Y0q_3SEMEy z+5diYj~_ff-w#$UJ;StRd^bYw!?v>TVs{uTJG+aIsy%Zua+&P5W^9!6H;O-vmPb`P zX>&>mUnjJ_y|l=5Q>MMZy`8#uZv(Okzo!;>Z?H|z_5&}E+(4|0W3H~sr}SQ8bNs*K zu21X-3FagH>^LL)q6vCsFXFD-Q5nYTFelnj%ub9pbk2Gjxv3809c$vheHFHPWQ+8I z>U?aBx6t>L3}>awq5nSm%hio;>gjB$VxBvIZ^;;bQh9!WOZI3g>ldd##X766@qDsv zgZn1Zm*(i77?zz&Kk{vQiNSrh^86jd7N|}6jMSFewDDrJ<-B|Fr)o?2agL=O|E^Vb zz0QMYD>utL+EUrW?a{_G+Pk>PqZCWgnZL~(YshQM8LJKC^3z_#O|LnYyE%vt)LEKu zXzrS?=6$SzMl)aepanyn^rJCrezu=9bmkqw(2_EC5XN68&fB~@*L?WIp1h?2i_|`_k=&v|CDC`y0htM{de(x z4}P1Y^-mnzgNNxF>rkP;`|$Zl4r=+#E^UrSbA5vMYj~ez-COT3;(fc{*LawBx@&NF z-D$j2`_lIuZ&Ao6>E|CQJ7YxI$;0~D#rtWz?-QMi8;CKr1U`MIRPf znk?O4Fc@dQw|xuV1pXv5z#&SQ?g=|Kw}ZHnlt~)!7WkVA>}?z5eQpza7x!;?+(Tlp zXP3hFZ{vN$Yyuva80ja1--Ovi9A2pZv{SCF5|({?v#er06rZzpdB|&ZF8ukO%GZfZ z0-g=s4gCPOR=N>0RdO%&lMeR;@xI-MPt(p_6DFDnc12<=YTJj`WzN%>tLkz-q7l!m z;{IFm8L4l|-vxhHogY$1`H#V~b|H8w9@fK0zW3}@eCM9xDAzV3`Q6Bq$JZv$?2BM$ zj7+|@FY+tuW_k7$|0O?5p88dK6*BV8wI_*N(zEmR%+a$#ZL6N4d&=jO;dwV}^sCIO z;3bdu-qo-0(-H5ptyNZeKhJ!fvMyycPV!0Cwi73Q;BC(Yzw3S`SnTvyOKIfl5pDnH zNFU(2_yEtn(8z`he(iQWf9U6|{l#xxXL-8TBLkfD*tJ*@>|mV^<2vgo+3bBh6CW7I zSS535?&1k5XP>d}Rt`cAJaGQHx@hf2c!kc}MSumznQz`D8xDT$cX|GLo%M-2dxVv7=@2H=h`PaJcI+4uU zswa^Foxz{VP9{BGaS)b|8F=J@aGWh2Smjm!ynDH4=VQPpZOFc$`XlSMHS5~^^z_%N zt2!#LK3a9e%T)fnd5rz@tP6NE4q7YPAen5>2U(Xv)-AJuxn5CwSH@p2elm3IP%s`^ zfJ}o8Piyt7#?ZGcUYcTNH$LpkYg#k;fFs^Q-|-f1$RhWRXW!0c9$W5)?m%m%f!o6A zE(h5Gx+NSxhq)#wH=g~~8p+|f7O8Aux7*7A-B-a7M`wW7-uoJ8{O?+?R+(U?F%$1Xjk1_cowWRM!~>& zjH@*k)l(Z+eIlHr>ZooPd)KNPZ_cj;16CfQAJtQRl^fot){Rv+L&$9W9 z(|Q2UR>ojWT-s`b25}Y>n-%sD{KJX?Yn_n>2~M2Wl(E3w+Gf^t6zzx>^>|Mrr`}xq z8tbj+$Lo2M9(_g6&JO93XrlC$*P=%rG^15^3}utAQ8l<% zgIrO^?+)fVz10Hsb(V7DxfA(>bmvH1!tTJvB^-q&i63ZwS}Qvb=67~;exDFL@q9SF zo!f-57QK~^_qFCn?7%DN?U>goJ5KXs@7ka}*E7EZ=RX}BIOCb10IkhKCq~lSaBjqI zWS;($<|f@udzWd>?aj@(y;IMddw0&Txd~=PM_+4h+PfAnQOv=KuT$3U9k3-{LLYbi zPP~M<-NM|~K&wX1t%J5-@-(++!nvISFFEA`X!rCQzK`8*+8>%seBezw`+y9h?>F*2 z()>PG-`P{ii~8T+{QnpH*BWpBL?6Boe8a4@Q}kE5MZZ`0*XE#;{r1rQ@w_|FAqJ3V zQ{i`K@a)a}K2h;t>FI_($Ewc{=(opj&mYUV-NWB+9QHk~^fNv!yg`Nqt`j^zmuLT_c=jDH?_d1c@Lc^<#QsG1JMe4I+4n2Y$-w_I zoNJi~rVPgk5w1{xiq4bkQ+28-1Xe!f_p0dJYX-pWQJSW+&M zDbTF$B6SPs&1K?Kiui+P`N5Lu$S%Y$a3I$?UOu5Tds|Khk*;d%$>9KgM3G zJ?YJ_XvarRD~7u5k7;WN{-wC06#JpMbTMzY2=8GXFMMN2H$pzn+LTr`gipXjARk|w zzp5eGTXrkqQ7R9g&B1rd@JrT8KB=YH7qmBSg|e)He1G`FtBPTb!C#l)KZv@{Hr8GPf?)r!_a}=dHPU=;q2nrnMPY4(D`FYfj8x=QFHNN&CZCrE6Sx478p- z7cbJhWdn#Zuj84ALwV^2(hJ&)@KolZdCHF`c~kq`#vG;BioZlN=%d(93xi)Ilk?JqSBGeKSiKLshkVan6=X#3mGjkJ%D$mFXUa#Px5K;> znm6UfF?ZQ1u4dkn?}V_-xA%N!uYlKsbaXF z@%*ZW_EY0`ORE}MGx1f`(SEky%v^wd&0A|D|AF9qF>9f{PWt4&Bo^7$FLO7o*0Zp{ z5MOWi{p#lYwck2lE&Bf(=)CHpN^u89KkrVqtr?EC$p{lnMn5pq8%j=sAI zFRgV`JJ8u9G@#jr+O{-+ww|V~Z?jgno#NM&gIBbuld)+`YR5%S6dlnXSUh7a!}mes z*+d(Itu`V@Xj?e9kgm1b68^T}S8#6aY>ex>v>{zd`0(~tTa3rjNygJ!C$$sON%GXu z)?pgJxI`cCX|~fvJ3oVeT|DnxN4!Ka3yR;lGDm*qAI-1M{sQ?-FJXSbao1e_XNfzS zUNrqT7tQ_o&B1Sq&jj&q`pREWz3_}8w&+`GkD^DHH|z>#ePMp2%-P-9H$g)R{Smjg zs5-E*Xco`6^&Q37%Fbc)`WB({z~p`9&4F9Fz~)4qeKPTzz?JOj^QpIpdiQe|@%@!O z#BZ?AUq@bEEL{3X&F2iZ&UgH^&SKN>lB{ z+I#<2&T-HtL9Q>h`kN08>hS5S@_aDf2L?)EUvA>>Y_1xOXAwAzFW2bY@BPK+0*^8p zlg8sFZmA*bB*&HRu74k#QT_3J-%xrk7|(Y-$Hu~UY?`IDoI6xLCFFI+rZNvz!aB+; z*ijjvKJZx~Zm6<0z^-&+{&>Yzu4rs1>eov;13x4rkc`NV**N4ZraHnxi z@t3V~Ub9>m|8WhzI0-pf@vQ5irBP@~G!JbMZxH=t-TJ_F#oK?cpnGufze6KLGmvAS z_xxGVz14f?uIV<1);wOD+eePyzHT%1?Y+VHjRVA7Tu}W&^wYI=*IDZNy|oj+{mI}I z?v-BZlluZc>9o6m^WqKFvE;6rz`nkjd!|MI1z#@lmy;gi9;dq%w~JrA%pRn*zTr7i zz@sMnl*THW^$ptWDC0|~Y&2hNIQ|V|hR>~!{cp`rd1f^~TbDTsE;Ppn3hV`Q+)#MV z%2t2wJpYTk;g32`?h&-}Bpz3D)LauDcc3vh%~P>s9o~p}L7O!%t%2sIHRvE_AW}Ip zKg~n%v7s;&e3HGql6Hh2#DE500fvMx!WH4se8C(zqWg?f{$O2vEtY1jS<^Vr6Fhs# z--%7(?)sCrEv_mi@}>07pz{InEnng}@6*o&2MW&wm-6h%FE6oYy%IMoh65i8d!h4T zUm}0!U7fD!SYB!pDN!c)K4wMjf4v+4gPbdhgQe+J7V# zcr7uF)KiRI5AWOw^Q(8>b*9Z7EPgSb=kCDb>e>g-v}2I3X4_Z&;LeA7$eSsjKDlQ% z@%#AGO*g;0sgt12c5+F5vHuLCvRyn&mS$nYy}SPSBa_VIk6dcR1CqsgM!ZXXZ(Y}I zwyt}h+4332c@1&qj5}4l&bXyHChn7exqPD$?V3Qn$G=S*-+sT@`UrJs%hI1BG==w) zjWp&7v`g-1V`YXC?|85CM^5?14Wh5W|AtOvHRb44Ing>hU+O1Hf{~8~oh5Q*mHmxL zz9-B6&Q9p8p4qX{M+bTMk!h0S^0ZGoamuj zgiGAd=nd&DqaTMy{igB^v}0y%(ZNIC(3wYlf0*;X!|AwS^D1CBi$5Yu{KxulVZ$!2 zAV=m3;wt=L{jz5p%I`fD*~2T%txo%5h(Dqkq7&<%lpS4shdJ_l5_XYfDWn5h6T!FQ zHKrk>u75{}M+xY|ZvTtHZ=?spgHA(+X^r)xj5W)D3(sIv&Zmu81!eU!U;S1du^SYReeRt1j}9yA@m4>{wR1(%R9xd^fejwlOIPw8W*H#(jOija6 zy09rJcad^pIGn9J=|BA1CvJydOj!^_Im0JffnA+EK39xJ$Bs^+kM=b5#oB20G*nLh zJj#sj;hkiJ7-uH!xwZmlgg94pb=K7In^a@e8}AKPGvo(wumN)(^&g(nJzw|+G+vEW zW0NmOV5_Al*zV_VWK6N_EaMvPlx9p0@?FG^K{B7sqn?aZe!_SLfER8Fgy|DT$eObAt;M+W`<5&}&m#}g@=cUucK_zm0#1r#Z zS7Y8CduQK5-mhD>*t}n7be(F>du$*Wb5UR5WiG0E-mK~r{Kn%h0G4NQ_aNup61ies z{igD)N48j>7GXb{ao~%+QeAN?vdf{Xz^@nBTv+4MocU%SpLOIPn_dgYgnWjqkglv` zOnmH^;M3VV_Fi*KmmSkJ7nA?~;x04g^aa7V!+iQv+TW$Fv!Iqf7C!Cdt3_bq6wX*o z%LC8ZJhm0a3oRVe#hA$}CK=l2S%SFlam0D2yk7e4Wi0tIt+8jb#CGxiD>niUS@es- zy82fxeX7y!V7tg&Q=LYxz_87QRwn3#m=I!LJtvU{{l)a|vqSM}286sal zF`~{;upv7XAZN7+N09N(%sb>`W-Ys&-nz%9i~05N$rH<F z$2*lLhU7)rwXIECW0o%(dC$rEfnq(ZjKcHv=x2(rQ9g-w;VkRJekAo=wg~B|E#%?@*5;6=4Z^u z;Q2AnWKLTUq@$8g@Co)o4}5SY1uyu#Uptk2Deb^xdj^;Tfb`Qz zDZln@tug-Nc5LMFqVBIJ_77k4<=7}6ZLYQa3qyRDO-z2L<4bKdNFKXOb1!1v>b)b^?mX@p95Z&lr6KE?`#pb;?UQwAqfOCD=mp|veVM6e!Ga9YAC?-sEk^I^6+sU4w_g^`e9J|oV ztTlz<`xEH$Vn;Mx_%Iw(7o)T*IQl4KI$xk;(7n!uLMU+tM?uYyucdS!RDhebzKf>M#DpQ$1C1Na=rT6)KzD>2R_{k0eAi~ic^Pw|%XSiA8* z^PCBMWEXz#zx@Tatiif+#-!iNxwWg-)t`J4pP^*n%Ib#lQn#7VCYMD9>Vkhe4tFNr ze0P1{>UH&f_phsam3dX=_t72Yl9_wT$lxxv7SXw3%9&rCm@Vy7 zuChddeBX8rZmPyAckZ3H23muzCt5Q}w1zd9@bQI#M;@IoL<=>9&!uj;SUc$vcu4ui zs&bE>QogkMmhJEm&c3G~9|(^7F!rw>D4*^UGtTJj!TfqUNBnkSKKA8Ht8Yh+{R{AP z88N^wm=!^1c>(&_$7@rt0qk^M2zKRO2%as$2c4~rUiMgUe*t(@Hsl09&C-~l7ku24 z+GX)#8#2PUoZ`@ylY=C@do5v_^D13ijpe_*cg_Q+n?nz5ug$r}56-&gbaOuAJpQly z1CM-CUx?mX8?f^lc-6e#3SZN_CS1QLIN@)BDdwfKdgGW+D$l%_lXCQGUWzL?iS>XO zLvOFGdaQe_^yR(RZ=Gc6-}S4Yf2$@L=^$^Q@3)a#M*Vx0eD$qs{owqEmYEZP=i^ID z;A0Do*2(r$I?~T~kb|`U?{F@yR#+R!+%B|c9yDtlbGB>1TD11ojwOFnRWWR_{GEH} ztYID4U#-I=)9RiAotSFppZz}}O?M!R6g&h2}4x)py&XHP~c z4=n5UEcmp8IGPl{;kVn|@<~;tprzP7BXY2+x;+$F_c%`oKWEL|@du_e;+;?xnu+R(tvDt8bk% zU}0w@+?9U z$!V=JOG@k=G3RducBeuYY(DMl`_ZGJ56s=#$r$_b_C0z5&ji!c82i);`^?%1UbU|- z?X=}s1NKuozH~n2SkbsAu+M^bRFmgDa87-xtytyDuc9exa{^N2hwbVPtsxgn;W1Ty@3?7<=R$nrjJP01L0DMgGD(#$e?oR`wXRtJ&v5_2B5 zkTqZEF^VskxmofS=VEQ&pRP%E_)cYMptGY_Aq!kG5!(lJR(UOyZ)Qra8IO73jz*Se z#~OIsf8W7g%U7eAT4EZg(~3(#20ih;|2AlIw@;}MXNKGrp^tCUw&X0uKs(M_@NzA2 z9%~y@=tHrW5wpB8#S8O@%I7Ehv-}3{ct&SYjMc}!xs@|89}4}e(tn@obev5XQTOrr zLoMW?>&Yc?YyUbME7*g*oVDbhX82#$58n36L;Ky#d$BXoHhe_+m`-QyPAAXOIegy1 zXA~dhT9VAEGpCYqtXx>~$KC*6a?0@gJboD;T|0*!>c9um(kFSILH@_bGZq`Zp2vCK z=0ThFoLJjqn$L-st;L(=^UmPD_U7|sSUzkgHn`7iK9`Pt)9>(gvWB8(T2rl=#-;dH z**K%Xk!0H~ZqLCj{KJd7oWicT$ zzrFx`uyQ43tUa6ciL%};U$*>#lJhhN(S7x6WgCNh=d9hEpMf5Nt|C3;H0dGl>`swt(N@d=yz z3S5mrv-MuOqwarJTdJq`*lm)!SJwkaoy_XGVnkg7z4F#HL>HCwKyWVjo{B4{Cpk4A=kn?(MO+4rp`t$fchQ9Wa(^9gtWMst-Mw~S^Ud-xM^s%-1KB_)* zFgK4ffv$m77k*#9IBgf@jA!U@5%*3H6lVW`p5jF&2Kk5ZwAP45%n zEd7r1*EHfe_Of$FBhFsRf9{p?)yeRS(P|etY$|h!c*Hiax3blDvaj({D9evxU)R6m z`Nrbmbi>zvVV}+WW8=O*+TL}-erf!o38EP;>t^wvd+wvq1HBW?0B-|N_|Nl$vRzi1 z^>}B?QBSnd;qyD_!hcdmv|)nQl6ANA%J^evu+FNhI0D;mvp%tD`(C78L-l}POXo(6 z_g3nXb}$D;q%XPg_XKk$b``&G6zx0_gF#ZoGcasvD)&bZIVf1dP<=3Rc$((5?*_7=+N zz03Ggytj0`1gwHvgV?59@7nZEb1&=NM{51U-W`Pg+Iso0-hyH8e#<+@_k+(f-#!`|{ctNfE_YVU?m{Q%LdP|?9nt-tMEA#6qH_w0Z@DdRZHV@ag5pBv zr<;1e^h@YPDi4i;&O~y3jeq)uAN>8WHP}94E*}LiTWcWyx90MpVdWngQC@O&tNa7a z@}H%A4?G*YM!gl!|Cdj{y#GX=Z~DNw&NSmWPZ1E(#pe(0q0L%6ySOLh)v-@^M!X|#E+GyET8XdJ zOE0X;ciPSW9{zJ~9Q)nE`s922uz9gQO*Uf*~`c6RaR6h07;Q#OB^MCkM z_}tHD3!hW?oXm&V@fRoXIf>7SeBQukJRjwCJf6>Se8%w^%V!Lq(R|W;l-IE(Tgdm3 zWKR{7Alr+49@*9C1emnDqF7zn2sSEw7gyjb(g3=6rc?{sDLxdaQWZS>j>G zai_Jzq6>qY4ROUG! zw(-t}?tA(z^3(TR=S|INO(I+CuU~83Kt34OmTO;05V{KWip=_-!ey8&@vR!ds$zeHWTg2Hm<0R-ga>@ku zQ*hFYt+*w}NZve}9J7SAUVnC<&E+v%j!AE)E%0Cq@M>il;xZ-62xhH31Dq*#t0m8j z2j(QxDBj~0G7V*3OQsnwI3O>y$l4)jePUw|1`avq zh)i%?8h?|=Gh_ms82c}Pc1xCcGy5q$u;r78`p_lxRO$GfeMvt0#!%0YUa^7LLhYCI zJH?%1_Ff)TP z%Ej&!Li#MYZM|>L_(3r}xbH71Bb`%vsp!7+$@72*$@(u5+y2YSsz7q9{5687m5ysx zrW_-Jyv%Kx^bc=e0KXkq^gVkIIj+HV%GI ze!q>e-N)SxN25_K*?dj&{VQd2d=D*pXpYF{JJC;u%jOT!zURQVffdoSHf&O=CwV^V zT>#G-tUrN{b^_(50lTsfpT_sL^b59}%6r$IBpof{Fd~7|JCtplRpAX6o_BD zYN3tm8cjZb!HV`@Imm778Zy*)aJU2bu{i`=acknCj4_N`3;CyfKZ;w^+NCN>jpdz` z(HWq3RZ>=mlMnKI<}Uia9=%!gow#dD-@k74=o4fMu=M@A{1<)S_3|O&9-8>8b?5t- zCQe7$53T<^)^w}#_Gf_Qi3`o6(CxPLZfgTtaE~8Iww`@5>kqCfuDnZpHxt^A%D|&= zvUjr2Sw{90I88#21%LP9R~O8Q4nJt1W6tiw^jEa{*OlEtaa2B7oq~p8&=WoGb_VOe zr)*qwwFquF7gkpgN0w!rPGyc!yt3kEfAkCV;$pYCm@--5W)yL0qbfbfr8gPbrq#|_ zw9%d5!yZhf4EbQpROs-;Zev3a$<-6Lr^m{$_{UzV?jLLVG^TbZg<2!v&PO}rWs|cx&!o&v#(_p}$ZrhF|2`C4&Yp;F3SY1bU{4EaEcX!YJM`;N9%#|$ zHtl6jGB)}@@2;fo&p4BQ;O3C7iKev|plfC5+DD&m$Yw1XCwsiLX&i@5;|}6n)3UQJ zG?OfC27c4nLHpXFaojacJk^RI2j38!S)Kr#jAFbRx5h7?u$wVm zP8snCm9zXr^Wr=5yR~l!79Xdad?(bi^&^xoBD=r4*?y~@;8=4X#e3OIRQEyZN>-Vg zUTWok)xDXzioI4pBkPK<$$p`_-=yw?tl8!__Epo+4!h>OpGEx*JXige&7@`Du5lrA zQPdmVN9-MbDo_5^JK(c-)VaS`wu$es{`a`fr=W*^R5li?rx^VBmF0WqJ%BG6U3DHj z>MZ$^zf2tPr~9q0y2Rjr`^9a*207(`QQZ|hu7cif7Sczk!~dG|7K-h5Tw?jj*`nOl z&!C?jjW4{W4YonPbr8}(+ZNRcg$p+lgow)CaxQoI1KVb(J%uGoSRxiW;F*3H~ zB4q7xMmeiLUi$`RcW{PGF|y(vlC9@^yU0Tzp9=PFudl&5?GwxAlXC(&@4TNOXM@8! z%YB~osBiI%@r+|^Q!|6u^#`jugCc!OXN4zVBlZk%0i1|7C{IhYtawH25V$h~rId?BguN+WPk9clnW~aTlZP z99NtVZE(icRxx(%v%SlKF`1?g-kl5cvVHughxW^-Wb@zfUiyjT#`g58#+#oUu=9iF z**R`Uw~Vv?qGewqAHg`_U1LZB2c6ymqkc7p_<^;Db3DrqZGBegKax$`y-=?om$|#H z_SN2(#!NJJF2tQoC~&rVSUWn;EnD|y=F!p#yI&=5z0%H|YROxyu}hw6*+E1u zY3KedG)8bD-RZ-?iF^kwSW%s59$(E&c!slL-(ye0)4e{EfQNJyr7!>z~4rImia1XcykF(e-ZI zWoZZYl@{$dfDF}>hOe=QT0fVy68^}}CSIc0qi%jnMupe@bOP)AF?fjZYkU*FM9(I@ z2EF;Srf{95i>DOc zTb=wpXixsS>YMRDkG+4H^+8!%B5*9(S+b(_L5Y8h{xE*gpRW}pSBLrQM1!pSS-5UY zs?u*X&vBHqa%ZKl@e9_g_~^QNv5GA5dC8~vN6Kp&?fFngYNs#7;K_b8nKKU3kH&Jh zr|d=2jjVr!KGk2lAI4UVa-+ShBg=_pn*7%>6!dq@TEUS$JuUheDQ=r?D)9iYe`x?qK zxVx|-Sj1Z0S6NrT&m4U(*Z<&!hW7Kd_R_{$0!J+#Hhe$DH*~k1?#OtB{r_J=fBhle zT{7a`CCzug$nNfEm#+ie7-rJ+x#o4rFUgim*dUgrV4)Cn=9eq^~9qS`c_Eo=zJbKqJdaFIq zwwa7qXH!*H<6->ODJ7oyaQSlxl*9-wLIi7X87`iGR8~bIc{(X3Ai(iYLw#sCOm1(u@vbK_C zB#WYl*7V%*mawlOzsFV|Y{r(!-7~?K<=i73aUP8NZB?De*7@FOadWMsw9v#di>s%2 z_yo(uxFHLzhcCu}XX{U6ZAKOP8hV~#{gq2b>oUskxi`NLzs$ZLS-;FV^2=~1Lz)X2i+EM#vz2d4IF~ZuGV358O~QemX2}29jt!6UDw8S^|1iiI zjc>!p#v^+%{{-zNSaWadeBuv3Y;)-;4%X^(%stJySR0S3HY>DAyQ64#K^r#RpCk8B z#x1bk*fO;~R*o-luE4C^d(&e07I(pmZ*_}r5r1~FTMW|a3vFEN0P_+(Y4`lVzkM-t zoLMV6*w2`g9s7JI>JV|3v%$|&{px*hvg?2K6l8-bZz8uWcUZTLtz8|#7cRJ0S+7|(L0R@y zWj&RJ2gl>1YcuG32$*ZZ_^sTV{ULBb=VSzL=R}-u2reV6bqw0z`Fv;YkrJQs>%*Gh zYdE|OhcydNz+1%l?nszRAXf?Im_*WZBuB6xTiFkM$J&n`?MHfkaB>y-96QRWF2?yY z_{rz}+N0l64qEnwF>-Hwpd4fqW!Kcc07p8PWc`4|mdh59U_V^;rQOJ9+Ju2hz8Xuf z+&k+QaDmw9S=eIF(7A!1-4=}Y76cyWM`Q;}REpJ6eaIU=AJ*s5hl%AMSWL{}l4^u8 z=`56Bya&BR<5PcvlTP|_E5LgZc&AUnx`jP6@96#Bwm2BgohRcf^vfI-e`I0L;T%8n z{0i{5AUzEBz;T_+k{?pGH4A%b@Rxqtp<&pK_nurawb=>$@xa7v#_DyQY8J4jYD;of z0=a9HH&9I)?Smgo{99u1nU9MsVBwoSx|c8~a96Nqakmiaed;Gx?5l@!YSN0YLo2XH z=41F4L@U0~Z{v{0c$Zb%x3Ip%5{_~f*mxbq_G^8GuZpFy>&rMM5*MkpwPVoQg1=Y; zxbq{V8^Y}bxr0MIW)B57Uk7gJS8#J?3y+!S7~n?pjCjSW=#u7{BDQPdztD%~IhuL0 zcP$z3@Eo5z_u{WRh8X#Id=CwuG}{Y05ttDgb-x#ve=KeB_rvLEKdypyl$=k@3F zM$Lyc6AZ?fQ|ePqxMW^EKSD(~%jN7)e0lnsHlWJ8$HoL~C}*|nG>{Us}`;}4gG>!`lyr)3|o`=$AnLs&s? zYn<@~=(z2RIUcPq+M2+gO=#}f80}fJpU&^o*Y}!zy|tq1 zH?*YtQA1l~rdKZ-Fc)FZLN4mxSR_7?`wuvCq_Z>23jIL`YvTgL-+Tm{myaw++4;~1<(9GIrd`>a zW3>0^lgKK_QG$yUbJ6}Qrt$s2Px2(@YZwF1h|j2ZJJ`#RVU#cYSn+S>eaQmGd@rz5 z4ENNNZjGKDBTmM~ULtE)z0>O7$OLcX433pQh~Z~$Jv<-eUR>#`qp*1_#Xfk_s4HrV zUp{nZiwE5jmCWM|lX)u0Jj~l5^JJ35$}d@zrRiGKt-82^U4etzNHR;cuTVkzrj!Ql^8zaehBBrnL>)7j^ z;TrYYXSk><8n3mCLEA^_@^6r=^M67ck9fS!aG`cso}U;d`}eR1Dkpj4wa!Pq>E%NY zT76XWV;_-S(ZiXaM{Emg8TzHjAB5bZI2WhT^hs4%JLk@$%Ztr89^uwkZU+V`Ax=pq za~aG0H2f6!6^<>SKlL$bAmrQD#^{Cc`G-Gno)(x>Y*x&~MW_ndRClNt(b)z3bP z9UFV~t^D4Le#ctbT!51G53iwMggFUL>>3J2EN)y;)7ohb6@zMNmctsRzr1(WR_F+F zkYth`$t2+W=++uO8Lpx5SoxCr3yblu5ZA!kDW=4(AMLl+PdK7@DB<|mnrqOK1A(Qa z!~Mz`tqJWNYoyztYmRv4@JzVd-Z-@X@Vx#M*eDK%jWw?e8}i#p?m2ZW>%=@JVwZNx ztj)M3Rt6Uwf0HtjMV9)|FmR#0f_&N)%0$9-(ZI8(vEF`@e=~1;{tsAChB z^8fdmZKog)^8Oy`K#R@N&xLJ$?Q^qCgmstwRW#GWxdRPiy(1~VR(Lqf=dU@5{>gsT z&ihF7eLMSl9c9$E?6$&H>5SwEtt!8%${&j!ulM$RF8#Fn7>}&4HdVgW?y)@6@0hI* z4VR4|6Y3>j=iT}@Ht{?&49_V$iLtt6l><)cBdn9FSy+|)?5*58dmr*8`k~~@bC563 zdk8)UAGh-Jx483zJ(5gh`4qfq=;zQM=;x>s@WdWU_LKgYfHx@*gj;4koAR0X*)({N zbX?afRy)ez75i`H&J@gLxRNkQ0dC~-9YK;LK4f&KlT$_i#NV4nUz15nJJU2dy zHD@hklMoFVVl4Np1HM=T(TEB3?SI=x7GuvD?_vENJTE#+f`kuT4Zv?a;o%XP_0Q@T zm~ya-#MpxtOilcc5T;zo$Beh=L@;Qlr-9S9Q{%_bzd^qEJ zCvEEYCj3vG^rL6+@UdSz*LP_H-w!+*|F7#sIO1`6Z9X!Uo{3J2#=7`0?%`P&ZxF^f z%O7XgwbJB$(yh{K_r5AW0sh(1k)nlJoza;gJH6?xo%{=YB<7~-ZHCxZ&L(F*?i06p zQ+4e0g+bcIKl>l>DR2H^yLm^hxu+HJ_zzS&q0@2r|0sCb8PtSpMLP= z{j&c`X4EtITW}N4bT5MTThHG1gO~SDfc~q05827_`sc*sbjH5EEnt3AhTWGz>@A;o_E{nU4kM0+1 zu; zbv^J44;~^NyTwn%?@}9=NKUM_Y|sucBKwi}pvD(voE?l^dt-SC*FGtgRe?4T^E!%eck+T4NqM23dz3fQNY>^s&W* zl_Ona*4j#@vSViKqZqSf=>N+YRA2U8o%i{~vB=N*&b=pJ;oae}iN+mGRv0dGeI8zM zdy^*vrvsJ6N5%yGXxSSN^I_Icx}WyBA9!ow+j_S1}| zkBm#_%X<_X;|#p|d?YaGIr%EN;4O|wwrI%|tV4LFfW5bNuO6)pdtN>wKfKxMjUTDm zvAhPHW{AlZteyg#u78p>`USAh`lP%N_N3P>feuI~(jHp-!mZk~57*k+Bgv)?>m;AU zndAVw4BGgQ#IT6B$`39bK+o=JKC>|ZJUbm+v~*WxSTn^ji}o&eB3AGDPjE)Ex@7NB z?7jRuvOVZoV%W34`X9(=tu>UqG;vfhh=Dtjk%r4I68az@v|LsriC27B~N&{scZtj?(`%KD&l7X>VQl?D5RCkKZku z)Fs~C^^3M}FAwx5_TQ`lvc(ibtS+!+bB8#0G~(utKb!w@R`JEqPan!W6CQYZ|J!~? z`|xzNFScbBek1*5JhHvbe*`ZcU_LGVro%w{p!@Q9kMfSl!O|f^UN4@x{MCNm_F`~yEB_H| z*Ym9-{8F}6XZ_N^=09rk$`m$Yt()knr~F6oOv^8Q=zS%mPolGTBZta%b}VwKU}WAz z^2%jmR@Zp)w}&2lhzaBX4S}eR8E1iIpt$8#jHUS%~b` zQJzf>Lt^RjvrT7to{gE8zpkHL015hw=dU-)=N1FL7kRVIGWu=H7is$j<2cuuw!-zM zjc1Fq#A5o~C%GKiq&V9o%h#BAdY-wjG!zhL$+-HA<1H}C>G{M)bj}N~9ZvLvt@Fuo z&m6aZ#}78rZ@CiY^Sj?03LYRH|3S_JJyaeFe#m(s#fx+hE5iM9Cz|t!6)K~@0ZYo+ zqWGz3`b*fS$Z4MHF>(EmoJvke-sM6)PyV1@_B=Y7Sl8?Tbi3E2DvJzvW1DDZ5%XDO z&nisI;w#Dw)^+~X=8k2|I)|XM3-S+j)28-ZXXEmW2_4zqBVGVc<%7%tKZ*g$a-VQp zZjrf!w%n7*)xsXmC=uUN9<1jW%Vo5GahCX^oZ`9tU}m0NGPFN~{$9$i=1g2ExR~F$ z9KSgm_mWczt}Fm+dhg#6D311}@}2k$$?;qGV$kQHS7eJOO`9*}?g-+`v6E!|+MTPq z?7A;2LJR4uv%J_0&4*I~M7UjXV%8@Jk=jGUs}T z!@;g%K=Nr>_N4`ngd7?3uGNN6|u^M%rYjl?8nN1gg2izGtHLGWv z$dSqa;xmoSSAcuY(~YRJrJ-{t(ZUOj$F2tFh`*0I+Z#Q$jXe#mjZ0fm=ZS`V7+(Oc z^YXRjj9sNS&8}^@m-bbiBDsI^)9Y?! zXFXEb$vV!d>b~}P{yO5C2P}L)vGJ*f&eA4`iE}EIx=S4=PkHJ@U#|{jBb1F%mUzy( z`#NPKl#NoBb8+<;WnXVBQOd?B8>eg=WnXU$G0L`4wwPY@2Qf|%!sxfOn= z9G!#3E&-j+j#*b<&AXNNpU%GM4F1|iZ@~|ARwJ74H!JV!V&9gTbeee4!ZI_B=d#yC zr~5(gMtH<%KgiK$wlG*<0IsJkybYL$4~~^MbDO1|>_XE9E{m4AY2~kh{%4n&&fL}X z2|p+Xjf-HXEdR48R(T4(l6x$ zw|SO*Y*E0tTX?qNde1f7%Jab53ynyo-^42Ouz!GSlY8lFzzCm)mUD*Cn_YFYd!W?| z?YoF~jma?29@-S0jrt4BR1euM16?3q+O6!O?cLzWj~i~Deu^(NM3>qN^T1PRQkiwq z7)sk4+i3q{zLTTJB<}%_d6xA1&9-}XG(_LT3uC!!q06(Oao{9$puMorY`J+yBbDP$ z5c11T@F|zQ+O$pAT5|VtVOwMK^d0s*U?i(tNt)Lj6T5(Sx$V%H0ki3X9S!lBXa#;^ z=eM~L@#b0_j1{0Al?CRBiR7cnFE%;m8OvNv%=C38K8tn!ui|JwuYz0PE@M+{W@%@adUv)<&{C+1dkLv<}3 zpx%mhqP$ZH)@FKL^&B5uYSv9vZZL=Is~-Id$5m!!B4uK#zopw`xl=$iWmU6Z$sFp_ z(h{DFHmK~%!+lYYvXR&5D@tFY526!o!|G|=suz8YdX~meMl>Tnte(cKda>82XXy=P zEDae}Ph(KMw%4d9+S5*%4*E+Bt0#J;dhyq&*V&{)u?p}6Em{g}B!B&qU#e zI#1CK&k_9)4&AZ-OcR}jPEZlO;5TPzqR2USuAF3P&z1Bm`ZUdlUgVH%pih!j9B07v zB7o@>=E!=paRKE&t<&=va(8u`IuH z&sZ9>G8QwJ={>Sap7*7;cC+F=k%X-01F@ zX$5Fv33^Z2i)qW|#3(R6`gcn&G<5dW=Kg{Ps!hosmJU*;i~5pX-SU=359L-eR*g${ zfmwP)dCAY6W$+!DRl0@fXo;Kz?S(l;x`)p2NXMQ*Ik&LApCZ^ zYs~gf?`dc*E9RaK@4D7V)>Qp0a!jeS)2vLy?OhF@;km{(p1Se!4Q9pnPdEL!g=Vwr z=a@HVciWKR(tMXZz9`#gN^NcEI?(3aV7QD-{J*}XkTMUQzurs-gL5$n=jham`j-zt53Ik>Snh$7D4MDojTlADVJr1i2xWU)ylN*E7LC_r^t4(en)S+{%4Eav${Ljzo$x$_aFr zf$FMllPsN+Y^S?~I)KweWghf+DYW&+*afb#v^=a2KcN1qVfF8zzUZCk{K&d)la{-B zKdfK%DOxAFFN+Q|vR+Fz6x|j*Z;e;=MC(N7k56AhjQ4VS!j2XbUfhSb>-ozF;6MmZ-%w-x6l92{Tb1N>T=FFFm~ z7JV13wsai&F4`^nE4fiJpqIV7E;`*qyLs9aEf=lMf-kZah+c~qOe=-wS46W#d2aFfhVB=T?x#H{ z{qpYV#(wYLA#gJ+p8>Wkj1y$*kl5&u$q;wh5dmoiq(X=OZ# zj!ZkePx{wFm$*}>2rZ-`4>T*PEqfc)U*> zOn!5t6ib*DUp>u8*4|FJYqHJu+dC+GgK_hl8sd!|@W#$8Hn7q{?um$*75%5dXSuJ3 zI(fzr%U);t(0Sba*2bob_B3WPem8qWe*QFgRTxHVpZM=1xaIEoi>kK~o6AMyVe(9E z1^1(4)4^`Re$5-KMu2|xz3bxl|Z!3rHtsRZ%c0-S>^%CSh`A?7-b}Djx6&a zWh@P)OdDkqM=A3VWh}j-`7vA&cLNKPvZZn!Uw; zUON?=(DIAWaYdu9IL(aDqN_kxdfDG-Wxkn^4?M(JL+2)k@RQj#XuzMBu zr?Y73g3eza%Ymv?bMU-f!Nt8hEPTuM=V2#_ z=dZRp+`&)pVxQ5&ijOxgzGz3|-~;5J_phs_=udc<0;VK?q|p76$RZwcfONkYa2KP@ z!E1H}2S3Q?J$(9i1=2ZV)Jgi+7!TR-eJgbid;#aXWFMPD93SJV^cxSHOJSpt+@+in zk~w4>YA+xINjJsr`dxI_3~Q629C4UdXDts| z`AIZRdTe`UnYrlAJCF;J_o0Kb*}9o6jra3RvVJU!49=X~%r;A>-p6y@Yn`gxXguT! zH?z4x+_|}o=c2!E=CQ-_%$M17ch3>K)!g45!LiXl`HN}>9LrsN1jn-An0VOeoBkh; z{ZDZ$X5|3(l09;>%9#-I{T6OX$LXzrSKycY5W<_NGv7pW(ycaS&9jd3 zjppE|z|HBG2a&bQsw?AhBc3LH(uu8iZ9DoW!{?u$YQ#(ERcj_uF0?Nn zyn0t4yje-x(gVcLB5M~`*T&myTZ(hDYf#>7<^6?ftAwt}x`=1$4l=cS@XB35>CQ<; z_`H&STkUruAFo9(i*WDUlG0N06A0f!o_X+o=J*f0@VCr0;@iU0gLm=_`e5zbJk$8q zpKQs(d(jH%MDM%fsYdDkv+Q`KBMMj5hGa5_GM(k?&Dvy#i996!&U4<0pUciHUaoe; z_m_b0wl3eLt66%)_e*JCZ&Fwbr?CJZieX1c{HNjp)boUeb z;8Jv~cYpAyhU64CxAics`73D6=${;+HL?FZLTlE*$A2eTnf&#l-Rj2$Zh?Jh{q1Hg z@^1q8R;-o$alb1KR@*YzX0yO{1=t3@b*HUtQkGBWr!&rkv9_(^9J2}=K!j(drKcIq zZ()9sDd&d*@#<(^`qs|++5|Vc#1r7b=|;9O$qllL#hK?q)=GCis(g&{k`qeJ@@pyY z@LMv(@bdRjUVOfd^0F%pFW(yH@bb!^XKi4#qcN2jzvP9);qf!ZVdH;*@k`EVr@Y3b z@>Y*&mRB3Y%RfkY$pY5KK4LuTw~cm&kLMxA(@uG7YadZw{l+P;a|grg{E#{=U*DJ5 z?@g1jTM0f&f)VtO^qtnvCz`SHOX!dpe0|?M(`Rp^kSneT4$j(*t!k->Tqe0< zj&aZReB4Kzl!b>MY@-e6$@{6(MS0n?Bl9G)%(HfFy_5g<{r|8tv}@Of%5nNTChu6c^Gh4V?5Ux%SaSu3>ExU!Qve!k1!R{i~LbxiN5u6LZ zhvT-&3)WXPaYN-dsJzNjM>x0&o>Ri^wDziQBiN16#&Eb5uBuPrb!hkdEu)1 zw0JY3ykvIa#_;wZpuEOz@n%GM$?wA9;pOE!S6Shn-f4YWxUKmLhg-O<`937vrhJm; ziDr4}2%;S-uXcu){~_gDcq$wgu5J~s7Kh_1c~HPl;m9AyRbbG=Zv-qlPCvMcozeRf zan%KPgs)lfb@~;=AaFjXvef!|#Zywq+46N?20n<6SbVJjzxl^Qe6_eio>f~8eF2=k zY#6>ePKd9<)5ADBhd%#i1it=5h_4C!!)-CeGdb{#gbrN}^?=HL~(0?C9cvDK`?kJwobZLo+ zuzJGEIDIeN6{xQ4RH}RFKVzRNplcNH5%5fWyQ4hU>Hr!~e_@G{E+QFQvimC9kR4C5 z^1&~Lvi!l%GCrQEKiT)hpC#W*4p%>ttu>cU{0lApKr(!3^(3Rap`>F-UXLT6E6!2< zN-lRxk6B$=ZOG1O^%!LSQW8C=Sw}vN_gyPrM<~0i>?-PZfQ3ql6Fj-Si{fXBByKBeyQ8 z_V8ZvyliNqb?gk)KC<@!r4QgDf%E+6hHV+j2J|+itafkavG@Peb-d zH+RJ5#=TvykkP08^ave!4|gI?#U4k$Wj2#i}ghAiFYmLr;O$Kl!;O%ev~o~P{#6k%1Ab7KT4SgDPws%Wvr}xlrj%d#`1H@NCxOQN|_&0 zCLPLIhwW~Ki00ebOt_O3GwLQtewHZ^3EWVd#>?PW;*is^q}pE zIVM_RY}nr9&r690saPV^Oyst?9-e!Gx2iNQ**9knffbQQxo4vHFf<>lz9uE&(bfl^To88Ect8crSIyUy?YUGaX4c!ZxDN)}4aU+KO zF4#_9ft@eE&^&epHobgrD9eLe(y6sSRu;gQk-X>{BY&ps-|>7Oe#RXQ-B~C(UADtW z_A!f>vh79iQ^bbm8TkiO71^u@%;q6%l9g@Nr#n7NnF{f5Z^j;4VNS^L(abzxq1SA| z-WSPiIxHis2Djg%`{0@}Y6tc9Pc-}V|z6Py{<`;5^%JUFA#Wn}ofILo_f^PI9{)AbXeU8{YI&4 zb${wc{z%=}u)0y|#;6<5Q=htjY|M%eY>hca-8g-Z3PM zzr8~L#n+#6`>=7x>HBb89&KnGueV-`X>5(VUF(G&5<$*g0Gu9Z3*+?4<_Q0BhSt>; zyPZyB|3UVW54AmyZ=F~?@!mA}GLCnvBNL5$rjn)P`;3(FPn4k*;NhK-E+hY_;_~E2 zU9EVS0;Xm{h>%x8azWfNHlk%Sy z5Bp6;Ba=RHds+ERi?qxA+|bjAhx}K81~aZJi=n?%IRs}?zKeF{Lvgn+vU1*x3^dgX zV{POw)%<2M{wp)^Yxzul{FUAd4VQaVGvIBGu_ZI;U&OCPyfALhEj`tUW)>JX`{TyY zw+{`8PHI?VCLq8t<_|G@8JePdcUY5Tu zjH8)C8nY%k@GB0KJtn~IfuBFEHW7DZRxr<*C?L2&Eu}_iOg4iHDF5c9F`}>IERm@ zKph)Dc&+6RuJ;V`S+9AF{gLfO`!xjJlz*ocM>sOJc=1n;;Kbs~*VPw8J4L_Sa<{`* z?`WjB$I{yV%RcyZBzDT$9P^T;rV|4g+FRDfWowy^9C@u-*|eW1-bXU3liyL_{OSLX zy|<5(qB`@wtKXZUg#v~+A*cn8I?>TI2}wwn#8w7FBAYZXDoNO+K~zlG*x6+FcC%(J zW`=jrW@Zpn2xT<8uJK-5!@9;bn?_Lyk}QZCM6#c%?y0*8y1SS)dEDK|Jl|h+Hw@!o z%;(u>|9PH2>Qi-2ojT__*SXI1cCK?u@yGB~@)GdbXL9h=Ts@vpbrpzvLqFY$-?SD_ zc)n{e_vOn_ETY!xS2DiOUMt?rzZI!Vx}fR_sUCQQbUb~dxS*)&yWwPf;nu%7KkzTE zQrq=9B7^D(Q-{6}_$=Ql-mnIX;_=Q$wx1rB=%9Kc)FWOQ@Z3T5NJmvYk<--!?Sxnh zj6;v2w`i7_=UmNaBY#aVc-b1O`KNlouY61LKMTh(>;&OCR>yOE2%clWB%L(i#e-lH zoPsHKI+(z7Vo=}W)FZt$;LU^Tkxs071n02hMc3k=ba0=i?uB+O<|TqZM*KYN*zU6I2H!APHwNZ5 z+S6LJRphFthn~a2%u7a+lH9Z_?M0L;Q(&y8SY7EF;`}5#4@Et29l~c@1&_3m**M|!0IENfOunvcv39QH% z)x%xzYwa)4;gJnm8&f+Y3rk(C<*mU7FL@)MgYXfw6&>mBxwqDa>TSrMp1;FhxB0G6 zlSPVK(ORA4(YoSlcN$|9#LYMdtIu^28_K$ydc0^)z75yj<9 zd~?it9efF2vN^Q0f)3i!g!gVqlY9z4kx z)-T@fudmB2t?i{Ucbt@2S>h#2$Suna{9Fe7QgTH){MKaL?QJ4f65c6(+(Vq0__Jab zC9A~4Rxu`fx{x)Lku9Kqaj74YSwUTV7lsG+s4m4_Qf_PDe?boA)K)$265Ow>*A=Gj zNKy48$MTF*z9zQ>Q-r#B%aj*RVng6bkS7^(I(Vdm zH{gkaqrgu>U6Kid;YpI0$PIxO#PCW_Q4rJ7jdV=`O)71m6qtJ1qZwZY*b0mrEk}q9;uEBC^*9#}x3C}^1UZa8s@ToJahnTDwR6c8v#Hok z$tlHd&L)2vb*HIY@@l$8Y@ki7W*)wt!_VU&8>x4=xJ|{R%!ZEy@(Oz*#9le^@t$Zb zh_RN;65lQ?I3L|ybA;GUc!>Co&N`CcQ*%u=yX4JM%J;ypr2mAFUr*0FTrG6J-wkD$ zBRP0Cu?$+{3}W0fYs!HP$XxGA4r%XW4xB6QP;yFomt>ygPbkYgtH=3ER>|Ki`4q?; z^^G$6rG_f!J;+?il@8v^_EFr1WRYZvWRt#;k5@8Ea!9hQgZ#qX#BXpHY@y;w#s&hoLEeT|Rrs#f-ywQk1XRdH9`q9$C1~El|Jq7-$_pbxG$?9DNWw3Xd5f zS@!7r-9SE}uhwMQbJYSeG|kv2@=M%RdE(CScRh>TkW7)xP|VuM0=hnZ?Adg_E4id^ zwP!)HP%=pV=$iaOmx&Qu%2AYtf~RUt{Q5vviRZ}{P>iW$k7!0ROM5mHx2x|n z!a=UKM^`b54O=gfm!BV6qy8Y~^k()=qc3#>XDj7IAA1JLt=23yVFr2~6yrZ*i0o>9 z{v>ZWCjSF5DqHYHgjl2LV{YTiDj&;lC`Uzy_#|W#8Su)GGshQikLT9ZeBanY@;McA zPkWLK~Ftna0D5Ds9$qDi65yO=EN6MIzUB*?O)}0k| znw`Ae@5+fU;sY*ittKp|(i6GJjdRyN@OTcMXW_4yL>cz^CGxEOS`EL7?aEIw+3YS) z%&`uW$Ip`$4`aQI?~`ftZ|24E%zpM@0tX{7d20ppwrAX=K-ZaQ*5;;o zbVTzPKCb`8M2yZrcah$rahI&uT1cxUy$U%9&9-OJgK{V5a$rBFoyxB=wK<%&oyzg- zeyjApHhJlTixzxHB_*5)H|C-<_}M2x0v#AaLTcCz(3M+-ag z4&pAaT%r1Eajcr#vJaEY$==Ovf!|YgH|o-wvv|O2dtG3&&EnfyUC2x9*3Hx>eL?lK zXVn(5F|=9x{^`Ib?cLHA$jaka0T=a!9rmmMv+7iz@1~Bx-llHtjZs}%b5dQxQ-ja+ zV$UAGe!nLljOx+%(g9STU=nP7)Fr&Af2yZe$5-9nO~elHo$4A`$Ks+;P6Em#(3oli*Rv++WbQ8|#b$kE%LiRq^{0DLI^&YwNWY#jp;Jm!H1pB%f(--R>VjKS(}|U0~I8cGeHdA#B;6_e~1U z_K-Z1pEjCyydwo-ThSqc_*G<;0p0>V7Wo-A;6wOn<)1Z>qlx@=Zl4hczB$<9%rRiL zkx#|!Q=V+#i1-%YZB1}`5&BzC{5&^UGov2Kl$eooZERu1#i@Lh^3of6>gBgmKG0c) zl;1)5z`sg)=@5g{zp26@aE-vtWQeJ-4!R6Ji;0*R=55m#l*f_<-DRyK22l25( zD~g4SaQ3F+;(G6IbK~5bkRQE&eL+BLl8=f*U0dY*7S=|aGORh5IClWKE4h^_+4yyA z*MtrxTPyH2p}%CHl@fXibt%3+&{s;t-e=esL!8g?5PMu$_pQZ{=IVTz__59qHs@M5g8trd-TtcL&!V&$%-<3^Hhe(y z_V|qFy@<0n&<_lFb+E2o;yj>|*1KM*DhBWPF4|+>H@=C%x5LD%MV#lV`~kJ5>l*Y+ zFc8=r@zq#7}9N{?VFR||GujFK; zbdZ=_+npKPU)B1vVvyu>Ew{QV z@rA*$u8Mn?U+aG|mUb5WLi)LM1L@G(PjTXmEA~!^Z}i@90sAUzd_w-8rV_jYy}7Y( zt`YODd2I#!qPyJ6oRu#sh;^q9{hyG3fOy9*BOXqB=?r+r^0}Oyj{T5ZQZ`D=Ve}X2 zDyf}XH(BjQ@JG-79z1|KE4{tRUhS&9TKLJZdvan<^{*q_d+U$oC+2 zojoT}`YT&q@$aqF8L_dEX0mUGxvX#F^>4+W1ZPV8X%R89@F@AIg18y+Bm1S={C%d@ zroI!eQo9X4rSIhrlx@F$gT#Odq2DDf%rCc$-l0s9wo`1DJ5 zz=s3g1&TT@XBZ7z=0)Ggyy%DQt9)!!U%bC21K1;wxxp=FO4yaWr;K60=tqVr^9W@klnGNN zM49L?Wp+>|N|^{{um|zyyuGbQDHEeilrj;@#D^*K7-iy=iBTp>nZz(<9;Zx#GI7ep zD3ctf%oCJJQYJx}IAul*Q|2Ej)7bYKX8h!X*ozM$X&~P-(7;ezW=3nU$4$Ol*^H48 zJl(3vZJpVqc^bBm$JnW{Y;C`a=4gwBT-UrsS8YZ1;U_xbm$(qV9mMex9~ZZY`d&Iti z+u+m-MI;yczE@j|?Tts><2Pc{6l#0; z!^G(lO9L(Oz5Q}kXQIrUDVqdXp`}KwN;m`0sM{sWhVYF1k52N8M*RP*j#}KV;&nL> zqOAQHN$7IS-?Ep^g7;_8BW!#i$V%A`VPtC~CQ&-IY>r}v@7Q!5SB3{_(}6~kPZ0fN<1%`<2BuTt((C92-YHHCuvWMvky7A(tTPn zIm}J*t9Wj0P44AN`0wO{zo9IsbERZekwipy$xiZd>e^*T2wLoAiv?NuGSPS&A0tU446t2(syp>nZ&ZGV2# zhq~MZam3Qg6xXYFPpJ;#h#PQ7pHUsLEWS_b(78t{7tiaAP2eEjS3Y8`g(zRKQsP^U z@3r2q@Aa+Xz7*H2aw+1^g72>-mVh!DY`5V2O!S^G>t@f~OFi%^`9_=Ig(?%&!`xS0 zZT0p};$xXxiw_20@X!SCJ^NH`Tr@_hI=>X3lRg!UANGpck`9s}cDNQd%z3c*f}j2n zaf9G@Zwc5-Cw(7(29FuMe|Ops>pbRn#1H>snD}2Kv%&xQyNn}xq4UjE=T-+#EyUw!7_^ccLPiGG~XW|1dI6c*Wakg#L53& zyHEH{?LPL`wflYb{3pmCD*qZX@(KP=HB^2yXucsM-QS+ROk-aB{2j_P=Ecv3DKp%> z*!3>UeT)C74TXKU`quu(yDL}t&v#eu_WwFrZaBU_l7E~Hl`V1dg0Vl1j64o67>-}Q z$rujT#`loZL)&o3d#5(G@P4>9dVV#08!LbP_BNK2_fBp6Iq!#S;~UWAaQ(Pp7+fv> z9k}`e?}uw+KJ#I?Hp;``>KDHQS1+ChSO0VxTvdj_)j$6ZT)lJ}TLA6PyKuN@ASY2?2fSS~ru_ic3^9>Bu6t^3|nTgTt~DE=FBgTI@! zVncS3R=jVCwBkyiAg%p|kCE0MgB_$5?@}afk$#Z0_P*Rtx{dUGq}xe5q|>CglGgr_ zEu^QB?jt>&bb+*DRM(U4AibLOEYjViXOp%`+aK9ZTq|+Aq;DpDGw&kl+uenv^Q0H> zZW(z?NG~OwBfW(5GSWHHOGz&z{Y}yfNasniOEYGMl_vywCmV_Mnd0_n^iA2pS*?SWhpoPx>~t~}b|DPn?PdY_f zv}2OakZvX|nrR_Di}Xa&q8E#FmUJs=(MlWX1*F?ai%!y{bEKz|p2oB2WGU(Cq(vVY z^75oRNQ*XRsXTFYvq|4fI&Ae4uXVdCy10dO(gG*ESDt9Y9#lrO(M?+KL>H^;&!UO- z^=HvTq5dpd=&L`A4z|>v0~)A5iw>OnvuNNxp0mI>|1LXdM|5yMc?%w>r9}r1*2{|q ziuGsFz>fN}=-{#XvuNRo`m^YvRDTvt?5aPDE_TJhe+&5z`NGpy^6ux|edOOqe(qbO$y@Rj+h6(x#{4sk_a57Skn+M)k#ajIU!<&X zvV*dZ@$L!oOXNR6zVJ{Ye;4_?$v;f~Zt{hPz2v*(?<2j>B%Um}@yHA09VG8Cd4pq3 zmi%g9;0dmle;*jw@y5VF=GOxQ{oH4hzK`eMa&O^h!#4Mu$?xX*e(o>)+rYry`n7}m zZ@Cs88yHA)-Tb{vi~{#%gSzKGfhLNV->HooV)G)SkKgPB9P0Ii0 zz`$WHi|20c$nt?L{}=B`_i=3{y^H&6z_jeY1_q9B@8@#4OkgW;P33x!w4SkF2ORF* z+;?-`$20cOK=UZWc#t3KwFArSn8EJ>fjw>*Z=PWU|Af>2X`SC2<{zEk;2+ZZSLcVg zw>j{LlKesVkk~)3_0mvwA!}cU{g6Go9CNOB_uP6R*QfBE%=IQ4#-VV2p`T#Q@+S|y zpX)PjlQEBTSd2rV;^APg$KZVaqkJfepFi;b=fCQ%#MaaPXsu^HvxtAr8drM>$MFh= z@ql7-2XZe~jO=w|pZ>BlW*{3Y8`<5&EFbn`?13A|9}Sf>dwuO$j~eqU z`1##^`0vy7QGNSpy>B6WY2oZl%6^47Y}<{NI8PzOUH!~t=_mWT>}>YuX8{3 zb@}Ud`#N_-Yh@?lnCC&Jhhn8=?%tc)xvpSrSbH`WdeF=s1NtyZKZi%HbFX}uI@klK zu}*5N!ND{1{~!7Hrsy|re1X^s=brnAq`yKs1+9&Q=B|L&jNESjFnQW1XOv!IO_p;w ziz`ml|9^O={~DOgm8rloc&>Z|dP>ulV%9=7epu*fYv>|kN*A#n!WyHEz6j1z8P)=` zoZVwz=kC6>jjJ|q&ZV!ZJZo31g%&XSquokhOZN>hb{)e+8hr@U*-omiIj zf7(vuZ)882V%9nP0lIEtk4cm5czpp)t#${pr_xl4b9Pc0!LpRObFgCAOULfM9eT5q z<&<3t*2bdH)P8U|js9xhOjSQK^?o|GyEW7n%oWWW!=$f8#a!;M_3@PPtnr3a?qD^p zKAzwiHQpfjQ>@1gmTc`^lv2n8wqb%(3mrC>)*~=|1@WEr}BoB zQ|q7R%=7fml%KmkS2Ttj`48jr4CBar3D?txy$BlI;5X)yVpfwG=974aNo;H8;IRGH zd@@e-?^J$qp2oefpLml~`Q&2fUIR5xhcPb|E+0V?ix>Vhy1tq zVaDO{X<6ao8saRSdqT{=0jDOX6vxt#RRhk?D@Oi?v8n7c)n{*Y#%SyY@(K8F3A#B{ zjWK_AJ~WA|CNoXJY_j)~_yNJu1RMbjK`aD&7Vgm;UqHNL0EN`j%iU6Lx(p9nGl);+^+|a_~*(rHYZeeysT9GdI!ST)aHs)c9qJ|AB~S z24h+0o2eXUuAO!)U#tp_lVhp#)t1)B@*3$nJ8uEjU@Yxn#uC_4CUFa=%-?yQ_+&8W z*^?H?n4I{!&MadrbL^d$UUgzDukoPSJvz4`WPIKW6`Xs5akcB?N*gD~bx$y^CUf*I z#S$@b<_-Se3kbxcz1{x4V`B+6P}*RJ_~;6 zBmc%(kzG^ILr&S`Np|FxxX*m~d@jxFnvS5lqQdu=nL9!L7d&*=J(@eqi8cH5M(Qop z_?i0g(}97elt~j4NzaFde*ROI{yNdOc9%$G%mQUz{Idnnk7$;=&TH2p#S)=^r)cM8$~S|5{ku1oRX>K>Gc}u~p~r4! z&Sf-KMz#W9XcA3m>_X_Pq5MkPyRIC{T~S_@x0&O}NXB$|s3t4J$it9@o)6riY=#)G zWrOJUi{4_vZodTn7oVb6EF{07=bMaqlyM!Z%WK>fzbYP+a`+Fo{*fg4D8A}opEJHq zjIU^h@vO;6Td;p#a`T?Bt?@lo=QQl6{fM1K*F8DDNekE*-zOiM>^?bUd;{DQ>ugvr z1#pO#n(W0v9Da?zYoFkaK@70?yxQh0hMnIA_Aqb`SVP-?hPr;vIAe3%4n5U%@Rk5i zF9!bw5&X)rDbFH z{u8uaNI zqwz3uhy0bfb#*&u&%3g>f_*~RTkz;Tvd4$Bw;J%i2v0r1M~1N}aY5AhNFl>s#JBU2 zS9#x{Inm5eeYnE=cd{+9_4W+5C$ayIDsD1`PL|3$_vl}fmh!+wL$-fg=>Tuncq1so zIiKjT>L<1zb9N-xZ04=b&{W<@Tk{$J$9%imEbu?Ii+^cY8=0STu{({X(JnDLuNO!= z6;p8`pCU#j<9PDNw`FVR-x>THSGu##P{sW+L3=@%@3QqC=!?G}yP5yo8_Zqo*_er5 zVmaO)ZF!5epZUbDuW@k?O*ppdM@Os@G1Qdb`jJU)t0Nwt{58KMUN zH8(jE3LR2){l#Y0b(N<*VvV{~-?7hK{L3w~w)qqg4Cpg#p8qPhA1^?gP z3LO!%YvQ-wNgS`mSp!b5zq(NH$AyeTBY;)?pY<#HZ)eNzqi;s~kU!_g?Aao=Xr#d$ zv}Tq$Ptmv18~o1$hn3#uUz(1TN3b^x9j2+xfJXqcVdJyrS#=(?oXTe@i=E*m(tXwW z>}A(Et46xlkD%Kh4H*-z(Yda-|LBN&0e*honZzJ#4d=6e_13GeGgg=44+^C}Q$CM& zBCp?GSjwDvh3iqS>$sM1UCXtaYY|tD>&skU;`$>lc;ZoH;ZbzYqo3!(<~)i`arA1g ztGLE+!4r?p<-(>o%D5i=9M@;L&^?dN=0X;pNYCQ=Q(RYY&E)Ffn!zQwu-hwt3qF?` z8_Mm>^T^-FUX8HV=`nCNn)}2lI!n#*+My}o+j#ws0N+0Y-&c(Jg+Fu3FZ_e0JN?7% zoqpO1l@mq;oj$}EW-BqnxpyS=H_~+Oh5xuA_iJv)!@uySmsnG9@f#a!kWF{`2H!3P z|Cdj8yfotzhQ4Qfkg+Y|Pd3+}+q2)B@>31=cZ9Inct6eB7E4*3;c3=}SQtFF1o`tS z(~H|;@#4Dh^x}q??7eC3Hh)xUt9L)}svixyiP8_zz51mw-+#wjueMS4AbmE{xB1^< z9M1$de+F)%={xEx>@b`iblYGOt(?4k5=|fLzFU3BHyH4dhE$!~7 z&w)OPXAZ$%p{KRIPfo(F1%AVJ&!=C|M3VsyqV6kx%v@al68c`q7*m-!<`?5T#{43t zeuUBgwEmCJu7aC)g3i`TslU|mFQgv=PSJu{1diOD{%B)drQ@Do_7cI98Jue&|au*1h4dt3C-|llji3Y)dQa%%)QrZ?iXsx%|cN zz4hvGc=T|15l)1gu)D9SdPbR(+`;%!`|@GzX6;C@H~7O9)T#Q9P;YU_yGwajCVv_8 zAj%kK=xaMPIgPaRvC@xA-nY;Vp!>kq%|NRo(~I4ZH3K@lvfP_WxzgRH!{a)f4StVd zxKEw)lsC$9yivs7Pp7>2SHyDenVrSooc@}dEx=oItPf^btH~qdZKskcpzk^8j~V%@ zq0bz1J}>>sI69TK)6^d|I6K>14ZXwX&6V7d17?>Sqpg8WZ@nto_&H};jzHGH4+EHI zG0!@j+PU8cON-01v)lYEZOzZIo|WNjsXQ`@`X$Ro+o5s`bje&B2P_eTu{Y9OC1gNx zgRj2Jw=O?t%0<^9znOcBv%&ua@$1u#8qSajdqU_6;se3@qw7?z9K9a>NBHG$l&7aR`2UBrWNpg4tgJQf!=%;D zbn*_;mg+J27M>KqY|!47mo8%7)Y?kXX3!30f_6$;)90eC18NI+)K|ejGM#gu{J@i5 z$edB`ur>fE|EIIAERQNVUJqlhaoz}B3!YKb-@$hWne&Qa5Ihn7I~g&Yd$NwcUF6Qs zGVTS&J;!=+rgkowVLO#fhO=9;^r-;8o!a<^^YVWpH-IB;F;3JyqD}+)zq)83WOhOa zx4BKg@t1WPh`}GEZ?G)&c-CR;)3q}yPZ?Wy_k7x0P=E$u_vm^qcH>26>0G)wx*OPxv^X~~#&?xOX)^fq)MBQr19i@;gzUML3*TF5+bHnj*X z+s*;`=M)<-62C0-u`*&KXEWK9Gwu-Q{NA+Gl)k+7m^>qU@Wz^ z*Tz_$3%s}P#aDg5QyIWl*Hxrn&S%P+tD>_tdFadde1&=ZBE02LuvP|MlGv5;%(d<# z+4+Y4QAfrm~%LHHiLP8A}}lIKz3e<5%yo+Vn^*q=4fPtuwbMDM59-$i-%6wg`SX?_HJ z%^Jge1()D0L!Gl}+suyfQ_dLTJ%A%KCZLHpI)TNrJE()U--4Dzt7@ma@jeGFlm1Qpo$CKK@6a8A zulDZW>hDzVpYcxoD1b3fncP-%7x~_L0-4)iFPot3S1Bt!q1mYEvcDMA{u16z1P?m% zLG`}GJJFBegI{_Jc^~Cjdy)12XZ3Fd-&MS`fkAOp>YvuHn(Z-uR`i@lj^^MA1^8D6 z_~4%-v(!`EjNcjAitkP~%H#F=n!)d7)TcfemgXsavDn*Gf3N?Re~kC)hf%7%m*4Y& z`g@%XHHG);i(u9F_txJDuNU&JIkTBqo%hsXr4H(fG9DAN#G_C)W!3u4xuWP-j&~N{ z2v*@ub=*#wWT{q0b7DO21+Q?Y_p1iMB03SQf<^Ca-Zk*b8bW|u(TPo)6K!D1pqrzg zB=Ilp7#Mg!_-qUMBDyBdZqWA{7tx8{>pS6Q>7cenC&9a{VBh91s=rgYBRmK55EzvH zLj9d!^cwG|Q{T<2zY||S#ItyeV%m&cZH}o-JFtCvP#ybtmYu2i2I)M_mi*oe8PhI& zGF^Tv`N>=tJf#cUXMI`!g=;O<<|MqUDGbb#bCUhiwRFy2KtDO`{(O&b6nlLWo~8Qd zQ!Y!n6tJ5h96BnGE|evpU% zW6K-ayWpdrC+=YtdIUbZ3_LuCOh~itYmQ?q@2;LP2rqp+>pYw|z9-2p&gp|cbraG( z@PKrYKn}6jRBJl&S+cG@VWIr`k{ObF@VRDqZwfrBpCRf{+|@K-!bfq)aL}V1^fCG= zxSH}k)uw!Rb+q0ASIFi}pkk*xGR;|jz!x_*RsG(EEOfk2@GKbQk3+Vh$9CiMUm3tB zdKAq^1s~&p9U06A$%^JWjBf&?WLHFE4t!zifHzb|THJwktZ-pmUAaK;D8I;_;1XpW z$9vf710QoM=%I+XFH};xrzulleFA=<_dl@j^nPG$@>Yizdru~8_Xoy`K;}h^IUatM z2`bZM&=%jF_@=O#@3vy2+2u8SNBiEBt5&-|u-6CQvaYa4`(owam))mWj8~}ZO>jOn zO}s32=YU~gZ{F@Mryq}4z20(cgkPEbOA|YFM$2VxArx_Ew064Tq~m3{&K~%HH+76< zbm;r@u-(Rj6Ta`Xy4+7<1A#wxN89t>j)@1fK3op9b(S}VBkt!*PGzeRa_^RAvddL{Z&wOT0k2p(>|GiuRc;+ss*E;Dl~n0k*NG7ulnS|>AMJ8?CTe|{N*|)w z%F&WDE?#mXA#+UmSc3g?;N{G~=diGX-PV+%jaxa7AO(*Toin#SZsZR5{42a1%Js80 zbO0H=yc|!>VZQD1!=%I9Biv)zUGPBuHAFhfv+V6-iP}F~h*7CrBD%`5FOPa-w&UIE zxRvvuuc+C@yqoLc4-MK1<*74s0KfMEKQVQs7oFDSg)c)VTHoa@oz~_KOna)bv>V?= zcN;#!W_UMnr{OEqQKpVijxox=)Gyu~%U7y8dsXWKVRKbERCvk{IrBLHfi!|8w8Yf2thK3x=0`8(9)l`_M)_HNWyOZEBzIJ!a91mcVDp z83V0N(3m_h7)K^J%GPic5{|}z+l5`;b<@rZaCF^#a5SGY-;D8IJiT5#tw}f{=Ig>O z^d~|;_|Hf=ltHg1U-G&~_{$uqhBB{lab8MetTU|jkPdU#xh@gzI=jWrbd;k!>x>rR zPw5!xUo!T$(ngzA@K>h`e&)%758p3GtS2i+kTLD}iR14VuUJ??CX^%Q&dP=lbe4@0 zevMLB^)<80=e$rq%-GtK3Vs{>DFP1AIVw{v+doDfq>sYif^>+x@(cqy;XBRShA%o< z_eHBN&iXFPKX{5i8s2G^di`d6r>ipsUpltz=IJ?PQo6g`!87zwS%58c26x4M%g5)I zy8S1}>(6!j9mtT`$OGw^sz31e;twf=jS2l`pYK|I*rIbP__Yot)6e@OO3yQP&--Eb zc|WzQ%Zq=^scc|gw=Y4TTC&oM_21@2@H5AkG6#=9XT~j+^LaM-CX|2PzhpHsBE5d> zxUkV=!Pl*vbFcmrBOb4R6S=_kN&1T~%(Z|^e({tg*|E@@#+;6fL?$U#5WF?PpVL`% zZTj@vYhXRH@+44U>b7%5sUMO!H@g^JKU?h*Qh&Xe93za z9if4B0_CNDjf z`SL)>SZk!9iK0`P{}Mi+!IN&!o6t+vbAU(@}_0*AA#pE{uS}x zCffKx$hdGKcn#-}i^#@Dt>-=czfy5S(rxBD=w}wN7i(v=OQ&wh_W6&PFMAW6KHsv1 zpE=$Z>XH8^liTLs11y`)zQp~jlH+Yjo$ub2x&S@nHaBLhCtgVB4(fk`E8R?T!;xO* zZ*6^lp4ST=LxltVIy)s!zqD?C_l=zWS?u$*Hr8~<%l;_NWmh~$ve4%@J^B)9&K@uR zggAfFcf5ozi1+n(srtKPq@|C=;T@w?hO!CDjpln(?}GMzQdPSqisQ)Q_SN}%+ zPu;=#T)qE#7puQ(v>#LZloJk`2K7J5+4FB}b5P&UsJGMTTO-}*yV7cF@Oz~P_q{~h zK^zYKRsZ$BMU7jd|2q3f>51U~(Zb8Dg~Jat&PC=G{5qUli48i(i^8X(?rml1A_jCC zMc#zbAH%W((Vc&77#AvzK;s=LI3dQo>AP0Z<9W;o=0a3sZH)Csq@9ptVGH%M7E&QS zW+C!QW%WEpWvORG;d$?B@}ras8}IX2<7g7SMhji6&0X!`SN*t|W-SVyA4W5uTex{dNKReu-bo&IB~cMaYpx{a$0^(H8n zD7@^O)MEhC$ih=qGmY&Xbu=VK$&PQnop9HgW5w!`&w z0~Wn+z!K0fW#g39IXQx}0gK=osk{R90guk<6ihnb3V2T7WGFnwAiNku@Ddw@m)H=z zh@KmGX&Qu=BsdY>sD1wTQ`<|H)>%5>;fEJ79?X>@e2w=;aSb?P|0;OmY+x>M!~00F zHn$oy9wj}P#$)yLU>b+MW6bYZy!cWK`Zl2F81x-WkcI|=^kDkFLbkDBOlJa{LjUQN z-5xjjS2;AVGtJ`d*t5unc}z28oEo^aM01Zt6E2U8NalAS|0mu zqv%kQi_p)59_?{^2< zo~+#1#~ELJ?{`(N;*4IQo@My|HLi^{I)n4(7Jdi)g+Bchm`5@m8q?rx;`%c>{)97l zj+4KM=TY^1bo>dU>(96I9RFBXS-K}SX)t~!<98!<9&0|wknWzaYC3ij{jo5~rk$Fe zEgf6F5$Vhm(V0yXnF$T*-wVwa{-10wW#?3+LmNg-r;z_ddbn(=6M8sva{)TELH|-_ zWBnfc09_>%G9H&tMf&$N#x7xYmUpu58@4uj(@7u0VG%W*ipBf5g*^k!#7kW0H`0Y? z?L;@9Lfz2(v`O9mwQc7HIKFl&IG%d0%QvBMA7MRzPPacbgsz!$LeMEX_4VbbwXuKk z?#b@J?!A@8=y2_=lid%dyS%aI<5$3Dn;z85df}pOKSSN^Zm&OWjQa7V3Nr6dORf)} zC3;e+&u_!FFuzjjO3A1+4LUh2YTLm-g&`#nd~w{ zb~3tc$CN&Q`tm+M^Yxl;JMA9y1M08}*Ah>1SO22NCbdrOZsy}hO<=|5InZBGpe7)PBb`R@7=9A#;|NVBt|3mGB z{)gI0nLn%kKfzlY<8uMy6K8yqU2D9=H<0DSjE`YH^WWBv>Tk3)lnxB@>8ine417Px znYJ|RO7Jmsr9JKLM)H}L@L}0VS}(&MKZWKy;M!xRkl0z0BGN8~*y%YT9P~8JMOr&w4^}S3bhfn02m^alFMp z<~&XKl;L0-r|+z4zUmxT`9+&7e0=mlwrC`@u^JB9V-xVQKcR0;TEj#i&EiAFhMdq? zbDYIoGK{l=$)9t&Kdoqg5tq`vBpuD^e~x^U>RWgx-{l?e&AD6sW?+4x6Q4_ZvAZ*gyRbz(ZT}oQM@+5K*f1M|vCBC`G<*!toim7AUW#Ic9 zT+ft2->EKr$2w^6UG}0WM%3!@H9qTs+u*r__2>rN1~E**SykXaQlt+(TYY?NhYHJS zFNd#!7`b>JSm2*=)_t|EHJUh8cyHfM#gNZo!O_n~Iw?^3v5szlDLVfH4-)>Bmk=gNFd8$duibQ9YaakqUM|b^J&>&@a&$yk_P+ zzWqI#ccP01jGqKP$*E(@e{>{!j%DmR8~-@tIuv9wc|Vc< z5m!)A+`eEqQ75pRu3qzZ)SKe{RC5z+$<2O1> z*^-6~Dtmj(PH5D3$*N7)!Q&gJyhPAsU;vV*drlL=y zgX`TlWV=CoDj%trSGjO>ZeED_#q=H24@_l+SpoddToi zqrNt1ZvCc8Fz+)1;hEntRFN1ODV%lufqqWno zQcnb0(;8;fe5qf1Xt9;}_G;+oYTszaJ|gZiGQHCqs=IO?t2Y(=^WQRfGBSp-qMu#} zJdLTCfegX_JJzCq#E(p95gfppOh;dQ?;v=e(l@}@fHy=v&A`oh^uQkle(03)%!Nvn zXZ0sc`9#`ziuBVOOP6zE)UU=EeYlRhzXo@#sp4bC?+tD`z_(~X<60c@OGhySM&WYpURAJ>@ONmhm-g z?gj1!vXphA1H9|zO7cExtgDLWHs0+efBU+(UcH68WJ3lS5;fKa@?0^$8pAst;vaDt z#oz(X< z#XUbr-XC#A!B-RO0SCj~zH|w--PgC>pGUlw;yQHh(3Stn-ZH-V%0p|)e|-Cz@>yRa zO?_HFQ(WOb^wV~ib3hmm&daVE_KIpKx1uWib^UlvS$O;IzpW`BMh|ltOZMqkQx5A< z?ux3noqtQ&z*b~lm7x6`FosvS!j$#+rX_G3V8{Cy2FeHa4Bm1(q=04}NI7{~-UGRT;^uvo2=6 z&b;0IlTUULi-4UVy|#dV9$K58N6wl2ODd17P9qO3bR`F!h(4sUyE{EkJQR57r;apZELh|8;avELQQ88pSy&;a zVuF=!!KU8k-;HiE@mzEQY}m+@+uYgM*)=_7g&VRiFHgg^M$f7QF?%K8WvqjJx9-Vt zX{H}7Tobu0uBG%rvR&{?=Lql)eiGokYXj@I^eGLDP4FM-LI=@<()xqg`GwF5 ze0y>PISBw*BCC9 z&D744G7Ri2=vUtaGAA`}oN2B&l0-jDnJawLS|NW%Q)pyOCLcui94uG12RL^t#D*S~ zKNG%DnU!9J{F_sOpNz|nTQz=uWYu`ZS4vm>@Y(bUJW0k!EoWTBaw5`AUbj}k@1QsO zGrMks7SLn+xOPvpj3wOf=X!zbAlDA^)^j=UqYT$A^{bovM6OxqPB9Mt_8enAv9?G4 z>m1|F9Tyw(xz@K>#%pI9SmXC$cy zI$o8>U&XWN`0tIiTHo9g>}?u-@h|7kKnE^`%j-81FM6lrWwO}y&a(2_dn6C|4|sk> zIhJ$oN#vY|pIOAeZm2I}uY`ABO$@B_@D+Ez3Hp_A`wcljnX z@kw}P-bU}P`}s19q5adW=7HFs7NAokw3HFJL&#n4;r)y<_J%3I4WBAhL zV@=ukSxfS>qSu+dnmdOq^~u=SpIcxBeab~0@4Tpm>wC3lKDj=CWA$Z>fzerh@Uz|E zFI!o^Q*#*@GQa>FN#MBuHpyi97IUmgZ|uMBe&R~*-&0Xs$%Vv~eE8Gd-gtD-vy98j z-Im5-e&xZ>b<#KW3wcXj>Q|#aBjesXfpvNL71(dSM}Cwz-^CX#r+@f)&oKiI^B@L_EXF7i!~f-~+Zc_b)zz&-%#E0-yCIt@x}N zqp{C{unBur{V|)?cw^WrSDOp;$JyNfmB-+9_}RtlE`ry6e1z>ysN>iI7wN^E zEit4&d#QJJ5&uzs9kKH4BXNltVh*&Yx6+sIFsAG!rM)(Ms}_E!+FTa?Scg~u{@_oG zTbawkAN*--<+flD=l_ANE_*E-BfA0JKNdfuirT%z@PM4%Us33>ew#;o>JywH)c2$#at%L zF8EfkhKSzZ>1rK()t8_Pof`&CU;hDo2heZR><#5_tU+(6=S9i8iF7_)n+pvZ*LtP& zz}2g_`#11@A$XGC_=kVFp**W}x3BX=tzxEZ6xdUkb1RmE-Yq{Cx*~NS2;yvMBW|$Q zE6seIw7DAiP_4!8cR$eSKFOGK7F#7@IrnORQh3s8cgY1kfj>J;OfsT*f?^D`Ud_Mt z9O8s4dmP789B`wJl)2$Wbg=y`;G#dV-T&bw^ntN9(%2)&D(N+z!hzNKE&B!;IV`H)t3nV)sO>i z(8oZpD!7#h_`55Vbmgarn47Cfn=@nN_at6A%vlD|>I358icwTw(7#yY>#NG9QyuzN zdPk!SdS+0L7~lyZf`$7QV3tI{N-9JXm+T-$Xq2~-!_F-yP@2bW#J`a7OLu(&WVed_`T`B>d@TI z7}^J))qbBt`gT5fLE8=b1pnbh8>^CM;YG`<=s%BZEdGc+GldV!PwrIopE!+cj&Zfg z%Vui(%$2u9WBp0ZCHB(L&jq9xW}%zRHvb&yx299cst)?RaW(sQxHs}Pkk%eV?de(I z;@d7^m!**p)^~_wmTao+iO{|st<@UG#Ahj&C+^>7-vD~P`mK2REVh#TI)Xv}vYKwA zCxwg$=2K4P6M5zW_)PQeW#}O1kT(WBA-&dh{=V1mepWin7b{bX!TUo?+-?5(=~b+k z^!Xw4HdlLsI;bb|!EVkG)*g4a@)v)(s%*Ke_2=l5vDnpK0^v*e=gg9FV6*a_;u=lh zlAm{4UNLRhh+LwGz|H zPU14x5ueUKvaGuUy8j2sFK1EtqYn@>4398FYw2^B+s-%ITi0rI(_S}pvdJGwKbI4G z9%0=(WzZ+fAwab2;sNp`E|4#o6k6jSR*c-lyjQ!>Xu0?;(+_=X3==axp z7I6N}tu_65ZGII#&*kMc1#I4j;BnAly9sW=Yg>W!Y-eRKC!xCun#baQEoN=cqWl=( z#T`kUq~x6T0WlZdn<*=vV!7SW#oWqN;Gbn~;(1Qs%bX8hv=-FB3ulnK!a)MLq*(Td zbCQ=NipVzl_devm@Otz(YiGiziEk4=Tf|Prmsc@P<+FQ+;j{O^zaAfq>l&Zk6!2Nq zQRlOV8fAv^*&iPtXgYx08iCAi0sh_1=w(9cG!_0IhBci)But)%JiMEYH;e{Frv z-sO#BjQ)^wGa|2S2=@NGcI+Hu7T3XlJIC0?b?N1!jo1E#G}q1_9UG8-zYE>oqW@L~ zIbmonVwdfN)=lMlT>7f`K=2K+wq&ZlIh7RkrKwB$Q-t+WWSZOc z$DL*3u=YrA6^~UP3~RmLuQF-YuaRRf0DIwM+x@~Xxkl91)^5d5DSj+DW%F(-_!xgt zZ4FNHEKgoLu+Dg*mZ$%tX30O}tnNUsn)iY3@_ZM$X28FZ>l-$7mw&pgJJ`oAStFfM zx=~A(`AlD>17xi6$gWMuiF$NP#IOYN+!y~glIMQKNV z++-dfDtrDW^1k8kZ=v74u~@)gLl>fZg1?M2(SKqkdupjy=N8OcwxWClIer!~Wd^)2 zp6h0vQEQOh_*v0+_y+yclg_rCf4_(aCDUUVlX;cT5ObQhHk6Gld#`~nMtR9?=|K0= zhT2q~kzI#fz`j@Vlve%-(sz-TENg|www3yPodaiCbvc%0-Wfgpxg+=kunTke11^c; z4;a7PGoQjAfL-|DXvyNP@^Zrt?Du=VTtqh3pR$NOnxe4v+v z#&q#N=q~pSbg^UTWYCazt=9a^tSf(X&M-cs{hnQCzz2~*h07+n9pGU6`<4?kwjA9B zUyY4CcAd)7BD#)^-CfYUVVxrnpDoDG*M;tRjc4T-m8btNY@D5vrK?VXv1!hl>Sgdp z=?N|79mv-jE<$5gxo=2Lf@cd{Gq?fEHomk0;A%v)XqZSHxui;iO7 z)GwYihjVI&)UWe;r!tNmjH`4yD~le7EbmG~3ye?J(mLr};%S@%N~iGC?yCDUmln5y zS9lWm)A))0M290S)<#5s)Ya}VSMcMr_wSJAPS?eZ5%aNU#<{M>WBear=jHJ$m9+1b zc+jll&A9lsvi^A*p49D1ju~bTF=OkiS?=OwvwAdK@td=xHXj zn`ZBV)6KsfI_GvInc2Q(yjnkXlkH_}G; zEpGFF)Xn+;dD@4pHEw-x^1a4pdiG48{s-rRtA7i~6A#Vg#sz$KCH07xS|;VGzrCbb zW9&0)vD>+GeXu5w5MM2A@E>MRq-4g#QcZVl$PM{yx-PcMqB+HuO{A=3z-9OVWp_*k zCY{k4vpT7dm=E4{p<@VUjhpa&o@g1krl(Edomc6jzYjdL*3H0s_gLt)^|Io_m+@bh zMtTI_zK3sDGslwjRsQZj2fwoYM0euP!CG%3;dYe9_#IB4|K2}X#d=d$`K-Udo~Ay* zpJCkhp+}0ZH^yCcYb`L5?{=H+Id$w6BUF+e+<4ZKLO{;?1`l31nYXQ z9v}Ej2lTqoMqY!j7Nf>*C&G7)5d3yk!#BC8oU~WCmUC@cG%0>7`IHb(bbI>0_ShwX zj{miObo~BH+)p;y-r04Yn6Bc}8pP`Zy9xLumlSsqL(T;D6Y?qPbyYd1{DF>Q&F>|C z_at=E!rGH)R_jw*a~iF^x!8_>$2;kN>h}pA)6^8q=?-x4-tVtvUf1?pYhIr+u8i}$ zozsnZ+zM`u^ml%b@g06H6SMZVxxBaQG;^4KPtThEXvTM1^&I1csAW7jaE>vN=OovB zJOq!iW~CT3BR8)spOuk;k7T*yV>VfTXoAOt%qz-0Q!a25(2sNu&AEqYQ+q!`xvTN{ z@sG&-wK`vKf?~q-&#~ql`zg_j;bHL4t1BVu4mZr!_^XS9BTW zoIvTVS;n|_K20~{On&{n@w#lVY~{Pic_aOE|K7CZ?zl33;tBn3pC2w=Q9c5V;j1f$ zE%-5hMxDK+7}1Vk?6Z|sl-0K(zH3weXfI8BIs->@TTTUdrQ7 z(|m|9o|H_1Oc-4&jiwqxW^7zvF= zpl{MXbb9pc`g4ru)%CupA3p(J{6+OPXixe_ZiVj>cV$n4XG2fYJGF+an4fUk3F3VY z^1dC~?1>oeVb<>ZwT_Q|m!&`2zd_%S9mF=!7o8!cSW@+?F;Bifs9gu#EZ}N`_pFBZ zM9gvMdY$n5LM%~oKuf1TwPXXjJ1&{-i~(6J#9~^=ivqqR#%mWi$Q3$+av932jPd$r_LFBl`4?4xGxb}*o;0_@$AA~OG+q-8 z>?+!Aakl!~;JN7%dQFM5WG(qm&=qs=M*0`{6RBJA@FCkS8}9yUC{L_WaaDO#*zu0J zqsn3T>8kdM4(Ln{TN7VSHjdl|H zjy77TCz*e-s4CUfBx(4-VpP$x7 zv_CLOekA|Af59U!R!4Kz_DJ~Q0C)(wN6_nDAilc>Pt@QHiJ;s|wQ{BPuFfwGfe)3F z?}okq*nze3G0Mj%uk#Q_7pb@SLUm;QU7U9pJaRIfP~Grmbejp%V>DK2;L@0D?6l7@ z#utLO)_@~BzVIuXRHtDK_)x;^@yVlg zh#7VCyyDWNpUO5aT5C?QSD{_Y;I}0~2SLE%%j zBE^ykE@abpE@2Jee<@C~hMk5S_4bt4%NqIwJW#%n=PbJl@ma%|@67QmFk_n@Z{@klnyKh?xA31yI3?K>h@BYkx?!g2KDFI6 z!$*#qO6{IlL3N4olfy6JgH^xuO=Bz9;a4SALw?nBX5m*QR%6O#{k~1avQ`x5uS9-d z!d`U6fb1ijw~+-`S#Y1FJFJsy5?&=09EK>4(~enbTE{K}RMx z4_ni(%3-spSPwr4JMbKM9scl=_Qxh)*)JcD1+-bCd|LTf&KB=x``8iHK~`LS#pg0q zqy|e%Vc9Nf7&9kn)pY-=bLd?WFF$`5`s6_I!P_IO*RMLeq3cHY@e5bKrzqddhrT*c z{Oz{~iVF=qHc8E~#53;0@n>A+e1^??ih@nB2YlFx6GQeW1~UrWJ%SgQ-UM$3c=@#Q z5xmy{uY6uX#V_pM1Pw29#oK$}LCPg}fjtJCvHnUdqu_k{gO?TOe>vpEe-QFsA;wX@ z=!RDOUDYu(6>N9QSB8omw5fRz9}hE6Tel7sh5!5KKI{HN;8|CDFxd$evmHVA3SqC9 zI1jZs5dNF2ihV-y_1ZtbCI0hUymv63F!)!Fyyif@xTyFkIHL|l%M##SLR@K*F$>;# z@4Ae*QFwtx944^Nn{#O~!80*eTg|gq zqC+UYGf)^T-lMsx;^U5(@$Gxd6P!yog>x){(3 zEL7Gqa)Ugpt6Bepj$~~h%YEDSYX{}Y`(4Jn_a*)t{|u>i?w2txVjCM*r-3VBm+s!S%NzN`*^WI|XS-t0 zqYu%MaIN@flcG)+d?|(y3$P(@T~y0I_)Rc(%)ftb~o_PA+BG~k-u9Gf!_?{3DBSX2aDsw z=rpD!av|_S{~gH3NmKbRzPUX4Onlh9_lI*YErzVkW%6OhGr*u{)$XFW>I+rg`9q}g zY>>Ei$ta`o^G*c5ul^QXfX+sL=%x3{UbHAN%wKkCeN_&PzLqdgTyVaz|9z%evVNY~ z`D()CzBJERFR_RIeZuVh;ym*ppX6`x3H>f%MmNndPv9fkiGOI>#yO_rzY}Hw1CeiN zHsdwS$1DrI9r*2&>0p0xH{kC146N#S+I?!7FJDwe~piTPFcx`^K<-H`&WfQl1LuqseY;$_H4?RJ2 zGw)OH_4B9}^K3?aBsu3b&iS7y&h$)k4SsXTH0@2h47`=KzaJcqTGZHQPDjCI5V;wY z9qhusqSo3o@80Fz?Qo6}F=c|SpL=^Jads>)eESCU!F0c4@^)$X5p+-IgTBryT{*@& z>E_u`ih6)~{5=KECv~XzsD802EoY8J`xY ze<)qb5LYrlJFEHq^o_3_5swv)G=^9eKWnFsc>DR!WaWdvM;y1^C%B&2x7Me5`*gpb z_riB%BVKMQcGrHJwVBTnlYk9pkL_;0ua|9-Y6Ih|2j873#i6kF5{jRIFY&JQ_=XIz zH^d(_WYGbM5eiW2OuXVW;_B-^gHE4fe8?!B0}}1&cc!z4$+l1Tg2X=b5fAc>D%~G7 zPrHA~7)^YKcMEX;uV%ZnQ{!PA%BMa06@Ht|@PF*ws;8D+T#Pe@NJ2KOKEHk9-S1t( z{#1K4La!Uu&teC<_50fThQ8+ceeLw9t2nMWFlsTDl!HPHYKw9|B`dlL#MUs@ZpJD< zID3+!{K-w|#-dx<+b#J25>wINIA_ECAb!(z7VjoFR~Fq``@&h)7VmA)luf($oQGeO zwpHUKw4&dcy}2R_`>xpRuhq^pYZ-iLzhcrA{3};ev~eA@(aCr^fXUeK?!;E-YUK99 z9Pu=)%K_Sa_2d!n_ux%@e=TsZ{@jh*IWsBO>l`$H$~wkz z8#uBHTf8#1WcegCFCU;r+RJB+dRgF8{H5Y2-oskf_khrj5X3C+dq2YyDuxsSA7&8wq*17IxF|1 z`M)TBXn2r1%{|4tkzuM8dmeN0m-`2c;=3tuARS8kTAThBr;+=#bJoLyMXjqvsVzP) zSOOnd%LQ)DYd3r4u0&5U z4emO)*U3Hkvc#)XDbDat!$(u#p8gVP@d4Jhb1U>g|H4&av}~DGMJsm$I2|p|O5Y+q z>7eW=Ve6(b*{9wV9~|#-r&RqYa~oJI0X`OfYhtTqk7w;X&0g}+);w?!Uv1^DDK6x9 zD=-{2JKei}c$!1}SK~rrc~q}Ta9G6eOg>|y+xj#4f~)e7_&CYKH^rQv_Im%?Qv}r~ zHB$p=`_Z}V117@b_xI`Pszchi&>w%LzlFcHS)=qhZL8b*ShY{!3p=-t-LM?L5%JLS z8=WCyo7$k!ggZ)q*GzM1pH%wdAi! z+~S2y*4Yhhq`>t=xw&0D5m;(^#(Llm<@?K%p&{wU7Ch(eytj__bIu*adb2+HPkFkD zxQ%{{K0}V&XY0{r_P=&)pZe&Ao_5l12wKy1z`3Mo z3d9?;214+;N$fYect$j~9GRrGyJpiNc!$;^^pqJbcRzHfV*3CG;lhrwHBs_oq6I%c z#@gHIEPQvL+gi<2u?p80=Tcj6DzRCUPXk{bybri8SO~ubX4Pz*-DH<0+0@dALqi4V z3s^cCXA?Fb!+Pu%9Oyh+lU;&~eNVuE<2Ym9c1t;pYzWwki<2__<)vT7PXpc+b4@#? zII?D>q1WM@aMsmzeA4g;Vryw94qk!@YHKqG8s`=48EQDH;U@$<%V|Hx+7XU~7vV?G zhfD=0vVXxK4k}kPTo@S>ZAiCSvjDtMV|LA6+dWfwnUp<_7wKt|w;JPIa1p<#&&QAW zVM4fJtg6Q^J}{|3TyReQFZS~8ZRG$kbpuC0IDvMwE`$r=p$l9shnL3q&wz)9e1Ey# zqJ8$(Ba?a@YAhbdLmYds;w%*Bh<&(<2R|;c1ziuD^p5heFDtJf9TWLtk#9;oa*Jp! z2c2ne_zCJe$u3|FxCYzZv0&Qe{+{eczf*OoZZ`B-b$UdSJ?N9=hbNJZP1f+ z#6jrKp*D~7s5>U?a~Hje&mMjM>UZHAHMV=joGrx#g^HdK*ZRe;9L8^>c=x&$*pn{L zIvv+c_d2eehTmzaYtpQZRIe8WMp7(Wv>yy`w%I44;WMxqoX+Q3e&aJ82eIRS&*x@7 z@8N?Fc^ssTH}iRB&iUqHVm#M=iu}#b&okZpe&t2>_*4aH?rby9)VGA3Wxh?~iK;stn z!PK=I&3O;so%0I)IdAV;>>1Y+i+dIN7CsEcUVU^u`<-Tdgn8zK>nn9lTTT4_)|V>3 zO>~-fum79pq7nF;?f%7t_v*QR--P#e)!qwF^KR4ca0L8O2b;Jj*$)-79JmnpoZG$o zmyLLZ`$xQoyGOjedq=!`Mn}B--6P(E{UhG)wZ!CKwAHU8+>uAeNmurW!K=3Vc_(J| zG}&t1I{H7yhi97fMOW}ytciB+S*#O{NAm0owK4FF#;RvdJ>i)Q&(!n0+R<3mww^n= z)_xlO(7>y8&2##HRjpnA^YzII|8?m<;TIgBtGJR|uX1l9TuW=u(4Y3aFZ=CP+FqjH zRs883_C4V5C&=-@Z19(2e*3q353eP5?fMNxGvg+oCyZ6!H^l!h)Nk%nF9Kb|c7Iv> zFMN~tcE4?EU{vQueBpkzJzi=1{_q{%!_9XvCwDL>chJ`z%*h>I;Gzvh@wZuVY%6*2 zl!lh7xOhx$YP{gDHV*~vO&sqjdPXquOl=ac28^M{$<;tLGakU9U9#3Ju$Z3+aKP} zxVJOz?LLmR7Ybd}Q(TZjCg<6wK#Mv@ro#ab;6iK4$HfGi?Db)uCY{{J#aF6uX&#;x zT=FCGpK$R1P5AGh`EMa`>AxBce!A8cV_d)(udhBY+&o%qi~r{HU-yLn9@c*o=ufok z(_|I@qDRs9M|fxA9R0oDrffX6`^{P#(5L9zr%AmJe8TtQYJYmxuD&O@ZrAS#wEK_X zz7^cdhFPnP-Y=gy_|u*@kUj)W9P)yxL*7slUS$q>b<{A5P>0?u>~ocqvnonWq-deE zYCh|7{+Z757`EsJVu3zspD7)QJ%!uS)Q`PbK1g(hRJQn8_H5X{HwD{~^XFZP4DiqK zZj^qvSp45|u;uob6z#*Ts4FkrnVp=GZ^e zML1y0*jq|g4*RGL9r2&mk7#lBm#BNjSh~UEYIK6xKj9kPwJyg#CJ(*l@Kc-0SeK(O zD*ktw_63YNV5941Zo#+JU;e}la(&3vSFTUn+H)L38>f7ZG27KV{Wvk~_Rg{EqU7B| zQ_8!w?k4Z{GlOo+*96OD#ZLN~eLZwjsPN-D@Y_Xyf-Nn*i2nUr;0g4T41LpoAlqMl z2pqwmN&$=Yt+AqSS$VE=v7w~Vo;(A$>N zSGTW!p^vAe!&h(-V>|)jGMn>OcW{OUbzXIbMSFjTGoz;>^Nd~bjacNs%q(0|tl_qv z{=3vJeWc<4_3{341la3<-B>wqWfUJaI9WLhcxSacQzmb6=bby`!+hrtInN}&*3!rGImD6DXpAAo6LvWY@^Lylf@>m*_D16 zv4)G%4}IMb*uMEK^k8Zw*r)gS`e7EIxb#EmhRcChc0}o;zJ3Vob@Umb&!~<6xu%z< zM#ipLM|}bGQq>nYNA(5R(@!HG|1@h!(br20y~Q5-JKncNpC8{)>65V?@00a*=gi7D zql~jYRp}EyMVUS3pB^V|s=u%AR-Eo|aRa`L<9*V<-C7-|^63AJamN45ah|GivYy&D z0y}i3b!Gh>FwkdxfjvIs5)FtJ0;g9?z#W@T)nEG1lg6zjqz`spc&5 z3A#3kA@3jI>56*|>+rTfG0GFY&ktb5mzQ>tCpx9cox# zgV{IoR0B_a6Hm;%ktepX=1=5}@Zx=Qi4m^w#zFVmb?{|qNPPJm@#XdQWcc!A`0`}< z@-+DJv{2@eY4Bw}y%F(c@n`YoD7+b)wr`(oqTR{N`^?0u;@9@juhuj;Y{MoJBDP5O zO6@lS@Kx=tb*5D~aZOR*z3|UdvHAXp?;3v%n9rBQW66(e`H*y)oZ5uX#L3^Wv2B5m zAb6gAQ9m|iaBILB|1D-7mi!k!etyp|{eFD;VyB>dH&rzXUHj8F#jg>o_@(&_SOA5Gq^FJwt4RDJfq(o)wbtWuRE*PbE?;g>h-zR z>-p8|v$ziN{(|atTlN2i)$7x%*U9Sjsaywneo^&$TJ`_M)$7Sz$Jie(;ac#9;LU;{<8vGSM~aLTk|Esg<01o4Gm=MlJ>;4d8^h+zxQXnE4pmsT|>NOeZszTJuxrRS+oz}%-ZpZ zZRow@Z9q@hXz%?&wST`2;uPzNfy-GNDt?-3JLnhVcc-zLr;vI0&;n+iKOT)i_}@(% z5kn3wePVMPUzZ;B9?Vpqht5UY>Q}he^S1vywz>(=?|+NuYweG|#q-Yp<@uo#o{#tL z@?JK;L;sEBFDX9f*>x2=!(Uv@`J%K%jC%2d#N!Cx5qOQ_0zXeX!u!CPMGnTKX;?`H)Z+Rg0zKQ?JoQ!_ttRx0pK-( zAt!!T&Y!<*`+z6gn{0M|%nt(JI?af|wBT zK(3Rfk39zWQrOv{wRHvM{IdqQC%;@QZ3hDB;VCE6{<1WFta`I=XL^^Xn1VR^muz$7 zd*d&_E_+5#@$Ki^r2}S<`;ytnewy=_vf#qby3*VK>V|>h?5lt&2M^3s;}Uz`5^%0K z^_O@?Izl`8f#8-eOt!ojw)!U%*m>w58_vDTnNH=<(Xb~4vVXX7@o8-)8@TZgsoz>= z!M|DN?tkSB+!wKc{ybq8@u8TnSpbuz zc)*LFV+$(Iy8qQ<2amm*xH`tZ4mq$t zG1JdiS!Q@1yP5RxL)=Rsn`G0~J?ZVjmp{MYE5rP~nxE;ZPtCn#*4jKiDfV2l)vl*T zgPvDxitsB~shjz_J)L{UZH&;(aT}wL7j*c7-XZ@tUbQhg=;?1&uLc`>%^xKl$NH*l zVAMQGSM?hQ_`pr)$yrxAPHay_=ar7*`wh^CL{q+wgMJe!^p__=uP<+?>X7)b!p^p_ z8&=~NTKyy6FLbv2LJ{(bsPA+Jb+@(FXWv?px2@nwaml-{hELMBVxhB_qf4?r6_?wE z&YH$wF$^4v$FL^>A3m%Gc)#@eN%XJv^Gc-O`$2?U7U(*hVGShN%VzOUvZmJK2Q=tq zXNiWdBHrrz$R3Rcy{iGdHiEMVHr%E(I4rOZz_dK?yHflUPA(yfwc+PJ@}LMXufYG zjgAN{#i2jt=Sp^ocLmUcbe5{(q_fNg^^hJ?-k#P$FJrCkg=+gB>2uxStBW~G^St&z zGlU1)m_gg?bK80MqouPMk7BY#hZ`>FcRr5YSF~*`;&}YM*%c*hvIiA+6D^FE>mB@_ z%&X=-o>JU>g~r0>rZ?dvo@X4zt#0Bc!>($!o!`iw6T3EfEX7Iq5j*!WzmN36U)gsU z_5==l0_IV1*@~G$@AKp6mGjpMPK1B?ni#X|$NjNZd_1IuhYy#M!UKDR?i_S!+a-;C zMh@R&78^fw&|z=!a>NyAPG4e79keN*P#Rxwc4@!!?W>^!+K)jG!gDk2OE!H5nWDN3 zvvQ25Q1J~0+c!F$+3jA!+3t1Nf8$wFJ$|o2tC+MpQS_*%$V-l zb*k?RPLSh_-5uV(v^06fW;Y(?UB)KAu>8oav=PqUHn#df_P6w_{q1?|Zx@`}5>7| zE_ak)A^zX{hhq=L&XF&o;)|C3OmW6f00Zk_T>1vFVx{w6K6WI*bJvp#yO1{h=h}K5 zo4Q%D!G(?OKK38zBTo3qCKQ77EWIPrrto`R*F4_b%YO4|(wo zYA^jGc>P93x<$O_F7W&f`4AsQ&L+4gI(tXhw5ZOdenLcbHThMktq-r_>#v0MG@)Yq|`gRq; zFaD-D#sqB`_>k6a_O4!U1MlYWqe&<2<+pP5@rAkgR}cEW2(!bFIaAEC32ty=pNjiD zB>vM@VwU9>zub*-Z-I@kpYbN33Hd9V;K_~f8B^uOs%`XE{5Y|1*p0hev7cR1jMIi? zUsqiCknJjWph@fA3^?LrFPQ`IoSWe}R~?T@S(4x4*~FhT^Xw(er`F}W;Z@@CP2_@W zAJ+PlP3{>-#p1i8TW?t`^|BP%^6umxT;oXf{>iWAX#eQFF5|i(fJ?5DP<{ zziVqX{s!Fnyl?1NK87ZElybY5r@04j3ON1c`KM3!nt3Jxe2S}=-jbcdJ_q`aLfew{ zu?4p_8x*XTgnP~Sq+j28hj)y(MSgN$iEBl+!P9`{B4F}s-xk)ePSzBa_n@3J$@vbRnfv`= zr%CGt*aX+_^E=+KR;2&zp0HNbZo*&xtQF==c$(aT4uPKLuVHNaRvx%$U+eh9wW4vg z0M~`cb-|@Itk}}I`!_k-E5!1H&Z~tTzOMFCfwhuZQ%qnNjAO5xynE2sk>QnoK4cSo zRz7pZeoH5Q_4Jv3+?#L9WghEoWP6@96en-#^vV9XMF)!YL&iJ7EcR8tRZFq1?QhDe zTVk-OT!tPXp60JF=*y2Mg~oo4E)a_&i{Yt3_*J(34A#^Ys;hBOx_6l0E09Ur6W1e4 z6?dxsYP2SOU3q>J{V4Klh~|8H%d;;QPtGXbL+AFOlc8sY&8=hU)$ASE52eHSrnGl> z0>1p&K_7=!n!0p#mAZ7TcV^v%@D}N`%9m2ihi~%+Ps-s_+=uM<(oKCl(ZBE%6E5ru z9u#-x;{x0XAKzz8#=65F>x0-F#lOSw`GeG()R;8JH0`b7{o2?xW{pd_vDTT!WU{IW zKU#k9TP>bqH8pmPTVu}uV6vYxDtbG<#^SlL6+^`5^OeM7G5oKXibK%o6*UFppWf*WQY$0Y|Z~>36Z_rN-u8HzUW3Is^ zdG!ArF8Z~YhlSLF3rvO%vYVaX#&31CS9vLp{+xw=@Jp($Ve6ek)YZoJ0R4zwqTk=; z?+Ef`&b*#TwE&PYHKsM?uP5kAXTZvy zcP{d2d7%=IpJ7h5zxVfT&`+RM_P8!$0FgaL`IcL}kD>QUH)~C7@eU|Q1idQa;D-Rd zhyh00?WSG9C|VB3(GhdxLQ$V;=^Wzrunp*a?bl9ajVVrdQku0V8s)xfoR}>8R{jfH zJKwzjx^Ccj-AL&S-#DLq-8RkxVr+xp@NaJ*jx4>2_+RV`7Wm1qj#yvfecFraJjxds zv+88pz<-Zoyje$Ufwv}icXChramh8^TfkU{xVJn>jtqFH$>ZhVOXCvU@TY^yr&&in z&HBPNY<-n|!XEA~eHZg@kC5+IiN_A4HWhnU4m*wW`kZN>8YsT7^|GSu4~qAfZKVsI zsyqzKTvMD+JIeX4ThZ^xt|Hwmk*&)>_xe$w!|bHwY;>viL`n#^W(aUOiX z9z17wS9%fgypHs|iMpo+jM6>-D|3^3A!{nbbG1G1T=u_{iFMO6Q#v+R_P*IwMSstq zz2i;$UeWFh`d$`)#CK==yFp91O zr|>G;(-;JAFoj)+F*aq`<1z;Jw)?aX3jlA>OfBJ8X<0)*wf*z&$Qw#?y)HG1{a}>3 z1ndQg<(9vBbsAkYhu)Oseb$KV|Ehn#I?bLhhs}ib97MlXJ)90pd)O;VA0bX)aprdK z>W}sNxhm3MiA%sw@L{(e{ka}qCH}Vyz2ZGbIpd9cQ4@iVZ1)nb)sJ{#n0xXO3BUF9 z@lE1zPt+@Fa#!;9kLwi3e&GB6qfI&G(nTg0GZX?xk73LqAGYa$sc734s&&PjtS=Z_|ot=`Sx!Z1GxtSFvBzfs;S{ z?}}~Wx4%F3Mw=zLludV{%`%jR&I;^pnZJ7Yig9Qk-l!UZvd8*7J%01pik;{c*qNkP zoGZQJG4zV6Ew;TCJ#;VUbn>(jux zmuuW%$)%)!Q$K4o$7jk@A$QePl)}PhfYze^?xVz`-j_m-QC1z%zy^P zLu6Bw%~xl@_7Jn-(>bt778^%+-{8H!3K#OP^ey4gh8Gz0Tka=Ec6rJ>{^A`Qi=)Kq z*6c13cvQ`9Wb@9|*o+p?hwNrGn@zC#jC{E}cxGK*^nO)II{!lGOLk?+GsW4+wp@v0 zexq$!`w-v84&T(CFo(QapW8-!Y?s^4dXVm*x`vv^-r}%xHTysD5Y1^Mjl6dIorTP) zKey20@wxpIcJ}tGh=XAd#hC!b;91b@v<>)IIb*B zTND5LxvZjN)~)t2ehw?J1?3f``AxOKdN8b=kuVtZeU5lFEh+D zV|G8IT4Y0G8aH+W7k|U+G;d38*uJm$6y{&C;mvX4BcYY!w#EAG0 zw*2x3&)9I}&Woe`KJb!d6wf8QUdXUlAkU+A#&(|kcAbwJNY&rX2*#70j#ZLAsx*^CaSx-s(|%?mbbd@iiH7M)dn4r?#?S=K8#77Om< zvz>a>UwU6r?+b^)><5d~!6zT-3ilfNYv8-dTroM!`yB=OxVqFvqkP_H^DSS_BxqOu zBy8i2fx^$r!CAwu>f@^xCFcRkH-0csIN%)x=SO)TIn@&6x}M*}Wxk;e{M*#+?t>@x zd8<;6kDCZ^p93P0>c$2)jGV9Q2&wF@uy z#~jRkkn`6@h?O1j7Ofx;7k~Zy@5pDr!4VF^IqE4ec8v`m{p)Z+Q>xddF?QlJH@Tma z3%}7Hqw)^sEB_W-?0nM~(YuNt(D^nqX@fEPzVHJ%cqzZh9i9x|Xh~Gw(VE$(cSGQJ zKJz4QgJYhVsOS~{rbxz^dIzu-65$Dbt@+kaO7fn)!<+I#fff{rwP*vvd8AH4kU zXIaa;MW2cv4y5hUbo|?2`(dA>bK(q(c^^eQ@m()s-G(%x?TNga-jHb%2dub zHd)2Q*zPv2FD92f!nd(2G_JVrE}qwWVe@s?6=$*WzjUc4^sca}_rje0qnwBseK!TR zm$7BKAL5-@qT-Kh3iOpj+>09OIyvykqnt0of9lIXU%%m5jZN>v+qu{4oy>T{=}U@# zn`T|pS1`#shNngG&8UXoJN@?A*FtZ~$slhXUPjCjv>i?M7vViEYEyI(NL)e=9c{Pu zlxyc|YYxz@OPYr%%)u=1-wM71dC7FnADO(ZEcvp8vHlP^3-l-Z2zYkyytu~+?6KWP z6MB|?FVDrW0n7*HR;{s2HTIXB_WBh28RjQe=ymF->tV>rt|vE8d@Kk~Oac1}|7-5% z(pR&?`#I)=|2DXHlpA?YV~jb}#@3hxgI$@gTe%jl!#wlvH^9#m%)R=VNtUG3&8Yh(sEv(oH!8B3gT3lEAv3i94h7!PM)xtdRM zbq`AS5$(*%E9Y3Xn9(!1CtX78rLvBwufzQ)^AM%IAn{v~B)M$yW^8cH-ag@;XQR1h z&956tV9Q}m3Fn$Ct&6DrT~FuyXfEgTJo^vVKRib~HB5DSgxY2q$0L)#v;;r+KKx82IoDZ?|K& z*zWtKp_P*Gp?JA){8pbHB7XnW*Z>~UM?lwEV53jLG|08aExP24xblAkhyD{@^nZ$L zf9$;Tm(|}oOI0{p$Gf7@u&Emhvrbhc4%9&*CDo#^j3d(q5kV;YZW|HHr`82166zb-PB zv9@uo^|H4%1{)jR@i7ef>+yXWKV$I6&p0#&jfFe|{IKG`n#aB>uOlzd?DTnZaBj93 zj9(7UwBCn2_{9g**Wb~;Pg`;3H7)x)xlrQoG`h)%VhyiYNfbeQ+TJ{@cRHq_otY8=GP z=sn)ix{fk-{jTHpvw9bJ1apwOfuf^lj~)A~=IUIk=9~EanxoWzqsFDKnH$>77BkuK zk=5|>c=88_Z`}IYxXzaM+sRS)UTfYA9M)Vd{|q_@?*wgZf>#BOEK%Ji)^dG@cslAl zOzXGZdu|+Z8mM9Zk-r9a)TgQsur{`G4uJ1}u%|*#q19%<3v1kFptzL24SLax4fdVD z^R-s?N2{sR{4w5<4uSt+yi;Sgp#6mH9zrKR6yN3jGxv^~pSlr)yqNI+0q)(z^#gqL zeC;gX;B@)D?9v|Yf11zg#Lb>~U>JEAfL_AHHwwShRoRDspwvh{Cc4cyc9e1Hl|eq} ziQ{TRb)CA<_4T`A(;V>h%#suCq4$n2JmH?&>^$L~e-_~24-P-*%`ssbnlWe5vfsBg zBo`92U3m4_vAYS_Tn~d*t-wsJR$!cYETCH_tF;2z|A(#7v6ZWdr@@!9lKuVJvxukR z{DfLe+wQjshwQ1X%K3*;Y6JRp0*xGtF>|i9EuN!!j-m6! z={uUP_FIr$llZU2*flvPa&L+Fj~DITq_)H_6XElKBpJkVfR<)j^V=1 zV`~=U_hcOMd(PV1>9k@SU3hM zLHazhk3D!GW0%ftJy>oZM(%<8D9=p~fOmW*^YEEWX+ypThD0+?9sBYC{{KC!+lKVB z)gKnz_jvnz9MHy~&HQH;8jS#&Nj)x!p0g;t6o}#C{)Voqu9( zpJP3}x(2wJQ_XFl@aB2_xZwUD%xml9fePG=VItha{}16F0q#YA0&aX*e-_-b)ruDU z8mRDZ(WZ}g!H@p9(U@CQM_+c@$LY5jJ?h9z2XrjJcOP_4n=lVF^;Sc!bgz_ zEp_pVeX}9{WEs8v$=D-3%KbeUjx$#$_;F>+7Jbi+W-C6G95u~Y`+uzc+y6-WTmA>_ zp4Iu;YAxj2yNCr$;Ydq&R{$FtLYjTcG#Bu#+ zd)#L^hs@`7e+G_~$F3OD)<*1R(8IZ{%oSsopWG_I)Am<*+Npbn;mzo3(1y=H;2WZq zbJrXw|MjtBo9?F$mF&+m;uV{p@|8ae>}tEfnNfPL*7jSq`-V1K50u}gcY#CvDf{DH zUK=t(aRG1OXXyc8%2xPUx&lvI>!I>X)iLQ^Yt55oD}HTp-ekscHoO`9)}6ou|B2^c ze30=APTmpB!hzsDmwv^|mCI}y@WGsj$DbO=x<1UN((hK3R#ac(#3`uKW|Q%{%rg2(wKv=}aId+T~3 zRX(3B(B?l6`?`nP46q+)W~?#rm?p0cz6e9GE7~i4Z>Ou-g$cS9%T^Zh&2}DSeZBoxT;@%bd0C$tL|H&LcG7 z;E{`MS9Mco#Z`NUbMjVT|3M#kg?nAS(${TwWwkF${S?^ikV{|1d*j__qr2fR);f`0 zyswS37^YB{d){_$cyiVonw$01#^u#Eupu?-dNtRr?3wdVN>zZ-q1CRLEXLZcTJ~40w=OfOq!d|1zUSJn(QpborN~)rN z;mZ%Fw~d{cZ~6}WZ`0WW%ruu3ubjWX^tFp@w~vqJwzaB%?e3=Da)Pyj4iwK|qp@%I z+R+g^*B>l*q7Ox>2|8J_x$ub!UprK|FgSSa1d^`isN577-ezo3a@PBQ+ ziFQO&(ZqfaSu(DDXajAA=5MUXm|R+Cc(kZ3jYsW7d*Ry!`$^(U(AD2!&HpcIgE1}( zJ&fmE>}BAhs*57e-x3$d=;`o@nTaLEEB6*kyMKZ|l8^ia7`T01)LsQW(B6r-u)u{? z#l>a9g#j1P#1wGR`goQzU(lQ3y~lB34pj7J_|A-XX5Wkp^g@#u7O%sXkvn`G_JZ_i z^o-Rf==&4uxn9})Mm>61u-l{MG5jUcrG41#*XPkSBRoDl0rs1rL+Lx3)7akHoUST9G(jIxo6%nSLWlS}Ux(QC zW_|s~&`gz&D-HnPLABkkQlR6C6lzDKQH zo^y%)JAqbmZ(cXl%6*+y_Pl{s)(GGE(ehgSGw9zwzT4KnP}Z7ho48)$(1_%>Pb27J z!ZR{DkbYnBM`_u^o_w7~-cj8d%Sfg;MR(-DoRiF*Gs0N>%o7XY|OAf z?j7`fDB(=XA;zk)MORlj03^()?q9&`%0RsOqTf1Uyd(iaY~HOWi^1en*4iZ z#dh!20OwKwQv{m&7U#A}wjE2DBDGvgrz9Tnimx8q&-4svY*0|$1`%l&-q1%p4=b8D;5 z;pg<<%T%vdA~*E^VD%aq6TwCnT6aMTc-(scn8k~bxl_-n!t!~w zk*vfdevaP(lP$$R{b^V2f0}E3e~NGE9FnEiZY-4EmKnmWBNOI`7IS(p>d(;_rU4 z6<^u>jo3=D--K-BMFRaPvB}Hla-RGo^63V0rz(Hi4QBCiV`o;qp=C+%k*b_oHY>RW zdu^|0lAF*0uxI5YcZNLGK!PRvcAAb;CCx}w(5i_ zCdc8PYF#$RHxwJJVdt5Rks~v}Q7h}Y!P5BAMdG$QXEpvp-fI>93LBl1%o1V~Mw}Ui z4P5(Y8C=+aoYOcPlJ6(q6B);U8b5pU@fh!gtxpo`afO>@pAg~<10M%G7Xk++58kNN z_$@t~?sHB`_JZRNt9H|cP5Gy=q48 z;j?D7Gpv<-MjY&gvrkH9{kE{>Ul_>~dyqsYjUVvB=>zDo2Z-nRaA_8J3WPVi@<)Zy zXPVFpPPE5v_i=iKyB9fWCE1^$E5-`yr`w5|>DWuMPB_`ib)N$sLZVG8xdB>apOn}T zX-L|EFDgDBxHTUuY40R(COx6%>prRQv^OdFH2cA)sYAYl7?~a9X))ft?7h%AIZMH< zTQlrl8>RjUHiv7wkvrXIJ0E5q4}>3gUkUt_y;;s(#&v)*=R(Y(zfU>yar6;%#lVPH zSG(8tQ|LWadZqnwbWUmlv97|2XPA$v;Nzx96Y%MLqyTdoojX9h39ty~(CB6SXECQU zzyr^Ev+&0l#w#DIXh1%?lj0g1^ue{ocRUU*a<@M)9a^8^uZiwrLk|B}ZiBZNKgfC9 z6K&40Zel;g8FZXA@zqa2cU;FscdS?bpB7B4a@5}}3p~U;ukO{FJeUM*g!BKvT zcR$Yy_a_-U^hth48J}oR>oCmtnyfzOw?h$pi@eK!T93gv=Q@eTtd-9Dt9a3ST4TbA z_Ej^$#U94I=(0;M6<<|6kzz6AlMh&vi=m|WtnYVdRE{aKfooz6GUPoagwH`QV$c<; zKCkBZh^Ly6iABp%>}*De=$ruRQI0o3Kqcq8r+6#H&*~$=K){X@@;^ zqr>@PE^^jA#&h-YCTBVHv+nX;-q9X#2_ICPRTDauVrXWsA9Nd`Yn^)-+Xy*WJ`n(ocu~oX~0AnysI}>1hHTBjos?8dV_}Uwv z;W>>#_k0*ft1#ZS(QWKUmzxNqJ%k@oW8LVg9gXw1RoHwO*`)OpJY6l-N>C68p6H?G+#2qQvcAC${I_Xu3lCek>S1Ld|8)r>U+| zEM*7q(KPZQM_vn%55GcrZCq?k*^H*|TqFY}_A z?bIFBd59lz6@wLn#$)O2p6ciYREr+DAzEnV9rzrQ?$Dz)5~*;b-Uax zf}3UOZJu&36tj)X5PA|GD!$62fr=lj?^mZ?_RJI2F|xMqXI%{?bKV-G8VDoss1ffK zd>_ic=!U0!@Lj|gf~zimkG*S`H)(%=@#>TClM+|S*?`5mtL)NfVT+gJdEsW`js3+f zyZVdUen=gg0_Rr2Yh*jQ2Rhzu(FeZP<+NpIIA0;hnJIa4K6rmU?`PBGeZ+}}J?Zk& zUxmy=>rUrv0K@v$+KPYGNx(0}Z~h`=TDn>15$kEz#*~t5O6#GefE6ruXRxCr+Tpu) zX?MKev)cQ;JiH+y+Zg?K%n_Z0pabIHu~)qfe7&9A&hFgp-l^8}@Tup$AhjXSoW(q% zONACtSDR0GZohXL|F`^+{|*1Q@m~_TGez(ffG<5tp6em+T-|K#20edm(cWWTnty?|l3Z`J^fP12U zx$#rfs|3z?Tb6dR#UBH&)_~xpW~3Wx+w7nRwXAW-d*Ezg$)`!ip4@5WrU_=<@2uwE zDRxou#L#w&cpuBL(XU4xr`|a=GBu7href2RZ9ZDy+@7_SGeJd1YvR%Y&`ZIS>~hec zE8Kmyr(#=s6g#H=QyaR!<13LP>n+I!^7QB{T8(oSpU^Wyw5OPfFz5YFyf$15&zAZ`XiswJ^Q=CwEdmB^hOMkb?AfHVm5%>%-G*qHm~37;tSkw+AzL;85KCU?fv*e`vy~DbO?~Flb*LI+PQQPra3Hbu*rF0_~x7Zr>h6tcnH0XeXr!!%dD{%Y5yqgAGZ3vL*#{Y707>dDs>^yjZ0a0 zM)1Y0#YWCiOR?@V%-cGL^J19S85!yoP2S|+UT3@6i0}qXabPOE4wLE^_-$g3@XzyJNBtfA4>yeAe;A|w4(BPJ z5y-mJ;+GY>m=_z{_;8{ReoP${(GdLIZnOd&^OigL_fhQ>yT?Vr@vkFHJ36!PFj*5=VTXCqtGz(C&1Zx=3X zA6qj-ECT+tHGA==?Ij1hG3zQGLAbYvIRhGeE1o=B81VC(UrFEW=Mr04ViDK}C=NmT zxpD7*p3)Yb6aRIchyoQduM%fn-bCucZ05`~i@q@E&U7v-Ao}^DSg3qw?w71=aocA&|i#fCseN!%j_wAW!y9=22K;lgFtrcL!cK<0c2#pLE zp@CxXl5K}IABVw*Kkw!S#y&E3qD-2nb7hzZi?iGARLl{)(pa1Pb7hX2Tl}%FL=Oe; z#e1&jKicfUw>{J^zlP|EcGDwc*Y1Q*GQZ-J=fWr70X33W>?BGyf1rBme^sPLAIE8#1kLFKDe9t5sVS$ zcS)ggUej>Fb~T?%Xk(d!ER1s>Tqq|oMcYf#w|m>zTv$`6gY%BFsawDt!w=)xQNM1V zA(vOYy>4Z%o&J6kYCh=_T{Zyf%KZy2Y=tL>-#&~ZLFL*JHyf77c zaX$NH=^#1}svkJ9!?Gr{-=RK=*}}aop8MLdP3sfVQI`6Atu{Yw6prhg(u1XQnzUV7 zpC;cov&xa3YjuYG0CPJX8|cgIjcYU^9r_w*!4#a*YG5OtWc)e)m!4Fk`;X~=_E@TC zlH~t;_)j|3bLjPpSG{&*cODuTQ4?h zWHm7^rQ5h}m2J1$j&f~|w^NwV4*$y+D*SfRR<_!P`qsOPXhZ$!UD+%IM=KxoEf^M8 z`+qm%-$|bt-rvn0Gn?j|O0IL@CS=`Q9*vkIuadVos(mK&T*IfyJEbT%U7g?Jy~w<; ztNve~Ko?{_^qdjS*`sS8SK^uFC$#Yjxn{=Ve`|~P0{_?M?>T|ws^G}Z%Uu-nB?>2tVQn3<$X@pG?#8nhKu1#c9z2# z?1gQ8PJOaF9!?ILFgDlVNBfIsEze_LxqaH+51kdyrr3ilMqgoV&*EG8-{Ez(`#`eC zeIMWC7J15HY_z1e(kC$gz~|r3dx7NhUO1d}gAH+P`qqT!Jai8cJ=M z_H)e{G$_7-&G6ujYuHC+8C#06rO89dpzp&EV)?XRV?;C^PAl(>`J&HQ0ecnWMShN3 z*nH|!XE~t)>vL`ecI9=%vs1i9z#mPzOQP1f}`@ z9P1ofyYXT2y}_`5gt{Q4@nk zpD#!DRR2qo7n5xEOhEC@{Z8=xqMy85IQhJIUlKauJ?+&kzIE>5{ieq~3=WVbzmZKZ zl5p4qQE!+t14HM2Q8d&HIrmkNgeaQRcn@8VIKS{O?k2T`9LoK>~{E2+fC(@({pJ#{clMLioPk$H3)dCcXVJ;W}%**N;)S zk9K6MB$nRiS26g5_|-P>`%H;^W9*^g%&KLl-^^o=x_7(J8>LkMx&Q zsp&y`oEPEFgZCqv#sh}uo~W$vPQGu8g`GeFKhNvFDRLN^wq&0lu4Qe{CFjEqV-+r;BYez**ukV2N@)g?E>q@c(3N z9<~1wo#PAnU++z+-Us*Noyh2#jE|E;C;2TI7l0=$1~-~(T`zDfGlP%ev*y>xW#IJl zcr4Y(p{5&fN`I8h)jN`{@}m?U!}ghGZwJqh6@WQ|Ju-C&*?=82$8Yvyp#taRWcjwA z_LPTEzifjW9^2|REZ^WNzfbbL*&=UiXsa9Bzrk(XJ>*_@n3_?XFRhwU=ifcsX=Dz> zpHLKB)nAGxr7Ll!EO4!vfh~ixI%Lae+uP~H$OpOzSsK7E8Z12Jh470uo%ysE?t9vc ze2wqi(_XanwAZloX|FEywAVP5d$e7DCcpcKTr)J}hDVA2S;Dt?)iU7PxzP;(Z?J2F z+w|~8_xcX@=h(TlKW}G$-rX_FzwSn^v@e?FT+_i>9{jJfJlZ+S`b15e;+628_jaF}~GxlQ<7gAemR_^IceX#WN`0N#RK!|=d9Vicfb z@Tc)ULSKqi*<>RNvdDet>0Eq_v+eOc=Bfa6u^*E-YD0=-IVM{?xAyn+qZ$Yckm&m9h(#D@ zOyuDY9v|!D;?W6wf9-Fa*E!0sWB;Ojzah;9vaS_;FgJ>2nW{Ea2Sj^wjY<0}Y}f}i zR@K5YDZ6w_D2V@u{U+mTO22lbBff*Pb*aOPzPPP1=m-yW$b96F!=8U1F*)pADtn}3 zAIE>3tnHEdy-&~&XI(2Fp|P`|{-{BZ%ioa`O3VZ2R#a}IT)c&^&Pc{4WlhR zr~GZ|@;It<&`6*EL7!@?a<;TDYYr-3ReL|RiT`Q5*4HnpeJMVOK71N!ryoO%AAWNe zo-_3<=2vrQz%zEiVj%krczDJOI{4<}&v;Sz$|TlkfHf-l6v5_n)@gi}a@J<*vC_rP z&q@KVBg?6WbQoUo1OB5n%=ugRJ!7+T*78lx`GfZ0*i$s3o3)`ph zQLEG44Xm|sJi{3N6fD=wfEU1@#0%Qs1%C=I!TvviO)?z(jce~E9=Tuw&mSQl@hI}I zgL}f=M7}c2f8r~L`QL`;XFSV1h@70^S|+ir%}m@oX}+($F>)k#Ida)l_euCOLy2BT z@d%1v37FJe*23&S_Q05YqWBAMfnQ73jRy(`#sY;$#&os=&$*^xpBX6F7t}Mq{C-sQ zhHny?c!hg}*p%guBV!A#{<#x|xRd}fDWTL#CkSrpy8GRelXXSuRbl1irtCXa%cX9$ z?f#lJ&c4oZ>(a!GC!a0Hl8=;S=ZG+Gq&iZ&px05{QO$QLeZW}s6&KAR6XTqnY5KT_ z4uDVEuRp?mFqkKw+mh_N6@MeSzU=$#le3QYh=qdom0fP6AUKFe%lKUAkcwgdiN4~%y=M7!Pca-OZ2W;pEGud6iNbU4>Z1#0dZC|(dL$lF8scnlsGKrHem+*0=ytN^loIsaqIEE_J+&19pK7Zf9=Zb@{;~G-{?VR_{w3W> zb#YE|&<8U8#pX2ndwh%cFt+u2%@6!QG%A_5_$ASAs`LW*Fc!2Zzq12fg4dA!yfONKPH^YmGTZW$(gV@Dm#H)?5W>h~M zdD9YbZeVZup5j)l?UNW&Q+5d5Y}6aWeiJy)E?vzS8`z6UFM1F^#u>;!oW$s+QWk-=rmduq*?&KqxJe$u%nS3_aXYrZENArkG8E@kwz34_h zpXKvWK9cFv`7Gq4aR>5SrvTSf;+7k=FRw4K$70MHKl@NOh7U~pTX;2lAnHs(t7FtN zQGGk)W=oiH2NH~*^QR{D3^|IGVz24X@z|_U&%xIE_kTEcWUP7AGuXB|tNIVLj?6_5 zNwL2N7X8*UGr$}5*_gA-*fU?_+%%=l87WxKN#IcLiw@O>WIlV1eR}8c{88T?dbqjY z8=K$nHJIBEizdX|j(tpPlyOx31)@E{SA%U3*c|#hJjQ$pM)(r4&gW+#Vvj=BljWcV z-?#RZg$MB*#l7rfoF}$5UL7a#f&PClR>!aYup=H(pN9U0lNZCIUdypJ_x-@1(f2ps zqJ8rAjtCyLTN_)D_BAH^Enp=s?oH#q`OoNk_$}H(uKN9O-obb?@^_-W^;>J0x3p7I z4Cvt(kiCDx&MA5rV+@+-IbV70h-{0}ODZur6?shDgV({nP5f+IFyzSY*#!@8ffD}$!kWoM3T@!W<${-M(|?V7LOPUQ)7qrVUI1M6X^}o^=<_2dU(6y zi{S4i@uAy*Kb)LH`#tbny6EfJ?PK1Y6)VYR>|jFW=Co73awr_Kspp;<;YxsBJ&2{${PAUPLNfth;ktInuMO zd@L2?9IS2SS!>A|>4Gm@&b>^%Z$Id~pE=5IqDCtBuvgZ>H^Z0kJKu!Ok!QJX`VQCB z4%0d5u|3<$;UxEv9Wg$tPi9QN^Dh&|g?`xL*Mg|ptrK6HV_vB@M(1$|zvyXC!}|_K zGnW>>fe*{q(+c1`@qgHR7bv-^^Un92dRKLU3P-jTFWs2}w@?G^NhPD)C=>4FfCWgP zj0>zJO3Yn87-0#}x-Q!!i)2{WN6*$Xl)76&hGuk#g$;&`3rsx37bhhUdVua&55Pc3 zW>hX&w&X#|*tzuc|s{?{9y5?{9yv{q1iP)6X80=+E&c zI?Fa-=Mpy{J9lWoAiih#{WQ;0JkL$@Jje6mG|!7XFHQ5j#PgXvSH91wZO`Q0EZ!+E z)YNygcsHAOWpux(?`HFkec?8|>O&*+Re9Y`q3>DzMbeA#`531O|3yY8kom>Rw(gY+ zIaf*?wa%3e&ik+_R)VhL)v$4n(~D@O?6B7Yy=V=|AHo_rMy%e`0s55VK{wD!x;fEx zAKlV+piL(@f(_1p2p!j06VPogxXR?iYfNs{L^tby+7v!Z9;xaP>&M7kF+qMEbT|Gp z{HLqe8s+&(UkXgttMsmPuMhHz%Xc5^cCUodoD0uc(6Zu7isx}22OCuQro0H>UjyGC zRKS-p(0+&RP;q~aypQ0S08ht1LSKlv2Y(m*g=?C38E=_M(uZWP55+n@noGyJ>H5)* z`jJ~T*3Hz8vM#t^<2Igy=ggY?7wFO0eZ_zns|M@UJJLyoJg+V{nUL>1*LjvKZKS+w zP3E34#)Wd{joGm%gv(8ucJj0_&i$qAO2&iticVASKL_j_?H8NZ!YlFj-vbP9 zxhd3mwkLuu911@33f=?2)V`$VF4bU;^t;Kp-Zs{q9Vjo?5&R^SqhFcEN^=VJboNs7 zp|L)d_KM6Kdr+oGy93}{^ySM6C`-TjRGvG{w`h6>2*P)+~Gs;(p4mKLEho9&|`51KXuEu8ozlQEo(fAaZbJ>8%^bhs#;|=aQu{KIt z8`KxPytDPYG>8!(#xBgJioC}d{>}}IVin0TZ ztBq5?x}EWT{Fk3-6&m4f2X`HW$NW|+>4&#Dj^9>J^X7~uIn11|j^>l_9sDEIw>C97 zUUY6>ccbR&j2V59J)NogCRv9^huT}gmac?f&w3jh+2*E33OLEqGu>oqZ&xx+`k?Gy zmwcxK3MMRxW9eCg+&ZfnjV{;%9+XY_0*e&aJ))O!j6pUNKDN>*QS0 z(*^WbCjc*S%&GsZ^~Pkv zgYPKr7xxZE{X&l~FgFS0tMCvXE%ot;6!YYeb3kzU{y6J@kL#>F%KRT@{to}2=yi^B z4eu{+x%F#~LMw-h^>7dLa`KJVi*$>%rtO!0X?pJ_h7 z$!CVo2l&kLnSe(AobQU4)*gs#Lis8x&PSdNxJTac;L%O#J}XV5NgMojd%y4HcY@#I zJ$ip1zmxn<_I`hZ-=9o?f>F*|G&0DVceK*@R2J|bIM+=UYkRoA%lYOP@c9JQ3yv0pJ^PE*J>QX>(VnB$ znc~s{^h(+*S-ahhbX(1T1H9DFd-+r!@8eVb`v#xt+x>j1U*F_YeR_aT_2 zOFaLF7~4aP?F;1BIzG10Lp-*U-J%7_a^3H#@koY}vCs>!HRkCWb4xkhZ*9km^6?xb zE9}!#C!PoG-&z>d)m-QvBK?l%BUu@-zvDTH+w7m0H1l%2E#PQwbmltFvvtGHXl^tw zK~?qxxZ)3V@e3-yt6(~nW=HEM8E}5Bre|xhKbrU=pj*mjD65=V37%;kWo

-D{%% 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 rCLum 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 z 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%0DM1GDZ2^Vq}u<> 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�euh#4; z@YGp~&DmdG!ullq$xk6XS(&ZeKT!TIa5jDi{onYEv4=K2#y!SxMk8`IFbtaO1H@D6 z9yvIvmAm+7j13>mAu#pFmSk+|zsAwm7#q+FbLm~!r}lUsy{|I1CD+YkY}l<28(YVn zv#|-YPyPsFn|ickgDz{wCi}oUjctg=b{Tn@$;mwbJ@_bDk6UHaPcr`!)bEJc5?@VY9aBgP~<)GegVRhK2uJ9(slrjLvRp zJlN=#J0LV$^65XvjI5k z3~|X}n(rI4d)!-$zqm4&wC8*jJX<_U{)GfQv%#^AUG$P0Wb=KlEc-?W`6I*&O->~2 z-I5U>=)fj1h4_DdH#A@M5r-1ky})w=HtojDOkjn6iyhU@v={ni@j>A49qC|KmtLFQ zVQi&>Wn=m|lOythd$A+)&9J^9TWIFFvSLCSu!qVnD!aUV7uxFt&Y7Qicvi;9mDdB` zUB|5}?W#W%zJje_%sH9|;hSLW+E*$VPm<39xZ1#1YtD#x#WosGR&>^Q8aj&4BrlWW zeLuCr`+jz{=i5c?52LTA_j$SaUay|9UA7dTMtnAKo_mmI$v$8w+6(f5$e+-_xe9eT zc#?CVe9;K`kva+^9j$eet-(!ZIX;;KWyQ|s(tAt}CFSu9B@UDYyQ$}Q6qay?jNsdE z(E|6|Q)%-Y-b=0|_F@Ts0-eh@&y}A*{Jnv-Mr)Mp%^~1fpV(V&itjDUPtXKRgTPuo zoH03Y$+gat3H|+SryVXt@Dc-*D`@(hYTo!up+P`3-E)?}nDw zrXm(NEwf59=%|6%A#^dx)m#>^gU_s^B( zs})`QyjtsheQK_IKQt{m7k!I{54ZK(Y3MYAeGs_z1D*|>iDMHRr@jeyf=vVPmH(z8 zeV{B_4h!z7SruBY+Vw@l#wN4T7T=3^YE4KGICaEeJ8L*=3BI)JPP{V={OJ-CFkE}0Kj zc9!8SqD9%H9=He?w|AC9H?P3%y{ue;*&O%5hw)eOp5lT+xmhLc4Gl5Bw*r%!YGCq% z8kl^h1}45-DBf6s#i4w$7Z#O#=sqmuBR>*61Yf~G<39v8f(7uAtSK5)jx)uUZ9oeF%;rJkHk&!=cXO2L-BY7{B?uFwIfMW}A^y#UweR}>l;FpWCj>lQQ zncwYEcu^d=koD}Mkk+#ap2a$5BM%z6FkX=h6$9FE*tdd5@hzPzqBYUd_iDcNDmG=m zU+{-bz8v=N*q7fXf8iUJ%rDtXa(*2!5iL)Jme(hd*|JLvPJ{!k&2^$dWUttqXUgKu zORk$+=z!jDfq#m39)eeJ+L~R7j3fCH{~Yg1#KK}(ey6lpj{;& z#+rvF7LwmbMl1T&5?~GNy)l^@-jb>K+->A6+p73$jcg>Il7TlTkc}+-w9Xz+HdqT@ zC!9#$4<%+IFI3{sgolbu-&qpxmfj^FSqFYw%^%sKWXCeR7u`%eNP3rSy~aKdKW;ii z|5{4i*)rslxo!r2m_v`!`lh&yzH~78Z{DVZp>tJquw~U)v{hb+HZ%{#lj^t@|Ji^Z zCtXN(tB-=4HT|n_w<>U-2i!B{h!ng9f7#$Oz}$!RFkr0tE$X{k>AFXNvwWsUg7YiNbr&4cx6J?>Wjl5QV>772`=HIB7S`6n(!XLO7ft^S)<=f* zGGOh~DzMsQ;RwqDw;*dlE`dEE51&o$srZ4gB}h(rXmiERa!<2^ex`LI>FF#fI{{zM z_u3EsjXCr6+VAK1KKj-)`7SJYim@5M%hSXYptFc~NCumF`5dEfNDlLLtXsY(pZ}3; z1pBJ-G?IZ8x6x}Oko+q;GdvvL+%OIP!@Smdc3LBPs;MjXfzztITlN9PYhK<*-!G%@ z#xCIZUuzNlfAHR_9pLhLZ|l2>RXCyzV4smkeYxu|)%PLv{czp?px%!>DSe;(kq54= zA42TPSQ9%YUDVh8=dH)rZp}9~fIwn?fjF%~C_TSWmziIv&(7!h`GqmeG085He@1HV zW#DD-9q~HosMwmvr-^P$$Ol6z9d~f$2uZgg6s!Y z;yH89jBEqa`yWK-mmT2|p0V=Jm1L*WI}hHwuPnQQo|j!g@|50@EkU*gEAw1Qwgu?` zv(el2&f|PTb_KmNJKbwnP#cHX74QYit}ru+T%5$NfZhh38-K4|wJRu}xMbAL*yazJ zN6`6?mFwK9(m8env!B4K(7I?+@}Aa4&8Nyd!hTRYkDyK8e(+1$c#t-tgNBp_H4Z^f zKRWw?^2mz^O4s-82ip5!*7RzOkLI3mqIKZgQ!9NDKBe~?dja~DbSJIVTB8;7X5y%r zpW*cLX6|W?@z0+0X<2hQ>^xttwF$@`AiY&K0oel-t1dZ9_5nNlq|v2h8<37An}G24 z;KR&WqmMmTmQ6sm0PTxtOg>*${GwnfomFR2)aq00-)i|JFdK9HkkXibhr&#_dMBH} z#|`eVd$UF>PD=8o{n3s>dlvmGhu+0_rT1?j2CX66ub`Me@fyKT@>R#>*!`}XRnT*S zM@6=g4{j+o0ILw<`5g4B{JwrXq2MQ&^~*kAmRu{_pzJfD1mom8=6sk$ML+O$-}`7! z@qv;H4v!C%5Bx6@9|*1g7+8jZWwvEVDH}c%mhYtV|AD;a??`_}KZX8M75dYh&|FYV zpKM&x?WNC~@n%;T8WYWl-h7?D5_^q(N^+#(|Ii$Cs`bOy>)%PAmo6`UQqkwPoB2JG z|3y~~nFHkp+Iv7Wh#udRL+^(MWjASp4lD7q#B5=sGPGBK`leI4WxlBbcYMQehCXhAacRA8Zf9Exj^9PN)yI=SE?`qJ7dok!!BEoVdKIm275 zdsdW(L5~)3YtoT7W}b5`oA@Q@OSCCoegD1ED=WI?cZ1j)@a0F8_qDr^~L|Q8U(b%~-!)9c#Ztuie5QuhAi}C2W8vYOGpAeVswJIq7s7uk^Kp zW0e1fF>WAkRJz;79D8EW+r&o|v!=OZwJ$3RE?P?k6X8<)&sx8tEW4%F2+Lk&Y!9+k zG%mnT11zM!SeaQR!9aY+z(BAd9`FI~8M}?vnh3Tb^aG>wSrr|7J21Eq82C7retkY; z|6}^~k#yp-5Bt^`NAayA>FR^|R^r5}-jb;5Eq1#*1HGj`x}kKJXciq2-DL*4ORcUb z9a6qH*>^@};XP5-cyQBD#jEV7htM$cknzVkT4Q_taq`2-A18bYH{w^)PsZ@w!~Jp6 z`-D5;{7?1AjY)$)>+Sxycm|!;I#fpyJ^uio+~NK>(R&Cy%Le1?fzk=(k9(3F-Ps|B z>4LyBGrFn^0!y8XeTXgy91r?5f#W0O&=+s?ZCC!h_`k)c`4wR3&zCvU4bVMq1}0V% znMrYH#Jfl?*%;k}oF~1YDqFLL=CJcf{}69bE}Ws*U>;Zk|G0eaA-0`^yb`;P_=Idb zdR8)r)@$hnL+2n@pchEDk!?r+HzC&r%{Awusvd;D3cJ;5gNU!M)(xh{u2Zf1nHqmb zwQi!8U1taM@{z;FdLH9^8@}O#{+yA{umrxZwe1%8eh6Nt`OrAJGJhnGX?+tfG<=`2 ziH9~W!mgSicJ-cR>_J#s7GKm{lHFRo?I2GZz0~l(ItzOtG%lSeROMyQ(%<(U*59W8 z=KUq{LN6^q;iX3r%sWp zB$Y4MrS_JU-yxLh?W4w+uI3PVr?v$rjrBUV8iZfI z6Hfoqxmkr%E?Cnpyl#m7!u-`@A~Z2f2XE#?$2`Rsf*5N92X5?7Fay8Nr?QcrwZ zIr`TOJ;@~(PRkP?kllBp*GL}e;7G?ineu2nvT#uiiJxr6z1=$ClkP}({1 z6Hal!P4tQHp9ily4;jhcktxuR;=_ro_YLy(_dvIG@aH;$HkOA1?!sXg7B;nASZIu0 zSO}ctcqa{WyoX~MY-%qY_4DHWnhP6ZJ6+{E^LeU#?OHpIrEd*8EB)fk+=6|2wNJ?` zvDhK^cjV6f1hUwBSUbAdm-BFf_LF-&|GRxXvmx<>`|q^XyT(-DAU^tK;wnE{g~PuA zhnc{k76xtkbtS=o@n?a@^hkbsHZs&%#Ml>U?0&nNbN*P)ZhYtu8jpDWduZeNzpKKT zKAUgnv)4g)3^M$8XVCjGFKlom>y578EpZT(Qzw&~p&svYI#NLvf z-dma;BgWm5+-!Bn#v-$)_myH}_m(Z_s3CoW`|X>EQND|4GkA9Ii=&|wFX$0kA@<@ea? zb*0z|#JoCpxyt*Zv%$8-IttPG>q^ltP(DWar*-W6C0-lfZ8)1j7SELRZX~w0^mw|X zkWY3Ly7C>wo80BTNI&XRce%mAuc8+f0{Kk&!_bXQJh)<)R}-K7|4=J- z`6HAMQ$9o)N%31zLDlvCC1OhnIC9LxKLgBa|izTV%~SE*-QfdTpn+sIkj+ zXSV~dDm-*nqhK*6raiP1iX(t&Aa+q9&UFCTe4cmS{F*Y3dmp2GlyVtmEag(lC6tRP zV<;C-;dnfYd&1*8#h{Y0CY?Nc!|Ho*>?1;KX_?eqi8)oM$r+G#75KKCk=!^V5b^ z=En)Kivr*wOig?sc^g@;lUw=zV5hi`Z)iU0JMXQ|pX2G@?Ub)jzDBu~GLV8CdQ|5# z^$^$W^R`HW^#S|&E8z51`t~|}J;Ycd6pcw|YS{3=f&8Z2P}Wd@eQf zBb=ZHM&Z%a{i&O&;d9}E)bP3RvDD0uu-5*;*xz@JAr5vRc&J$iUII?Ptm4pL2Zk6u zdt$S`5#w6l5L|}vJ>tKbh1(d{%rW{tvB()G&8&aTZ^kz>kPwR zZhrfB=5hboKJL%pepes&@8Eu}x%WFh-TPzcYo5%gK3_XeMli1QyZp|WKE87j--*A= z?}YmJPL%JwGT_~ftE>8a?YQ0&e4gn2j*qWza(_)9_l3tfeYE>H{kgS|`vf`=9 z!GA;_{Uo-(JJ!c{@TYf2`ndl%&%eIu?c=(M`!DwIz3;zp0P=o!q~wkNb7_LYEREA7>h>U*VFSNMyW>1t1#nN{&!DLgk(iGkYslo<(HJJD5LK0=}9|1 zJyDXz@*?kV17WxFTjMur|64shOYiOJ8OQTi@m!v|mG|}AHiBFSuIcG{ z?Av^o-*!SU_pR#bNpUYnx#xfyo%Wbe0z0{azZ%&%HW4E%$PUmSy@f&GR zo%PBZ?8J^|_-y-+UWz}{-x`51^w(_j@u&M+Z?ee$HQO9Zn+p)=|C(*?+uz^H3bq%Y z`SM`!naC?1C0mj|+)k`{X;cdQCCM8hTv>|I0AJwD%5c5|XQ?*EmJ<^N&Yk6@5c$8> zoP3fieZC=mm%GG?xl2wQ>PGS_%FztxJjN?~CVl)4);c=#M=y<~4-piY|H?je?dxwn z9<=!5Y!__b_r=$hPKb?0WIvi zR=haviggv=dJG?XjJzh$+frz1PHJIk0W^~3em+VpM)EHFMfl>mpR(4xq?}ukIP?b1 z3FgY<8iOVk^Qv=2$MNh~o*k2yy~447j~u5s={6Uhlv!K4iuj1Jv^9or+wp&pjR?+q zT@m;O?O1StV3CNCgOzVi8fz z^JC(R%l5g#3w{@?xrn?U9)X?W6wWlznLIj^D-ge^(D5VW^p%{uL{4DY`OiyUY|iP? z`5{rpaAIzLVK(`>$;VR|$aqE~=MPG;@0dPW;)~b~@n04_zJDC`OVrKO=tIcguh&SMvamV)Hj&ISVRWa!*Z1`BH}%k9ZK#buF*yV9z2 z2LiLz*PiNT8yei9oT0Sp`cvFy&Z*J)Up=Y)#m?JLb*<#52l(fNExrCUcgv@o{!jjc z?5@ugt<;SJdQuGm<%iw+C8vK+s(ygJrI^B{w+}P<0_~Y|3ijMNg~hW^bL%;a=-|8Q z8wWi34c=kDQNy&ECLdZleP`)}YF_Cj=uQhMizr#jU6ea1y0?HbpE8d!mokSkn=*?s zlQM(SL77fzr(`JKpxieZkq#Ew2Hd+AU@PI=qb|owcijp7U|)?) zEQZ`W3oMl_$&~hvT~XWstQB)H$yFQD=qF;`4d2A(=#p<6S|7=M(R;vpUvcG~!`P=bwQ#LyA$?OJW$IL6PKN)T&lIf8 zrwdl@hJuy-T;T@u+x3OdW*3%jayavmXKu|cWDYDWi8hs!EDwIhvj6VNIkG*DWzQb8 z&z^*6Y6WxllEM|Aufze_Pa z*x1@q#$^sa$yu_eo`k>M@otYXhw{9aVO}MP!FsFb7s@*{Ew!*v&+j9mouzxZ*T(y; zF7wr@_%*M}V?>4;Ps@Ov8lPR~6Zw2F1+zUCACxm`=4DWxI-y}1HUdfi$RQKTr zu$x+~(_PMX!~P4-TJJ0^0++S-b#K98_!Vy1@7=9Ei1`#Y%J{O!Y+P^P+FQ0ary8wE~@XRk`*lDG|#_n>T`^sy- z&>Epu@z9ms!Ud>xzmk>+<=vrO(C}78+^8qK#0B z*y}j-Lcc^CKK}2Z&ux6mvaT$mXSbOAR`ARUzUGwfl1#t1vR3A9i&_);UwKAGB(kN! zUt3p_Eqr)xOhNYW6Ui%RTc2o_95ayh%t}F1Ij6(UIZI?KADPSoGh|<5OPN#*Sd*H` zbsNR3@NJUo6eeVt5SCpM3@E!f{D z=!@0ze)_LI?Wa%8TsK>jn_Fq;IIfT5TDF;iTo2?L8yj|NBW6Ox;F} z>W5uzV)292XHjD_#jZB7crNt?)N$(LsL!H)A9Wk`AnMbpu}A4_5o4P=mAYbwRDUKk zpJeQ66N@qK$9YcpJcoKP^|{n7)Cp?gb2K%!Xyk^8;9fK^u_$~VOC6;ic3v-Dz-_na z={fG(4b8<*F{f;+fAN#l;@y$x!k2enZ2dy{=@i!!vDUt$@Pc1 z7VVzL^@q3?U44XW?zJ@1hat?ZuhPF5*Z)9WPt92ye0xIie8$1KvEWASwVU=n#65hR z#h|&@VeXCK-carx&$rHjK3ll{AlGMcJ(BAWbA1Na=W+cZu7`2`5w1_A_WN)-*XqMK zYK@cC`eVatzCN(1)(6>qSZBp}K zuFvQC0U_A-)KWj?!dwbNkN%U<}bA;c{;rd*z`*EG% zdNkMdTx*?RO=u2stu?@=7N4I&-(&~%;i~@)KcEhMpck%~hYmi2OxNDQ^;_xp7+ z*M7fZT>JfcKi7W0TDU%ewXK4miOt8=^sAZQ{C-8b_WSi7uKj+6xmJG~sf8bMn77nb z;d@FIzStI9Zat?L{v-I^$6uIdYS%)|r=EDQ@FBi8X6QQfn~E%`bx`k(sQC`Me)llD z;s+7W-^>2^!8N~wi|$6~c?k5*8R+n)$;G|&MS0d=$EM=1`HZcbxrR?^ax*w){hQ3X zIl1``u8~8GjB*>-$Qwrfn8x)9tRa>8Hlg`eV8&d-H#NEWW`1L?;jfz9{6(&rYenW< z^B1^AzA>`TXSvpVYh>*G@{{rTInAr+yWiJ(epg?a`z=BGhMZPxbR>&X@{YHXXEQtd zTU{)kvbBU@w6|iny&pj*3Uhn)7|VJQ0VvUAS*--ZJjABZmnfqEHhy&LB@%nxj}7&e zOF6R&nKzI?o{TL}<=W%iF=lI->Zd6Luz3){^qVriB{V(w<%_n(pMY`Kd| zfh773bR+xW*erQcW0gD)%BgJS$umHEitmsO@EFDz%;2k(EbpLu=E!?JY?!OP2a9@YAzK7_0kiJK%eIFB-9I~=Bf@ed~CB(7ld^Y@h?y|aU zFzAL-%j)jEpu-Kh%Z}X~Yj+#t5>SG(D ztLsA1)yLK)iD^csNhB7c3oR^dj{EjZ^cLV|?3v_&6YO>ZJH;Of_JZG+)pz>6pZPO# zQ-5nIbR$}@G7}4S3jEPttMe}<0B|5izpVu4%LY$z>v&%=yx}PNV9fE({q$?UVD0zn z*@uODphdV69@>EYU|_14xMZH#q8K_`96I7VgQCDXc0GP!Vw&gmi!gUEG}cC3EQ;s2ZLkQOym{)kAM`W9dpjh$oL}SmQHntSQizB!;`dj z(WegP>XJFgjHh!CdrtU+)HA3@QctJ;Fm;CdJnB2BKSYf^2U%&NvBmk{8e09v5Ps7) z-cPM>NaxWvD~;ex<006Dha>k$?he@M)A*vr7-ZLdi|4TC z7T=_nZTAgoY`VrSC;RSe{4d+?tJI>AuLD1g={EjXf4)ks{`>>A`txOK^+#)_`g1e2 z`tv2~P;7NsbDjxmz9qR%-(udFZ%O~sw_r`?TgcqzTksC^Em)HI7CJzS8CzUq^Wi?B zneQ2RzuWIwd~Y_iEIx!jaUhx{2Ml!9;5gn@Y3LfhS`SUvMcG3DJ^!z%ul+(}3B^~G zm5Z$(V z1S}%7QLyDrdAH9q57W@#?#Al6bZg7+^L=Ip2TJ?8yS?7)`ptDc*Ew_k-se8|xzBy> zbDwkaeWW#)3`x(n!3(f;^^-CUZ*4HCXnGZNK ztKmKMUCvYH8qdxWS-_Fqt91Qgc(vB|I`dfycLMy@gXf#SWTD%qPpx~hH_xPOc#L@e zo6MgH1D#G`?Wa4=`)PAKX+z}II^urtVKCqRn)xokFnHG!=#l;h<=2>^4dzs6<>$Yn+@E{2aH~5?{Tg%F?t0_I#nqT| za5d(BimNflySm;uVJ@tt-^aAZLN*`S6876gI{wX)H%{K>#X%#S?OK@GzVGG|8bMs( zo{5)7d(1U<4|F2GbjYF=U-a3W_;@h2ZPdrPESH`ouDrX6KW{lM(84@B>?E5P?88=Q}CW1Wxu z0ADYIHX^LiLg)mgi^N7+dp#%S(;u4m>I?n9^IMaRK}L|~ssF#UfwjU}ZLpu2Y;bSz zTWv^y_e?rB-vaOR9ysCQKM8&e=o|coz`g8cy}i;wa4Z=pjqDN~U~Xo$ve?i8gDD&SKqs3G+qN zgvZ;+3)24@n{q!$vGDtr#)MC(c`yo$dJfK%N^SCsDr zYn1dW(3=ZZ!Ku1}2K$rLEtvl^@Tz@+SM7hv<0BpJmpuOQMc$zF+uH&r<8)*0_~JKC z{yp(q{&BLg0><1q^k~kL!7cVde0iE_PH^_q*fuJiweBw}^QY``?!@u~XN##dM$|Rp z(5Sh|J1^dpBz^QD?eHUxBr{(DBq9ye#9sF`3T=(K3EDmg}i<9Y5p%a1nag@$+x0a(vNJeyV$<&yWC5g zpf7=6>maQqDrt{oi5B+HwSQy8;HR8TKo{d+H}AbQ??OXYhTiGE{Mjl$z*R=xJjW;NU`6H3}{4=YopfYP+}u+ znPk^4Dc>T#4SaX-pjeIxoUC%e4?>avAHpZ^uYvsF|?<&4|d~v?ze1h|j_*(cr!l&}lt&TPGeTeUa zd>`OLw>tKIzW4E=TOEt>UB-uQb?j2UM!rk<=J3ttYv6kiAG*~ucb(6|Ka;PH&*T#v zvdexqpX$0$vQ(NrOaAe;FEAEVL5j6e`dzdp zx!32V!=LHnqCLhryq-H!v*pMhdwBc(g(o>j?ltIy8V&vaWar;;wO?65y{y-~yb6cs)Jo=6|9ugBwOy3&w={g=GTITN-!4FQ zn~VQ__-pXT@z29Q6@L}}YW!31PsNYCC;cpXyoCD>+}UQ_qa)Tr(9lBnThu3<`APRp z>bnGgBmSrGUyA>|_y_S{f&WVUe~W(_{&(Vk9Dfad)$vvQs^iPJ;vLUYZV}$^5mtnE zH~u2L)O`kC)m?;Fb*ro=aRp;l35=}y&cFy;JOd*M&%mhpwg@9S`ZF*>uU@&=P+loN zqfGSI3&8CHtxJJ*0k~b@?c2oh&%>`WtMFIjSD91squcWKZ8)b#Uiw@8xvATk4?o;P zntxzD*^GY|{zvdP;eQza2XR4u`2Dyu$+vt~zK`GO^>H4Kub?k1!hxXJ@8fSTN%uVI<`?2J#LX_@ zaUVs$tFeuqv+720cM1MR{H!gYsRhvef~srqUxEKh{8!LUwCId zRf~Rm>=^Ql+QY|Bgca=)XDFbcc%!7QPlYgnKn^5BXXOY0!U0x+e(AYbM;};$^Yy5zpjurPTJ{DqZeiHcA|889Y)(u zp^=WLu?}VS3c{DeM5+m2#$fNI;@wP)yYR1rL9C*I2)afu>4wFX_`izq6Qq9yrm>gF zvXgR5^7WB!DP?z%rkV}XW8^tPIB$^{E#%R;$f(xZhSnt9WizNbG2u2@$crh>&&G&k z>&Re#E|o?u9z-5PzU)b&W3li{SA=fJS8nb36lr_nn?|3?Z1nUi|G+(=6PRmzBg;8c zn(}nGnF?%qV#BUsB&TF1VgH8hknTp1Eb249e;h-!+Dgie07ok@36}SRZ^;VcBk;Bn z>O=MfrWE#%_n_xx-WF^j=EFdWxI$Xe9cB;u#X!b-5xzYFjPBY5Fvp}D)>-JSqpz9V z9gU3eMtr05Z_$m8-Zk13H0@18jrJSBa`1WJHIGS`JmugIt;rtzvU!SSXv3|9?+32r zl=(4idkXC-H};IS1D_`+uqH$g<*@INMYi|m-bf0YGSVx*^s>Ue+F1*XL0}IgS>JX7 zXWVkTf!7Z{&fxhy)*k45q$jgw^eH2c=chB<9G&CtGm?&Bc6)e!cDC^R67s^5DbHR8 zp0S!6|O=<#CU zxgPnf8oW1QTUvwOv@9_&8p#ZdPDl>$Zo$B4dFKH46%LG6qz6WQQSL)y9n%5~*w=Ay zFZQ`Z?CC7VCN)E!TK&2Go&CAJ(Av_Cz&{zd=p)(U1Y+E`V-9%lP-?sc2m7*Zn+I;Fspu*VS(SBHzOmn4w{}A$eGmNxC7lplKX(Hfm|;z zHL%vMr~adqlOX+4VC_u;kHxw@BX=NIy;!>Yfm~<9Ku&gzE1Cy#D;M%V)0^EL?a#eV z-f`e-C+~dfXd_==%|I?q`d-qmBW-HgKyKBp0oMJxqgnEGqG}6yE%Nq}cO7{TCi`>4 z7BVXNTcF{|q`MqT!|rB%gTllZlI*=h^;9Hk;1>3#ivyGg2?MKgduC&-Moy6*(y{^U3xH zIn}fMk=zFx3?r+$uu4z%gO##}n(+9$Ul~I8-f3X#2QJ7vwv0aR zpf5Wt;*+bfvqpAd-4V*H&US*INNfZBxdFbq0Xcm&>z~!RAm4Iu)=9bT^!0MeHq3Nx z3U@CUu@wG|Ubz0Bs3R`c#kVO}j&2_IUK=d<4+f3!y1DR}aFzScAoAYL;vu)WWu!5Z zw(HrL1B1o4g>NaewR8t>%4Oi2#+}ZbGUM^xz&{B5OS`t`Wbb2Gtk*2r8sW$G#E0#e zXTO)kpR@wl42f@gb^>W=b18K`P1}>uQJIguyW|a7l{ue!wm`2lGS_gI`3>14q}jx~ zbUJ@oT)+4=Z+P|j{kte@H))Q5i>05{9T#`H%q^3BR!?9>A#P)Nxn0mDcW7`shi-<^~!O1gYGUc1V% zZALc|2;!C*w^tQ$(yaHE`QJe~MI7|)z;>ShTWD|Z(DvMiNb_ORtfUUzLCZW@b~b9$WKLA27CL^5ga^*w$84uFhiX+~gKp>66^EYdOc*gF69_(%U4um%ag*+sP{) z)!cmXf{7UYzj1p`deHg6V~}3!vmj~1QOk)@ucv!t{R|I-cM}FY&8+<- zCrS2^9JGqCCeq5@Ic3o<=FGIs`|-18*)P=w| zkuu|i`I!6D7uVU6Q4^#K#JX&q{S%EgldjC%kcU;a8`h>=6LmI%H(!c&{64r%#$Ew# z?9yv>j%Po0=$z1ATWvx{pd9Q`a{=1x;aF`UzJhjdBfa(rBI5(2=+(#OE1yXj7G)4O zA=rN+M0(}bzS)_4#4BHzeCOihe*s4y(JX#Xw8?nC)*4xEwoE?J)XhV-C+EP z2H`uRbKTDpwBUc~HQ9CKy`#@^MT0u~uDewH7u=V96Pd5o6fc6uaJOF*@r{F?Of}kR zZqF?rR9|Y(Kyo{CbqsqQ_9Fz>wz8S_#t&R#OZI57p-t-d_6pP&_Q0s#VHYh;j$1SNdrg;;F9N-JaFhQ1#3d<{H(|h?X!dpo-F@vk(k-OyM#}N}2|nP9 zagVmyZBIz{*plBQ7i>vv&ke`6=PZl2Mw9uzDoflo{7QyCPV~PVro6Cq_poL4zbqJ^ z@f+c%DSIVlhjzd-)7x`zlFuKTm(@Lg5%|3U?|SfSv+YxqA)Xq9NBL9ec@{R<+ro3~ zFSBNOf-;6Fqc5>Nw~PD-N$Y3ah=;8+Xrqa3R_v2@J8>3iUMGHHl=FA7Bx8yB*yM~J z{A-*z(!kIA?6x7wa8@%vaRw~0CaQTKJ^9v-#p>(Z-Jc^5tt5@w@iY8=z$rX#mJKm{ zwgG%3kaL-PpaH7uAa%zq=3Uym+a?V>st4ZtjKTbDf|nHY zY?`#>(Rq;RU<27-GOD+YHU$5qP}h*r3K0 z^VUieS%fle%F|qaEDB#i@76%xcFNRxJ1++YXwt3jm40wZ+)~O7B<{9XQkT|2TJHsn z-ciw?c!Wh7&7tdRdUJgZy}5LAZ?1P)FFe6=KJ!!7oY;*Gkk$lW^}wfbG~GdNN%Wr( z-xj_1Qig21ioDG9k#;gV?K;{;+7|wG0nNdz`KjO4@TjUvDJ1Tb&JpV%#__um_?k%O(3@1_Gj+4 z$4!-Yv#UAU;Jn=H#4(pmg)Yk?L)~^8a0Z~&KveHArlO6>{xa6XQ?+k$9ZaaBKr8Hr z)UJdEB)fkEf8S#HZ+G{JFR&KZ9G*aiSV{RFeZFs>N1v>fYF8A}z6bwq;4_&=>qVc` zt-kZ3sbU-?r7u(AkhdD34bjse3S(E+D zlc#yJuoC+-!+1XDi$9MJbA1+FcWuKUZHWU@6g)=zbEAxpLE5nsI1}gK@JF6&>3ZDUVJ9{ z*0@*uMHBmgL*wCLXhXDK2d#e)o%5EuJpSGf>_z??!#_}~KE`KP|$=Tb5_$g+IpsL?KNF{=pqef2W%Su5E-Lqh96bEeeNy;#$c+ z?ZCKKytZ>-RCD9FmxgullslyRIfo{SyJ7 z!oO^$gm2A7(PUvhvK7xAj>s6rw%twJ8WwPGVd4w)J2o`XQubG;YiroYRsI@iMSC%; zm%VY)Cwh&o&W-R^P1>h6B;23TKJgcgm6!>A(KoVD7LO8-X#yVf_an^~a!;DI#$xz@ z#jp_UtZjM9mNu|GCvVo^#UY`Wd!bAM*aeIn!`^I_3?cNVF zPNRpx+g(%kT#2qW7MSu~;PA$?$#{;vK>5ijP2ez7&@oq_V-_ElU8oOTYngF}qj9Y< zoE)T0@jSm4O}+8!(_zuJ=;<}y^b?;9C$!F$4C>iJyA7WO-zoaWBAxX4MLn~zb@Zv| z77xd}jWm37fs^tr27e`bX5%crIfZ#AtUDpmt&nct@gGrtY2UFIcR*uVI%(;e(?faK zp8oae+NbBrf2*6M4CYc#2CVVu=yve%z|?VD^Rwj>Z7(HWv@hP`uX|*4H+6dUFy;Lx zbiYbr66jTPk>nnYXUQ1n%0J(u9V;``>!6$2fvokU zc*Cdd2y2Q6>j>FUiN4FA6UiguFY(t;pH#i-E6wq{c$ZeRw3;-(H5V94gMC18--7wz zzd9Fqygzy54A1vy37&su-=eVp;>`uj5#C(DJm6zKD9#0(Ng30;@5u&}p{Kg-xowPF z@xvaicVp6*Gp@mv`a=C6{vIOS<1gSqe6u<*RPV{vJ;!t>zuc)<1ml^hvD;=1}IY5<1*T+ZyS!3CMFN@V^$@>TKixc;-h= zU|A1*>`ph*+-L6`l3u?L{@Ita$glcC$(~$DuJ;Z?(f-_Z zxUx;w840ynw5YkZx)V3bz6rGF;UHnT+JA3I^ymJWcM$)(^Wh!ee``Mc-;^i&Gxdkp z7dCxCKWLq$eiB@oXFNEpLSK+JlmSlQsY&+d?p1$S{kiA#Mk9SJ9xEMwu}rOZM4!bz zR+*Z!Ri^05>tFJFW!m{ZzMV36QI`67kaA!Lt`zQcChZAH;7C5_>Mc%m z>TV>S9-Yx_xihG9XTowmck@0s5DVI$yIyWD^a4DEdF3_WK}QMiO?mK?37*)n^B6QR z!+e%90@7bPgRvo}c#m=sm%>LSaH!5;EPecRJdnL|Q6Rf_9`96L)oWkzp+I(4Q?FO< z?pXeQWA#UAo7AW0mUF65PO$Z@avuBef4&^Sb43B3i>}VY^Vok89+ji}n$MK;HsQgH zV2*gPKchE2_qvgVth4v8wok{;=4rA^5f3Ty2KvIQ2YiH$IC4UU{-HcylDoeWM{)t3y-FU; z1(L&~e!09i5`f;N{|vyB;18D<%aToviA{}U(LmaAv_}xve8ik0`EC#MUbUH@yRX%n zf%~$2u|2NF4|5oIlrz70@tX5)bxqPlY`q%<&g`;|b++^+k%M~c4%j-` z(@!39BJl_9gMa*0yAt|*HNGC1qAQENTy3Zmd7Jy0*e|aQ0YfV=u@{pKf&UpT${%3^+{=A2)PYRq7@Bo&WKd&cdsYH2)R6YHk&7^=`p`2e$|QfVhns zXVa|Y$#ZEIo#lCHHbTG2##1ya+=k+B(QK6PQkwmLiQ5SDsJ#@~V?|iMMxb+z^AL2{ z1|3$5E`fD^61pX=AKt=Pv?s)SInxY1LW??ESPmUO2d>XYlWzxa>_h%v@uso<`|$Sv zYOMbuarXW5;7s?awq)RC&`h4jI$YUXMZtA^Pr`;Z~KZ1sb9h7xNOpfa}_Kx~-ef$sTKjTy5)Nkw?Mdtzi+~U1+QBAqp`>UY-as!!|w``2)9@4** z(|cAv`N=2w``;PgEx^)B9<8_a#tM6mcG%c{BEWv4x1S1aVIyL{h;F3x&Ta8L$xIF4 z%NM^YD?0S<4M1MdJfVGWWcv|cJf78A9%Nd_m!M6_W6=At+#2c;AHH@m;mLi>5nlN5 z((oX98h`ZxphBu$rsjnlJ=Jc1@_a7OJ zg1a8Zq{gN4UhT7XDuvuKPgsKA7H2DGk^Cp}zQQ zD(ARpr!-D7hd=&GPW-;26Ig&(^eNny#g5U=7lHLYaFB1O;P=IDB<@Axj*aRpMrqu1 z@|VYkMm0{v!*r%RQan@Mxz^_VT&-}SJMgynxu14^J-C6Fkx%Q;AmwRnNCw3ectm(b z=3)K^?@@4(Ih^aFpS8}KHyKzszw66~A1@8pyzP%>^YlX*LCUX>s}HzW75q1xGl$2a zW$kq~)5l5R77Q_HNpg{FkelfLWrTMEUytA-t!ZF81%36g2ds6Qbnw1R%8nV^fsy?~ z{!0dIA#V?3G7wAI^^_$Uu8}b9Wr(*(Um{vkncCxTGV}HO4BkeE{>1OalWwA3;WS1% z$z)e0p;e>DHVJ!If_0H-1zglywmT3G+g+Qx?1zFO`@w-r?D=ul`QUEj&U(9p_>CLp z*blWe*iphC*j;CDBRoR64ZWjZ1|f$8)oZBf3ck!w+D_lzXm8wmk$q7+<;kuf@oX-bpl;FxO46wO(sVx3>5V$w(SUBZ zwuZJzhb}xz4;+C9E~n0V>a5AI=R!PV!_LdHJ$3_el8x10)5#+oYhAB28pqZ2$#mjP z;=cfYjF-|=IcI$-&rDIimG8@jG;XK02VK#KWD$SD8bYSuQ!ZLUemCHQ!Q_jhx@&}c zi9Eh28+7sMqKptgKB(~Mfj5DH!#kH={?^+@A!u0bXoyo+!g8MYA^N|M_1Xsw#x*j& zZ&17jyJ7ff47jw9&IA9||MR@*0#US$TN z$3}~CyT-IX`m9%8-j?Jxr*Qv4ZKxE_TGP;u`V4Iu)wG!0qF$r}>l{sbihOx1KVM z6mp1ob#$>UeQO2si1yY(;3P!*q(ju5g6xMpuJK-h9E07r9X5G))L2KpmyRPR9EV1o zUjdueR&~(bMC1b576g;jmFTgt_kUcnOtsp?TuwjP0p_qU^Q`()ZwVU4i+p`{#(-Xo z=SID^=m?W6qILCKamX=@U(pixTh)pWN-hbRl+8L!JWzUIwOulc=H)o?8W-C8kqrs+ zjJ=<{=gKLP zr$?AGCICYj{xaI@;SZTD5Jm1Q$Zmn?K@Ugj7f*Hr2bx>G{)fkDE#Imz`a-gsXiL2I zTzp6e5GS2vAkl|tsXCs&FG^#*I?jG>99kjF=v4H`k8RS8Aw2fgN&8r66S6C z2E2)XYL2W-Gv|>{>uBjNL}NAhC9nC7`)tkSm9gG4_<4)Q-sRDlWZ(#Cqofm$EVqz( zQr$Ld_{Y8RNk8kJEb!x$McFejfhGRxsFC@_XpnIyx$R&ETFV>&Z`{#t^7f(GWj{;0 zfVtnppYHtlSMVZzMO&dRWNBdIzGB)SoU{_BajJH6*AnwTG)G$9)8)x}$V0j#M{V9i zS?8|3battU^qQwz2Gy2!H*U!mTe2PZKY>RBJZTTWZ&=P=VD_bu%j1$WNl$&EckyD$ zpQ1tG&PTclowPZz1RIPzj=XV9+=Li%0qJm+Z~Ig_k65A#u9%tbIj3F0nNKCc;wU<`buP z?poXPaq-r?9l4dlPzr7Hr{;Vf#K4E%mNcI@&(>DG$^S_z86Zo47aqajU z@h`;fpe;taE0;_ox5;m<&l#z%+%oe#)?>Obn0q#hDjaC#_Cc z&OanJJGz_bY2H

`~lvEbdPLc0M0(mh_Qc`FhF!bUdH0ekt=z>l)`D;$03+IJ3WT zRULB~b+f1ZqQ6f1&9nERgR$Y`+SBy*pqZaE7is^w2rtdhxm(v@uPDHr>W?3T2S{E= zpCq{)olyY!M0UmAUKV>vn&;SKIZ$lF+uA3(k$tTnuusOC_TW&-zLr;)_RI6-{=WUE z(tWop-bQ)n?z=t9Jgs)C9J+9%TmNbMQ@peLxsOJ&eb@9lPweY;ihG{g15#f_3;TAZ z`76)KKO-K=26<=r3CfspD3X05b9OoEvtl`K2VXO2-xc6%FMGUge*k>Fo$`JczC_pO zw)cup2w&_M$7$~ik!<5RcvE|e^ijl{%3+ATh4*;cx#9T2`tjT{G+unXPaQCy z#a1Ad^|N*;+HeFILq!`7(WPuUBpYiS1qyVkJ;vfVI$v4JBmJAkqsmg59*q~qW3e2; z_4~>>cRUM5Z!F{fXJHZyf=OivCc&t(RL6g{tYZ6$Wfl3&x$PUsogQ1u7c}znpW6I% zP1LB2G?{CVX>)g1gG!Y2^^9{hFq--W*(e=YtQ z`0MbS_{;F4V-5%Lm*c+xKe{mY9r)3OglFQPh@bU+Sm&&{FUNatLT8>if9$&z&s^*3^kArW@{YOz@Ug!n+6N!}vdfpY@w(A18eH(6!|0CXbVw$Wz40 z4fui41-`25@B<@jmPA!6eqeNguWBBCVC3GBv(I+3FT=eddHk@xKXVVx2k;l~>Ukgj z;$1zL;V<5U(}=%#SI=zxrDwMAKe=wt3X>^AS$k$&nKJP5epz4z)h$xG9t7?q}I!VduxWV?={m zBo$huiv2q}CL__8^AjdLm%{2x!lH$+#$p)uW{+K(%Et8H z?DFK&*^yM1bH=PCy5TXF^KJGFb!T*t`xpHwbPBAWIh(0Fe@BdD8rcKgDe}(|V-4$g z_Tgfd^S?fd{W*GE-o)S@E5gz5N{;dFjaFHS(y}M`xTpym%se zBQ(_+;yf@kqA|US`xc}p@MOURb#i`I@nyc0eJytyDPHZ7ZUC|Kz}ktu**M`V3S}U6 zhEwM$L-8u(1Ef{_xn+olzn8d`CFPtC7R9TaS-%685amoKZpp`cxesx5_Fec*+;`$u z<4(n`!L7n=#GQ;A!<~d%kNXbX2HZ;AyWY{8H7PHIU;W=1=Wg*&zcJRC`p$`H0e^_k zVZyi|12L)7Vmjg z`mC28{Uc@nv{1J0JPfANxhC{0h9z2D=rUFue*#!VlSR6LUX7#$&q3cry1<~$N1)eC zLof7ikgzhs*39L8`uJLhvl@=tQWnjhCH=@v(3q#whu_C7UnS=nL+JOVs~w+r$T6+_ zeqlwzqg{_yYplHfN_uCF6O9+0EmA#Ro%~n*#X2=!igjw-jF;3IqE5>8=?th>=T(QC zVISYjL(Za)zH#zc^3fbHIY+s-_2?k_BH(F^Z_k|~jr2TP_exh|q~IG#bWUogvDV8! zZX9xMpbXA%%Kq2=Xmd~Y2h@GE?vQgD_w)zy;ro20AElE&A$Agg^6!BK2)C2>C?E~tC_3VZQJ=hl5k7++0Vt8zB6 zgGcRmRYi>__>8E9O~2)Sj&U3l9n$s)G{Bg5mwpObWLyV1kH8oX2NS)y)jr?=_a7%N zuLtafr)&n+TaYCrYbbwzHU_;0js9#~Asyqpz$es>bPhg!QhY*lRgiO6(xYoFVkGfr zpfSckfVOBKQ2Ty|<7=GP;(gd*^>}U8xEU6_$vhA9$4Lv0;74A$f>*jy=DZOjnlG=X zjx^-g-oP)CT@K6M+F{D^Xx~hucix!OU8|m5o7rs}&^5A#D;!Bi*0?bS6WRAtwsb&2 z-Tk0_4AL>rk0{L3rCQ3PH!?TpbS5z5mE+lV0}E*q+!3q(O>NAD(fx)yk-6jWV`%B9 z+2afw-*@8B1~laH;9+B*vy1=Y&Ad(IoHF*=lDj=UF1lsCG3iIQ?Afpx+jC>fp&#nu zPTUi^J0N0oo$&5<{n&R-xXa%dlP*qo#%d3Qb*6V0lG+{|1W&*l1P1|Qk;e9uzLa=D z9tWbW9m0W?$Qqpwm(5Y%B{^e`-8%ny`BnBmH)bE>%>`fL+U%GAc(uJJrg6MAw=Z$E zO`6>5o55?Ltv~kKy3hISIc?KgGnnKaSIW(oc`avv^5uU0d-t6w^M%A+jKeKwm6^xi zK4;l^%G8|om~dlkJrVZsvi?L+V*=Kn4pYR^-q@UZxI z;9(JXz-Bxr*<|Q5b@tF_uC>=BJ^IYs-4tj+Jcv69Pa2(xtYrP-7)CxF(L0l0`Hary z&+};Exx^>2TY4zBCvlCfdCQ{##&>Z%a+i|xQYz(~O6{}7&o1|1d+3DVj2OKqBxig8 zxRe*#7&|=`dIXNZw63hrv|Qa$ufFr%_KP!S63kg`XY<>m{GY|=OQw)Zug$)8N-u zj%u&!#?_eiPwvXj=l`&I$oWfLBk@pf32p~+b_cSzkphM^ynwQ6!S_BlRS1W z;o=uXp75Hn+Ts4?TFo)So93SY^UO-_yViei{KNZeE^Tf9Rb55gd#@x(S&a24xD?Jj zIkb~=TNZO(nlnfD=K23e!GZ81KKMMah;O$M#(iq|dvjam5*Nf@M!HNP&F#qk`dB(4x&mt@){;hpQ%J#|y2F;^S z5a;DD{NKfY(Sm1d!22%3;}3!BTzqh!Za(ZBe9S)ww|`n_(=OI7EyM|bm!E^PWFgHr zpojM>PJQcJn|)IC(!ai#M<24!fR+Yw$KE`Ba)K#aGL5%^+)@53Tr~bI#(`Xge^Y+o zzlAmx`{J5HUC=^p&6&E^Wgk3GUBb&yNnOI{clfVx)$vH7E`@)wP}hg3tJueL3U#fa zE`|LK|4U`6pYmU6LJ4FD$`h?B$uB zH`w#=(f1k49bjJfA=9UljBmo#w?XcY$}q2LZ@>E9H%@BLN8?3%1^1L0VeLozLbteo z=i{xXWtLlkEIa}EhQ8S2OR`pj*Bs^^iuexgE!Da&bN5-aQ+XD+U*+B7H}ubUt&uZ-~0J`d++D3<1Oh5Pxkd?)?}Yd-Y2--Q1U_B z_djS$=U45>{w47E1#VfV^<*f?7e~)sc=swDDznFvd%QfsLY^}6D7{}c97*db)~rv3 zxijh%>7vMLI`8YZEVuP$_WruC&6y_{Z*yB0Z=V|Ou)9~AJDqMs6ctQ*ivw7WCGZ_`GVd58N6Pky-}``Bf&;kYjQ z*o+?gS@1a&yV@SeAcN~{;*;BRvv6bdZxiR?bT5~;M`T;>24v&4lhNsuCppNTR)&3E zoBe0%(>`Rg$zB-w>Iqxd$zB+3Qd_R#4i(yiy!ashZ+CSz@IAniOkwAfX3r`~xKaU(?eX>#i>2HmFt#@{n z{MT64yfO*e|2W}VPxDsW86AV{j%4$ubJ)70t&;tlW2`6YfvXML)cM4Q)b`vrV-Gpa zgY20C^Fq?=UZ6nie*2rTwGQ?U*$VdfBiK98MyDYKKERRg(AZ7+>nLa5r2cIDo;OZ5 zP1YXh&FD_7tLwpA-0Z(5V;DCy)osr`(k)P`jc#ovfC2$4e589+P`G~+3L@kgVag5=<*ex zF|sN{J8kZ9N%mo<@nG(sj6R2R>`o{7R`3n4WzJ7E*uL~^d-$t|oN#KPU73C!TgyCN z$GZ+WbHQuNdmqiUT=8h`udb&r5{c}~+bXnTV>Nw{e$}?w`6EnLeKFncHPI z7+k^BQNty*EASA;EWs3I>_Q-wSU-n&e`(? zaA?xz828D8&yabGT@l-3i?;km+73i_*rLVPXlv`GkLFtch_rUG@_=2su zpc48$O8G|{S+}=5nyV|+^;h6{C-@2i}R({-QZK?Z(L@MezyIW^+pW?aVFM#@tEyad?i; zU!`?zSa-1Medz#a$MgnourP<{-o$v9c*{aJ5HP+SAA~-J7#}|JvObG|U)c@?;z4@= zyRsGVEBLlIcYO>w zJpLr%#s%&I?!<`K0iQV~+eUlHTLrCp@P~{l_sRfw@8kLiALg!4%{{)*Cy*hzlY;Rd zBd^vEn_{N@f53HYG4OwuFe?RpUd#IQPH5rUFRg_aYz<7XHTO0Hqc_*a=tJ6ZlyaMZ zM>dMQB{>p}GG<~oWPJ{_ok2c^kNZdO_wIqz{3v*LXSlNw+#j(yFC7Jsa|x&JICZOS z@gY73SSAbJcs9fx5A_B-o;I4C$xZRjyKhx_*1x+l>u3MXcXDD@^FmitG-kOwDO>ko zzS+tBOoQ0zWU%3}xwqE9euw&=F@f6>Uqt@yWX`s>qlePC_!Iahw!RJ67V`eXGa2FM zs&DMkJWcy{qtDm@?k3px+0B%H7gbjNC^`&!AV(9aI&hrSA%mZLNS zyqh)P@3J@L8tuwLm=D|1J!(sw{EXK&@G09^$;_g2$)kITzoLLUAM*cC_`k{|okgBO z;r$l38`#=5zJ;&h)bnTIc)SPRU%(mTG+erN9S@)vWDQcpt@R-_Lj(o(0dNJz?4-_(|)@00I81 zZa;C-N2-j+h%c3=D=GVG+Fw?P|040X@s;+IS7)03WKJ*k*Jf}i`qVu}<2H9c&~LJn z*L$JJ%l0!F=+o%WJ&z2ldCZO>Cz!I^XS^Y6OU4=H9+y^VAxU1nvD!>I0bnn~&QF9HpN4iG-qm2&C_dGn zW7*^ygZE~eY-B#-REO%Sr0i3aqk57mbJro~Y07ISpUSKp+~Act?1gd12KiO)Fz}e9 zPg3?Ud?K9MLRnw4Po)kyM|ZF%vART-q^$AYL(ahz_qL|Fr>3%!y@++TV3ZAZM_RIL z{+`aGPA)?TuppNqYu9Jj)&iCu-Na z1oz|?+IBP~S$PYx^4DxXZU8q0tqGSA`YQyEg-7*^VSPF~!M5C(MSuNWzE6ec7_d&a z!0or^*eT*3p%2Q)r@mJIZrL%%Zl^r2pNZ>8(Kc{BoqQ?sJ$&*KTeQ&*Zkh;txU0d# zRTKXMk1tA}IJLEuyo;zHYhrgBb)dumWiFTLWYJ=yX>IWC3Jz7Yo zG?Lf1L?+r>S-T{_&sOH5L?w5y@%&B_`H(+u?%a^7_!8d-lD6E!82pd^*w+N z3;&y@#&7iw_AmMc#D@ zVKquq;0?n4Yt$#cLAjp(RJ^2E-YdlIN58rs{p!#0@5a9y|IhHN?01%wRjgwQVVeJ_ z!Q#-)A}BC0`?O=}kV#-?DK&(f-EC>4YDJM!v%xUT=Qw)t7EslDX>PhaWbIy4-`m z3>rJ%m}D3~3w^6|)@xT9f8N{i%tl|P`Hi4a%{TsUL1WjeK_kld%6QOdMqbg_XV1v> z8FvQWc$0S=k(qq)ybj~;yOH&^4xl}6zR7z?@b-*BeE34(N}=a6!Yj=g#A6!)tb$Xz zL!Cp|4ZLyaAz|lbxgF~XCtYtHeUb`gwYFKik+2NBf^^u3pgYrBf;+gQU@!sa=HY zi~(k_BP#1h*8Psk;s2P{2KUX&%LKD&v)Wsf2{w|?lL4Uda;+U`&j2`(4&v`-+;3}- zvfD;C6a_w0{gsyy=7lUr`?cRdHu3wID}jwWKAdsngbAFplf8xyIB%dYp))tbT}r1Y zTY9<{?q56DH6wR$I?jrU+IcvZ6GW_UN0SEOt4HKZ%r}05LQgD zawn@C#?)H5_3UxTU7eS8HHKA2aa^ihN54#)9uw~@^dJ9Ml867EoP9nSdBrvP{`wv~ zOLY{>`vu`ed@NEK1w0hv$A}kf?dOSe6?f4g=O*Ifj5*QPrvEq{PRyF&jY;VaMe6}* zT;ubD^quH-Cuus*N%J4K=F?nSNOLc6ri*Ek`Ep(@q^T#330=$9xx&8RJOA<_=u>N8 zt$Te@+cgt%IVS}Td3}&v${gC7)%l0ARF56#gw`^wfhl`gnt6?Ux}R_fV@qquKGCVM zHTSBW#{Gok({I0;Ogp-(Pj{tE(0bbLwJ!1WM(r;CVRT3%ZNP=!zJDY43nV#rMV}Z6 z#yxe!Qpg@=KYA;4Xa@C?RysfJQ8z?!2N}z(2g}l3_I*!E?|8lQ6V`N^|8=febE9-) zy0f^9vxV>?SNfx08Kg1tv_DQB?I(tK=K(vG+E^;DCzBn%Z22XRd$`g1g1#<8$5_Uh zweNzz?k9U}!RoWQn{`n4TVSigcu~7+I$2kMtFq);`>6GtGrr@H(*XRH7GoPY!dACs zSl!>)utWP{{kf4O`|_j-qqo-nSS5PvvcdKCe-I8YlC70{D*1xr<9z|WdlNK1;cyQA z+ZFVS*0xWkQ;zPd&rt7PVAmU^o27d(EayF+WNu1{2WX#QT`nbF#-3mcd>TIK>P+0% zu3T?dfcpdAvz$FKY+BGW2FR;5#VK@QL3nA9_C->_OMjq$$1W$&ucRkTcs!Q7Fb(T4 zJmqkhzLnmvi02S%49!tT}pr{F#NGvFCG9-252`4iejzu9K@pQ%^4!?tnkC~1pz4%Z!W zj!}M_$r(p%8+0B`I)NVAt-DR1GVXJx(VlARQ~PCqm!|x5V~@S@l}0;A-GNvi@G~Zm znF7d6!|?;mPXo3u@n!n=HWyot13uOd8o$^G)~bH|$g%tEf1;n%7Sn)6=}+B-Yd}|z z6E6NgkmO#11UhKH->#=W4fKdjUE6bOGnTVE!#RcMC+&5>Fqr9ax`3hEga*K^a8X8E zdDj-*O;7g8begnX*>6A_nkQrjhYa>@%_TFKA2O!y!=?PhrrZO8fZY=tbp8@Pa^yXE zepHkZetOFrC#y&=Jypt>ru%to{gG)pCmL>Jd>7Y*!^s1lY&HSd%7LrW>qFW4T2&Wv zU+4tj)I5GB9)5W6YS#Ruo2K%aFUukqxah#js>$OwBK|1h;*<5iIvrlta5kU(7H|p1 zSNKV~0}c{WhM6G1gW}^4P)C0>Bg&}pU3{ja+NL(PRmoY)uOGj z-cil#4d|Kbv6m|6p7$-#Yt!HWcg1et{-WN|ZS+GFJDbVq*?h*Ls<7ERsx!A0|2)?Y^x@a27O!=V+Q-yMFsoTMFsoTMFsoTMFsoTMFsoTMFsoTMFsoTMFsoTMFsoT zMFsoTMFsoTMFsoTMWS8ypBG`@x~PghnXrj}L~bW`bV=Hsf_}_DL1%b(R(fY2IC<{# zS|3RM%kz(M{~_ng+;i^>@Ky0uqGP?FE2}rqq(lA+_O3SH}qn7gv_7Aj& z@B}(`-^K7iXk4<%LhenLe+w{_7wXuA9%CE-(|b6pUx4A%;zN$cnbs;bz_STnypeId z4PK->57La~M&d6956==n`_2f*2YuDK;8oTuyo z8`^2^addBu&ZHrydi4!|65T6s){w3u(`Qetr)=wX``Pb(-W zc<>AGdz*4;UlTCRH<^!<>>1F0=~n$ew+;v4%b$OR`)1)|6X7rDykDGk!g^7A&*G`p z!|Y|I!OfcWcIskyHo6D3M{7yla~1)9(aqWqTF!&-ooNSR=$dGw*6nJO&T*u6TlM~~w$~Ku7VW*Ax|`2ach`C9-tji-HVbtx ze4BL_@h+Tis5`sQ)n4r@KYm5e?`^Ma;@@sxchIj(OWG@13dGiVeXjnNt&#e>w6BYJ z7S7M5GuhR@-MTk0hVE;EhW-?qMs|DrBgku=&@b}a#1octF*IBb{myR0UYGyV3uPno zj{d&!qp=}bRAWZ%DVDEx{jTywBdSBNd*xRY#%F}_i5&@gf&BOkSug6Guyl!{$Mt8G zfB%{C4ftXy{BiylX~EAt=KnqA%cfuyV*Y`>hu>#>L+gv_)h5e(C}y*V`W!ABoZr$di%%z)e5+3jHA3 zYAda0b^%Z4)HAEWdePs&{Vcp4pm#Q}!XIF6-a^|n*GLYO45%~a12O3^`cFK1fq~p= zxl_<#*~p$-Cv@4TO?b)$b)Nit#Z|~G$Ur{Ra<&i`u;6>|%E$Q!*)t*S2S}s2M`uBb zX&+MB6ltdy(x&ri=a5$OQZb!mnny@m4?N$~ZPaqQB^nHPKw z`T2D=a8I4%GbAe+8OvRPtfV)nnkaX9hI7{jb3hc`A7v-`zm#topWb#6PIjia2mi;X zPxd|fXs++dM{}<(ea@9ldm#4k=!9enIdwC#`K|6t*bg-rz{tCk)A%2F^$Y2Xe8$)e zzIX9)0Bfv{&*W3sg?#Vko6dIuUoD@~)$p;eF*c2FDql69@=oEK%*TU9W0Uw!BU}4o zmRo1DwzScE(w+!!NKcbpId#8|-2AV62%BSn!8cy`|1Y@z%*P(Y7#-`y{~Y%O-zeYD z_-N4BaXtjIF$UQfg8mqbfU%$Q{S%*8_aJqHZ`q`%{Y#LY8#2sM=zsngzs@s#9CtSE zBHTH+ci>)#y8!pyxVPc*2A_K?ZVdNk-1p&r40k&2O}H1}-iXT?X!m;DM%?Rg--~+< zuFfi5jjMA~^Kf+rN@vq_28#O?y)#gpO$&3LiE~^!hu7ilHR;UM2l%fuRPV>tnX0+C z5!}mg-+_B6?o8ZEaM_D@ey3H1MO|U+j#aff~W>p_$$<|^6?qu9`xMjF&aD%wLxaGLr zxZH*5YAyW^+|S|8#9f6u5%;ffXJg}aA%4B(3Qc+Mgs&hReWCkjxOywR6PLHj-B07{ zt@7o#yjSktgR3{gm*MhexqCOR-VI-h%e&#D1N490)aDm%_dja)w*N|85 zLhn4_0vB6ZXl8-ij;pumZ^3;ZF6;Ji9QUKR^Kjd6t8j0?t;U^?t9R+I#eElUD{d|B zRk$;77wrj^d+WH{_84(&TjJK?jS7#F z)*O_T z>Lh={&g&H;;7Q|@{`B7LZKTW&`o06$ebH_^9OL~z?gE=&9?s3qT$e55zNRwnQ4{aR zW^uFZV;Z50)@W~TJ}|d|i-g&mgD=*;n{ve$HRi<^HRi<^HRi<^HRi<^HRfmGYRro- zYRro-YRro-YRro-YRro-YRro-YRro-mX3M&B4>aXczjV~{vE_?%va)S%va!Q%$MV8 z%tKJ#m}gAD-qy;{n=Kruj;5WCxljWUq!kW}9tUy?d%TiZfJI?X-Ko z)tmc!-VfA#^|#nxXde1H?j^Wi!_|EBRoqK)zl^JS=`q|ZaChKdiTfz7=85gN@5KEg zuI7n{aWy|Ygsb`D0o)5>z<^&ob|dv(hW`tMYkusw|?DnZa!!^pRg?_Jq>=AS&rSslB_TK@Tl&yG3-xg4eOq40zF-I zrkA(hdUGZ?tQlks?q}RXtCBNYsgHhe^v*_vv1O$5cXD0-tJ5bF(5rOH;{+`@Jq)az5GY9{T5BO5hj|v0ar9RUukf!#T8Aq;)*7(!WB)%aYd6?;EE<& za7B}s6Aqd7?hLA=_l~9(HCk zxu;v+5OwRVR@Esz*8W1hk5RAMe^}=dXm_#Af~65y zf(hCLEE8EZudcR(%6PfMX zt%mez^rhF<1Z^GQ4zUecll;1)a)M>~{MMQ()f2TS&(7DQIwPvf;*HKr!L#>&t5?42 z*;J_GQ`E5p8Vi_~v*g{nE4Mq_!dUj31EW6PCc29--{8P#3>xs}#VGt!ahV&lKKuG? zTax{)PIPP5KyKBR-dyS#=2FU!*|a$&odWY_C;WtU#HuX=xh>^}Hz&uS#T0x&de&y} zF&=x+SqBWih;DNxqTieX4~h}a-GH{v>H0GF+p;H%nAVfxPl~VL|1Aet!?MO+vK>1Z z=(PeG_M40CRlGYo9^33xQkIu*@UB7LwRipx`x>h_*Dg5QlISOVmZLl0Kl_QiEYcb3 z&0P=ur<8`cdkf(!2p7+32LBfzA6>{e(VX$PCl}x9?qVFxBJ3-;#k2I|z}2}68U+uG zm$6XYhSB1gRHzDtsG8l_y|wKWN=n#^Wun&SBSJ{~|alxoDXfyH@KgzplA10OmqK+eU1ijI1Rq}SG-B6^{Vd8_@DAex98r; z+^|A^lkr47pOv4nQ$stj2M$a2nF=qy7r(}_<`j+TgN%<)pvz#MeS9+eDcBE&C5N`c zBNih|N@pvXvB*~pcvqP7x8h$v_|55WPvU&eL16P;PWz!N(Ow`n!IpmHIl^Puc&Ke= zp{<{xtr^N)_WsF+?g+E8lZ=Qn$w(m(jE4;48QdcnGaEmiWVHS$Xarvla;5Pku875b zX_EIP(DWX~pROo3j^XMXI5Npd@TFd!WV}iGS8&Jq_VexKi(q)Ibkm7z{lO%o6aT6o z292ljzw$$NPKGBLjW13zo-TX_=}wWRnYeM%#0byuf7u~cc=(T#et`c?{NIT`&6ni= zse`!qU%@?2Ts{5<%1BVgF2eMs3AYGaN?0HMrT7=>KXFZb)A29EHTi7P2*#a+t-^hs zPx%(|HJwAh&?T~tXgN>6AA{Ds@d52W|MC2oSgA3gaOksV$Dnf^`zM`sGtQ#N3G@;6 z_haqQNwME0r{6}uiPvggK^{W}&daek{rdEQU50owXR6PMyH;_~Plz-6=f+)0oDZ9F z(S5>1{)O(Zz!o8Lo;og4InZ!0_Ql^S=R(EV(%AD7$#a z#wQuGD}Kj#X8k(iXFRii;f?2ygFEHZcvhZs$MX|2&&J<3Ia?G4e?{DB%xJunfj@8m zFgEbznZG&x_!)Tt+g-mgFRQuTAH6Dj?2oWtP4fmo^agL8RL{KqV})@>rh&PhIoq8^ zSsGVw9^uR-bf9+s1e+QkGV;G_ywe}o{R{JK0-Z1ETJg)a!!Xc0Fy@t4yhr151Mp@k z&!dUCgU&a|zml{{Q{+)yq!)SL~;7O|2(}_raNc89KQ5nQ(-6-C$QvHGqIaB<1o%{=38DihKz zw4*5N{Y2{+`0V?T`GUAtH!mon!t$BqM{ujyejJOu*J%inIw~k zgk(&@tM%RvBs{dJ5l}&~j+M6BdTnZLwO(rn@m;iPtwrkfo|$wSpx&0g?UV1f_BoSG zLU>qhzx(~~KX7KBv-etSuf6u#Ywg!L+bU1S&YnnlLU)-g>jzi*-ABXi09WXa zc~#!)?nu9Fw}W%B7Rojmh|J~@!|lSYe=gD=N;lR{45}jchV2MXTxUN#+Ag& zo-@V%4B*zbmjh?m@fo_m zBmQ0NX@!lq)~3Z=?~|2w+^hk#_JK1AxJ3hKrHJRVqh!H(NF zfaVXuJqx(_0Gh85&pZAH9<%Yj0?bnbV4el$-+_5;K>X9hF9-goHtu)0e{Vp(-vVZr z@O(~xd3~LD-pM~uWXEUZ^$_u!fG-^o{{ZnDiJv@x&b`EcjricjR=s=;nhOWOYyswr zz%&kszm<6D-^Fa)w}9DT-$#k>9KgdG;2Ad@*fAjfM&daW{lF78?tS1U2Eeoe!* zGT&Em2d(eF??h%5FEDQ59RvA(VlFmPe5rg#F{tA0${D|%?*W?n+m$C3>M@>t<9-tR z%4e~rEAP?BTAttF+-7`oJ#rU0zsUQNvL8p*K4e}^<}_zNMc*@L+rACV&AStP56X8_ ziZcjO@~tfTy4Kt`vXgb;$& zH*H9H!ZEX$?^W3#HJ>>S7nHzhnr?_)ldh;VUr}FM6KF;_mwkz%6 z%4eR%O<8hdZ}&L5u4NsAIW^*4T)EM`J?`i(_RIoHK0?PM@%nnZ$4fZGhRXvcpG$G} zn82ynGthrV({&QM>2!Ic|&yQhfoM18-v=On_Dxtx^EN!i>3 z>hO5VCgqZP92wh{K7~ulb{gTSa!=Vt!N=)bIX2H{5Pzl(XAq9I;l==S7MI(W!AQz{ ziY*$l$b`hIWES%hP_T$Ig4**qVj-il+-q)WJ@ zY;L~s=4Su+Sf0m89AzwppR>7g$-~RuSE>7RNITcYDI+YmVaEeEfy;wDWS^A479)ca zTP9-($JsJD8+nv+}C2rZ~u$AaHxy>HA^N=2thS+yQuze0P%0cUzQ?^8&e?zBd^YKbLmNJ?GH5 zjpx!iTt4`77;kHQ4{5nJte0?z4VwpCK35U^d7-V0pJ@0a(H6Qw-yv}RANF|s(B*P+ z-jkPbh`xWPCyy|nYZN@lyCJgQ*x`FS?MQ(4ca&Rr%apso_gwk}E-Cj=!eMexxqa|e zC}kl}mtF4Rq>Zp)Pb4g|VNU|?WG)}PiA~qI2j)%K2-(oO3xl8>o0c!a~FP@bs7IH=?%0gx3L~Syk7g^N_h7JKZo>L zq)S^^30-MFl|Ip(yYyb$JBmh|qll;fgg$ikya3OWc`gHP*X>=&J8u|gZYn9!=Yv#q zq90NC2$2pa)?^>u4goAJM`wlB(=%eis)bJkRtwuF5y4&IR#zg*n8 zHJ$s7J9=_g-`SHFzsbzK;qD$UdF978;GZ{`j?QaRD%PI%!iV;?x8DgY@B$YD9vC<2 z+P@BxrebTr!>7&#Ck!rlIU(x|P|g!e3-1ni7eDHV!~3ln-fvE|+Wi9YrNY1Fy_avw z5I>yv4BuYz)&6r3o(f3QK68*XFJ;kwaxi|Q)N!aiE$44LV?V|>y{=^~au#_HD(eit zBJ)9Ho#EFLf<@Xr6A^Bu@ zcGJ#BlD`|>5ML+0Q2V<<_#6eC_&C|`nmb7PNXppj*F;Z5{#m**3b`BjvT67-Su66> z4y3Ot?~)b6(`xq3IBfsrL#K+O)>@tPi3@-i|27i%0(8$A<%~4;@H_Ei25nEi$6FMo zy-^Nn!*b57_%WG}D~7%SJvo0^CFt84Z>5#*$LYoNVjOL0~dMNV~n#-`&jAAL=(2J z!EVdG3|Xr#qyEI#$h(Gf{P>h0vI*d4SVvc(JJPq}L!yd(CRx75ose(qZc0yrw~YzQ z-?$U(<1#wZyql$cPCfo+1L?9xAmiiz#LsLbkAfh+CFk~iUVO}~5P3mI-met@B75Cr z{OdN>rMi4~?pqjRJmxfLiieBJLCA87-e9U2X{vz3}3KzDv@Mz;6LCPGsObN|{7nUdrwQ&UK`6Q64E$yo5i z=%;6pvW_;(nR(xv4*NR^f-o$~-eIIOSg?3}1 zpb&oWVFmbNr@{I3Wov9-ybf7V?gX|phRo1KhyR_l6THpirQGbVlXBya#sBt}o3cu| zGvnp{<=%vk&W|se!G2uY}%!cOw-#>@w&m!A@ihsr~d|>~ag>zK@Y{MPZKVx_P zasHY9K&BsJ^U~*^2kB4PFn#`c5FegZ_CEg%+`xW^l#6!oPw~%LJRQ|P19x2h*`{|? z|7_RWKgK^FUT^*VbDyv6=b!PL+Sl6r_xI0zK7COCoF&8l{+T)3f&Ll$r~PwQ9sf`A z&ny1f{#pB;yKpoGW~%}{{miQ?n3->SzP9! zJ9_=+K;JCigXryJ*kvfd-%4M>DgIXXdHVb^YZ1DS;|<>2OY^XPh+WPC<7W1yT3P^{_7b=`v5-xwm&+)X^zxLVJ3gtPSZo+RnFnToMP2+fI|UQawjY zn(Ab2O7JDrczx@ht`Kn{@N~F`u`g-x?SOAznX1MB?Bl&rZuHP0!Dg=CR9>YnQ`IIWp^*Ls;JuUh{OgrzfA#39n9gwbm~GK3)sD zEZLo4=Q)%-_1rA{43ju`_1S5%uBzu|Nh`3+ae`frp_C)DE;-DWtIw8eA)yOiUGQqH zMIM<~y?)$7r$^R_N8-<9ANF8tizEL*Ym3#iv3_fdtgk5_^E!HsZ6j-o ztC`DW?Qn`Uf0-F8S!;{i)6N8Ii?a4;uPw?rOU9Hc!P-{hP2MAswYAq7uVt+#g5$E& z-FCXH3-((>1ZFTAnRP>#UN3vI$F0NHdvXZ-traF%D`cJ2S}Xiu<&d?)OgTI@pSd=l zUf~lPtJeqNafqFsXQ#_rXumZnClNf%5w!FFNre2@Y{)p_ixoJ?JQvE-{r@*)Dp%I@l7~g~Wlx)8L zsXhf>Wgb*~%HPZDKh3AWtITVPPdOT|**;~UT>m%v6xp*OePO*{B_KZK9qm(O9i;1=MZQBM{!#Bg$?_@IdL`w+H_E!6_(ds?weN;?J?2lvH)hK5zs;uv zSl^SqBt?u*LIK7&tnr<|_@o}4@WyXvjK(}?w6jM6s}ju9(x;Gpn=+1a``56~bCcdn;$f~_@s7g_H}IY^eXouH-&Ka5e3Nr> zjQQ~>bLQX`8}_~`;$>b|_}NR}N7lV6eAKZYK8W{I*Do9F>l|^GdB@aZbNi#`vY&)G zeS>iwu_P zldteUkhjOkTh`(-Fay)SO}ebZ9Vz`W$|mb?I(-n{za840bi%t6-eukGqvZVw@|JbB zBk}em>9W3dr1U2!o2;!JiT5Xwy9?f3@Gk3W9|iC7&614XJVpMpmL_{mq`e%8&!>Tt z^)nxHYDa>3in7XDnasm!7||iAk1RcUn!1ql<$1T})XZM1kdL)5zcoK1b0acGB;OM# zGGrZ#@A3v%e?sR~Vhe5QZdq455K^q$XRT5Ae4F-5TbKO>KHr-C>8$?jf*JRvJ8k>p z4%}we2X0BrH#WLxud=7D13UCYqQ4z_jOUfKH*IgQLt<|-wn%J~*dnn>VvBCXhWz%# z`_f{2Eyo<*p;N;*aiQ-yL&P=%4OuHWG-n< z;cBx3*bN4AOhN1udFLfIn0dZ6dQXYWhsi#MjNOtw@A4f?IcJFT>6oXzIhD`;+Xe6_ z@BPn-$-Do2J0^(T41t%0FSv599cK-){<$HQ11@uLDftHHWN>BAgxF&L0NfM6k^BXp z?>XqTsiDvq1`Us_??R&#{9^D8@b#Wq;KcT-K%b3my_Nk@s~MMSSibiFZ|zNMb)Q|u z*-r+30cDjrA+fvODD&*(E4nK7%M-d8+jM8Lh`7zN7K#niK3vv5!4(@Uwy6jnWDPoF ze`ViC#sg16}JW(}LXkgtA+2fSYRqxhIV@SfMg1as=fz3DFBz3E1Oe;>0jfgLt1AJZ0K zzgsBdWA04Ld){4&Z!RCj$20-6vB#&PY>3P3o9>)>UpkTHYvMk>H5uSrXXNu^?77(~ zw*4Bu>#z21k7JV`zmIQml1~2H;V&NJ0w(yved!L)WtV+!UgjmA=(6`u<6FJ*P6W2m zi_cbF@$RQ6#}4v&3_4xp^>B>u>vXce4V)bb&dr1NKIqC`O`-j87run|bLHDO@*N)K z!>=Z`(f?)+ocEYiXmffiylw^d3GlW6^AtGV*tVW6)6Oz|&>snICuyCe<#%rD*|h5{ z^F@4bE@ztD-FU9KVKv`_=RGKRH1+!p(DK6PmIU8;LT7}=mQiJVDSm!n>r|?_|qG~TWRA6TrVE*+JAw=p4wC!@KNB! z&(;rsmp%10q)UF1x9p#Af#(8G`bHt}7J(;w3>OGoRz3nRdx~;^=e&g!?{}nvz|R4G z7VwpWz_ZUMbpr4w06!G?0PvH6*FJI(_@TfL177_Mgp5N} zCw311Ab!FV2Hx)Hy8}0y^cmQr@FVuEv;RE$X3vn=9_H+2J!QQ~o$0;q@(zoN?@n(7 zU;L!d+aUZ%n~n>ftiAlGNASI|y{uh;iw-$Dcc-Nv6BAgmiJg0niK9Aqrf&piB|K>V z85f+l)AF71Tzr3S;LV=gApA1_o)hdaJ*@3Hf;;tIF$eN#6THw~bcTKeEvx3&3+C7wO9kl#3gE`l#jNMqlQ@?=12YAA3Ay%%O~x;7FfCeC_ez zxRK>#a3)bc?RSquE;+WoxR6VQ$P>AUuOBEE&qt^)(uOlSqsMKuDG$0M{RKUilW$Ve zu1a~9G2OA+Rxaf(rrhG2#UCF{R~MVQ)gU!g|*jwyYF6n8$LWh+c%j1iEbvZE$Nx~UsLfN z>ntDbQJeN}k7d8tv|;~f;EbeCP3EI4BYFEeG)8apDtkP@zsj=P~9QE5i0(gzV?gMiS@pd_1>|5cY`sF z>Wp{qrd*Ga*R$l4fZkK&`9$=VbR3+=5}XeT{r3ZwzZUvWbz1&<6tGW_ukvleUvmzp zA>(0W5!jZ#7k(cEZa3*KM$tpQd72yD))VJhe10+X@4-jEgpc03sKnd>%$;+}%uVCQ znMLp;{R9~|$@>GF@XN*UkQ*J6TF>}Z_MOQ-RG}f~EjcJhfscL-&+=|av5yNp+3V>D z@eXp#`nKKn5Oo+6pM&2{;Im~vqQSe!_@;c|@}c7dwzHElF+6O5W`}`K58%^7@-CRX z7io?8+G73l5`XQ2UKHGV@FedHFCyz4;Srbs^5bowsulSJ7cEe zJudyeCjMK`Cll`ouvfp3aT|MiWxZ9uS7L199hjR;#^LNI;~c0U=d}kmGS0RAUf}hf zyy)xr**ACx;0=5s`*8#8XJ$`wp4`t{tKaES!DrK3;CEvTo~7RqfFJyCCvh8ybA*Uv ze66B;()58$PfYS4U-m5Lvj4#oB%cKDk@{ZmVSLi#Hr`+znDdB&ye9E>Oe->@>vO-$m~cmaxp&oN61Lpi~||9!LRsl zCv};TQIxoP;#`bL|6Uo1ea)7UBTGh$pzlORAz+*XWaNeq*;kY;qlLg7O-4EYKs|CI zqXqCQzTBOqM?vCd5ts83>X9=`M)Izx3mF9{ySy`%tw$dCs2m`pNx&UVM!Ek$J@Vqa zUC5~dp39JlCrg+7#FY}4dlX%gJrCLKO}D>Ho8w(md50_0_D1^98QPubmb5)rVkdL1 z*7&JFWJ2FTY$-NB#Tr1W$iRMKkHnYDJfh4ey^If!!`BY-JqU03iImvpT(vM6kK$Lz zPu>@MIKkOnM%iwROPzxk0#ES4^~IqLULG>a zLq>d)B9#yBN^tdDHn@%8)`P3_16T6qebAK557z(}3PBfIz2j(LWUTFimW-vf4+nM; zv=%~Z0kneP$@gco`N+`EjJtcs)!=5v-T`p+*c#l-_&z(|q2w!L@L}XDV{8w&y?z_q z(g1x1aI^DeuAhBf=s7rgj2&ZM8a_t?@1-o-Pe#QLyrs)2bFJBPa-J|_XPIvWPk55? zql~LFeP}nbIeZS5u`#|pH;Rvr{TScdDJoXAaZeq`o`Fq_XC5+kjsMOkc;%iWbS65 z?qtiwjlRr5F4p*ZuO4e3OD;K-@n~c0!Q|pbmPZ|94GzU5U+d5Yy+FeBc*C60gck~242+)V(TlL;}M`}nHV_Ah?^LOZR zV_u>o6^-Hh(3hGxeh&T?CGcSi9|pfNt}~!-z?00k$i65e!KJwT@QeQuKPUZB4yqkL)NZOS z_EvPhp3VujBWtGaPSUtv7-t-t*u&oWw|ivlBz7hrS_(ZD z_@IKPt~b)2(2skB2N(H!!58~f3B1lTzBj!t#Jd>8tH7JOAF&QQH~|+j{q06gwG=2HYPeuH++^#8RD;{bKxT&dS3Rbj|zbc zjMRY#-?}zl-)_C{1-Bb>}nJ&fHr-3X*y*a`XOev~{; z;=ASN@?1olEh8LGSWf6898Wlu@G?R^7tgsLLB2mP=Y9m`Tf3b5A!qu^xgSCO-9^gQ zjSbP~?TF3bTj=^+r5njd@__CL!54ahKY>v2&m(jb1_%}B{W?_K6;n2TFy0*tqT}Z6 z=>o-mHkqdk-ku&Bv(AQ9zEJ95JLlHf&vQQ>@0RoHCwFdP+-sddE8lSz*(#$d<+(II z;{7Vl4Yku&!rMWf7j^3K)T!^6-W8`R4zSDFF`zr7s2UhG)9CO(LFbgw~yM?rvngxr?)9<-Ea0 zaGWFMJWOCa*O>vHbKtFlJnn>cXS&2}q|7e)KKt47UHDG(tdXnnH+-*@GabdoN6BCE zDqR^*E{H*A<@)4y^6`_O>)Cj6Hu0R5PWu%8Z%My~913EeGt8T(7+AH?yWe4}Ka=saM>LmU9JvMVg!k z_#*LZICF6kWidEA<7Cc66P%IU?%V$m+8;w+@N&@^^i#UbZfE?{rmO4wrr1rDyHXFFj~wE6n@xV+3&SoC>H3-}w)WT9;rGE?8A4`J-OjK{G4q9vfR?dC&Rk1y z)^eP4fxZ_{N*-g7r3+cMUdNh>vB}K$Kfrf~_$HE%v7!nxPrMeNzA^P%Xb0e1=)br_ z_RU)DOwM_FfAlMwo`ZD__}6w}Og;2hzmjy-uLE|I+5T!QHEkv5vp_#DcBh%&`4zrx zB>Buu6~{JWUt_6Xk;i8^%kV~I<3eVW8(1@;PKI>BBWD4qczlE_9(U!7EMu=EK8heM;W5S&wcNeIlNWDfZC1o=dA) z&!zV`u-WWCQ=vP__baBHDYKulyml6K5u`mDuOy}47NTCH4s!6v&+qtzDYAP0bJpHJ zsh1&vcv8xhsgr8z#DnZ|d+UVt@d0(RGAeUw(5G%>PSUZ2HHQ#BJ^@|m>pG`>y;L*9 z91^$cJv)!X>z!|74a_5f&ij}TGq7(Xbh~zX#c%yUDS$;Bi(5XW_ottpYW}pS=nl z3%F@toU6;&;8(@J|G94x`%=%gbWRmd#~(gNU!x;+K+^I!v(SCGuH~a^^6lo8@FRSL zkflFBJ;hd=yE8JT9+jp*8ub?oqVFFGu12$N!>U+k5{ufAy4y_{*EO*=zZ^h(;j zw0Fy%9A57$JE5CEuY96cyf+ovXzsM>X8J&b(H5OL7VQA?(0YUJJ8ivsro+~&Sba+P zMhCjbJZS6FgE#l-(-W3Hc|&)bL!w_BRG)&jK6%h5H}xwzl^Yb_Y}qLZmvoyj_#-8Z${wF+kG4)c|ndhmoh z%+P^QV+skukJMU)o(A|;MEpg z+ZV0$qc`v@>q5?R+f%~x8hl-QC}8H=JP)cnulDgQ{%5r>qnFqUn`iNJ8JqKB4KfVX zro>K*O`=}4uhab2)3)(%;@8C2d170&J<9ET$jtas$zub0q5WLYvPW`uSAxET_&L#k z(IN43Il(#1&BPt_dq>)OV3#OAU7zkz*eh9Q86K_H z_D1>`&e%fJ)%lVsa@}+PE6Gx9&k(Ua{{FUS2j7+w{Tg*5*Yor@XU3C{`W{H;Q4aYA zf#X!pSEVc+Q_&gGGtO}B3ZP?&o!Y;Nj)|@LpQ2+0BIhIMnCSK4de)~4y?QoKf01*L za*B>Um!)GlN7JzZ_NhXP&EA>~9MjhbifUewVY-N5;<7XK~5+M#ew7?}Q%dzS98RDa9WR z8KnOydhYZmdZh0uy6!+PIPc(8>34<_cE6K0USP{;cg;*ww?*3cK;M(GA4l>Lz$Ygu zi>9}hLZ?Jyw6O0=w*t;X=GhhqSr*kgLY0Ps#Q_o4z|8||` zo0gKc=j)8S6nz-${K2^+R9C#+(G}m!8mpNzZ;k1VuVGHmI@8UKFOV|{`R2gzGY#i( z_R?@P24^#MF}~xhvI=xW_Dmd##k*w=VC1@ZQu^3ICue^7%#%n!$oOxk zDc>{A*eO@Eqh}O-ASt`-JDt_ZJY#@9I&yFzheQ6iI9sT8xX^jNInJ>b*LEKYc~aEN z2wC4h>A8*ON!Tlq(Mi{fAIA119_W#Ao~$)H#qTlJb6m{)Qr>SCr%XDMfxctOYTg@J zYr4WStbTB|K2iRDK5d|W7H0fTmVQ!x>Cel2%8SrdSHRq!tOY#u24{|8+bYzS^q0ARXS9q5t#jux=S_|D#k=2|z&S^>6Q_S#>f`9P z>sPmRPJ?zO*9@)z*T=aojJI{uJgGjatW;92@Qc2 zJfU$e*E#mR(2;n7Dd8&SI*V%z*Jv(-i*v6JoWXTE*C;N5znJS3`~GA?p-*Gfyo?|e zUT7c(n7=$QjEnip1I%3h{ zf9$*aMAm;Me!Cq{zwf{n`<^rA4s5jVnMXL#Vc-9f`y1{1_qcDf?-}175ZffSMCMgP zc6@hM{2ytPbL@D|SfxHJe)e)d*}nfV_Z9a2o7|V-t46+b=+HZlA39Y0^r1sFH0)VF zICN+qhs(s@J#@(AK(EOU5_k8ZL+aT>ho1QQp+gR1UP>K&?RU%}n3V5SeLjrBCTFgL zumA2K^T)1WVany(spn@M^e1IrSVHQBd1A#LliT;vw>A%|*ggf0!#_Xegr@Y5ML&D# zW$4=BL5GD`yd|D2*}+)vv3PRavy3aZ-<0$`d~-7Qsm~|9yV)?*RWX@Si<0zVIb&?^yEj z+wu{)XdL8}k&mrkeKOCIk>6*_rxKp#bRvsWj#2ve82J1ed&QRqTOm8LVxna-uT^iS+TJtZRFR8@4s=q zE~_V2jK42oEv6&MK1$|oz3jsnVm=tFG#~1mZfd!@ESb{QPCdBZ(zzqiEZ#sK=u8fM z#5{CG`1A(GnnQx)OmApia!7Q2vLN8*TVy%rj=&7_OF{ZP)Llm2oL8mu=%rr|y_L|D z{tENX#T$7>r*b-=k1l;^`i;=L5qdSyZ?j~Q6C2BV+BlOn=_G6DSu&Y{Oe}uYATsIK z7VY|pu~+M(sUJ6MxjFP-GxgH}FTD35dOrv+z49AS=SQy}4|5B-e2YC(KkKNU^&esV z{2lar6X|JW8UcBK@% zH3XaWckw@f{zt*T=!Wz^wEjQyVfBA-+jMmO_n0}yXuJPd{db#Qv8TQI-+|t)?bX|U z`Z=I|^_PFHnIrb6m(F_Vu-0L>qko+Ke*pfEs{bDW{{!^%`1Jn+@IQe5-y{FO@i&?XyC#T>6V%>}Cj`k^tmIkYp!92)nSL%VX# zTg{=0{l%;&-elIid|#S%WW_#RRXnA@ESXzijtv)><8CN0J@F1R7oC&xsA1*%kCxZS z|YI)8ymiUF4)bK;GuQW9OZC@q^2)6S~Ke z+YbkmTV@QBT?X3c*$a^uCcUpLEo5l;JP*Gmoe450l?9@{ac$TYl2V zJ)XR?^)3kA4YO+?D5O#gV;B99C@3&jxXK z?r|IAg`UoM^0(l4nLqly;MIfI;ZBXM2XEt1@R-kXlb@G4)c3(xovYJ-`hfZV#m@I{ zA244Zd%YxI`IeWPd}U7fdos4pwa!I#@%M55hVdu;+=GkD_q$oMkhKYAG6qe=yMOY% z+foPByUAZ0?*rHdw+YXj9$^r7Wfg`CLsu*Ae3^;m>bK zy|^}>?25gbbi@L^&rkF0im~Qpr$4HnXY@Wl#d8k4Wzrwh&y~H;Px71_C}db>PN z?Mv@?HR-hL=F7->xahn$mI@4k7xikgE0^?H9jVIMJWt_y2G8~DQZpKOuHreubLpDY z)U$a$i|67#dYhoOmh4e zYetvsJap)<|IP{-n>-IrV~j(+I~f;_=N*OD0txoTCX$s~Z)9KbnrBpJ)uTIZA5u7d zAI~PwX4Ru#N)9b_Z{Rt`bFAvoj@9nMoUG@yt8)q;4J6D*JGp{fX2P72Meobdo0&!L zE70>~;jdfmDa_4!UcWlG@X?S>FKW^A!Y{n;#IL=K{a|nFclR9Z#5S9+vHwTbzOG@f zMAf4=tsYWnJzuAvZ(TjKQ1b;(;Ovumsi+xCz50XOQr?UW^I@ZmK6~W~b|g7#F6ju} zkwlbvQy6a^#75=veZf!itYX{KQ%m_~NUq|&p6$F-vOT>m*I|z29qzkxbIg0NUrJ5v z-sUuXvcK(~;iG+9=au;GZW-ru8=I4?Y35CvBs`zreYeZ-RWeSxXMTxqTkANV?0eoi zVzf`Gitc;dhHu+~5})j!+}bwIcX!cfUjg}T^LWf6@)X#f-!&AP0hR$~r z^z)5%=2qhKSqI5y4E}x>c3EB0y)8fA_m|Fhlf?P*jj6tT|1@8Ipo9D_>b`qOzE9$} z4#^{~(w9d%`#f>lg1O-a%VYoiqBy7YICaBJ$3IBQ`6wZm!qNku|R%HjK;5Rludxz3HLKkL|lM z)k#|zN?l5Q9K7M(Bi6^kv))Y}txgVJAhNOQBD)?A&V=Ss>OyoPyFLz1eK+Z>%c>9R zKg9IbLhE+Q!l@7{sUuXPkgY@ZI-9^U}s)463HCCd+SmQ9Amr-9COf9$K}-bOI(RL zsf|~+MPmzb?6!`H?Nv($V!@>u7Oa6T02VQ2H7H`wdp+VL#Lo>{wv@fr(!@R#F zo;qWNHNB-P0C!m^q({m@aJ2 zv{@ZyfOPlF8eNXvuBzlvkukb5G;WpC8J%uAJGr{nn!9(N$(}jhL8I>@<$hS;MIOkQ z?-rQO*evAUlzdO(ffejEGY;76Iie2@6u{cvWI=S`-3hpO_KGx^p- zXSycoo>)!2SaLh#H;g_r95*d<4C` zwaSxx82#DktWN%7UQW^_I@SVBp5H^KT+k|@Pw4h-GDn{pPYyeE^|YKsyE*4&*4}yF zMEPR)n0e-yOqze1IqhQh%8@2`QPMrWdA+!~iD|vKK1pLgT?UtTUHjpNNcU#tJ0vS# zL(;PH9Wo%_AnAEoxcOPQeo4#1#aHy^8z4<|@uSwa$cgRzLfO%rXH53rL%|U`Lu6G z(qpVKrw-uJ(&N5-B~KSTN_%+PSHiothnLIJ?ZNZ#O4$bFVd?vk^N??T50stN1_sN6 zIrKsDu-e7pc|7gQ(f0bIZX=-={`qZW4|z%(+0*m?RvRg%eTY7FB^cZ4y5=1?>hMsY zAjS9V&3U(A78Z0L3dDE0(Mf|gA?>7NZjJeL;#b=~=fsnT zd<7{7wmG{!iCr(N*lcFnljyb6cWZAu>he9Ob^Ni!({?*zeS!9IC{&R04B#m@G|ilG zJ@jhsGPqxDo?Qn!077|Kc9-Fq?4xM(Wvhp(g^HN5lDpfc+viW9?QlC&2^k2_w?>^s#RVv;s zIAPV&?O>07thg&FA=6npK9la^JPhK#=}_@qz!y5%m(TP0JhuzJot}A?bb;5;&~OQi zj8Zax?B`WXr6|Vbihah)$wj{Ua!KfPdwoVAcG`tX6_HRz6bxZEB9*(9+trZ25|nt3D%m77OQ2u(;wEfisp?icx(|%nD^jK^aOte)>+ggV1Py z;=gl;oqXoF2_O5oXXr_1j2(aBWjQCDczQ|s1(&)Dibgqx6rM8r?DH;i<_$k}%sCS; zcIA&a?W}XpzofXVV)8lT%8iemf5E7;C!RHabV*so8UE7qPA@+9!eQ=HMhtPB>dVPL z*;|lXs7`X_4fPbAHZntB=n8&@rtPLY8=eRaTrpX&8By%8_R) z-M-f}ZCbtezyO&=tCvnzoKVw$I!-9-e=*|73m*FO8w*%GW%!T~7#qie1r@0N{AoU7 zq{O6VxVRrJl94$63@gqpp~R8yHV6e~H1~=>gUi7)p`Q=aIxYsn4VclyQnwHQ6hIrB}9Q&SV z!LjlK*1{EdO+)7=_W~oZlAq>5cr$nq`Vz`BfAFDc2})m@j<@*J(Hd5lL-P!2hw?dT z4NgfG5y`#74N14e`-s=%fg@f6NvLrIUc>Ti-2(%>Q{!qpxz{wItK)@^{0U4}2p^i3 zOdMAriBZAD<92^ z#?$x~kAg#fnseYZpBWfpg_qtm_z=DY-nw*|1j^~1-LyR1*id8CgxkVKZS%6G8e>I$ zq{)c3G*?GjTN|3{jE1J@vNo91e^*5#E#bC?<|d=5xy@)@7L7Kyv_)#vmCKe^MOuv3 zRZVT-l}2P`G*V48xJGS5W27m(G-Baj3D&Aeo6)c|+89|HX|jQ4%vc(Y)Rh_0a9eeK zq}5mvX{>G*oar#sT&sy_0@s$b8Udpu%38PnGx(bmZf!G`!fm)NVzfk}k+4uLsWI9b zh|NPCPab6ym!3P`fBuD&E}nc@U~1)zS)Z75#Z|$13$Fgu!cSkj=(@$Bs_Gi)1X_K- z-Y(#0Z~WJP`&?}Gn)Z&h>(+0$>E_RGyye#0Iy-OQw0X-Nciwf^)@^s+vwi!$U$`$G zzyFI5?AY<8FMs912Os+C*S_}fzd!QG*SosD@#r_d`PjF<{q4t}c;Y)xKKUO{J@wtE zpZ;DVvGbW{c0K#-bI(8j!iz7y^zzH!-@W^lS6=wJOBCayZ`lHrkPBoy1Re+)AY}N*3+|Z-~Rmve*W|K-uv(W{>3kT`OAX` zfA#BM|K>Np{q665_xs=f;ScY>|HnW6=}&+D^I!h**T4SlZ_;a44u_LJ*=rzw?g4)} z$N2Mn$iLkG%YS&ogb@$1=OFl+zbkssyJ6Ogr4QEc8@YAio=H!veBa$s`E2oynx7VJ zS@34XV{N}J*f?i**~5+RjoQBGoykw#_!sAzsn3l0VpVGRrg?8ne6;1)c{hLJ<#WDz z{ee^O{`B69pZv_9JnLpWKlaPDKRfBpPrh~Gx0nBZ=&e`2I{uNSU!3uU>)yTW>3{p1 zWA&7sqwfzV3vZwM`gz~D;a5X$n*Gw*4>jyRW!p7xU-X?-f6Q4s{kf7aMbanUarKWb z_|~%Dop8$)uay7$(*HjF-hcVeOTYWCe|5D_+jZ6h)!idD&;Q~1-)#L&{^u|M{<&XU z^7GT~x%MZQ{KseioV$MJ3*)|0*K_h+pZf8~9$)c?VYglNg9%@6{^gnXE&i{MfA4dL zSWZ$gtGTF_x~lUha$i-~5|$`J{Y<=mE@>@kmH0-xy{=leykeq1s#Yyq#mz*)pIBkx z=}@Onl=S5l6%|%^o`zpuao%}RMK-I1-qPl#<`s5WMHme?@~W&7yz6xa^1z?<3_<%( zKMP^|Z{_l()k~|DlCYtsy4Nnj-YVg5*(z>Uk+ls^`E)*n!nTyRVsX`~HoJII9-U68 z(-CKw@khDB+2vkd z6Adq0TtD$b&4p6dvlvCIBz@1C9Xox+(>{^sMyd)tPcjIVQoD4q=Dzf(tL`behTItIhYpi6gPw3rw z7us1MFA-O-sP*&20qOE=7g5qtn|}EE*-r11rzP;3mCM5u7x(2aa;vE5Coi7+mA79y zdfQ+M{+MQigOA2(_AY2*L0wCsuzCrp~ZpfxY@A9>d=AOF%btJjvb zY`TBn_r7>}?Wqq&KY#f%56o?R;go%wUN81+du#0lLw_5MU++6<=Z;gnjUPK>&Wc&% zzV%dB#WxE^UG#~s?z!@+m$zU0o96NLzgTlyTXXf7Ru-*%vBT?pVdI|;J>B{9#^8=W zJn+Y-f4%aC=T{;XxpWVZu)Lg3LRDj=ytO{ug7+>juW4wtBHHM0R1*p}D+1N_2Hgb8Bm+fZ>*<<&khzLwO%f zE1e!u)XJ)LRclLgbK9j8>ggm+s0&v&H%&m-TACYbGGTdB&64t#imC}!%NiPMCLou# z+UAy}t-a|NObEAB*O!wU`9QFtsk(7lP2?k@Ibm6A%LJPw^qZD`5V|c9VY+QXV?)!j zmE|iZT?nhTOe)4#jQ3BdYM{KCs3s{ub@e|kgSu)_zsSnAmT-A>ZDY8u_0nQ1*CHE;wkg4;F>mT@db+)4~STBSj_apVis6YQ?9I>ch&4l zSQQ<*l&V;MK^tvgY1^`<$fYY=tHaVFmbNz6ww2d5Hiz4c@~bAoQ1j9TB3c*?lt-I& z`83}x4b^Ss3`4?tydfoPUD3cmpuDlUIVweKXhIbt<&6#CUwXdZKd!ev8f!8Y($w7A zR@2x}Wt2~?S;c@uB>Abvvho(j6i{ktTJk|OpwL}`5tBnu9_i>1KLUl`9Riv(=X|c`T_~s9i!!acz0-Q#G|lE;i=O49+p|b*(ZwpE&+J0~-Km5#3L%Ue?mWXnQd>ta^#j*4#`I88bMx z{wh{l{gjG@#)3$7eN%H|b6o>wMSMoMO{r=1;ijet?vG)0zmflFi$pl0hY#wCN`r-! z%Gp;L+PyIk<4{*#b>(!Kw3YA#I~-z%MTE7D=TAIIhZk1l5{4VYD?EhD2!{k6>WV4T z&d;;L3yTP6&cDLQ_Yr<2oWun0Ts$)s4O5hPH+_-FXWy zYr`TcrM0%9uAZXlKYXjqMkwve8(OV0Mj}hZxJn7Do0m0OCC3=m7}Ku0;tHcJT-PhV za6@ga5Sk)R-IzUNhNh}i!3o0(M--iUW{&+leB|hovnQN?$)z3-F%HLBqo-Uk4=Oq= z|J2kB!SGUDZR-4)!Jq+%o&o8t4aQU9m5ZayceEO#FEu7!aA7ZAlU0wEkw!W-Mlg(( zHKsHn8gU!c;-6S!<+uP% zS{iOzWoWD3dNHXwp)x`*OJLU;0^5 z%kvYbwQqZvOPY1rx@ctFo{-E%|zpB{cMV05OPyN}rI_o+3%C7I-7XCru=O2as zV=NQ@@|35J2A}xB-fMn#&1;1ZJgnj`xn}+T`~mz0=Doh|^z%sHVWm$Q@O%hZh(T7gB;fK@i-FWhONmuFgZ>_oXk3SjnJJ*5lzyI9VuU#>#qwcF4EB`d- zWydS)e>*peentl};X^Z~-Dv*uFPA@h_C=SyJ7v+@KYz1u%vs-kqwulE$?xjFG!^~q z=Cj9)J$cS|F4$}S+y2t+e;JT2bUt;(gei?x%a%@QX=`Z3IE3Y4aoB$9OJ9(&Cz1}{ z6x*(3AS)x5tJRIpqB{-6Z)P|m*6?eJABdk5ZmL^`snCQPvmdN{uWD()%Z3|gWKYyev+bL;)#VOS zwySE%T?jEc(+v{(!DUsA4XyQ7!J^p@7JZslqwu#tT#q$Rtd#accDlq1P5B$BBek`Q z!>zTLx|Y@mztu~u?3F~e&?LI0Cb8gz6?8+~OR$!%}6nm>K|o2#y0Y?&=8=0B<{tRL)g@FDKT5U@t zVu6dMH%1s8SQwTS7NIvqR%E!$lvlh+o%mscmO@qGA~N}vEGsKnrrk1Y3MI=jf)G6n zw`fnp2&WbmwNj|O@mg@W$C_4KODqYTBN469aFZDLUWT>yDb-wC+sg99xgwRtt!?F( z0b5;nXZ(6E;;Ag>&pJ6tfU6h!vB(U zs!Q}#=e6_oh|HMXRNE|TTGvirj{3J|mbcXW`BNrLnLodmmh_7qz)63aRXzRWB9wkL z%dATJ)za6Lezo*4rC%-km84&N8e!%ytZPfD`Bz_QOu4$3yqY~_-W>T^pk`0IV!r&y z-Bm$;=2glMca^iR;3qg+&7OYcOf`GvmGji>%cozXX3v=k@EnP|VmiQAP5~}Bhq$2N zvf8F*&!74UerCwsEJ)3tH%)$KsM!mq&C2j5p=LosVL*rQphHOU$9ko9XgYU^muw}J zOeK^ot^!}`mPH!kfFH zmR}}LaB)?*H8LJ&cMi*^#IdX!5sV{2)+8ElBn#|rjE zXW14(nW0@V-ESitjWQs{E8ra3dIzFHNf&A{&7g%5sGZMjd!5=UANJXr4VKXalYx40 zQ-*zNUA9y>&|^<+XRfNeVh*MUDP=r~xkq5>oXXu_mcG>L=&PMr-+HO;z{{ahjTCEh82HkSQ6JESrGyT2bFnT`!Ne zQD%^GEH>=SWg=|_^Wx)s9dds^Z5!EzdFs52treiD&24SXORw%7|F(w33tP@t#x*i* ztYXq;iNU;Eopyzq_LP-j-7e-cvD{WKvRonVctuMyw>8Uj7r;_&YL2OfCKl~y8`=u% zE&|1EGnnKs+FE3gMg26z>BX>*ym2Z@lX zk}w=@QSUp#RZG+#9pUN-HZWXWuUslz6UP39YgS?X!nI*+U%0j&s~4_qQGa%zm{`W} zlCb)VBfMk@J5lM^tKU1&JuGLqu}%%;w@nRG;idKJuMRrNs!)ZSqG~uJ(6Abz!Yr2_ zaxgWcPUOB${f+yj>OFp&)JS5Y>J)z4*iaj8S%IYuw=ybl(lFHNiY}r$Lxq>Msxz?< zVK%W+Wc4RUctu!^QQ=if*`*l%OhmbybOTh0stPx#vHUJkZeki$Dfdg&5bm4QIo#i% z_B&|2s*L+KRj#Tc*Q@dTHmV$FRb;91bKk^k(QL?26IE4xvpQc@H6RUVRl^c>0rySn zLVjD>08-T$R+Cf}GanbJs^(U8g0qT}UZScPN)$M&+LowGRn@Yvx{TjC^>Kb1mB(4N ztVR9WQMIZ`O;y$KJdNK5RmpFQn$B;V8tSaZ#mrRIkt#Kd-$pfCRo92vg;QN$r7q__ zqK0u_r>@|>LH)r|UB5(K#r;whS*nWNXt=YwrCx=&kE*b$Zmm*Ps+xMK zR@KNq?WjTK5qwLNI@wu6S?ai7rRr4;{5SC1q^?&rEc`BE{L`cw`CYC~an>|9s3ui| z+?rJlG^45piQT~OQq{t5oBEBTX4Nv)rfNRZtWI^ZjHQ;VNZl&6LNUX{I#{G}rCP;U zu1=lqj4*@qSrv&kt23M!S7kUODR$nPpu>a3+s&*Ha5-KOfoVb#g+ zDs{V(EdiTU9U8Tn-)8j-M;#i~!|!L*ovMx;?^1Q>&pFOI+R@qk)~R#(U9QGE>u5*Y zRb6wvx|iQ3^#y)g)P4N6sW_|TRqB3ztJN3zji`N&I@(d0v#xc8`jVLys8#xC0V;#%ch9cY9+0;&AY4S3Za)kNJxkiQXz#B0)d23yc3cD zAu%NZ5(uG}&^rd>qW3-L-kF`1?fibf&wGEok!H@`-tRs4oO90=f5PuR@t}yNFlt;; z^oNH<6m|Y*0aQ{fbFB#tiW=7%r1e*^CWW!%T9ZnPN5vY{#$%!%HUBuiUE&FR!{TrF zV$`_$G4`Lt?}Ru5ztiGr{LYAG{2mZKe22s{uvsUTyZXDj#lJ*9M%i=tM#aDJjf>M= z{TN3th<=RydRIT{=RADVqRrJG?-H+w{$#&+6<>@yS3g>+4&StB!Z#!SBlPJ6+AHUP01;4Z6LlMKA@DaX!;$wW{;uCz6qQeDp zwD99QD9&`n(2G77VCjgU3#4zc65p&?<%)q?uv5g6>%=Y*%dQgvR}87_5wU?Tu^PX7 zMLWJx&`x7$M;E?HQG{;>5}iaP`~cr>F#+FRF%jQBakdMXi8uhi`*A2bj#@nzHVJVc zeka9;_@=}(eAA)}_8E|p24S{$?MY;a2(Nx zZ&IwmHzUfmL?k7mE^M=fTT4Vkq7vV*Sb*<=M2B_KL+C)?~2+-?WIk z5^IxUsg}qjMU|F7&3m-OP*@mRVk9I|t_0RBFMgvB9W9 zYX>4?y(=ABBhJ;*h&hBWT3kyfu@d0hCpNg!7zGh6jsE;8z6r6>mBuX5hu;~o*_A=R zTBAYAP+WxHeIkb6Q4z-%^^b2{B=Jp%^WmBiYw` zeQ5~agc#N`D9ebJiFS*1_$I`~E|AB?2K>&7jamkC>?VAZ;xl{)#ig!HJS5K7G7ylw z5Wl110{mVhF2pw>F2Xk{E`xnWT%u(#Q(f-LV2-)~-+pnqmO)!zfp1(~;mV-KzJ}jf zakUE+5pkR=lkOH@#Wx|Y(K1*izlPsw@l6fFmEu}_hs0H`%s{{Rww6Ktd>y|t;yd^~ zEVgJF;4|NFWw2UZi@a%E9hKg4gWCitBdKX7GH8`t6+7dL3c zrn(W|toW&x?d=!ea%FpCVv7sZHSuj%Hrgd#)3VWCaWlSYaUE<1#jRSlKPG;uWn+Ef zHhiPvS6UY9&h1(jWxNC5g!rB-n~I7%wQMFT?!q@AzU#`OSAXA?MJc|6Z(RIN%c7O< z!8a|ghfP-8r)39Y;(jfQHRy+~EXH6?8|aP;QyW05{azbDPJZkf=ueBExWK9xf7Bp2 zEB>Snp!RNX4Xo=DH@XH<-iI~p=EYB4gVBiinQIWe^ym0y#b31{%thPqjfqF`O^e6y z&4|Y}2)>Fp@J)!nX+yDu_=Rf-p>A>w!{<}lFlO?bT_c#a{-KSa5C2meL7%zBHG)2W zt7`=7&cC#EuzyZlhdJTj+B(GZytWQ?_)FJ10xz?fWUe?wP4~ti{b?ZXn zRjn)8EvC32^CAv$g)zDhb9F}s#1XDYEGCX|MbOH#fNx~P@h*_)#B5jJNJK1jMKdvB zU=7NOT35WkTXeeO81?74;^-}5R~&Oi#Fc<*eFC^5b|t_Gh4_}}hJ75^oe%>e0-H_1 z=%BL$7@ZL71g0*rLC{wAYK_R(8wILXoB}Kkacaajyb73`5EqG_H9}kf%uR^%ftv|& zspvskUjsfS#1_%pEyQ<#apC$MfoVhB2uw+cpNU?i{ypGG0&F0l)#6rQK|l zNZco|(20A2$q4a?zycz2VhzG>6KjzAUx0xKajob_*w=w+2=SumM_Jwz*ldYs1%|2k zyXZ$NJTLl@^QVAs2=NB62qFF{`VsR#fIkTFf#^qUuZez$imn#@$mh$z9EA8xV7n%E z3oNkcC>ZGC3xUBQb^uQh;#1%WLVO7f0oqXnCP=Ye#NqQO4U>VGgf$xUF|5%zv4=Gp z=Mb?XqyK2cVm(Ns{rU_oju?){Y75Gpz?3QGX$hpbNW-8JrC3R!b4VlBdzqF%3>lF? z45wnPgx()5fq3R?38Y(s)ewCT>mVf8wIphwULyg(c!fGo`y9@h^U6mrFcnTc!?C&6!1&5403oG z))X9(!)hW#KUNJP)@vD*cQe)t$o^tQ5aMF21?W+j?S;5f%d7=&T4a!`Z(vqOAJ(wd z5LaO)7vefCgR*=N^ErANW^5sTgqc~0pI~N2f77s?6~DkdEW|CCfpP8;bFUCT*RqKJ zH<)#W__dZr%=coxMSs(>i228uONH2~Wl=vrz$}Vhr(psXf54n6#Dm%ZdgDWwErs~A zMkIhov_Zu47tD(2IU2S;;z`VYLOhKbPl#tUARXda%ymM%fcZ^`X0Z-Ae@Ua+L_V)+ zU%>R5b|~ zxjmVdnYWo@h=)tV7E2@*PI2867JFk(@xaNtN7^QPET#~19mt7^K#0fUTS!{d5svl3McQ=hK~c?Mkvr_Z7g zj!ht5IjusqDh~iCA3TGtqdl#H=7HgfJz|0Nu^jf(Jp z%KrZQi&X&CL-yOREPoZ!<9_{(ZBP}j664&fpZf-4#5C-VhV1E!+XJ04cNrb|Ur zktO6Go4jmCW}c_0AJH5|G7wP+ z8)D^&c4zxa`ywQfI$sZ@M<|~QE6au}7nSkE*{JxRSdyGgs+LS%SJ5-6Hn_VXeUSPn zy{5*}`lcGZ9bmyJF;J@#;ocL9(bfU-SRjw#DV{IaGqC!Av|`h)9-geJkTjxU#{w8aZ zP%ZyUERm9V3M&F8%!dGg6Wj3=_OrV|l`n3|1{-q2Ot$T&`IQU*nwqxxJ;+LXT z_E?qquYiP!ZW2>Fp)DoIDgj`-$!WnlCvrc<|CuH^L@q z>yF1ygdjY%*lYFaR;q{}+exDH_-R_Ugg@c0ZXlg3u_A}r3vmui5F&u)$LOUTHvruvGv`aMiCGIl zLlO;+1e=pl_9x3}wF35OXciTYvL#wo{rfSLC_*2WN;ecm=ggno$gr== z_7Ss2G$b)o0@jAo{X--+pdMLeC1abzv2II`NUEeh39_qtsJ_A9<~)*BEe%9Kl%IM+ z!pZ~Iwg`kNL=Dz`^49>72uyS$kWA^7Ww7r{Lq0l+{dgPq6r@w?Xclogx*xTqupzEoKhEOOPOqM3Nvl)BTpj5GhfRnk)B`Q1ZCE%kdy1L}@F}z_jdPqK zmz@dj-oa2J+lx%7mX__G&rxeS2|5O*1T004>f`N-^zDx&hnya& zqrG}HrgtRGPYq7TfY>kULYWc02~8X!kuIuF3>eO_^tXH*AIKluP>WFSn2G00pfAe9t zisJ`%{{6r=spNq^bb7}E;RS9=o=#VDqaTW7`qb}$x2ZZ%-RcYA)D_-lysd%Sy5>M_ z)2cviOIx6}tp;yXpf=DDsB5kX)O7>`^-X~Q37<9w%JEjOfn~8G$x` zGv1bfzr~BU6>lH_Y1V+>Uxzn9bwrQCe`sF^46KhR2kX$4ZN$0}hdyvJFPzn@TYM6) zB8O(;Sf@J&H+|j{u)d2}?yhqU=fih#rNny!UsGEpu z9Nf9jXN$&K_h7|*P){gFjEs}`HD+?c_AutVL3SwyCP;0>>3W+u9JLjjNp=_ywU2@| z4AD*s5)jlz3?&fMPHaXyNGRnRsZFGrfuQywGb96OXK44&Kr36ry~Qv6x6AyY?bzJL zKv4UUna}x@WN=uTOvn$~lptjKFbU=zsGZ54&lBdY;oo0J_Rwg-^E_4~NuVR$1vYg~ z2p!uudBUPCxk3>{=YZDKA<0q*k6C6#J_L>xF0rZ`lLxS%{7DMJAlcoD(y^y6*yO_B z|K!Cwu?T1sII|@f`1j(Hq;H@!veliKM zU*03?AnWlSg50q)?Tw&GB?Mgu;u?gdNHgvB$rsugzi^g-edm1%$WukQ2d_!VjvP}z zQmSLe6-=e%emzb4tAKfV#Po59p3)T^RBXSfee}$}CJW0|Ch3@$dOEQU=Ga&z$W+^t3X3StsCTS7i zk%FXcNMeZO@kpi(^a0Rh5-in6@^mB(MRFB=Xfo= zBgux*)05O05;8*J=!rtMfaG>bmVhJ`NSc7;VMqodgZN4Mi{w*DE`y|DNe+V~<4Cra zUocfkjxmn(NCJ-JOh^iZWU}ZXIU$l_Bl$X#m?5bXlA$7*9+nORJ3jK1!(q!okT5q?R=n50-RU*YUBUSe|MA&Db;NREu; zKmY&mkUR=W9An-=d9s3}s7O|mq?SpFha_Q0s+D9L$EP$%Zb)6fIw0{jX5l5C(=xy^ z1u-o^`j)2)ajt@03IZjjX#^4%64J1z@HBb|(m*5#lv5CIihG8F8tm36d)n|&UZ_Qu z;iXZ1CSI!HM!YxRrH%28c!?MGQ^4_n&jX5-CSC#{p4Q7`R?jp*qURCBWKluT8*FbR zSTQ&-qUGLESNQ?bzUy#6e{e-P!OY-V z3r3HS_U@_VFI726u(mPSL9hedT!QY#V8wVqXpnLf%m5NSse3S-Qc#yLrOXQ~m>_#^ zuzOI!a_O&ct%Ay5pJiX6>?;*qpx{CU-NefZwz|tt0ZgaXh2{ZhXW-j&pULQrW%?Me!B7?ux~Q~&7ewqb=byA@oZ z;6epYRd5l(`0#>+f+-0rmAO)x-OB7{^Kkcq#pDk#q+pkVVFkMtj40S6q0HZK_aNsF zkn;yvsoXiAFmpZuIiG->Pe7IKph|a8r8}t79aQNKs&ofAU2iZh%TX~{PW>JIt>Roj ztUEf5Evz>^G`6rF>B|7IKI$|c2E!%gs{tX;P(kAY((GXxYv>mVY7cL)d|1K(5?m2j zuk?$_Uuswf;D^qhMHB9dNea@Lv}mHD@<0VOK*%6q1yed30As0e+|mIt6K1C_h{M^u zu#(QYk&cJ)fHeLHk}e5LM}(y_LQF?`&;c=4X9V%A=f_j!#KQ)xpm_t(O|Tt3k>(SO zE9QxZ!X<8+4>F;!n~)q3JkuJ(p)S%r0p&k&;+cc>9kz5#D7cnjW^FiS>7bYZ^I-R2 zh#dMbT;8@iZ&PV`Whb??ddkQ@+gB{=lzow0w7k6+ z`)A9yn3a#Grlm#h$;k1ryuBZ1Ic@***gnwKUbno~w#1K8X&>+wG!}R(Y#(fCt8Ogl zLbTRht+`rEGhzzowCwi#T3@iVwZReD1lR{VYa83fj4+zhgPp$9(b4TF z=m+5-u!nVF#nDZ(+4E8Y!>8L4?(mZ;5Q-A^D~O+ z1ot1~CH$A3BP8JO4fyWM{(G?BNAAws>9D8zv>x(n`Je9iZMlzycl>j1-ai5^t3HUm zT!#KacpyDTSP|m)P3xuX71`?!d+(TjN$&KV=aX>kH&ie?=3Q^h5MyZcHMcK4t@_x0SlpLq7=m+XFn*XrlCpJnE<-wfyNo%P(^m9I}{J^v7a zo%L+}w&NW0<8z09r_)CcduO`C`zfz8tn>F@FgaTNyuiLMpHGV4T0I|xe=E<Lm(h`M^X?^AZCf$&sh0T0(#1p__bC!q*eL+iurC7 zl=Caa16g8)iwZARJW}pN704l%WVuU$C|M@#wYbP6-fg)%_E(&6EhH|I;G+@EoVCb6 z1K$!-!^gV#_GOcqN&$;ArNtS*64f|k*Gn#k5>5n59Mk}(cv%m)hR}VJnLLO6S;9Qj zk~oWy3`@Bh2t?txrFxIcWL2y1g@$F@T9S|XnkT7lIwN7TlUT`@j&tZFiJ&B`t@a(W zAC=WBlSgJIgP#w6I*DLoR}5KtG_l1olk#Vl5U#3*0(mgYC(D&74|zQ$tZInjC2_G- z8r*wuU~GXT;Htn<>sOZ6x3ss_)L>5mv$w`xm4o@c6UXeYmUv7+?Nn6xN}aV{LrLL~ zhEkQp;c(X6(xVm1LeXy@iL{`BSK>$qwOS}mf;E=15>T8Y!(4+tg&#?dOMVaT^ENh9 z#7$~`@cU)H=HL);T9v%r1=@I}%D>(Hsm{xMk~=agI9 zJKH1g%yY}z%J_jaj6~?HU;d$aEd|7y8$EB$^IaD9AaUdwLq|CCR3 zJSa%cJ1F}h@X{ggVC&rDe8N9elt9m%gTZLUGe(D><=^R*6H)#hQe`r2vbXBNS=nTd zdO#4*a0fulP=ydCpmhrnQ3c>-Sk_Kj`R(%!@UTDuG3kT2(JG?jG{W;#_ zbvnsO=PU(uU(nf3*v+Doo;aI__uS*@+Y&o?y4ivUi*dkgID!+Vl0#E$@fkN1ywpT^q; ze}24&=s3BH_ZYm#;ynWIk$4G5`%5vM*~EB-zgpPcigz*IC3rPdfD7*|{JvWtZNRVK zEyMceG>0ect=r)zXSdY?{j#c#Y;?uhg@hwyuX6^ z8Ng@p{tNH#V16F(IlK?!{buAGY$slPg38MKifyB#TSiBFMn~P)V2r}FZQJO!Eu-6d zMz^^~w+V9GvTbzBmeDOeqg&jgTLk&-**4m?H+Zb z77*FCQL$xI^o$BODup7Zs1X+e!?&Px=-IMuThF#_?rqxyB@5G*E!(#AY}?}Awnb1b z;MlWeTTjon9{08$L79SI_m*w$o^5XTHaBVq*+l3q+eFVc;YMXqmZ=QLG;)b-!3_x` zZbXf^5Li%w$c(3F%NF;RErQC2WMS&*+0x_Q(j%z2$ORnTJzL!FEpD7!Mg<^W@ZPgU zxVM0}OLd2AA~dQ4>po&EKkSt7Y zcaIxfLR2kEjEunDjiF4{Os#@^!8Ms*-hC@@NhTq81M8X=J_XqA@9JvXpnz>cTFIP0xI@cWq{P8np%%CFf9R1+g``&!y4h)K2FTDBvORuqZ+M^B2PhEFT zJBG>V&K+<5<-yB0AYWp7s|F2N66y-hQV`i?p74o))}!X@5Q$r7!8d@Y6p(f-*xe)6 zVINkYI8P^Gv~-k@1wvoj>=c5`##SLI`41L;4eU~>^pqQqB|5EoBxo+rO2{n=#ZOq2 zM1&p3%^(|)9OPK@he~)IvDd-;0WMmx^f2}u(m$1wa34$Vg^$j$uvZ3(N;o;Fi?deF zG3ym;ptg=TP=e4EBk^03E5-r|DN~?Sq#zHHT&089(6B_hJcN)8L*2W&OwGDVjdT4! z=7)s-AcBZmM6YGE(iWdIVkP%8&)o{x?qfb=g9lCpP|*ZK2HDVxrG$|y+Oh!JGEUV>Ub z+gC*jy0K@8rqwU%3WVP%BlL7YVq6&#vB6j;G-t)3P8>RG$&^jvw<@3AF2GaL;jk>4 zwb_85Rw!H!rS(;_Yr1OE`l6C9v|i0(QD^d+VWI!a_Hixe#o~k}SejNf({V*Rn2=jNv_L^@gu`MVpBE#8Mz%B?F%0LSZs)}- zL-X9dDZCZ);%h3zih*djKLAR=#lAOgl)QOXWrHzObJdGU%6s)hj_nhL6lcAC_3j`V`6Cse9-+e-^4ifmXAup>?R1wHE zCJWAu;|LY>p3?ZhaV!$)1feBEy+Ue!o-UYqJ5cZZiwF*FTE}TE=ovnH1KG0QufR55O)BatAU*tyo z=W&kT2dUpA+hEZfr^1f8WNsPropLBLU#}v;%?^`yUQqc;ZzgZ8| zwCXD(UExq%AE69}=fiSN0y{c)rH9Aa}%=iklzfPET zN+s_0*0ds*i&~5NF+EOu8WUt+*qY=^KIE?a7mdShsG2qdI$z~jvf^QTxQwxv{)>vn z`j__OT>G}yT}2cR<;fYpOLMW^k$L-xlx~rxaXe?{?KRkIn^hbXmouIs6o~9-vas!C z^{D!R{%=)p<6v*aLp7xACzAap6+g+HDEo1+=lswdLb6qkcw9wj0kWrYQ)oY)?MZHC ze-HV0jn}lPC>N@M!=qIXm_XOlA`rQ=pK;p6salcd+9cB;?_{o7-hPJjwbGw9VFH(2 znOz)q+__`hk>hZ=yln5Ne`!BK*1w~ER6NVrKb6Z$kK;$iss8uh0Jvyw)QQxCFNy$D3WnYB^QW8 zBEPsz0Z{k4tY^!vw zd@1ja1M>O!Fv})mIK>8zggp7nWJ;P*NYym%dK{Df{`{+x0%HP>i4}WBpf^CSan{D( zeq{({m-kZO@IfIWv3EX|?|tSH_;q0^{#$x728Fid)3Hx?$i`CrAn$IKzc3&BF1>S~ zXNMc;qFo}No5r4DOg$IGO1W2EhOzOaGhiXUrS^Pap->-2M~x5n*vJ}22Pw;vof7Bb zN##2+;#gx3)Nw%@jT!{-Wa~-clB2QgDy2R)wt?s*Obpm1E|fR{np&Vh0sDY5-Z67{ zWP?Yi&uW)Q2dO(jGuNwA`0R{xb3oE40ZW(>*qVLG2E0IxD?iOOI@UYrhi5eu`6X@; zu1elnSFlXM^0VOfN%2VybO2d4WOUm#3BNP2h3&6R@uD}>xw_Kbwo zV6F|;LfI<8YCrj*r#sRUQpbRi63p_*CA-nQjdKuufe={`4(jChOoBNEt`KQaq=#@( zXfX~!r#_o?{_g$hD5=3DLQ@QF)_|uJn6N+Mu}fTD$(ZOUDY)iHbd=y^ytUgv^tdO+ zVM0BZwBf!SoYhwOqT6%wCUUREMe?LaS3Y1{vZDM=HIH%nLWe#8AZ zg9yzT&}WP5K55``ec5$0rvs?sJc^$`KpK$)T(y8fi^~>(q*9$Yuelf#o^^{vNUt7; zBNY~%cJ?}vCki_k5I21BwhQ6G@CLmCNfwl=j`fhqNfAVk&J+|*m($j64tce(SrB3a z^(C~SwAODmje@2|)WIljc~P^Cn%@h1Y5ts^qrXaZCq%PC7}@)<2Uq>EuoqLhNI@;T z`>J5D<1D3kaUAHz5l$?@eEmf?I9|P&p1J5A2~M#oFtYq}?FtxMbeSY-X3RYs^1LZ; zr965Cc2}J!S(X$Kuu>6PlT|m66+*2;lawR{niS~FESWegdKyHO`7XlIPNf<{LC7TsQj50iQoryP()pP|YM z8d&O_14}bAYS10b;?acH=vHp(9h{KzTJ2ZBkYRn8a=h-9o+RZ<#cz(n?B$QJ zF}_gN;R)?i(5}?Kt?9wp3E;1;r5@83=2YlplzIeN-=EAB+%d7p-44bF#EGzvlIx+$ zhqXlQYbYZ$^;^0!hsOV!|K>trluWz=7fG^yZ&eoi-$mH8YI!MWHI(H@2NOysakyGMITOBa!R3q5sSH$#MDSVLr8Qen!y zjAjb>uri9iTxV}=X@tzu>!R2jJMe>chu%2F#UxoH;;TR$PucL`0z0dlt~&-pGM&FC z*%_W^cpb;1aH{PTHIDXnFYYEM=+ha|p=>ANQ*0+L4fbO3(7X`J*4*CIL{{FQ-0!l! z7W8PMKSc-~Q~rsAL3Y&o4r}n6hgs7fxf5HG4G1G=fV@u*pWi-1>>`FEl9)ex6Tk%- z(j0AVTS!(9Ya+|+@nvf|n`pj9CDAo7>gi5`UPG;dwH~9)8st*(96CIv^)OgpP`4Ku zhE8qJ4?qtHv1p}Aj3=2e^4(4OLw!)b z`8T;p;RAFJNxiY9=BWJCYb=>XaC>7T>ms)LM4C2OPcw83;h+jOaoAHb<-_txd`@US zz=0i-E49=vGC2jC**4pv##iF>CSZ}TKt92M%Q!4&MtXOmi`B1Tv%q`t34|$6aX2mpa zrJ+K>HHG`+=#l#10#LSu7=vCKIC6)j5Gr6ws8-F>uO; zuU+@^#`nH+&eKb;e7N(%uRV3y8-ri}P5m_=WY(+@kKIN0TT=WhnreJK@vKh2>8a(M zNWG(yZ;NJ&#q9M$tqbb0q3$nW( zcWwR`XM6pXej3^vYh{+KenUbtBbdOeJm_s&hMAy6!@72tJQ zbw^I`ay^)`3@asi?Z z;?l&?QR3Z=f~f>94}aAM6v*>vt){0Dq}c>%epIyu0yMe~%iQn|hJVRD3jZ8P^p_L2 z6%d+^C2mjggd~es5aZK}W8=CyYEH-b>0x{De%XKz} z*XncpK43t45P>m!S_=ca<8(TXGH{$^t}7w#vP=Q$0{92nH~4*|pM&vyGB2O64DdmE zJIJGDZ)Fhnl}`IgYrCVyGu&hI$kROO5xqm!BL%`k@#X6_fBrYD^bN%;B_2-xq(n?% z0?;490txKSLNXFjhJ7ytYLv7B=9QQv2(mw%vZs@xRDom;;J0;JJIl2S{|Kp2ZabeW zL!&IiP((4-y@nLogCatAZCGxI-}-6C!xjajmi4vFgRbRyYw45j?PAaP(9K))P(Fd< zry>8(W~d#p?a}1Y0GpnLm2}Av)7uwT>LkvE4I-A9L~n^CYj#C@OEA7jHKt?YK)Bd{ z4;RDXgIHv2&>nY%ou0em|B#-$!cK4B;r5+g#*rQ^QCOf<@O_sH{_S)M{qHCKihTVk z{}r+t_Y;3bzTOJ`?`(k$uqbUp^iX{#ox5{4oqD*rZ^vqx=l=w|b-@d8qO~6R;8PRMP&)$-a7>Cblt$6wpn&`9AMn|(C|>sps{e09D`FPVLnHEi#1uH^g&!RRFW z_NH2fh&MO`X4H$DAhMxg14Gy^Q0@yAtYjGMV0Uk8WjUE^TAD0aM!ZSHQ$Y~nD@e}8 z*V<4iVP*NjFt79l%MX!I>A}i$lPpR1V4nq*o~%qv+E*z3SPRO?9EKtwf;F|l<%ju7Aak&$jUj$dCx3XSQ+=U7u(>wa z20k&u`|A7zn|!StUnUmqA#Wnv@xl#4=yJ;#+p^_LE@X!Ly*Wl1RE`R#jFo3@W&)y_v(c zud?AP@;@*#SWd7aI3S_Y?}qLn;|Z2CY+n^*|3M_c>8X6If_5b`FRxuyLvU5FeKEmc zZD94Kfc0%F+phq0>WMoRW_0Ir1uHUat}M?oTwu!;DEWf2F>(ca$rI=Z=k*86XGvIb zA|U!n`SF0LxAM7w9k}m(0IxP^WA$P{(ztR0U}c9dco-n= zNhn`M5c%!|47M(;KOB(s;Vl8oX2Rjq0NbJ2w~E{wJDNOzD=;n?md`I!u>5q`W4yXa zj&)_QrktTK=sg4GrWTBRvTqKS`vASr>eCF^7N{t10R-K&{5U`&o3;W5P(N*eHU65~ z0N`q0b+7~Q3}3KjHQ56xCD}dS=@m6+0S0}E@VS7bcWoJAV7IBU^uoWO>(Ft zlX?nZXk98zu&s5qmmulQn*!)>T~K*Gptrrv`&9`mE(RpMYhMREqaj!hpdLy4B%Mvv zex&P(AnA4@IAOZR?MXVRXnc?kDuOKINA56B1e^`pDUEdv{%MY!0egbeVAcT-hdcEl z9gq^A0{c2Zl98jjBHAksB*6pposk)k>Z%C-LVzy7F0u!V0v-?l)CWnfWfYKfJe48C z69LZ!B)w@Nz&U_jfF}cn0S}yxk4w^iQ-H_9Uc-b(`GVpt&Zh=gL}p#e6>ES8!n_=C zs)ACFoJ^n8wNgH6yeKc=tslYPbPfFx`VU}E1_d5XKs}+C%Gm^ZH$jrmAs6dO$13<| zTT?|I12MG2T=R-nk6$tIxJkhSmP|hJz}l&^r!^k5V0zt*#fNkpdi>0WBjz7@&QS}G zIpf$0y?)kNC!Bs#`46NaYQ^!b)Jc)(p2^|HqjF1<$jMnq?phW z?9+)a#$+Arz9Gx2r~0#*lZjZvM{_{5WY;6Je~IU^cMMDgg-Tg|+9IJC z-9Z6)wE}s!bT_Rg=rgqe5NTP;oXy@gAL#+M(`jpMDj)<9JEnjd2a0zVj0o~4saP_d z{rRg+5|f2AU+Y8?2Zb{O#ZuTjbE8rw$0j#l3aTlBHF%TY1lavUaYvxvf&_KIEFy3k z11=8cPayJmkiSw@wt|{Km%{~UxG-5gen?g5^^Hxw(wf#Y96ogt#3A7%Z18cg$P#5F zX+yN6Je33SEMjAD>Q)5~#=A>ATsXyIo~!4rGNetQQ)&+x(?8*fbL5YL@)pvAzC1aN z?VCXng>|*OW@$3%?Z@eSIgn@&Dn^NwjY9W)4_0EAq;Ew1w0K_X#Ecce?CO@m2<)WqDx<=oM_El$x zBGLHTfsu`0z4-F0zVYqv{@^D+yZN?X|MuS8A0Phf<4^wcxffsk&pRJ{^7+nD@S^3| zA5&ie3~$FhnBdJtIqNl2L%l6ji|%V5p|V9N;4?$l0^{*Rd2~N2(jq27Hd)%scJQ|} zIXVSgEIPl%wdAUGTwrRsJ9vVaEqiQ1F~#?!UWHx~CTc#UdO&B*(!98LC@VfG@G=?t zP={syk{!CdekY$l!lSSp;_hlGkI5eSgLM!Ot!MO$)-Cc!>lxtz&ZkD5YmH!fTxqF< zFPs6mo-;!|9IPIKG=2Fj0B^!ViYJTu11lZ++}S7s(u}J`;(Sq`zs{lT9$u_+I%lc0ZNPEA+?6pM@O|Jh+VkF6YkC4YaDk7e~+T7@*I=mvbkJPbRy}0RY`HYL=_%3#jA?rWGY_1q}aEl z7+A1;ikBDr$b_ZWJ-?y{OQW=h89T7O%>9-JRW2z;g_>1NK4!X7L1q0h*9oVsQPrsK zB;;toYDFc3nM+sgNfA}teC?1A<#tlxXfa+&6_LMR7=}`^Mgvl(RNPbSZToQ1Rp}bK zod^PHrG#vi_5!mkr3t#9f6_V5H1Nr2SEkgP=uRi2-KDsu5)6#eHHm1cqoSprluBp1!{R8kCDIOaDwtE#g-%v@)=PsXWFp3sb%wLE` zrD6!LQ!xXO4W5U9mt}_{kYHs^T8Ni0BE~H-yl@yA5y?p+(oe!O&UPc&Yn)B5lG+(a zOdK-s!yN&B*;=miju?{dtue9IrsgGsqn9zeRM3R^KMeV@T-tV6i@WgmF1lZAQ5V0B7@?nB_2}d zB_0_M#(aUpDdm=v)z9F}UMbFqKC24M_+~Y|cnR`8L6li#07M8<;uo{e2*56=lka;}O{leI=svga=^Vo4y3^{dPpH%wA z8M?cZkXnga=kQML&WRV5N*+)-G z&N$gFCclVm7i|u)Pw0|}55-I7c{(&dBOG9*B67 z6q@qKKC0ZAu zIZB?#qdp2cO1UlLOX0zmgrblv==>$+I{l*Zs7Y3$!{iI}YK%#~&p4O_cC0Rhf<4iW z={ZR45vK#v9&rX>5xYn|6Ju${7A=;&;A8DefL06f7&EqqE`j0u!je7uU zNwEF;NC$e`<%{m<*v22FS@2b7Kae7hiJeWtU%Z z<=4J;)zx3W<{RI<_FLb+?mJtyeD{0TfBy$R{Lznp@{=2G{OQkr{)?M#zWJ70e|g)l zZolK#zrORX-~9IO-`#W1z4zU}HD{W?f8Y;){L_OEKJ@UPANk8)|GMqb#~y#;iNF2* z$)}!v`XB#%=GlM!>$!hF|H6wezVz}dufF!$>u>z$&9~lq`<-{+d++@ZKK$sTk3aeJ zv+dhI|6<3NU+&zs8xPfxf1rysfb!CauBc;8?8TX>K6}3HPL6>2l{aI?NZ@*P+Z`9b zL1q+U*N{HeSJt>CNg&_#S@kk##6&x`UYi^xhQe;z;znd^fiFh0OAU6rK;?nZH#Rn6 zCkA(`(QN%h)OdL50&IuS~D%03b_~1=M^QPxXf+S{T1Dj7UVRL7#wiN zDNAUz;{6`gsX`X2F)QmVkIiRFKxQTxYlU5K(rCHpJc}x8+gKAA)*^X)>i-zfPsv&N z_&=mNB!{)Y&}{`eE{3Tw@c3}&Pe$+XN}Xi&Hm?C}@Jf;TcrYj<>eed*zFQlR)%6JTpFkzRnMpeVkK2B;XmCEn#=o6e*!moyuZF?KfN;o@pCMG%_3@hg>Z%01z%p99EJJ$Whtx5Q)el zYRaWcy8CPV{wl5~zN-cG;;crhr&e!MEqb(ka1UK2Rit%8rX4?7SOWuIM=F6{K+Vd8 zqG{v4GXA*n92#9;+8i`ann?`{`LN7noA;r)#ube(5{P3WqXMMEg+zMuW>(|kFmtSs z_LV+Hi=e`XVpQ++gQgyG#Bs;Wm~r@#$DL@D%slvrql+s~D?fDlF~`qY+Uh>^;N!}w zYlDks9&*y6)0QnOJM`$XQ%_ywKH;E4PdHvb?y!SMECd=iQ3w(-W+`K_XAi~h8r`Gq z*)vMO1;Jy@wPz3gBX^i=k%OYq-P-QmqXddH@TZrASJdk7S{_7u5_#I9WeRWfdL zm$qxy=(y2w8ve&&sxB%j+Ouodo^gA2x%P~6joZDeXxF&iJH@V|-Q$YJjqcnzx>Fk+ zzh|dw=lDJ2UAuOX$AHigt+69piWI z&_*YY`*Om#Jv(-|cJG+DyJ+Hso#KnpFLvzuLK`>H^~Ih^6DE97G=9gC z9s8^4C>7|#@{=%lGOZGES zbPHHu@j*Qak{7m0sVE&F=lR^GTLGt2IBB>?a!zAOpv)ks(Z<$tqjZ2S)9t$;`@}#) z2i;lvzzN`eL4lg$TXZlTZ1JU>Cq);85qgaAXU=wuz$-S^r zw1;H^T8%Kbk+Mj|!nS5<$g#7)6JAN`%j1$ zptAcDsK4GRc8fhMmO>k$B5aT*LBMjRI8XduyoBqGzkrJFy!$w~P8YgZwkR_=+}VQ* zWYx3CAMAjP0nUDcVgR8RcE@3$0(Y3PDM*ldTFYKQH&#*6I5}V2mh=Pjo_faoVk3Pt z`&SYFCL?}9n^vAL$P+p2Nsfe`i5y0VQ>9TD3XUph0p7QQnoL*=j^Oo$faYNFQ>UNn znrn6JaY*YwS`QZ!s9uSw`J@+e$DFj>eCgT|^Q>bw82`NUY~$XqooLh^`zsRL5|6zR z$UR~_kvn4KFmtQNW5V5BJDf3he`k}Kd~=ggxn$6Yog6WqJH5$RF*MJp{?i2GmQR1@ zd3w%L4o~s#FTQ>Gx0YbFr$$d^yo&IGo@lSyij$m+LY1Z74JsFQLK2fwEQ~z=F`EQw z6<1hDs!LO#6{Qc5;=U;F^SI*z-DqiUTGiRq(%e9k7D1fdZfT`0Jsj&A8UPdF)^n=H05gmNKl4|<3yuYEC<9-ruuq9 z8xW;+BvpNC*|>KAFF#XTCp@WGGZZ9=kZ4IR>!N@6pZy2iGN zJwdeD$M;YxAU#?R7JaxCEIRN<(IVtCt2f|YjTAg7dm^!^xM@A0t7K3=IAc`ORKro_ z!-MX^hem1ILLcBd|v0#8qcpa1DC9pGC8koy zI;qp%?dU~9*iisGoG2;B@q(qW{$QuS!AGLBh>V{!rsq<~OOqe7Jy-U7|g zg&K_^Pq3#Qscht4B4fcs%scSJ`TkKj<>Qs>BWjlUR%wvfDUEr0oxjG`?m$)8200qc zUVKv!t(8C+!1{(D9K?5Um=#iEP@YWvB6DVO_t|HjJs)|a(SdA$o02DN`RLRz=Z45T zq^+y1wwgD3d>Tz*4H>0>1H8K=9~2~y(#^3Kpo+2PBWpHgTC1}QhEaZulQ?9G=x8b? zrYhY{9;}0^vM!oI=8Av?G5}f=R&9udDMhwwY@?Vo;dNT+5CgjpvA`PC!vPE~7@+to znjFAh2~Qj2QOZ76u6g42|?sv8>>ORmoUP7bJv&8Fw5^;V&3(}I`ic3c#TPy20c}O{(99Ft;@~l zf8#MO>W-R|UmY|bxHN6fd+2+fdym_lJE(82@yS<M>{f)*IgDdh?pkrkD-a|NZ{M*Ia)8wf##^Ygl`hx%}B@J?GEe zXg<8-Tyyc}amESlrx;I6-)ydb;863ucQ%`Ucyhhbw0^2_S=kYWXWAW}lGoD45BhcE zzG08~)OmI0?)AUSy*{$W%uGAHYVhOd02ImG4qOqxh^xs_~NKfw_d&UO!KCy zXFbt}UFG@qBOh#Czj3pfx?{EH>C^hm-3Qi~2lQ<=rp;Y%%nuKk$9;IFdF{yq z#y_4O)MYu0W(`^W{xy*<}>UT?d@ z)BW#^@yW#pnoDLinp?77^LvX1%=yQ!$bI=moAHh0knzEbCz)rT95(CkO`2`DY&Pzi zy2iNqhwIG?7gm}FUv!x9!~1`CTA%(E<5sQPI8vWzT=i6`dE@iVMni6qabk11`HLfF znS+;4@w~Zwi>K$$@8lM5Ut{hVt}^>7HyJ1Ge8ThUzuS!3ORLPz@(tz-?`<}ZykfxI zaNs6$mvLt9wYf?2nfYaAy-8 z^`R$v*2kXWkFUu6{L?<;+UtglFTeY`r)lR# ztiIMf?o+pU>+hx-of`+t?H4|u`}ak|#_Bz}sza}enSnP}8-M(u+>D&J!MJVbC7#+} zon~Bl)zzN57Y_BD{MRaT!qQE~wr^j3{|%e{<}1fdHBXwq(fq~3>x|d$NSSARw9)+5 zHK!P(btUGV9hzrW*?m=s=C)ja`c!jWaGm);q{aB|GfXpmsc8ze1*~Q>Skm0QM;TJ zou3aHr}qpQzMnUlt+$+Lob}?nTW>n&8=k-QZp%IVManqxmW{^T+xpEd*L}lt?}1UX z-rH{e;_P{5_0p{I!{6@o{QK|=w|@7;@l{`aYm<4x0nd7#x^1=@Tj4j}aLbw$_-sc(eJhYv-BI{A#!7hI2p8 z)x3SC`JG!2_EZyQ0QF z`wlgF9^Y)v{c?e^r{^4V>ct&u`B;(wsb}()|4L zsPWP4J8~afv&oz?z0CaC-@luioVqOctA_%{;mdYa!n~jAtUaNX-{0#H%n|sYO_N0uvZ@kM>_MF#@cN}1RZB?6R+yiUP6F%8&)P|aj z^)FxRX+QNh9{nBN{9@fhp6A!R;PE$XFt^{h-n_YbrDy3A4W4n{wdS|`vu4E;>y3t~ zNn`QA0`q0}YV-YPZ{GSf<7{(a`0d>J(;xOcIDW*q<0t*bMNb`PUhVBRZo2hAlX2FoM{Z3$nlg|3;gg;R+BX}=cg)Kj`q@t3{=n&&i9|x*Vd~}uPg3l(IOFkSnS`XcwdwA7)-quRidp z=h0^#$({An^~NXShNbUZ@`K#uqZj9jcWyRHzJ77;`oV;G;ce^9XCK{cTrk&X_INJJ zRbE|f9{ucZbBFw}&hz}%&1U9s!#L*KXB(p{rWw~Ac#G$$pPXgr3v)$5FlFI;SnG-b@$ z%Ol3A$Itg1wtI?E{aUSg$jU+U4=XntwvZGVVFkkJhcpy)ZCr{N(bgT+d~nc)q#qA6wtP z{ao`q6Bn6Xe`qk?9^Pz>oZn;Ie%2vI4d%h@xNALiR}LDVYtMLkF52!n=);8Z?3*v- zO0O6;r~l<_qj&uMp39488~T)wRRZIl9>hEPBtg<%*Z84t=`D ztPgb?pMG$#@$PMRd0IbPX59DnA>*C@)4b<^O@`UJ#$5D(o-6I0xb;^X zbGhr@`(~A~GHi~!dz0~ptA~v{A27^~+cz8Ed;GMjqKkl+>ZJ^RtNttU>4n}e87PP;8>93DBv zc(-Ds@zkgFbLxU|L<>;cWprCY6qOyoDoorH>ve zc}~_rUr=ehS051Ktq?xg+j3^ACoQd%=eIAJx7NVE-qf_u8W*n8!_)isR8Pa`(Vh|U zojv)cPv3H(auM&`>*GDC8MV{9FV0L){qO}(trs2Xljo!~nHe&^$Cw|*fkN3flkG8B?*~IhA$Y!2$=||&_t&aD;pE}xetY~@9 zZ=WBI-!v=QbG`F$Z<*LX;-7xBc+1D{o@u=2%1c`^_qFvD>ps{cmuutQ*mpyEzgM5~ zj2ZuBlNScKJj*r|_xK~?J+WH-CZDgI>M2$2nRMr=cHY4Y`gmU-6zf%vJnd<-^-hzP zRl9iecS-Tisx-md{<&yxj|-hV!<5X%7doeUul_N~`-ZeBenM8N*E9U5^mn8CdHf$u z@~*0Iv`L-NmY$Sv#(G8$U!T4tPI#UQ9p@<$TP;4nx4HM|_!;p9H>P@${;0RPNBJq9 z{X5%umwh|I6J2JSx6hGj-j`>mddKWq*tkMMUGKwD-^M@NzmC`Q%WzLo$mH5)j2-Kh z^}e|(F8%)G^66hM8tbhv{%rcNwWGajK2G&E?mNzNU9X%zcFzpZ~E z{-s$XyxY$X_tf|$)%)wzk=~R+k=|~<_3_R)_AtKf?Nm?n_AcIUG84Q@CO8^5?lICc ztmM@#<8F2Ld?YzNqg(8WFVVAuXZ`Fg>8-B5>>W4yr}V55tK-`g9N~StX*X|!N)^2E zzc)^w@gSo~XnLyW{l23-ZLf6pRI8idDS2modWX7Ep1@n<(vz>>jUUuuQToC%6Fpat zPxHQA?C13GI#WDd^8FrPbKrN4>-62(MEqE%Nuy3Zyu+#v_H0F4KfPnB_u`(+^w)nM z@4Z|3o%pjQig-$V7w3KLlOmosoKrn*)l^T*37yi5Zx8oW4v+TU>Qvl&uVDN5a>*}y zJvX}Lod(35Gg&WV6*sEtzT{2r}ORfb5RV`OXtP*S?>b{xEB* zr^16M@9__sdp2Hd<}G=4)c>j$e?{JH1$!s-9Pej`1$_x;>YDb-Z!M&NO-S<28_GB!c=*@V34DzCl zcgf&D`rx6<jJ zrg$b)4D}8lU)no6uD`cY_tIOs+^FSEi(ZsIFm&;j&xRk1-{D!?c+>P3y$zn5>e*Yo zif2=`u=H_7>Us-gHuJXKHq!I#sh^tsbgiRz+Alve`MUP!>H15|lQ^=V=d&JDy-lFs(iXwv*as%P!$$aG`OQ11_iCwX7%dnx_7V`1Kmkr(3EEvV<&GN4G4!bi(`R?TsE zzFyqJi@SxrZ5PkmT>S79@22ILn;q@tIeEIDXGYl(-n~Z;$B(}?)|1tHxF=%OM9;am zUi7Rgoa*tetnIlyYP7dP%7^JErVaK~YC73l>f8!X^y&{i8C~D=6fmEH|Kf=%5E)e< zDiV)7fBt;=BErK$LtIXWjLTo}9mMGh2@Q+Lmp{KdGAi<4Q2C1!)-R435<3p~18@Rx z5^xIeli^|;02=|D0Gk0@0OXJA!!c;iJlRydTB;Rp9$D-vZnQ+yP{y;vQHJ?nwpsqwx+1;LwYT zk2NYj+-Ue#Lz{=Nt%YIBfO*eiK4AJ-6#R@sU$M=zGNh}7&dp2#s00)iH2k2K4Z4|# zBOCB26?fAbxVIMkJODldevbl<0geOy0Gt4v1e^k#2Al!>2{;Ql2RIM70JsRa1h@>i z0=Npe2DlEm0k{dc1-K2k1Go#g2e=P-0C)(<06YR@0o6cvU8hqJ7Hosra+4rW zH{|JtJl&>zF92TzTmq1+F9VajufZ?L{2cIgz+L3sW#C)Dw*hwm8OY0r04j4?smO1D z-;-Oe%yNLT;6vF8pj=S-@B;$DGDBsj6oAfMJz2h}%#{XE8N@yZvwQ_8Jm_SDo}Xv} ze4tO|m&#iJK;@0fHO~85ZegSX;a1n3?a20UVe0Q5=>nhTI4R9TB18@^? z3qWP=Ht-$5UBEp6mBIVKw-EjT@I!!ICNuE<2#^WL0%QYx06!oAPyrf12N(cqmmYs2 z!b4pSTvjAIL&786K{ph!-~)MFLfS3^t^lqAt^uwCZUAlq^458(dz44EOeoJN?=ApT z$d2m14%tov-7)~u13(Y$smTwZkDxk0gFg-a@1^2SYJ`0R$OL2ovH?DTACL)oV>b!x zIP5s=IMU6LZjN+wq#FykfM6}KQDjv9@bD1aAjKtzGnCS8yI8njLGVC%Ncl%)naZP` zk5pc%oKpT$o>IQt2HXMM1>6G=pZ5^2>Op#t7Bk(TN$I9^QhMp3^phOSbVDwbZXN0N zr&{T~4_XfZ4*?l~M}SN~79bno1NZ>}fC|8_Af%bVYEKFjc%mnvrXxQ(rikzmrne3ePx_>QIqCYpX&*Bn2a*Tn8RcETgY*HY{!qV=Q!avX_&fQK+^F1;e5meGy(8J$ za(aX~tbF+YuPrv)#X^NlxfDPHYIf`H{AQ1C$&T7ubmneU8?&KBn`$=MR*On?m+Gxu zXY9Kd0(BuC`Rt4KM+c(SXf0Zg);)#?XTIslpFg+G(in;! z&?72Vh-{C~qq;15RKuJ>dVY6iwBHl(s2peIfc{^rh&_(O06cMn7Kflz!mB}KXPaU9Rz#GCUals>`sA8zd0>qjDVo zjr=;aYf1Zb%#9m%7@HmxjpNW5a<5kn+lko9$&Yc(ht!}Q3AUph4)!(k+IIp|dGa+V z2g<@h*q334#`k}-Dqx8#aVh7d>!ZD|P}jt>^M9Dk+~mHs(}kctKEP(WPf zLE36cCw$tr)U1#jvTh_PD;PU6XJ^nbY{bafKwzgcryeL(p#gq4o#w&ya!>~!Bw~Nq z4&EOfEX`0=WgT6FvH_epFgLpV-|R;CJ9^fqblOE^stYH6uvyhU#0@PeWeVY(t{fK!b3{Z08g;kz zz#J1(J}xeej4x=#{^`X=^(HxBWP`f{+{?ndY(Y%VrL-zcO=3O)g zqj4S0!)T00a}FA>(KwUl8#JD`$F4M%rTGTUJ80bT2#^JM2%vfA12RX$9zb)1EI=lJ z<{}xuG>7n^&CLQlqP7>~m@ELzHL?Mj08%p15b!jh1Rxw>ZE9zxE;E|9lms*YGy;&W zg-L)cfDe!fdOkn~=x0(K6c@!0$OL2o9uY5q4Dgu=pm|KT2W9|`*)vjM5Bvz2#=ieF zPo_Dvy%vyneob>;n%CL$$h`Apnm_;3+?wX)G>@k71kIUg2>!&V6%$`fdaYFzEUVB% zli!GN493D}1{{Jl7FuNC*p=>dx?GqBhr$IjVRI@>b76O+`$@7-!~!{X$n%%L64(m- z#Xzpn(PiT*)vi{pQl&~2D!?D8TWruT%-OE{Tys5=2C;immg^ROAhzcAVFf_35bMv1uwm>v z@5?UnA*>)9#V+!Z>><}(SNTKNUEZ7B;rCn@xZm|q8qBWovDmts!ZP@9l(bCOIqq{k zkOr_v*qNWjsT@4yBe3RjlRd?5p!{9K{P+Q@%0@B;L$#po|VenZE;_d;OtrPq6arHj8D0S%8nmST7lR8Z)70eVAE>>1O)7pjjL=Zt^Sq zffUB-vb($vcJyB7w>eTS-Ql+-fAlT>04dCNWlPyOO7S%0TMt_J?n^hNTT+I*7^I%z zYQV;@yV66R!82Xg_zg*oe!%YYfcug3(51TXKu&t->^8o>C_FzzGwRL>25M+$f{ z-F~;4`oQ(bts5E0(?DvL+voP9Zn%&ynb77E0#5I8Y_fJ0M-JXb&T)1De2)Z`JN!P@ z4eqc@>;dxPuB5pf$k7K#oy;z?40a7=!wFejHFu2a zJz}@8_HYB`BTMojpAGkQl!aT{m4f`3>Z82;_eUX}j&ZCp|!! zqSh!3x-~Cd-xSzUR6w-G&TqARXB* zpIePq-H+Tikb(!&BUiw!N7KAm1J5^+J2&_}jx#8(OzAS>ABvbzk5D7BK=&@Ig_0MC zQd1N0q1>VrR|AJKN^M0p1a;sp%28EwMlGT2rJ!72MIES&eBxN^sRDW3;y#qW8YsDy zQ1WUcy$^V{bO}5UM(UGMN|0NU;qpnDC}Y|DI)B6irW|Rts6N~upfpm-WR&r`;O`dX za|gcau{uci4TQhWAM!_13h3Pg@Ar|STasUTh;nfa9Nv}gOFk*!x{dVQK*@b5Wg|aT z*B$8=(vR{5DQRxqokwz0 z4XGH7x>+6VO+lox7NmF!JH5Qc!+k3HEXw|A z)c2#(pVA)J8P{poKKBLpRrmSmgVH&Ei64`8x(>Ncxqf$_bDePCbYH}*>1Wqveq7q+ zI^a6#+T%XyzUaR0zJj@BR`g-lAJTd0i0g#wu=`K<8O+NrV2*VkGtS>#N2HU|FRtUR z3$Fd{Q|>=7Z~}>N@87&3({)*?q-*6Em@go(#_;&pG#g*HPCl_aXOr z_c_ehFhBETdon$0>NWRS*RSs5?$hqmnD5=joYsd~rk1LwUX9-CKIT5_{u498%b3mi zJz3`L(?I)C7Nxf|%5yJvm>u8;rQ_0V=^kp4=0?RunGHpY+?n-eN7-q1gztkyuDVK@ z`5b{ZHjedV``8J#pP%L@P^w~4JHv3Kqa1XVCb7Nj4BN~9UbB(k&PAjO}3u*>QG??czuIAN)5+@`md^dbK0$06T^wC+FEgehg*dD9Z31R{(9m zKE9jp;fMHfeiminoOD;Zf;QXlzA2sIhxrM93MFAL%EArlw(B8UDxdp-Yd>n{9_bJ1 zm~=t9EM0SDxE`U63%LERThdwN>m})mbWfs|2x|v!swEH`YC&JQi=Ru6qq zLzc+iW*@OtYzO;rTjhi4x7yuurJvU>}R%wujF37Q1VLaq+gM*%h?b78}>Q-nyq2m*-o~Af6jm6 zZ%dy`KTEq%->ymDv6a$XzJ+aO@A41%BK{d)&EJt0NI#;M9zuOQ<66i5lvePM_{V%1 z|C)ct*YdZdHPTPge#rNn^tqmCcwTUn1U-DIa4gZmUBrTFQO6!p;$6c3D({H#o zvTLrT(iXmszbXC9=Sp8otE9~+%|}psPoc)#b8SQ4wOjg3nkOxmzLmb0b|P0VAoni0 zuDZ^-t|M1xV$i^hOyjziS@Pc5RV9mcEgeOKYVK z(m|Bd%hCn39Jf*Ss11FeYwpw157I9vNqf*rosfCKH`fOC4lF}EoR%Nk6+>Fn4;JQ~W^`sK(ByK6 z?4a?j>f^r?P9N-9gguu4H<(i(O(rs#qU1#&B_;tJp~Z^}DYLNCK~oWPW!R@9=mh}!3WQ9^{rq!ftC)DKLDF>5F(m~Qq zQJ5TKW`;nPOp)JsHPa6gkc4GV$)`yiiNzF!Z7}C>R$jrL5@Q?a3}^Z<|e=*B$S+f7?%9b6)@UyX{W+ zG5R*$JlOOTj3Y-zdCYlf+O+I2dHJ#9%AZbkn8ht zH%o4L?b1AX{pWor8kRZNKbdp=<#GtnVTbaHvO=*^g~{vL;e6%4~cdHVWLCW zqGPAs=G~6l4old6a?26fSai(r2^0tDZ6yqQ6WeK^xX2zs@L2guILHtAPatzpKBmmc zjpz_2Izhj|G+6m=(+K(@|Kyj#oA1OA*%6(fn~4!FC<8kUCeLQrpnnQu(ji(zCrH!8 z#1EN?j)fnS!IL~tc=-Lh=U>SaXXE#VBvPn%M^!WNY)=>9|4feL&kCRBvBIZ$D7+=d ze=k4sN8t%mc)}E(|C zJ1)ZHm#_^Kp57@uy%YZywq#?c(dN~TlfsZc8z?*hg|~37Ov#)#jbzRnCz-7<6xx3N zPx7C_rkOmH{CS><5BK=i!s~aK*w}pv`2Vh)Sm7z2G>;Wen#YO<*o-I5L-CO8h$9Q< zw(n#nc@QRf5+->NCV3Jjc@U=b5TX{JcKD8qDApo_`ffA!Eh!WiigY;kBJcv zVTy-%rFbm-Sex`8mCs-}lMcm0W{Steh=(x6L$aWFENsNLzvNq4;k9kGb_VP+rBJk zQ;J#k6*MvU1^$22-cmdkA88(ok2H_PhglbzQl1iT7XIJ0$3&m_AWVD^CO(4kHl@5K zJ}msdYp;nu@j;mQAWVD&<84Z1jrg$e|E@hJ`osre;)5{p5sbGfm3897!vDMWp6C-F zgozKr#78jRrc~F64-5bA`U9d*d=Mr+2ooQ{c$-pPCq69vzw0lEKJh`A_#jMt1mmT8 zYw}^?|6PAV^ob9`#0O#GBN%T}YEwxb7PiJ*RF}w1WtlLQCBl@Kgh`f!DJ_JF7GWEx z-K2MFn+a39NtpN`OneX~J_sXxQwl?TSlAl#5g%kGJ_r*ZgozKr#0O#GgD~+ym}nBt z0qQ4Uw%c^#gUrMSVd8_Z$p`$Je3;l8bDDg>Z1MqY@&Rn}0c`RCZ1MqY@&Rn}0Zg<> z7B-lCz-;mXZ1MqY@&QbI*nN$K|9AZv(I-9#6CZ?$k6^q_$&KV;VXF@yd61dpL73!0 znB+m2OXK-v>+pc&4TE%8Bghz}D# zRtD3a$OBsjHV?GMV)Bu*&O-7aS&$q^29$nEJ80+DO~hg6yPZDx-->Ws5q>ND=FrVc zkFkX5Y11PU+i#z}T}kY{ed%^NrunBcJ}uOz^TiJ?mh02+;^!AbVp@GV^V4E|x?Nmw zF|N;`i_0(asKmL`=SFqxaCpw)n2t$@mmPN0YO(gUwS`k&$e5QAo6DajctGDK9~r|j!_HbQ*S@~CNJ^KC`5EO?24sAh z5mxKjwQsI1k?TaaF6kuf@tcla zX$7#Ktrly_I$|%`X!Z*Bvlhgjv)b6<)Cs%DQrN3Z#;&V!*b~?syW09;FXasEX)KI= zn02uS>ILix9?M?C?yVx&5m%43#ICdf*t`2W_F@&q&b9jN8SHBt$i}lbuzRZ*cE3H% zT4CSXAnbsjNi4ERuJ9T>fw$+q`AE*AqC||SDH25okt9Y55mi8x6}3cD(NXjfqlFYz zP&_4Si)Nye=qpl$992k^6Lmy$(OL8pV}v8Bu!t3PMGNtQ=r6_!XH*eUUepsUMHewZ zj1#V?qN0MRFP;%y#XvD$JQ;r)pUszI$JExpa57!Y5zEACvF$HBy&~p{PsJLs{V&|T zD&7~LiM3+KU-+CMJ`kUab>ip0aQvE>C%zEt#m>L*{<@eiz7#)*U4Kc%8{$LpmH1Ko zB0{2yi8%4JXeGLdL1KcKDHe$3;wQ0Nghmw?6-5KlT67o5VxpKO7K#;OgZNd1MU@bh zL__hc=phD+N#aehNPI0eir++dR7p`;G!kt@PccMH7H^4<#5ZD-*drpMN{K3>v1lt^ z6hp-n@wWI_d@DAKy^ttm8mUCqh)jrVAK5!{WMo?8?8v2&t0K2X9*jH}c`uR`;E_>E zj8aocR5~b0$|z;JGDlgatX8%uhm`ZmeTA15kp+~pN-d?S(oyN7j8~mYn1KE z@5%+`fg;LEkp-2fl-f!&rIXTENl{)^-d8?T)+#%c!^%bFp(2%)BMT|zlsZat1$Rv= zW0V=n2g>KlI^}2Oh;m8EP~@_X$ihmjQdeoAyrAH$kMf!_Px(Swuk2KgDwmZ5!xl&6(eN;hSYGC`TCEKrs!KPkJFKa^`qwh~e{G_tr-QE8yG zR=O+6%0y+BvQSx}Y*2nxPAJzEpAuR&EV2Zy9dD>StMpI?E0dHrl|{Oc*M47C-rF^7(qij<4D5s#fETDv!jfgCzR8bl$ZIu_5p~@8H zZRKO-TV=DdS2?ZRQdA|PY`)0SILFjPX{WrT3{$2m?{tF&?kKvFzpOhlTB)vhl;@RR$_OP@c~4oQtW>

rElOj^wBn58kRVz$N{j5!x`F9yvI9#Ula{I@m+ooV7(y@FMzxq38{!pdJ4JJ2FZBd$HsB9+P<~UI*>@Q2sVr(j(Z1 z9*5TG?I-er6xA0)zQ!R>b92;^zD@Bb$mj^pU}S)1FV`hzZREsmev21E`!fhR zu^0D(U$buDj;wTUr}TGx7|Lj98G@_kk|yhdWxjd7oq ztzXhx;N8&WQPYYQD7vH2@~Ct9-VHq~v&dQDo`{d~vB;MS%`UAsm=)e3Mx+RR*%-atLLFy7v^F#&NRoGaF54cMF+N@I)%$+_JAlCX2~I%xpu$lyj;YT zMnffK2yTcYmE2|sn|zL*cZ&}BwVaZN(~Z}-0fR2Uz#S!a0LvdKhR%D-N3Op39QEfp zXHcQzA3EPj(Y2+)+`8bv=KpW}_Z=~kw8GQ*U|ga6M8KTe5X=*}xvKH$-X+rH-Vf(k ztCAteaEswkS55k{?SPaOc%Zp`_bK-upA(dBdx949ffI4(Fw}nc>5mHwELG@W z)4ImXz82;2aD8!T8G5-9Hs#+1?V2=tIC2RG<`FTj15X+=I(Y(RTTa}R@PCe%&Tx-U z?uT1ANuNBrcoMr(FNZJt>JPfDrs{|RRn5$StSCB^F@+TAL)E)^{{Zen|99+~;Zlav zMFRtH$ok(V?{T@{>WCrGBk&(Y!}|3fiW>l*;4nufwhnsSKSTGjfaVik?cy7B&(ViZ z3d*e;;LQ9BV~L$RHB%C+*R7SP#NoDu+7+$hl55}8vWI5>s(IZRM{TAb&e68ul?n9l z0NBBb?n2@8;F2h~0}JwEdL@sh1FR4NE|PhF3U0uXIKy35`HIIj(TIYT0LIFL=Mfk-Kkttltx@N6(C7DpyGwvEXp+2fC)*J^?OGy!wG-ss`FV&p|* zun8~?!U(K4PO#0!*l8kLj^9c6O=E9i1eJ!d)K-iSzQ@R5DbDTOgXths_*QlZzvpl! zu|0k>@XL4+jDi?1ir)nE%;)g?5`NQg#w9_d@lWx)6=wsN;`bVUnW&1<5fjz$n}#{g zR{U5r-iqHV_+^e!jx-l@jK(kI zjO%V>Tr&m&%mp#K=y-wC6aYy&uW0C<1Y_G%wo(R5IW}CP0G5s5G8{mkTqPL}utz5W zdqkI)4m^;byuW6={{?-SqOs{aBspzU^KVH}Tkd$vUK3b~{5Xf$5+LWTC~}ZAB9oDJ z8hsbWn58VvBi6>*EE-QG;Ur@!&Q5)f(^Us>`jzw2yb)>Kw8!q)q6)(9U6J!$yS55uZdf$#*W_ zto-%d*W61YUyLeU;9`OA3r;K4sc_XI;YIHjJznhR;_FL%Q}WAFUzA>6W>qw1Eiq@y zW<6CfwpRHUDol?1yyC%1tV*q_1FL;f{f`=jYIUqVx6YBeMeFx`dRc?34XZaE-^3dq zlF&YJVbk-?Dz+He@`q;vtvt`Z(q>0n@to)RN$uBkxZbf;=XNhl?(${VeckSNFVM64 zi>+RI>E+?QCik9^G^@|7zBBqw?muim&wcf= z^0QITj=nW|R!Yp6bz_>2-7~iRxC7&!9lvdS?FmaKgiahjasR|hlU|*4d{W%xv6Is$ zOH*1-d2PzpDZVMyrY23DGc|qcwW*QQ>P_oDZPK)b(|(wCXxfcwJhfeQ}Pvqtsm)v8vhQn^yaig6Xn zmya!1?y0BB#>6N}beS@xOP4BDvSf)8#fuj!R1(V?>P- zHBRQy2J_SewOZDx3=DUI4^E$$56%PG4{pB8^Pn+&@-Z8(fAM41rvK{apnOkGb6CF# za&LK+%;ZS9y?jnOCn@q)v?=#6L)Z$_D*PS9{ESRXP5k8VQfap7GTX$~Z<_g@X3p$J z=K1Z7na6C*_~^Giu>G3=QyOME^jpK6@hJEmDMez2*c+{0BwX&HElj}gJyFB_Rm|T= zxRQ&76X5@zAgcGoIZ$Uv%{jRBmKC{%G#e>wFD;dq%3EPG8!4u=kHl{R>=Z{DOe~~^ z6XuYFkoM;9IXT#iq4A{F6NilG9FBQTh>qe|$910QlTadTMIq>&q6!xFbQ(B0!SRPY z0dXRu=rCvaJ+TV2?Hb}9=6&~|rXdY2RT^5UG^8dCjr70Ba2_l#R+*xLSBxG|Udj>x z=Ww9#Jesj=DP`mE@qNxeKdix{m}eq>^6$S>^m_U0-rF&cdTX2HYoQGzR)!xAnG2qZ zs&D(&Wl!_H7O0`0WErBI+(w=$l^1WYa6{K#*S^%6=*11jysQrI%;Wej_8hb-&NN;! zdKy!V)y8e3ENhMPzunP?mIot@*_Y`-6;KkcoUv{=p~>d3977hm2&ixWp(A^l z%7sRb7>WU79EQtu?hLA(3KT9{qEvKDx$;~JaTbUS&sV-&bWGu*rAjd2kR!rep~Z_8 zDw5w_FsfX1;S$^#8D6rqQl>&|*{7Hz%w4E>nWy5a)~eq)v1J(u~MaD z%9gKCxk`c{Q6>J-{d-O7uUOvX zd1Yvm#?Qt!=`rYPV+P%_j70+eh|e~b#TRBN@i7VY;zL%2#D|CMYf@>~!X~e*7|>+j z-U!fJ6kqq{O7W=!H#ON@?ztw-cU)*(Wcb9!*Q$j!e)IDDMypu)Muua6Cy?@z$91Q< zhi{MeNb4@gXC8hd-aq2!CZVk2maFfDrk8A0KRx_lz4T%s1=6*<-)-?3Uu~9p7i}V? zebPi*vZIM~Z(|dq`a4ZR6AF-;NG1~en=@0N+me}@yhToEza^}g5o#!+dr8vBgb8$qMnrrW7$o3EvQvNckBFD-h1GX8((o{+|BG*0Qm*j5yWy}LlcdMJ0bRp}LAr~6 z1_r{29&Sj$OiD!XsR6fgL3cZCRA%k6XqQ9s4sQmfO{Et+B(DF{$D&}-p!ojV#}02} z;)Uoq0Vr1g_OZkL6DCRb)CFcutojt zH?r@rUUeo6Gfj*oHgDgoosxS?s^#7nrQUih_hxhrUh=s9O6UH42Mx!4rvoPj-7Ww9 zlOFfqVknf3;r@7NKT8}vhRT-h59$VSp?5F)dhcNTPxx1?Tfdt%@A!N>-2F|obHa~C zrNv|M^<=n?mg8go&1-1?$-m|JnE%>D{-69?j(Po0NTTHZga2-coyZZ7#eed!q+UtG zsO_})Z{03YNo?2UG53B$D3VS>(nB#dERizDHK<3JT1r4lA_YO6R79)H_9wyx&Cr) z$~9xmN-8 zBSr)hY|$BJ`XSPmzjn!_40FVQF+n+{^uhIpy{Hgb?wv>xrqXn%sZvvEKYD~xt18y6 z;BL{g{MY_h{;Sn9L*(_Jo6moxU*~c9;|G8?Jwbj3jp#cBg1~jG;As%-ExKa{jWm7P z{+^?eC+@~9gXz0bHi?yjK9GWzGV9xS&j(^KK^3hs)+H^ak%%jJ>tPBO zQ^5!a)wKMORa&X{RJwMaT8GxD}eLgBK&_1hzFTS|R^(KV&eK=Dpzk zg4D6rZzily@<8+YNYjtKo;|5Q3Y)bSZKe(Piy~I@-}DE4sqI=cRL0V>ct5%m6HCc- z5iKqF(&|4nbfOnR|75PCHdMNz^&Y6SKxuw{fYLJeOMvYT%JgXhcZLrbL*Yn%lrM>G z6PsbB6e=?ND{Y}Sc4+^Ul-xTi`}eH~KRhiot$13^v<_(#(^jONPm7tJJblCTs8>e4 za^jWNuWoxaamKGRy1#b+wK=ahc;osT%Vs9cs`#ew%|maketY3Nv)-Nl-t^hC<}94M z`u#&6_~upoFloWEh1VA~_;}9Z`=4}Q`s=d9&$fNu`pXkvjam`)&4zE2zmHjUe)WpA z6W4e6vF3*2n?kohRnNB29mRLn{H4RM6Zfpxcm6=k@5x6t9E&ePudtg9q0$mSrXRD{4ODkXY?l7&0q-dj9EAvkEONy1K-n(mthPxugoqDqXMI zpyr%9_v?3W^lN-#(`_wUw?5H!RQssT8@eXp_BNuz4ArJ zdAT4~A0nW0EK~|ePD#aNRuhuY0S1;n2zE)w>w_{vyhykn#pV~l}D52KxtV2(Xo2fu^m-aa~dbbm~c zQEo9BVyqpy8~RK_8ikWlq?N?BopPHDyOvq^?~*?_cS75eJRrGmGxJ7TTR*H>OBic8 zbcA(-t*PP{_1C&UmnHT~8flJzI=1apwQajjdFl_iV60j2cGMJHKa6--V(@zkq707E zhV>sdV)Vo(qGL_**<}c7(eQz2CxVRxuFM_|ovi(m$0esE)2-Wmtc$IotJl8U8QOd) zU`kE`pOn+cq~y^gpeOC=cH+GDmiA}+a#vHNW_p^V1s@1;+H$wU(LKf_N2{GR?^DiE zuxo#5?3jplCfU0Bx;Y6DbWET2mD53qP(x)WAZe)8)wXNj;+d*-f-Oc)1Jca8#W)VR zhX$lfiNeq*nSKA}6~+cRN{76dFQZ_W5*wr6DBrpA*EL_O+eAMexT{_D$LkSL*|$th z)8}b@^}gB;{ff3;Kce-~WxbpJx_(FBtUsqO(#jYSdNHi;`1CjQWBLF+*=VSBH1?}Q zjDC7QqmzD4ucfy%>Ka{)-}OYpt4}qC8OQapdMTrl5sq@Y#rRp@U~JGA7`2U0jn>8} zlxdH#%!p*`j2T9VQIr)lim?cz0GnV`VRMYL#x<0C22EE5F&7_Ye8RdK-?KKxYnXX` z0qwaXunymcwZRvdAK5#Y1!fzsU{3!v?p5(Ni@H;s(_dzF zjZeiG;|F6O`%S!SROYMLN74_hs<_9t3Fzw;mw5*fixs^cJXxGHYO&fPN>t~E*d9Iv zI?sNF-mhJJ1bHhu^Ya*;rA4d)d<>RaE1Z_$2Wv ze^tE9+hEb_kpIsi&7(Ls@y}WDShp5NO6t~KFskn zpDy1r8p{dTv>@0A@_W3UONg(XnY^EKobohXzVq9mr~^|`bfR1^p$gh(V4AqoOP|&M;YUd z8i7`mb*Si_%`fwg<%r&YS-C1K}k6sA6_CC;S>KF9x zY?Z!}wb$Qaujx&V=k&%{51r3$=%tNo`j_me)!?0lDYJdntm>djd}J(aJJKGGX#3w5W_Q#%qU$FCSexRdn~ zF^=g*rg7czvg=pm(-y~TA)h(Uxt961`qb?FSz4foZ(X2hwiNilzrrv4?bJ5@I%wy> zYm2m0qm5R?7^8<7u}FKCK2)En>sl{e=tuNl^fme*t)~9FI!#Z|R_Y7kv%XQ(h%&kx zziM@jdD<`|Nq@&!s`oGoXfGHp?E$#R)+efS^kQ0N7OUrHDZqWSaF(F&G_tf;j9Es1 z<0I{uu}r;eyrj-#rS%_K6}>(?1~{lU;7hayyoT14cQ^X6i<$=ibBq?obymobc@d)o z>uJ1>n~DA~PHBU9U1JiTqHpKZb+jAMleo~xMBBHL$3ipaaN{cPYh0pOc`LMyb#X6B zJ$zG^PJ@JKwFoORphv*gD*46 zU{}_g{Aad;?_;}pah@pLSfd}$%R;+ig4k_b#CqdAv}3X2b0boeGobj4wq&lwzM2CDqefii_HCeqLL{ztJ+dr2WZ|w^DI!yY!Lzh)-3^iP!Yq ztew7??Ng7j&(y_ikru~hYA>^Q)ZdJfnk>TgN_-J=Y?0c_SfXA>PxKNCRUhetQ3FnC zg0LoLg81+M7J0vUQk?HBb$^i+ETz11P=XU5ywB0UK! zbG3}|`bQ*fqde) zoiMuc9-u)V82rSIXNvwB8J;{Zxvk|-wiVdaeX zp>s2qm*oAWp3EcOY;&0`BS&VcVexvwzB7qf_ zTHy|{6RfzjhyN)C@z=#UK8QDkHq3*3n)se)h#~x%^a1}yL}F+2K=Gbf%-2XO#R{p1 zm?^!8oz3S(0cpNC%-9$zPBP zignVTVu#d-$4Nf%P)v}sLAQ?FP>PY8$t|J1I!-Do50l>)?eI;lgj`FmE$@+j5WmS~ zkG)9`@=<8@DKP|r`9gxoo*^w=><+D;(M`?`TH;WQ-5%di^`8~O-7$birUT{{I z2021StYa20<&2evuF;o;0rA3Uko&6%J zpkH66euB9}W3999=ijp#>YLhH{*>tN*Y#oIICrYc{p0meF-YyGT{Q}^O6rtAXCBIK z_~rzb>NVI=-*A1F>SR*_Gu6}DQhlCpWFX1tBZ_4=QKOA*Y^JYUcDPYcZ>)~=byHu{ zZu@KaKJb68slF}hTmFg0Uf-YkB;V6oZ1z&$bl+v8TGml@a^NTC4s2m7{LhNm>|fap zb+>4V%fhk(aZ>3(yfnv{EI#&mc}=~I+Dz}QhUnu0;d+a}Y_?2)TfY>zte**7*B1x2 zX?^_bwKcx(Xu~hFHDaJzQyZptbac|H>w~3txTODXG(kUDQs2$1NbQABzVx|5^i63%yx4@G-tJ$V;z zCIXn3tux-i7uU-2LM#El$kXKkVmhzwij(po^d1&3zb$-HmUFQD9k1?ql@D?pFqX(a z8D6=!eqB<;QRh*r<+k43XP8Y8VIQ^?aw) zORXhUmR@o6lrB0xXPf0A4(__dJGyprcgQ7au3XJA$x+VH-Z4VHgE?eJX9veM=R1x) zat&uQM;B?SnCC3xOp!C?bFLWIZD&=d>R9JE;8-I~c52c==Vp1NJOb1)ZojJ2^7YGh2Ily$`d{;J@bwRj@tya-;7N8_I(`Kvj+Bns(hN$V< z?!Z~Kp?|fuBCtw(Jy2i!z@Mfq^?#$C3G_yP+)>-A4$&HG&GnDfBKkn}O+8zkrwtGM zsGZUb^|IPdAEw>WN^1G_P3lMbH`;Z5p_hrP*77qC7EBi`NM_A;%6z6{MrST0tyQ zi|}97Mtq+(fnN?>Vh+6+U!fJ}VVcGc=#zOqZIZEA`#|hgi-`m3>!Pn-lYOJFW{vdx zqKw{7Y%n_U5n2e3Fe>nZMk78|Zy=m{7W#hF24kLxGve4@v}L{6F_z!>ihXTt#a*E# zG3$(G?xx^D-WuTupaZY9?F{OF|50O0bhb!v$Dp=Y!p(kU4H~FzhwE)YBn{V;ju;wJ|3$# z-)jBXJKAj4Q@hGbVF&(1{TObgEWs}sec1)Q4X=qg-xR&Bcu!vk_x2dmy@PS&U{RKJ z7I%%Bm_=6R&$BQw6Elud=rFkX@0$5`+g{=HG0{f_U- zkC+3q))=vkzs<_?Dy#xO!g}%yd}VIKBgL=yQu-3~X!jST_yCL#4r2T;QoO^H*lx%$ zjn89)q5VIf$j4iY7~CQ7hOrv@!24pHAd7FWdcAt9(0dU|5Uubl*syNNy>P7m*@x#YzD&SZdA7iTBuN;whemF?EzY zkQb1WFgA!`Eu>@IKz=lrpW*Z6W{}O~;p_fIL*ZATJP!d>fkxz1`F0 z!O~P|vKS`43=QXVqR2E=$FwNe-vHK+cf5$X@hDi>1kq_oZm@vhp99er^`DW!`SxDZ-MnJoHGnd0? zhW(5eqaO#Z2HM$ac*W@*MT)PbA4nKnV& zD;1W)^)zh_GuZq3B%Nbq(NsN&(f1|hQxh@DFKCR=YG}#&i|j4b_UCvBqr3KVV5G4_ zpR9hSmeCgI-xw9OFOA!3KipV3QTOS)jUSDbdVbBpni=uhY^^(6u1_?+3M|nJ8lAN{ zf!q3;z(c)VU;*}NR?}((YGQYW63A9Vj5l~W?TmI5t2f+Osdj?qPn(3+kyLSc4(80Z}@NQ1+);qV8kwPTj~!O z2Y>B9VZ@;{7S-K+xhO93p_S?iee;vCmax*eAVvhHifH*Md71IKxG6V~uk)JRqi>XM zXqTk=Y9Hy(z*F)A|6nn}pDgO>T^vb9X_sHUr#&#b$j=2PtE#%17Yh^*QyjexTV}Bd%c%2P%os-GiK-~^{HBnF%WAACAAdveA5h}kHwm1 zXX5}?B{pj>8a~|*(-vbmu7;VbXButwuZ{cKGwcoYE=$nk_t3T&+jI|0G@im*<_ROe zF^zS{YW_LxBX(T>9#9@PRgT5XaVKl6<31DZEY<{uvld2I*56ox8>|=O=7#T#kI@gc z$3CL%h7)tvBG@q#&uX~F^6ex>@areUD*+Rjq!;-$q2`a!x-#zxvei?r}Vek z_r{ydtIxrRsGqS=Z_5N$GG5b`8kySj=(|H$hF+at)|z8gstLHSg?nzcU>-jS>s?>6 zo!V&R!4F1ZZJE(P-_Ba8o!A9+E6b;CWe?Stu^MxOC2Pm^V*2|=V|9wLQQd5;R~us7 z^R;nGJ*v0Ix=^ON-)N+s!ffgjLs3`gp9OXT_UTgtZ(=N0!WbPmYTWjJZ1h#f>(0P( z?RjmQ(ZIi3KkgSsD}PHp!~c<1Fc7Lg<)5wpe@wjvd=%FkHhN@cb~hg4fe1-}05Osf z2t*-BaCdjN;!xaOi%X#tin|qe_m)EO0#&R)lHHke&VA_j|L(ozN1JYTW@l%Pyze9L z`?D*Q^m3h06`UQ_5@)=ObUqUEU6;f^&J~DU3(Tdi^I~$*d*N_SRm+M(l&kQ#v<#g+q)zZ2xn#$QYb3Rtar(&lv)C;MTvFbai zsb6KR?D7SXQs;q0wUQgH@)&nc)m+w)KazD=Gb6>XlFaA^^bv% z=c<+H)Duf}avnWF9+PyO=PucV_@e=BMYd8;bpfksEHl+&8cmO&H%mM<$t>_;HE={E z9f~n|jP$1Gp@ut3eSuibC%>Qz%o;KTI7KeviHUR({FSTVdMwRs^s@>ez36XbF-GSW zL@@(^fQ_JYp{x6Y%t23}ht!82XL+;_y{+o9B_x8?APeYq#8*|}j4V){=wcvhcgb9K z1Xz4oto$Wt6E=!Sb_%^nhLcHbFa49)>2q{{nFu`ZNA?c=W%fm_?(`tYCL-*meK8E7HyBCmWh(Q zv^Ae@w(c{hGFYxiqchDvRG<|>bF9AfjjJ+cE<{7l3W(}gkWE%&@LTohELRVpk}K&h zQB@r?bHqsNByxd)v=6e~)?lC{^3%g?3acw#s#ECc^-i7!5*x)lAr+iJM=D>sP7*dm zg|I4W2Y<_&qL)@R)}CKdjaVHXN5=ACQWALVd-XHV=EHTR_p$9aI_axzKyIv#)?u^0 zIbO84z7yHjXW*L0t$(aez{}Gl6GKIz=p%e3TAJZ+GnprU5esCtEGgsF3v(2*Pn)_Z z_K1t(jrHk_xRA1uJgYp^X35A- zS%#EFymbL{<&tuNJ^UJ7D{DgE8IOH!igYI(?+H^ zf-F`?Nl*1XDWyswcRNkCK}S0lJ&DeO&3l19j3+P(qDU9?<;$R#kuQBm>dXZ%WOLBze;Txs^ zlh@@>WQLqe|A2h-F``#Dxj{{)`^XaPoz27`GEQuemfTM20CBL>87#xH)H>6KdohhH zHgCxJq!Vc;y^(8gkPcT<(NWbVz4<;Mw8hb7sWWYWu2i+Oio6r|V0HNidIfbc{4qvS zwJU7D_JMi)yQO;OEKz;p@kV)>FIMG|Q`hq%9v9}d8y{GsY);u4P&L<>>fN}8f!y+I ztlyVZNpXmr1i#`S32K=fOm46c^kzJvl`>lMiuy}?RUT=~wOwcDZENi{G3O&}x7i=O zk3Af&@>jY;y%DdmBJWh`EEG{lBd{m$OAa z6zjGdUrE11))h~Su@C$vo5o7x*$$+!i0tnwn~b8P$aJt1FwvHlWSaYT+V^g=9P`L-bq&OdF+kOiqQ_N&epLHQJH5l9>9r41?HOCtQRC!MkjJc;S#f!rg;A}Z@bla(dyV9pxK zWbwe&A3O9J-ctzP&x!j-^>|VCk^aSYuCU-F(Zr_4Y6ih8qP1fd#B!I<{ zZ@_%cGy^eDPwCshwFTJDAYXl^mu9>9PsUwTa~X>@e<=S-Zz(53di)2vgw@fUQR z+l#w2*8a0-V;kf)heX*jZOd^?xLc|=7oE38s2cK(^RxDic8~hWY3hTXDIMAg?FC(D zbkGv{On5S@fuZb6PRotr3u0uGo-9s&QoG&il6kfeeGpG`{A$JGit=B8syX&XvbvjvFrpk~B$d?DwgJiDk zCv={t#)FNisCP0}=?4F(o!7#FFebYERDx>9NAre8to92nt!>eckc!%4en~`Ht(@6% zw51mf0j`#YEa_)qnx9pF?ScJ}Y%eBThFZurYBu&-|7h4*aW+QxW^?sG{km9TMVkFp z1v!xKSK*Fe_Y~&o*4QzUO|$iKzsY{LCE1>ec+pIoh?R0EpNXql!#AjK6(E{e7B{>po z8`&}Ap}vzEdUN}Dl@Atjwv6PR>;_3Ob~>KWW~`CDnT!!d$cvOtG3v-kR}>q@O z)fF-6TXMwyP>i=GipA1hZn90KdA8=p2GS2YIzROd^bZq6cR7@lP-_jBy{9qD{;NHi zIkhfs)oBy@)~LpsYRwQEHDTZL!RiJ(L8n>&I{gZ+TWQuVa=}V44e^8cOO0kfK^HLE zIxepw?wu$D)JJQue5=jk?W~!u)vg7iJ(M|J>;1TGsRZ@A_IWwX)V@}}A& zJ4#C^!^JTS5nNSyZvc zgLiL2JE>H}E{|AC;3@OO6RVT+g*+&}WBK9-AO?Z54DD{4CC&&pYqy%pkc%TCS|Yum zSn<*>%4jjyH4>jz69}1 zRsKS5kiO=r1|qhmbiVw{>WQqb1v#$g$REY8W)pUX zHiSN_h02xd*mP~I9s@2V#I;WiSJzlW#K@E7m#&YCxdB$>iseHy&<8OTnyu&RC|hle zw2u~v*4U!@s*LoYQ)LjwgFC#_4lP*rwJutjh@z$=Dj2Amh#kOt7a4}!ZM}0vBcFOg z{#4(~F5)6>h*BUG)h=D-idOS7t_QU@VND425rgOi)L1!xTyXCUr^}_x@Y;2`aIBx z5M``9Gfw)FDEg;7Ebo2=kb?P zm=mf`M*Opa8r$uafp)7BELDTy%JSKOIK6UUcIFLcj0R0Ox>4ViA^ZUI7>4rhB=P2MKS;)?hSv+DqB%`3=S;(}QNT{)BCohnkg zD9M)bxB43K!FuW<$YXCIv;7X^Cl^@e27XjFmHF07dV*GARS|0*0*|{(ziwPdQ|3BF zQ&cB;gGFISyCC1I6VP2f5WkCJVAI9{@kjkT^+Ar+0`y~AnCvWk%wZ&qMzB;MxeK9x zV@3-;PgPS1R)1v3wr&R-+*2^7(+7T*qpVzcrj+xd3G$E|}rXGS^isg;sbZ{UZwL{}2e zPV=_NvHDtNp!GNmJjEM$kw4HCcPIM2NzC$icEt&jYO*fbrTRd>400t$NEN}`9^cc@Gepmb8#=w}Ut2UNHYpnGQa!sk{! zaR>Lm$Sf}xiAcJfR~Lt@JBW=5vy;(slL{6ul%F1IX!VIRrRGTU($UEwY?7Rkr+vhl~AKDIbcDjJWwg ze^%eRLk_ZQP!67u>8hI6+PI|6!1$TtYDw!r&C?kB%QJP2r|M5wDq{J~W?AhUzMjlP z&-$4-YqUDxCbIf2cV zi^0Kc!2T1WpU3(?-^^e;pzz8h$JAW;l-JiD>VC4h*y*~hzC-jxfE0g{BiI36LYsxP z;-r;FR%?~na#X{NBCWLnwv+bF*pFH`2dg0YjP93%u`8yL&UA~GEQgAh);Ca_4T6Sk zp%P*<6s7}>JHk(7n}uLqn$xSuasCv4(z?8uJ_F2hkvWn@u;s{-lj*;rn|4?~XYYs% z>9V5yT}?zzKF+=$dEHqn64f3vfsfAz_u5N4ZhX>X)oeN2`7Q8(Ip7lOvm(kOF0j=+3AR>o>jI`&!Yv;5zVt_d7 z`VATH2-XO9wY2(^Ez^$kld_*`WvzoB;uk1G1)l#;w6blgqYSW}{?771|8psob>tTX z<4?$}x67uY$jqS6pgRmAn=yVm)8d*io(Xrc-BphMuJ+T_YNT|EyYyd{rX{E$@`~9H zRX&G<173{SXa!$pOtk$d-;0_>jQocEYc67+P+&RD*+ZKTwBIM7Y1qR*lLLsy2C2(> zd%eECMs5~vW;rm->shwiE$fq9P3SB69`Zn~GGB5}9?UM$0kn~vuFr7%ZcmVI;_rgn zlFP}othg(xAy$~oo@viSJJAm+st&v!>jgIcZ?T!q*8`1n;(#^XoS>Q`e=nvKcHs8x zA7Em^P~DApg+T+INb9P8v<|eoUG#D8#pHIYqw5jIcpTrZ;zb=*9`ogez8EXZQ!@=` zcPIazlwU)Hd8z!p8As=r8XvxnMVRZG0GdedNbjtr**NJ-I<7uR~(7J=L9Vpc^Z znjN$@(6KC8$cFQ#$hDi{ezu1~x&$AN7~)S^7pqTqTb>#x_B*q&dhgUa0GmreukO06 ztXrVEi&6?LGDFs=8e4T1(SufEGr6khyS<4>a!aLu8XWYdN*4 zdM{d*`Ou{*#i;L5-YprmYYWv*SyN1Op{A|6W?hlxI)M!~=+$Y;*b7es}zQ>lz_L09({q;7#V2t1c*dizrTk*MC zMY@|sqdWJvqzW5O{!y>wE$e4>jij1C!jq6`rC~0_SS92#SxqEZ(ee(W+;-+__0~FN zzA)=s{hVoFnf|ptm}^~QtOa6`+NQeEpTGn7$$r#;LLrSmr8`tSv$II+59c|t2|AqAc*JWF0ox~!`d97`dIJ8FsMJF3m5gZcc?PEN8fM!uD>$&=<|3NZHm^I z*U`H{U$DZOWLiZlz;H)ev(zfEaj(o>)&{ZByjWE2vu^cw?JF7r?Qa)(lD~o8_XIGq z2(}Vf>WRa@NKapnyDqy$(?y)^kX3W!`u;$=#{IREW zHd|q5J}KABDXO9_cxBDNT)WFw^5XP?h#*s-#%?HTL3>>rh;Su!)3sHskhLt+^*wn5 zw)!z?z)!L+tTy_X8$4dzbNQL8q=I(*u({r~SdMgUE?O^KMY+xn;;HCs<_ah!pl+S2 z4l}zx1%8AAwH6u^Z!(j#qVejE73{ihjglR#{UVX<5#y|{tV3pdWj6<#UBTD6yT*XU zYiBMH>)21^0vY{pzF$U9-%kXIeiBA;~DfHQX6dU1G0t= zhPHPUNtf-cE95(sC}+w)=rpi2{rCfxLH{gz=ISb1k~4faO<^|m#B?DpZLAH`wjpl% z7u@$9XFZJ5_2ep$x9_dBsKW9>Yh?98RIovuk`oZMzb3h0v2LjM_|rhlb}3`OF+$(z z@V1ZDA8RM|MfxQ9(Uefb43VR>yZRsKg069w_CjB(Uo>vpDrsjlr#8+!Uv$&;3p8|x z%}iNn)^tMG&$g=!*SG>NCl^~?#jw)v1XkY|QGYV4=;-0L$aY(|pgK8DdI0zFbp;jv zT##-#%-e-?L_5>v{Mzu-qTu`}r9EP&)G@1ptOu>&Rg$Ki(z+S5xzr!>novpB=kv&R zu!29+x{fHLzxFd!nX_ppeYe(KE2g!BN;|=vAt_K~CT!wNCPbu~P5k-2ORL zapwo8L!06J(;1`}H?KO=wXWibc|x@iIdrpJ%qq}$?UU<~^#;nb&#o}i-{~!Dk>}D0 z{=1mWvY_wgY%sOIk$xh94x^n&HZ;UH%rVaOP->Jw*ZDS93{)B0#cJ^eimJoL zKt35YvG>xCnj7nEc!L$FCC}>D*p0j`AU6}J<4skW3|1t z?Pq?*o@EXcau&wQAX=vLBERx7gQJHFBa9X0K3d3X9+ zU(T+grq5Gg&I@>N+e57B3$$UjB4a*{0=v6Q+>*bU(QK_TUZ2j^sBQ9|KG67HD^13V zI5nF#z>bq6IPi%$(X7bha~~BA9olVepZ*Sbes^#phoDc3G;FRO&|VPZB6NGVT*H80 z`=J7NHz{`)PT(-R#41Wfdz&D`5t>=BeFg zY|(LXhjeEjXns*w*Cgg{Zm~Y{Mb3_98SRa;li06ybAE3QWbxJ=7dMNu{%RaQ=o*ii zIFkR0EOP~r*(Nm3MP*N#Y;7{j$=>9l*u+|5AMDS^QcK<;OO4h15A7Z9Z!K-MJ_3yG zSFAkUB)iMM#B?@XgpnO$n*704+!(EQ){f}8$O>n$TZJb~m#Rdw)GA*sLxLMh( zp_eq9S^>6!g_%X?=~D57D-YODy`nHzZ}X|S+ng?2V`ph*ONSb-iTnvOZni4|>Rw+f z(shbYca=>mr!)XZn4!13ym+ zOh4yLXvG)8H?qidiXp77IlAZ*9b&yR=ejan&z+U5&!P^GLcP~%(8T4N>x%-dy{PTd zN%(7ptP$BFzS2ydPHx%e=_jpe_?8XK4#q!PikzcA(x`Eh3uJ@H)?`bTsrrz5EQ=gK z6g!n&2h+AkD`2(EZ`o+zDe=Y*-diaS$ANo*zL(vR9vHu4t!vJDe%l1Smfq9cQgouwv?{|F z;jk)c|7brTav!Jug?`S1$AkG@z|YCqW?$D6>D5{weAja;zuXb@s}>ju&TDWFipn6tQ1#Xt>N0S{-Ac zIb1d5FW`z?EyB!iR2eZ$T;hRxnwTO^8lAEJuB0!lZmOfQ9m#v0pqwmOb-hO%|DFM*rIsepaz?d|R8*LrzlIT@fiY@g*y@|6x{4h`34nSJF= z^Q;Uz|Ci){d)}NglWw`Z&cqN8vRjpyJ@#?H=7v}U#8KK+k zbLDU-Zf=_GS$|qsIA86ga}YsZ@f+$8L<%ZfbYE_DSSyM4}* zVz%<-TgVBszqXPeHUmX3J%TNPl^%hnE7?g?hZ&bApLtf-TcgxBuPWWO6` zWgb|^%SB~X6YU1`DmrVDJZR;Z_g#0bxz>8u9_Mh`Oh$;!=C9%}Yk^h4O1H)V z)t+V9%w4WB;7z8xCc4&>LfPAT1GR^tlEoCL*H);RvN+t7*=iJ=nL}A`Jl|hPb=Hqg zhnIOYb7MVJKjp=y(ydUX^d|0L3(M8l%7$X$nYGq@4MZ*w_xfwrl-XDvx*X2*hNu_un6|`| zn1Kvs6Ev=mfkH;eAD}lm3l((=zT+wRQq+dmaFbQdI!dLAV>>ZVE0do3C;pLbqutmm z=*P;k9rC3$jRer?;w-WkH$+RH%_GiV%y6r;oM#40aC=rh+>%hMszdY|X{1hwATpVJ zgoh?qea8LTDF*>%8%g@eS*k0mr)sJ(;w#b=)gN6V2=xOp$q}*NdIU_NrO>SD^qtx& zPC^U*Ku#p9NEd4<7{)MQxjWQk{DImY-uHIEMjN1ZTqYSI!!UCFMN=qudeh?MoH>c? zl6Ayy&ayNM>cd?{G1&dj$~OgW>UXRZvfzUiOX{myg&pt>lA#>ms-DStVrfCTJPkeU z0rM#C>0s5;OqYGYYHbt=YCWoM91}6}ANfHwH>V*7m~Ty!(W)yj>n3b3=`Y&}lhvZF zSri=jar7!#1D(un*$w)n66zNz-9lQ7`tkPMK^f_c zXI+9+plf+E+J{WS{r)WbtLMP?{(>&1fPO6|1Mdtc!$h>GFXw@~EhkD~*8gn{u|5HEZKmZ>mEawo^9ii1J7g)*o_fNoI}ux&P3slSru|hfID`twCRDE|3xCZMSypZ}O;;*>Trt*b ztGe!o2+*CK(&Dt5+Gmyyj^#ajOJ8cu^=;ZD?ttRaA0uwBj8zvg=f7~iv2f>)2bwlT z#*wB_C3OJ)ItDI+msWRCO8k27bq^1y93BS`7O6mPBK3q$T#S>EK$w7X5e=#J%p;7?H`As!Kq2 zE?CNZr4GxAK$G8~XB0fj&Nt>++7J8e60sA=NdOrtN1HQ6JH42Gk>|4RKmqEr3veQ@ zv*P6nINfWAN6-Y0gw7~cJyx5SW{>e>Z3Mh0JOU+;Eq}?-Hi%b4(|ISxdZy8-FUi(p(cuu7n~b$UZ#GxbnK#! zfwcT13TP6WB)8F4>@|GdkEx0JA7Qi(Jj#y{nO=1rC8Ov8uxgXp*R%s-l2x<`Sz%tY zny8oJJ23(~>vcT4g={W-L4)AepCyNo&6chzlXYYvZH;*~6kh#rMOjp->`LdUed-~t z#wwGo`f8|!=IF230x$!C$S~63fvQEb`7d;yxn8v5v8;@F%N&Pnb)}SKAH0F1#c!+! zSe`4|bmKe_zti?s#(h4PRj{4c-#|0ef!eTAPaunmnnKTgN>y=EL@>|Q_Rr$ zI**yBT*$P+4}6DgtB0wnTUI?~w*r9a{7FLKW5`ntXjkAbfpB46aUOAw0XE;SFpaL} ztLc@3!}1vSWqUqPm%~{g{rPhyjo{_!%7Urj2OetLr&M1VBW`{kiW#4+++B@;$(9$I zOhH_*o#gOuX%64XBGeu-jweH(J4PzaTbn2^lMOPKJVXbs7sLy==M5+^=FuQ@=!zw; z@htpCJY4nB4)8q;IGXj3a{^{VqNoHEH zn!pkJVtj`>hoYvy{4shi)YhYq>n4u*_2$NZ{co9L0o*;`k;POtL0#;n>E$+QZo@F zkB5TQ2BhQ!?!v#8>5 z4%&T6XJfaYB~C!^IfSmJNzk1)5U*rB`w=VQTJjrW4llYz&J?S8bv8#$A@iV!LiCMV zsRL1|=Y@D|4YFMPIWw(7KAe@Mk3OSX4*C`yEc_d~my@Kp`7Knp$7BoFbWvF>gT|Ms z?y?)1AfCv7q5mF^Y8MN&hindUQbUvAsv~H5trCAn-vGa>PTQ#)*s`hQFwdyMVOSMfAR0)QVRV>z-+9oCgJNf=x`g%aF;7>T;ji=q{4eq?d^54K zG}Iyk=~{3w?%;e^YR90{%BE3z0>4hDf*F5gouvNam>h4dFe8M!{M)J|u7XpzkL+`e zZLzJD-kCpy=CA--=oQulWMw*(Ge29mo$p8?^ecZ@96GVRE@>Tt7P~!-Q`PBV>#lr& zXVF?D$zQPBbyMlk+wTTytRWJ9MoWpQav@1%@5M|p8dVXFLp3o5-qB(3EJgCl$bUMh zTj)V`2AD}L^#pa1&(Y6N29LK6xQ?r%^bc#2D-9JbHj|@L&^oAZGEbBiTjUhuwC2t) z(ilAh7~oB05YN?T?98pP>x@A~qnE8x2W`DUE0bkFMz^T|c?!An1)y`|u@;28POF7z zP_R;-lo}$}MY5dAh68mGSqJCuW4TD(qQl@hOG9>i3G=xhbPR*VHLH*KN))*^TTQ^y zTj_Dp5__k z2=bNypvzmN4*us`RE9ivzc_E2&!84vA#TdzS}C}he3*d>Zku^u{ueKcI%O0Nj(X&e?T7I6RL&1aFVVgtAR1?mdivftBN%O@j{r{4Cv1gM5cSF zKXRz%Bp>T*Z|KLep@_-?rZJB-LjKnpnz;6GxNpE7dK)#(?rQsyRs2B*$&WIW4W&n2 zOI#3Y=;n(5-M}ob|1-@-uvSx8)mg#A-q>7(0!x z_0QZAKOm03LmG)rk|O@SVogSsj8oug2f#6Vh|E(9MKa$2uYD@&1&slkbzb|5=dhYq zV_5|rudUKkjJ0~pmF8NRj8)(<6z8kt66h&7JEVHZl6gg4=e{yWouHy;1O1$_C7Yxp9!#7A8BSRFzldz8M82BRq{ zJhWCy>68j`+diFO>+V{vYgd(3vf?o-*e#5c}6HejPxu7tZsZ1gWBzT$O)Ug**OE$sG) z2e!T;SL_90r`&RaF1bhf?f0r*T=RMxG0S^*P^xcO_*1{d0aJrohyPrBdk~9w81OW% zdD(h;>*!3QTIr9rf1?IED#r%9os8M(W|dsz5mvgo=jk%3-glyR`)(;S$8TkH&p@s0 z=-_c>ZidZ?3W~C#ZY7OPzQwo2{c7|{40eo-%W+&QTjU;>6z_f|UU?XCL%sT!%k)i7 zJmBjW*WCYb!neWe$`1(ZlsGf;LAj7}8L`i**G*e!#8eQr+bPo>x6^jG&q)pS=$BN- z>q6=|uSUtceIBQZVq+>a4hTEk^DGyd?bSZSoUtTM;Ps`N`SnO-;GO4YML&PsoT-mBsWuUYv{Oz{lQ(to6% ztQ1+XZ)cC3J+?i$KJJ|}i@X1kW%ndGW4z<4{pQ;-v(UFgcI|*uxo?9fX1*$ZAv-?o zx18N2r&QY;TQaL`!rR;~>63G&HGWbv+J3oiACGQ%T|8Sf_|bc5%@scOI#>J>YlH@j zsh<=aUb9E>noZA#7u3j)xm2f4OsPi0;#SpMS~;S@!x}5|t?`-V8V@3kp1ZBcKNHe8 z_;ZPr>epgNH~Xy3Z&J%QHqPJ3tmB`2zxo-+nHtZFxs^HN7@c=Gd}pP0Hvg=~9+{zT zHn&>O8}z7o-@R7u^T7F0JH7q0+@gEb9HiHRfQdxTXH%>8NZVN{*2Aq*X0h;q`EH|A zSA=X#n#wmO^>91vHJ`0Wzu)$GofVG54et9r55+N!29>;4?>Wn?v(e{pc&z;zM!kR5 z8GTTuf3f?~EA+!z?TY`M{+vCpa?O6<@0xZ$WoPw`IpL1yRSpNX^X}obv(k!^f9JaK z=T)A2?F{O{M#sd)+)sIK+)p{(6rj30fU@jNP|&WaE>{ z83W5F6dP1=yYX|vbuA-eVu@WTO#{a|rbF$p)K(|>&!C5%9=69(Znob`#u)?Ciacp* z`(PQ=N9z-G!N{zXR?HUX^f;5~ZS+mM=>EX(S?tT0XJ@_gn-tMI zv}>8E`YgZlj=z&y1_f4a>fWl>2m9U3r;eG~Ua?ivE5+%y#Lq^_@_?5ud%O8+H6>Rpg8N-Zf*^c7NDy zJT16^?REGYdy{Iv`ku;hcrU1Gb1ci+?lGqFf*Q3FuDTt!jn_x&{rEedUp>qC4)F;K z*upC2dGhWd(r;CS2>Y=_D4!d-Ry$p#l}Dp0Pu%|ZpJGl4NWf!onV{jvx$dB zW@{VEe)8^8=78@mx7vJ9qjarSZi672^}=^VIWM>4Uh}j=m9KgK+NiqQS5G1;AGrmzO6ktjX`yEm7uY^UJn{TJX73IW>##35aw56z?DOp==VX8IZ~xsi)kxCUo`MRX?0}E{)8&VqDbI5^vn^I^6h% zpj=)f$=G6*v0kdTe&z<@j5BU!_d3z>Gw<)s;Q;}Yc~1Hy z`_lBuJ|`*_(|f1Au?@?p5_U23k?#Y?W7`Ek4_g`kgCP%#dwOjtSJ${5zumA^8}B(M z`+Z28n0I_dOcndvIy?MUB<=7?%u3Zo)x(~n6EZ8k%DNEx(Dt02^=i*g#O1jE<9W}s zbMynPXVL`TrDQ;{vhfQ7Pe;^ep^^1iZ2mT{9m(}Q24@y9SI)m|c-2YeRpxqoZm}-x zuQK1W6;+dcItMC`BazdLZ|eIx+GI=*c%9Zepi^LN_tjz5^rXty{rhDP@b;>@-s?)$ zRl1)3+S@a!QReBejmBvEP~O+~zVFVOe|cP}kjNWUna#IUIpVW6V|Qeon%P>KqcdNT zebp;F^ONt(Y^h($*a2hy|VV%U;BOv@hyHps}~%>$0s%R?37i?dvX0t`-4*L?cb!2i&{{*j9ZB9 zXRU2`JfB{titpY4AA3))67I$GZrRgwr}@^(_6TSfan-H9XDxfNyzT*$D!y>rTz|dW ztms&8tLF1!hpX>OwESN3T7HlC`qB=MaY3fPBWtqpQ{+1BU6m|HZv8gJe@qB92A1fh z{hDj(i!$|qq3OQ%nGO2djp`L63v28QZX57S*L=L(Jo8qDmc_lca?(7#qs!P%Hkeqf zL%ne&Smy^0^pt zPBUUqQ?Z(te^_9Y-=F})7S(XHcmHZp!H$|`gOs2 zhWb@sSNdXwc(*^J@;qACX%@b%R;;(#u#4BCda0hDl6TY%FWamQLilR`-{04{=op2+ zKL2~or&_!D)w0I;@638W+CO`Ye?m4Q^iu@Aw#lHvlVth8Y!6R#2lNk(_|hB8PHbqj zjr;*MNW8r~J>1DI7zE9R)4rxh!fP_c^Pmt8h0w0H?zNz=w%8?@}n0&}Zr5x()M z=|*H$Y{@dgA-Il49lO+T(St?T&C%j~;wslL;xj8n;u>*19ol!U*StGR%CGakdxG-c z$b=l!)5GrW=I!tbauAE`iO-hZ83U%1Kw{AbIcjM;$ zJL94nXvIpzB(yaA>SU)>DjDJk=+>&;&|Zz2_3Oj}a~j$sB76hYDluN4bZtvfD>ZtCm zzaEUsx?{_RxYm$T6>ae)n^!AeDYK4yVxIw%rgiBtdK@m9 zCv|A?MGE=<8)J_DcZ}hFR!mK)5?d)Py|P^o^e^TUp4_p6%_tF^9}}5X-P1mP%=F3g zXD{p7qkFfmT{K72x(#dT#p23UXy4A}SG-K^=)}xwo&n=VPn$Gv);FCy4II$FpBC7p zPJ^2EhyXv|h_Ix#ZETUDrCUZNWaN5AeLZUG#JMw<_U+TV*NEX-bmQjrYv^(1%VxK3 zWs46f)uLp4)f~^nu_LEUm@{L^u%TZK89Yc!YSgSA?lx*N=KXJQe!1BW4|n3`ZFewq zb@UDN52%)F*W=2?rlnTSX@E5)vUVfg=2Id#qnW3DdjAEhM|NH^s{80Mt;cGPug8ra zWE4wI%Boqfj^-Dg*s`PUA5pwa)ux^S6Z@@OHL26$$=#+*Z8c2`96aQ!q4tRKWh+%o zsnxK)78#Y$qJv&CJhXI`CZ18V`>tI%XW*i_UFXg3IYEo=-KK3jBd$VrW{tY}T71d) z=I!-_u#i&ejXe{W_F1#yn*j@#b(t}<$1E*r*zgfw`VswqbIn16{_kY_GIp{sb~3+= zo&RRMZ@IEIqjYk!QZdb&QhPP(s7~GTsCx}JkA(|XuUNV9+fz5rx_Pc$w`TdOP3x~; zJ7e?O{QZXS&fPq%7YhwZtJoUjszT$al1&=XfCePwcnFju|~|jdI-uA;zx6}y}=g*qEY|)lOJ8Tta&RFuzuC3d@^wRs^ zT4<-_e`}$G{ht-k*T-(>|6N;)=FJSPX_Ll{#*cI8p~0nNq9POG%4tSyYEnntmQgvc z?LclnxqFZ1=s9NW*WB&c@e`VR*O8+}bB`lOf7CqtPMtQLdtJDASo0n+Y4Q~AbN1YM z&G)PM6DAtPavIdDQ~R^#S1BdCgYI9oR`oUmc)+RCXSBc`bLP(DLDz5G)PlRroHd(= zT)BEp3+?mGvKhSi{Y#g%62liSS<1ui{q(aIK4ihdMUIG&GNqzRCdQX9t3{?IXSLT$ zR;gL7b$=dp`_5f0y8D{7>v+tQr?<3HomZ|}%}f9K=&@F&_vYm*czGH?75cQ zY1{T4JmsG^Z?)83TYlKeEB^V{-&)$x0|yWBN(F^~Xq5-;-M1gTDl0V3ex7qFBYVN> zOvmZ1$M&53f5?09_$rF;fB5X~?fs_S^qbz3o8Ak(_uiC{LJLU@0YVQ_rAU>g0)hxg zu>eX7AiW7Fh|-HF3L+rA=A5YN31eqx z9;XGF^K<;Fe=I$pGG*Q`@)#vJAN8lUVSijN0!3myVJESHe0^CvigUmvg)(1 zCs#i^p~>!P->~EMmmxc?DpPg_^~r3LI~Vyxzo|Yvb4ylMZ{Ms9W8JHBu6$7K+`DU5 z{oX%iJ^Ws~bI`s<4_eJ&P zU0bte+WG2}RnK-jJFz&6v+bWrVtOfL9 z$LX=1GxaZ4Z~v-hVCH_iPxU4HExfX z?>^p`{rOnmtQRxaRX<3H+xhIofb4)5)3&*meNw&OUR{0rOSf!e)fVJx9l!I%%-^zp zyPO1^PRV+Bf6`9-f|1!@m5#3-x;v?QZO)#|s|PQ7H|)XL`)AIs&Y@o!KC_)o_p38^t!v&3Jx6 zMWuBRGSRT#?8qBbUeX8WdbN3dS`8_#=pWr4sdufd^N<8_@OF?4k9v)QWCk=`za;OId!TzdzTYbPzI`AqN!ln6*UWq+%p8E3ihhe0O~Z zv)_*T{%jAD5x#n(n7tuB)HW}FU?GybAte#}3`-5i@~l1Yj6*$@VFelERpiAK}JcLki_&$tbj-S2(4U@>yb}gE$8G0xk9eN`VgI5CRafvGlI4_ zUXN8KI%sGH=DUZdKSQCBr7L(LO_8ZcRR}_sLM8K)tFgmLkLQ?YUUcF!7e2h_Iht5a ziY8Q(p^4NaXaY4^nrKauCRmfE3D?AF{55_mca@jQS>>a0Re7k)Dx*TH&?9!QQpPlS zgl>j|ULjK{bPA2apfIT{Di@Wv%1Py^a#Q)LtQwmpOp~e!(j;o4G?|(JO}r*TldcKT zBx_n#s{X4j+oulP^5xI(r;&V2+P(#^ zZ<7sGZ3}88&v?-T=hMXN&uxdRDt9XmK>Dc#k z3@g%^R%b%IN-G87OK?784Q?*J*cQ=OdQu;JxddNh-rJQDY73F#P=*fEQY>l&qy<+?w+vk-GE-Eb_WUZH9I%IGKa@IBw2N_FM z$PUawf!(Q)T3d&JJz&^sxl(QP16hePSaJnntudbC2=VW*h?V2)cKk2COKU%l$ocx% zvFzYxbF$Ok&d+{piYi;>KOxIsh0Xh~@D%32QCsv*8K9bl9{5!31Ns}TiO=P$_}!S@ zs=~~h^bP#Yt@F=u6ZSQ1Y)rh#WZ(^81DLVHA)OiNuzTEdncC8snc9CX;{|3Fc>82#Wy4W` z-VhCQ7gslTi$`Koa!P7idIq#v=(c0Vs?x+?MNu0`%1UWZS(;Xd%#N~_l@3OO zrF5)N5{iljl@<1lE+`x-R@hj~7yC-CzG{fbFOaBL;ui`36MkV$0LQ2ul5Cu@L!@h* zS7G#=r~JPkg<;I5|+N!3f6_Zv8*gOI(aazgX0UV;-jDg2a2V9iPkXjHjR=_ zBy}87VvJ3^^Tv?80`?=xah((+rO3uPvH*(hp#D-u-W11uoWq9oFDR^Kez^Y2bB$X{ zA8Op*ac&@;TZ*1DqWX^V`nBaPr3V_fm(KMa&v$S<*TL~zN5}n+jt_KfEZykn_)tej z#T^|LbaZ^6p`)ILj(P^iC5sIjoDeUbi;BfG(^Sx>SiJ5F(#We#$vLdQl$=*m;-Sfv zh#DPJ=xQ?%*Xjv*7{9E>dN{MRoS-E3(<*%h_d9n0jSMO1Uux|P^p#pWR6udfD=!GQ z4rSNk$ML6rVMV{f!3BBN&dnOWDuEi^7Fr3kk6PVROkOM!Xzrfu30X}tH5n(;-bwA1 z5}bTDaeKnF_#SaKnE>!ZwI4vM z+oSHGexRDCN>rUzRw%ud`xJu}0gAKoS@ITgrTieGA+GB}qhiX3#?cPCK`wNJ zIEsMA;EQ#^E{Gb%Y!-o`E%#*hvaB~U>u0#6-$>n&GADUJQvF2VglBPQZQEj(#Y~DG z6xA`ZeuOPND9jS-8sZe}666->9}wlAYwhS)<~!YIwf8=+Up)1m86N#D%iS-ydAs#= z{mA96a|7pvPLIqT%^OY5rqRY<4BZXK^)2*=bS-ozv^})HXhvzwnsw?X>T9aeDnHd8 zWq+lUa))A&!cXy?d>Zz~%H#)thjubg*^k0{VWiL;`_~b9jsJij#dqP8v7h-db~x?C zx{@h~Q{53-ObAx5y`-Daa1PQI?38;~#KTY;fE^T_u;RZycF)97I0Ybry(@5_kxawf z3)x$<=4TGhXrCUJ=A8O4`D{{k;);Z+@k8Qz+uFv~i%EzMj`E3gjc^J#g}H`$h6Dx2 z2GtAf5HQGpvUQc;LEjrbN}pKou3l3-w|d;S#8^t)KXH5N+Q@aG%WuxjoIi4sI~AC} zHYJ-@89j`14SK^2y&lxyrCX^@(jL(C)cm2IqV`p9Q*~B7Rlcums=TjQfy^9Q#UA-s zd8WKZ_7x&^HbX|^i^4kKp|#+T)y&5c(|bIh$LC{}h_@5$wKS2EBO%^4fLb8gt29 zD6$u7k>}<oc6=C8+%7LKtEmr{rhcb%wsTa%0Mv%pqcK#S6k@tO%YALJ|YKZ zf_{=AYitw)y*mQhcL?wpK>pCh{V=k8fKxB%`5w^D-Lc!l6&Q9VC*+hhf!YkfwhrS? z11~e?VSsr#1{gmw*bLkC&Gg^v3U&9j6SWrY zXPOq8Tk7fRc=ZpeiK=+jb>#wOTf`pOs~8P?_663KPe3##clnR9Pi5m|?PZ~|7s4rU zs&QCb9xv#?s}3PP{8X&fZ;Mgt&C9Vz=PYcBPq@X{&pCuEz*udBz6e8JJp-1=J%%-M z6_(FY^u-t0$FUsyduCy;R268p98_CGd9Z7`AewY5M09HeA4xW{qNXCNWjw`#k|Qyq zLn)X7(GPy;ga7+IfG*DFvJl!mL!Pcm)25nI+>(7T3gQwnn(5*nPz!m``{nuJA`#Jly_I=CesJFqplh=Emw>&aDW?O!7 zZ{)thjd#m)J?Ikcve;SaJj&^wd4T!4snB%8SZaK1coTeKp*~RmxvswM2W_cVr(J`7 zxUGIiovr>&wOG|!#UuYpu`)z?Rq=r$PZ6THCEq9?2|no}zb@M>n}SIBF<6av2CCT5ynMRM0ASc{IIi64k>br zE@NCAf~~j_9CR6CrOyQSV0|%|22tOC^hFk|+7wv0aTpVk7!h^*!2_eVoSId0kh zS<#v48BNkVrRAp%P8py4PSPsKMy0>-z)Xm*(tm|(s z-CVwQuIIeXDbZ<@Inlh$lxsR{Y;QboC@|dBkJ20U%XJyL@3e!pX6MHg{1oqhKz@z>E2R{dUeIIRu zwYti|p`^a}>$qqQuHG0NDjR)~ERKpOjENA82rIafH#m|7+{gu-$n@WGA=jM9?0Q*U zGD|WhroW%IIrVtTjbtI&FDWarN5aVXcjI>0F2?e)p)qZuhefT3JP}b79vz++_D<;6 zA@Y#i;E_RJ1l|jXg=GB9`p_@iZ;J03pCF$~?_*veUgJEkderk+ZV@a4-A}pIbNj?K z&~<@}(Pauo!z3q-(@e9Q`F&H6X{|BIxXaMSa78~c=%B}K^vhx35_94b6P!4 zouK|%^}ebTd|_WJrz=~aCr&9AEBYv+6pz52rpi0Z1LS|m_8{{109h^~|K1ahBI?vc z^hHA<2=2EV*!i^{@#u!}uknpBE-Y}w{f?;jhY%rlIdb5RLL4^M7paIg;{_hYAq(2C zh$_qE#V*98TSqIPTg*k?fC<V)|Co^g|G8)L7;7-Mpx%cE9C zo{um`v0Eq z_f-3Vwwd-1&3l^Wny2b@>etn7>f@@nRE<+1!lZ$}w^RlpASRf1*+9UF&6FAfl{0@FOKLzozu(JxQ?cLx%y@}leySR_J z1<2Mm7<)F_bM?6dE*Rb_Np|0$^YjgLJjSCwrVk)5X46y}4=Zg5m0~}1K5`UwdDRnH zklIP$PtlOrp^(@97!zI?5w4KUX2@mC2tXn$A&s%>nkhrM;W_QIM`nGPc|7AudSH6% zv=ONvrJPEpZ6F(Lbc zHNhQ%-V6LSASK`}|MT#NP4>Iyo8|kS&vWnBz4v;BdCl;A?2+g3jisLD3-?I(58Zs+ z-gWhGeb>d;WrcH?^LnRvr)}m2=98w^O!tfvj9$ji4Xq6~_0#lG`fqf@bUwO$+A^)T z_83NlP4kobJ#`1QL45>0(M+Yqn3$<-r*uX1rR9nNibRE7epJ3l-cOzmuk}^g7qS`H zmzyPXmEFatSR+gp`U*{j2*~Zb{Aqq0zYJMmO0Z)-lMmu`{3B>l#}H|MB{!FQlY4{9 zgMQfnIboO{#dy?xWXZVT=!;F*sarcP#?wgnAO}Hqzm8dw4v^eUsR8&?8YG1cx>FeX z!HV(V0lwr6uB3O21jj5&Zd^{E?0H!SGM{EdW%N#;mv%U{CM7XtK=KDkXA_+gTO>@3 z-xc@VmSP(kyE*1jbZYddsNIpu$kq`H!mox!hYb(iA7T#a9sEfUAJi#uU4RhK%l}KO zt97v78Q(PDr9N_>LEhha)$`im>E}7iL*X&X^3c7+{WrG(Zoj#fx;}6j?o#7C-dXEB z*U9R%-kgnoC^Ee;&NteO#|?uFCc{R37yWbH3Rp5vv@5lpwMy+aO$j{f=hSo5t<@U! zA=M;RL&)pB$_dcsb;{Ei6Ge(RMUDKJ{C#2 z29+WBVlDsA;7}V7m#>n4-NB)F+Cu&|Ufo z^5P_XyvSAoD{u+){^{UQqtFw@;7_lKW1EsZVv-J7}}b!+SP9k|kEm%c7{oJTsVoEJGoIPEldF#l$n zXbLdxGWIrd#ubJ}hFkjC`V9Tgx_OWh_q88tyJ-#DgPJPLq&!l8rY=^8Lr$zx^;1Qu z?kc}fj#f5Nnw6InYZW6EEfn60+t`2bj(i|`!wZ>ikIUA`Cdu+;^<@Fr@o-JpgN#Ju zg+gQwiUyy0!e8bO@SpGtVRMyW?_gs-9(I?Wf6m>6ZhIJUIM%{*{x-5n4dMD@uR}X% zxM_&O5Pa333K|Ar3;%-HIMsi>wt(!Mo-`!|E^?v?%<~O;yKU5#bcqx8-9c^_YH1|ZaZ8Xx}J3D2|Id}v(b5lQ-;$ibBS4FUSn!z`qenq z7-KwT7-w`TG;e7dXkMzfsVmi~>Zht|)i_lXl|l8r z@&n}{WtvifarvR5LeWIwiL96V@@w89_!d43->hz0zcuyVQ~r%wX!k6mPTVYQ58G!N?9g!-x5Hrn48nX)0d$L= z)D^Qxb!kDef|9{eNL%F0&%TxwlQkmqK!#JsYw2s#o}@NTotN@sa(wceN#7<0 zCRQXIh_}QS$L)q@UL3nO#w%t>^ogj*sL7GnBkDyg34b2eJ#1^JSLo=FtHF(f*9W-- zjS2iEpi{se|9JluRu}6ezvsSXzQ6eN_POBQ)%%QBN3S!UU7@Y_@%YtJW_j#B#$D+? z3m&C4u4%4^K?ir8Cp-H&Z*}VE^oMzt*#^!$*yLu~Vazw`jbB1{Hyggvzo8F;H9K8b zPxnZ>R-3Q&(tf9zrD?6vX^yF9sN1St)aO*oRQ+MuzEB>(9_8N3SfyR@4SX)cz!&@# zkCCZ+wS1hsyF39B^9J&8zQK;e&!AP#g?DBc^h$|0q$8GaFmy{ZVmZ{%Ls-B+LZ>-J z$Kb)+36I2Queifp%nwe6H*Yjmf;W^vyD5YX)(cX#6EvJZIYX^YT$d~S)hcGz*#Fii z(LU$H?8jNnv)<3Vo6#_1Vft@rx$u+TOsSW$F!^p$)1+mIPZHWCd>k)}e?4xy&0-r8 zdnzU&W^VL@s7_H^BE2HVL|hGT6#j9TIjl1DYDn{tFM`TUe$51Gum^rN0!HaOB>5s_agTPZWG*GK?hl`r(6cO z$Xu2`oLQES-wiW2JUo@qB~OJGC%qWMTu zgt_*c>J91&b-J2UA6Cs(^-_ha9xC^N7V?#em{~ig_(U;5(OqG~yxRrXc2g0rE?e#) ze~4V~pUB>Z)NT#VU`Afv?~$W*3FJgSp^cCX$*mCXK%?CY*}WLqrUvu9`Br>7tUWh) zK^}0|q1W!`zTj5F;+ui_-3r)zJrOaX5x7GwJ*c2nJ;H48Pw-EDhk4=s&~h1fSOr^r zF=WNt@QjRymufhqdMW%=f2D?Iumc-FzW?`DIn#arCtj)UIh(Q#+5NKiWcp-QW}Hfo zO`n!_Beg;5vXqy}J(9O3xhD-t{4OCWVSfDMxNfixt+olVzs9tV*&OX1Jt6A1$c~Xa zB0?f&g}(^v7j`DJVd$oippf~&>fkX!_X7t6UJd9L@Qr^<|AW>>*1diW{Py}b@;&6! z+UK-)Pgw3HUQayV^wfDS@Cfwy9J=x;_d@rlZZq71+_t-Ra=qg+-6h=RpmQPY$2Cr^ z;c;JVu4lewddF1XbjP^V*alj{Mnj>&-Ec%dMxUs^rTb9#n$81O{akH3t&{eYW!D4T$lA!_;GKOeoCj}MDNGZ}h3>HWBeD0mhW~~C78cGbSes+`0q|Sbl@(XO z9rnWJT=f@vXa{MLfr!bW*iYU-nOG2>4ge zz`xp~Fo-yE&F3iV7mkuv@-(tFN5cv^`uQGDEz5ba{M_%DIBaS?pa@1fIQCxS9rpzZQP2}k(gFw%ob2NW9>N|<^c%GWf z;ppS1oLJ7vSRGs9cyfy6sQ3y;rlUlwJvf@akE5mwIGTiZeG$ee18U!AKH9-2$8NC+Q9?1$3*S!5Z${%w7#6^hYyL|3o*Cb ziK92pa`a*iI-3E@P4&$h(2TxkySiO^@dE+^{^0`0}_}0A&0Wq(6>f|cW z^)#NMi+TF}81OZPqi#Eh#$Z8N=KDn3zu;(dSB~BT9^7*{`YjTDyAT%A0eYvjRZO!z|(#=;4>Go|DO?UTPM&di<~}aEl`{JGU_B3Xr)a?LxHRP%>}WX zm9aV!Rtx0&l%q{nfy&wgzu$3`^9N7IKjLW`+BN(-M+=wAC@EY<(d}ilW+(7@PM}_g zfJ-Itf^U9u6Et;;=+boHZy(k!1@Uxk1NLjbhx~hhAg^zgAjQRC!9%Wzi8X-1Gh9qt2el(RBcM_Im% zf?nh4hus2M=X2C10dxWU&W;gC|2|KzHR7r5bUEc95=j48ITemU`<5Y!MQ4E;EElM7 zBTwJ91-4 z{un7x_Eyw&PD%cg6k_?^Q9ONyC<^y$;6r)AA^sx9$Znp_fd&SwkyHF58697vpzKUJ z-5wx_v>N@cKm%uU6n<4sTS8Uz9&r0pXC-y|PDUA<6tn|0P})!~ma{Te$E~w+vW0<` zI5}1M@Z@p_{qTj1+_Gh49wks1`gnIC>R7FyYriV!{7X5ljZn~`!7}RpgN!aL63Ai} z=<`aBUXH+6Oy_9mAb|#a##72%o?^xTw_Q+Y9C*-|9L?5aJXZ;HQM zx{Q+1z-BzH-7cex2GGKnz~d$j-M*(F{c^0a>8hZ&kE!VKSUG(Q7+5(gV|Bd_G?J9UG(Dcn}y0b$?Pn^_byNDGM7S#1U=(dM~?roJ( znF6$dzAmmO&<@c2$76w)DFUVD3G^PuXG>>+dZJ$*Vyv9V1N@k!>Ij;8uuMs(=4t4+ zG&x;-M@|b5YAOCO+Kcjj+tH^oHR2k|iF*dTPT=TwtBjhw!;{|_6}5ariCDa9>IIr9 zu*yYR-P=!2{@r=n`HhO^W$5VU9VK-|&J4;`Qa6K!Jew(K)z3** zTqGlH666@h)5h;PvIWV>s*%yD3j#H&7HI!?+&{um9_XPvcrC#**#C}#;@*OnFkMf5 zrzoh?a|MmrYM?P_H!H9IG3sojCDj-ujYGZf{KQd2IQT=lK&#%@(9%|F>N7@14^FCS zbUy{PZ79%#Jqr35ygyo@rOM_;x_(Pdzwf~sEED=~wvO`7E2-@jwOG!|SRD(WXsFvQ zIr;QaQycJv##M6Kc}7J89w=!U+BI;!oDN;m)6$VTn*2yd&oh9}Sz2=MrlQrZ`1WoE z8FtI5)gGP}eP^j1fS5D_9`lQLra;L zjdb;ll8*IOQT|#p9bIn_%e@z&PbcY-H%>+TFd1!Z%u`{Uf^J?GD5hFR_rkSgM0A{K zpqcrfDrxR5fr5Ng6h9d>2b}im=0uloXlcTDEC9Tsp^2_WT0KZj&(3Paa#qIbXd9uY zfu2fwtGOD7L_41uDD!P2#f$_#ujuJbnTC%1 ztf5#>6%G4YL9^Njv~`}Grtjsc*%wN}mUGHHDyJLo$|0lVr27=S`JzCR!E4z%!quRu zU+NiYWwchAPQP`1j*eP=Z4}E{ z8LMOW3^UEF1T6_h8Vf#=^)>n-$UqIY=_s*6L&MO=xp8h(^Te4}R=d!gr)JdWL|uF6 zN&l9C=6$W9W(jI?9U!B}WlAdiM4-H;8p?4|(MMZ>*Ae)q#Qk>!+7lwDP2jcAkmx0F zdj6UlRqphoz3Yv%@GBD?>>Nn*dmyg>%2VRCNboS>!)33_@b*_8_2ovHN(BPA@;)757FH2R?rReJkTk4K)U z&x>Sg7r^dHuO*tG1L?`SR6*sSC(C3x%`P_5YrZX{D-H9)SbFJ(d~#|k8W~IpFB53_c7J+&I0pK!FFoB6 zL7#r%Ne$=ui{-40)sfmNm~2)Tvfc0_!zeukZgQgbdS5!B^`hU=t|hIUX-!xxdA$)q zcBd%n93KMxHVO18L?i zZ&E+E&>PAu+V)#AO;V>(`x30jyAn?c+k@!(lThli*@x7vJZO8Mjy@XdLY)INq-o+! z>r>ola<(fyo8>}VJ37;ub84CwVW7L8Kz?AJqScuY`nV{G_L!Sf`8z>m@PKb+NPBv% zs-akZ#?Osa4gK$!waiNAwH8lQbZ@TLOo=~1aW{*U=`=}AU1srU@7Dzo>I8n!o z!Sw4;6WMlTk@|y9R4_Az`kPvTUgN2_pfRF^Mbg{A11o1`tPX2g7Cj91r!&(MX-AS9 zbvf=!J;uh-t!Yv8#eA$qIqFAw>snFejYhO*K~oz0E4JtC&ZW(}VrawVc$#z~n5q)2 z)MBuaUI!kp{iLG~F9Yd9V{h80_M)p%p45A>g|1E2(MqKg4KqM~z@vN&G-dfAmul`} zHm5j>&JB;Hx2y#e9@9ZAzqiGYS}bo#@BI-k;`cG?{lz^H^yW%RTT>Dm=Q^FdE<*ba=QMR}_ z_0A2W-p6wY&H-xFFPK((X43oa$#ij06lJ~}LhakVMk&`iQcZAIT3>(#jLTY6%Dz;p zJdj13e~qTc=)3cKoXE1wk4n}U>D`Tyr0X0&^qrLs9r7dP6(9ON9b@CVE7cT3eqf$t z3218g%?_k1tRU;?G#Zb77(aI$1+N?^mJiW~Q(ja)t^2(m>2_Ml|1%S142UM(0B`Cz zuovZCYDatS4Wj3HovB4Zsz|H7t1@WNWe*Aw@~F$qNu+Jlg^qX(M}M`U6?~*M>F>$RMZ1@ierFg<9PXqje2k$mQ)+>RuW}#?cYlYFKml zD8eNBU-g)SjN|E~R-m(I5j%7*M;WkFfBX{db=1#nD<+l|KllaTDNh$`0gS- zPdl*vV}%vEDR6llcwTUwsKo+~-Yx-*KNBqnY=>X))ExSY=^OYfrl5T!)pcwmNBuf; zWO3yvcrN#cKp$WI2%Qo3XA=72$TXtvvpDcg_)^aElnXsS5$#!-%+r}A z=+{#aOOrTyen2X}_y~A~4fewh_)`jb+R|R2A0ENaw3Vlx{(|@}&F1M=U*NJIXaIf7 z9Ve>x;mG$TM{&^C`v5Of1=I;!q-RfoI!+WQ8hE8D)Qh@yTd}lY9Y?Qq=jaal`kZ{+ zzLL>583LuiHl!;&U3>wX6n>qDuoFJ`N)X>IauLW2IDUw}pM!p7{;F%}&wG7%`Yss# z4Ye zw*nDyC&E8AkEl;u$^JM0F3=#@1~CN9EAcOTYNeCwHIjVbE2{P!5_d6 znEgLAOim~E%89ot>FjwKHT^(F+iojqQvmGiy8=CT7ig4OL9_RPCUQUz!5mdLg-yJN zqlu)Tt#@TK`KFv6u9Q(2+Tp!}qtyulo&P{8Pwt?i4XfqU`z-2H$?45!3VP}%qYYc+ zbZ!o8SG@aqzMM+*a$5foW4csE?|}|c7d6&p@7*W^mLz9)0sBPvcK;)DC`;`bRnP2X9WsSXwt7 z@B@DyKgsFC`3fovRMXTMa?w}wsZmWI!*4@XGV+5DirL7&m&-+e(wH`!=%eb$V}s%a z1r@H8({pyA^l=Nc0sgd~N?@};Qqe_|ifn^b^vz=6 z6ZmI!6?(}jMSxEt2Y$4z9L?Oz(-+_+wp9WhxWv;oGyF*#Fb;G)&DFv`7RJ%OWek4w z%WFz%l?gvav6gP%MVsDN(0d)UG%rp=v`kKY2g<17S`~eKLP1NCf#VhM`+X*(Uw~KT zTovs?f4qnG++CrdH!sMjd<0K-F)r?Ql*$)e*U~gs6}^?Lgb){KUdP86!=flWi+T0d_nLNCwGHi@v)rdy(S0!!r!EU-#0-^F0LASF;hd6#=$>R z1)C0a<@CXdW0{;hj50a~Su+^^;U7VtFJ{ST*nEM)=kv74gD2NnJXN;lsC7AfK!+Io z3i{}K6+ODDrm)R=YTHpI`f8>u&`bW0-3r>!N>09gHDY^%&ci?Wn4?A?$Z517kg7TC zsY(@f3WAU8v6A|KhcW(?haM%Tj>kZ=D1Wn&fd+3>)5;3yTgy~5|B;rm;n%rxTus*- zYQ=Zsv((gfjfyTi$?1zlN?P(0Ppf1y`Zi2SW8Y9vtU*RyK7!5uhMrn@=;+Wo9i{gJ zK1nUsWm%)7Z)NaFT#|{fb`FNm(1)i(Bjgm;T1E>z;ai@FISq&Zs~5&-$UO$XiV}`! zscE#Ht~7QcSJ-Z;?`Y_CKPT$Y#`LQGZ{c^j_>)HTC%s$(e<*xZtbN)odOF%%O9ve%I{15k2B7Cnxrs_?=EboqXE;k zbb7CXn!;{j{;H`xGSwkfX z_$0AiyHi^CpW2_gw9BM&(;lF_oCiA!p9qnoo{V5|MFPM+!xk5pvd9V%dnrLlP7dm&x zNZ)>}rL}*^DHpc!s)cf~T$tufKNmSuvtMDa=b9<|NO-H@F!9!cZX8+NX=EqxTb~g{II0=6W*1fX2Z0+H{ zQNt%ut)_NSa$471MgAB|vmR=w-FqsENm5XT27b*D@aq7~J5&nP>KcO|`J(h5ura;q zJ=lTM7hxWKG}`oL2+dv{KxB2Mz38K{!+jtp-08+|8ag{0^`H-bd`m^{p+0n{#+{n% z@TMbk-KgVa6Zs4Rf0_Y53S!?OD(!+$nFMPwMhWY_%)E8wX>psJjA+6 zH@VWsdb8;N@a?E1zg=3E*^8!4f=?=5M_rDp=yafx)_;Mvy&)sjEg98c3t0pEpZPu} zWd_kN_2X&yRA1`m=|hdr#8L3MDDZ0wMU(>vK_O&);zJVy4V01u+W*jnjv;`K&$eLN zp!cKevBA(aedtWSE4_U~L;mn%OsTIC%WWMK>G|wH>WMwz1iNg+#YmcQ+k>V*3Zy&j z!o_#sghD539RwGYp zW-?H)%ti+$hEiI`SXvDn6!IRJ7imYK8^UwF!Fav)hRx`uo#LvoD?d&53eVW*WL9n^Z$n zseMQWZOdT(nFz721G@rg9B^=N8`fMp!9MTmOiwPrk37eN`T_@TqYN~4kCyb^4I~3^ z`rJcBy$Yd^QUG=JipN@{R7zdniYy7(b@2?oC3!0fKv-tV4WUW!LDl?`PPf{|i2kI{ z1GS=$>Y%fkqFblaW#s66yE2X535}-J27gLB2ma*gN3rLPVtK;lwxWM%We)81D>hnr zqyed&kacNZ3VnG#M|^i*_e9$35=RYpd($R!r0B0w?{}jYv$2|Vd=ROgyU~ITF7z_G zC3T$Hki1Scp@%DS(f$OnuFL%*se@MlonPcd8LJJHJqG^9XYh@KHfI)EXv2Int!`qV z?t{$K`-qqnIdp$p7xFxxKpwZ7(4`ga#dr7YZa_^Z9+*Z>BmkK*cX1ovDlXs8%Cq& z_>p~&8=VD@9Y4d3+K$!I$M7ka`~p4WZwDuCc$dFASp11s7x*FVb^r4Y+ZNBNsJ$ay zNtLpDc-?VGPhj6Xe*C%Ro#X3XDHMoqE!I{01j1-IDwpmcWc6RJc^(zitq<*CPu6as z$M*#6kbiZcKIs9+Jp}lWqSZOJzGGuQA`~EsjI*n|hnJ5ZA#j}BRqrD>YrT~2MqDd! zqt3NVy78)9#v@P%dqmJm&%e5q-sj}((F|p%dx|j@fe<)cM%KN?o9tV)xWI7k`ps2*mtfc5*A6LCxVQ}*eiAm1RNr?^hb2ln8 z($i8|fPu(}@Gz@?K%keWhs9)ea%Qm$Yx{=9?_xm@PLI*Nra$jQ#i^e{Vl zvhVO3HJn7R+Tv(IfWMEcn=kv0!l0MeX^W!;A;C!9f{=UcO|u7!j}jOe5aA!rAc{+4 zu~0G-vy!rtS!-iLuu(L~+r`J#*NxR^Q0V14nZ?6oM(6}kkw(k#u3k+r!l9Azn1zun{Vc{8AO)Rhj zgP(8bTB%tTf*U3rI zQK%(`^|>2*(ZyAdkU9#4hWzjF$7qewS!PyZQdD$MFr!CCi>Yb0xUg`mKZ|d}V%s=- zIeD5r*!TUzSxlRRjCkz#wWa>O|NPv2-F#fVU34 zA_D?Fy_}piTE-i7dd3sjxMyQNJ103MCN?D0*Ut?wAWV@;XYGi9PlNJGhFkj-m*x)? z<9u0%<`oYq#9S&nUX>3jtzet~Ys=XE(&7T^P)D4O(BS+~_C}*h1ez(xtH`qs>W}DD zC4H@k1j3?94ep09R~l;AK&rwztdNE87$S!7=z~}u1$CoV)%k9IX)$W3{p_FZsSR56 zszhuqwIAYWwU3qm^V67neHFJWF1a!;xh^`ySXvEA%ZC58xz^m^f+)mIknmI+ z2c!-f#iBm_O9s{rgis&Xweb%`>GdjZi#3-)z)&UjM{TqVM=UQ^PaX@i@OpVcQ3W&y zR*w{SA*_AF#vPe9&5l2xE6B%Ve|Zk^Vrw50(`i8dGKne*X(n}Ro5Jep{|X;0Qj~)j zaKEImkOhtkE z{BZ4e*)!6&rS`CEN9-3sz@U0npZGv6eUv%kT_Erh3kS!jdq_F^qErpqj{qnPy??8s zZu`pmR~8mqS?H!bj40{&k9c%E@F#ss_-B!G#Gy6V8f^{k%4$R4w~E@&*H%jmE-9W= zIg8QJr@VAvVF^mv{r)UmnB)7kcyUC10{{g>%31d{NK23^zy;nLQc@dXMB+7w!;@D5 zcq<*GRQ2h}yH%_9|5&wT`wt`MfBtpF+iUigPF}XPf7QZI3P#NO==F-XmUJ(9bAG3O zBj0Y9KV)*N*Gj9Jb?ZN(QKy26`fXn?$!^)bUq;i;`KgWCy_Qt3RkwufW}R#qjoQYf z)^8b^l+!dkKBG~nEwvuv%VaZ7?;mbUwT8wd`36VE`vivDy!=C>J^g|sExv)_?%w{P zZeG@4S5MzS7mJU-v%8m{lbffn+110_Wr`l*xVDQlCAd#5b&#F*s5yDw-G@49KPR`D*u5O4Og^E1AP?e9bFKV;; z`}+q31O^5M1qB5M2Zw~@AnLS|>EM#aFPGO^0JUevFaE28!SH`_U`y}+r-y@_|9^fG zy8zwjkPQxUG@6`T+$^5nzW)B8nBd^h(1@rQTYMe*%gL1x=jcL_5E!-88h(;-hp=dB zwMN6J(_pNna7LOS^1mbguf$MGSq=)6%t?pEDAuaR`?*!Sckjlz!T6Tbo4wU|QvQmf zk2=ilwrKE1+?B}@H1B^t$RZ*mqoSgtV`5@sZ8lq6TwHv7e1gGoAXtoah|vahI&JNt zaU3ilAv+v#;A#z7s=7Emb)kKwd~@IZGk#G0_F>ihY3w?0Q{VlKzW2Flx3lYZAIUdw z-GBegS2x4O@-r)AHqS!&LPxoM<=sskaJ>%K%f$CteHq_>DVAp~l;M3=-&Z#Uyq~m? zb6oGe3EYSWqW0O@56u2M&NawojRb`pf`8bNB}?G!0?SHemvIO|VV859fh$& zY;0|{t2nj|Ld|g+&aUCuCU7lFt%Yo6Y!kAM!xl@sp2OBUJND`uIlB?eiLU{dGjVnk zhfP*?Gd?1`#2+Wl?!;kRh20sw!`DEicj4?V9JbKfU0DXM8X1o?n07Zf9rzkKkL{aw zcjf|S!3Ytx^B)J|u`&-SJKXV)6QdMjk`;FW8M3T$0@;}lk!9hsBPgJp>{ueJAUihN za{NoyQmzJ%DhX4IoQmwA8#Q5B7}9;!AR8BlI1xMtudaqTE!nZWP{!3D!xzuL#G5*@ z>j;r!kw{R^3C{tbp6q(&fk3J|&Omkp@z`Oe)4iR6SQXt{_V z#65iu)*<6w0!K=!Q6fCP@ED~cu1JG0i&Br(!c%)@aIt?(`KSvQraQ5cK!OfMGR%x& za+2eogHA>0BuIhRXXsU)uv7!&`Lq^Z6~{lpgCdMreS$?866`R3A2Vv=o&y6Syc!Ps z>H#AmiKB!KEr%SBf`Z4=X$K`puw%CJrHpi(@BmIPfv_lm^hy@>mA515<6jRECg!bW zGoJs1s}4kj$ydzrKdS{+$srpoaLYZZg%m^WF&k~j;_e_|30@4lhisHE=yV)*v>~A< zb~yq%dJcHSewQ$Sz&?L)yaFp?c*1bJ$MGhPzxxVmkt&otVH(iP@ppi9Cl%7){S_j| z73(Vo6Z6F4_$O$!J@qGCwGh!04pc#yjMQ+1B_LAgY7x(a1Lxo#FwVifE-R8hW5HXdL;C1CVWaE_ZKyFImU!jut z2BSfdJN%!)h1u$dSPa0?1CFp`;Xa4d&GZMRps_jx8>Kk9TMN4xYhO6DpD=mujCDU8 zl1CC26=6-#Esi8Qcf)!rYz4wf2rL%j=of6+!m2GSWD#lJ6T5>j?!9FH0W6UpqHL_l zKmL#Td|eLj;Q4jQ8xc>cc z^b?}#)OHs8Au>aWGyIdoJ4C=gc)P@-9GqX|>JlfHB!a}l9o$=#0ury5I6r41yUD@x zIWyVK;8em3FeHiRJ7L`~an59Sc5r@4Qefu4E}Iu2tTVnC=+6Iy%fawP4lh9`v3&e{wl&mhW{Vs7vuc3@{4hM3A$SO#iYQ0mR}-omn4@c#U$w< zNiK=2OA<|z3ldHwNg)$BB*ljOVm7HvE=G%g$}e059 zQmihwmmrmRzBDQ&DOM}L80W8*UyT3Pm06N3kRX+0fdq?00}i<$N^MClNZ6317@1Yz z9RGlc-C%GrgW-QIza$t{+~1{GU2ZSIEAe~@-nyJ$f?DGLbveI;fx7(PLEDn%CdxHQ zB9NQnKY;a$&oi9^i2NVw^9~;VAGG?q+`g_p@8IWk^!d8nzOD}M(B36(FKX{~`Mks` z(O^RG{(nD2xY!dO>`yHnN_|mRrT-_lcX01I+}^?A>+n5Ehj(c8qW1n@b9+gvmw33u z`6ZsuiF{tt{3UMBxscrjBd88HtOZaaOA#3S!9$M0g&%+AhfJlHs7TV}9em?|tj{~7 zfXMA7Oa$z5=8q?pm2u)gA;bQvL6b&9g%qKoZN1gE0uCPZ&%2%<^U1? zWmr4b%#l|DQPIoutVk?U&_7?CAYzfvApmp8h*SZweq=IO^|A1I8su7yP9@iAvXnAg z3PvQa%78@8&Qhl+GJLY5eG^Q=m(P#WN|& zYz%m7f_5LD!wNqB&beS}9#XQ($ znAw2SyH$NmDn!+p_^8dl0X$)vBEL_W*s4GCa!B~g?^j+rNJ1mRz%vBac@Oyg=X>~G z1xuw;F}zHin8?o?I+(%RpkM!z!oh`B7MEL`cd~}zXIymK_$X`h{@wdw`m3zGlueFE zQ$d)wDMG{koV8&S0S<>hYwEw27nkOVQSKd+8UOLQg7Um!;uH=(=YYF{P0L^+!GXr| zypq0R(Z7CYaDI7daj`gYkYCWZJg=-@|9lZjz}e8+#Brl`I*sgOuZ`_LcIBAaqvJ+R z7%{!F>Co!Izm|P7sA9mGq9=VWzBZ-%^G<2)8np~)a;jdB%$>=0TVP~lu#ew!%Mquy zbVv)0A!T{?fj*^?X??~#?i-)9jnYNDk{pf zjIrb-_zcFK-mv&bI{$s~p96LrYii$=R z6}>=r0&nQgC&lQ8;wMzor(b2iJ~h(0_g%64cu_W?kMY_u0`_oJk}v$@tUW&$6;~D) z{Y-a(o<2o2bl~@znllFu(1D*HT{@0)>i@;sdw@4_bdAC*t)!LJ)*TxRGGH)-5{Hfe zi_jquFaeT~LT|w!(@hnG8UmpcT1e=<_ujkd%~TuXCdumB)mH62BSVt!-uFKD`=0-w z)oORAoHnyFvomMrWM031J+oODUw?oH=yP6YCxxF;y6l|%tR%$e(Q>#D3{F7!06ge& zUcde<B6JAaMjR46h12PaGPCA1-)UWZJZ}G+18?>A@j7 z-~#+ZfqWJUp|T1B2(twKKo8{enzX?JmXwy3pO%({-iz>w9>5Emh*(1o3F11)32~XA z%Z5$Q0Kg2;vMuLx#+8<;^r2?(Msk^f<$t&WFX3m9$3=KEnnApwGy1ng@xt z{&r0Gj!8h*Cg5l|5u#A|`q7_OA^(pKLO(pyDpdU;e{@X%C{Rekt{iScf-&r$kPz+^ z!o3v62mWwH5s^RgD)%>r{SmyT=&woBG&72XnbXRjgW>onRq#VN@<-1IPLn3Vus_09 z{@kPqx`x9);tQv1(geXpR2akI<#^Gp`9rt_S47oEdOz}o=!U*+*rE97#`D3E9~|;S zVesC)zWEy7tLz*mhk+ava-ib72;zg50P24sr+*r%kD=Ac&CSh%`W@V~{udz`5(y@t ziZeS+2p4N866meU%yhx~mjLw!DiUs-*dNwGL+J$vr6qj8`v8R# zZlSt@+F8KhA8IB6GgPXC@RU0sARGzR@9-j{cR5@R0SmbD%tAMCl28qmWwuPp4s(H) zGo(Rnh+Io>;hVqzcB4D^+x_8YH+tv||KQQPcW+FBv$q6SID7Yoe1o$$i0`8a2SGP9 zYrsgX?T722%%5QAF6g(77&~^txa6)Dqzd%;pg|LQK%@_@`O%x{MGxATYk$AQ+{bXv z%+0WyI~>=xKL2O6*0!3>TgUG2-g-^ptC0*TCYmVJN-#jq# zrnz!oMeBCIrnKI^zFq74!9lIZwEDTV=J|?nJQVle?iHJE?mPI5**I6*`rz1Rt=se; z(t2;w!q)$e^PlcFT%C!EVe1}?&8=H$tpCsWA7RXo-(?Pnbz4ui&G>JpL1|YcJTd>8 z+3$ap2Bqsem`8N}e|BnR<8)A_PY)^@n`^V<%zn6L#;;FLZ9LT+lV<_##{OZyXjw45 z#_PlBI~uo7k9joR{G#UMaQqgPN1Km#8fI>8`_a5~=2zjk-?oS}54p;xKbZC^eZ1mq zI)e92yOHV5dMne_)C_ar?lkkm#Z%1lKg%|EKQ;mEr;jtIcFr;%{9=^Z6ZMnXws@%d z>pcU_QkNgi@@C(f4`{wJuQ}Ew47>feN#>0uk>Jc_tQ@$ zT})U0c`$v~+P~5r$Cspc_D@NtEA&j4b*Y+e*mJT~#&oOMKW>IuK4iK%t;aMo;_=s* zDQ3St+w49)$t;^a(Y&$EgmO7-8*6UbX-rrK^GA#}k1WnK59>A3Y&$f<94!trZ*Mr% z?Cd$%yzuLRVHqtC{a|jr@;h_Kz&GZGk$ue99`-bkj_Gbb@@p4!gK6!;v^TDpVxGSw z$vl5fyt%(A%3NWX&b*?KFpKMP^H?F2j%0kWu{(Xi;*xYSl$YLYMsB)8`7nL!;#=v} z442bWW}Xh`0a8+^dxJr*iHLv^ zgAYlNk_PhEgUtYd6vh#T1@S@iNoz3Zw4fpJVY;AP;{-IL01g>RmZN~^NG&Q1CNeV8 zU;u6B4+xNo3iwCp3?zv(Ey9+gKY#}vC}hN5Z$MDOqxL8ObfZB31kfTn!~STV;)5VcwiS%5!+uhtja(`_yll-iO|_e`afcq(=#1$jRRank5!O>m%q6H#R!-uQ2-9a z^S`MV!;|NNSu_I%;Nc?&OT4XJt6!;f#b6IW$)L@kF^(o;PxNdP<#}MaG)_%~b?z~B}tVNm1z_mctDbswTZ z%@_F*9ICt`G4zB0pehuk7k)rhHj)K`230ZC-tYiVC>DBvwPRr_HJZO^*P{A4j8zM~ zmEY(Pj{sk*1zO9s_&}!>?!pMeQ~|XH1JD3op!>aD^J72}9RtV2m03 zbYU1sJr=`0~91w|C7YR^-Z-5LnIm87A5<#g*(9bRR!%#Jkg=K?q>s9D40^mgg7bLU`5Ds{? zNDyU!9Pac$K-h(mMdRsR<21piV?sgde(k;2C$$v z4)_2!!iVsF#Eql{QOR&u>;pUmAN7Mi!Y_|oo)*PNFwiMisDbndjX|M;w@3%M3Rn=2 zu*Do0D<`1KM=A+eQizH*07X2Lm|9;>7zQ!J1R_`n91?_9N$7xVNJ6L$Km#NRQ- z;De}AsSR)gBmwa9AmFzA1|lOhb;R5UfNID9gaeh{@;Ltlee^-8AWAq%IT?S)Dffi> z2F$O+D~wJRyu}KrYT&9x_i9Z9G$(4TE>;g4hz$aZj8DM^$aUEb*=_t8@tlZ&+1UEn zU~CBX9IRH}l-&ZGg?D6k@Lb{r5eKd4Q0xU*iO7-NmE8lo5;^!?{2u<2C?wOcVPG%d zf$Skz5PK}Uk3Ya4;*aoGL=kB>4hI_nudyexr?O|V$M_TcDgF$9O}rtBNr&+b*dTch zc4S`2p5wXr3$Q!$mdGPY$TFkPoCgD2FTo1dEBrN{PrM@vh*Hum*u2P><>C4GJG_`EA<9UP(Mbl(w3U(GfdzyD{5@WX z7vZIZi*%EenKrW$2giHZ55E{M!EJ<{@Q_}k&lof_=Abob<)l*FhTCxmQAT)4AL%zT zR@TZ(<)Kc(MYst+88A{t+Q^|^pTxs~LOq0+2#`S|V`R;|74>RS!BK;h(_pXs0_;6j zC@aIAIP8FleFk<`GO;C>=NaK-Jj9b2)yuL>9xST*cAb`VGX_Ud4x<`DipSOL6+9mcnkmtmLsBltFQto0~< zm{?~_k!pZqaSC=DJBA-2VCPHh4t5;hPW}KkhH|hI_gZt(sAMhv4`Ajt}X2)_mNx7pGcd{w`3=Y z{bU`fu5?>=2LIDI!CFr`i=QG6koBccrN4}ujA_zmQUj@>)JU3WZ4CFPiOt3)Qd4P? z^$fAam~Cw)HJ7#;w;4@R3#q=e)!b5QC8a|=v(#EbX+Hzy2(BkVH1+xQsX z>>Sy7V!QbYeic7V9wFOHdyGfPy~Zil4$=T*$w79E>?jR{xBnV`oZMkX@AGwhpRtp4 zfw+O6Ag5Y8OZ$xnj9sKJq^Z^ivWvt)V^^u0^iXyaKS@rrekt9;FA;}~-K8GVVdE(> zL+UAgCG~;R_ZHVA&wfqlfIXJkWQ1wjMJ?@O5LS?Qh#ZHG!Wtq zk_JmCZBMB#)Hzp)@_(qw6Z^a#I9&azICrb>_T zE96yjpLv>ejl51?G)|XhNc+t{TdmSeIA%#dOS8jwH^|x6Io3JS6zP)jvT?37Pugcb zV4g26kbaS-OADo6rA6U*|D?^sp5RxEbFGV|r}%B+s_{2ziFD0)-FVQvR9Yr2msUtC zrB%{u>33<3v{qUN_xac}{0=eCx?Xw$HRnxogY<`Vi@Z(Fw{DdFl>U+qnKwzBr7hA{ zX`8fN+5z`ZWjVxQ^G<1(l#AabZWwn5lQFbV@o6#~JCYbWS=C#|7!)hr3^`m!!+m6_mz& zRk|i!mySy}q?^*MaEjZ~oe%N;N&8HeW6Y86O82A(#9iZk>4Ef6I&NNMeIz}WmP(7Q zPo$^PGvN2RlpB@-+{x}4f3q&JzL4&a_l+maFJYGUwY1dwMtUo4l=7r}>77&n{Jxh8 zB_xB*(nI2bahbJ9+9~CbC(XrDiL_fPm28q-a!7lnGRY~q!uXilV_}Bp%p15 z&RS6$b<2FtdfR;7dck_j?84uX7p<49HsY=Evh|Afs`Z-nI{4qP-h}^K=Ek7IooBoQ zZH`k`K;E*xCkx5j);ln*b=P{&dfPe<^u65kt@Y<~o_`hv+<2JI)>a^O)2WFSmZS`2aRv+N?TLbV9 z2lOLofFHD?mOj_YS^570AB|Eyg9DAjpti~bBLmT()$Wy*;`hudXx-luG0>tvB5imc zanS0M7ati91I~jH06FE8@5o2i0`iTqJm)CrJ-jtOgZ$1j zJ_otIu==rLBH#GZ`p#HjM7j6IO2LkVZ><3ggcy8b zrKwU0{_u_eVY~zdVUcLl5VV%AJR%Gwz~}(P{umz(97B9G6oJMd;7bNMlmNaD;am9Q zcv3oyw4r<0Ss(P#(6kyFu`C}WEFarKqjzX@FchA5M7=Z)=V2ui3p}#WTbm3#H;4Wm z?9&D5mEqA*6Yx9*ECO;E53=B)*Cyg294#e7qmxR&hDK@24>goHbVPhOU{C80hZZD? z4%DkNz=1wmQBN`vq}>$Cv6GXB{O>zA zR7L5Ky4)bNpF_XQA)|+lAKvQ2I_+^224)QyG;+xJ?`n+rq5dF?W#osQAX?Q3>(#Zj zj2=G#=KetE4VK-H9+EjOxoWHA&*~E8LvUj06%26(-@_UhcPZKuz_{IY#l0Q_KZ~$y!k({2~xZ!^Si~TgN-^9#8{a}gx zxa3x#DOfkzGCFf|a(b)eG}zYw_B?2n+$0(0&7>iN5%7OQO#2TIdwtv|;_r+IBmX-l z((ntz88dNsa-XhklShmmfi?^HJ9=`B5y@RFpnh0y9B3vEv4kT{827PUpd{l541|pn z!YN0lSU^G7zKNKgg5#4AjN(l#eN^k z#0N?Irz{;hcEBjuzu{vk`?$9R2peQPVB(u zpTl+H2*gYB=e>J=jt!bT0Td!2{@5WjW3K>Q~dKxEyvce+M&l;SCW8&`~dMf}p_&#}Bt45irF7 zZ57nPRbVDZg0=u!G}HosUN;Is)^{sIE6@z;)Xz_aWO#_a zeBA$I#Qzplh=hjG{wEHmPIX$C2`!(@MKi-_78o_kFanL*;QtA*|5jWe61Wa8u}6Ie z)FFWEg_ZxXPepi{8K6hK0+j3Joq}+W08)S~{(q&XoDkGE`MU=b&H_ZhKfM?ZaQf?Z8~c@Z@Or@Y`SW?Zn|l@ZOSp-Gd(apGCeUpGv%6InqHgUn(|Errb1J( zsnldQm6=>7kI82Wm}nDY;!J`mWNHl-oZBfoC_5>;D7z}ZRDPrUQMpgvOV*3niT8mq zol>j|^nhBx7a$Jr5G*K%cL|LNCc(Rvf_(wsgSElV@-DnL(Ob4(-Vdxhc2{--OTe9# z9hL2sZIz!ZC6j34O{^(sqD+31*W@-iO%9XIRAMSJy*Irx<(b}?UYTB)o|~SU9-AJT z?wjtK?wD?wZkVo_u9z;FE||`l&X`V_PMD6Fj+hRa`jZ36!Q@bKIQbKqNscD7$g$*j zaw3^cP9dj}Gsv0b&tUa^9=QN494{h&BbSoP$(3M#d=0sd+(2$5{{lOwTgmO@PI5Q7 zm)uVtBoC8E$>Zcn@-%stJWu{bY$hJzc9^TShG(7?P@6=;C}9N1!2tZD8U)ohs0oUK zx~6=7ye0Ho9WY|N1?(eVAkUF!$W!DA@)(R|9U>3FnA{$67rBGnMs6WDfpyJ4$o1q} z@^^9-xq@6qE+H3_zmmU@^U1m7Y;qQ9C8v{9$;sp-asoMy979^jQRGN+1UZZx0=9Yw zkPk8*Wjx7vmXVwBGUIi|+l>5-f{en9;*8P^dq!D?E5noF%Lru98B7M3A!LLyE@oZM zx|(%8>t@#NtemWSS!G%F$l=WOM2_ZaMv3f~bL_(rb+d5`9GVbcMqRbdZY`07GsqYjjgabRn^I*br+#@b+)WuMDt zVYBc>a-A$mnIum#G}bg$n35)`$E!y)b3{6`?q}W2x|4M)>qgeKtSecUvZM?#gU?_y zf*DkXKf{~h&TwWpGHe+o8ATcIGu~z7WxUCFmGL6udB)R>#~BYZ23v+&hFgBJWLidB zpsQ*bZ<%PxwoI{1v&^u}wES$DW0_}JU|DEcWckgq)Uw>N(z4pJ#Pn zI}YB4QD9fO9+Zza*dJhNxiWT6)=G8`wW;`Y`E=QIOi&35K`vmto{!*_yo{+-T8Y)d zS6$P`O#>BRv>zno_|!(e&wH1bm-i;`Ro;ud=Xp=_9_KyGyPtPA?@r#Wysz_m=Y{(d zs9lAPIbfv{xbk+LfcF!9-Jx$v^pDzmr00WU&<3JN$U%FEE>JC_3tBV<4!(fV1r(G} z^$iUe9RJyYZfZyrI40o9zX*B}pkt(uO04?%ER-C>?&jpcr|eAg-JGuGR+NoAmu1-?dtDc|xn&-;=H0Z(HB;o92yL2E->VEYY)DXr5PZ(P-ugQ-u>5 zCeG<--m~)`&51S*n(w`~quJhTsc`OS3RgIHGzla7kAGp^NAneGXILk&gs%-(EWL!^ z)e7i>6Kj?7yR{|k-O$oFXJ!lhbF9S#<4n_j17>1~navq6E4EHPv)MW@`w7>k8w9Bd zT$?BZQsV+_X5%7GYE;BoQ77yFa0JZjlTpxGl*Utu zF^bwMMlV+~tLjzq)R48~N~n#Ej| zn)2OKRtAmia(+na_udeH4V##9lTN`mg=*I$=uXNYU8BK3&mKiz=I7L-{Bn9?XnIN& zx`oUyUy-`iKU?{uXs$6y@Um^?*Xl)aae?o!{xvrRYEu_sU-^ZB`{Hh8w>lSnE^d^_ zSGyft#axj8S+xPHaM#CkD|>@^-bUEwO4o%-?g~-Ws&tZ%bCZj_6HT7CvuX+cuk882IVWn%>x70LQ z_p0-;5uQ5If@<4wQ{a}kICZnEu77bTFJXktM{^NRs_eyPIX;h$t~guvz+OM9f5Kk* zXPzsH&2@@})UrJas$RA@zeJ(_;S*NCy`yCh(z=Uh^X&SkRmSow%UHeMg7m`^lyZqfIwx}N^hf0=lc;*t$1+#ge~RwKD9kBhBWZ9s6mCq;X##?MqE zcee7An$f{`wqGJYsVYd>g-fHNs&wSj92Q-}#Hx6b`!jONd3F6vX?V;NO(C;O+rwSIdQsMQM_>zOLs_`RhMqHk5$C3;*J zLu;$NRV?tV5Z_mO5wWyLp}tye4N(BL;+&P=N-qKjBfRl1Wo`U34VKFB(l%!<8gnyicbMX<1}nKDMUUm9c^LRVG1m2&OH>T2vj++kZwL|oW^ z@wJL>rDw3N(kk(KNr_N_j#in=#!!uh4U)(ZOkX~MV84%p{>YwdN{ZFvvxVC_DqPCDw#QH^u$mAf4$LkV`bNP1Ol zXIE2kvU4-v$G%b1$g3ib+San0yoKy%rGKdQQ!BXkE>`x6UCjE*&IxJ3kxYW)q;g2; z7V*5;DO>8dNJ7a}&M!N_9x8qrI<1<(ZL!S{sJRTuRWN^eS`k|&{V?m3EUrM2Yy zs8O0#;82rK8m$PJ}%qW4QpAtnD6V+@O#`9%aZ-=6z>AF z?B@a(31{$AF%^_l=UKj7v2o zILEH=u2nDM?1cq%dW4^gEq&r{uI$JRE8gyYt$NIHj(EOQe$xBUv7D=?Iu!WIb=o&Q z;sg`xS>|^T4d{m@P5ku)+jAO8*hO|VzJ5r=<4&;ms+F55>D% zl)MQJ5*JJN%c4AIgbU6leluMqVk^aQtynsum-nG>g|HEyLi=NL6^9|=e)wK)0c30!7N04+hZB=;n8v4C!zw8U$+u#GwAiM=R zpM4zAD1VA<&)o6gQj3U2)Yt4mx!D_1Ww`Usa}$;V1rn@TL52+%H^3?zr?Mx-O&f zY!Es}i9$P}rqIl=BJd(ug5ytRT;L!ev4d?UKCm*iF75v~e$NPFDt z_U4Lf6-)U8)M;6K)DE^fEysteZh1EN=L(Is zeUA<1^L*KrwcInNEjzG68}1SH9a|cMi#^yjfluQ`N?SZr`S+D8V&mw_+%M5-q2}y$ zx-?cVoaR4cHYD^H3&ep;Ohtw8l6%89NYXLe#DVk|RpPmy>4yBFm`k#Jem&i!Vx{0k zE;hKc;yJECkjIWzxWLpFUUTo`tie813+`V08@|ljM0gV85DtY_(4Qu3WYd@f!NQmT z7e&+jsn{d3p6qo-sPLJ5X7DK8zvB0@*7Qb3nHVKI&ex=>RJzJVhSqZvV>85`=*RS@ zm3|YRGydSp1Y9~291*-1e_4zW$M`>~)QFoY)}y*q?!$KAR|m&ej1%hdN%V{gh1lxg zUfx(~MsP2+k^eDCDMkj)^Rp66+ynj)HY0kM?61HO*^5d$F^RR&DM??3;>8VAUd85^ z*I&Sq(Hq4E;&k7(#CKu?W?yJ&v?JsS&gQh0v$>@V5h^2BVp*^<5d(|4neLt|hj^y-Ap<=LJ<@7+pQm zA_RiZsqRtTM3=jfFjs##^q03b`;2HD>KoL1KT#%Q7&YDBIqG*Nks8XZiK>8Y@%_p~ z>wXn3)2;o#=&sSDz2^mw?sM*j_bK~LdJ=E@qsm(4ftuU3qLP% zmFxw*R^EsBT`+=v(Q$n<>^8U6S53P^xs5vPFIJ|D@7>+#I=V!BFnilGQu7oW6sSV| zr8r2(1=jn&Qzzl?f=j$7m5sTv-gIhM#2o&ZCy#BU(X$qR)!@*G+kyFk*7W!48DN{& zL@m$;c%5tv_X9S8kvyOI=E^1oZuz{voT`)UKeLVHc;!SYkv=Z`P<4=d7MCLQG*0(- z35>wZNxMC5ge2vbq}AS4p^BOn6)$_g3{Do_8yPX(q6oy3A9iC)bvkiJcB>9tFV%InpyxF}&R z-m&@u#~%JSmA=|}?>gCCepS+J|2?5rFjVCL-G<-Hv`*gPdJ{S(o=-aGYoqXmic=ny zUE)$hym6s3SNKiQqcZP#2s`KgVB8oKxmlqal`YgBfy94L$?;AVH-`9X7GF+i2vb;f zE_F9}SJ}LB`@mYEU8uX!7MR5TuBcw=jWdF?@z*PRsYz06VQ)%jcPsH3cRqQ7L*(v= zH!D7KbNod4QCJ_nFM8{ zif`OivAx1yRgSnS2fJgj)mBxb*mxDwCpkmB!ur@o#-7rr!u8;$sua7Gjo@lk=a?@A zBg<7=1EW0GSx2=;vRJVl->t@pPg3A_0@brLg+fjSF0&Kl{)f!s-KZs zgenN5sz-6>_zd2d@}9db&f|MjJ;1&T<#AtCsUVJ&)XdQ2T`<{qg4&ikTgVlcu*XwI z2`@1fQ&OW3|ATmw9b2QF*gMpdEvV*|eaEHq?Ngp|KS&`xX`ZTChbxfX2;$X_ghc)l zzp#3p(6vx|_CU2_ex#VhtgY5pzESv@@m76AD#^(Wh(9v1b`ClgQkhDWVrYYQcT8)OZ-CN|6SrG6dN2^;A=5m|>Z zDjvGtMg9q+f=#@C8dljRh>3xl`YHAivJ_AMM0;7bWTiGmO>v~k`*{9H+~eCSMFjdr zQo%E@CZJ7%!=1pJnbj2{-2G%ngAXHnIo}6=XJ$qvdb@(!_`SH_z1I}$eH-Fv80Be5 zO-y_hm?SXNcX3(4XELX|PULgegMH`Q6g!1U6$8E>V{Zq#E6wg=Z5JQLjrBK=yAWu= z_vgjvt)7Q`BGoE>qWd?d8n>0)2>kGbwCVD1Nx#V1f-VQsk{Q5M%c)d|PT z*vHO2{BZcDxbMmqPk9Haecm4YX!qw)Rf8UOqW{N4#?=dt@qHWdNy$#3m#bgQ2KOOh zF4r>Vvb~B_Kd>>fv!j?>Kqp4t_7~7?nNj*}u1?&fz---gpIg+s)fH}(8s$CxSBTlp z6iMb(MICa5#Gt<uejU9O1=d>=&3GN|SOp)t`E;wc~xfcB)o{OOCk;=-YChnC#~Q)79gpN6tym54kOM z@SLRQYuXS4%NmMqb)@>Xr@nYXw?oswbu?5*6HSEdm1Nb3eq=>ACvU2ki94JP=%0y! z>RN7>e}t+DM%c~=*Wx#cDYltnP1Qk#(y^USA^y;&I;vqW)x2_OnH1OwYiVk_CSccz z4R{;(N^Y&@H!Qs@KX6~UT6$fwMCgKVlHagbl3J=r{ID&VY9L=i{Ao*NzQKov9{S|| z{Te&gDR7oLt9v6q;;ZIutitiO?pnTT%AJZh-vZCi>U&r>dlg=znjs~6JMizc^W+;m zlR^izouqSRiR@hBv<54y96YI95HZSI>f5D>4;?ORVmFEWQlJMFOO=g`puWZjn}ut_m@Pl+vSUuypQpJ zp&y|5#W{_+NOX{Dl=Tr6L_@qL)!!E_-zK{O<6tS8@#=5gXIQ(svwV-Mj~Ex4CT?&| z<>Ml55RKiBuxRbq>IdEn!L{=11>aNas14ky!iB+J-Y z6Z(6T3yU1rDT2z+8}F@6-(hbRwV@gYYDjbQ*RhBBwSMkRqI0h2lz-H#^<^FX@j|`Q z+Uy?xgwUPhEWg%OIn?~!diyEiF!lDm$>S4q1H1DZ@e7&d?4Z|6xJU5KH~IBcYL57r zTJ*Y%8s@7_PtH?17t&v0J@O6&%jns`)o<&$LY~@8wddcV-ds@oa=yhvEYp$=GSm-ypY_{f*P@t^KOR zy-diUzsfsqPhtjemXhm^Gc50!l~?S^5EH0Y`7B@RUFGpT!{`kDZIFF()7y?R2Clyu zShmbDk^ee(2$kzpI#uuXI94(q?~a!#zDCZ8-l&50&cS>uZprIoHXHMOVCdUx^kS-m zH|j;SJ;EpVPRolC_6586w>|&erlIEqp5+z$@_e&gjq(RDJzZv(t!Nz;8{F;Q$j5U< z#dW17*c|qOeGV7GYEtVQU*c3~Hru_pK7Kz`iJ4`~QOek{biJb8(vrY#f8%17S;qb9 z|HA&BKhG`_mKC+-e-B*_9V>YvMSG4>qwL*7?S!|o0@rzEl7ApQwX`2~RX&5RUREeh zr)^%Z?Q$?Kw46WTJRSHNTjk4h_Ti6<%K|-|qh-Hwc8LF@Yyei9KJ7diq}atw!?NxH zoou{!nbV406Z-O{rP+#KJTBT$)P?zm>KZIAz9%*d4HbvkPOvfZll&jHERpo}5RZ9A zV_D9&>~q(AsHye-2Zbkv9^y{lsC$rzgw4NB#%v4`kcVE7}NlsWEMZUi z+SndrtZ;)r>FTP9;uEp>lBHaxZ+YmseF?Y5-;%rIKCR54Rr0@FQm98@BbMWo@wr^S zXO?TKq7`>DWO7uJH}{QUlWZ3DjBmLw)!v05Jd^1mPF@iUvnz+352S^`ZmxaK+`s{P zk1(oqvDk-KdKS2PGkwG#{W?!-ptFBOS(+mt1?iPO!Zk!npnUwB!pckvui+-xwlk-k zqr5YqX4VAGOBH<@@m<*u{F3OUh8_j2DMqJ^K4lva7)}n-tSqa*YorC*+3wEtcGZo@ zy|55$T|~#27G=N7vLYUl&cdI3w=~<-BTEl>vUObuW9d_2Sj2UM#@3ZRp;)cIQ2HwH zr+STMM9~QUIgQrP%)iG!N||F&JC-tMiKj8=-Y?{E-PNc;&H=tFnlep%!9LeKO}u7L zVF&k38DnT~f9k&^%`#-V=eTz(?`u-Mql4$M`;q(YHurX-Kt1jKINxdgWSzkUR=4q` z(N}y6*^|nYxESXU-&K5+{+H5F;Ad6CX#UNZvNx*dx~8^QE}3GGZm>qN!udQ}0QsOXe><{qY`gb~E|=6xv#7Wp|8-Q~gxS8wAto{_>W!0A`gMWGsxF+~Z5U{{ z=KacttB+}4+k4ZZx{m4-8!qditQ#@WahR*9=z#aN*N|)p6XOrqvIFbz*|-#3#`lSh zPz+)>Gw-8UOSyCp--1ZL)SE7#kHidBI0Y?Ti|ni3<$p!Ljqa$`v82#HL9b49zwybn z6Y&SW&XhXxKK7+Q-?>rqQu%Y}E?*^Tj(#b9(tTT>hNrNZlo&l)z6<(BDY2ckt?A$B zg$9de5Y^SM*RLU}dXyf!PAjYKOZILtbit2N)#RJwhY}Z#S9rCzbL1SnJ7eaeFGH|k7`-}9&bhUzicz11c- z$VJpQw2M3}W?OHdvE}zzyu`ZxJD{U%1uU@1n3Z8I&hh=G7vkx3?h)z*0@n2lu zU|E_cl*w~RGc0zlw52GhUL5&-=tp~J<$`F5liY)&yDJ(|W1OYL7Q=kzlqZ|q9+A!U zwGWfKqmOf+IIgL3W52<^F4#f#inthP?$j%mL|K$~Y!jrpu|rh%ibdrCMJ0TK-Km(M zjN=EpLk7FN0~T5Qy*y2|9a~w3>88mN1&95WdZTuas*m3j+cS1l=!iX1JI~OH9qzm> zZxZ>L(8<{f8>PJ`RB)2mvDnY$eLZJ%%VIAR4{cAhI}HnnL9S(nd%C$qm6AM#KjxH5 z>ujpKuiLJzM{gqy(HrDfOM>#{6o|93ZS5T{MdFwUR zqZ(^o6b#01$G29@bheD?oVZgsRM<7LU(Bn}Ge=i!kLH+=SW1xlbcYq)i-ybDh+#^t zH-;>WY^WaYt7%AAPt|-wttK<^C5oEy!Aq%=I!p9Hc>$ZRec*LR z`V@)&t!49d$x01%#o1OfOf#MC;GSlX)YSr=T&y}nvip8>+=!SUEfpquN|o&tZ@k~S zYDa&i96`&=TIzNY&)K7nhWakjMy{-QUepf}O_{!B$76KL&HQIBy=H*$GxwEmx#5WX zd|AMCUE{{jcsh70Xl?9k`m3_1WIOx~%pgX__E8Al*$%fRQCJk*UiL=0T{hRVx^%nd zxY8Za+EZg`B8{F^=2uTA4*9p(t3+i=KL)DUE)c1Be`>w6P=6Ay7wSlxA`YvjxK}tA z#SG?mdW%cj8@elB!8T||v^x9^|E*&Lc`!m740=>iZDjH6DUVMtU`zZ*z3SMF*ko^n z>#i;$^ewf+d(e=?Q@-bpsu6Q!BbcVXo$5?An6R+qV9{wDO<@^ z?E~qEKgD@Q-&C0E8f3esDH4ykGihGiNIuMcqwGs%L*jZAnh zGrATrD=PKEHrw`wZYR7E=9eS}Z^u8BN}LLAdu&~H1=E76o6sV(%a_P26O~MzlGXU# zxcSl>TN;rYdq?O~)|;LglgH%ySJ1_AINQWM2UExHp|`t0eJybdHO1LaTp6=dUePt5 z%}?AC3V8M6vV^nDM9)>xRdFb@%ke9}GWvI_zWqMGFES(4#&a61(67W}ZHt-0Xcjk= zwGyi9llev^ZT#D#ive9>fn; z^l?wd=jp}@9UaZsNPP!+Mduy5Zv13wYRMdis#p_hC{17y%)H#P)g@f|Biw4o%wU(8 zdGdVEh@e}WCdHPM3tZ$@H&VOd;3u0HlK9b{ z_C+qm3t=rg#_^L-(|=A(aNd6=)31U86I70vG*@@b*nd_>8Q>TLc~dS780>>aR#T3@t7J|omUw9c_cb%tm7A!TOy zN$jb2oO`^yo393ctDsq^1KWVRSbR%P@K%0V$#T_Z(dM0B_(FL~`hj^_6szjUj`de5 z-4LpWdtv@ETYin%z%I9q5n8ZTS*z0Np&-3Xm|W}*C1mwXn=@IMaX z4v%6qRV8rSvz${1bA>l0OBFqt8O$@s9M%7#=qwnVINL5fE^*IhU2rY#6qn+Q6nB>* z#ohJA-L*(@Deh%)r|7bp-MD9x@tH5*Psm7~d+u}2buO|inOBZI@Kk9g#6OrlrK7;ByoufH9tn|&J?LL$mw^yHkom9dsn~~J5}a6Kg*S24Vzo+(!GqDI zL2Jo!AaC;W6jpqmQ%1koLj}zCreyfj@Q3knf%;{C5~rnKV-3i)`g6ov_XKpcN+3FVH=rWf+teeKFGa12q)e3f!x`G&1<1J5KGHEZ-4(eH47O&`SxS(1h+Z&?P>qt)M4R(18rSg}Yo z$MA~E0m8Ocx*DOW(2C?fs$T*_6@!R4QbE;f}KrUs6v3-vnfQ`Zu3nZA=Q68w&} z(>&Bc(N<_x<7@J@zXqnzWvY78Ui^Y_I~HK?gMVs5mS$9%AwjKBkM*@zxYVCaKYcW6 zNX{nXe5fs6MYYZ`{mXTPrpZ44@Hh)B90xBAdN$`{$9~P!A|Pa zE+Z|X=~#;Mka&o^qWk7d=Hpn7`igTu*Bq*5`08#Mo1y5Z-VxYEr)zwgwDK9!v_v!4 zJkM#~$WBMX?i+Ef*qCVM;u9{R56V^k*<4-j5Ly3!eiZxbV&Ub-Q*1mb73oa zG%`0VN=V|amT41!!piU;Xld=dIYgmw>mHvG~@Hh|4{>DrQ#d? z-RN`vH1b^I5BTI_MLQGd+{9f3Kj=?|*K=dhB$YZ;j@&|)>NZh7(STy1!dHGwJP~)G zyk}hOK`cPF3O%Ii@JqB(@HVxX>p*%!y#uY|%dq|I9Zw`wgjHiN`R>G5V&ABp&Kg~Qt3u`9lt>=@0{U{2s$+h{3%EX#r->{Ft$^Us)gb#@!-9MowVJ8*V{T93uSk5*zyz;LM zT@?qI@_dKFdBNL+DYQDcHS|%jJEn|5^a0g^@c)=+QM0}ZT|l*#dZSn*EqFS%QFkT* ztw{=Vh~F-o}>0k9~_nwW;pdflwv>8TS+WD>}}TP`dGiV>qyl?Lds7 z7rQP1J@6^9690$T8?>K)hJOORTl+W~_WhBNUxC=h_(1OivU$Mo!D5Rw>Ga0nb?Lsc z2X)&&gr7uqj$QMP7awWuQQF;|GiZPq>h%Si8SyCOxf3iVi(_s4O=5(~9zWyG_x`J# z=&A2?N4pcadv?$nAhn@zO;3jCs& z0K8;xc?T<|#rD%*96L!pe<(tP)5(0Mee8*=DcM_I6mJpTrOah#g*pVcDp=uwG$R-y z$>4eJmIGA&$2_KB-w)twv}WX*_X74hev|4LxUCq(USZAzzM;-wUG7Q5tUgThkuSkJ z=o9LcRKZKZ1Nph^QeT+h`9t)0PoZ*^_(ZxH9;v<*ofqrs&Lkz;PY-sLB<|#%*!JKt zNyG0JOFcaSrGHag8*YJrFNW7z2$`6ji|c7Mr@87RsPSL1R0%!ppU*nNcKlm zNT>$hBJi&&Js6cwyH0Cvv76CcXC}D`oB|#!`GI;8|Gv3J%asqf&A{)TiFlvzW~h1j zE_6pCmjXM6ka==7a);}qexUFMX;rpe`L`Gn=azL;LhM#Xhx* zZm4YQT%&)I@cK>nb<~cR)1?}Puh4VUWwN>B3)zibfJPj%(U|9d&?;v~=%wpA^uN;8 z&{C(JXj2M+6MSn?@W*8QV)VJ9$dRLMpSVZu{##8Hc%LD!{u_Z>eUpKmU+RIUee30G zMKiFUY;Bw^&c_ajdE}9wpW$&-KV@0rCv>v=6+Ym*yv~*Cg5+p5SUiKIZ-EY4*GL8&9?}tMHQMCDS``z5XP6%WKrD!%w1P zgd9{G-WY*^Y=t^x3m<~A@fN`@u`%*!cu@Fq@Qd^f|1JWl&qP*;2NhwbJ-$g0kl7(RV1rJPT|IB9U*rtXc0-`#v>nnhhi7_%h2!s zFqKb}n&IAiu{`Oas(pBK><+VBmG0Rc-v(BJ;{M)r2g<54d3VL~_|9tCe?3|g@G4*W zr_r70fTE{oWPB1+m+b8BMdu|F7%RhM>`-hdzBqV0u}vr>=Y~Y8EM65W4NZtCVgy>l z^D?rE+pTbW%GfT^tLXncx%7PrSEl)HQv~c(w{`zZU*hUv?VXKd8<;`Faqm;=CS3{D z2DgUa(hU;ZvuDgJ5me_U6pvGK2k5Pj4j$!?g71S#p^SJFxnj6ptYPS^qJ8jaqB3@v z^0RXUbC<4&)pZ#q50yoP%Z>=MqS?qFB|U&0QWsTAPamxzZ!-amjb6l6)CmU)}|3 zo9I1e%btmUg1N|5dw1Xv@UP-j`5`_R6qVy$^SB@IVq$#RM6O)=1MObeMyg7^Ra?q? zNjXqH@yCyRushXXgO_#zHp;z;xuw4)a!3c1uS$E1oYW38I);mPpyk-O(g&hWZiJ0> zY@?6KHOLvx!_p|E1m9IKT8c7VmCwpk*e~J}vQK#frZ-)8HetCGLutCC0E z(C!m`6hpQtJpn|SLb!_S2XGzS1a~QE4EE(8qMe;H!KGpq%vRQ#`A0YjHY#l-c_b7+ zSGW^Y3$2h;yFpH&*QpMdPvBg16Gi9p(Lgk&RjepnB>gX%t;s7J$Ul${62IC*$;j zwz%I2!BD5z93RWP;iLXq-jlH{vFHB#zH%`y-Y?XjQULDI26qYnlwK0<8$94qNS%Xw z99z9CJJ#oPM7%qt<58t=b4V0oLEO2Oek0xuXM5j=g7FE$uf7`mS#ehIaIkvlI24PP zI<2t>yw9^R(uw*{9!B?aFcFli9Q@|JOfLo0{vBaFx)$)$W$vTig{UVW1lq^8fX$sd z!+(d)h+6LqUmjH)b9<4{GT%U^p|{+(-}i$<9M!$gePh@sk&d1xVMkkQv|!@?AV^Xs`b!7j%D)6-IElqc`lEfu zG=B4|2&V_>ezsI zVy2ea(xJsJH>6{*@p zsYrRSIhGr`5*or}sRy(3BKNs@>Pf-lfqDMP*trCTYpV1?l^t8_^(K-LTilI9Be+fK zCcYQ`d(voCw*VQvChX8&aPr;|eMI>=+9HZ_O|?G%oxppFQPc_arZz=fxSpLCm?oYl z_rz{6Cz!DIClijn4Ao7%UB|;#W+V0~xPuQC@CO+QCl)hOVBa zlej&GrEXaJ0BnmK^PN;~<=dDG1H4)bepPNNAFQn@_cSc>G}GV2dXv9+U~`sKq@U|d z)9jLd;$GhoO%AhBU)$HhG6hJ{7e+>zw~KkEsUf9pnAp`a&EMWwCJaq&8Ke|<6C2fA z;Upa|-nVuO$i~j_A@%Lh^2CRCo_Z`*Xq*A!R>r+ScR=CSclAxu{0%iqI^i#}J{6ZF zEp^mWh{!ojOMi9!OSniwx+j=;;%}8Pm}H7zxyIi;=ar4Ai>h^=Q_4NCmFVl*Wtu1C z>OaP{wj1JdZF(eG+e{vAx=Y>A1h`ts>gfKY=86-h{^gQwHPl}7$al=(R8}!fcT%P+ z;5g+OZ=#|FePkFPZ>){M_cS+|w!~)WhO)7)mU z%q=sCN8)4ZmE|Uw9~&Jtr`J`~io3!$v+Jk_$33xF#joVc=z4F{q`Jy5bs+LGHKe>O zO=VYR-$p7i^`q^QS0X1v%Z1Mw&0q^ZiMo*$BfoKLLh)o#-3Zvnv`+tm-4I?0cawAB z!Qv6ILW&?C;l@D=ZLN`2{Aj9zr7dEWM#)tT{gtDnqY!BNf!>$rOB!nzOeuegk2Rk# zeB=59o06~L_n5XkV7jP$4t$R9v09aL!TVx=YX!BC@W+HKx0TI=*WwoaMD0)>r6Wnd zs+Q8{Y0{F9KSKoJVq(v~1ol#6lUX8F^hft4twFEQ`-3~I_3*mXSGk#OFwh_Tm42OE zoA@s`TPN4@w@)9Q@I2OFs#qQYxso=#&)SpN#hl|u zWOO8&QTOBB%(pNFSjZNpjD@bm^xQAm7uA-aM5Ee4%6)u+vAO=Tw1~;pY)1EseL~Ch zTQ%JvxBr4}izb2(L`5TN06hWCDHM^H=3&w9GhagNA~0YX7Vj-6edYU zPqlngbrhTN%`Np6pWtqEfze1_W6HIlzDSzH zwNt)8c5qX`DdsPvSY9b*~Tk#!JaXTnouhFuOXMgioXYM1H(u}9RR){ch$YoTG%B> zQs?6PfT8|-s+I}2L<(3@J5q5=nh7`3O;#@=c2b09paw+4+z0(O%}Kr{8`W3Ud=wvv zdPNN~pO_2GH`!I0z`4k2T?0)X6pA0PMbx*2{_*LS3)((H7e+KM&=-I}bf;;FY8w`f z_S8=!=OJm)>G~Js3}QB&W9Vi)E#INO>8F~iK>vhtEU;=hH-)NZ-e3|1i2~#nB{Eo5 z@-hX*{iT`GTj^NYP&gTs;vUCvP5_niqVhT50ol&=aQS2uA+o&Lb8Y>Zzmb3TUWlr1oNBTbg0`VHoYXEZ~;2iq&)r z;feLIx>;i4>TS(c&7i4x#0(n4Wix>iQ%Id<&x0D6zZlcPD(;t*7~Vc|lfRZ?C+h{S ziRZ1mb$)lY6xEN`eD>uDozpg|lBoXDWa|LJ5v|QOOzL6kMW@rQOSyoxkH*MN;l?C|txJMK`6J02Rj=sgLW${s>3r<6@X*%8pb3_N1Cvi_ zHbxc#-OP9K?y*{mhK3cy;$Q*)uX(L1J#qn9YZ|6^GmW?;vqI5<_X1l|V&tY+OR!K+ z>8??Wq{J$H%v-C{>Q)9KW9wl%<*x^lJQFQgicdM}O#A z(iWZ4JB^GQP8!Uies~4rFwGTjLu7wu9ZmH>UwNUapCuYP56sn`P_Lqz5ZA3+)gR(V zfeM*Fl*N$+!qAkh+R4m(=2J>%L%rZO0WyKQJmy!aagvH?K--YVDTwx~y|v;=N;UPB zax?TQIZHV{)Dz7$JBTjPNyvNtU;3iq9sfxBFLqS7DSnJJp*z%1r3_^@cgggpyaL1d z8|Fc=7Ru|9Y}@MuMdoU3ziAZT78yXFwM5w=y<-&C)I8-Tl+V@c1D`>-NLHZHbOGLu)s8+ke8gvHcly2NHV}i1kqeAZ!KFY;*=byc)`zFTe_0O2Zt+{7O_q*G zO?UxYtm_tCCu2}q(kyYJvO&;p-7ZYg^$4EO<|^9ruS3N^BUPd74^%}pWH;b9=Vhch zykFZod=fvZx&ov`AK`ITGFds{Oj)2>g%0;Lh0kLr$i9*Gn%bIji1y#XzTt&P8g)!L zMSDi75&TGOB>IWP{-5X8Y?Z zok#`lvL^)^gEbPouGQ#x#K`~Sv&jxTUC!{{KpsJR6iVN!gwM2ss z$q(_9Av-=@u`#CgN6@FZidzsliLO)?fGrby_{7NpO$}Eg-;tFdyXyw7LmpyB5}Ir_ zLd(m%99WD!7Q@~R*jlU?(JVYO(Lyp8ITJWZlq5<>9tNkYs^S~THc=*x1MSVN~r3aFs2gFLOvil;6 zBZt&C`~iFok*j#+If9j78}t(cAJy*^-_<<>x78<=d8!lPr;5eeC+7Lc2jER4CoK)> z1?@@XY@P!zr6Iu==DtD%7$16@aT|0av1l8!AK8Kqj?PT#EH_Z4#+9k_;9N`<*V#_M zUC7Sy>xs&yYYY5|Vf2&KchUgpNmQBo2)IMOpvK!m(j4LoH(vi07KlO8 z2g3{SF!m=1rBsJ<;WJU46+>PE1DF{})8Jdgguq6t0>~vo;X1bO@C0O4=$kE&pzK$V zZqeg#9k^>SZp|j|qoXJ}c@J;_9Ls#x7Qx$8zw^z^C|X~&Bfi311K*4{XXctNLmP>0 zv4HIcHWXr+Yv!)fnvR4w0M`6VM&~80v3sK@25V zM?>Zb(qKX(xvkq3T}U9bCbc2{g8)PA%wNDmiXeN-vOxT-y2G*N?Pw3A3A5MwBavlY zMtPJc-45+J&tP?7AfPSquC&ewjZR$>>z&HB>{^1>;{3G%uH9Z(k`W(7vxWUCU0N+bpk^k?Um(Hn1k`hy&c%GY= zg!iipeQnJhW7Ul@cRYy>-pDvo);MEF`BIz3)hMN!2eKXu7Tcb?4<|zzE{uO8?UVnE#7?%eWS?Sv&b^XMp~bx>51pGyZc9O={{Jk-Q^3Ogk(5ck+1uf2x|H z#;KtFfBJ$DlUy3RW835WVI9w0PF?I7Y|N#WreBW=$tmS6tPIDc^m7eT--wJ$>0ibt zH>8@S^eop{8b!Nj^z#feGwj;rK6Kdlh^mz}Kh#)1A~dI>iuj@7tdN? zS2xpEZym$H@*}D{-W!Inw?y;I|I@1Xbs>vFoeXzE$5bi4zZ0kaC(T+Pq0cLQY{(Ba zFdr|qS{H;rCMVH4qr<UfG*rF&3OMy?6hfvDf8IHO2BOvSo{G zcYTvmYlKG{)$uLaP5m`3O!Q$!jbQuq-yILN*SsF$sPmESE|enw0=COcf$qy@{*CPt z@KM+<&&&A#e&4zBm((9}s_Hb%nR3o?|)SFR@;#gMA{t#64O2q(W(-bj7kC=q_JGx~EdI0SO5A zQpX5)(TdW%^eIpcxrSJ3lEm9cS5%o*0azx-gu>(%@qX|ZY+C9X?gp2p+@E%U?#xvt z{I)Cb9w7idGhE|Iw3=eGJ|ECx?)Aq8MT zT6=L-f~h_u>s$OBOn{K}I5L&nMjWy&5KFigie$q)Hih^d3z#PW?}bie+-AYfabCrZTaW+06f&(guGb7qg3! zhbwmrow=)N70^dg2ERAG5qd>_#&GGg5JKoIzDoZM!-Ya_RmL*Z&oq~pWa7we@g>{b z3SztIJ8@sucH}a1LHH~48o4u0aWic-h+pODe6jT?W&xrioALlUDV|{tTWgcwg^Kdp zjFz~Q39>a(lF+VzT6kxBffkEHIS|+rOA4peC zRiR^JW$Xj*RLCDo!Vl z&i0{OxlFcN>M}(oE=QQ1@>V%4;cwJiYTy$jHI$N;qN*njkAF*@i&bSdf#YreLd%%> zavsx2W1~BZ%|es0t8yK*W9T$)XJ3f>A`i%NVH!BZe~B!CDQIs*L73wWgi7Io>V@EU zK#E$_|6_~!HQ^56CRRq@MnSYc-x0$DzoU(X20&)`K3pR)?U&G{WIb*ZvMT&Lc!RnI zEb;C}OXN$?a^E7Ll^92A#u}nC;vPsvm%=31L1E-2W!1O}OnhH!i}-Kioq!CqV+_zd z>M0nNn`x@iR(zAxN_jcnSu;mW)K^D_$=kU&IW<@rtBHb&I-Xd ze=o9voFGYZQ?S;t+UTc5FHecU5eF$3kq12>d+~2o6Qye8fcQ+{kC=*>8(&0Rp-v~# zqd_8u?NjZhL+TuStn!$UPn=|n$l0-}NKJ6F?n%505rG$LrpG_1F3L;M1F( zowupxD~6IkB2j)Re?V9yZquD0yvQqfxAr8w0=me4#0L@Ei6Y-?SO?$0Q2vrqi}*Ej zr76bRavCo1e;Ar@bL6_fZ`!KRG2$eo(vJhJ=xwpK5rWnv*qpy*xdCK*W7jM9(8hPX-wo<5|m>^Hp)=y9qR0%dmYw$PK?}~p> z0vxA%!B#|@ORwTTh~c`oN}4|#uVtCdKjyxw7aJ={&A2A~9%Fm)E432lHT9%A^aj~r zxQ0aN_Iy447NR0`QCh5>3_KF7pwe;~-65W!4w$mySL7B*A9Dw0Inza0WXJ@jf?Jqc zrjhs(_9nQ+z=exFVl8KzDKt}do>5SvGB;m#(yTXUuwYT zB<<#ZaO2{|`roBPiN>IZNmIdf!i5AqtvZp$|Bp=2O4#eHgzq)2SFJ{Ua$|*4buH$H zH|lOl1<|GAI88HIfSN;pm{&ufI2rA49uHhsq{?lzCb=ShPju_|(Ul}6cT($?Z^n+q z>uVDTP4*ZC8@c!vX`k%WH%TyD%+OVR4edZ~oLp6(iD`f$X@}_u2g}CTfJ6c<7&}V_ z)C1KMpbltj{Jq8{hZ3I1y}%k|pt6Nh24@f|>>mXN)`M-aU7EGJEaok`Q@up_H?I)J zo0FB(!3WR|^}ouI*dU=q-CR$xxxzu?3a%H_j@)jlN%SI?!YxR@p&bJNLCp!eSHdfU zT3(|Q6nCZe8byMC+Xp*q8c&o$IrLg%L*lODf9xnjW#xH#k<`w#6FC7jMc=3@kj{9B zmbF9RBu0lmFm5FFsyd5p6!nt^l~muv~w+^a{*@rMBxO zqtsu(9_pn(^Hf#1p!T67QA`TQ%xm)(Dge=Gdgz#KswQ`~-YUL}`J=ORi;4$93b{(E z**;v=ko{=&m2?IVa*J%2%lGKs^S7*ropXrmanK;;dlS#x!Q_qhn%Hh8U|r-aSDb-5 z>SsIpVx!rmNxO=MsU9(@N!tpy>8B>X;b#_3#kNVUllB(W#5PN6^Qz)XP%Bxoefa*I z{LVi}d0boxHbCi?OXX?U&v1L)i66ss=jjXjsJ#`GN7)R$3TefB|02z%5-Xk!)Yaq` zlH^mNM+#V^C6-6KrAL0eBR+}^bcagj8iuoLEMn;Z7o$%jP(wB``kKkMN z+n=jQV`Pc`&gcD#D~Z(1)$al2$B@wg7r#`#jqf(!{&G&$Hpc0uf5X*Ol(O#sMybj; z(VX;SIiaD9nv;cv$QE(0=3C(g@Mv^^dEzHdQS85MdQfsyF*(#fWx~(H*b)v;{Ju*q-lnM#d@G4A5Y~AH0Wumh56&RSK9upWO$Ho z!6tB9l0^q=913d-)<%&)rD>4jKtYoVSIJ)G+Xc z>p2Z^YebLTDYxx;PU7}aC>_Tp72s{YqOfuZ4@u#lmgW4YoO2$vHvT>T38z_ zYqLFRC9}S)3zuF7#$OkZOnr9=y`#J%pYOiPt|_U;^cHV0ogKBrMv<#xHRoZ@ER=~S zOW$zSBFDk^&Og~lzVujL!9=Q&ZzWx^s11A1|1z@s`|pvH?j`Y#-|X~scYn#8f0MtS zVAotPoFVLHay_(SJJv-+oeQ9tI-6fx>LLacHGmHV(~vbvhmhjgsX&MwaC+$`Xbijt zC@*^kFGI(|V@tXa0o7aBT?Q#RWCok!xkbd_uVCl0Cipb$DPVGp#GXU>@>cstxC)pj z=}IrDf2yj;qf2ffd5A1oOZF1w7|snUd#356SjM&WOu?3;+r(pzUzG02 z3A$*njrV}_g=EK0A{o5NFD$5tJ;CquOG-GT9h}QoE!n5Mp}xVtFI$RrMQ6u2#ECW@ovR&l6(I*|+Aqet60 zs0mhs(K=5-4zyN0>$Q@6xWx~6@j!a`2xiJ~&XrzjP7 ze5KI=ia&XxI9;PrG-QW(Dq(rp4CHQw)Y7&<58!Rq!ccegiF_ujgMSvFA>XEt3or>P z$K5QWtFqQCT(8)*JPCgT9I7zRu@&x(_sQU#e<1zHiRrt1>BIvjnq_l6gPuS=a$0$o zDz`EAN}YUr(Np5yjBuG*RZ3OP+EO-^Gy>-;4Dhn*qp{6d4eSDuDs0Ia<3Eo=@ds%a zJ$;}Pz{*PV$|k7yiS@Hz2ksEfg?NS6{_0>Uv!-&cXPE-$k5~Ipx>cbU&eZ5$wj9mn z_f=v`cPjTXuhR~CL3n@6ozc|$h3Eim%I@jhj%!43N@Y(m(m*&+b-U*jybc(dzQBPf zW-=GDUwQ8%yQR^UF8dN{7udA2!qrH-nn}w@b_CQtq(xa1195dn{%z*3ejK^S?WugC zq`pFl9jmm(?!xl;ubCYkEybsDm5h<4<-j62TxDp%CS;0ytePS?E3wykUge5+k9?NT zufEvPjhq^ z9r!~CWY;PBl_#A3d>hoYk`B0uyeT&Dh9~0eIFBIFicmFlL{Qamnw80n+I(GA6ULaM1VQp@oa>~9gQ~OhH zTO5{pm@L}tpCcJj(GOqty_0a;@K|}nzB|EtJVECEI0zgvSdcOKZ;^S{O-k(3L-~5v zQq#8b2GCo@V8T*F%N3L~QvT@_Uu2x8++9?I*sKpB;P)b^MDs>I{WD3Jqk1h3vA1A` zDW;-HWnS5@n@&t~3G7$(Qus|V#XrJX^nLz+_;03c@V`$th544*Sihgg;!ku3m3y2W zV6XZaGNin5?1p*{@X20{QRzA8g~!eRqdy6BC|e?y<4d5fg^g%Lvl;xwS&4J06U^wc z88l{u6h`|;`L5=USjCkJTTSQjG46}-9?KVHucBLMQYxssS7e4;TF&C@zwBgYTKX#P z7v&2xG#sWRm;_EtX`-6tyux)fQRt+Cvr((=4c62Zld5a)34hxOEVh$MYQ0-k~LJ<|}Cr?>`kPN$PyU)~eGbd{3w3i2e&9;8L#T;PUk zgE->Hb^K(uLO&ue)AK2_J+g-JQsvgD_MIigDCFdXxG@axJ6x{>ZxkP$be(B8?+G3;)V z-+vAIq}-TPDY#2+u9=#2-P4(IK;v|G{S71p|7Kq4X^omtOyAYhj-COi3~F~dI~Pth zE-$?$4UrZbdY9qA7^u3ogQo}681a~wC(hC~uvvG(LGpdUTQ;?CA-olF*$#$lfwz^{ zlWg9qLVAKd;IdZ|N6M2-GaW4w{?EbYn~r@#>%={f9A~*@axk^Gvz~BCf(?ruuZ4EZ zDC2jpL^l;$>hs(+fX;@<9@OH3^d^P z$Q6uI@C^D^+uqPFab0GscBR>!mxQ+X5ZibABKZrn&itqM4vhe{lRDXdm2pY57=!J= z`LZGDSJ!h1Vdm+oUJ*X=4k&h0`g2q)Pr{;!*XVx&aBw ziBtJe`^o2F{)=B?GSu6Wwnif8F4BdKwRZ9p#(velHDO#1cbeR% zxkFD2-c@xn&lOhq_oK^FPlUN3p!?N2P1Hq~6Z5Rsqcg*=G_%ZyJ%`!r%Gs%0L>=j_ zyktAzSH)Vw#-uhuUu3)Ck+~(?EhgwMTP=}Kv3m-$>5ov=*jTO7c$B6hu(Ewt4Q6m` zB(X24hvV;W#6Hd+D`n74+NHe;ZzDv@n_;>b-x@T${ z-H|z_4yXPTJt5B4)wZ>YAPJ>?e#*bX@9Y!Io_atUPQOI@n6jgj!(KdU_A+mSm?~ze z4g3|Gjpdq8gZ;!os{UpR6Oq~}Wm9i4Ag)gQjskfC^%#F?JS&!hE7bq#_>eu`TeT?V zK8FXl5>=AxiQl;)niAvdkWE@o=u9VrH8>PLVVNYtK-$)wWn7F5# z6|ENSjYLzsGV|CS#L!eOKA%y^m2I`zTS9?~(OjoGQOCjRwpG#u301W*F63WPy@`m$ zkzhz%f!5mw(@v@l)?QyTj$v`t!3tHVNfC{uQd*I>Ggn<#k|MHrbgz0=&UW@r_+H5z zaF<*n&MG{}T^H*~L%*#QY7y6=0mX|G?Ok`I1BEB#p};ipXK5v153mxvUKExZNE-#P zWV|Txg~Ftw?Q&oEC~&CYAFc~B8-fcsxle)we!{NfKFbrNMWwm&0Z59y{JA`_=Nyoj zKR`GeJjw|_8YQ}=3C>oS21Ox`-}Ln&7(3hHoBroAi!pQrsPQhI*O) zKbuNTK#W~n`h@=#o*f@w+Ez3XOW3U?jS`;t5c8@0oOoEyhB13sJ_ofBs+Q$Qv*do# zu;OjXgkMm&6o2%E~av8@QQSP;eEPEnSaw{27Ck*mv&3_nHaK zc^X@{AXj8jCFlFGjn@(Vge+Gt;V-B}R@?WBAB9=~`(vz-D@EzTPb$6=dYp%fTfv8+ zfpqn+Kg6}z`b4?hx(XZF4;}^bIirc>ak9{u%o)*S|KIS&j1xfIt3^w)EQ(E@r&7g? zzv5fHs8m1a*Z6ezU~+yYl;B63xCU8=@ZG-GQX+;F`CGydQ+|`~g%r@Gs)NMyj)DBb%8<0)(O2q`c~9)?Y=d3Sn8(}? zRHCVjhv04RVRl+}x;)EGLuAF>au@eo!kS!5Ds`Whvs0G9w_U%pw#qZmrXC-JXQVF9_VJ(IzZ4r6m3suLpXI{^O7ESKg5>tM&KoM2i+TZ2_nP`EL*TW**$4`@W! z!8%u|E!6k-#)i~NMk|z064#WiG5bY7Wqu;qADrn;@)WY>F<% zE9{I&J^Z%0pI9Y47XH_=1z6)dht4%L6NiQGE9$4h;CW^;KEw7@um&q(NvTO_vF8NZ zDrpV`Mjx8GSa|kj8K!=$MUW?@J9YDQHRJ(~ca}SPKsxWPZ9T3T$|tz(##Hrn*5OT8 zWGfdE*SxZpRBVvC`PNwrb=ROt9+UBwdImVTd`j9iOOoVtUm^>%ACdFXhv*IK3FKg8 zglUF)AbirFr`%{xRvZpoA*z`LHR{Y)Pc{4SK9T*#s|FBg8ZszARS#90*l~PTB60rE zy#RAq|01E_cjRVrLseVPV`EoSHoA))s++7G2G!Q^oYrCjT=QUwof}kJr&|3SmM_CH=9~2Da`_dIXkpE-vy~FLQ%JtDX#~icIRd>tI-br>yA(T)OS_ohW zMMMQbq$wg6z{WvQP?2Ieaug9oKm-v4=_t}cibNm=l0bUfy|2FJn!V58yEw=59M663 zz5m`n?n<5nvi4eQt}(~>zW05_A>6A>4lZ`WZLg4eYkuE zf3fhXs!~}?E|lWQpO-$(-Y?-Chw3@fV{A|Jk@9cYGp!ZXHMNWBcJJ4ff%41D6V44Y z>#M(JKOC={eyj1Yav2v?xynIe94QsIaj$wI_t~mnTFyM3gpE@9exc&en~JBeB9|rW z8mG-JV&?J(Ozc;>g1*h{YAvfwivP|nF^;L-Mc);c*WT9mmlRgfFPQxYe>wa5?C+|p z($&FV^;NZx@vU^t#I3c>>?QKtQl?a)o8v<1uA0D4r?bt) zb`O1={hpZLXcscuP4l z{amTqc$M#`XEsls`ZM=ha{0`O%|qo=m|at0eH&@YyFFX>+yzHH`)qq*u8gEv&onT5^Q8~e zI=*>Vsnd9+TAh5h@vF%burKGS#>uu)eQMUV&YT`Ef6_Xw{vZ0c8ebfLaD3PJugjOr zyj(uGd{E`&iN9C&G}pF%()>&F#F)E6)gFYvy!)OLa?ldF9f|dy~7J zj{55QJEbGTi%Z3+N2hOf?-{yo@_~_ZH3MY3z|zx!?iCrEc2?? z)r}{yE#!~0C(bC%)sqYL-_Lxgc4lRoJ*RZ3{n4o{&39%W7(ab#fBlyerJ2^udCk_u zSDYhem(&lcUN!Nz#&|t#oH%t)^9K9Z)vwNgc}?d^)$yNK`|DRte?#A)zuOp?xutPU z{p1=o&zbm~ec8-?m2b_S?_bgwZvJ8NcJsOF5mP5st}_0F{WaH?8u}V!CVSKl&PWa` z-7@tV{UiKu^~v!)&QSXK#;>OTY+plOY*n{8_Lcg}rLPQc4DO9~PJedzul}P6ZOx8N zIGx_z#;?Z~p>xfYJ}|VoHSK-2`MaSv?R;dn)RDPfK3>%L<=6w}-)*hFaQsIB!xkF< zHdXT9<~C3DP8=L9DsBusiOT+Y5DX~WywsUM@mOe9_KibKFiEr7!{l+ zrcax=H*tewreB}AEV#ozqyDwoJ8R!z$19&5KHR-BncKQ^=8j;f^}U){`b0?excbDt zQEMi+sJUZiXXDSwJ=II6Z;9TaV(I1Co81G+JNg%9?lK3xZ8{x$EIl=Pesc5l`R-c@ z?%2eqm`@}(>+YD8T$#G{VO=F2iN-N`>!_c-F=vUo$*@p;t|1ZHrG~u zGqZnqc(UGX?A_wjYX3I=E8_|N3VFi)=)wM1#$T*n zM2-kPGInGAB8g#lj9*-Tk>3#=Kl!p=lPR-r>=k3Rd@g_DV zy-&3+(vIVr!>>0_U|taRAN*YX0c9I4ja}LJ8RPN6=nsukl55Cw%< zpvQC9jL$bGp|7nT{G@#n`&Vzx;7d)1W`t*lHtAQO*Lj|w;7fadZEX?@_=&p%D=M(hB^vc2C+m3n+^Ze+zvqd~Fyk^UvO_9Gb{@(VN z+-JCNhn>TRH%?DjeIB$?M{vx?zVc0dsXd_rWew04Vj=ACBm%Ll0Uq%kv z$Lx?_O@6g!t-F(ZC;0wW$$nA$cXH(}x5@E;iVG84tq0}FXxT19zdlQZmv=sE-N=td zSL~Hq412eK>F#xgDnF2h+Y0)s{OQsQ`}VlJFwRa7-{2JKmC`xm*XR!iw+Q$5{n5CZ zU+FKNbDGESeTFta_4?J%_)iRU_ygKc?Re1%=9Ae2jc1lTY2U{03kK$Q+LvZO;@#eV zlEJID#mc-9o0XTjr}T$j%Iq?CFFesZmd{&zdQXc6bAPn2*>7ubHve3(ZRx4L$gg+y z?;j1nD-H+e%zNLzlw0fd4&2}RDgS%(rvn|%?ZS)k^$W(Gh{@a9fYt2PT)S)jUSkbe zW4+Mdh^~;Iau@e`_J@T9DV_f(r=P#c_~yX%#)b0Pfitkk?x24Tb}yQ8KPMgU-81l2 z`wy9w%{ARGI!CFWr+vwO&-ka2L!IG)8hso@=RfH$$v9s(JgxK^FNB!&iAeRAR}{JTSa-#}@sH;D*_SGvA&5W_r`8Hu0d#hZ|=WkA~2Z9-98^`13n1N6?-1i-*Rr-RUf&iaKXGO4?I0~hWA~PR z6TGq09sNghWiYt=fZj72abQAoMkUyGmK^R0c$ zomM(EefH3z(rry^^ov`6S52JazW1i<%_GfK(-%(t#`#0z6O-b^4;r=R*N0D?URV3R zwQ%_0-D&v>_v0hGhP=tWesfgV_vMURys?g{4UECwH~N#= zKa&;dwmtXFdf`jnBg5Yv4WskYlZIZNeTQqMzZ#ua#vq7??7L+$We((@9ejK8!%T1b z?8wWr3)okpj@@zPCi)mZch@JzuTL*!l##)SQ^RM-mj{oio=HEit=;w0v31cULT+gP z=_~DRQr~E?`lDcixpU~)^5$gN|K^T^CQr4$9|?O0O9y%%O{BqV>&;{d-MVXP`jPPa z!XtZ*sjQ}E@{{4~%4>x8_?5eVHPjcrk#5{_L76Zt_wCL8^f!fj`H$@!nduL&iLc*w z#dzqhCl7CVcKSYVNqp_l;iXH^-()BRjC2PP_4S-0FRIS6+zDVsG2^r|N&i zPX!0=`PS_9LQKEB=bY+~=yYEi+d+!SUWd7;oGaELKOX!?i zd+U|mGDC)Ze-S^btljdv%GI>U4DLR4>=({< z@y?C&N?k_QzF_^GdzXY=%ysXMmTh$Bz3Po<-%0U<%(d^mS&>sd+PrmD^P}mKaO>tP z8;`1AphNF;jej#7j~mZrndOtWi#`G z-_XXQTHSKbl@}jyihf=EOYYB0RpYPzq5Shp4l~xc9~Xy~ZmwRCT&naR_8EP(*UMgX z=$d*iyePfd^Ih2AFi)fE@vjKl+&g@@g14YpYN^1;to z=i3*vM<2StI>Z}Gmo7h1Ul)8Md2z)TTPGXC^rS!&6Pj!?-?!U4%>f2^LgVI{`CVLoagZZxA=hE z?1AVjuyEOvB@+CIeEop4>zDX_OzptY>b>C;$=8?D@=$mf^UkuB`VX9=*~JIit>>FL z@r*;?EkEsU;U<=Uy8g6%E!VaDfAP)UJ)QZ0FH0?EWwf`CqQMb?hwK z7Z0uc_bE0hvM(L=_~dkQGjsa#@60@u-X!c;zIvoWa!l8%PfqRf@1uPy|1w*Qqx6qQ z{c?7Le*|~#s;-fj+3T6@$DKdy##hm~$G^D`RT^^s3BTBPetHSL{5W>cZ}~Jm_t?Y7 zE8#Kp_SGvU?(jY%TzA}>(L=&b{Dmj19VvS^i{D;z{;prJx6vX7j{{ z;|s{h(Ql3QGc5b`s_#q}-KD~sqs7uqZkax_>IbuX&0ECzNB_s@YFdwfwEF3(Gp*~T zhgW{GyomgJv}x7)VHAARM^9KZ)Dh)`%huez=jP<+{PeN@zV+NnW@5#wGk@eZg!dip z&5ovT#=Xa1Iz84rR-ITWP8=%4!KV%@PL=qtMsKWmdHljS$K7+_QPclOmM9Y|;-Tvp zxULRgy7wVbO#Xh@ho-ggL~i8B!P%?Ra`MpOYeyq-lG$Gb^YOB7`pcy=@aprN8hmb zXY^U-dq*BK@+sk_C|Lf<>F&6jef4l>bUu3_bHb6I-SbiL@O0UsL&F{Xweb-vYWv=$ zCouU#4xD^9{dv0m$ajZk*^Aky4tan4yUbed?}u#MJ0(Twe;mGLY*ML5*2>HOA@zRO zJLyRNt#yl1ldd2eZ|Qo(*Vo*=^KPM^dGO5Ny;z(RCO=y9`}fvl{P?BgAKP)6bX5A% ziN@Beg!9N-Cx2lRr_3c&r`)%plKD0B>9yb8{w1!Tes%5n@Bd7e+25YC?eWH<`Qgha zPHy~p?(F#6C!hP?#n{KVXwA%yH|Uqin`g~?X8F8x;?C11-W)ERnErLugL`__4~Hn7 zY@AT091-r1)e?PD$T?oZCR}IIXfy>pVO8w~s&j z`XTv+#QXTd=e7(S9LziY%-4%Oe~xcD{pB||WL&oI#MSR#Rj34Ke*D_M9x#~kI23hg~_0-$ef24R){Km;Q|6T9$Bj>1F z-aW1Nbz3^>>aAyWp634kBY%6owCFr<<<{)ZkIgP~2X;O-bj6I;Ds3Oyb@$XCnqS(p za?el4Z?xau742CxBzezmdw%=AJzuvU-T0@CySCrf+_qQTvTI_n`S8wHHoZ9f$J)tT zyWiftx3_lT;1PQs99mb~wQX$sYpwmGmk00NQylNptDDdH+ZEe4&p!DcJA7W_k+AyC zo7?`@IxoHoV#^&BKK$0(FKo`#J{^AO-QR9sKWlmCZOZNV*7%IE|N3QHuQxX&(cdq5 zbN-&+7?*Bdw&ykT-dNwp?fp#kOHudc8{UuVFNCev{_V}K(o2E%YW1&IkN&&6XM?qK zfA`+>-S<{aPE?LE)@=~q`@+sUtG`>{`}&>R&ZrE&chZjTA+Ghy*B^hqu~)M1+V!*D zpPM-{?Dz+>i5vc#aq^zl$aN!c8<%ds_Wdg=?|Dye{qY8K`foPf#E#vgU*VSbbZ_~5 zt?n(}_@%$k?)$Bo-}bE?_wK%|a`ToY@2%Z&Ym3|Z*p@p+82{ea)Mq}j{Ts%ko6i47 zwCAVhA$vFM;7bpi=M7J6yL`;&d2b8dfn!wWZ!-si1)`=E6fP8{W)xAC<%?ixAW3g4-| zy=D4aUf&y=UVLHiH>`Jd9XU3<^mS$5~v zeOsz_^WCLqj9<5)+&FvSl<~`Zwzxw}j@*LzQ}K63amTYt8HzWV7y zP8`-299g}6S$21Eaep&fFg5za`DfaXEc?^&`r_5z*Opy1Tv&YI%zKMJKDDFxcWeIA zSNCq|I?Ua)|N61X&X#fALE{rodtR~0^2@h8I)AJ2rTxCN_w7#Bn!Dum zefRWwEpORNV-s*V#|Ou=~LdK6qx)pGFGV3%n;5oILuK4%3yFuGzG- z_aFA-2YqDs35pYcamkbKpV>Lj>pk?BTUO?u56@e)dhZVTvUur%4~zxfBaH?9-J|Q~ z%vztH|KR95nO_(;&3kdz?=qW$R~LVL?6`TKu3S0)n5~a@nf4`%OS|jyp06&S+qbJ& zko==M?%RG(;jBhqXY>7^`r?gu1|p9 zPxmx;-_r4s+0QS(;r%_GcYCkw_q%s?4`fPrE~&paHD9gmKKS|F_YQnn|K0NPhV8vG z&Qpho!*Tpm0$eZ1-2Uqufd!N^JLs?q!_~z=uP0f2( z4(zVax!LSIFmj?S|zBe1c^R!9`9 zSs`W3c~gqwF|H^1N^FH5o5;}8Ss6`l4-j3qd)H*PVT`dYUCQNko``|&vuvE;bnO|N zG?{p0P&qj1CXtxsg$}(|mqyb~3DIeQxO(7jgLMX@Z496x+5JzDg`^*U4SztDr z{+uk|kZX7m;lf0$^0Pha6k%;S6Ii@Rs2!w`tr8Li5fe^kuqA${wws?*bcX`8e$3ET z8nPs$OqvNoya^k2R2EFrR*;iT)>WD~rj`;W4t>tcbXZb7PD%^1jA%9(PRJyzRh5(Z zT?R2?UrG~KV0|&erOtfnXuM$hQId#pz)_ZXGKoXN$ebAICf74vJY=6h4@w!yk5bha zVwNp>0mIR59Oe+&%lz2H+<x{5Y#hQbh* ziI~`>Lq;kSY5^?B4DL$%UE6QL zI*Vr&$V6fL)7u->KDfRQrgDno z$&;P&A)6f0QxjZXitoOA;f^h>85iygd>RHJO;`?lLI}r3tiT5NUjuhJA($mBBUK0D zAvAOGIff15gu}2&Q6%6h0?K6=EA6c%<(3%Rv4FQ{V*HWdJZlzzE4WC`4{&8~>A_N7 z_^<23PhlL|mx|vh;}KU`wqQe*c19wGk;bXWv7ColN_aNO@|1_sRDPYQB_2&u3im>U zH9-8B7n9`+ntGC?6*i4IKIYSi5qU`@vg`VG>=mN@28!L-hT?}<98^hs0bWi4gN!2} zsF?OI&82ypm#D)zO`hX8mc=c^B*0ZM2^%w5Zc)NulHiF{lGZK^N$e9ZQVI>9Mt%^4 zyhRv6N?2+WR$9;@$oT-{7u$&_7C5R9-jqa^@}eMmvbRv+uq<(>vN->b#cEe{jSV;{ zRnS_jti|)QNsE!VI*&z|fm_pIBtFnRFN=BV+G^M*d)V<3r98zqidwA9NR(}=Nj(ib z&f=O2oj4^x-?G$5O(%|3DX~13%2_4G)K0hsO6*8!Xp12yuvAz0C~?w^5c--JH(4#3 zhYfN(34A6MQbmY(f`dTJXfW^nAw0*l7p3~fub%pV=0c&BJgm$3GPRui+N@(oGBIV-!sFevt8?TFu zDi_C*??zlRF%_H_!nka>Kyd_KpuWOP#f+VXc}EvJNkl^IJ>(tH?ZmhwK8+JUH3S`3 zg{ha2Kn`g`a-xyf+(a%#TU;&|E%H-`kSI|w2{3^ToAY=t z5mKKOc~P1l&ClYW3FjdOFfL&!?lfwKi6)?zF}1q(&Ph1T*d&PsFF`vaiuZD~&}LgB zwr{7Ru{4dSBui}Q(j*tDtxiM(>f!~GpoNTT^+k*nakgL+L}||t+$y!v%rhU0KE?C? z0;~(F+DRM;2;weIkP{oD@v&hm@g2B#m)rBO)Xk);N|gtq0yn^iJaX?c(v;r}dIl-UDvRsk`2`dEcU`JU# zWhneRB+j_?Vhde0v942Jh!B+%!uc`AIT7ldM*=Zr<^}x@5}$8Hm}40ybwg9ga1r5D zBFyRmlTG{b0Z#o-!Z4LthV!g|hat^nsqeUcGi;T6IS)A?;!?@S`blJ(`cbHJLD6*c zEh*>B;n{s;KUq-;2{@AQ)K6KQ+{=1tz*BIu%%7aYaS;@$^7kyR{XizCiphUE;V zMq`Pf?`0S_(~M05+Wr=9gzsDl55ax2B~e7w_mOJwu?)Ufd(tvdpik%WQP!U!iNK@5 z0^!gkmqbyDBeMWkI3}(rb6LEq5c@J)jd%`c2yq-H11GYcCiw0wSCj*r2`w4(H|WL; z$YCVqtmEh4hf?`k*sm&4#P}SKNkjxib{kxl<>E9DMKq+H5H&>-O&uX4uv?T(6m$bh zB-!`nkcbUuOi?+6AD(0b4hKcqLMLS`pJNfPQWv0S*3fKO)=SN9SDlC>!Iw!I21s!V zi}WoSGl47>?2;dOSmjve8O^5wjDe<&KB);GO_*9f&~%f}C5hvUY6=`7QV;o2<&uy_ z)y{6x>9H1;u+v1?;w+>Ik&1{bJQkEyBk0^N`#?!T!AzWHijJX(cnoe$d%5KY)44!# zp+N{jFeX>ZBng!RCQ*EB6KC9##q(U#pd5iW!;1x+^h8-XEye=Rg>q<&CY`23(7D+4 ziZLtUbz)*-n()YiA?rJ3Da(pjB$Q<(KWAjJ$UrDX37jAcxh!waI+)c0F~@~2o2bMpvqc+?*Frw)#z{aD)x?>!Zj=Ntc~HWJjeIv@q`>tRy+=VzBgg}x z0L%k;gg@h%tV-Mhu0?l4#bgCdQ4#D70eKyZC3QwwNe$URq`ZJbwZcHNd53E4IGD;z zzG)01ees@6Oj>6piMk}>G(sa!VyTo0Nib0?u$34qT4X#45mpisB2vl)*wDzPVY3l; zd#s!^JHyZlY3NEx9t#IAClR9p+Lbv4Knx+5t*E%)N!GO^ksrW_FIVck;hPN6f$|PK3s#$rG%U`JmG3X#O^ z$qIFqgCILctfa7^eBJ(AiP#7RdZgfYNEiWTF9ti?$V zxK}0&Nt9_gzB{S}vBjq@56u5+y91+lv$*_W``+KDzRfSmM+V7iy0U`0&$n70r zj8+n>RQY0&cX!)J`G)1ZsaWx^3u$hb-do4!>w`pV75P^Xwe$h+NzuYqH)HQu; z+>LcbW*v)QQi7&Mq00kYP*?ymPDY7_Sl^;G-zRFCAaF2&FVGBNJO_>yR!na&@Oh3G zWdq%bQr6-FCUP0u;4;E2rkzuqNF4#Oigg&DPYMlC6+HmaU=il>f|4?0b}9qx$buZ< zq-;t6fEW^|yuxTsBTloUgnErAw5b!x8H)`tlCH!BT^Yc(MDUpjR>0jzBLTRA5SIvC zf@K*nqQ~Rzg=EwttQL9_mqaXLrR#a39SIm=K)(Ed-#HpIh=5arQm#2C3Hqf(;G7ZN zj9RvZz3mp}Ni|`iscP^bTuy~Gf1rR#9jXFn) z%?!iJxC)VRkkkUo3N9B0Hi@!5G2tgPgP$f00Q-DN#DZXW$vMo{779|UGYJQH9N8XO zK3IEDYapyFK)`eluUlnhZa%>=#~IrVT_mR}QNVqwzBuD{4;-t;ILW~j5MPz7CyL-i zsci>4WAr8ID2^%11EH&C5h@4~7C~2coPcWMOAS=T{s??)1tEQ*r-_(w%|0O`lE5NP z*i>o3O8Djy{V=03Pnx5KF7{TN;3-&BSY#|BGp4;jl%rxGrAe+SHh{ zLr>02t`i@!jj)bVP-{a^8q?+OC9konk zOOmdz#(Z{Ev6oL^Nt&X@RWR$?1ooeg4}yp)oqCwlMFDUz)&Iwn|M^1%!Tb}XHRObe z^q-%tNS;^HQl?V|z)UnJF&FJTIOoh#B@RO|Z4*GeFMfaUNYaLU_)DTEh6EsnO|bN7 ztaMPWQz!|tlq(j8I#$`hS{UraZGok9a!8il2hOs*Q)gr-J<7q8h1g9}DeI?sBxqPU zgoUkanaoI-C86Xk-4}u1vfV9FU}%485hY>7g4P`=z4Q1YW&8FnC=k+J&g5Bu)&IV< zHgI4J#+~_bW$OUBhasQX3K@X?$z^gZLu47?q6d_pROoIMUOKcmeH)Z1Pzk7 zP%Kt}siGBj6owL}#B{b(bQ!~$Hk!d)g=DRekz{7-Xy5XwqllKu@v=vHK*4KCR&m{u z0>+}LhtDSSu&KmRo50DygGNw9pY^&N%2}Z!?qd(AcD5EWbF-NEow1eXa~|h;UD!)P z*&v!C3zp0znK_ahOe(+$VG+=-~fg!5+oiDi}2EK)0xEQ5NHC<EhF3LbhHHYMoV(e+-BZZ92xtdkV7eyF}9&Kx&kf8%obUkCcr2mhc^)^ zaiRK=SoWekTbz(t!OLWXsEMj@b>8_(2?79f+Oz04OFeB^jw@6UD>smB~4^4pxa2ycBs(MsKRTn>17`tPe!I z%#7mn`~66)1`cM6+7gj13IImnog~PQXPiPn4N6l`XV%Cu9#8-$hhj~nYFOu*Su0;D zW~GF}-a{djh`tD%ikk$%iiPYmXUMgA(K3sOTT$xdf^1ubAg*qU8KyL+QLJRqC{A@$ zUkx$pP`y&f0udibz7zz-N;j{jLPxhmz0M>TG?-D>N(G)kgK8qBtGe7!qhjY=M`CRW zauawAmMm161nD06IW0E(Vh9$#i+CnlsSn|lYe_N(H~~pP(7Q1k`37J}cg>B3z;CfR zPnFOk5Ns%^^7RfMh|v=?KCYMn)ItNQrss!&8ap9LWh)m5^{lIMS~Hf~U?rry-|};i zUBj5QI$NCvXUM@qQ%EF$Cfp`Q!gWJB1gc4V4KqZEFjuj*A!G<3)4idK-0!0IP!u&Z zN3Ad|oDmlbSSYO|?h-7!gX0X5u`3SKA``i0Mu*Dn5tUPXv7$Mgg>6-k7kMJHu4)KQ z7q5l9*d;)#212hjQUe&sS6G!s6=@<Gut*XM%+=OHB}tT+AR5k_IXmmi zsVXuVC6!n;gMa$)OXs<%W|SH-=SmDIE*ZM zoF)Y}^x2va8ciJjVp&o!+tsB2lPMABsxr`0i#0&sqR5TGwF1G3vJ#1{I-}MQW2OV8 zX*694BAuC!FgL(&I8kq;7Nl<%G)u0;k>QIePP+4Qxgt3Dpo+6sVong4Fb-vwwNo#E zDug>~Wt2t~SA~45eeRT%Dp;sAV)ayWdD(!@Lg!9#L5cEQh6gG_N(0*UJwN6k&qu@w zdglg8;N{c+8Y+&sOc{$t4%ji2nbeV5PDjCGuqTc;+oT3(b`&gjZX*r@ic@kx6c9?0 z?LsjV$$cKfCQnjv|$LwFV%?zE@tzxFPRqAz$nwcc}fl%39TwFV4oWY&_Ps) zmf<*L4jyw>ba=<4S}Q@z7&mrezu<+7CEu%Q65D1C$y(6o%*=ew&$QP2V7w^^W!EYmaF&4~(ly2OA5a0p!Z+h>$C^nuMarneDB8HWqRE=K1Z zd@OheDk-w3K?kG@a(y+$&pEP3k-8zJCRQSV%(hE9Sjj|-GGz@T9%lrfulq$5%Gf+A zGaO?{woJu&ELRByMl)0vDx;84Q^N~w*-3#sQ%PU*G$DXTafT4nk8RKkj};<1 z#KRP)SRlOH@Jt@-QnGZ}j)PfW;C<}6^s(mh6m_r|t&C{~NTs7JLgi_x)h@jV+0!W+ z`4-3~lBx~ara^&+a!+ztd#q^Y9M8rzq}hTn#y1lthvEeEJ~@_Xg3)Y4 zA1L@fnIm+gdzC?b355(+uyP7jWx;hSBDhS@F7NU-(QdFX8E|_A$^7#U)w`xaz zhJgTKwk$dBlW2eB<6>u@8KVIf^7fu6|(NHB@Z#4=TrK#*z2C>5>6 zXg8S<&yBoxX(x&>0R<)?OwudnEK*A6L{w%H7vMO9yN=+8t@|8Bg6t5an(XqCDWXVV zx`K@YfI1hY0n|`fsOCALqa3?j9)Tlt*gQJ0A*4x=dXagw$cwWyUt=`}1s9rEbYA2E zSz=@!AN4YhBYroRP84Iz6;)3R4VoiOxtc~1#4JleVIn7zDi69iDvDfSc#4M5%%dWV z`ADJmNj{??$pY7rY>W8gahA!p(x?UTxQ*jc*5^^&=CEK$#MT+Rs487NNHzz>3E4K0 zQKVv+mPD~IG&9+o&Ql;?I51e;($#!5CkFd!kF{A zST1iQZj?!i*=&c&JD@zk`6;w;MC9zRHRav4sqJ>f=>MAU%?wVZc zVLJhpp)BJovaWz~p^7+!U4xRIOMMx=N0dCsM@A9Q6$2R6fa;8q$hnY@@cJOE6hu20 zvRs{M#d)6hZ7oSNgqD^-eAC3F+!l=yAvr^3pkZ=~1D!?+rn3EZ(MEuv7G@Pl6M<1O z1y08#^s~H!QXxW&Ppz!piwqcQ4&yMIR?v`qAj&1p7`dRy@)4~uYAfTRbitz>!3Zg+ zx|V7AD1R-)Jv4owLCXmpvrMlo}kitC?DgqMDW(2cG4y6R6h`fkl7Msw$eLkSEE|-ci z&W{i52vl4GzPEt`LkGhI*^cFRG6{xzs&Y2K8cUuX7=LIS} zY8Y(15>FT@;xEJ}f>;ILMB>9=0^|^IX!wO4xE)-n1MZN9XMqjUysTs!Nn=_GwJZg; zvHTQNLsfW4D!`7im~)jn4F{7pg-Tf&RR%WoAmIu!!at#z0uYJcYIb%nFkmJph)R^>K|Dh)83>kwW#1!lAG-it+16vI1-iaq2iOoGUU|E;yU2^cGX} zR<(73&r%6f#CJm!R3RLr5EHvOneT4qTv2p0GRRw;2y8(z#8`u3fppgB?PzKs8)hAN zN=Vw!)izMF#g{~W1jg%>VyDF6`&(H73bqI=7?%>z@SUTNo1{%HkaoYs+lB&}{q zFr1{+kW(;iCFYBoFQS;uq>+reJ;Uaztk+x5xI_ccLQc)(@dSFg`cW~+7DF1ubt6S) z5DONnVLa_C(5#yvtp!;d$Q`H=^+43?9XsK0u7ocZkXNRBFXxCksgMD!wQTSq4&YK? zbvEfy-CP+SDdPIF$C;5-Lm*k&k+ZM0`k9psGNLFwv}}F{qa* zZPk*-c@+SnFV}R+mDGs*PMC3W;Q$31^VBHC{EQ$^bc15F?50DQoGNNSd5yplIVi~4 zFfskqFJ|O9QQfsO?d2zB6*x(Fg@?xg84Sbd<~l$(9B&$JCV;H?5NAvq?K%ZY03kvm z*n^ohl8|5^za!m)vc$0nJd|)FttE#loifW+XGaaNTmpp_ z&MpxaIaB7E_2g;G_X1RJQ{Vi+K=n_l5`VV^ar&5G=UtfZ;52EMS^@oBAF@-NH*}_$ zbB(Fyk=bA>jUC_UX#I~D<3D4@WHxe@4|U{0ykq?Or?CBBKZXew?A)20Xhu*N+P0^5 z%@aiH0}ULUBTmcgo9}Q_L4N51@Jk2M0=T zFiinfasHc|qpDtoqJyd%;_nCI`hUu`Y%0gc*uiUQ1{D_1 zIOYZ#bIYE{3Zq5qrb z|7(`CM~F-0N&9GNV94~BP!%-ue?4frH=6iRe=|^USf46GW%!pznn~Up>t0DkL9Ll` z*cJWDv+ctA|HrNm11UD3pOiiy1B*@e^4{+S;wx3c`>U{2gEtfXTlbAVrg2m z4lh*Dm^>w|^ngY)a$B&OP*i_?FD%sk#qPcWyG3o7@Gd%-p*gc{qDWZOOo5bDw6$rj zZ0;sG3ZKGQT0m}ZgcKEO2zAI|yflBlcPf$ECCLm}8i0T=JEmY8ncf-rXF`-fnT6WE zNXQ7i`=!10u*fwLfji+e3KLHn&doU}TnV`Z-oH3@CHG(IZ@3pMQRaLssi-MkNU^f< zG}iThMu88WW#(iCPMynFv2PzGZSYGz0>6 zMUXw4339vwi*ai>6&qP8ZOsU+Mz_3>8FNvAKn|HNgDf+E(Xt?*%$zEvS>&`OWHRe^ z7m|g_tZKs~TeP~m7y4bUFSh(ViWmngvwW2E6d=wt&t)`C>MctZaJHO=13nq|@adM@ z(mWkx0QQSOOgddd%b+Q(7ZK4+S_g#_eN>s|`y8i%ulFwx*qR!rCY#d#wXXmBXZ|nG z=ge9j)(!x~n9M29_tp8WgZNf1HrO(X?bQDN$LIffeDV!3TF`RMPAg!vAOUB=lm$p* zQJ{*E-c$^$0Gb!;c%ZnR{8v>#khS+cM zAQ&j51C#jxloazAe!T)D8qxvCxu8*za-q{=0ciz~q#6ht%Y$;Uq63N<9XSzcZ6pXw z5+6o>yKDj*9c1pd5fcQiuYou9Al##r2Vp;vz}3)@Dagc*+3IDPMPcgos0QGo6cpeb zOq6CONmSK<+t5p`aGoo|>Bexd$?&ihz-L@@(KeCM3ZBfRE|b%X^?a+)$mj(l=VqER zjI9u7QP*(6gMPV2|4cSY2D!DL^9S?Z3#3PB$(IoIu z-!X`|vUAm7Owim%$LT{NXu-p;s^ui0YIcJ@J{kED3cG}Pu$ z6G7Zl*EU0iF-0iMt_VREX3nIio@1Sc6-cqhph^`B1_Xl;!WBcc zwi69A*&%LAV8xK_(Gvxd8aseZA|QAXN>^!C3({s1f#Z5OsSu80=-xsM8kT?=1Wanf*)j^k(iCm zrS2R_rGcGTSgl@|v^?x;@j)P@M2*uhtf|o)o6S*X%1IRvgMf%AP6c3FL_-ZFag}mk z)a(qhO+Ezrs~3QpbodH!Q``Dh#6!e~9K}+lrj)WF3WoWb z5@MqO)N37eBHo6eY=g(5n1};IDR0bgMoAN#jpclp)L3kv;Vk5ErCwA!Iyw}b{dM))>*G@ z;1=P##sXrMds(; z2&x|pA3n-wkvJ83f7;mpsqEr5pTr`WOr=^m8? za8GC)NEAEKhumIol*!a)fU z4jxxikmoQ`wpDa(kAv+G(vp@n)d<`@2m&K@`Z-PJ)F}bAA4Wt>4Hz9>KZ>vDGqEGs z*`y;)MLC&Pj9jGQBj9#Hu!1~l^DgH#L?}F*>_FJ4L>7n8tV=eFiWtP^}W^tkhn^+FpA0ickCTKC1u!N0FIGjR&<%pe_#Rev~nMVS1 zQE@?y69qyK>JX*?2zNSyUI*~n=82FkFk(c(8c|!7P+@hU!`oSQ+%L(Zz?&%lqHzFj z9v=ZxVD}OnxMWtc8!Yk&w)Te-c34C_wjl_t-7@9KP&Bcowq`k6%)pt7YG2~#`6xta zcCo_zW`Lb1#ju77v0Br39`50`z=U!~7H2+SlXoCmH3>cjGiIiZ7#?*2KJFe_l{pCc zFw3%@?PkfKpAqZ;ibw#nF;WF)CH&(kKcGh9O-d;|A3ekou}@IVFpjBOj)2^V`UOHZ z*ASd{A{$&ib^{nCv0nO+Bhk>voIWV$r)xuu5(BV-~kZm;%ISKQ)LJ@FKll?#Jy?2}&^}YT( znx;{gw%hB5jcLXdMbIa@g{<#0$9rWu>yeBf{F%` z7$gdm91D(zTg~}EhZkm#Rq@vK)+&uLYCZ)Drxd9b+n+T(jZCfTSEuXLy`^BWL~~v# z+a=Ko(oTeZP(=CL7?T-^#7BpZO z6|n7UUU6-K{z!3@ZaHurrmsSP4fd=x7%C{%GHBZ-BsRtsh?xrbqtPb=6vVzNrUM-;Q z*5=H5(eM#6c_kl3a?;YO$L5RV7E4v0MoHK%c|*QNIiwamfO&*Qvmd@x%_vHif#_S2 z>-&676(KA;K@b7HHO|T3YDA&yWf5-G!5i5%ioctDN}<2QFXs)~ex*vqEm8HW$t7}Y zw?`~jRd;LTtv&NbusP5QLJ%feQO*`=g*R8m$1_eNvEBa1W^t<%trtKPRHzmI_b;ij zsPV$rqoY-bb`GhNvebY3a$$CNwfl2TaztxnX$tc@+m?Z7XN{cE3Xh6?Y5iki(O0O8 zbGFiaX{AUT8u!)+S3~tmi<*P6^>@vlJ1!PHhMznCZ}l0n=(^9EDE)m)=5uvNNSGx5 zAP_811_*dn^Si6-O8L*cJANokDS{#St7WwaXL;rho&PzhJUg=fc#Tx2MWp_ZkJ$bJ zW=d?%E7+j!HM>?ug({6ahYd)5kTtQkteV73xh! z3$<;ZOUq_H_2#z;`Kbt<)>804aiGpHOO1~ewfKIs_C>kYHerNXOiOc~{}+3ae}U1< z502K?wR1N$I=*G*fC6vb`E0Tvfa$knEAi_`al1EX88aA@%{g7e8c-e#{w?r&`baq zgNk)9?+*6WnRM!3i*3|mJQ2`0FiGGm1HJG`67)(yOLDOk>d1>~WHx<*nREyvRr3PU zGG&j%im@cmjwT!cC^T7!JXKWqi-cIFU&R7|3RSDKcD6bs-~@rPQ~~Bs>P5>IE(3jC za(LWXXG6%V^uL`B18~sB6n@C(hYjjg^T9&S-=4?V)WR6wGDaI*ho}|swYFNwk}WCW zIh6+B2|l18(E{>l?X)AgIg2*GpFUyp;$}by+Sm;+s`S8ZxoH7U$RWB_ z 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�ZJmgU3~!D`=7z}*g?2AozIUJ zn~}#YTd8>Z4^v0QOK8~O*(BAPqTK}Pkk0lq*kQPec*G#<527iU63`&Mme6qLhg*-9HF%n#4%b z7HeOPKO&acFOtipe{?Z?HnpUAv{;B4*yA?XbLIs7tB2 zPB_X8Q-v4#m}ivfo6g?&}~_znI=oPV3{Q9f#W${o+BXC1^$k?#QB}h-+ly95eY;N z(E<|GuI!(}5YtcolOs=lT2jmNB|p?l+Q-i)I@pb9JW6|vb+QOy{$QIaCL!Z3@dmdS z6Jak?d*n^aH*z&As<$)G$nPrP@j@q1{}6s}b_%|5FV##yUAkf_geF!N3wvybwR%@G zF$?;D^zw=Te!OMWRmTraGyb0XEY;8(r8hwT8p-!VVz5ulFa*BXn_h(G1K#OWEY-A8 zDOaq5x)Y~lH_>I#ctD-ZajmdDP)M@pg~?SibzS`kwFvZ68lBI-pcc{pYPD7+A1bSm ze*-DdBzg|}KkHREX}piHRmfFd$NwTFY#lih545@nziaEbUuEkRMeHJ~T7JOczyf3z zAs_!$JWug}@kQ_hSqq!Yr@_IP)p4Jf?%bj$LZd__w-VYVwm3Q{xljrrMI%Gnw_mm>z?{FJb^u^4TsmEPaSI- z_c}Vc51~dWX5qh}f&2?5D>qm1#8TF%klMNOu5HvO+X*nQ?XLIK>~1>PwioP(dpf7P zL}0(uhviS~d$_KjD%8u-Swy0HSK|(3iRz>ONTdP1jQnE{)%B{Mh%c3%S>{Jh!j+o8 zi9ci)OuwqW%I1@{{C%8U{-AvlvBEJLUCu-(*H{vieO-ppZ;ku00MgxD%`6n}*wf(u z!DjPSXd=j1LPU2WfzF2xB>4a~vM;xsXre~B-gWul*kepnw=>UE$F>cZX>xt=)PerO z5AucT1wMyu!Iw*2L^XC^_6|+PX^bOQ%I5K*sshRk55`-8tnm*#n#`2W$^L+g#5vr0 zfrC20qwE8aKrEOXOC)dy@eMr5y>PVWmclY*1aR|S)RZfZuy187QU2;2T-W3wHLCX1 zch$e6LILY?EV9gFsRQGNx80+?0DI>n?4npJL1(L^h3I(sb3C6dV)dehP)kGkXyQNV zIzN+-GF}x9`Hx^y_#B8A3)rh%KVdWA242RJfS2+%>?DH-3-NHma_3fRA2G+I#`j@5 z_yYXO_7P^_BD#d@=OjVj2?e-Fr@-3>ZS}yvfiGM(mIvQK4j~cDYP5yliCpKp%brGm zHURar%Xwu3{Z-S8e!?w9i`A#(Dz*#P4a-4mv4_%hYe7ww+z|9wT*5A7Fp~9v+bV%U~h~OdodU-Cf z;|HNTZD^EL{S1}LN=J$QHS5sCGQpcgDrnIo6)mPmi|#qUdW=Cm$XNKH>v6)3x4C|7 zdThOoMvxXURk(y}q!Y^T!f^441X-rR8SKZ8J=C+^F8ITI0QFoss`(^u*HpEBH>Ze4 z+wAn_M#(9Yie=l$AMK9-t*}`*gv=w_tUIxpcpq-6YlyVgbu-7g++muVo9!80S39s-_MyFU-HELx~NXFKn@6RAmkzts4fQ++-DZ1N|&^&c0~v3@tVeP)`->%;Q_P(N%F@?1!=TG!^yK zF$VT_gr=Q=o&`K(>>8ow!E3PngK^bUEYW*&Z!syr|jGAY`bm z2Vn2IC3fPz=zCzh;6L~%^0@PkeG=23{F2{}TBIE5kQ*aEiB1n}i7XxVz*Np;#%#Sq z^aWb^B}A7vjWz15s?=E@R%0)$n@WiaHG%#5wPNG}7bX`2+F?HDx+X|&D{ zm}PS~eJmw#L(}L8J>ZcZV5&U#vEAgy)f>(GNMGY9Za$wN4goj7gJ_%Mk{AKr5gnX> zFNER%U;iygB>W96QTpN+sCfPoHJ`7>_e(FFi_D8Wh6koV0mK_cXVGMytr2xYpl_Lh~gJ&8pzAMn1Y2Nzypn2 z(NE+bY7(8uO`9-Evfw?1!yM|y3G>jO+M&oWkpAxh++$@jcSjfgSjCr|M4cV@&KK0I z#G2#@suaO#{3?FLE3v7FUOv=35P1rcF5{szI31hh;>B<1y+d`ta*5gE{6}?+IETh5 zo||TR>_!fwa-l-#j&Ot*>dT&FX7TRq0m*{Zz^6=0fAe;}bw@CZ=8BLBGDE@Q9FGxx z4{jCLHH&7g5=?RjZTG!u^TzsC*-`Nwt4hLus z(oXIvp%-!qE1GsQM8u`P1q7YpPhfgOf_U5NaNLIeKog;k>dC@0`EuDUu|Jooo#CX#r?w%wcYF}}v>upJKc;-Yfm*Z&q&WxyO_%;6 z`xA*`xu!_Ak3wp->N$>&+%9mhl!LQsO^6B!kOs*WjtBTdmkF5oKhs7evG%>Q(RWu$3uxi8P(0nsCw1$#SIx6)?gHVQ)SubJ4zIDY|F)OuvIo6 z>yH;eSK(~>fiN08pAz>YL=&@1T;x0iKcc!L_auVuV&EL@gHw&*vfHr;375@KbauNg zyXP|i-R%0E^x!u0>)CAVJdzKX5N_zZhu$FLcvg%f<~1KcCc2s(kGO5rKBk}IC^Htc zj>&E1{5Nj2bKR(2+zj+IA<`4jF0fV>td8)iGCqO!I!3!fwhq!Okj(fJDHbFZ@ii^h1h`pGD+&Vd3rfIx`l;sM#832`-Rvra>{;BK?bP1E! zeXHiSArmCUPM(+v4d*g2XO?rs!2m)sEvdP>CG*b9noZbi>0<_ytKX#2``WmH~|`0bJtTE$(d^VDF1iAljjqdbLvA0A1|-IiFd zC^jI`syeW{9io`)b_E^8M6@Z<57Ju5AIvia$Sk(I_=LWiolOT6?xI%KyIZ4?1-1aB z!0`x=wIq`+iW_Vx=z$NFBmu6=-1{x|CX}>Y zazv`bv8kw!{FePn&tb}at~vENM7FcmwZ&GbNYanjKBHbDcl9>`C1)tN8@htTN&EgO z#2**T8sOsO_;N2{GOP51;Y&@&nS#c6vX3Pc+Xq?;9`ahnd1;De8B9R8=o)h>-6ioQ z3cMgpj`}#_Nxzm9d@oLJdm=s2(~1S$SKuq?iTy=1IdVw&)?a*q^niQHjYpOd`IZi# z39^h$p;seK!f?8acvf7N_JaOPT7r`HheDepU)o0fy+QQFzQN}L zdDLVqKxd&N*<0d1eD(VcaPM#rvYl)K^Ee#AZjxTYZQDFX#0T*E1s~Z-^)B5r>pxDG z>S9027MamS7m$mT0d}HeI2Y-;xSN|K>=25rK}Zt696bQ{!>(C(+MP%TVYRbXFw4fN zy`aB|=7?x=8gMt>lC31O+0KyE@Y)=KM9Vtizs6jVt#YRbKr$yacJCku`qr7QJ`;Eo zTL0lTvEFf)zE3Wrrs>xS`y{nunCuyMt$8E#R&fb%`)A;9xzE08<)gt@Wp9=L2o1`4 ze4}#)6NWaB$LW>I!??|`QW|M~2>*^7SWxrArrA;i0$C#7LwnJ2dEaymQg>@F(0MV2CY+ySCCD&nAedj` zD7E$wc{Jj(d^jEZ;kiz&++}-2TzB3P&vNh3Q^snz%97%h;2BOfqv?u7ZJBMDxQLC# z^2NpPBbB2-k6yH|T|SbUh@PuB(?)Q6q&lpZX0vyO$!A5z8wva1r1LxJFP9WKP$ZXEfr1CafJ)3Ggzwbnl5OLB$hA80(k z)A}d92mWH$%PpEXvE161+W=jc-GO|#EcUJ5iK$~Zb7L9}mI`*6l#P9muBd?fkRDbw zSG(ACWH=W76v?Cd+ST+^~mcVva(&J=Z{7$F7_WRW$W< zJ~9o$3usADH@XUmKF!ECzJ@=g>;NS@!{zrC1x!Nm$~;JVg!~V^XdZ2!$j0Fp7)c3w zv=kQppdy3rqxeFm@d#e%x*Psla)W@jzUF6!4TF7rJ1ez(pkf!2+kB6x=L-xI@h-4M znC0{VO^(Cy7Gx{%)cODgH&*a6j&n@mF7bipLHfOw9TXeLK-W{T-QT~F-)$<@pvNSNohEwD`kuJLKB8{71vt z@^$>8mffm(%;wgnqF`Aq+s#IyTR`5fJLFbUX8Kk5<;i^)--r_d5$*03r5b9Up7-sb z9I4#`cQ%}cTfJs^rRwau_JHE*Z@%iVL7C2XO2jQ4y5-UYnveC3Df0gMo~HAk?`XzF z=i6h0VEt>7a@_XZrCcOzmQTfg`8LS557`lL;NxT9RbRrd5Yq&e?v>(-d!&1o<5k#+ zwm$;|TVLdW%Vcut$s+uH-3aW93=8T>KCS(uwHGzMmHG;(b(XW0Nrs{tg|fnPSKi3V z9pc4+@w#kNV31Y$-6O6`df^LC@0hsSJ)&RZ^!ocg)x=!zM*gRYVtWgxJ#t|UIawYX z@GI`Y%Ug3C81*Zh=5X1 zo-o^X*mtWm&D!4B+414aD}A6c4bN^ZVMk?OB`wvX6Ota`n5 zVEMxO<9t0;jl>(cjCAY`m#TuSn>*f*J#*G34y|Q+Xi6|Kz`&qYg#mFI0+fqIs8 zy*W!2XL{OJ!Ctjvl^=f1rZqk@;Cc(9Jm$Wby-d>e=S#b}ykyFF zDJ1TD-TquOO2z$uYT~r`{SoA4z*l+(W9`j8Y;Fg*DyuX zS`Jpp$O#5kg&J=+&u|S@>+z!=cigv|VO31zJguKwnDsR@(JRomna%!|NFMd3nG{=B zMY%y&|L1QRg{$y-hnuOpf>M9=mchwwiI#g-BDeucRBE{ZQsTY5Am&eMj{KB8S=B1k zSwqE@T%qSdTeOO4>fLS;f2{2@b8=cO9w*x`wUK?qQ4O!r^uiWfsk+`WL%Gy#NrztO zC??#};D?!>+8Pmx(VCB1d@v8|MO2}GQQeWa)UKe-VZOt>4PS1GY`Il2m39B*g>U@D z&^j*4TuqurY2emmN3DHV^gXG2Kwm@4m&CgJHILki{lqVui~TACpiHlE$nAh61QX0-dGbW&+gHHv2I8g|YyL6M zBm0btw3WJrRy~pp=Kii%;@8x16`PR{KBu8|*jRz~t~7lm<8^T^)3t{*Ymq+{7`xtN zvY%x(o7YNr^nEnH!8r?)$Rjvuor-!f?dfBdMe=dqKe7!D)|zOg40Y~XTW=6uT*kEh zTh-S`Z>o!0T{5vs<(x3$zW*T8Pq;Ig0rVrgou&d6ojQsQRdif{b~Q* z8ijiSa(%9tqdQCk&;F;suV%SVbjhSkWpj;5>@(Msl{Qmx(_Owt-4siB>pG?sKjl(J zkM#gOxVX*vl6ove%Uj)+cTeq-fKQUk*a*Xu;6}fz4V%8T>Y*-KRVwax+gZMwX9xI( zus!%J?&rRq9AGX+4+RH1XV4Cxm+f|(85>p@S45sE>w0zfSmXCpailT9&6GbT zBAH%QKCva7KhlJQT>cf=UizBQ$B@ImBcCzV5%b)(tAktruC~NpIMqrQYFdydfuBEK zYCEG?XW(W1HBpXg{Gdk<_Ziq^{!Z)o`m73@Z<^z1{Jo^LGBVM>px4exx_o zao_zlPxAGLpN?+-XM6n*<~}kN{a+{f={l3=FIVE*2G=b@J9W7-w!U)p`|QFa=CK(G z7SX)?mqz|tq{=s3IQnHuO)B)vKBsAl^QR%IG^sgXLXG>>Lo`E~P7aU4BcPFcESWC- z%c1f#m)M8~kKCG2uifEu@Hsw7@*^3uLOuLyYwyA3uhs2FQg2t=B7Y2aznO14)l)>i{gj;dE|K%RTP9cGn$KK<(F{ch}HcE+gfM z6yOaAi^9K_H9?i&{z0;F$Ux;?^WMsC1>3z0hSuhY3RUf>a>aa<{>O)>x;o)( z#8~wzOR?`~!vyH~$F9;dY`ODx%w79thq)P5q$nFyZyVOBmkNlUYUhVAP0(wS2{wp zF{5_ggt98E_v2d&@OVdp#eXe^|k&bdPKF#)fLLzVpugRm{czbvMVu26f~pxIm= zKZTEP89cCANViSW8`*f9$BDCC34JnTXOA7P|4e13zOUHJL9F&W5e%WjmRs{ zOktLJH)|z6w|;QRa6iy4y*2no6A0qE;ZJmy{t>EP{cf2!I z-8@SZW9lYFsPuNbqNsdtAUMrP<3i*WO1;Z7%rl9Jxm&@~0>_%Omo9<8SnGO^ip9eFmv9 z@AL52YzPYf8IF74vs$_v&Z42_K1SagKdQgfMq2I%tSEh8pWU{kB)@4l7GhPn^yMNx zzIM&|8RGkh39*Ih)4k#NQnxLBqh*H`ophG4Qr8t7MPiiVF0zzQ5zvN%l^aR3Mx2H1dmtuFNo)B7j+V;Dq&Q?Uf*7a@uO+4mneIDPo`}?jzeLpYzps!yX zx}k7O^XkB30#kcXy?Jnc00-SroKhG0b{u%E-8DS%b$(7thvWLnrZe>7kcFY$stZ7G zXSQ{+-yJ%{9vd}V@!IWXYpcDry`Pwhu7T>jTksB=L;PibtNnxWyZV5O!;~LdCZ+nn z6pA&6xH&?8SWcN!w#`_?Rhz}2^H8?ZKQItatlV7x6#1VkAa@EIx$B;;6drXACa?+7 zbEyPlhfZdff3Web`zjaP(tIvAPLw^fG`RWN7y93&OBGS<@AkhRbs`3a@v#f=jO^l?+c1Uo)wDv+JEg^+(*{@ z&+*LdviVbB61li4@>OWSg>Q|)@v+0dVWvvtVnjyNR1XVL=&{M#wWLTsS{wPe%kvv8 zEA&JB_RK!$M>mL`PiuZ>gN@I{e{F}4h(k-l2fM7vI!pJK z>xNW2PxT*=ly&;e>;#Bvm_oG3JDWd-F2*ZI9&nrDcAenRb;V~Inln~K9W!os%_7#d z8?O#_@yNa%Oge|!V+^t%GXt-SqS?Ltrcz5}XgAdt`NpVOmu^25MM>W>-o)Fck+Is< zh8E4rfDv5!&lU1F*pj-s_x&x;Nv2H`lt|!6y!!UfSoDNBRfz7gJ!g%Ms*VG<53TdZ zy%Shc`rpQ}t%=CX!f5g`p{AX=7VpZETKHey6u!^5;9Y9fPTigV`bjtFVO)398Q-MN zB_2s_-{^eVBI{!&S>Ech&__kg!M=p<)BII6$N!z|Q1f-=YPWml4CLM+&@c0qZMRS8 zsryLR4=J$2StJglU!;TqGGmM0)?B(Fh>?` z^xT2QV8|;&l+BtPcFXToa16WZo97RsX=czgzqhfw0&*Mju+4p9zoyZ>TvyeYg>1)s z^>BPkL}Gpf$ebN5@7!|SwDn0gXrhRWny6syoAk%M1SV8pm(4qQQW`E@s52Rkz=K*| zv|g93X{(bDwZ3YN2aRm+^_9UN%nKbwAdYj6KmD^K|EI6B_F=cXu8B^cc58eem`Jzb zwS$n5PKBVieLR#UTxdQ_jn=yV`1q-(Mu+RU&fe3=6A$`&iEUa(l3T0(oa+(UcsjJzsvgjuO-X`xQ$> zt^G)ErFoHOkb8MhX8%J!74^ZAfw|28N8ds(n=#{7>oMhU;zYaJz^_Ei&t1$FG(b}o zQjd4l8>P7(L#jW?|F8yG^}$NTWXCdx-LJw{$;~$mD~r(&g`%vZO+gGIU*B!5CEh*T zGB;tXEd<`GJ&6r;>gxY)v9s~25$@a3KU5wyBibgAA=n!8)aGp0Yo=RXa~!M4zQ`Ag zUNKxM11|ftrsEzt`mZH}knb6Gq>AWd%A{tIuG%NaK3lx&1lf!zqpMA;V@*^ml@V-j zePF0I^s}Ce`CIcjdas(tKcdy1mjPK=#spE(jrV0`ZENe5|g*Ir8O2Y5`X8*|qL8w@L4sysz=0>kg`b59F4#zauX5m`yaw zYCYeuzf~CwIohkTR>iy6J7w`EIr578;nCCH-8G~nUOM!}s_4*3g&lB z&JXxX6{xFhbyO~YUVYjBzUZ!~cYJt%1l!JSX!YfP{CFCeMeRZ5&Lq&FoZbQv7b{Z9 z6Pa(mZ?3NV2oXzMp0oS#PX7D5Zu+^yeZLQAdJCrLC;DBk$NlW}meyS%e^vT8QdJF9 zjPgD7z$1_9<=Gv}b5_>fgl;g~+a|G|#vX=bXJy5Z*MIrRd>*;xkZWURbtk@EC_jXc zvTemjz@LMksh0+~1;iQ-N{0lmkeAF;;gWJVveS9p`kP7TuIqmC^H9jAa|*x*^^a&N zU1tx+&q8A%N~moMHP-+YZMf~5brX_g?b-YqPT|0R-{g{B`Bh(rn^u{~Y zWn#@DueJCr?zBGDvYFL62~{fGBlMPHGN0A_&2&MUDcD>$NFMmoj`J!y+DfEZYJc{W zM&?l_Cn~!*?y61d#;j`O~$X_VsmfiW;Gx~DgJ$;g6FiuG^>{nvDrdM;|s9@byWhgZC z*|p*&p3K+p(!qegYZtN)Aj!m1TYxVHcKU^um_K>nAX#At;a0X&Gg<_iH+QLVAR{Gm}IoHmP_Q7FMj!Rrh& z1(VwshE>lP0{N%AKG3U`!d*QtqS>t92+#il@qnxd?Zkv z7kAE^M0RRR{H*i{!&cXa+MD9)vPZ2)>VmG#lKBa}6@&E8$qlZQD%jiuFSHFu>-^Ku z3{|)x-gc&HeVcJgV|IBq#! z$=6idtGej2wNSq>{yymANH@f`-S{>FI34^84{?_@GOk=TueC?ZGvuh))xI45OY9=g z;XO3G%ZZxH9mcTL3=x$E^6dTSv-rG<8SM{Op4UVfC%>z<#(!a9L*`2Jp?a^t{l=Nt zE@nS>hu$Uz==BKA4dpzrNA$mr;Z&OWS04}iS9L+34xes9X3rzYB{WADXB^D0a1N4| zDECQ-u-<8^>+JmIon=V(s*%pCDH z@>0{OoNhL&M=G3D*Eqhp>n+QVyoHTthQ)-+^wlR0&bK~Kc<)n4-Pvv5zph%9YzhB1 z%weUCiyU0qvuvVgchA>mhje!`@AL7GTeC(Nb}b@o@uBzY_oxlDrP@FDGAeKC)@vQW zymEz@>N>BwYhW8fude;3EK+{)WapS7621Db&SD+bf~Qtge)b*8soVLKv}1OdcGNn0 zrg^o=HMET6Z`v)Q;2_q`*^R@&WqW~hDd{=xB~XPS0K)YxCVOK;!!q6yyv-3xpzUzgVYC_s1Y(`z>v>?xYTjwIHv9Osiw+S$Cl^9cP~!TFTrZdoqF%GK39y&yx8!FsV;9K zU0|>O7;YZua{gy##Dsik-%k4wBg%Yn%~Kx(#r1lC3!WZ!kKNXmAENWrE$ieTg<^7D z5`9{V{pFzvaygT_5>Db$%VFT(SzO%(?}_y8k`)CQ+P3~I*~?^6UlzMcT-i0vxvD<3 zF2pTqU*j~)En4&-Hg__Y=%A|YsH=vD8%zcbsf~1J_gUUZK5Jyjby)PWn!VnszaBaa{CU5!S7^PkQ13f|MdD08-@SFj$X{Q) zJw8myl1m=;ULQKjK0$x@S8V)}*kR^my0GqS#U7Whsvp_|j+K&5y6*NbZwiQ%zWV&C z9<1H!)(f8tmw&&ZtCiClTPdXZJA?DZrIqvtMsFJlZ2=tiH;z$dZ)vEzvrfWX^X@c08oVctlRNZ->YpI|evLMNqZ3S5tx2w{ z%iqG!WJh!@1g->!N*Xd|g~d>L_jf1{R^j+#lW}Y!Ty| z9?E}QSyKGMC%6GoTJmFd`Lp7r55AnLu5DF`a9GzkyX4KM{0F+>_Du>CtryD~Wwb5N zcEln%^?om$lH-Fp{bqV(!PUd!j<(@tT@s96{{J(7d zR9?-MCReq!HLrH5zqoXSCYcDfYghR~yz2DSn&bMn+kbM%@iXdlWnumPz&YR|-@TX$48`-RYpKhY#oFbHr_#N4QgCB(g4iQ`d8b#PVf{{DgFZXz z$2iQjZY+Gz%%j}!eWLKAZn-z}!@=bt=2d?S^<@K{&)CcX`YJ&lZYF)=(Dt3^(2TmGYp-~1H--d+!-7H_|sGeV`VFq(czY~k<8K34HF!*oo3_n z^>!znxylWVO*5*}=G@P9ty(lIC6DzrbYi^g0v`nke ziy8LaYd?Q(YuaMkY<^+!m#*TjsK=@<)IX{l+-%_v*F`zNwX{DVRpaid@l-TfB<$pJ zh<|O(xxa)(jt|wx=?8XuH50j^T((UsO;t#un7m7!)UUPyTMI6dpQOa92GSvvg&Jnw z%Z&oPZTX<9IErs4))DJzC-V?1CfKr>F_P92d5Wfi+Dm($%i`YH`nnI`^2GYe56F=R zRbwo}v_-a8nxj0FT7dgRG-Xd`a~&>)oxeB2*r2QsXy|~9#CosYqj5)!O z=qFE5E%Cv05L`cgoNz{bDfb~2>NI^_KbhBQ5#K~qFp|t(awfHrnra@en`s$kE`WCW ze*80PxW13}nzfDX0YBNc*|ykao%mSvag^10@-vCCow8j}N8s+}vqS~iiTY{sv_Q)W zOC#Zl;~+ZTu|PXq`_r7oJCnn>N2;#cc5*td+Jp2q^A1e_znu5ib(GpE*)W*8NNuuh zu{25hPz}2lMU!~yq$Ku`WBbXNAdfW`xv!iIdxI>(psONt8An@NKcf1 z>6YYaa;5SOMu0ULeS$hfy`G=V>*&Se zYiT=OMfRYcTPa(eYL)GpZ7IE-%%b{JE$Q9nT^OwK8R}Kx@M(qHdmxtDGjmxjgiLetehq^eTo zYU{2&Yg=kV+;jRnOjff*DaB(%-9wspTs(-!njP=9R&`9f!PbcHtp2XScxjj?`4?4D{rPgT{%4*;!z2a^I+cdo_ZMlV(UX~zB zuC1Q73%Q9dR-LqrwVf2B<^IqaclGttCX>_2hhmBBByARcaMi+NYNGI6wU_G8?@|A< zz2Nq6GXGP*97u369cRw7OtW>MY5tY4oN~|)rI)E>&1r6@E#BrLhw2<8JyAn>(H6VQ z{8>IjoykuU|5ZLJ^9e1Ls`@5Gfw=;Y(dX(@~PNi86! zn#Wk)S|D%LO~yKqjJu^C<8vaObG3$g-{vmxN2LYC401Ag1B0pt=)Vcosyo7Qk;6P0 z04iLxW{;4e87d$pTzLyDFa`$OFVJg+6ByrVfLtu)Kv!kIGJ+4|W?MVkuJYMph#W!s z&=#+|>M24f_gy)~2YX6fvdCgvIH$VBEf*fxXJSmf=9sDbozet2TTTU}@i|-`@RElr zP2fTp2v>#13p!y9KSzEk=`q7^zBE^%xo>gJJ~9Qqx=rP#$dftLLP^=E!DP6Y;$KtMUql>P&z6nP z&t~#}fv@%o<~3Kr?=ard#mTHt{4&u8reI`)OMrx;rLp#+WxusrTqEy?tuXJOGrfw= z5FEuoK0v6%7*pfv&Tt2DMROQ4;++&Hs+R#Xd;>m#f$*_Yg>5AFRB)0wY`+|sNjxWC zXgQ&!U7-*HViiBBui}hRHd~pmTdrH8Z2kG=a)L^sX44~7w=8dL{pkNxqv2BA_q_@8 z!ux{+jNA5))I;(H%b^+ftG314rc84a>YeSoY}UR6g&5}n!C>6$Jlr}{xGgRuE%I1- zHmsudk=f=l%L5xw?}Y8)Rs|8Qspn*<1$V*G`)nR^3#BWWL-Zl+$c>zWJJA{u|6;_O zWp+iFm!TH~{8P&f%L(f~{)F5_^+k74zgu-qrf?h_hsV{2oFVnoV>UXl9j1vf(pTl3 z(-@_-Fj{cI=ogOCP`I2+!^q-yBu_b%YN>mxYQ(**jRQRGcn0aK|gZVl&# z@jw4j9ibyhiSLem`byVj>Nw?rkSl1!R{|0QK2VrTtb{}O>jEto*!6=$6i;ake%pM= zI@%I%t+B>&KGG2wqrYVT9r$BJmTbNpV;f9TSAY@HH>njj7ld##9qP#+q^nApa)D&P z6jgW0kDti@C*2m$fi-%)yg{DIE#?mhFQrh24T=msh`Y)Y(2%_3I-Bsq$dypME_~vh z_|E(xp;9&oLtvbGyR-mvM3t!k6)#M-ey|*}y7C3WA~~GMq&N8ZS)<7q*(g=YD~XN7 z7eWsQ!D44C-<$6zWC{JGuF3)&X#xpHzD}&Axe(Wo z5z>5VCFXBB<}gFli+w-_IUDX%97H?8m&dhDLVH~=;;|U0jFB%1XZfGPJ?mj{r#e`A zCIm`d!DIDAjG`G%KgS(9LH1+i9r9PnPdv_h2$d1^P%TuK!C58;OjTZNS46p{;!43+bMq{+E zT_Td|#DVfEdAhhv8UXz5!oZ>T_ry{1Xu^e<4{L}cbZgTI@wwpe#-K>zT4BAk($qnw z>)b#=ZN#-C#Jb;NQ;u1dFY)%KXP?K$_~k-C4q0Swc7{oiXhps02v)7VR_jT zD^%5*7RqRH5=M?3Cm+XtFC;gHKTK-uI#BcLHYvMwHqMb)M;pat`6}^G`Z=XNXk4>b z9-+GOkO6Z_e5CTyB(@-e#cq;a$KrM5 z3dP#gR~}q3nVi~KEhiO*!-K?3utDDEFb*z(#bq4+ya5};47s1}RG{!}fo7p)k5K4{i#gKw7EM-qs63_l zbsuRzbq}F~X%?7B)NT>TaWKbWiFwKzmlFjJZ9bd)&6 zjdb-UL#P$tlsxnGFyQ7@$*0;HJA}*o#j!$oXcEX(&KA+qHpU6;)keb?;ufJBnJ671 z2PNF2+Z`|EfQXu6e*! z$|o=;!gh?t+)8LpZii2$LV5kURR*mGLi}1n7_`#Gc+y$$pWM$OLd}SCnPn7dCz#aAdbupv zlNhCeUkAeR^6YP$Y*~s^ex7b0+(LI1-K4*%6a2!!{mL|@Ey$NNuoAA4?ZFPI0^G+j z+X(wBZbcDVz0&^0kJ?I0nbflp?~@EVO7q27^J_3!Y-*XN4EG->`I;9-dy-DHb#@+JKoO@-qDuWoHG6wF`SP4(Mw;ZGdgB7Kb_mPqUQ{WY4F8NxL++Pb5 z>*aw3suNUiYACR|ht=$a4EC)h#6&n%HT7LDyyNNv%yI_kMY^|HF4ci`WQDq|Gz_!d zj8g7PQ?rYx{~GR+k{yg5ywZe=q=u2t#Ew2C2Gfiv*~WGR@LQn@5;!Z@bg`Y!0(2%NX25#b<*=!Y>P zRFG1Vb6>jc!nig2q*a88YE2UIAmRy#B)fkyHp<~9>l&(atZk$kxmEpUz`yRAn1yk8 zMY*#iC^b?e@LJ)y6y?6qr27;I!9n|Ct*(42@r1g7tJglNE^t)igPhH04My17Baeb* zN|~IBGoR%cjbSEyBzwI53L?l$+O_-&Wdsb-tKYO0P7B+~81GZIPU_|`U1_CW3&O$&fswttr_A+XipO2s4ZLA?iSF z8;o-O5G=MF@SM#}^$sTU{Y2@8(>IKrxR`xPHI&t|KgP?yD1}zeQ_lkx(h)if{sn^I z9+)D{xe`b%2UF?#p7)8L1^2X3{4eonv)jNbZ?_~7$MW~kotg?<@0$IVr8XaGZi7-# z8goopZXF>_2_J_&dmn|WG|ML>NAMUv_t|ZgzAomB;Jvn`xQe_@jp4t>4Rbx9 z!YJIzlj<8_tGY9}6Yphp5m$vV%3;19Z-=p`Tacf6Z;@9@ZTX%`DcMC};I8m=>nZIZ zF3fWxM(};8^(>VE?(q<>b1C_szy=|hZt{LE?w(sIZk61kCDM}VL~Yi0CoT{L#9h-U zZm(m!oZwPaweO3)=D%P^sDZtHEFtVQn3hd;m-^&x(Ds8(Kix77BX++VM;?JTc#3RE zIm6BH)SbC9$GtAjqzi~hO^A3Bydb;7CKSef;WpT`m|K1K!!^ol$0zhM-hn8*xj~At z5u%NYgFy}IEA`29Wt*+5-~bsy(cuo9W%B@=ux?F&Hx*?3CJ*9U5d+E1VO{Yx4yx(o zhML*twT}I9XQqo|nZHt?sd(%7fxj*_1NQO(d78BMK^ssCx0*l0BYc6o0Ys&I6#IcG zunpl)iDZ(zpK7BVc_$E^bUrYu?tnP%A(E$pCK=y>JzO8F7JkuDm}?8cZ`wkc{^eBG zN-WlKwcSKyn=6ie+r@uB@!4}Xm?HEPK1d7dIpKP(mqdutP@UZ5J~=CJqWWahDCN5{ z3MT!S0v=`dpw+d3@P_kY{Jvr`up^$r%8&*a)ouxVMibyjq93`)V=(#g?pJ=8Do&0N zJ1gJJC#ks>qaZ_HFg$815Hiq4=#!UNR6 zl#3!mI27)0$F>;i!A{cpvx`23vzv+%*xKwa48QOUQ~%iyMzy37YRh*)8=5Xaqbj$e zDb>eOUxzfbc4H2Dv8Wmi9IeLJy0doe{Mo;!hqGG;C$Jx4s*GB0IJ30yB$FRr%~)qO zMEB!+p*7hnks<8}o=+;ez2QBYq^-fvSF@UPZtUKl{_LB82-emskxl&O$aH9SkXhVb zVRFYuqNnO1Xn4{pJpRMz)tQ@!e)JkGEi6XYp311}NIl!WyBC`o9mGCWN3mb88`y@U znlU$)@57s&0%p?#8cluWg|6)HhBAAvLBATGMyFalLQeDYkfAGwmfh2_UFtm8tEGXg zoD<3Rk2kQF$YSH|4J(FBoj0e!t* zj&5Bf*|UrzyE4v)-FCV$Yb}amt33>COP|HeEAJZSpDB^3|EWI6=iWqAo4o?rT|a=X zyQd)Y?QFE8O&K!kNEY>TWCOp{#~jbWY|jo+?3Ri+)+FT^uk4?~)R;1vGc_)#$%A&N z?}CMB&+gsGb;MOPt=>x%D-v(tB?ea)|+bLXF;U7f$8*s~UtI#bQkk6hW#Cj!`4XCm0%JrmjI zhaVY(2X|xI^5>b#WQ94iGzxjPpNhT)?ZA3?38m7RsPDn==vy}l{kmz#RwjG0%9TKt zDvrcI1~%*J0A`VJhq+N_kGgMYi7M=eq9#$Rkwf|+vnE;2{A^2`Iz#^}`JPH3Cg%s(<%kaZO0O}m4lc4wpQ zmY*oAEnx4*JF;h%)@O(0hOj?I#Iv65yEC^gW-x`nXygzcjT)?&h#c)!pl%np<9S>{ zN!=b}d3;6W904^hQnQo$y0b~$0@!|o!r2ph4Xjc3!FZ;oClh`pjaj(f8x5J<2i+XG z3iY{v2>-r`Sl2hmWmyU8<|m_^Pc>&A9Z1d1+Qa{27Y1^r#hg2k4B*d7sjHWXghkf`U)zp{~GJ^Pqh4i zgx&<$u?c}5tZ!KW+o~pl-MKlDeOEkznKSPZbI8XLuQh`-#))W--Fh^|q6 zYn0aWCn}{xw0eb(9lXhdeU=o!ZhaoXHiPcA)vT@$k6j%;U-18K?eQEcbb4w!|u(1V`nQ?@%G!>a&HzSaGSbro8UVuKm+KJd>7tw~D zkFgIaMA5S){J$MbgnD8b2C!qtHe>ZfB8&YhzHSPWl%L8h>!C$QuC+wLgQuX!xf{^I zv&V4^xr-_Xe#SOchitvn?B%;|f9zMe62Tt1mWXX>JOjHtWS%8CpoR70(71Q~kX5w^ zfh{}G%?JUTos12sAH3F)`hU>#DicgG`jFH0{h!R*oKnvy6wd4cOLtVbkzI%SL9k-gV#pQj(g{d zb-%$M|GUjAjvW?k$FzPumTAqLVtmUA8DdXUG-uuzGva!w%YXcxsU$Vy~){p-S*zwBfZzg00S;~Jxguf4IKU4|A-*oS?{H8dgh1-6MI z9LFT=OYE?}_hbiM4rJBCBLCR`S;mujQMrbBb>=m*QRRelq!_F}L(s4GEAe~|V!xAy z{l;f>%g>DMO3fxsb7d>b8nSKq|K~q_9m1Kwj(f5HEyaE;6n}Rhj={^&Z~Z+Ub`_;Z zK0^nF7NGQlJl1D5&KF!+r+I$t_<%5WcS-`w9{Xne)qW$x%(XF(8b=h%Nd(Bb)eu=Cvl z@VuL`cRnYu=X`ybgJ(A|>Q|p|9^r$ow``B&-AwGWH=}ivPNJ>P?_&M?gzlAB;yjGP ze#3>0ec6D0*gBj&eJlaT&;UkSm4owVS0uLy!9KDp&fQib-{iwMmR`hu=q_qi^Bwze z3Fp=-*0|T1g?Rz&^%LQ&EC8hl9_h~BSl*EJI~j&!K|C90BbXs_2Gda=fMaAI zG{AE<&NVlopBMI{kJaaJJh_j$zIlW0bSOfn`tdj(=vnb}eVjXov4?H(?518O;ng&Is2BP%LTj9hnS0a5Azaz%P;$5L&v5%;~cO7 z8yOPLrXNhe^SEYQd~-4LVvz>t2?=P3JPPj}wxHzNQ#kJ4#d#<8KdZl>`OB(se4uc? z>x^|MfNj?(9OtibY?tNs%vJpsrtgAErrG95tbgP2UTY1SxaT0=%Unm_k3UB#w|*ei z5((#kI-GC0v#p2wv$1EJ;k`%#w*ODYO+{Cj!#01szZ!%VuAhsD&{fzEZ^O3qd;jth z+d?UVT}155)mZMXSY`n@hi=Xq(irw)qadc=pe=Y0l*_F0@WyiLjD6(_v@Kyb{(T4u@A&ls$D3&cXGr!T%Yxx5sKq?{Ga^)SNmp+>xiRFqggIE_IATD zY#FxY{WyMJN9&}Qc;8oyik8VZpR;Fg`FXRy8aKkSkHk4(BF^RiW{hFinC%u7j(O34 zp8wyN)o71qFZz7$3iji#ussx^;XiDsPo$0=GTEIyS<;ZbvOj{2S)9o3@OQv*XDQzM zWHWR2xnN&sKqV6_J;|~ z!Ix*4(Jv$h=Y(ip>>!*wEx~#Gel)J_)2Cu9`0jx+q8$C1Bc)A}xGmbN=(M{4WgKT;Q5xPh-9XzD@mZXmV%`{$6-!gGSj}5=qzh1-;168ay_&1pO zXDt(_b~RS7cxJ$HKXqo1XBr-Fs?)EQX&B!G(3h>Jg-!oFQww=rJQ};$Jj^(jrAhF{`m}lH?`0Grm6Q&9ZSXI zN?p6LC^gjUKP>N7#_R6$jpaS!jFBP1#{b4>jE{3$81dQ~mKHuq#IiSboKG50wdi78 zG{Ine`Qn8E=jR5OW%msGng{$@S8Ok7SO#ffIeSun&++^5y{W(F@_X%TTfI)*sH(>6 zkd}IQ+||_Iy7>9rJOkD_!)Z=qi%Y@|GONK#j4aU(!1{wOG+;k%(0vF@(S10Yi0#8rT>oSWmdo!oNyE>( zqpf$~_c#-O%jR+Jb!<7hN(;YIKMl*vh~uXb%hHJbumS&%*MUqs`}!Te{#wf0)KS0hliK8v7LR+qp?XD! zwAH3TzsG=eb7IOWk52}CA0w7w;%~iQG$A$h+`2)A-*)(W9!1Oij8U2}tXp}B*wzgA zy#|vsO<=Ox+L&ukEzGKuRwn(vl?jk6%*^X%=F>0>bNIc9X@_ChXezjv?pRF}p*&m^%}-jGSY`V{&GC z_iTdwWWeveA`{ecn5+YQ8kjzhP^YliWzhTDC2z_Uy?ilt8{~pmHKcFYzn;a8NnIY*H$S0B1X}9 z$_6<4@r>e&zCOhRog*LjRhKC3R86HI`Ln7>*hIF`59R}u?zYzIXxaqcVZMiB$}xE_ zI0BzeD+jF=Kg`$LRq2Y~Gru58rEOrXbX|EYHUev0@`d5rB>Fx50yAL^wwo%^8Ou$L zwFi{Hh+B2Ra;k$?6QMfOVwTbo?xfB`1R|fTl@HRf!a%vJ6p5=CFG&+rsYC(|KrFud zT-a9GitDwONn0fzqq8oP90Uj_5!FIlxcd4DDN26LLt>q7ki68EshK2igC6`!unmyl z3>-qZ!6@RV@>xzI^m0Raz7i*`7AnCi={#`TI1<-jBq=qr7sf|^K=fBGiT8+eRt>JF z*iUSrN^w0wzpO)=F18G@Rnz6w0sJ`mO7$t{aO-z5Mbo~tC)eNN1;e>8v0LS-vNBso zIFGzmoFGM&9;%okj<++s)>n0fzxaC4S8^4K?APj7XYYAJT7HOSL;%s=GD`gez9V|V zP*s>FTI&l%T`4?5r+``JbCi~QK^e3$F$9d&R20W4`%6t2A3M({*YsF}F?)$Q%38M? zhaYy!xTR$#ZR_%aN}ih|Y2S+XvZ$UPqnA=g!?oKqitsWiRq0EaRRM zCnRUFRE`#x*0I6YtleNoVHPnpQx9fyT`+sh4O0RM)Ml=stqJL(?m%XX>6DGg7q(-( zr_CT3-jXKZ)1_pk9ME!KT=z3l+7FdQpNU=}I@y`7sx}Mh++gKzE|nH=o!VpiyOT!R zD7sfsx=!zI*|pHLwcJt$N8Qw&6sCV;eZsV5@R#yID8$@>My|Q-C~+G8XmFFL&~%eY zB0@ecyNF}pGu*XZ0Qu!vq5)T+bimx7O>j-peDF7Br0GQ0fvsZ2%Sbl{4yQMmwnUv* zf|Q1Kn9m&yQyo=1sgComzt0fAmngEtma6&9n5Sy9FkE_O+bj&kd=8l|Ingh1rQ)E8wDI2c@>8Ex$C(Vz*cclJ9D7 zna;#qAU^Ul;Ciu6KgPEs zc7gtNAyU#Cd+NNn*XAY#U^Mw#p5uVTeRbZ;&2!tL8~RBG-!U$>k2>f?Uurh405nQQ zd4QAz2Z*DjZP21zkm{uQ7?t&d)Qjk+e9>M|u97j~(}nHf2g*B=$HW1^t!}Z@j5sg; zOL&MW<(axC>Q%~IdJC=?9ZjwRoB3aImb4E#Dl6$c(F<1<+=U(gx+gEiXxr0e-aXYb z`0EpRE-Kr)AN0UH_V4NR;t!IV>o0qn{Hg~FLDEz8JlhA_NDV!8lv)M7_%h;&tdpD5 zPhlFaFiw%;z$w~O<4HJ>8f+zb@`KkG-o(j4+DzF49MROb%#jz0-5fj8*W?jZr@?6$ zBs=RS3HQ`GND!iQS=$4&)FepGZ~@)uaiK>ehY)c96x9cSY&{{}!K|rOU_Z#fEI*>$ z9QrOR0#}s+FjiScY`}D;4Z%#91)83Um0gJOKn9%XBs`LqlboD}`C}j85d{&GtRY}A z9j@5jr!-TeGDQKlf}&U{PF2EdlgT}`uHchx4Hc%&#oRBf)YWv2kcelnzsdsbaa8C5 zCoQO;8z^aD1NcNflvMCvTvb$#PwGnL3Eb3Y-zY~BGY!XJ3|>6G-M?9u!F7zOnhvMX zGp)afwemkt%*%cSj!!5S$%fJ;P%sudp#(b6QzmwaPAq6?EdVN|l(qjO=9V&vxV zKe4oQFi%XEL#TXdfTAI)_Q+iPAw5~lpv5GM`Ft!4PU{& zLL*`=0Kkn}gV~-sQd%NU&(<_lo;i65Z{$Qx7_9$dmfgy_#r)H%QBDouVDTHZA;uju z5ucIzfl1UQWukoQ`DUV!AAqrdFsmLk!B}dea+>}kuU7u8cTePmhzDN&z!7T$V~-}rRN~P!SR7zMI?AAl+gV| zZ~H{~8~CDG2hzbwb)?kD`82VqDV|Z}M)9EPt$jZwQNL0Nbr8XAV8&cdjg2bPcu5BG?to$qG z@$1V~b)EPJ+;QcQww-vs?3b8G7iRV((urjGxNy_5QNB^5s_UkHqaA9eI8L@^I3w>C{cAk?t!ay%UJ- zi7Br~Cl*3KhVl3AMidM;&nl(Nky)aF!9RRO?G5mgTqs|`xXUAKggivtrP>J&WoA}4 z7n4L2J-$(d?oH%N@km*u=Sm6Bp=yxqBj2*Ul4ogiFwbHM|JbULC-`i28*S<)Z0G&B z-f&eNt|g3<7IM{<&SD{a7R7?1m|&F_xddRW`l<>M-^X-Wm(zPZk{ zmR5n;Qi&}eQ$eDJvR-9% zQVzl-AdEX`cZITfkVC^f2(uyCAJsA{^y&FUM{T*97OVPm3?kX3Sh?SQ)T zFbTfbj*t?F;npRvNG3Cyaz?sB@{&#q0g$lj#dW5wa-m{hIfsrUBEfuPH*qiQtzLuc zk`shOk+C2|>R>i$V>I>XT`)nh*zPM!Y{$u)aQ4CVjrEqxx7$`bI-*XM&2i*CP3$r9ZCQ<#AQ$qFA zeNW!#+VdI85IVf}ov@RtTX>YR=#b`3Y|l_$QcOY$CDBDL_8XH5Q`P)0=O$=*WA(8M73s$n}~#VjDfh@8(_$ z=P+jYLHW7T6Qs+#E}oMAk`G`W`1evYxI^MfGg-FwCOV1>&AnrTGjF*}A=?vuOi%Eg zZb~&`2A^AZhP$A>z_;ehxt{V?rJ*z|-&^yL944<&y)GSC;6?O`9?Q+99F&f-pEVwH zmOa4z5x{N-m!#>fEWq6Wd!*->X}ng-5c-H41%Gjo`j%?cjghu9@>+E(cnh=@*UHgy zQ-#M&@=Gxj&LAREnnzHWDe##1888F9!du8)#fNZ@(nYY?E()2lD;cDm#0aHpi6<>G zYd*^JaJ4dK^$>e2YWW#I4`<` zeIyg?Q$Lr+oS8KtWT38)Uiy-9*oqPQ3+PsW0BmbkCAgrP&0rW%x@Om{sa?cnn#8N%ManTnv zCk;Y#g4T9|^MuAWo4iDRsOm3wG;`ujc{x}GD<~~>?$h%(OSDUMLy5uWNZ*h0``^6~ zaCya4d3D`(`k}ldbGq3{JL#vV?J@OEb=+~1U3jfi`FG1mzOjx0c9IQOkM993mX%6Q z^lhR)7y$3$PLiI=9XUa9g8RW6ak(^0*pHbu{U{aLU-gxo2<~An^kJH=Co-j-pgs7Z z=%}``8BSC8;N5{g?D@V-TxVHozAXol$h3~UM~%>WJrHLt$(Zx>7HH{mGQpb9ooo zonUF3s*%(m=93#h04#tri7CW%A;-ENIm<&_%I$xBc66ZqPzxSrPp4uPJS|F9!|%g_oO1mkfh;5XF~JHpNuD6s3f?Kh=+NE6W$l}l45Pgr2oV)uwG0ebE5tDz^Zw+QaefTlRqkJ0I>9> zbKkI<&zgniM|@k!UUAV@3iVu)>TWwlfCB^(w1H|yK2UtEDbcYwgYSfU*1YT%b3k)a zuF!l|jgrbW`SN|~5~<LAQNAE8B0G|8I{ZU*!+d%qF`X=wCxa;L(?jVYI7hjnG=}%&BZLi(P`+TE@ySb0 zC|ijHs*`HAazj~7{S==mv1A+FRVu7@OykZ4yK{R~FBSV*KM`BRtG4NuY)3D7Z}U9) zg*XGwY&nu#fqg`_ZMtR-)lLD#YRvLjsIMn123M$XqKEAi;ZMv`Sd)8uRo!gmC>TKx zru4cGT&8Uu@rm~(kBFUM1Lyy=doX@de9MkxP2E0+Yr-MRIex76Fg$75C!VQu`n=12 z1wUT>4AAsNDIt3l_<^Mq4jNkxSqIFux}Jhef||MXQrm1*nrb*`u1pb!sNx8Lucqb* zJ&AANl02GkDqp%1OuVO!N&>Fho*`u_$A#UP1#$yutCY&Ulq|ekSt-3&R>DYGhxZCE zDa?m4?SZtAnyW0(ZPy~eh!ezBTsvEDWsr2HwiUg+I?*nfpDwjG)dlwsYj359DGl2w zlx~8uPF_V;$OE-o1QDKs{kfjj<~3W@AHm31x3uT@CDwt|OVMEVRoxm@&NGpn442MLR9gK<^)2)Ehldjg5yb4-H%IB4%6IIu?9f*CYtYwW;7t%L8(xFBb5 zrzQ@J%8j7q$)v?$CY)ncnTx{TSf2^FF;(hgC)JqDUQL=4Zj}TzgzBgEeKTA(VxC}) zI)FN-e3ZjDU!6JUILFpq(hdhBHJi=TwLKj&g&xX4Iz^lQv6qAjk2nqwT}2u^X}eOp zVU|VICGoh`KXNhOhL_dz%@?(OYiYepO_X|{WpK_vvd+|o+h5v;SguaQ=yaR8B;80$ zGS!cu=nXGAiQ9kH5+U`2JeScWQiqVvL@><6Rl$ozC(=QAL73qS<+-E1)KzMy8~N83 zYgf%3GMAql8lYMRFPoRdK9i@osjWpd1Er(F72=mXN-J;`a5M*O62?V52~&yo2N!r6sw0)n~@VmJ;!AWl9JLMsDCAiAv6x9t*BzGv=gPZCc-Fexj z`B?Is$>OQjpB_SmibLUS_#U%2-k^PL_beK)sy|fq1M5kaEH974Z}VKJW0l*9W~vG1 zB$IEG?VnFHU_FlWjZ77_Tj6KWo=V1?W&zf2IEQeQ=Uc?ur(zCxY_U17E^vK2!>=4X zS(Ex0Rni*%u8ytF_mR71OZZ>r$|>CX3*>X)XEK2y})Nt1VxL*}pG>Q!=< zmHUt*yrK_6Qc1GgM;@*=TUciz!K&t5V z9x171^-sa0b~8T)zr`J= znl$>SW{P&9X7~R{I_tP9viFalsXMpnMg&B_!d4XJUNILH(N))417mGnb?vTI*Y0jz zyG60P6AKiT?zlB~`kdeS?(a{1UAV){nKN^q^L*ZKun@1MQ^|bnQFg&d_6@Y~pY>~< zZZZ-6Ry&M55}YbdZ#|w5B3$T_x=7CQI%>bl?x}c>DYJ_4mX35?Qs#l-@*Z;Tr@QDm z_mZlJsUv5GrsFJa0;%DTvr4rlC(o194`=5zAeqi(;qD#ENcuwQ8Sbz0U3{vNn^#Y0 z$S)RJXm7$@Aeh$UvATw|zj72n^oQ+{ z9Ox16TKi=LvBl6r4kSmAC*cn|!h9Apd}m+C#?|3Sd4o8SE#O|d^zJpv4Ec=EoOovL zQxyd}sa>?U1eKXk*+N%l)SCjIk@6k5pY5Ww74|b>rq;EJ4HZR_^QxwvvEAEpsSYCH zwbt`6=8?6steEV)hdmrYYxV_ASBhi^CVc#*TsRPVB^$qjgJ#JmwM6 zi8-of;vRejozX?elhF}nwvhDB{CcO@mt+NljMG>CWDLcvwjdcmO8^v zLQ}Oaa2Uilok7NB*`$Vau5i9`uF+e&M6oFibVrtbJI$V=LpMvRHqP{x zoH=UxkKr1w$VQE&>rywUu{h`Qb@_YApGrcJ^gMYdV?%q0t%!ep+^=ay>CQ|U(NHQC<7Rgq)(SG~||gr-OAOtB$cO@-)wp>$|)>3OxW^Py*q zZ-HDcwA7!~&ZYmL2E%-H59Q@pFL#WYSU;e2g8HFsrQ(Jyw7mjvp#9t>G~D!p9HhM} zHBg?gG<6E|6Z#2zDdP#6I1LNv&td==#x$fC>zCP{laUn&)&-MGD`6psmDPfD$LS|$ zG!NlD*Ldm%V(c4Ul~h8tU4JYF>TjU^W~)|U_~ z-4DUvAYD&u-0}d*lh1>aVkdGncflo4pNIx2e@9@439A$6mqH3LSh)r+i3Q|9*7s$_ zi!AIsK~k_Z5sWk+lx<`~r2_I&F6Lmwv3KELXoIrr?cYzPu|KGVPETDGnaX;&dr2L{ zA7lo$El1OroqxIxYd2EYsg-Q~@5yu@a)h)}8rWdBDHeVMvTeNTtUJJ?82j;lYtl)a z)@l^HSvp59)H>zmr1@$-Sl5HopUcI@SLKLcQh300KW>rsf?=bDhod4DybLbPWCowl}F!xKd zzh%2nh7Hvp#3=GnMU?QX=_tKKO0_kFQ`t`9(hvD4DLxt7MDplC#QT6hq(9X@sFV4W z#|Lw|La`F_a`U2s!nK%xx>urCZ&84nPtD+tcKkRkDH?_Q-#g=y?vtXzB1Qi z9nm>(jNF7efl}ebuPquqz-z5R!fk$+qWE5OhGKqoTgpUwxS?92Ue)Opg|0;oP%_~} z`5H)|mi<1QJ`SJ4r~08DZf8S&rqV{qV#a_-t|M_;{)QyoPFFECR2eR;$5n-=;{A?E z@)vofc8Z+W$e)-Q{(*U=ZlXVj_hM?xnfz&~$RmnfLY31A^iR(;5|Vk^Y>!EJkFGA$ z{9F_nB{U~f=puC2FpmBxlgtX&zlP)Z?Qb@FPjgr`vcs!h`J9&SdTk)CKYLKpAaEqV zo!%=nbT&irh6mgyL^s@tT~Qx}`6Zu7Z|zZaWF& zzJVW-;7nkQ4f-%V$PgOQt?Z{Xv9y)A=CulZFlR7VBn!?#4u)kKcdr%Nb#SdNQ2nAE zjZ#%#w5Zxcqv+4*MoIOd4HjzqkjIrcC5=9+oBQnmq?Kx7O7n8f6U_}&Ue%?^8>NwQ z%vMV2YV`WMev)yT!54L^>K?LEeCRopKBs{^`4XZs6tC?`KZ4WP37Wn{i-3v7o5~Hg z`tuE@w9wOhmA*|iLKl8^*JS!0sEFm?mN}gsIS){@X%JKX)dgmh-=L=%QlW=Dn^+@g zmCMRrV;B0Mb1uol{SFVWA+`z_@OZz+)4GF9m&v1be&@EZtgbV;wz8!uQkqOTn4|TGHN++w3;kUgmivsOwc+~5WvKlYcK+1opp>z(9! zu+{Rz{ZP6e8x4Y`Sob{VChDpAlsLO;B>O}spvkTV+BI$6^mM~1vMC*u)kR}gUML%} zy&Qt&^h)DQkC&RsaGFY1T^4@Te|Bvqrzu8v3%_`w3EIyNdZ;DW)=b8&dM;+KE16tp zJVIuGfAG2+k0PSBZ3H$SX9#vlexik5zwNmZbtcAEtbrP)W$Pgxk-E%?0|J? z1(Qv-{BpvE=l@H4M zNuA}+NKfrT_AO#GbwUj#w;^8Q~2#6Mi0$PPQTzxpz`2>Jw%VlL&7U z`=ltji*7b!lOL50!TU0yw%_EY>MWPPLrZjcRZ+!&v&N%kn{+dcSi9rU*m*i!qfzG? z%+zMd3F6>z<_)!3)QVVms0O{9$_Ce0l+kE^SUzfIj)60BHlp#i>&h4Av-<|@YBn-C zFzVAECJCMf@3Ui+Br=|0-HlDle=cP*r9HZj&en8r=t2D(HeGM^ekq22Uyf#|*U>m# znsV8mVz;%qA$8%)>09DS@CT@&r$S2I2;!;VsN9!F#0>Vbp|3Dgt&2`(_9-n@>dI-- zcgqUI9Pw}t z3YzTSD63@B}UlIN@H(|3)MSXGzz<0p#sCW5|2?P28Mw zh6pfp3qCFXD_@eg`h+sOY=0XSa-(ZD9qPL8(TZ&sbhD;?#PH}L?H8(*)NRw!%~~SKMoh<5s;0rCOLK5UVw-=)<;7hIW-! z>aO=hqP}bIXQ$B3*~y(PSm{v>jvBSTm4=mGeLFYkAH`qe^ z$U1SPxLJEiQyV1+n~CQ7c51=>AGi~vb+a`zkZ!qVv4L`$au!o$`g2Z0Q+cB%oYgY* z5RYO(N5wqxl`u!Rq^!c-Bt0F4t`ounyk4)ux%~xj*85U!8k$Oa;|`vS+L+f{gb?|? z+^=vuA4i3FjHh374SAzx&s&W$2JEIIY5U_s7JB%}N0c?nduNLNw&slVmA?jLB2IBQ z*F5IQhZ3%$M(j7tK(BRMtB>lBN)?2r^k2A=|6NXp=RVeJ{}Hy)+K3N)2l$SiXL`Z7 z$vDquWGmYTW{Po}<~Oc8PNR2e8w8T6X547CP<+g-B&RS#sp-lQ{<3UGI<+LW0&@{Ea&PJYS8Ea#~48Q%M`IVJ; zD|DOfPw%UK>+BD}$k(CtH@t_n&J|2=vJKER`uas@HLSH43Kq)S>krv~@mQihH(a#| z4&;>IOG~iB@eJ_OT%>B)B((*54$~JJ=;M?h`p0GWnVhohkY_;~`HA3_VAdXUhpM|Z zA5a6eC+HNq>vf@nR#Vt_PEhX?*1+NP+r zPoAq$aHCo~)szo^3Xkgq+Aw*dbcb&0w{tF3{Uxv1*~_8TKP$hdp2(8G0`1d5N>eIwz&~67T~QVNc%erUv}8Ugn*}xKnG{w~$P5d7WnL24HLw*mLO-YW z)9}eE;%;XaaG6EiH?7i_5B@qTpd;I`)Li`?+dubJCAsIY2Vvvt zpO6>Alq1yvN}S(}`fUp~Xs%YYEIMu&k7xW7UPbo3LX=OcgQ7m;m)TiDmx5Wi?taRv z5#3tZQhPKSZ(J{DX=dMw_Uh>_3ZO?npiEZuU?^bk!y%7?FD-Z z_)Ls)j`2tlACdEYHnT&ymtIMgP@dX7jhFy@DqPk5NQ^Dxg83vkmRScSZa!RYE6BM} zr@cuCPb~MA&1G8c>C&#~me-@o-QcGEUpdfqGo%kU-|()8)pX0<9^?FKD1PVN1?Hlq z?oK`)rClmZ1NQM`(F3VDJ;vP({8c45hq9SWXmS(aL#@_LfXg+jrQO;^TETAA4B$YO zKrF&ti*MzjT7mfNEDxMfzP-gG(1bl75=aq_IKo9OE;kdwrn%LEJKFus_1M;cAMCrD zQJv#ZjG`!q#iL*gnZ+D|Thv@M$kk1pyBow*C^-Iko!hGIfcK=8~tXp z^#X)OGv!$QJCC(wxam*lY@%Vz@ql3a0{M4v(2H^;*xJ=rL;XxML*~{1@qG z6T<^c?uFkgJ@4tav*nbhbD8fcv_5Y;wZ)xaG&&n=W2(y^rj_fN1mCHKuZH$IGw~|F zi3Pl6Xil@kxlu&)xXH-om zIl(!*w1xddolD%mVglh|v^ZOT$u97=B|2B<@2cqQcTe~ETP^g?V+bXvOao3MIvK5e*4&{!y4U-Bhpk&Y@-BjBcHj^(EHuxNM{?OeJ2J5|8CbW-fH|Wzg z%aB;n5FCxnQ#bS9eMy4Oy=8XkXV=;i9_YA_B2-_dVa-E%Wo4-5M9~NC1(Y$HaE{5FniVyiMpt>r68y++HOK_dmkz@v@HC}%S zS3;+U20Dj&4He_%E-sg+7d?z@3kTPX%jhjXu(c&G_`mUM6-v0HZ+O1Jlb zO}-`}A7Y&HRhP}Ls`JR_O>zBLPg78?kT))_mJ!JHv+HCY(>^0td917%Tv4UJVmR)> zXk&Hpf$KoLe!8t~$o`ts;;0ux!fg68+S`O1-toAFJ45>Dduy7yk7%MIC!6g22j0x4 zQ}KlX(hb+??_;RNru-V{s6}?nqQt(&X1~)#XWC}s)$9}7#k#}js+h(2%FipPr!SjP8H*-CUX;{7y1KKPicDr{eETS7LPHyOA*hU zC4DA31ctSGr8Q_jQLn&iI?m@bS+6ESJ3|;o_bhE*ks5KZYI1pY$yEP~ zju2t7KFxVU*F-VGF?pWaS;pnwW6b%QhWeTA6J<;DpA+L9!*VwlPstfpJFn73%y++J z?pFs1-Ru_kYQc|cMYdM9*4P3XR*uy#tr;0yt;q|vf~$1Vw{za9UcdOp@ja{f{BN3K z#f#aLU)1zyooK3|E;aW-7+teaIt;_zR&pEZNw~c(lXKV#$G^e@fm2>8N_ab<*H;MX z((vj-<+HuBjcxRszd4GIDSvRAvO9Snz=+)qQgkfkYR>c26KzjSdz}x1Yky+iI45y& zwWCXurA1=7)Ib++u7318e~35|e3yFUYFN~wL5VvPCTL(){kkifN>yiF(-B+sF9U)u zxejWsyGF2wOkea`m{2^k;zYp;SX-Wr;*5uEO1@LjHNsV}F^=}d~*~_Fe2d#OP=CeSF3K-Jhnr|y5+ue`SIVzRy=3w*Ip^gmd5P5#9HiE_P@0xwDXJzA+9sUfyh z^DQ=u?r(rZfq0rw_>DESr6Y86d8>JdqE{|>*YBpQEHS)5ocPLiG{T!W&O|x*yn*lp zJ*xWmFL~dS;4PwY$qA2Ssnz#c@-g=s-Cpg%^6*>#>Uycum}~Y79x3sLKbh%V6GxI6 zQ;;dQV>xCB_j6u^-|YnaOQ>HsrgH7K6V=n$7=Apns&;B|rPRkSzj7w&U-(5^pW0~{ zMfc-f+H~7Tp{S^YY0u4I=IDMLey)9qRw&cNV38Kx#QK^KU{&mb^3K$&lD^tl_*+&| zXey==`}@q(b<}0jiOTLkfqJTWp>9^@)Mp)NNUi25;ba_c0i(G&1BUUk&xC zN~K8s$dC7lVqdzx^pXSV5v0fx$-T&B9ALQr{RlD)uU^z}KQxbvrrK5UN3!x@WvSx$Sa_xSZPn z*LW}Hnt6uiXHgxTm9S4vuIo>mJ|@t7*my=|i7;adisdWK2{o(ASVy|8D_txO?N54l z2EVuM6UVKKf+m7U>^DJ0^^*PYq;N8H<#7=SXgc+%vLmQA5{GHJkJze-!r9 zjH&zZvAVi0U&5=k+)j1}4{ArBSzpEU0f6@0C)>r?WJtALl49eeJ zFdePZ*QLg?Er_|qkf;)5M&IQ5(MzV~Xp{+pwE zS2cxq)fd7ib(R3x)bOT1<2)XeZm)Uv#=w2YeJe^p2YOKzTjwB~DqOMKgZfZ`PA~D4 zN5}fL;=8G@rB0#`Dzdx4ZG-BWj0$TG>u%^DB8zFG^vWEk`Nv!sGJ-#BU&qntReomF ztCHQud{c5sr-^y@8$d9utCLKVj9 zSNlZLE}}cUV2Bd%9xvrx)wg(O)?l)LNUJ8^oHJ>~bkkbf_JF>1rk9eT*TvajGZl|U zdMqq?Wf&Zo$O*n9#TlhbiTc8Lwp*ql+o|5;Shk_(1>;jR$$rKB#!qkW;jZSZnEA?+ zpG58q{XBYjuo8TRPUlihM-A2TGVEYISNWuD1z4v`f)0sSLQQn}{L<~YuYIOV(>doO z(l}LdaKGx8``+Mn9*ynilw`d6?5bKr2H2O;1H+npf0wt|^NBmvKGvM3JL@>&)Vl?o zce(^`D)Ig!Obx3&V)|D3870pi<)bv;G&`SoW83Z{^x309z2ble)wvqgbWNG%Rfeu$ zmhQ>wKCd#RIqVj7hj_;wcoF|=8;P7ig_?zE4;>LzU)>55A-f3dfE zcTw)aqKX)gTl$S`Ih*4(p|si<{Nq)lQ@$>D9nU1{s%q<9@B}1?L^4CVPzw44?Z=_iss^oZX zp^v(r0#^L)QtZHp>|42gav@HH%?~cU9Bue2R#KTh)7f^yE;<>Ek}hc9(N@<|$6;j% zIbHp#Z=^eAED!GkN15Mv9~Pj`TjmB)?VhiEb@`*sU(9&{YMdmMEiLu3{q8yh{pyDC z`#%Kdwkzly?ycz}Ht@c$6l#Akv3dtR*6VEzWe1MUo?ktVxgQs<^g3kh6Bx{xKU^$v z;lk2$YzrObFX%J;w^p8UEum()iv%D4D}@)cJo!##Ve&qziLol+*X&tnl(}_rOZu77 z5133hl*jfC;$7UaGOoBA>X>U3r~2Lw$juE1sxfC8UV6PF+{VTD32kziJVN;ELa?fo zzYBO4+=8A&EmT*sJF6x?Wth$joB~ zcpmq*<2&a^uAgx|434@XPS>Bt3BTd6iE|DnWuC&loHsl>DnnhBrokZVe6TB*R_R#N zP`WivQ7mMxxra!rna}orK~}NJ^cPvz9q0ACobR~=u4luX=YDL_j`D>>pj=t_P4@F$ ze{Zw&Lrt~&2*Z?7rM(^TL|DXa@=)Xi?}uz6Gn>gkTPiql#rH>llSz1BSjmX z-^Vr_AV)2E+p3^|x%y^db3-=hmuj#fSJPcP zmpNQj=i|e$dga01Vf<4AUghOy$jz#LMK}CZhSz&XboX5t7NmdZ3J%$A+e~=alRR(N zDJ$NfTM{zEa5}q(_6btav)A8pUornsSHSq%S9sd1qGk;3|MeyRm&a*gI$aqu&-_r@ z=haUB>a||nSv)_a@XK}B#rxNHPkf%^JK<5@0qtt9=4d=KhZ`!*^`1}FYFus(aQ5=* z8@1j9yuW$Qr_!htQDk)bxgTg(F&w1nPUhm8c@**xibDEw4IDj8yW0(BXK`st-++EW zGm9+R8@h}1V83_nd&UE3xGq-BaSSv)XW|TRh#13$ii!TQp{~!#&QpwD{sz05?i4nU z=_r5n?5$rG(IsLR9?vad1;0aGNZytvfH?t9wiITw?~D!QjgOyJ%yvJfPI2$~-M$g* z95ZiDf+;qA=q9(|*_Nds&N$NL)jj>=nLtxT7|CC3T>P|F&<19>Avx&2ID{_Mwi2U^ z!^^@PQ^-?tSm`RSs>q$rF)g*u40wR+Uhu@+S{mmck9Hd1*V+E}d{VswD^lT1MQhLa zA);T+$TU9CH_~2jPgFW}STug#>+j)t*madianEEkz$*T%v$G>woaXbwlP}C6qPa+N zE!UQR?>ym}#ElW6!(7@ey2+kN@^(0cKB|O)+R7@WT%Kr;;(gp_0{Zd~#r0yAGyuG& zyJ#Egwlmj+X?!~W3KQ|;L=O-r)?+qtyznt#`hpJEHRq}E8 zT=Dk~M_buh?oxg-pA8pjGw4Y51lU9MVzzNBh!QS{pTz%zso>FQ61D|feN*^@0xMU_ zLEtqplNwFu(F6I*?z+Z)!c&8vP_CSyCu`PfkGsBdg~ToQQR#`CuGxv}$wPGY-J94a z?q=?AX_?^;afaN(8nhjpU0nm5(fHFbrq*5oy3M*vhO6$g!VSS0I7FBwIn`vG?wVm( z%xsruN&7SsoTsYlP2wl+f3J46yHKNA4!) zqGaYIzlom_w#waI(F&vGLU4q>XPD$_=Pu?0gb~tSoDDvsK0woTiH=9kv#x0823M$| zDfr;|K;On=sw;@OBivW^NwSh*{6M{>%9x+7bn&w88L>`Ui3z8%xT|yreP35CF4hhc zLohph75bGZ#Qo008diw?_>Mdfb9fKMM43$3(#YNtKDlr5O@#H5-8>%D(NEK^baivz z<7w)<9L631BDGbQ&qOfKx!&$&uD*OTcYSr3w?os|^w7Bzw+S@j0yKe23hcv1dY(2U zyXJG{?uMFQ_}fw!&mwjgU7)+?`sps<@|Ysm5cgU5U0!QE;hE*U>AL26OGUeb`S;{~ zpKTtEOvTOxuAOpAegk{VaM$pby2}FX2N%gNarclKN=7MF@zppqCe41X5&up<$~{n8 zXW(%Ps7QBKx7syM)VNP_iwdXSBj4x-zpK!(+=bM5Ds@(SOPJV7p|R_pJQ{g_D4`|jJ^OXnb^!nuv_ ztgH?===0X8b=`K2ao^OWD_MpZJfi&!f!I!yE>7ns1x=NX%3Bz-p}wgdUO}xEkBWZq zqxLSuzG3PU-QM}0+V8yXoXLHZHZorgveC!X++}c8uwUGLDVr-rj1D;Fh0Jl%MqK$c z$|=&nd{69aoW~4r(a|-T)495GG2970U;hI5`Svp9;(KeS^O2*cV;Iiu)*PUm$6nyRa@uTF0zE_OdPKBSxt#LVp0R0G}nqC{x z&SQvs5O-5}=kCZSabMh1g$~ir!iPFuIbHTl`#I++cL}Kk{Rl(>Ij*|+f77@dvNvoB z3gnJ1w5Y4tT<$5p5Swcn%kd@}#S_Endd|(RK$pwa);&zFWFMGIh&tM_ADaj zIAmYtp<18n9}sBxohTDyr6uxfcn+N;6R2oXORZs#gDY}lX_%ZQcad+vLDWtS;%=D2 zRUge`G*elDegk8GH!+!Q3GW$VmG=tX3d+0iCX3SDE@w~8I=q+W1c&h1|naoH! znOop(6MMRc@?My@JRJK*cybtbo8Ko47dOadqK7TU07sQo9-kiT}#|O&`_2KmjIx_Y+sj3*^tbAM8@x)GnbnU_bJ%?@i2+=8Cv~ zK(1CCN>iAnwsYsio)8(az4~5yjAr5Q@CUJ6w)+|1hSI6em3(3WZKvCkGsGXlGodPA zlk`flz#ddG89+XD^>e@HUUOfCAUHv@Q4_1x>tDKSD}Na+(j`+*xkTAcz9Z7`N~5<1 z34aPj(r-uy{-UzT-E_2YM>-^RMmg$zeG|9?)us@!l3(s##K%a1+ICb1p-|(fQrs=Z zNEt$J!B@H`>(yWsq(MQ;ct&)IwZv0WDVnEV34X>bV+U}z1q~Z5ycGwl>)-;Wn1*yK zz7codRgbe`e~%5mr$YlXeeSr{xg~zBJ5(M_G-6oxrbg$bp}e(y*g%~4KBC@K$Ez1) zz3?<-7Fwq~mjiHe@SU!bJAPw@iZN&H7# zqwWJ;P4(2H${y?_X`w!sD$FSWB0pk-Gt)Vm`|6Cs)%-vcWjx9jsh~p-Ie=H);rs`8 zj4+#z;WFGh#TqynzLwHtMvYd_ql@Zrd5%z@s0$Cm^9)6e_l}3 z6ndfdS1rKKuNbvGm;fA@8}SAwfiXD&9mT}s!=N*B#r>Keg$WUFaSFFP?jox&he3xT z;)L#E^{Tu}t&My&`wVN;E}#p#FTRooc&$`Yz!fB`CzZp3hmn+ppavyDhCsh{CxXFA)C?K~TG1mn(#Nev1;$82XXdzu=@hpH$Y13Sq+!v=7Au?J(!0& zK?D2(KBHgBiJ%Z?)K601i0kM+?2h-X;*|C|n?NC}qLsQg9!T1zD9kApH2ISth2IFb zQl=^37OAy55$pwZD0V2t22M2rIG%eWEkW%ge+4G=7(T{H@SSuYxhZ^s`S;J%5QS6@ z0MH-=csF-41D(OT_^N_{=GiBiaoTLB3n$O!fDKCHXFP00?o%l=!6ktm=nm5B7YaM| z)7b!_Ej$aZF$Jj6vJI%7SmJ=7j9L&}fR?Dd6izq@bh-(c1a|QeD3#gm*i8Og(_hS? zC$RH@5qw7x*d=w5V2A~%6?TV|V(Q2hunYW#sxKTuKS&qusTc!%BL>4-Kt;`gn>nEh z_=&ZTjZwbCQ>ZYeLYW1V(Q9;xx^kzBvWM=B_nk2^iSF<_Xe0Foeenn&(}{4f0dpgIgB1EPqNlw>9|87b z!N%kOsumnhW}#?lDp(nNj!uD}JTy!tsLh^BOeGs@QoxFe+L&61WO~E>j&i$5G0kOmu0l-b=rF8>_JQs=)7KU4Ag?c(h+5#f^l9}3 zJW;z8u7+A-6_c6EN62S#Yn35f zU2`=fNLZDv7VC%g?8q!b?Y_w{iVUYOg9%D^^m|hdP9o>O@6YrAPXAza4Y3EThZl8m zAot-3Se|`NO5`VqlH{pd%v;3!WTx0k(^0d!Pc6qr?K)+$sSKQDOVkZST$RDr7&~0_ z%nVKsKEP{2K4<~%NX>|L1pCg3vn~hfLUdl~t62=N*Gq|kV%R*iNB0w9Q`1SBPXk>Y zDTL13f(j%;&L=y=VPHG4m9*eoTs8{*gH&H z$CLY00GmoKGA*dl zL{Ir7D6lS5{vb*)1?oG_I|h3YFutTY!bt>l`QBME8~kvzEwPKMNnd=upQBS?c+xS{ zjA#JjxGrQ1u_sus7ztJVfSQ+L8dZ66olxQ*V+ysBJ}e(qp*olGf&GtbWgXsL#19_|Y+D^$f6GEtZF=O!?i6g(JI;)-;? zNWCnLcW)(^p}~aGXam{<=kam!3^o;>wrX)Eb8oveG+nK$`5pAqaHhxBPhI>G7D#WvMqiG+U@Y%pv4G z-5v6ylz~RS4zK0yeL*S1{a=4*?P1+q^T08>vGfB>^4Z9?0(qb7%k$(JWO(bf{1YZd zk!t4QjP!GOK-DRY2$?vIZ7w%JmfA)=di%YEy%yvwF;9Kotvj&@oWcy7%V;P31<&Nq zgcWivIEg+4>){lgo0zPACHlZK9}uci9}8NrPB`nh0M?`IRHVkF zw)wD!T%z0|e2Gl}ssEs6@C>|&T~l{Kr7|8hQW!XK>s&Au`zAWZG=@t_ndn<&2g528 zaRR)vE}UN@Y(*a6I3R(4y<=40H;~X%1K@t5jt@@`rIO(q;!+q#H2!f5<)aAl$LsxIKhA$lBKN~x%0uE2orm3GyI;1$ z^snWx7WomylAH0HTr=1n1fn|++Y=Ya5%gb%nvemgX-!HUz)H z!N3x37B5;Na;ZDBkW+68E1k)KiUcIV)Dit1Xnd-u+$U z9R_u_w8nn2%U|TSkon+)|9N9*LJ3?tuG;Pazq4g>Ii5S~;#bow#J3MP$CR zpoT)B=`x6AqqSjFIerhc6oyhuJbd0oYA$-t=d$S2E=ri-ogb!`qxuxj5tL;$;W~* zIjQ7z+bvdr@8FBtT~Qd(#MJ~G7S~bR$nom2E;i5_uiEe7r24p%SIA9rD1JJmqdDD@ zl&5s7as}rdaGwCQ6Go~RXb$Qi1d35?i~gttq>v{;9rdGf7u7{A&piWmKrc*HnoV+W z9A+*}Ayd&<^(9$`5{a!~H0=o1- z246$Jq|5a0#8cyaY63AkV07tDbF{jn2CAmgTj=CtgZRXjg+MyCiHZizFppOlU=nS72`UCa|AJDDhcgn5lMMS7FmAFoa zIXWmVudecw8aKTysvcKQET*1cJO=ZauV5PLPb@~9Is$bEjj)+#9-4-pkz3R=#MHGW zu$gEBXMtL91l=6oqhhE`RFBZM{f=oo-@)y+v#S{QU1BEA7))W7OFhZ}S>xUv?Eo5n z7JjSP?7S4U9OnWDGP4zL7=#AW7FvD@u#dOBD-aZcqo7MxH*8+LsD1)@>N!-dY*T`% zOtn`2L)Ag&@CDk=XarbHym;Rg#ln8fj7H0(u|yE;1`CBF@Efc}1cATM2v~@jUsLH} zYB3qD9;8gDg&EQi`BJ= zZ{VFakn92vkxivK@DXwd*FaIhT{T_XKR?ac0bCw91*{}~gv__A6?Jjv=YGr^T7xaG z$>6;_SGlA)>Jbb^fQ_1e2?ac?8%?GWk;n&xqikgo(Hr~8&MJkd9$5`)i3!<_-2{IIAy6>rj+m4kXit>I7O1;!!RM*-w>t5M*i)_>9?df8sj)M{qzJrnGZ=z#*VC6O-$d z2TVBjg!V&WGK*Hz)70iD2R+uvg)&56pb8kNqRv zEb!xEi`Ub`mX<>wV2{vuONlIEHn|!9jsVPku8rL@4KW8i!TND`bmG)uC7AskVaZz3 z-12W}H_NAzxtM{y!;;I)bd~@k9p#ZwbmeC>xq^T)|&W6*oE>x|4IOM zzs$w#>+HlK;a(QZW3}}DI?uAF-ww;Q_ZKXI+a6h-cK?ET@HWh()?w#IFn0IESkn$Q z!|siCnEx!b?`7SR*sLG06uoPP-2)>r@B1Ij(LRd#-M1}ICVj-mP-Tf!No(#Mv-RPq zVCyh8+S+VZQ|k`Y&f2+aGwlA@lQ?{4P2#@A{ucI48~oXsmbP^^TY9uUiJ8~;|Ko?} zmvI)ktrk09e6169*S0?G-rzrec*nE#5<4tCoTzOtV}5^(rPiRnmR{Cn|M?%3lNT*u z%5&^OD72jU$BDf}*uT)p&ze9)UgFOI#A2pQxOSu=tGl6+5Hm z-%q_o$uf;p;v9M#8j~07x{H?PMQUCc(KEeM)EX7<_=8PTAO@;lK_G z4fb~US~36D`ni7->z(@vR?L6K9NqDW-`0G`;|P!4j{~tcVi9JxZ^Orb0s8}i_1@V3QOgQIL(GnEV_j3bPGWHH-HC1MlqYUE8HvYis>Mjo z!~QIM{@v&Q^DljV{N3_EuLlP@xAl_v(LX`mbo1}0BGy(U0&8XW&iK5*x94afBgIzQP&dF zJhj+y(H4Jxyd{BHXE`JsvaG1c_;2iN`&fqWD+0ShjM$eFh>sx(^Yfcp$=&U&m=le; z+dheyy_|@BRf+XphFh2;Y1pIlkEKbEy^0AYenMoB9!QTtUW&0)9_f?h?)PVEhV*{Vi!_Ab}%T| zkG*FB|M{!zBb!(;s~-DU;xUVPUt$pL#tyAUmX2o!T5fG$ zY#H@xn3q zVQ0)D%jd`2EaQ8g#^d0grK$F#<G;KK5{H^1Q~_Vbad}>-Hsy*WTwQ z4rt^1pMR_Sz%khWu^BsP&SH1OBg+o-4*O&BEU^m}>@_mrpZB-MdepIQ@7Ng6gKe=# zEj}^#&U)-{xt3_S`UJaF4A>i#g6F~2*n4#XyPO_j?^N!8{8SdS3@ z?_a~dwZv7fn|S=|Ei<~bz~^qT<C)Jmx-P+L`twZt%f_aOYm;9jdKl_rN5xR=KKmPw!2{SI^8fz1 zq{LE7(Fg)NON@Bz2U>&jqpTr~n_Ay*!q1;Qeu=_^<%#A-nTap@df_pgfPD+2EMn7@ z*jcm>{~gz{L*nCq{+*0<8vN|@`OhEVw>IuSe_CQ`P-3Hq1K7RdOzf805W7x>U}xV_ z?7!M$Y54JyrAzutJSP`n2ZxB~WW6=Gw?B3;MOr64j>Ffk4Za_KPwf5mW@7W^6!z9M zz^;~5eEt{WXW4E%-mhYx%vrgy$=TK7jJ*;PKma*I2>=? zd$>;G+*beKXWx^=2LDIWdB@k7ba8xUo^ordh=>*~LLyo=EV(yVx7tQ8tFOL#TdWdw z^|sn#_0C$XF41Lm5hVl>1QC&b%Ts3NJ=gn(&wf}p?laHKoHKKN=lA{HW#4_O9L%G( z@$D`zihrr>kFR?CTKtnOnek;SDe=z>jlir3hWA$O8~-JvLY(8_@C|m;GQW6Jh3NQ~ z%WS}I>kct*BFy*o5Wh~v16Lv5XJQ_3taRYvhz@m5pkq($Xn@rR2h!Q5R9>wYh+!}IY2Eup0Paa;hyUkDh}}(r2lC4|c3hpNfxvl-gncss=D;F|!#f~%y8zGp4AxK{Fg3Jq z{KM~Cmvcn^Ud;ilE?A4+{cAJC-vax(yWIZzbP#a+!XVG7AKxyaU;Mu0wej{D=YRqA zJpN`_VLWw75O;%sSyL6*UG*G&hc<&eh5*0i@;7$naCZ#kX$jx>Lt{+4fTMF9I5L+Y z4|@#^Kn{7J(b4-(pd(^V4M&p^^`UL z%#s^0uQP$4>5fm(jlgaUh8SKQI3D#KwkYrVeQKLEc#=K#{!9DS@2dl6Bmr1qzrklV z0>|tG%-=h}!^#F0jSg$t>^M8*|NNKzp=Oftr4&) zheNzv3hb7@VLsl1xSa(YAOyLV5!fTXz<#O(-y<5vE)MpxK)ZBvwY{eN7UFm{V0U!} ze%o|lE&iYX;^ptnj(;5wOaNetm>jHSu;b|R>W)KY>VJ!$!-t34o#(fFn?K(C&&!bd z>N5w{0QC5iLojbI!@GYDvAr19qwJ{NuZ&|(r7++?Mme5N|K7_%g532V`}fbJ`132< zz`L3bd(aAqn+G7~orN*H1w6D*@aLZRd;JZN@05jqI}G;zXvdF^X23IR0c;UuhtJxt z9=u^M9TN`kehjdhRslQc5HN32Aoq9+Ij{x{ITJ8H%Q=QGsqRQ^RUf`b9OU4G?7-rH z`4bBvVB24E970RO(#g z=Ky9L@Gn=|XMFx>?|r8lur7N*?!Pep^!`5~mpch8nA`E8UETqElE&{0wLre}|LYr3u;e3xbrPj}k47nF-1HQoXHb9Z30{RC@m zN_?Y6z+mgL2G-&c$bnNKANdOTgy^`E7YN+VFksI{Lkx%cC*HIj{ku0XeD1(L;18_G zSl}f63}=^>@GM7xqx&Ds|14m!Y4KgpnPJ~5=O|fK9b$jIZ~4Ff=d-p;J3{ToqucDI zG$_92R4@N>A;hX}@eMzo0q)p+;Ff*@78Hl?VsU&ZE(iR_8gTZh5AiP!@>qj?WyDxu zKV1Qim2jANU8((zk$z_9lMCOAnmKjqsTu2XI#$Va@A);~xQY1h{Kg z;ry%Ee`-+~a{P91R{I6mZ>!>qe%=dXaS`6fi+G>ay zNoX9fP2yk;T?EchGcOm#%cKELOOltnGnH()2&|KfUX~1Sf|9*FqE2P4$-o`*GEbTT z`^I*rWOm%*COwnAoSNr_rQi5M!2L|5j4Ke@(qS zpKlBnV7gocUXYjn(+vK-IQP^+UgkjWc8z z7y{gyN=d-$i383`oY7Xn20uS;Uih`Rn8dS5tFKK>zO-Wt@L66a13xI)%N+{Y@Fe+4 zUgb*(E6ZI1K2Wlk=aV^cna%qh;rACecidnbH0`0S(Tx+f8!i5}l^J~9%XhT_kLcp( zcE^$n541^c{k$*^&S17l%Y1=##GB1N7Hdlxd&>KHc!o;JUQW#?t+p*`qrVNF!^g;4V%Ovlq{(W+X+=a>X_bJJ6 zH;{bJL6YI~-gny6%OUc9KkqMKF(m z(?2Hx*C`q1NpkG{i#Fi+*h;FT*{1%n*#_rm8=SXnzzy=Ud79mxW(OQ@bzl*-^>U-W zaf!-LP6z(c7ca}_qL=fuf9s8Awy5r2PF1q^`G7N(s zr}DCk;5&N9E(!R3$qkH0fhRTWB8>mH=Ya8T3hz0o^P_;|LuC?x8`azU*^9u>ic8Qp z+Z4agwq|c0+771NwEdKoQnhQ7R<-si(b|h%uDauXl7Evfcx{MDSST8yB=Vin|ZlGzy{FRsl>+Bo1%gc^}alGK=3eAj-OrCgjd9s%op!!1J>It@g8f_fbcg!S>DLy25=xZ*NSt zziQLcE(dmpGirZ`lbwK5+7PdIn{Ydes03(inQw)kEzZ6&K7+h9%D zyyvo)%cxDen{R`E#|C^_+rZj)ZNPK3Em@Rd8@TzNO%ExtZTa(0m`A&Tw{*zX@Z&LC zue^V3(=B^#{xi?m0)sBw=1)!mmQ|9i@6e03olB2@TbJJd=RLOpN6H4=EgQrb+l7!r3B1yW z_Joz`koQgawzqlLA@HPLGwXHbe+Efg}_Ouqqb%Lvdv5Z2YJL= zgx99GsvQ)+uu?JvS`}}zLbQqYr?Gk|=_3Sya%VT0DY$5BsK#uh*{bJu4v8+CXf8um z;a5^OPd&b$4I@7rTi05qCZqK{9e36~2`7w<9;k@z$_v7oJR8(C6TqSO0_{r^(LwS|=uT$VtC-%0FJzhIISU0<&|!X< zJ<$nSfCsSk%%S4?hWXnCQqOY4JcNRz~DLq~ZGj}l&p>(W1GG}ABge+<2$x*I57 z#$TY4Q!~%b`tgRS4feqw*gH@Xo&<0BIP{1gLJz9%6}#%i++hsmGf4$n2R!C?)5=!R znIRv;NMH|mcnsNwG!}(>kYk5iK%H5JYGhUMCvs4l!4y>CC3=1a$Q3iS-{@Rc52#lL za)2GASK!$z@Km(t)jYPbwuf~`weT3;3t1(Mn~3-5K39TPk)?7@=P@UEHN+&1(ZcyG zbROnfJA52!bxqL^dVOMH)0yMfTYL`aDjx7*yemd%2%D`BL>4p??`C)LF47V8M8Dz8 z*{i`5=n$R;wVS={8ZO6Pp(bdQxPZ672cZJg0>5P8ID@ytE72)(3}zEboWd2Qu~<x-i-hwJ2_wh@zrr5+0!F1O@Pv|o>jOwrGgEObQvC_l#ub=+(q z_*7?N#o?q@jRk-HSUeUOZeLLrO%;9kaIKlXoR2{{ zYHHnv?uX)C=*wS1|Ky0TSDvsn@+hs9{*<4An(7)<1_(S=c|Wl^{!<^VjnWDQj&97T zi2k6}c-x0QPn%FTdMEG39e7{V4_u}?fu8s%eP&$2Gn6yMD?*J`?h9L;PmE*9x$HT3 zm-@u%D|b`JiYdY$7}R1=tvZHoh;AFXoir9$KWEl8y^MZTp}!Ix6mN@*}ay&yKyFNg=)cy?~F!jeY8a7 z9NP?9|LVk#*wPdDZ;`*k7=?>fQClDgg&BQ}E7$^hl;@DKXe$dR-{Am0lmCv&9RCrR zcp>Z+R9wqo2du#2$V^x}O@LoguhAv&0#Aln6F@799rW$|t@sA#sIRSpFj`)~R!eEd zonlI0)2D9=`{75r?MrY;*^;Uzqp*Od@=k0RXkNnc6f_8SCML{aKX4s26|#6ud_Y~? zb{sDNZCEwXA2_Hlo58cueHzV&K-IJ{ze$g6_n|ty0!;R zWQbrz3y=d(Vl7w{+Q=5-TwVgbx~Ik2H9C_XbQe2;jwuD$7x)1sq<55ps_WtMaD6=+ zhu5cf!D)0M52**fo5CwfxGovcN9bZZuOC5s^3Nz`)tCH^&=9ZI1Nm@R(G}3Yct2_e zx~EfmzzYZ8sDH<(I!g7IGk8~s3^&Px=y`0uVK2YI!J$b1S*V3BNfK$#o3Or!hz>5+ zItGe}vcglLJ?coQnlAQ{cWCc`ofM9bHhLm7!R6@Xx>aD`nyTMM$H^G{hd2m9)mJz3 zUxb}(ADJjjW_=r)fljpzw7sdg46aABc{4r|1@aZ(f0>KdN!NvhdwsQFVHYTOCW(v5 z2>b&d3+nTJxXS^LFcx;86uLXFSVy60WEUCgiQ{MPU6S9D*Ma@fDl*p? z=%+z+uMN-Dtn5%c^S%vTF+7AkV6M5jKTB1>8p()4R5*+R?(Gq0Dm#W`FxXx~N2HoSM znT`!~AYTSunc1LxoP%D2YxOuZ8KP1PaX4nsy8&~Jekv{_81&@-&;!@)EkX;PhT?MYjf$8x0FWS*MG;?NT< z5-%g4cyt4^@h{;8tFMFwwJp=1`Qv$P1hsR_?VyCJL=56bHl2?PLMU4$bjUwY0Op%1*gH6U*&3uJc4b_8uWx+k|}BYn1sV)>y@WA!R%6~wR; zKoU6xxt&4mhHmp>X)8sE(^#lf1)MdOf4#2lz>E1uI5BjET_A$~1&WwI$XQkcZ{!tf z9A!U0@?|~nfBJYfj;%r^z-5i5D`98rMf33v0v%z}ZS_sv9F`#0dK`mnc(E{Y{x;iz{2NWAd(cgB zsp4_AVB^^{ypAU5JAGr>T{IizqmDsk(XM)J#g^h%{WmR2pQBZ%{GN|Scf@m~p}q)u z7n?x*uMX_0GEdC<3N#C};}yX(bpyQw&Z_?WBTomn(nyr6gN}38I5e6>!Fi_-YR=#A z#yprsqUpS+#Q1J>1y;cn*t>d@!PojL=TKF{bK>-@*Egd$^jLRW2I}{OkL&@-4O^m* zkVevGS2}a?uG!nVMm$oLq%$MN7|JG+uP>j%?SK<$GT|6Hcb@TB!Z47FVyB|xytIX79 z^B^?pzhThFG?;~lW53a13O{!AxY54MwUl}jgfVh?x|{WbcV#GvKOhuo(Fus>;luL1#R zC?P;y-J%TTA<)UOKyOQ(sEm0lnZzs9Z%@;GCDfkPVm(SO zAM|`@*=6Vz8pL>Af3^$8=$&wm{;b=eD>IgbS(|!p38U4I!YI~y{3%=q^0;W|llq0{ z(E(@$y#W1M`AkJO*xt*XA3tPq9Mh$44!Zl1?qD>`bX<^?4E-;14sdS{aOEK)6RctDJdDj|E1P|c1 z;$8_T9lX1G#g$U`OwO^>>RDx(y$fnjHn=zyNA&1@D~j9gg2BL(ZaTx~C$?JCj6=n9-7C(t(H z1MOD8CEa6;G2NgGJn!o?w%+4@FN)|L!+s?|%(oV~&KWyC-suvRP;G6{9P9B4hXbrq zb6$M)y*U`2fz><643;<@2*4u43Vpaz~u>cUgBSK3C%EGpA%($M|k>k9KgbVP40ZcA&T z2i5!pTGsJEPMlqK4ewVeI^sK_B5-@xO8twYwFw1pd~KF6!vPFTZT2r@6t5bUhIOV1 z)J{@LpVOp(?Lu|1nKd4|7N+T(0f8}ZDi6?zbFm{IFRb5@x| z&^ewlXuP|#o?`vM=r9)x=4V?tHA7>uB&tqzFK*zGftWg{pr`tkbwg{!Sh0frL z+J>e{p+&6Jc;_Io_!?!qDYo<*I9QsGe>#38k4*g`2du#@v4?ar#c6G2hf+ z0nB|xqe#4Vi?_xh;&^@s6-rT{j$MQQqA#o7)S|>&B7Wp+I-(Vep;Gg}O1M&P8F?Fj zt^I)`K|?)V|2L{NNvt=YeuppfeL@IuTe_P44W=s3-Cc$5EI_EPr-{F*pNal-lc60y zW!(v9@{x3ZBYV_t^*kGEs4MEqNYJ}Z*GB__<}V={4F;;(Gul;drFUSp>FHu$@s@B3 zN253S-LaDF%j%(LbRt{j+Q)|D!oInvJ3q#%i3{Ojj>%W}d79uZ)#0S)GX|9vF2Hrxv|rGExuHvZav;L$kXUTG7bDeTVh zH6nEpYRhK>@pC?CoeTL&wKADttip~%m#{=ak6$1i_zd2et&}^!9$cAbD2a0L?H=UP z!x&&3B*|TA4>V1i4)+!NP!&GRLo6=6Cpe=VBfBF{u|W|QdLeL|u{wLj*0EP%-Cg;Z z;lSEhm=9S_W3f(!js9WoOvpXMq*WNn9cg=rd7brbJj3%0-P<}`dg5sZIhM@YvrDcy zs3B=x>=HUx-K4a1H4Bhm*^Lv)B-9eRM@N_rlZS@-FOQpAqo?kRkG2(cV~3SdKtOJT z4okLTIjDVb5A_Fgj1a@yN1ed45$scMR_CSI8!kG_e*1 zMzfp^IsZg(fN#S_^gRb;4w(fDIa)Za4WsuSFJni9%6u~W2W)?I9Te(mIdDrF@9IOl zKu6{s$Yqzk`z++)K`cU5U-b-+PzKOUQx-j1ngMxhAZX10j(jGsD~TZ~)Su)D>(F#j zuCyJ+)O-bg0c}}#vPfAWb*1n-dcatux=wC&=W4HAle8ksD)xlF;g^^QYjPt`W`Cgn z;GA&>{7I<#UVJF7ILm1m`+;^L$a>Jw0=J-FwJbWd+z@Ff%&Ox$@OF#iga=N0>86?w z)xCx@+PI>L;_UiC+MlMqPY;I17fhyU>}vip0zAQTtJoCUt)v!%{)*CehG1={aN0Gw z$x@yRY}A(4;pH>^_Z#;qb5LK_26DwTrq3>Aw_yL#Srh$t><4!&+49k6t65px2K{qy zzjjDV#TmwtrO$~&yCesRz45)v!SZP93)+udz>D-DHRI&>bf!ClOw)^jO}qkngn4&7*}3c9$m$&$Vv86-G>TsAUNE*^+}|>dgE0~WmkiDdW3cz ztuS2Hd+3qq3@S1Cl?kjd37d`oz6~Q?#WA!R;o)!5EObuT{pe`wg?Yx>98L)<6S5EMAEZB$yg zb6mOLeE)%;6GSvf+O1bS_sV1OZwkzz&e|OD7#ZU6W3!*G!F^eZe24!PS*C=P|3k+o zC$Q0Sc`4ELwB%RZ)Gx@;_Dg5|v}~cObq@MMq6{CxCm7a|l7>FY9&(Q~W829qB@GGc zZ*Z4ZjpXer)he*%yd7Ty)c4=?A;Ms?ORI=f%ri;)`8E( zeQ28YzRWDqEDkc(bXG1p7jQ!UBA8^$Gerhu!9Cdlq>)T+7O$xnftFqch=}9# zMe0pYdOspGW}KyJC&aeoCU0p@mK44?EySm+uJTrOZ?oC1S?*NVPQ$jce;OuM^x)Ca z`)FObYgnP~(+aegS}f`26zD%>8XB#&I&S6R`Y7Jc(pmhh&fo!Lx45^_4}6)hy5P_J z|BNnl=3}n;u(a#r2TxA|XFc>>8%PJy4@wmh>MkmIs<$^Jpr@yMLcQh%CFE7;_DXGq z=7o)ga8sVTO}s?fJ^#t`0rs;|JmpCvmUF+EhNXt|m7zU;!^*P;JQ})gx1sVL@^m@V zc_8mm`;8E#rRlYapH$ub#@xYkh*Syh>pMX?oO(k|a%HiB#&gh#2<&J>7TiRv5N~e>QTdFl=DIawuQkakG6t_!XT4NzzBWfPeaJ%4>3uxr5Gx(@^ z&=PINi!n+IezDU1f{rvd=%#Bhxt2G;8g1+&tY*{DQ!-mWKvf<^vJ=k;)tHkkL8;W2 zHY5)A207?RG8T93eL(crcJm!V1~5Sid4wz2vlmzYXk^!F-oT64PEQC~DmE$|Og`q7 z=RN(p=zQ*UaTBte zgpdoRp*e-nop}ajNZSj5Z-;(Sdx*c1ap{HpLC!tCs`e+?V>ar8Wf5*b-?36XsAU#k zBP>N@l-FkMb65PR&J5`|8e(WfRYIai%}36)=x*-xw_}7sf;9sGazU{n25> zkrQsShtevzx?x7AQZ%+mL{q!X<3sTRl4Z!SW{A}}mTWc^8V=RFXx=JE(21S^eoM%Ri*kSQoWm=OS|Jms^Yv=aw+-1SON=rd zPB$Y^L&!P5V{gSQa+1E+r;wqfEna~mNFv;)F!mVU&|wq=uD6HKKXk{q-|0=Yg3eeg z@Z3LR-L0imyUMo&>ZP+yG0?MR{xaVE_*IU2gbsclN!pc$<8FumotF8Bi$;bglP^EsgLw`0|mbEMdGV z?6OZEE!G<8P307yGo?m#mrqSb*|dzBEJ80|97;FCt*wuHfv~pTB+mfex1_zCUG}k5 z=&mijD{Wr7!IP**krRd=-QC*7`F|(v@>${@Wf-Iet0lJ;Avy3SzU%J$VXJT+6_dvN zcEKF<33Bqorc3_X#{+)r6$^cEZ=30u=d|av_VLR+%OvCJ{B6)f^-8|0w?KQ@Bf}*U zEFMu)XajNeTsOZ4cZ4gz_w)u3iYl3hn-&}L&gSs%K{Y&Kj*hHeg?hwwb`p30()S)pJ@;8Y*6-ErAw!W<@XtE}V2$ zm|$9gj{#}^B+j!UXWz1K0`Hb4LEhgK1>H|WV>~rnlSSQ-#cvDCjUs7HlqzAy<0y_Q z(ipKn-K;iyx=~#4r4?yW>4G)Gf1P>#o$r;khUR2FpJE;gcfd{cv(_2X9x25m^4J=G zmx)q;@*H*_6Ib~ZM?|r~bg9x>KW+{4xq`2G{`;%0(_GR3Zne0)&UlzEmHR>8>P$3< zcjp`B$!w2kL2LCC-V&ce+2CTvJnKt82?sVJ?RS;wejz*ZPZn$pYVqxCz;IyhJu@_B;dQt@M4}Ie;Nk6?JxI%P6?Tk&e7^u6x0B4;t=Dk*_LkMlI zI6ZH~t5gF|mx=^Kb!Uva`PP{)1BDMl8S#dmhTRXE8k?XybegypCrE*&spOEb%(CTq zDUjR}KU>K08?)eseIGjM94D?L(E*#(S)Q%pM(Y%PuC}{PiLlKOpbx@8Ed7|vD*}`0 z2dEdHHeOWI%O#~bNVLy!C986K>vO2C>{n`A_ZQtoaSUja#!;piP0niQ>>Fv9qcf|* z8MeJFy&wB!u~^=+Hehb0e0LX7Ax=|8CDziwuc)f+PG~dvv@+>#y87TAhHs^M{tmHUt`HzPdFYcR~~a#ZK$QnP04C` z5P8i5v)|@NJlb8F>P95m@V#|7W3CtUN@0|L;DZLrM)2ole~y3h|*knHFe zInJ{x*xxuOut;zjf}Inb?~R|?J!O*KZRT5XqtY2VPIb0Uzd-iEyEEj(dJMugpPwP? zs}&%9e)V{nFHk()GfVy`iB_xQXlXUxX^4Dt#R#3hKD+(%r4qf1Sd90AV@0%mI;ak; zo~cDQ>b&->w??2el))bBk6kwUpKxAiZce)spyt=;S$BrsKq|91vPT@KU+i+91_+_7yWU66hC9Q4a6@xMiWg(tKe~^H@^Y^>Q zJRS~{y? z!P(r$FTk+Nyp9aHQNeeUwHur{8+>W+D)tN@JzY^+x^Q1^`evJ}a}vE=DFn&P)m$}SE;AMaN#2ymxAy<#zaFle#zPViT`%O>y;Ph~^7fFa^i zs8Ih6Rok17bE@2^HIp7Q?G0!v4nQ(`FOH*e=1D}hrjtIEQv`R>$?Q8WCK#o^&6K@n zCr!1nRT~oVo?P&py}!UEgf<9>b+4DRrBeAn&BYhy%oQ%W0<_tnu2~WY4rlKhnl?XP zAbx#2K^>=`pa)H%WRrAWkdR#ZLKDC%=drLw7)l4r1T6)^{SBd?u=LDk!|%qE>SSr6 zrUW%BenX}?<7%(grWTHn8hL&x*Sx%Ja>}<^eV-~7+d7vh7e0@%-nOKFZbF;BHXBo* zUY>2NfGoyipFWq$XOz@xvbPH=Ut`p@52K_lpAJ+y@NZaK2pA(P}D?-x?48yXJsFI z@401I?6Xp;QKljLdiNhC%~j%8@Y?vfMwvmDFKAxG4b>=QIE_uJ7u}*UMF!t#?5@_z z?@GB{hOVkb*YLzzt$gl$mFOMQ1IgdoiX7(s#WwQ%;&)HwGNB=-{GNWk5_%S2e_hjW zbVw%o+qzMYC|Ii(<}2z7>oM?$?I!0iS4o;y?#xkPp{rC`rWLWP$RFG!HVUMmb6)1F z8)bHVoa;k@Z0J&3NuRV|A3Wsa+IB$Ygm6P%0g5Q)-?6_{PmpeljLItK!;hjrP&=U0h3I7CU`tmbvJG3*vrS{&&Fi2=PQ0 zW|xdIL`lC|yBqQ<&BM<$s=QRsIT?vZi*QTuAec<62_>WrTCqHl{P<`?oytb=vx>NH zig0e`?cB%EMSVMZFC8%yFeb%`Wvd#^(;8HCd(5IyeRmRH^?f63CVR~T<8bh-OUcLYM?p+jQSrxo2ZM;66u8>_w09I^eQ+(5GG(lMCM%D<|K54gP zG>2*#a2w&^@1yT4%yfrTMcMwDU(55)4D+3>t>zh|Wv zq}1HLuSW+`<@exm$m5Jv_p%#lxuwbCA$nVxP%M3@7t-5rXkfGys-6rn`4twJD)%l| zxnv4HlRL=0w>-^WEll@cCs(4|-FMLdP`(YsDaB1no83J3G@WkBTZRx`BBy$)TQY6a zEI%3!(&{Du>eHQPrTZGt<}{{^H~mquB5NvM0~*`Edh=&ba#He<-)MXdh2_7kRik(w z?+h+s(8Dh@#&=3YVVP^W_Uz#mp^A(w3FunBOaGIIrhcp=57+vz(e);xW@_c z)4C^1-Ch8M#PO=tarK2f&1w~M(-$wxOE?U`EK*3h(gn$IqMns5ij^1il{ z#`p3Z;h+#7-+``^gF_$4J)|U3L3yo5;&JXT;t8@?UPLRRNzui8oqjcU1ey}*53W1c z_)w@9d?lN;4N?V`XxOfA7AuIq;dd(Fymzx>{HQllWydJ7xedhnz5E-H~u13ppCV7 zCG2kf_x|cHkQ zh~?#nc?*l%qc4`b)l!Rha^L24i4pSS2v>qK!no9R!nafLC*0U*5(Y7fpWwQ_f0x{d zYHFP5HtXQ~RpScz$U?2V&E3&Pl$qnUoDN&^=r=9UZBh1AY$Tmz4fW+pA?fTnz$XpG`cL{pl15bNI;cEP-!hrE1l-B&MLo(pN}RuH z%c;K-ReV_8Q50?1tu&{t8$5bg(KFjv0X4(h1M>rt6*$d_3rmlQ_bR8D&d_sM|1#S3 z(wU-vu2^Ee6)>e_qosLnM{>{@ROzfUGv_28=u_(FG2UquY%Kg5tL=w|xgy#Vh}@(3 z3e=7)2UptxLMeV_?Ofc4PCii}*P#u4ib+q;tj{UxlcG-aPQZ50Z#jKGRyND{z6s;Z z`~+8ONU$eOoXA4@baStwvGi}&UHhIL=eNlmIRodpim2rO?wR|m9uxRnIz5Zg)dpObxY@a+Z4?S$Sr+C0j@< z&gQq(jcBy7u6R_hiOZ27y^6lR$p7I0?2^NQ{@L=Dhnqq1)lNBpppN9sM0=Dhwu7wY zl_SOpn^AilqR%Br>m}y6cSto@Z8D^E3!N`Vv+B{S)h%cOX-kiz?xF{)D2}N73h_t3 zlcm}`br`$aFCHSt7&aGF7dFbkm)HkQ0-bj+T0)25#+rrB*;kP@)4Q^LG4tU@xqz2` zw^$#BH^K_(qu=1ig*7;VRp;fzMz|wi5j5MejFhkn@~RwH$pxeqPy1XfOaon9Yg(Q_ zrBnC{O6vYRQDNFEQm78b{jf8np ztd;dKLa8gEv`d4bY%re}v_?v0bx9ZK1USkb(pT(>9LA}*K%g=xy5D#u(lvWH#K2cdp7lj>Gt(UR40s5HbA%!`D-tRcL*PzERA z<s#{cHMAt7n*o)}1b_Od?JjZW+%%S$FYx7_ zH|Ftvf1;<6<7i%kK;GA& zdpq~2xCZ#iQ)og-d(??_rCZSZs?_SE9APo!H@&emkM8%$_Ef`rd11+cz`gFurW6uU z+kW%Y_bJ*J&{t=YB9x>3q&v}CVG?SARgViriv93rP=Q9!mG}Q9PHDS*7WL*k8d$YX za*o?9es|+0HgbOy++f>v8_NJC(hOcj z%49RqdZg$NS@`^;dK!xoco)F2p{21AIqdr0)7P?xY=tW1 zm!hXaOQj!rK%4ws9|KF8{jS%c$H@S#vN;X60VQY*F4o7ETo+PsD~Z$d!c6rFD-{-M zyTq8JB5syjNQ;dlThI6RQJ_~ zkSyy1&nCPPpH({WEymHbrTi^REIwWO;j0BUA5P5S(Dl3gfBc^ks^l~uf6;+ z^dH*reODIYtYzA*8c1ngGohQSljp5?bZ@=~_&Id3ahiM?hcKHq2H)lLS#^C2dISDf zMxibbt&C}#D%1E)Lr3t~{D^yt(`hLu@)Nej)cEty8hZES!yoh>d%CPI$>9S~A(2Q= z@bjuBULj-HY&IG#0Y5WMY{mn$Hrfcqn7-X$@$@XWq%a(bQgw^q{8w40oT{}9O)0&B zmhpobesF`d+K}9Fd>LWALGcn8ag8x?%^*Xc!<%TFjgd5~2x#N@c z`o6S}3`svmj_TL4_Xllv4kg>f7sbi`9fOxh`_X&z>Y`231X-?;F zqt%plO4G>E`WdyZ-y5D+kST%-cNU>jD!-M=$#FW|fUv!aOf!IExI~Z6SWr`RHMJbi zRV~SHlY}vpDGQj9K9;K!jkcw;)h(FOF@-gGbj$%)4$F*8Fjo*hnucVhdD(2gYf z@8l(=8HPiKEY(+=;FllTy~6ygp@E0QwZ%U20pTzjPPRea-OO9@?)rRCBZtxRgfOUa z%f)xfi+OQd`E@eYT$#AQx%?XX51jR_B#XaC{XrdZfObc%(tlNLjjq#6zNtl@4Ut+$ z+7NE^Zi+YXDJ;@c&Jm!*orZd|MKqQ@LYJv4b&dZYPa7bjR@K+QcdloA=wae+aHqRL zJLs9@s4`WVe6L68FNFTJ(zW`Ah5UxE^5h;mjj!oVLfa`}xT@Yp z^b0OjgWRL#9N{%+<5K|vb{gmbPu$gn{@l+e4jfhIppIHG>3ShWw+Ac_V=!O37q5|< z3+s74o}~BuR9LE*4u4uH*7NP43^k!dBgx?R#5md%qLv_ZgbMB=xE~)tuIX!Fe{97= z$QboO^iV!e6%AH#sqmBJP+Q|r>rk~p`R|Qgo(z(2frsB4v7&Tdy{)g7r_wYb0z1Un zelyi;kCvn7RTmbQdi<@Tr#eqoQ^m=kA)l-MDpAw(CR_^3+as3>lFv{-mvNt1-(8WF zExD_v;)g7R=5YVx9r0#M4E_~#!{gW;vB+5ks{V_l*97S!$?u@XX^95%II5us`0S>G z+Ez6QZjxGx8_6?Ut45!+9M4}2YNmQu<&o(Q#C;(5(QPb3`$L-rd*4r}gW;j+0V{8f zZ*r5aHf}4eW>LsA*9Bl#cXBTFlqvlDb$f$Oc$v8QQ|E_wV0Rqog2-qH)hlS}h96N+ zP|c2oDzu08?H7cri|5ey;xdwNY|bYO!y&72fbJ(uSS3v7d&G-^^?JRAW$9=^#WQK5 zAs+m?6GfXeRqlba_;O(vDJ#Afeb~PA4uLzgy(O_eG~~L<_1)qJbViMRzZJDG6qOxZ zY~n@w6Qbk$v4zxTs3Er^aiC;crDjyiGlmnZwT05Zq!oQtA*#3ue{OxGPj;t@V@wgo zf3^Az!olhJzU+gBicbr>P-|9hNq(_Yj*A{oCl_y!-g!0^_d-?tmXl_Bb!BGgSTq66 z<|*Vr^y$=D#dT<|P_w8NxnV9*r$9$rYohv2QtIg$qS2Fs9y}i-`?`Bepam{nE!}X2 z_?~$Bh@DZ6SsRjmL06!!^n!4le0kN9+$YtgcKWW+jbxp*Zp9?`gNRZg)3{$Zqi5R8 z+ONvJrW>pa^!k2Rw5`ugJObu!BWr@|xI5e2$esNng7pP8V>)S%&fjXun<_)dc&(E# z0B8uy@I~kYOg6N7It2PWR^vgQy9?|om+H$H;P%o-A z^f%2ZzKPl>QFL(*^2tu=d}dps;)v;!l5jgiZaZq)-37u?S=gZe?m_M1eP2N&Q~}26p{Bq zskleMg#Qr#*NV8pL$TWG<5jPK42EfuaIfl*)kNgdyI`qeL1)cET;eZ?RS8Xrl$#@! z(!;wYR2+fQ1TY-GPktjB;`wSM=!NbyFA{daMx2EYH!oG^P#+N?cb=AtNZxwz49(>( z3IXEaH82M6rH&rNpiZV@uyM#utWy?iJ;=s${D`|^y6Ue~CWqqf6+ikV zwgV*-^~2-T)iox{!|-;7pDM$ff>YgycCc6y)eq)M1I26@HN?e=MDH% zosEZ~HFivGgRM~3X`R)0yc}usFS$-u{fN_~zcZZ(Lpq(|{A}@%*A{a1r+8v4>}lDd zmAE%%zf|Yx<^lz~RTi#wChqGGi?lF?Y{CQ^#KH)(PQ6`g8mbX>q6#$v|DwFZ+h8X! z#dTKB6?b5VFO?vj8qJ4l%XQC{{yGy%|2@h~6Dr{wwI!yDcq(>Y8ktFd{pbD7FBu!5 z-wl>vbKwJ`5z-RACk}(5!WAhNXVkvpGZ8#Wl}}41Z9SQR-$yGa1fItB%OrM^=utmj z34&dyt7zrSsLhI3_0Nc&SUCC1r)AX?HQOUKVuZW1^wPLJ`xSAAI#Jr%60K{mO4@!5 zvD$S5_)%rys$KRh{ghFZ*%zis!>Tm%jxwLO*P(x@fx*&F+n zY@u`gXFh(qB>F{uXu(Y}O?wE=7Qd!DNL%@;{8Du?yoceS5P3gWsgWpus1BxJJ+vm+ z8?Ceae1EaZ(qF)D4eFla_32dkq<9lQK~KXax+``Oe*^Z_`;FDUvaDo=KOkzB zF7ter@>W}}_~7kK+tA+FxcVzC3*{s`sktDRc=7cV8o`$0A@xz+y>3pRwAW>aVGrF_ zxKS~HS&|-G4OXpX!oG&3RC$jt$^jAdR$# zHb<;XF?<8&q;_8M(Oo4IR0~#9>uK=DR(7S;ddWMGUU;)-rIecRsc--z<$=mHQSqUP zr^aZn?XWoQvV4`AK-C}_JXmXpZIUCf?bLbure|aAZ$(WjFj-L!Q6115=@74rZB@N~ zDO2pd6_*|}SRE#^;+&y{>Y`4Ig-kw5VfaB}N`tSxT}~;2SeSMid4e;^s~+tvMakdz znp%?du<2!P4Yj;t1wP++0!$EnI)w1 ztRZ=qpVU<*Hnyv7h@=#}E;YftPJ8PauTPSHU=2e^6jEU+Pvgf417lv93#kgKNQnM4 zT&XKmm)hY`&O6R|{7Gsp<}aM$ZP0Z`FZh=qqG@=EI_B~;)^_$Wiqv`~54**6lMcAO z@dm06b{A0>hzU>>AS8)DZVz3O8DZ)b8%bm?x~8+g$f5`6$kL z9t4m6IR(n^4pIrUKy?a>w#RRBi<&}G`DAVY%0~ z_&hL5SVg46-!R^=2zu&@)Zc1d@d47BwI&ZKd%*>Dt^8aape?}WBkn+V{1rBrK}igF zEas_tBERVm=(l#Q`V3o&TgjEuOEQuety~pq!~Z~2xLKZvxZ$VN@RU>Z8C9n{Ugjl{ zh9K25_B|Dae-J+_)!;Gli5$t_25Z&&9)Iy)l36G)4QQ}AJ+z_&sv6cJk7^<{it<-T zr&Il`#7n(vn#cpOY2*=oP2*SHRcxF*mprI+CAyRM$i|YD_|cAa)8HzI@VcT+(TzbV z1a06bITYZ+X}%J;O^jp`kuSAr>(4OIIZvp;?6Y`jP2`Agb@)ZZFd^Ki(>9YGxuHZ` zJonod;s<<1t>*H@>7X+h?zYsOj}z2x;Wg7=?m(ZFNO!h0NAmv6nm3hCbej?5qrB-k zts#*Yu$VX+$h*2?m@8j**>WG$a>eW2z(JI2UWhYsUd_TvsQTI_W)GTY@3nAzkoHwM zEk_ai)cvAod5v#zmhtjV@=5++-5=3M=OkuU^(W5Kt>HEz*+9TxqNw7O;H~-V*1AbT z#=m&}d_I-0FSJq)7WYDquW-<(T31zPtg5{=R{i=3)yU`RV~tm}Jn#GRPcRZihdsqB z@aL~*Q#n{ed?QNfx{chcZg~l9R8Gpzu*SrdCY?XNl&{G1#T+6Pd#sDoPLkKjr~Gc| zp}bS5h2PU^Nfva1I?gZFUf!Uncrp!NLZ_m%%$desSR!mfmqs+x?*xM=e=wNZhqO7f zu$CX=Fh43(nPBk`x`FOpmLs=T9PuAvz+RIfM4DPnZ7W}ZCOn3;_Rr?5D6Mh3`WgG| z;R|OX2W(fh8tP+?a{dK6Jcnqi%PA_pcTJ9i8FFfk23$yv$~B_?8SjE$WS4&?*M3S5 zCP>NdaRx6`W5-Q?t=0HOC|O~mdLEDG|0ujd!#Y|# zSZ)+PpDeG>`>HwoWp5l+;dfJI`D+Zr0^3v=u+2fQ^_6^omYSHdAD0|&^uu+Fg;4t- zi`z3xe(m&?pQ`hShGS%Oe-VwJR0Gver8-4v0hp1Q!c9kRRT=i6apK3FINu&-N&pgjLht4}KQ99yNt+z0sHYrEj(^MVqSy~nULR}}wnhwS2f5E*iudm~UYXIY) zS4R)9d)Oo3n-NlWO@GMSEZ$|%R#5N$ELGymcNTxE$jE$7 z$62nDU(FFf_DJO;v(}Rnjs1yW`K?=1`lyHD6ZKh1f%1yqQiU)S_`rY!N9VuoJWb0U z{g3%~@ z>8DaHYCT>_`GpjiL$RTRS%CCO{=G6yLU~7dDaz^R)0J%Rbn3L~f%jLItJUSc-o@lq zAbfd_k>MoN9VN}VtXoXcPOUHjsm4Er_$Rn>- zl8Gwut%ovMJ%UH;9dZTr4j+e9N>$~hj6a0JchRnqMOB3!Uv%P=GL!q0Ga6}RzXo35 zQu%g-fz#vu@?K(|SB1LE^MJa1hMkI?z{t8yaXuXda`CR5T*Wu?5BYLAtv z-83AgD}h`$oDY8{uYbBq)k*b`s(B^e@7x?%jp~Yv&T!(Ax?EZ*cQPGTE}MLn5~7=Q z^jm|nSN5sOR?n^KeUC$?AiQmP8dHq7pjmoiK(;bNscJmxNd3DJCN7rr9hYp zDky0y{tSTc_fgip86Si-aUYhak|)Fae#VrTtTt|MX@k#O$}StUYgA|4MHu8=vCD`Z zH~I6i0KYt#Bqx+mITF5@g!X^h3TaI!LJ10H@<*AN`YmUhhpcHue$biUxJ)Qqp)Sv zA7TvfBGU^J!Ut{@VLKZbUkFHwM}f9_AleQT+q z#DcEL@Sb{wd#((|7h^ueRF}r2>yK~`@h{~K=vH`FlzVX=Rt80gUo%M#P!Hkl;45;Q zCTpnk#Bah!gYSF`%%ARyPtc~q7@1yoA1*+yf+tcXW*fRH^pQ$157{NT=troJ_!GEp z@M?k+z-M4L@e2D7aRVkJBEf7aO1h38!7r03VsB+Ma^Fk^W6AfxN~RBvAuou3ua$F0Y8uR`EylE%if{zG{WBo;pC8N8ECj5LYVoclG$~ z?>i}NFFIqi#N+sdT36~g_@44bm#A}qWppk!DE2#f9Y5`ANd}M(?|X2m+K%22t|~|I zx5NVHL3#qH&H2<>i=C1a)Y25zxYm1QMihNjIi(I1Heu1RKWK;UG^B}ZE{yyvMB+A& zb{=`P^`Iry^s7^KP$?*9 zi^{x6gVHtXBp-*RX6y$AAA0b+8|~1(sS|}0pt^Ql=d1oT|3n$hopj$wk_h&_t@q~_ zh7Oln(5X?jKofPIUhWYsbrxDXIM*JqKoPL^s4lz!)PM(6s0|Ym2|cQ<8T!;zBXkWf^C*fnh$y^S4&E|R2)Qk z(9lqm*`u5UgVer^hwzzs|0!2|3XWnH;|Ips-e0v{@zqvf$8EBBGlz9TLvHugCoR-)OBfeaI~RP-I>^4yB+I<_n|rE zM-(oc)qQ8Ckafua^@>Wxxk^2J|0lcrAhR#3Ih~frF&w?ua#?OpEt7Q6ZS5`{28nJP z=p|QoJoJ3-n5^xj<|wglm+}{e-%Vx+e3WUHD&Yl=u_*VgrS@L@Qo!I3NDkFLe(3Jv zB>6ESN1x!{ZXPCgpysG6)Wq;%&bj!NpFaF*p*hiC3PU-E8qw3)@oH1p6u%7h#9y(c z+uIlns(SPh$AAM=8@?Xa3Y5#k^|SFx(qio<@dww$xoSqYzi9XCP5h@m!5DoM@{EM& z$0dKJ6Oq0r-qcy&+fA!0WKP)q+shm1hslS@FrU5nn4B@h7~H_*d-pY8E;^~~Eq@u7 zAvZO?m0r;4DK>I~xhCkRT+;^yWe}Idy`~Y|Wn(t{hy7Q_)4e96B=n8r8ChMuXupi> z`P%9`^&r0&E=S(04d(026S>FN=}5nHUuqUI+~2A8Fq~qNbpwNL3p#p*b9u>ZeSqh8 zS4P@?KE2v5xrf|N>f@^K-3A{_PRAl?LD6g8bUi9g)u}A5m+~tT!jl|LGMi@1a6A`G zrF(tXsv~ec<(oCn$AbD6bCutwL;5$~)5^E_$MBQOIvdu1GzA4?)e5U(Th;l*Q+Yf7 z6l_#)Il6pqV_dK6>2b)=GWUW!h8Pa}VK&D9_c6m`71&?>SwS{*yi##>O89&ulApX+e{<3dqGwMIj zqpnHzrG}c?JKc+l)6^f!DBvd^)fOnN+%442B|ktL_iVLHK1e0XhgFALBEu-1x|!Mz zQw@Hl-L$|d4N?FBOLdoN_4v9i}%OoYq?YdbuB!qAFgzS{nXQU z78=$-8egNO7Q4Z2W^?1h&)xAXcnlPY$dLkclB$lC2M}|#P!L%-<5OM(mpcg6fYVLa zDn26q;&rCI&s_W@fs-)?7Aw{s2j1sTm(JGJr4ND@y7p2ZY$1OB(G|6YW2u`IqqU## z4A3b(kyG}&)L;oYH@9)>{tv(0LE7V0;HfPbAs7oEvJgJ%R@;hbnL+JroL@)NJ z?XyQ-)~-a^FNA@$ZeOw;J=*RKis>%cUC+*j?OJQ?N={R`r>ZOVg#-TV(2x2u!)qLq zppT*+6gAPFsbfGx{bzBtX+KQJo+)N1FWpqx;jfgq)2Ik<9AmW8{(X%}YFnZT_OntK zpRf36SD3Z{EOb}m4`W&NF8+^gW8$!F*`KuPI9KVHseQ>*-{JBXV{hfLl&fuf7YjWN zbCsq{OaGFQ#d^x zof9e!K+pA3@$B+|89?_CmWYbtB{-Frv#i-d^u{;qreI$YX(fX3g=zIB)5}b?wXXG7f_3~&huQJ9G)hm^G*RP?5!h?(2GTcJ z#0m+ADVXi|O0qkqz@&0_bYh= z$mRrd9f$o#pU``u^M#xGdTO4ouJ7ooU2A-@w{iC{Z$|yl{f@7WAH+IhptGHpCf?Gv zR9P#OsQsCnu;BitoceT5P zv^`3UQx_vnYh$`Lc2PZy7-`ML!{wEWP4D^yj0sPx7$A9wz2O0(R6MH0;ss!>FswpR z&NJ6aMwo{L4Yp(|S-uUuR;cf445tT4o61)I+h9rc-mP{aXS>UQ-xGiCx7Iz_(80ST>k4-`xK>hT;SabLB)d$gm$Z^vS#ko8(%o=> zFlul{cv~Tne-FDF7tv2%-GPtfq4Ej+e|!LOT%}CG;GR5MJZWl}lOn7x-ijTl_5hc3 z4s3U&u%H=Ki9R30rG-Li@ksM+uMa+j>S*O6Aqs-k&CIZWP%at``Uuz^RXR2p9712^ zoBfke-QApThtCuj>AUM@2%C+)h~^!a;{RbL5_N{)0pw9$2sf2Q3T63EZ$813Ag?p< zx0pjDM|99Pl?ti3I8ARJkz}4~+>2biyn0&OiL^Fbv<7q-Gk_schol$!bF|_cRMWeD z~cmdw%}{N6ec_dIM$Kqtz=+lo&Dskav=R$h%26)`uj(*blW)q@vu&N*2#S! zJ&^Yyc7+D}D2FY6VHcDF(`@sWGBZY2bj8;+&JqJ0+ZkXyYcw%?4X3ax_-wBN>`PjA z_gWA7*EDe}7p-rgE>V8Df`8KF53XAg)UVbxEUwNpuKpj^xb{8nX@yCOv^OUA3zb8x zj=q!=<=BmeLFJrc-ta_?hq3r$LuF!xp%<2{S>@m4HGI1=RI84NOC+etBvd`Y>_=4E zPLX~d)p0tvs)Ngo0y~5R?^K_9#sJ8W1IyyxZ{zBVQQ7lMTh%dIr)=KH3;AX7uGKKj zaK$hbLrl%Qp`sjI4jQ=c6xOoD>Pld#PO0?5{QO(E<)FGSFk5S3$)b8$O3A<6NvwHE zsLu-HDyFxqTiMt@Uk!sx4(jyg&ow^cWqu1^J?DNE1%YKE=H)^esinjxal6(<32|2= zD^aiDH^}C@5KSlE*iOGqLTkw~UtR#8S?<3b;A`P0`b)$LY%r7PzWcj5=}$+C#|@%N ze>!i^pq+4=Ip5=4!8x$C{F2T_?dEoP{mt2pcZhuGd>XK_ELDF@6`YmSdtqegEo~+F zMtDtq#I9;oUQg~Y-BdS`M$bjOF=Pq5-PL$XiTv{!sQ?OIp7YySzBuO~{<6|l-9&Dc zkIUyB^;|d2KS+C3r5cuO&hgI2WU(pnx*$4uyS7uRQSi)bn!)qS0F!`c@-NIb_i9&t z^`LG_QB8frq8TOa0<(%PCkv$6uabU}WrPgvlgrMiX>f3HsaoRARgCvom3O9)=c*~w zh&K2%XN4Vi@26txbdf5Hj&h;=0CWpod|Mzl$RuF(ctSomCpb1n`M`D{5=3*tmtXmv zbw98Gc@P!|+loN}M#-bFF|$9}hg9VWo&^=n%e#g(VfNeMvRK{|Ox78(@#IXDRUN2J z(#~nM$u@WS%s z5t-&XR5NosWrePhZW;_!{PidGv@xmGL$!$-1lS&2HB+}HMiUPicbiDOyxq)uGsj=@0 zU6wINIf~KRETRr`iHbG$CI;){wL7M10`+u$#Y!D3?el)BJcv|GKCTHGE%nk`BH!F} z$9JM3SpE7Xy@}bFrxW*mpXpTqcl@0I#`=|%59Zsr-qWYb%S;|>H>MrFN%1m$tGu!# zLvX3l79nQ}o+<}y7AZD&I(FFp+uTctHg_~uQ|)2v%a7Twy_s7KsXpKG6Ha!& z7IQ#_GCQQD7L)bpQ;B(`U$lHz7Xtoy#-S7NP3f6#J925PC%UAQmDs9(+*mX9lYa{h>0J7eb7sW3H*Y(GnpgfN`jA&UzZKXV;Uw`8A4eaE#Kv}hbC!41CGvt!s<%i#m#@aU&^xs^0hD5ckDNH;j4X!u=j;G~Su8znjm-B8A>1Az5lxKrfIyMX^{!>2u z`AW1TC+1|Dkz2YnfKOFZQqOr_AxEIm>Fe)d?_K7mJ64VNdd%E%+S2NpzFE$|#=&vK z9XY1*q9+rm4I}4Elf>!9C)7H* zKqd4Im4Wg=dbG3<`__G>8p))h1b|ygv0R@lmvQYEB=MJCw+*#YGdY)~j_zZ5_w;R^ zsrpz)g#C`OJ8#L&^A_}hLZhNV)Pp*Wv%=^<#DkJ2(w%}+o@>eF_K9w%JOT7^*CyjF zHV=ilhpM+b9ml1v*zWd6oxSxx_ygv9(ltz{q{$!E>f#T#4`mDXBV_XKueZJd`q+xW zUbFuVAit1XfDXbL{x#Xm!vutsx(stYVrx$hJA7$l;R?n zk%ufN)Z4~_f8K>UrW-ZIr*Ycz;v}R`(CPjvn*=M~RW#)%x|%ySJO3fI()B8O-v%ZB z;pft8GG847soRuYT8%gYgF@#0KE`c|i75F;&GM|LE>yDU0dOV$5HIBiEA7ZO$_KoI z&{Mc2dda-9lkA#yG;K6~qM{V6#I|_0liH;oE*WRc$*aho2ZAjvzzEaPqD#tw!b&1< zyeC~JW(s{BZKA^iJdu~(2is(tsbBk7`{6H;N*`A~^%FKvZYNy#ZEPq;Y_!o3x@MP# z|D9)kmd$xRmU^fwoj0+jpq!_fXN`(gAm=DI^i9D?>R8d?sNwQi)v4cQ@A>DXaZOYe z1dX4kwnR+w3bZN}?>8VxdS1LLzqjEf35;6#tcuu=GqnlW7en__NF0OP@LAd@eX6(= zG3Nt`ezIQ8L(1^OE>aoWCl4}?UAUJVPnpXHFh$;@)NXQYKrAsNqpM{DJy=cTX47H1(T-FqyDij!|CF3?enLH+4=>RD-y_MLd51tPXx6>ML1AdVKirF^*-a8Y(< zDOVSJPIr;VOC#mZ>IpKGJMM1njuwAP336rZNW@1M&3(no`30hiI*r$KOWiFvo~y#l zG1Wl~-2&#CQ*iZnE8JdstCoeu7)HBFxJUXhaitgnru%F))pfr_M6hAPf8ZtDs?8_2 z`7xpYe;gexzk4s_h0dhh3DhJGYU4DbFBJ_{ADqaRza+PSc-~mw`p3FO4cv z9@Pb>Fi@R`NV(Oh>F(=7wD>T1hSCO`Kp)Ycb`KU3m~W!N)E9L%K2rl-#ay&Igi90( zwaL}adA;P08ny^?4L%A7epB0M&fO)lws1yFPzHkQ^hlk{6e{i&3F8G-4>l4DC=b3T ze^mcnysf;_7r-#e$5dAwruUSqs51ad#8PH=0;hA|<}Cbi$saz~eKnusHQrZlZM*^2 zlG~{u=O^cDXR<4o&(xsLchg)A=C#rU#P}$t10KuyncQ2UOz}21rX9>+H?P&j z8j`Hg&EiWxVRkylyZgHGT_2?{-u^)YJUjE@@^aoGToZRH36@YQkXNxf@FGSLqX34_ zMmZxdK`hS+i{$V45^5aPQ$J1{p|;Q(z;j5+S%Ex1efeKXk(3}#(x#GQsE2rgaDYD} z95Ws#cq)`;h*Nx9fs}5j2J5AJ@op3PixEWly9DzC- zfz&8s7um^0a*fVeTOtAB#bEfmY^R1gvH+pRJ945Y1Itjt*4*gNp59AR+u6geE?iB(rP7VD{rkn2z z0dgNql^23T>MQ0x5ywY}HN+;$J8=o~P+LI!ZivhM`60q}X|*y}J*r^vDcB-cl|S%P z#V6ugW3+w&*o!A(3GQq3IQ*VaF5Qt+(TRto77?dIOner1OqePUVP2~Z!9wyn@rR$z zZ{{}fl4zBRv<9A8)JmEo)`>m%TKxQo!IE3u0`rMMcw=`h-UE|`V`35FC~hMBsfOeh zp&vho>nGHZ9MVkhbHpKf5cP@sEY{~3ex;#~v_Kt?B~WiDMwpKMs7}ZY5s5TU{fF3C zf$%BuOdi8c<_F8Yge1|f9P*V7W~qhvkQ`U`nXBIN$^UhJb3DF-PY8X(iDAoo0J6+cT~TZ&YR z4R!G{oWaMs3C-d?+>(Y^J-?Mf_z~n&I_kCwaG(o znpYzcm3OFQ(yXNOJ%!bh&d|klU9(_LOv3(&Hhz_Rq);ER=axuUBfa#8Xwf~DbGf~F zgWwj@rB~V)>IO;g1h;2~k_X?wRB%rGtEAG!QZoZDLUo!} z1a{&+6o$0e%cUK1Dsqf$#C9VOkJ;Q`NfO4%2bf)mUwR5|0k2@9ySn+KI8X?ac3946 zY2bhTwbtBZ?g8HhuZ&pM)j?BoGa=$d{CzP`k4Y)ic*9Sy5O0MAz#*Q4q-%VMFj-0w z9r8%<2eE|uTc)_bxF_-_yp2Yp-n|mBl9;h|dspJQ8BpIr2rC6ojh(CT`n+r)`!ZNVCuIsK@ z?oPrr^%0qmm_P5SuJl0B;1dHbOV6cDb%)YS3)E(7Z{59!^<11#M+!w56C_oQc|(4I zJ*3-wn$!!aR1@@dG(Y?WJ{&uXIn`-M{~WEY0Rz<@%2Q<~GuV~v-XQpJ5p_O`KJ;!~ zPkNX8C$|CZ)6rsMpJwVwvKKRt8lkR}Owv|)m`YJEz-(fjmLlKc7hrY7M`C;8rnUvX zg2zEN)|YQp|Co4Pj90qJ+u&I=vb(`#{{f&m|6Jt6crnj#4|Yc!sW0wS&+oF2X}vl} zorr;fMKg`o(;RD9KM`r^j`80$YwJr_B{=`m7d< z#0bkcnZnT0!oEU3?y;dSNArd9FX@tYT4i;=4I5m$d>#p}xQXc9gcD`-Y5Fxq)X7m| zrG3J2VT>3gYQjaagY3&!bKm67NZ#c&nG+}hutSaEf(gPfbo%Hn$%F@U_X450F7M_`Gpd( zlGHNso3LHXlBVc-f`drK_zwMSEV>4iX`UcYWJFB5sns^LG>_E|z|-1HxS8&#RpDC- zv!ns4Kef=X4CCNu>bXq8o$?lN8Tu(pmEi#B5rIX_69*Yk?*;(m7H8EyS|sDg#|ebI z$sk}N;NeY>0dJxC{n%Iq%LOCp7BEMRlCOzIxjbl%et{Z=Xjr-ON_nK*Md}DdsxtC8 zvg#A*p}0xir@n+4h)r{m=t}&P?<$AL^{8fklL(P*BB$-E^iCSD6v#;+7Wo1XdwXMp z^#7DB#Si5M2*O!$fn-5Mfk|`+!C&4kQxp&T;#^VvkK+WLbfU`lmxMfkO8;LR`MG>NLE4#537;ya)dZZFB6$^L!>4P(&lKXa0$3? z94f>M70Ly91)-_OfEUq`TyCVf16(Izy-JhU>8U8yZV5=@a+J#c|Kt_&L1hRwL_J6S z1U?ES%~am$I%}PblfY!njuaZW@{n&Vrs$wnqJ)EF`ZBqdhyWNUM45W|&DpV$gfjA)kR#=#=nkb3?i&3Z%C@<+YoGI*-3mI?54^iva;%kuxv!ixVi_n6R zQ#%Vj#Fmi>=KKI3ZHlx_Vq_ps5T}SilH12q*(R@4=cyO9n`)%?L_MWFR$cmfS_|D< zluuZqG}n%+Ew!!8Cn`qtLYZeT)N-%^p2HL11o1SpREa_y>CrHOGNZh+DoRbfw!6$7 zFZw|{&QrZfg0@om((xdJR7uQN&LdWAmii11*3!Lo)OYc(FbC~_Q7}o_1z$irxr_0T z~sGETDV9_U4(WqMo7~4KLHzl^ZZuxZvzt6rffQvCFGM z7s4@yr~F@CGvPkAKc53U-7qk;vex)kd5HQZ|MEg;Krh25J+RG<(AJbEb<~xA8 z$la7ewb6>Py;=~st=+&ri&u~;GRy7{&$*9~%hVBYo8_)@k>4z>EOfxhSW4+K@;TUA z%=tf(c1r;;%W_&_suaNLd6TGS+7m1sc5#`&Rr6i=1B*%DLWii=)q{vWehPMf@Podg z{3FhBpP`Sio9T-G#^yMhfDE52#>Ln!BGNrmU#)g$(oPJaCKrB1RLhS9pY=*zLfb%4 zb&5`cEtN2pfEmtC>R(knG90tGN1qV(h&NQNj~i z;WMZy+*EfUqK$VZptRliojU*)h~uO%`JVhrUtV<4^Nu{7Xf4+x+H38rJ;Qsb8{A#w zVCPR|qT-`026wf|D9x*5@lfP=Y?8T)T7~(+B6lL_14Vhdp_)=^`c-f&#Qs-bL_wQXj#cU(=CNZZ}!3Ml0h8K}pco_F9h33cHz-j31;$^*ON*_oeD0@(b-~3R-1~ zOv2wn=~Lh|=0WaiG90BMec~=Seh~)kKdv6AeR4-OI zpuMIh!6rn!@={p`Qm{qpJ?$jy4oRb#c*9LC45zw#K={DkTWQUW!@q%@k7sLbwWU}C zyswJH82W>fn=>rxCq1X z`agZCoa$*{AeV@;dh(3t&y1C>TxrAZKIswNv^-?h^)oDH)G+d!wXgznm_3Io^$qsa2o! z!9Eg=737#gc~v}0wjBWcK!0!(2C2(oCg+E~->kT$*~nIK5VQ~*U~A_Pe3DMnG-(;E z1(f3I+7*20TZeQ6>4$Q(L8ywo*4a@wPYuX;(L+5=^B`%O>%vaQ|PwJRPAT<40@avg{|?gPQ(ZQ z#D7B^N>mECZ5o5k!s-B0p8mNUk$8K;D{?3J8g#e#f|>FM{bU3vDAx9tX=OwC^wtq` zKU-^Y4BOfs#U4D+iT!zM1bcAaX7=3X=Zb@?qMAtdD+@4>9&gu}h&4~8w`@S>SN=LV{UC*9G-xJxV zC4bqEWg?q9Qg3_KEWj4rjk~B+itSHsUcazN5!Dm9m0MdyN3O6 z;t1R0S^|52OA=dgE{`Si74~5@qiwZ0z;^g#lr8*QUE5Htg-z&_{l7eQlnL*!CSCMk zk1TJ@9^cTDT_&$&yT_krpS^#_23E~x{WeRi=%GjB=4-1mC(_1L#GvPCVMBT4*2-%x zS$`${v_|jqVBa!z*tS;&vib53w&}P8cK5nZEc!Qg;hTT#`})9ESk=q6W^uUf)}k2O zdRGfuk1&6$*7kw*L0XYDytNlw+0~M*Q96|MW#_WxP4}?Lj~=q4TV$|hi+MI@6>Vet z``AW*jIb$zb#2Ysx3IZ8|7ztka+Q@j<**J;uFXyW!`Z+11~&K0Np{7ahitn|-`VK< zC2Z7h%(lbBV!M4d$kyyf72BD|^=v^|Eo~dO=Cu0hJ=1!l=LhS?>k;hc`-9mBomR8g zcJE=ewinrPDR0=p$vNz$&ngQe%(m-9fbF6^(zZ;Fu|1mI!q&#R-uk%r59_mL1o}T! z(3}~GKEo~Sv=yh>6F(BzZ8`7J=l+j9(_LUMS&g>8y8>*Hee8hV|L+5VQD^)rhteoc=bSkx^*w z)U`$LYhgp#@U0>$H?&@n4qHd$da^r8yRxYjv)Q0o``FuO@1y7V!s3r|(HH=m?-!Hp zZhU|(_F_SR-c`0igAc5E zMh<(ZAJ00sGPdy6erWxK+fE2|Y^@9}Y%6DVux_QlSiOCr6^$+Xy;ghnc9Ze!+|1qV zum?BTgn^$}&%%5*Ka^(!?ou`|&FlZxk5}XBXbhU#qN`i2&39h1p6Q-xT~#-PeYLGM zYr+S!U5Zw-kM^ENbMY<93{PdpT+C#PNQEsu>SSE1KG%>IeK!>%d*%C28i#FiBUTl9UCt$Tc+ZS>G+^f=bmbX-f@ z*s)cudn2}5OM0bRs~rzwzufA?Za+Sry=U9V-spLXHQr7{zk3EdG+kqbK1SP%Mk#qgCYpy?*J@mbQSqUe%isNVX2y7Rhee*By=XEVi3-D?23o0$TU) z*xKK-&=?48-)uel-TiEHGsA6%`qj0aifUyWmy+LVTc6q1pWffB<5B|Hm02Cp8d}Wu z+_I0IHU0*B#Oo7#vV9&}7m$tjG}*$=1==3%jkb-*jkVSN(-N%%%v#=bjdj6*x7GtS z1KHLq+pxs^No)+wI0@P z&a2ksznRwajY8QL)2*z(JeVEMY(<~_6}Hi^=WIr1GTZQE4tp~Ox78lwh4zjx+txXC zY=L`P+FIMQTkR-aY^~Gwk@eL!FZNzodv?*PX=n{>WbeiwV;%pGqpJ*vVr#?GJDYTf zNP~odg(%C;*qxts?Y`>8!otSx7W681T(P?V6BQM)P!JIi5$V{Pp81aYN0FVK6K|gL zzR&X^gZcm!QIk*Dslg%%?2Q{;=IT#>`qhf=cBvEnbZWRsvfnaAT`*AQE)+#xjH9UM z+o|~%PyNyV+=x$L{i>**!7x4Wy`KINqiCw*;zq#^WI0fHA|)N_AjY_!z-wb(K0o2u8zi^dC7r=v`&z*wIrD z1KS0IXIoRZE#s)Lv8$<_i}p~@XJ4cy{>-9I7Z*_gc8r>HN=+B$xzX~pK>FJEHgri! zEbU!g8tdb})fC}rGihc7P;m);f&E@Y9h|cl=Pb!*raijTF z0rbyzt$-fK(BtpFjNN|kA5-;$Tc*}?T&TIu-Kf`&OQ;E9`>1Vk|54MYKc`mDDx;Ee zIZE`@g6G`nEnR|W@?s=?m+lP4!o-d^w(XDpEy#1GF7Za{X4VMGIB*Tcl%1e1_j>%t z{%-XZsLBvE9U1OMufhE35i45(Thy6urTCk!x7umC>+{oe@@8|2uN_0tE^DZ1P4-e2 z-}BVPZLg`=7G>0$5FYq44Q;;aN_+J71A5qkK3&|IPVS~PiJtpR>mF5^DntCKy3t*! zi|P4dxvi*f+)$Wy}Ef z-y6u>aA0@VPzlS90NG8W77zMNtv^~zjh+f<3?dw8$5Bn_ICU^R=TsZI7iy%72Mqvg zf6J72s=*Y``BEbcu~d`N8Nk;hgSEd3Y)&SS!B5oYDYewWZz}qTlN%j-*q^R0ZA&BR zv2^nF{-(pjkD1zKHkwooQNVsqr5=q*q(00&K#jIt1M8ndm9#9OT6VKi_e2%lq287L zCnA8p8s7r!WhWZIu*Qy?y}|ToOo?gN6E|ul)dTpirIdQ>F5s{Kqei`YLJ6;nfKFSf z$LC18?GiV-w9=o(Pqm^^b!U3x%iP$2xCCH>3V;s!QRb_IsSztz0o(sCb@$2*pa-w1 z>~TLR-wgs4-dRJxiE*d5`UcW{m$#Eunk7-x$P3h)>`W?jRUxne7V6wc0{9zepg+F!o9q^J&gRav@OqA^VMC>9$Uhp2 zA$)<2p{b7phEkKBE}&-YNupjoeL@BH{R(8MiqZyQ^ft+fzUAf%{7_3EyD?x5G^VEd z<0j7}4EVZe$|)+2>J`6-^6Qcc^f(>Z@Q+lF{0d+f6>8ZT9q@skbib+~deOc}ns7GK zm-CBb!F){zzgbLK2P43K52O5j7XsU}3;3U_fBcv5x|~}5MFR1FhHhK#PA4o2rk~m( z>4}SD=&zi~v|2c1;#XCfPQfjxSj|Z4hHeejcKAW6aK=^Od!JFy{PKZ5aUdQb>BHqt z!1nvm=bpEw%PH{wUjC+^=3}M_syd*9en8g-QB%jQpsE)n0bg>Nde=P*eBXC!ek@OA zUenOcqCJ4j1%bGs4P94lq-V};i2bd9B@gOM7T*BiGlo$6ID6D{=-fjA^l`7&;Naazdp-IZ`}e26O*eG!P5)JR0$)e{@jrie-$Px# zeV+Qd^%+&G2lf{{|2uw7$KB~;ZvyD;_gd3U^}zq7xtr1#?lZleZZk29{HUg_2Y}c+ z5!k^bD)sbbYUthPl*gAM5Leo%Aq6V>{T^4^*Xl?2e%O+}U(lHjd+lgq|F;g8%Q`r;)ch#^&f z-ruh((^P)h4fwq-K;CClLz`~~`j$eqA=7~`D*|#X0^Qbun8O3a{DJh21FeAnjHW$9 zTue={WYgu_r6&7CW_?S~2!?@hTI@5lky41%Oy_D3JF=Dj@D4$YCy0Nz<}G3{*+IWl;Le zKu7xJVlUu>g6WJOk$>I~V(Zv>IlY1YJ_9+36SeYPJ8H$G$-rOip{~YX1@q6QqTc+V zwtr=*_W@e^@i|X=g*gb=-8S^Awnlo%17A}*e%<8J8v^p>N5Ms1so5h|f>>!Eb?*5E zpu^8V+?xmHQV-Sx1G4W3@(y3H4=rf-S)J&&)7?z+v?Zo;Dih=pT9EVfr3#wHQKqGv zsRPPEs`K6(AdktVUi4$Y_p0e*7u@LE>;35E>mooN)R|s9$mh@4!Qa%PeWR$H^P4DV z*JEHGuK`_rK|yDgN~k3=T5)q7f9zhw*q#!({FhIdwAu(_%-o&*D0d{sU*sBH9aj#u}@-Oq%N0iVxpE6Z6QvV!Mf$_W1g*^j-4z~L9{F#A| zVtuVGKn!!%1bici_j>$^fvyDar#>ZIqZane26m*JT6jwWIhdLr+Q$v#ErIms5s@GV z=={h3fc-LU|C(jWyyim{&F@Qf^qTi4e%Sl^3dkc~P+z$s;Lmxg^*559mF`M^e&$b) zdesWdr8E6oc3%E`XqvkQqw?1T{;@ymrW>i6)`zKv4cDm1v=`L(Wrft1E)CR30Eu|M z(HY2)-yi>%cqbaz^2o>hOR%M1G~3ALl?^ zPSWi%oq+H6r7b&K)A?3ry0I7zQ`jOq6mksiO*5Ib^An^AG9&K!DvzsC{_4_FVzrjPwSPw?5_V@~gCnvt;xIg}38Gb1T?OUB2di5cK* zCq1@BZhF^=)6&5{$JFXgX~6DfOj-TcpEUu`-v?(qX==_dmanajncIM8yc+g6-Fe-k z^aIN7bk&4|;Mt$)kI$V>?>$&dTU_EDyDTaqw(oK@wg(WNqWN2mV}P0Hx!-OC=Rn3m zS6pK^j{aXPkmuOj7AY3&yUF#k3dHt}u@eqv$F4v6=Fi%%d(<~0p4*ji;_n;j7v6sQ zEnh$${sZsx%vdnPDR%OS5k~Ou^pti1>C>8&rhzs5y+&zIr=Cv-acVkvXL`k#i|MZ& zU!;Tmj4=#q{d=5g4IBCxSI&n>5J6B?lZ@C)#d#!)3Cy-lX zvcKWC%*O)Rjn&=?iFFrVr~j6f;g8Q5!5$ia%KUdN zZei(QTP5d+>@3zV@Hkl#{1ohb=rE3-6c;bBo@(~ZLp~WE46TNhhSS(0 zv5WfH>pKy8dkyIBKf|3v6#FND=5$;)Tpz;5$P<5x_5TnrBhH|H%yE2zz3tEYP*b9& zD4&fNE=ugW2Ks}3wNtRc_ zC+!(sr$Wmdo`_C;YM}-`M}HAV;X_1`CBHEfa1!f0_K}XF(s5kJ!`v)v1ZIIdO2W9N zKWiO2dv$=iVqL8>42uD-Nh|m`YLe@qPT`Z_`$&*{5t_yPsykWQgUI%5>N-X_1GSM) zDL=4dNIztb+zj+|XYI{{vXrjkT)^Ku8NzMjcud#Vv*e3!o-F@GtUvmuxsub+`5Avg2OgwD)a~g>U?F=)UwH^UNg>&L+Z@L{+?bSGY@X zx!zNtn}lTawYTxo)osEv zp~Q$9qKUOp*GA~ewzEd_5BVn|XslEd@(!OspU*BHeo>?&@q)ZJ>1ay)HDFe~9;&Offb6(}%f9&(H==*@-qNn00I`XXmgMmrY5q6MD;HHRP zY{5Me&j5~&X{hztImtwp!G=l^FVF=jPil*ma?!#}5RNNDU=%sQdOn?PkSR>o{c^2mGm zFJ(kvhm!NQdD&Ic!pu?pUOp4_E%pZa|xEv=#phCAp70WGw zP)1O&G7Is>C&6psk~d8N%yg-(li-Mi;5ANiv$^ih#Y^jk;d_0%a4Y3c@KoI% zxTWnjQV{LML>q4Arl40OrNL1D1FA!gYU`{`x#1+h)pMzIf z9v%a3IxCTgeU6d^Ajn<>)k8)_7M9_*WT?#V;djP9fSi9-_GyMsvMUw)D-qIyu zv-A|`(HL<7IskKrufcwZ1Lzz+%a-6nk%3zZ02AR*G*G1ABjRVpjF{p3N{+N2$@>rm z1)`~-A5S4SITFy>bSPbAT)V&j<9PTnG3Lz_ zvAK8}ZpGQ;09pTm7t)}Dh8p~wdI!Ms2t&t$e$GfFOcfiQg&tQ%SSb5VC6ZhkJXm-D zf5(^k-Y0DEVRW{TTi|KW@|Km})d}|FvJBIJxgr6&f(#Y6K+$NX?1#(nJ|Sy=oa}@- z!sPQSd`24|)KNZ6tl&)Cadd)ZDEvT50sT+4q5&WzUl3(p^I@&S-qr@z3SBa{fR90E z^*ZYSzQ4Wq=LX~lbd#GdewB_wxnyYRnmV_J{q~>VM%xxwP z>@T5i;A*g=kZ(X%WaK4{2ggLM`5m+-%!QrIdcAvOM`YO8!7U?T{^NjO32 zVLqXn!3`-2vJCX8(JXH{PSnZ=#P0GF{^m=K@>AAx0;s?;*+zXV zqAu*BIfUs49aK``-2g{2h($Rf@r@C5xp`1sd#Cu9FIZ`Q69zvag-4TsK_ z9M>#S1=&0zH!6+#Gs0JTvZa=P<)u~JAN1$rT#@UL5`^QAgh#I^er*KufLkJKZ6!YKh$B!DPf_U z4}Wq>%yCv9lml{(kY{YB&ml@*WVUMn6azgWUSXZda}MX(cLnG9S;Fu7hFQc1tPKnc ztEB1J{Oli~Q*EAhw@Q@zBj;Oo4JtCX_i2M&*9>-U#`oj>nIz$w>L4?X_+1k`T4<}d z$yvgBWFx4gGWLAW#gobCCS|a^0Kx%(;Z>CrQ^4IR*cy?mKV2(H#=80FAjB1uK&3qb zRX`fFv$90kC|^>}z+Q0X-^Jo-t_wh|JB2Pr_mh|K24uT-mbnUE$TRKqIPoQsY>c8trtv0Fu>#QDft6tq&UDU|4FHW)?ENd8j_!!j+UY>NSwGBd52)k z-GarSt7$0t(w?HeBv;E}#O2ll%#g5G^*8#Q%@YgFL{q?A?9x4;Bl-TzdfwYLoYxcI ziCl3fazu(kn<|NNY3LRC7`YBYwEL_d%$L6%EOKW?K}EuH|6$sCshAtBiV(A*ZQ7Of zQyqP+?ZbUkL!sTO{_00Vkr4u9<@WD3nh&lWk%MUGPQJYD@r@kT1`^KF4_ z$D(q+zjz8ih)h&ZcK+tD4z5wUsk#Nh_d?K3{7+B~m`KjyPLSV_6*yM@L~|PrSGP0- z|9stx;|# z%{zsojEjB53 zyTxqf+~x)FbOjeSvNNE)%4DpK^aW`G`g3IDIW+ylR3!QH2JAkRX_2)Gz=|W#(67^7 zp8lla)~@rQ|1^aWqwwCUOPCX1g1_j|20BenK`?Hib{p&m*t3_a9loAGjv{Jh2vL-i zi08nm&yM2x;&V{1OsjTt3Nnn}&RyVGbUz-OyVTKMuF;TUZ|-K{GEf^8D16kypaN(h zKu9|-ZdGQXI#`5eK$FFMsju)1#M(2CFGF4Vtspin6t~LcxhJa!)dk!DmxZ8myTBand>YP@dbw+$soX9onh5{YPdnE-+2OhB z0kNi9)(t7|4J=+Sc^AP-F?a{8^G6$~;Cl(Bg-1EIb;!m$YQ{>mtWzTb5#n!cqRm8? zm!?3OKQ=2z+slvKetvACiWQ;pB37hMX+F7F$T!XbF}Mx8ugjXLuTWExCgz znspw(1q& zIUi>8$eR`NvD#n!DE-g2!o1IYAMyyVReiJfOrPmKPjvQ(tv-m}(e!2xs2rr@L^G<)i~KkwTxR8R;G5WN|*Nw>xD!W+x(WYRm%M|lo*Vm_A^p9@;N%7 zagXJanC$d}8`!)P93y=Un}XIDdf0aAXR%&@41VsfXZ9AzV%=?*8*EQ)|FHhziF%Ug z!o5eXSfZt~XkVfgR)Qsk1*uQw_O>09A1eE5G@M1akDbHffkxy6ZAUf~tl_fZeStQs z3jGIL;XDp1gxA5!>IsSlo+Xb(P9gt;ZUBtELJ%VzB;x_cM53}0?TGrqZ;&pkv)ntV z1a!>oz1hmMky%hUMt_gUW%|R*%SV*PW6jYj+f?Zg>>%6miO^M)(HZb-@tLw3JNiJ1)uhNq zzOy74^!!~N%{g`fIlH&glB{aHogP=@WMTK ztLmjgg5+KAr(D-83&>Y`!QY8)>I={dhfC%z_Ep$F??!QfkRx&ejz{{cLgf$e7WBNB zB%a6GO{jpqpgTw-;e(C@b*SFLHu!IJFSbEC%(WulR51?|Wj_ahXo%#%J*v;v?qt0k z(vW%b6t8}k!)>16ySocD)fy=T>0X1zT&Y(7$jeu=vwsrd#j1)8sN z!cNwUWH+LP=*^YEF2q6GN;swEyl*<|DP);cg1~}{U}SxfbL>jhHpWLgvXwWvBlL}o zIQ4R8Xb520h*CYkyC9dPPsqT82++Y{;xW)?@h`qp5zz$DU?^36MCA}@|2XV$q@vZehzLOLRy|RzB+V$T-ogx!hr(C~nmit#XVHc~%2o~(A zKuiC5EhG_WCDdp?3=cv)j*d5xm znrF_1nj2LKn*F*G%~#2Iy|WO4v@rXq%nlRO-G5FZ&jVE8Wl)W>_}N9SIRVf$;R(Nf z$G>AW`-+EIdjss+6kT|;Oxq!N7@kd}kZ)Dzh&%NlLbG|7)BBF3t_ zf((V`@4g=-wbQ2%skpbczrXX-A%Ju4m+m>IvtM(%2CrrhqQTe{?jh6y%0N%q4+&w= zLh=n4jVw+dEL{7EiC zMn@Xez2I=b?QvG=s&9Zhs23siiX&zMozEfg9^vMsboe&*S>BCX@rBGI<%ZCfT?|jc z5Ahd1Ud4wi5A9J+N!!mtlm3%<49VA~n^V6$C%Zb0mSR*{TxsqIp{%i)hESa38(4Sz zs~D^LPyQsm`Q~5HyU~YtEqNg0WkY^pCUT1NaAZmV4X z9<6T^h@-)B0CuT}bXCj$kOAT@=qnWPWxOz&->Q-dbq#1mr1&p%>{WY& z>aZ2E$jjjl_)u<`2+I$!c%~b^jnCu9Lw5E@6EFPP+d@r-V6VI5(p8>kzUt8q12{8i zXD9$|i+tox&wT=Q#$%CB(oE!U&>6rgv$4DAX63p1vFl4Tk*g&BdUwTbjx0Mr*D0%C zDKqi5phHT7%n+tYqP(9E<9ae>P^!ER^t!oY4$Tz@ep+@f5{K z?qFwvBHYA?DEJ){Xq~NlN(icn`rCr6@<$BZIOH@+quKTlekSJLatUPkl+ak{I2!I( zIK*L=m{PS6ej7NQ=i6<<3efFGMkR>dl7;V|S@fTnP_#M*0O4Pe!p^Y0LyY7_3;_`NN2PYZ@OKJCqf@|N1#<8Qdm$SBkH;!Ls{LN zYh$DlIS;`Lc6Pw010rbGD0ps)g*1oo(0MEm%p~a_1VnXeG-XFw^ zC-_s47aj~c3%Bz=xedXYL^u;^7y^2_+BJlr3GaUJy-^dNjD`vixkxCl-o0s}!z*vr zAO4mQIj8_SDOW-4_K7jvm6Tq1W0SJ`!7_Yl8P3=BVa3?(U zWpE$)nY2^B+G=ylHT)`mqP2s(15Q_+3p|iZy2h`^Cw^M=Jrkk#G&N zN@c_*ODOaKbZM`2s0%qJeGOg#PBmb4Rt4w<;a4GDr2A5QbDKn>W=wSM;dul!UlT}5 z;ELL`uy0Z$e+E=qf3kGv>Xj2J59u}%BImchD2cnlk>*e_ z*H5@--_Ja7&QdRae+FGsF-dd6`nq};8%peVJ&T<}MxlK<*ZQ-ND-qk5Rb9q5GJdKn z=B1Dc#Q?*PKRkvDf=8fhg^R)kaKaxhyjSNL0|h4jOQ z5SR7YmYVvlK$iBRg_0j;=bnJon%DA)0^R}(sAl!>h~TZwAD|!LsceYgj4ejD z2;0pK-&Uz|<+XiJamDC%G*P^RIU7v1$E}!Sg7y*r8YX{6Njl^LG>gBCkFm|dv{Fm$ z=-f!#Xt#leIZzvRROC9Qy}ion!Isx;gc85JB2a8U9s*Txo^9izf|0)9tl==)AlR(Y zmN}}246P~A6)9+BDxUnVOuP?$(Kw0Ox?9pZc9qhb%$D}cwZQI`04zf^DDGoVdmT2> z)|+T=G2o+B-IeQ2cX;fnA7JYZy~$7De&XwuUEFE-OXEkOd9FcPA-khXEVt#mwt4So z0l>^AnzoJyRWY{Bp9`U^tT|+zT%byp|A(EHJF^p^<|0M-5cBa!IE9}o{*dF4Qe~Mq zdHNgN8A}i*!h@7=*hp2Kl820uivi6 zU_O(nt9{{M6vMmB6*TaXpwHMS+W__I*8h;9vX)V#62m|#p4lPr$`riz>{L7jVx(lc2stAztzne*SBgg>$cIR?P&I!lNn z-+&&yB6u@kUOeqizCR9!Yx4D>LX@a+>EQhcsR_`jld(!Q<|ZiRY__(der?k^1?M?d ze?a|NehLq)e(hbvO?~4N5~?gkUEG3g#)d578mnVZ2pv_sQ7btVEreY0o8&Gy&6;4F zp#Dd<%yS$O*v?als$PV*09@!nY>XiRA8Sj!M}SN*1W#2zLvKlQu>=v38$az)-I4An zYq>YtVQ`PPmpMh*$gbMoUDMa@25>Uo+s|nBfzzm7LLWIn+X}Ly6|9Fj=S7%qVxA&& zB_r`F`6yP#j&djv%H{WbcYdTtho#%_| zhwH*M*Bn>chilGj6C0;Bq*Ps~P2?IpsoYR}GwED2%392&Gah_)$Dz6Vtie(qAN=bz zzDcjc>zTvy{=grekb~-H__xv8jhqe1QKd^pDVgl2dW4>LnxR_EU8~uonP4wvnucg= zKijtIJ2|{k>vp#*)OhPQTK0ba^kGrmc`~kU4&o0w@6)tN{D+3`98|k6 zeC?I{T&6M_SqX(m=Y)@F57?sgQodj%a=vuPV@X+;AA|W?I5Xm*vXM!w&LXRXK}axJ zX0<|V%{>51-VbdgykAO!J+H%Pdu%Y@R|2h*!Uw=i+LqW+cBpm)?nod`fP)$yg;?Q# zbzfa7#MQc^=bg=rl5C0nH{2DODukgGo?Umlu&-t~=#Z@w?>V*E*KJ`Q4 zyKI-D=-kt2D@i1lvQOY$WcyaoFRN>JX1i{`-xN!!HNCc&?XGz*-;g2!R%Lm^yE>DS z{n6mQ-tg7A0=fruFOQu`wzq!(3c8rmLhn>3(DneAKFF5PXaVSoTvZ#uejQ)G^lL-u%?gd@@SmZ&*S4`rcj6nC zqg?QB-_XL@NBf`Och~b)hJ5Tiqh{@|0ose2zUJ4qOefD@N1b|xbyFFzZpB3a!S5Jk z6DC^vHnt!lrS)}{4Ku`4CQ6Hc z#;87rkH&&}_N!i{K7@@`_K_nUHY&bSI^GVx$3_!H-`Cq80Gks7d4t~dT@fk%KbQfv zK6SmZm70M~migWIB{!@jKY^I0tvy&*V~?*tTsy&%qI=L{g}N)EL+=W`q2vE8;Mw|8 z=pEdZ8^F4fi?Q|idfW&7Xxm`EDhy_#n0Rxhw2-&*&z0uN$cw`izh3|kotXeFgZElj zFqn3@RH|xTKjpQno1^Ngw8A;6+@~r`EUFKbTL@vyL5J~g4BS22HoLoYQB^>Y(qqkb zrKW)hrR4%XMOl%z9dD()(?mjP_AsBhmb(vuc~?MMPWB zjQd;kshj4&mLI_T+Ri8+nEOn{mqra`-v?PLW>v?x<29kg7K=V~tz#yCP~8!eBE{;l z#h&5^=_XXgoMX>d4v{*9g=2-#oBBQyZCGKxXG!Izli|6%4gXc5zgpi@D#7MKHMKN2 z8T=0mBL9v#3mB;$K;K<^)ITrni{Gv5()hmqG+y@XhV(?;1ox815=X>Hq9YGq&T9kr?3Ys`l0$H;iYef0&JomX7|~WIoE8 zbj31JR!C}#cT1aGo>zQoYXw|);rvD6t|0?n2@unq(LvTj`rYbiaiZ`E62)#V;gG$d zOqFwQ7?h8ms(M^aO>_ck_VW!N&`GH=NhvLH-FlwE+_YDZRJ(UP*&Eo;?~GF?58Tug+F*Z zPs$|+yKZNjF*hBPv9V%}?`jX9MUHO|U1Wo!EYB0*h-jy5MW`ny=%lOX?JsMjw5mNN%Sh40_;m-n+f^$y%8 zF^%}3ykzS5`Px49YotYX%6pt}jA6tui?7S&fJ0yX;VTX|E$5}{3BPa7dk> z#>e2tSgd8{d%}q7Y0kF*{*2*DD!KyQgpRSG7YU3CCYqYOr zjM73$uOEt5LTg{$he5}>!`e5k+3k8%ibYoeuGzSX)kQ04n6-q#q9{l@7|Lytp7S#szaHf_D~{Rl~Lmv`VT)gZwtJ#u`Az_ zO@wim^*`(RAi@Rf-n6u?n>F4r*b#L4*MtxwLy{_5icJiQ4KIsQ5HCHeE)JY2WMQAI z=OVH^Zt=q)23s%ZyGFnRrG4_Ak`s+9EK&HP*Sqq zBQeF(KAB0ftp2(9n_s|ud%B|h2n1Fovks@b7eh5 zISg!E#D8hGUvu~SFzA{77r-3a_d3GErFMz!5Yh^{E+inUteqSOHk@|Sy2Lqs=kAef zVS`kGO(Lgqnl~*8UTW#|5Njz7*C$GTHCKozsY1O*JwPJDGryg2t7O)4huc1HTLu{J z15mvNwLefEiL(Gpo)`8>TyI;1EPN>7SGewYHgunu2N;(_xp=4teq7}wcGXx^xxQ}p z==%M2CyVMW9QU92!q${CH(5gByzkEu&}5mdD5(zaJ`;?ukytKNSSSwHGE_Y4TL?Nrxo?J`)O+3N8O=_*X4EvbR_?-d>659YP7*}?yX1u}p zb31aB^zn$awYC1`E{oR%z`SEK=&Ic&Du*<6f?6{wi*RuDb9CDcZGJxsNyk3wsKyRb zX+w$nqIEVwaG7krCY`@6RY8DBf@=k}CS%$B+heWI)UO-{K`+=qcCK$SyI&aw&!`0UXRX3ZN?eZP#tqpHTt{h->XYQ$v$)fbi z^tYZsTi|D#Z-u`Bi(^ z3gO?2T6ydYxs`2zXpB*=spi1(mPb&w<|{rLc49ADeeIFhvz8-VbCp(hS}4Bm=CA6?n%C{M*>FXD z*M@c$4RXso9UGyfu;w~XJW1b-ABkO-HWGft)46nYOxX{0pkt4cnwq7wqw-jpvN8v~ z%Ac`Euq%Xp;zW76*hM8Hy`ZVM1n^c?uus$>mj69&V3M^7S_h#ISph#YWaA@+bIu;( z6v?010PxQQWhQGw{)XR4iy^n3F6un!Su@0JD(NYm388HhWM{#TXLKjAdCYTw$xzq$ z;n&CSlXP~~0cvXpmL(kUFXw&TAQ8HoAI3qK>!Tbed6=A@Fh0m( zfE(!!uyzjc^X$>+Y^aFM*XrT8j@$LyQLADmSGgw<=a7CL9c=$oiWEwhgIy>8Q{OHq zAm4Lekn8$UpBGA}$^FtRjgv(E($@z%wh~&qHDS`N6U2g?QVQpAO`K-bylP-ctK%oBhc%5ciBq9Wr|ay~m%Z@mmVqTp;iUlY zB8A!S+|_*Q#bn7@*$scdf}M_F?!Xh3D812H+gcEQVtZAp>KE^eorK#%tEE+H7p_CK zUazix9aXLMbl4A%cD%%Pt@N#*2WUT2qyiD)c*S=yp5V6HGnnfI(sXbzuH``W(Rt|&Vh zf6=OK(57nl*i#+M+698bKadw8cggQ?8)gSKgx@FqP!6MGaNfGjUTE9SKJoN`JE*et zi>x+)&su?~xCNpL9i}TqN{A?cP<2Ofht4QH;oCwJ-cx)-Kw=Ka4oi?{!B3g1ti<&e z7`YTRs_!sI6$?Ha;L0vBTg)y=Hi$@#Xo_B1w9>E?9IX%Tahdrmf0 zUlBShfMJtZ!C3Tf*(eSJeD?=n4D+;aU^1BUCedP!d=$6qlk5-KB`Q0Yr0E3hL?05V z7Qwc|*3;(8R!MsQJP(|isC~vx)pX*IDJ!rPvaNkUz#InQ&I)^#g;)=5hHf>$G|kb} zh_mI%$O59Jy(v3aeVk@-P7wZ>oM_3wOVRJNV zEUvbVwqEx6sxZ0IWth`H%qyYNei~jUX`s2pP~1ZmW`Aa1%M9heE6p4i>z%DjtOIQo z_7u*9Js^jX^_Ic%PFqX+D5VlfCt-EGWr;P_VzzX*4HlgBD%Z7wR(=ZnzeLWJw;`c8 zWPN9=w{~QbcuyY})kK#O_8+$YL3+7fd;^Bog52ufncumE=ptAuipd!QP6EmD9as|gfmG<<{juRIZ21DC>KE;05s zc9`8Etb=|bztFFk0Z(QI$y4lqGY#B0C0a>!cuFiJZrHE54&v8{2lZ`1b#xwxKaL>N z?P|dt?#g7cAH@We#Qf0)RF=!7NbU=>g9{TblcM5)#-l}mJ@F;~KmHN1Ls|(ibiYB5 zA$NwCLYp-J+`LY}!*_uX!84I^vcFu!jAkSFZQ?@23q)k!&=M53tLhe#sQh~3)rjJKU<4+?Ju%*}?{@J)DcHVZD7{^m1ycgRup z2K5#1;nB=JHiBt_wc$GpeTmsf1z?!?&mJsQJM>ad7Z!?Z~>U;%HE{s3;6F922ox?OfY9dkvEy zti)f#yRfHN2tJF^vJvc5@U0ZD;z@8X=%c#BOy@)8*{a>@8`3D5g%aS=$TyA^f`v<5 zTldAnEVwf=2_1%B0!Vcy9gDfE+L=N-=rpK(+>CrM8(k=rZUL zTx=JFA_V0vcnNQi2Ej5+pfJeNw?STj7coZMA|ucbh(H$TbUZ6I6;5dDBnp12SfL}Z zfzboB@o4@epQTGxy1{4Q?TE#`j7bM4yTyR#daAMw^+l7>aDECiAL{{q$7bt~pv|CD z@FUo+FXIMrJ=OmcF|bD}cn;_f2*e(-%{dtv#mxc;qQd~{Z+o>NK8lOfu5AZ04;H%QlNZ+7b9=+!72?u1uqbn zLTltC2!)Tp45C;&+YC%PpAFjyh^WMi@#f4@-6Cidm&!MhS3a1#EvVNSrETfUO`E?uNuN zvV&e&0d973q)AXD?1oH2+)*9s!cJq~gG^q5M!^`eAGs!-CAKOX`R#BLUr4HzYtR&U zK5hocpFgX)ReGQKI2jnXADiA+E4ir|JF zg7cA!Xh75FtciUE`T@QOvY-;bif3gtbi(@6n#6Wi_K=b;5ZuZ(NIT?_h?BIB+03Q_ zW|`+$EOrmwuJf>ow&C1d=>pK*3t;^oz&lx+ow2RAkLS)w{jnTFsD1_cUA0EM4KTY| z^=vs^nIk(&W5s@;N5_av=XKzQHxN!E{P1Ihvoe5lVYU1_F-eBB|3UjnShWUyA@K5Z z-WzKJY^Nj6z;~hk2*b=57qA}Oe~=B}2yevI;FNVI%P|w#uH0oVR;G|QTD681cX5xI z#cVL2#$S^9z|Oj%ZsXY>d>yw`*e~>fUxAA3@9Oz#cT5q^3Lp9DN+3@IMCo#9Cmh1A zfgkZfkX8s58_`SnHmoDDA4Paf{sv`o$wEBd6j+GUNIg~yZv3K&6VQ4kQ@YGgXH!6a z6`=g>GEf)}wD+oVMd~Jxmn~ui=L;n{FX4LvysXDird%aY7T1W7*k7Knd7+XaZ-CWk zwq z;fKl~cp59RQ+aoXBhpN8;-W&2Ajk0Ey+h4F?@p#vuOul~p|wzqL$bb5`iGw(TopD5 z{s3t`SCHl5nlHo+`I%VGKNB?oC3B1NfZNZlRsD@^m);6v;iu3HoY8mQAqY;d+_bJjOb!H0{LsMS<|pEYzh{PY=@rmj(j;A3!`s=)eo74ekU)&JKBe2 zqNxYlm+i~{l&nK0qKna0C~JmOAFyBV9y5{KEOx}y@a8m|iATJ}?UXB%194S8;*Q8* z*XM2PORG-mkEC<&U}uX7M#r}3c66|?L!2hu6x)clNFZ_x>1e%S=xP{ce#eiI2HN_9 zlx*fb7 zQl*L8&}rmt@+1>x*?@INW6|@3kJt|KmOK`x@FUqa=1`#mPePjbTB!k3NqcaJ%WDQ> zJlO`w?)^pBCS2n^)LUR@P8gEK&Eb7`42ZgYq7!41*IH3n8NJ9S!&v(T>49{o#v(gS zR?|VNQnXTmxGixNb!UQ+?k0^T9C?DRA@g7d)=_jjafI1xJPvi}H+cr@N5Tm;ZfG!4f?PtIq`k>o=97$^JIQZAW{78C?4F0fO15Ky^OgOir-_M88fu00{O>hC*N7$l_n3D6FEK=1E?$I8U?$2~ zvlm?gS&w^x_ct%c$<&2VV0Ioc?8uNR!HwfUDLjI;5yC4h5(IU`G|U=wP`i#l`kRB; zXet9Tli91kLS$Qj4uyPMBhZ)C$IIUtBc$&Jw8?ZwhNzr^b*MMCQxRgH< zR!B~A4(2DQzoo!9TX}4;u*M>VwfK%`b(hQL&mcLrm+fho z&c1(&F^?n*u^TdbIP({b{Nxv+=^6KgVB#P%&q@%^s(R$EI9Y6i`~$f}>kRA4oRPJX zUfg7qD(aNKRn(y0gj0w;hTF#z7&ho@sj!K>#jWHA3g8=x*X$?hN3eG?8N$Ypi*^$q zAdkG;W*9(?O(IJ~h>fs+tS2z7(1oMxJ7T@XV_2z8m^hu?haB*qA?Bbk`jWMX`rd7Y zH{_GeWZaOQpxAd11DRb;*Ti&e7yBP!Y^&jS3bEq%`YJ93IaGS;w}8z>Q&1LE)h^6S z@ia2Cu~v~Md4Mj$l-L=kAgq;;VE*DumjCNK1a{BO4`;-i!T`vv&>!|~@QpL%VX8Nl z9-Ih!!QN#BV%>-i*x%i=khXBj^97trI*86Gd+(cu@O-f~NW5ivORh%W@=I&{*mTj8 zN3CvMyR%jpz0O-_Iy`au4tY0kpdQXUkjq3Rxs3S9w86@&^^lWbH@3YYTjg&J#WStb zwM#^J=PDHPiGozIs4Njii2R5vXrnm3T8ZNlOD*D?CA1Y6;hkkmgyHpHn>vX<@oZu| zT7e9Q(d{^DCv0Q%*i5W-ML$t(dX3*;a=7mJ!-l8Ke@%aKxkx*-kNz>yPo^r&blt%X zS9qd`oTq-dQ^?c0iRM%`TC!a{ZfwAJOBYc?$a94y#6WfvqTr3_2{AooB6!PRVD1As z0WIa+Zo-WZFS&rc^iHaqjLu{tgn#@#21~IM++oROzQ3>l>4&Y=55rPiMiD7N9O))q zDn{`PTg)uLVjG?iv+r+e*je`)8G$)+U%9V*ps?F4i0(*{j~~%r4Elb-Qh|GkbC6fy zjmuJZB5nEgtRJ$3Ob3nmFcQjm4g4%F<1X_nC5v$jT54HdR|4Bhrkj1LXkjp)>^uYS zUSG|(LbXB?Ia2mg`KZB)R5xyKddO}!*`w<%Wj1Z$B-9$oO1@S&(zYY|mONy<#&xXi zPizw$k(JaG_9hXIgjQW*Kkx_BH;9M16UakChFbYq!WP*3OSk3absCoU9e3RV4$jOPQz2<&^$1Z1tJYgR0OjtIeNX> z^rtn1+#tw{KT)py0?6C0Dm`Vs$sfZ`3qu<#tE()*co3ZSB89biJNP5W?~k;rqHH|(_i%kGxJ z2HtJ2u~cCbU?`{aJiWhB+J9a8sUw(wP0h@C~MEIglz_QQt5 z8|5&}gp3wruRlc0!a3GM7*-H#`S@cuH;74lC6x`d8pZvV`GO$E!S2-xVJ@G^Rv2+u z_2~Jnp1kb;4V}~^lbnMUM+pM&$IWQOf84H*!^-!tG~o-m6zsXBXvdlz#9Sdw?8ht& z!mtUTW@Ni*;pl#SYvZ`R}0a z)=0}XJj^z>lyQ!b`E1up?hP zq&Xg83G5+pEaMR>ft~!d;%+#-yUj8R`vf-pF#Hnvg&V?5Cu{2*h%u5OkY8qWD+AQO z5^lER1bKVkv-}0L4?jt{2h%zY6PIIQRBx-x*LWhD%N2qf(}c0t@#cm}%cz{KSL1MX;@ubn#nPFzW(oc1#=k z@hlDPpzo~RpYdKh{a-m4rQo;Dqrpxauk(uCr5ifYYyDXTl-;uqgV>A8~YOoV_;j@iwi@jkphfY#P+%a^3uKB6wa(S`+^N`u|SS z1}wCMmgkp$ZzK3!Z?s@*!E>X*ew_>Dm;{FGb=`KKkKi~K!?SB@@pFTRIDsMO2lY6T zp4ZTcuJ}1yTM+RTo*@s<&`G!DVh=DkXMz2-N4NR?H88mT(@D|_!2mUY=|+NmXG{M% z+6(Nua4-yG>EI!MXw?I5YAYYqgJI|nc5Xa)XCuK3+pHVE^rG&}-M3(vX6yc~Dh5*y zf%27`}@WTU5Vp8FwfrW ztZjaQ1!o3_OiKU#)d9?~0Q%hgHsC>Pp$_?I$L4JY`}2$TpAawbLi>aDx>PsaeHL#ELwhWPen12dR!N`Ebfs@U3#7MBYD1^FfgcL~>Dr!aw4EDYYB#O21$$5f zb!R%be>=deJ>TNz-hP$`rnC_ZPYJE)?nH-Y_|wBrMnPF7K$(PVw>TdLd$SPwU?*@7 zZ(*E;GpYyTYG zsI{$Z1x|TiuqM}n_nEBQwCWNVwC{CYv=z|yL~tel|M_k^0>Lhg0tYXi_MKFxX-e9w z?NBcTpDct*qsSrhX17tvDph|-W7Q6Z{c?ln1&qmO$z$O=KuTaTMbcQ zu!G;*N2(PvmT5DNya7KDgYWgz-N+sQUj0Vh66_3^vCnj|mK^YGjW8BU=`dF(S{>m} z_lk@Hdo>>Fp-+pSdm^zC@QYSp*Ny;ZZ=LQ+V=@?smvxPX4^Wqib>Itvg(wF%)Ct5jcBfI4Z>jod5+ zZ{CqsKLx*YU^qDDv2@36|7oUmYps=xd#EMKJ$1G#hJ$sx5z6rd-1lR!Thn#m$3fqN z(vmb4v^zKWOc2-qZKpq6bjC+9~2$w`u9Hczsd-D2pJFUAxJy7{VDCSb{Mp;_Ta>igRS-2>yPKR)5PE>i+;}!+(R} zdl;VKU7hpH&)^U@k6)aQJS(SL*E-Qz?E}ExjH0h<>iqc_ z=&Q$oceo7<>?<&azt!1}C+?;1$%nTo}9cI$}5lW3N5<@jmo}Z{aYObpj7O1Y(b` z+D3z1CroJtb-x?5pOLyhYv$?f&+iBGK2^8zL_XACgHBaI(lyWR=nYZ6U_eH|*dGtM z05Gt-k7-}HP|#P!!Ly&OYrl4vPCeiv)Spx^Gc&*;uLJ`b0qa#s_j7WkgG&PFiMG-7 z?}GT2{2R91p`e2Av7QlD^1Lo#Uh^0R3{(4#t@q+-diHtrp*BK1tAX@*u z4Gr&@p&hr=28Nu__Mh0G9Tpu5al=qu)&BJ`?j8Vh{W?60*Sgcwav=^dflDu?N4hvb z%-}=6x*Z92djhn_R$#rI(XNQ8Zt*Ycss}-= za)G)VM0aD_&}4fJd(*!VJ)mn}Gpce8-Xsd`o-N~!{zr0Qg6w#7DBE&`k?Qc_yb9W-q4dRThE&k_=&AY(Py$J5>bLdBY zfr1;20{?bye2X7n&TfOgr(FB?aR{{g;kx3O^$@ci1q1q?Zta7w zV7XR+>5V{pQ^DBp+Tw5T8WK%kc1WNf{X=OzSFMA({|fRDD51=?PzKX=qq}U@g>5+j z=57i&vboTgGcEr948)}+epg3C(r;VG(a-+&0zdQs#BRmfz8Bne?$7&xS^5{WnLWC* z0hi%f{0BK8@*o$81=^&Hjtg+63l#z2P)9=DiKp+5?4V6^+tcFj7gaie*-XP6W*&I$ zTcFQB32uD~^%ezLveGfh9IzS>;t32pMn-(a`~ z>Sm@)hW57$>ftqrCEw}#b}WRxgMl0zayp>53q1P(`p93=Fb7GX&)n?@{_T0K&9Nr! z=-WO}$9sa`z7(GIE-Q0t!+xNN_e^*stN83C4(53pYmia@opIp6Y3G^SY zp#8{oyN0v}J9`2c#+xDbJ`VNgz7BE==q`1r)vY5)`gx5#^xMAR&_+NE97o5`S8I2b z+<_l^=XYem(+r?rkvC-$1{a2W8p-aR5#q%D17b_Pf*I+|rBhwV?}FB+y>( zOPh^Su+M*h#pnTTyfgUU3&AYk3-g^T@bd!h36mT0uLuKE;=pEx-EF}j$mbDMrBYxRMgBkLh%JEQ}b89ws~#-TiDPj!%6f}+h7 z#J}r&A%2dce`-2GUyN&4do9yW82VjX6Xl_E{MrrXyR+bD2e`}UAdY?t7IHR}g9*xo zg88x?T!SzD--igW(Br@pKAsShpaJJ|P>T%<_H7EdvMC->V^f;FQTRz2*SZh+HBH>nOvHE-jrrP6dc+VFme;X`2~~r))O#dQ<@!KuxC@6 z-P;K-hiJgfZ8l4vfPI@1vRVm#?5q}(HgdPG2AQ`m1?@+q-hMVaHSp1@R4Ct;YXhG) z0i4z5>y5AY8J-H?mwM#zVa+r3G0j77QuDQ2cC-7d0c*F#W(}g&X~2WmfT!DHtAcNu z3gz8w)W(A|oPYo*wJ!KYLdk{`nu4cEnr7P<;^EY0$JV^0AOWts#WZfVckADG)j)2c z1Tcr6G<(Hx?=9E=Ca*)v(P2KRFb_|-=d@A-u4=O@{22awvr8NgNfw$N*SN)jE~)u} zn>A9+QH^EDBuy*?-_8Co7{w{WPlly}#hTiD-_1TUxVfoduBO7+2Tp51Dp;&3*LIAC z@B0?peBWtX2d6gsvCYOYJeTIOYIa^9!gr=d_YF>k`DBal+U)Rx`3t6Ub_)D`>ije* zl!dQmi}TMGPZ-?zgim$7G|gV|^O_S0)H){(n6w&Pwp}yTJXr%{nC5KqV@+N4b4}Qm z17Hg$C7ccDl+tM{27VRI_`W&_;SK1tuklH_=G4|CNw*=%_i+AV<&Kz7iyaS26B|7G@H?2OoQ+HEFrq@g#_?@6QJ(2*urq% z3C)HvlzFqi`*_z2Jey_mpu+V7;^1&Q47slT%^+AO)_i<(i+VJvA_&e*)K>YHd@NBJ=Rp zj80Dg`?{$4`ZaL<3D6Ex;NMG7Ex4u~-0Bp};V(n}tLxf%_Gh6VKdNOvCc(PiHf?3k zB$!+7g4krAcIe0;rLYps3%@1uo zxPI1F#hW1O?koP!pWg0kYdeDivlrVW&V{qZC%Bn*sm?=`R`2drj76=S?e|Qy%Wo?? zUmx1I2urmT{H(Qfv!;vREmNr`$d!FtxI4%qWbjRb95Uy=#jJc9iq}lH>CFxEor`N~ zm(--yCDmS2%op8C&$nI#JDKdviBU&I2_G(r$4|mK{9|-_oui~m{mgSb@`Kk>v8^)s zWB5cBWlfM@Gf%>;JnT#532>&SnU;kvsfl#zo_|PmkYB_1fK78U>^b30yfUbm=h0olZ4AxW4RcympBOb5e}k8aklZ2Y@NIz*OX&x-GsS= zZQxarB+5oJ{7+%4`6JlXvMlO>aunCzbrpUU-hpI@kA=46bHP`*&mFq-gHw9E5uA1PWmA)(5R`2Ok!n`C%>S^76*Wq=QHES!&=r6Y`GmF_l^#Aig+FS(_wcs0b)Yb%uHA$Y4XRWPGhDSN!0 zAB>cW(xGL-Ajs7^nE$~qlphxf@{%-@*oQvW>+#h#$?RrhQpa>_yWk7#KzxB@ko083 zirUY_A|GjeZ=2h;b0Ev}81|E8H|`4OMvI<*G(5wO~3xue@EN8`w|cG6P(63ylHxDZm=|a6kA|a>n zZtjRt2zvJOx+1yhzUd94CGOWQMi&Un!!Ghu`QeT?V7KQGWlwa)&o5XP3M5X`NKh#9 z&=H>D_S-Ah)!_DO{~L9c^{0i$ka>P(BdR_h_{N&zATMqwwwJxE_?2%WzgrI3r&P_u z<|E$>{hebS+=6bZxz-)w&0RHynj9K*f(O4$tYlvCiIQOMcjjlvZ@Eym7>Q)IN+dt$ z+ZQA4Gm_PP4UXiO;K`_|cCGLUpQ_xa&gW*zopA?gD_IYAY_=0JGa$U~lWd?UMP~;4 zs^)rL38Yv#mL|s7?&Jny1Njc9deABCJ97b~Y`OF_zZ`1*Xudc42XYJ5p?A>?Vc4)2 z0vLAaYGFAZ&L=U4jDrM0vP|6V6z+bB*z0^HFig)>;{Wl2A7&KpN?w?Lh|@3@sm8;( zOlf82=BO;mPS}m+%{mFah4wIvJXB3YGuiJT=f>mrP|=0U zrv}&0m!{@URjg?A73Ho!EAOf^`9w#5Q=u4uQIOj`vTiqdm^i`Br~bh%xqP(9*fYXV z%-(!HSXbbHU}lHhrC6!3Z&3hM1Tx)Y?e(WL|-tAd$>eyskdUZLp`q{IZ= z$P((#Z6pe?F8MTa73YKzRz07_9OX8dMn>C`TgB&@m}GU{7n1RiVC#j%rl+EsjF){N z^=MdwEk9Mf$L9+B>CVU>?0PByB@{Qn;F^GsKzp-Y*d+6I|Bhkl=IN4)U|DxY@8-<6 zyWs$5YY8pna6PEX{QbfCx$wcGr+C;n^LsWLU=f&LyD4^e%>7KOxb5X#&82)Ydk(pR zn)4#9BP=yOx6O`s_F%F62=ou(1L%XXhyj}<+M^jvhW@-_C1#)dsivDkDUr`_zu}Z8pn;Vb*KA+V+AQ@d~yrjtcI#GF_oxzS_?<=+t1Fg%r8YC3y zhzDZ7_(aPR?HF^Sgp(Sjk@ArWjjRhB3uhP-&D*JCmiKW=&SI$GdZlj-Guj^&+Ojop zaxX_1A&fWnM~<4`;0wLyP}`As{wwOOPRWWvx7Q{&(!_KA4%Q8sCq_0s&wZ9dvFnw6 zF@ZWxhS(S_tJ$i!YoXY9Tj+pCnYX;jC0# zB@Shk$Xm@n*naXK0n!E=I%2b{wq}g3-zMp04fnl)d6B=_4t$w0ip&x7%CD*l%#Hyk zELy~ot5M!|o?BVoa01SxTlr4PkboXkpkGMCCi^9I$At{$U*e(V2e;|JEn)<`eco)| zQkjcgx7eFq@;(b@M5ZS#}97eT8Sm9fJK2ar>SX<*KWKRly6P+27 zp9y=Q+bcZrS2mX#--q=lrsdjlR$?i4pl&AByQx}rM%+|>j<5F{D!U;4P3z+x@bvs`drSx{GzJ0u>|$1 z%)kd(x|65zcka6za`jcD=s6ZftQ{_hL0P`4@r)_O=^}YWJVvx;&oTXkUrcvUp1mzN z@f`baz!|YM%OS(WyX-z{IXMqI0cThG*ZA{pWoNyD9AMwD`)1qo+;L7%6gRADP*UYJ ztUOD4PBsz!SdOtrC1K8sTWhUS>0>cR@ra*?FK-<5s}&oAzjHo|d}bTCBs7_5$8Q%# z;3uw*L`0qd{b()0U>A7>wqKMH!z2TlBBbiZ9Mmq~jr3z%Fi}+u`D-*5zb#J zuBWQM_)$_A(OS|ecrVc%`(!ze1hcjc<8g?z>c3&b8)AHtkR0rx#IMZD-n)1ko64zF zuc#Bnw17MLqdG}vk6O2JWfvGXYm{*`>uXb3^Qg9q&01>}S>jz$@VP#M9d6YtcOx6A z-#K~GcDCuVVN4&l9n?(Z2mT)EfF>X-#Sozlwo#Z#j7DyJjEr>^p0i)ztY8~7SNdD_ z)mn_tsuUZ4SpslF{j;V4Q4wNy+{R(3g|<>LfzrnBhcJ!ltiCgU%kCYVnsNS?jZc(c zKsS<(p_inZ`Zi>ZX@tzd;velrTt-H>SpgXgCi0yPRMRShn}p7^Wsgg4$fJo_Opvr^ z$Smv4Ix90fXCLc`OvNt9NJXT}8q2FNFmSh0ek$0%RukI|o$KOi(M^2U= z{8C3w#BSQ{B)XCdnQhoV*q?ZX_-=_K>|Zn+jN)46mRJvWbH3>c7mL-2JL~5NzNpSn zimYWRdM_6vB%o`>m0xM%6}RF?lTeKb>|JWa4`trxrl+`V1t(nRl*|p&!?F@&mVCH! zvG{;;mkl>cmEp)5%{KFn@2B}Z^bp$W%VWziOHZL=V}|K7aRWy4Vy<>^2YxOZFVa{y zu>@^E9BX$IMeI0y7XDKR`me8LtBqCNpb)qwysYUwSamaU>%<>|JfjwW<(Kd#&^%Ng z{JRUbT#E6Z||27`Qw-CSC(ZyFpTLm3{%lci2 zvdialUBqBT=~c0S|5P&b|~=5ZDuMxvVfBgYs@aGoM0)$L z&Pl+tsZ-V|K9}TevCEdbnFV}Xb32P|`DIaF*-Fr(^9@fc9n)PTm^9CGuH!FxkrRfc z3BTGZu!mPwLW@aw$-ClmiO?Ou%h{7Ahi{nsZOv=Fu6CK$0l=?{9hH` zwsOxe_2V5b_z5?piAZAjZkwS-o%9aB*mOzwQy7jNVY;%uPrRvF zq)z`<%(dLL*J5o&cc0e*@osOd_ZYcDD4ZNeCG(0p%Z3u5oftgd$6DJpxYqabs!-OE zzbfnbQ?~K;=kV6d;H-(l3-g^OZ}xQlSRvH0jbB5)GvCR8yV=;>_dJih7Q1l!oR7J@ zquwce5Cfj5y5ZHQG{c-J^>E#s^~(H^p(GGMm4B2Cls|R}lWbIMM3d0lxt6MIbF{P! z%Tzu>e|tPPyZ>~ox+!btv^qNx9HSQjyHi|` zOpsg&N>kU?DLrefXWS;3-3uA?!qo%V4Pg+6aUI+u&}gBf&=YS|z6i|`@_e=<^O&)+ z3a*=*#2yv8XzNgW^isuaKE~#pc{iCZA#Ej!iUH#->DDRuVyrK+ip;a&(1T6=xq*hI zvPHxai>=s%&p~gnwSy)yi_vYM$nPaQ*(&)F(pgf3&bFCvd^5mCe1x84n@}Y&ldB0j z)8r~F$y(F2qWZSQ&-qT;$f7k!Dj8&Uk{qqKlV0GL2#fiC=21&86=eCpa(R&>yVWTb`VeAl;2LwPTTi zXglnln4-9hd}?@2h7$SKi|lij#J-_7udvp~Y#Rxl_xQJF{vV;o+8O+KisJY$;c>R^bJCi&tMyL`K`9$Wdj-rW29_ za31n+>XI=p7qJ|#h~&FDys68M&a=LfRynmp?Q`BV=9Ssn?NkJqKb4o-VEmrO5vr+` z2|33j9uo0f4LKWB--_}(k{wx-$T0qDezN+RIJ36QQpR2mx@gy3F-!i*b)&4e@K`c2 zmti{Cl$$$e{5IREcIquTGi5I%|61-UH7<|L^Mp`wgz5*|zvpnneHDiu6`sHetZs^~ z5fKqT_(R5nT%5Yb{Dyj0*Bk94-eJ~|#-FY6pzJ#Hd{v|Qg7ScR3sr|zxtG{v!l}75 zrZ1A|KP_|^@+nHMN@JfZqH~j)n&py7Vsg!Z)+d-Cu{ZhA`Y<$4+M%(5-Q{%*XF_tg z946ZuC5}bLH99svK#%?0Qhth?yCMK-Pd-8K@cr@W$YlI9XCj}oW#J1-YE*L&#L(T` zzpl6Bq&_2fxU$$XfAs4S_U>D67 zaf|pi>z*pPY+@Nzy34Xs;_FhGH$t`1^Bl8~@s{YayiJ>^P>eQI>Zfvl`aZAT?R4Az zDnyjmm@9DG;;(5a-&ast&Dn*x*F^%^4mx`Wp&iV=0>rK*~KK5LC#BWQULPKmN zqI0H&o$!t|JvaB1mB~WXVVJwx!vDuLifZ8^@)nzP(T(fQ?6)ozJe_9L^QH`&Rcr|B zEWEHb)phyJhkQk&pY2c=7k=b6*H48g4|m=wEpl)zSuAtKQv?hI=7@GZsmTq)%>OD3 zCDC|)(@bH#%8UjVY*f|Bwl((kdnpbUu8sPa@R8kh3KWjwANfJpJ*%_ij&(}OXv_Up zk@cg6?hRVWw4X<@5bq0y(H@1Ccdny;%`%KPz7T)Ge)V5=MBS|46xLcl4jEN{ta_#B z9r8tTM)}HLsM*-KtL~{?qpXS=;!&=eL#$;-bgIHvV7opap!QlhOPV+zxyD8kH?VNR zfm(}SQRRdbh>ejx{B~?0oWZz)ED!A|>22*0R%7kmScv@T@q)6J9JU-b#QAn zKUNydj&M57tDMyNX$>1grPN|Yl8MVKqhlc!Q~HuwBjC^qL`P%N<8`z_&J9dF6&v1_8YH>vzXk&N77 z%|@A}U6}vR3f9X07O|R#tk#0b#>=J$hPxWjP^ktvo4yn&B&Eb!%NViY=Zo6vj3Xk= zp`6J`+0JSRO($?C<_5q|Oyy}EbSe9;MJ8$NmoSy&zF=1?<}biv);W4( zmRh0Xv|?u23F&IpPjk6#EMXUN)hEQ^NmIUQx7U8*p4!#ts7E#_G^ix=WP9*~*8Hjo zMMk>}ri&sn++=)d$X5B=cQn88_$*x2zc=XfLdzdjrr8WZ#z|)Dsrr6~3&MAC&G6@Z zko+OmK<-4AD@yc%9Ao3p*6L@G*;0&L>yg8mKHp^F&+2C*ZK0Py*$5$7OhXYoiCRmZ zYPKo@^PDNY+3_J8TE8<#us!9HAxly&wyP0(#NXmx8{P;>6@K5Jqt1bmhBFPWiYjxQ zBn1`GB0jWuq064P!OSfr9Dit3nQfaE*epa3n3JeP*1lXyrKx%~<`+%yjBUE!dXaTS z$pY&tFrFt{HXG`z?vxj&+e?4oL3}^SSaX@me03D>ApA5Nk(F4GMcK5eeQRk<_9&ti zs4=3+pcI(vaxI#ssqqlJuV(g7w?|Tz*%14C4=DHHvDZ1zG$1mvoay z0f)KlkdmU*RN62|z2EBaeN>fNGE7Yf`}8BQYawY>yD43rZA7Z&ah1BRef=!f9c?cq zOzNOX#n+0jH(9v@A8y$)imie3sQH9DZs8a5IF(?AcPn3Wv39E6mhbMbgKnAHNjIA& zP(}Kp%Ei(Lts|?Cc)W1_Lv*d3$tE{`#g!(5w5#5Z>)3D&Tl%_B?a%s(y55;FjCYn< zHNvt0&U__^8@aDlFYH4)oGYAf)86ir*o&B}Tw>gaJG0vgikfV3z0r{hB(kd9u&l_X zyqjRkn(Mx*F__4g*$~|gbDiaaTitwdzG$h4mGM75G>( z15Vj5@>^C^h3;l_&J~p%oi^L-XZ_g^Ol`xRrh%X9OAceV1FO(;QhUT3D@Cq0giF@g z?sL3FWTB2o_n!+ZulTlh8C3E^BGrtd!koexgc&ECm$=Di3rAUtbSTyhKL#1mDA)j) zX6k=+pO}fA;Ra!ukgeh_^T>R>ZzQa9Y&85r6l%=*C-;&_lKDG-v)uK#n%Pi&$du@O zj?FL)F82vYbnjR_uz0R{MAc;~BYIB2U`txfZRs~vJEpq&4tmXMt%~DQt47&e@i>aL zYFgd&#e7Gy?)x4?n)w;CTvckOP$eHEX%q}hMagxP@|hD|Ilul}VP=k>Yd zl6p42)#8n~=Cva#YWD>!B6i`u0}X^d*V}3+{iSqg*0{Yxw=$=~AJ!jhSZ|Nk-cYPp z_7IlU+SsG@$89VbKKxcB)TdQrZ(DoypXNch)D&{LEBYVkRt(!88%b?d9?zuZ9(?C^ zHEd_9qvJuTq){m`ncQ&y^aZ@MX@a59=2MfFKUJ(}O-<{noJwx`!V7M8qV)qyM@W${ zw%AMrPjbkUpTYjX{C(T7dAS?0@FrJYT$3(dK>uM&*j#fj{uqCiED++5WUd1;UUA&w zSTaSDp*WAc#51J6g@w+`?!PrM>>)0XOe9?RT}WRci$EG-S;C|mAh0#o^UQ319D5ZH zAn!MRs_KK8>l3JMZT36wBNFu!*?)zFuD^`qrT(>D#JiF;@+dNhi+kP9{*hSa-k$1L z`^$D~V*~0_bw=XNzSQScI|nk-n>7y*rDY+K6IEvFfu!m;Gegx5*xAtSM4b1!0B<&r z{NcKRaId*(Tux=8WfB*d=k9s5oSUFXuBxP#Fe?J4NK;hN9-Z+?AOLKo`txUkh8t3A z>+nhD!-kbjos6@Pv7CPnoSu5!rr`l&+&N^BGO6+37u&g8WSX*}{H-{ga7O+#Z18-;+7$NvT7U)=MTl)Ff14}Hf4JW6 zFRhetO1;*rSJ5*uk&&aGt>UN@V_%PQmgD>Jr?55-9QAkHaP$Qp?m3w-p!10LLZl7R zCf2Est4g(5B%HI{Z~wSrb1eH7Io?sh^(VU7Mlw&U)#BVbMv17`ntM9qSl;&w;_yyc6h4gNaj> zzuH4iKHGgvi7^L{eY=|3q#8)3Fo(n+WTqj*z)OzwNVCsq)bW#>WD}QBoSshIM zWUjE`ScOt$>j8On}G7TZ}U+y5-9xQ~brIaH;v z9W4vi^&IutU#fn}V7|)BU3nUdFmo~q^@i-l z(FK1x?24?hLw?)h&gnZX_VQ(lhea`!FC_z1x%IDVQkWWMAHD(i8&EB|LI&E6X{2m+ zNLR4%#;x(WW0uWx)UNzOeoymSNf-Rf3^hLrfjIzo6i&Nt$6|?<9^u9)c4GS^yAa`) zA*kk0^W4gNXng5LhlQ$7E+@+h8y?!M<{pTo!Nn+bPH~xOQmdW#tZ$Q9l7 z(#d-p{LNQFN{G?Mn{~gagVihCLfzkC!|gAb8jy=*0_b7SUy;8*Z9jiwIJU2FwB@&627+W>Vxqp>vN1YjU#_?G9;TL#DA;o zY!-x6@IxfG4B0=tRjr84oUdnJ^#RmX@v>w`owxmzf(-fbg6EW`x{K#T<4Sc5d*j<# z6M_FwN*cB@BZ=&%V_S7P&+&!!KJ_fW6a8yvz62trBSSeCXfO z%i`s0tv$*Y8=WW{SV>A2?a4dBGvxi^4JhbN$RWfD>yOMwrXVMft%##I0ttgG3PTYm z#HM_ZHJ{o*J`Z>(?j!HBBSI+Qkl=;piHNZsJ_6(hA7QBIAbq8r=5*Xo8h*(#1C6Bi z)*NS8b#Jf%YSBT$TyhGM!^cB5sxaXZAB*K-GVT`JonJV1CZS|q(ND12^z!FR;Ud0P zk(k99vule;M(xZQV%%#hoYsd0i1kBY!d1PB{B~2qLzO8_02=bv7SI}#RQ=}Rsy-4 zpWz*e0_!Lt2$?EwYLy~xB!@?y)AzECbA*KlmSJ_4=a3)o6yyiN#P(=kqKdoVQ|9)E zn&R&9cS>r-Ez}M3%z$VhfOaXj`N!Uc-0HNT!|^6&Sx0H)~fGFA)7y6NuYL zD*?r}BCqkj4L~T&i)3B| zY`{{fuB6d`G?b$KO7=A^sZFtlQ0FSMU6zPXsh1Jc(Q#hiWIY|nn>$)G_}{|0$}V<` zktGIi@N$-;Q>42L#~q{wU%Vf)EPS@#Cs0Bw4Wju3`7dLznJ#JIhf%)P>m4Fdiu?Xk zr*|e3$wkBgyqlHaN8y3EqjfR*RM7MLB1e3?X7hu3PnoUVkma~5dIy_s4ktW?Vd7gf zLp;#*64p6uu?lX?oi|7gvPFJXzZ3IBKXJ{L*KV<{GEs0Lx)2#spQfGWjP?(y$3hY~ zCp~Ruum`C_=C+Vc_dfLvn;aNzcCK&ZG0<*5Y|I};?pF0xOm7-N_94^w-h37006a(F zig;zJDcEfQu9J4i-lRYAbFh9Fwhg;Ws?nuL1o9k7LH+^v7 zz7^sfWE$}eIZVVD@9|$ruYf&DxhV_j7F1GPO{{ACB4>pVaXL;LO3YP$udxXApGaoY z+DsF&!Wv`!OuX|t#oFR+&`P9-=!$k{48j|v2{Pv`F>hd3K}Oyi!YkJIZU}NgLYuF^ zPKen*t&GX$g!+x_O!hCkFeZjbR?d{|6WoaY@&Kffd507lx`Y;d?I9b3o)k*tAGwW9 zsE~~OmQ*8;S*?7n{I(eDxRcBI=8kWbe=S|5vLStKW-F5IMu}JWuIx&Ds*?#Uc2=}- z)p)vPvS|9_HRNhATSwvr!Y9F_oR@sCJX3Tt@3utY4-C_7*ZS@bKEglcY;8`U&Y}xd zTGUD1mi+@?2Y%O4w1(%>z@;UUOtD-fR$?7*X@_RBTT9zhca8V(fxZTDvHq|s#m!M( z=xK{uNO#FZ^I2iB(DVBj(k=LHZG{*pHE`D)mh(f^ZLmJXW7Zin5y!HIut! z4CU7fPw=lqZ}Os0{I4&e6DtX;kc8Uuqp*pH8*Yc>^zSOZHx3prAa~KDXcfB@Z7twp zC34DFOQP(^z$EF&riIn(_3b6suqgCK-L#64`u?U(=mf~~s~5>6RG0{!%RC`Z%o3iV zXL%Jm49P&G$aZnH_ytL9XUTsj>q90qEhZP&PB&LrOOQnIDDhQMhMnX7K;%fwk}}>! z*dT_Av(e#vso;pM5Q`C7s1Z#qcmMG`zejzl_vRW1kC{?t zZb7m6als6w?%SsMWqq!|p~h6xS%(>o#$ENnmc!gUMwea5co%8Dy>*k;z{q4Ikp+yx zH7BE4dSd9@fPt<`Y0>Ovyns`=XlK*XpU@QlW05~#v~#244jt~Z+MKLDWt5beMYCKZ zy!unSN4k2={-BWQu>8H#sbmyJf{A;HkK&i)4@7)UdO53x~R5Y?aHxznQE`v&OF@^sK{&=ZGNj=Lq z`n$l+?FY+=FIbB*v6EX@Sjdksh64AuvVny^ZZHMvXt^-`G2<c{Q3& zG%iI=2)~QRrS(yhix-$1fhz%{xJSg(-LWW9yT`ALtl{4ZHp%aUMY21;d)D#7=HLrT z*S2Y6g~sNU;vF{gKcP)Gq5ywks|wHvG7xU0dDxq)Eo6i)RYKIn_r6k%l*?4my3sl+ zHc}-Cd4gC}CZej5L8GL<;CphmdO59w-y3pXxW!KS^^Ey5g5C$bILe5rT)o-^XN-1U zEUj!bsySNFhIFafL{mWk7{dJ&N}HgP3@myizI^=d#9XVf5okD(bt zFxpB^gJ1X%&7lkFo*gg1C%lK;ppC&$uu$D3q%hWflHLZk;I`ssS`Bfh5XTMvYpd4H zdLKrE%EB(em-`ITY$2B8#v_<=^9TA!x4|$y2RXSTs6I>tze!i(A98|Tr$aw)r^%HU z@%>4TbRX?E_t0~|D$0XRMy%KvANL4^lj(K+BQEhy6b^#3T)K49JmbMq(u|J%@B-$M zDoMB1ue2&xyJ)D?r|@5KJxj`qz?5a9gDf5VgY1_rX9M|-v7@XL)XDczJr7i(Qf zJ>ehRqdZqqzH(&S8Uhp{Q8^Su>UP9q{F}oB zX{b=*$b~QILO!0m1BZRN-^9Z-K8)rPPuhOY zJeFeoibir<=ss3YFd7=jg5StS_CHLjdfV7qq~X)r&?;FTmvM@m3+Kbu#sSkz=Kx-2 z9LeS^g`*?gM7z^5G->5*#-F%jjN;qU0U(Y&*?sgd9hKajv}0#{Q+k8jOBcW?+W5L3 zl@)3oZYPZ9j^P?4D>TJ_gl&Q8vgPClojV~cAmhZD_H$l~#OtQP_%l}l4Jo^u(H_^i z2k{E7^zmiE@Zt+}s^KqP^4$wN@VkXGz>kZkeuhanK@W2<`h+2Z@x;$^ugU^`sZ!dm zkx2L-_oDm~a!wrWI>9EE^W*?IO0I&>8LoG;xENa}tq?x`m}3->XruYtaD3GLk=(@% zUB!aPZI=3Rla()EJvuFHD()N-$t?#Lxvg?w`Qx~^GVhOty7($(^Z60-cABa+=3HFn z+a2gKJnmW%wHp8Hyls`abB-ojHr)U(8fRf;eI#v72k;iMjVy+S^DH;q_>9K!1J4(b zY5Y_03^>g<;XdG2|FO^G65!5Y%?G%{Q&&sXzmM=Zi<*GN-*=OS!d0dis%P~n9s?$t zYpMsU^e$Kh>pK&;2rwOZKCopbWZV_6u)O=jayjmneiIgn^UXoVZ@3E1Ma$qQ9#`L} z&iio7`J4jJ?sTlJr+S2+BjpM$>2d1Es{EC7gL6pKQB)s=fT0zNU0;p+R17{#|Iufg zoXX$$8?6f_d3CC^v04=}Px@@ECmTT-yGlUeQd$LCXgjiw-h*SwvTmnIUBKfnMr(Fg zenz8=_Iz`s(a%OAT}Q95dTuYc3erHCRaNK^7A}1O3 z1g3%Ac+RKVw5%S8o`K#ux#kIC{`)NTs!&;rqRHeiZVrc_&4jWY=5_Bu?@Rb{#T&h& ztR^t&`#i>yD%AJDjbJN#tBz2EjAvY%E@TDE$!i4$!8+Vpri67Ik-6vS8eI_TrCkho zoEU690nN}Np5z)yBlUY0J24BI(H6e(Z2a?~>o5Opw(ick75YkNK>wl*@G@D9D#9TJ zHTA0`&scGC1(%_fV@cqHq^9Zv`kMQX+mHUmL5v+b5Ga%+#qb-+b)~q<36HO6qUo@D zLwlz_GnLkcn&ub_(K)a>C(0OC7^11-{V(3+l@yvXN3*yqiM`D|oU6oEia)4SG^Xql z{sXzp-?xh}Mfspu44Lk*+!EfvQ}5r1t&Em>LJ<+3ehvV0jET6c`pWDjy5D5!|Dy2@ zrhKI>$hVxKEDtJ&8Sbjv*GQwJ6Z~*>uY<7)wE(n*H0Qn%+S9Jb>KPoNGs#gyMlZM! zI+niUwi`3SB143$S#L0eJ?##p->RBq47`jllHLI8F*FD@rvJjKWG47Yz1)q17DOnd zUs_l0o2k5KKz2QOt#DacS8~{X5jSKVYnPmyRG+}|wwD3TJ)=y1g43?yB9>r`BHn)N&xX16Oz;MaGRdv7XRW(oWS{^9Oh4r(1OkHRgUl``k( zV~W#LGeDQ$!+_wP<{WAqWjgNNLTNpjA4z%@mMTv7+FcS{x~qR==F*abVQp+FU^~)< zwYgihn<4Lt$H61M)50IPOaB=du$vq)Z#7NSibw#8rTMrSRReHJk&QDKl_&i;l^dolH}-%DWyiredMnd+a+jKP0@rIFOr!IoxiH+v zI8pZ=@P?N3Ss|Udb;>PnT*5%*ptxMTMr?F|IXf`b@HSSVnr!EHT+aAtaBlvPG?@oy7!S#fblwbvg^CX;ZiJD+0Qpf*aJr+7`;yE!-*>c~vd!>uck?0TK80c!^q5qtJ>+@G1%MQ8exaYWpSGE=9<#(0lhoK93nm$DjP)qhXh2TkT#!sEbB*}=Qf;sKC?@Nv z`(?=({4*iY>SIf_)h+mBenDGvlLYTTNvN$o;kLzgD%qrDsbkD%d}H$e6UM^*%1N*v zmsg#5pK&OA{DnZ=%IHe3S{Jita>a0wt>h6dgbTr4N*8*vg!}bq8Lc4g02y3&FbxTG zBX|mq)4ySPFcMv7xRIr<{!iKJrVzA@3g z8vV5Nw0WZ!@E4R5H=wh~iVt#0;45E`9#Oyg>{2qh(T<*=E6W%?&a!7)(d9jTBEo?C2FgcjU1`q*=dPXkicc125d ztZ7Na$r zY0op}q20zO*1w#@i3R;#g<>@QNIk9{H28wC9*5B1^ewQ6QE&v^iJMk_%@^U0rduf5 zUKbenA+WugD2e2o#%daPlC&;f(}Z80W*{Hx*PH2069dimyQ7S(F5r=S74g~ z^5yz9Mwk0bWa*@^jJ{I6N24VdBcGS@^YPxTW)#IjS?Eh_t)1dleycu)wI~$i-ABA9_TyUo`Drf1|B_HNA$Yr&*~{b4P;l^7d;G+Ax<^$< zJZYiz=li1xWFcLQtYVw~HRKCYC+ICq1AnU%U=ensih8Od(dpzgI&Lh+Mah+2YIdZ4 z*Ae}-u96hmSGcG=Cv7Dk;}Pf2Wuu3MCOk&iliu9W$gF@Pp8DHrjC9vW3HKG~aGC^; zAQAOuxtBZ1d*}^vCbHQIdk+a&gqD+)v^A;AC%7U_z10G*JNa4pWy~eXa+I!pwWQcO zsH;H>Q=HzBF4vQ)HQ|^l>-&X}e)<}9iKSH0dj67B9sb0fG@VrByL%wh02{_#{Rb3| z_t%9)IYYW*?})ar9(?b+5I9md!?4PCX)SfPGNUlZ`W0yUebe$pyF61}r92nH;W@gW zPX<1pcA1{iZFp7Lhqz2ZW2p++mFbaw4E*Ab>b$PYi%pGwTJ$MtCqME2->ud8M%)Bn zz%Qg7X&dK7qYR!}ez;UUda&Zd2Z-&BQRc_WFH=-Vb3DbcdsgAh=(R54e7_q-wLMMY z8Q#ZyWBG*8YU-{()h&B$is_gC2X=7y!c1)IaTwm{J{WKT5qVNc4VO zu*WcIPhB(1G&KdF+N3NUOdlIQu(s4%dZ#)o4I;&6m^NN38{vYa{y`M`H#=sNY zg;y`Q?V%@4bxJns z{`!KCnsJjhvM(~Cq*#`&+=M?!Uy&_n0QijN6lB44`2&C9S>>WL>Mz$#{3$=rQ^Y59 ze|TI7!B0t5W0*A4(os2Yt_JH^%cis>*~;LWA7efSpWyae5Dvi0w=s< zY^M|XVKU|hGH+Af$@}m;dQ6e}k5u#MEuklxWUO{12p(`Wi6V2<7-1)ymX2nh*_ec; zU{B%x><)g}&ZEA$mLh(;o^OA^eL=PO8jSEgA}rDpniv10e5Qx9wP$Aj9HB+_N#b%G zHge%_el=bM?wew{NZzfiRTqJkrC&U|n+Y6Qt_*7|Uy=FLrqHf*fRMz$<(5@{tTvz~ z;!L`U6S!8|e)lL09ed@vd{g?W{7botev@`L%E6w(Tp_jOaLrXDR_!7tx@R+`V^f-6 zb6~vy=04~{uA4j3{BscSrtgq&>{&%&#FIV9hF@81tCrPlc_5o#`bo6}PMQOl?-LJa*~@ zZUNR;7U|=(tJ-V&i|kQ1vYpr*c|<@6%Mf1&A6g%wbj8Q$>=Tr?-7Cj2q6pE#q}A{k z8TeOstm8u^W55!5g*hkJO&jy2q@#F;uni6|IUxHTKBVvHA*uYD>##Im9kpRybR0)% zBM`{$md&igokq%Y^E-;>J3O#ymjlwd>NXHZZ3N#YE_4V=DrtW)h<>IAD&QYj>X=AzdZizcs0Jvu2V?CRjCbnR%${u>Zl1av~ zFDp@^EmA69=ZWQk(NBM=4AFAQ+0+Kao3wZg?fJ#Q_*T^lrR_~?^fSGs(k+}c#G#bWlRVvdWHK|WL*uc_MO4z;E zu=I;xrEqs)z5fH24SVX{C2a^iW;z1Az#;q@4X1{&^;H>tc}$X#!#-yhpP(<{<^hRS zD(jHR8K<^oy)0lUK4)uX)=I|5^fP!Uv zDovzu#%#k!3_}C%9TetTO?rf_jk$$qTRe*|K+DMPtR!wR+numn5Pnh6aj)-!>X)Ow z@o3EdLaP3@fG^vf`Sq>o!ECCO;gz8z$^}Nk0g!8XxPKrdl8ZkLkm(~%7E%5d%TUIClu4Rf>zwPn`=W5Gcq zgs)yJt;Rr-r7olEEs?N1KNoC+^QC-}4-e8N%){}@RkPegbP zjBL(#c#6*|_&1tGYC7Yiyrezct?*4z3)QOT&eksItu(H9ypaOf92QQ(F_wYqM(FdY zq5qiRRoX&RC%sa3BfVi>Rq&Ftkx$xAUJK~={&LW4IncbD<8wQej53eoW(r5WPq4W` z8J3b+8E;7K>U~uzE3K59kn<(Cf{&Cc>#-}psn*4|Un1O1A*WnJpO*&Uqs%?!O?*o9 z1#6`7qToj6a&E5J6^sKLVFY+D-pp`D-wC>8=p`BA7qC1(z;V8~#F=OsX1t&ske?I` z1HIFWZ)p}OIs3TlaN&S&y&SI#7r_Unt^N@NX|LXbGH&IMccZ{fj$5v((qgj#_Tppt z_wjZRix*+0i=wwa4~FX;<9r;>_BEEuXFcA*Ve}Xd5w`QOB!$ePB_JGpNO_X|F*z7i zr+L)Lk}BSM4YN=5epArcJDE9bBkVnpFD)`p$_ZvkOQ(w`m7MqgmRCeN1YWjmHs05~ z2f`J=J%b-;h0OECT`bKE!#c6By3o+PMmegF1PM7Q%$+^v^<@h63%C{Ey`(R=DdU^%2-m(eF|r01EVhof zp5<>jzBw+bO{5ttIp(CE#Wu5XCAS z+*q24Hp>E@hRviiDT5I=lKyw)7TixfXbW)2t6_-hakFI=WG`{?i?yZVVRDpuu=l$f zI?m-8Z}mU)dR9$md2%WPxLOo%5f{JM?Qvd-wM4Uf%1>yaUji<=l)m+LIeTaC{JnxN zC7jHi_kO6?4o2u7S>h$HVu^8sgcWoR?&+6aszm-&a?yE~oYU&_M~iFM49@wamcgFP zWxR#9C0$?~TrWQK>F0cv`yGdy7v* z_F!4wGfEEI?ulmcH=V~OdSB>h?hL5X?^jEw=Ii*6kYV4#I_ylbQg#~0Z^g7 z#w~VJ1nJGnK+lZ8#a^@RNWYmi(vJ_ER&w4_%U>x`$P_6GKBoOMd`sW|(m2CM3Fi|t z?xHL?h%N-($!1hUTxc~o08SHBfVs`Uoi;fzETEjnCUUe^TjBw>8+(zT>UA%gnRQ=lPz`qQU4!7uu*j%Tv8 zx}5~$OVETC;}K#!JjOTWo}%KAf2_VX0w3G@t55GIq8E-DL`N?DBU(&w0e z49;LRjq2s@AGqD{Awl%N`hn7B;KtTu=I) zabC89V{o;1=ZKl;B#M?M71vakCw0+_#M+Tp@kNbsV_33-@c*1TPZQqntdY1R@wZ^m znW(ZS#;R_V1I>R?w{oXg8FB%=2F9>06DMRi&h%3bOOsz=nO=*d)Y~&^6f8%ln+!0}p^494=#|zsuK=gS`Tj2$B@2&#-Rc}@uydYLu$$qxD{K`3}RfoP^uPgpn=9eLZo7^r+>>=i^73SL>r}_yt zqej-BBHw^;P@Ys1k7_;mX{K!S0_Xaych0o6pzY;%lzaLZ`I(9;u!%&MZYozd%E41{c)j8$`b$l1=J4+`Bq!^;8DeKMV(QZY?Imn zJSgg%xwl}KVW2~LXhan2s*_9FWUnVTO=~#G)mbC%iDagwp+1Gb558$mZg=BJC=kXL z2^OEA-o_%9g-pEWTAvwLNQ{((Pr=mu-*k7GU8SlLljl>oyl6UHOD$&JH-?_jT*_=q z6!%x5pGOgXRo92sBeh+z-1U6q{fPfzOf;YV)2?`FR%O2tA7_cp;cc6*`U%XYRSSCi zwaHHuwnL%^LrIFFv2dC(hAYFbvBuCeV`<~gaNPLe#7&knU&&xlOsl~_@-LYWikM!r zK8-ORvEAxKa@yqN9*ODZX?Wi0er(3xgs!L6gkR=((w6;+-MRP^iHUe7GKaFedQhIQ zCZI+LM_;CX<$9YQDu+D!#(5&Er~UZVti3Cf+8& za6JIhEj~u5QmE)Dxyya(v5xvPsrtiFeq>nB;_~7VbewI$JbX9Tyl?ZCnuh&$4Pa^H z^)l*f4`iMkfQ!UZEW=cyUBRGG;#y^Vv0H=Bnj*n?E4m+2RI~l@ImuGcHmbJL)74HM+qqOz6Z8PA4162$Ij=zZ!u66Sns&icQt?SKU{iHQ}u%UHyR*LK|0&Gy#FqsLnhhjuCs3%dSwol7b{#2tc@3KH#$;hMBuZ~$ZS6t-uZhP@wbmNeZ`J^3!5Co* zXiC!PB7U6d7UgLfu$%h^RQU)zpcQbt|Gyogr)dHxH|{F1@IY+A?f&_VCyw!H`zk+F z#_PKbvlnk)<+u%A%JV>fx;*@8QcmzC%eJ)Z!0UHc;hwJYJ;6WfTlEcBldj}10~-j; zY3x7eX_LUcnJu_a;!Ve9LjsX>sxpH5CvWtLq%G)AzEdjRs}U$SvqWfLi`s@%t$0%B&7-)H{5Wp0HWv`qd9{O1`D+NFKKtv}UHZ{$_N^ns&8LU~P| zXLMw#X`H?TB*IEnUy|EDNQGaTpR*tAg16|GaU@FO612(OBxvGdS?0>7mNv) zGU93VIGsp8ShMc;upTHK6xfT{VQXzZIY>sMyDUBDn?8lHo7$75pr<(j&NFqFsyMT3 z4k;El)R$e1CU=!_YB~{sAN~Um5mVu4@IY8;mg?Np&I_xePf97)N_rJ>2x=!}GVWI( zVN@{Bg(a1OeAomb%)N$0xg%{~NqgUc&P?G@%wKq?9!H16L&ep~o;N3(D)}v`Hrb~S zUxcn%dwP!7nnOQW2Oh!w&_inWu$R2BeGRUzT;=?jR=5B7MRmXtS@?EmrnqhV$jbrLK`x?q{{5n)>zk9ep@f`Al7)E`IoJBl^1*!(U&@Ovm7KEJ#VN}7 z>W-f7m1qLp2~TLp^bg~X>Az3~a9D_;-SJm;9<;z6!7kL44xkg^A)J&KUv%q%=t}X9 z;gaO(Uaj0mJ@<3(!AX6eT0%Q~Wb?En{9- z=pJ}o=wv@_JD}fHzdmYBrf^Gz{hSxLMweMY*k9kgP+sYm-{z`~T|ok39>ve{2O*F7 zBZjlLi`D#rTfMiID*e%w_qTnhGyzvqG4AVncLj^wi}f+)|BO|QYq0)4z|o2HqxDN(|8`_OF;~c+2kP7U z5HDAh;V*lW`z1N*2l?>(Z*(6!7qX1U(g&I$_yN|rFm={A)&n{)Hiq&~5ju4iRHMQ9 z1KqQ5N&!n6wRWKG^Jf*-w1);KS&o8^&d_&*MTt%9`*NlAm4z>)Dt_C1YUKU#s_f+T zu1Rm5pZMEB|G5oD8j2*Dzqh*+%}pe0{w~K(C8y$A`+e?DR1Mgh%`NJ?_6n21Rhs1x zi$&`|`ZQ#zrH5^X zN3eUUR$X1pA*G9!r#ncJ*iDL*uj)JCHRXkzB{b6~ldEEyRM$RUb+PR1zggZ~E7Ts9 z6_}C%g(?3j^W}K1k5L`5tU;l%_}VGC>$ndyH&QdDH_a}4&g+8LXVXVzit?9gSL>MP zg9?HqW{P9&&GqJHPP@Xiw##Tf=Ple2TD#j?_NuGY6n>Px7(U?q1aI+`d#{_i7s{R0 z|HyudU{lXi=55YA*Akb9Yc|_?-RVazm;}M zJ#LNS%an;J`~`8580hX7-bbyh_$c%BSkRrnCS{toyDzwG@?GT+$YF`Mf#NmME(ORf zl;z3_K~lGw2+&bO;k8)H-9X84KT-ra*e{iS7KT}0S}Q2^)$!&hYA-28yMlc9QsP_j zfNO)?T|Oa?@;0fpgq5~P>l*8B`%~>-t&-`U`kUQL&(UMnd!2K8>Q_Ru)taim5ekdB zT9Ra{BmXCh=FeI?rMnalzFQ7ju9-iZFX>qQqSnx=;A}bqEgi<%jO$?qkYn{8gN7s&8uI+GY{uJFZpkGfFvJ&9kpX zu>OmF;X(8P>BVN@o*)5H*ceUl{AekoRa29d{>DX`!dlG&VYTbHX}z53&XDUH(><#3 zrA+%xmz^uz>s`m3Obh7Rqdl>$w7j!@k~a{4?SxjJRy6%Wx6yEJ6CWo3(92m%S;nz* z?;dT52;V^b;~eGIU1eRF&VlZ}s=%_U8+Z+o?WgfvY+bf=hHhcVs!j-A%N4rd}SU><*9G=%c$jbIguW{MDNn z!!6=9=@&UJhr5TmZ^;3$4e!HmG+mcm;#oyxCr*r-r&smJ;9E=Gq(!c0%5ZlJ_cM8u za>k^A>EaF3kXohG->ypTxw2Ew#v7Ucq%(@c5pqZQk0u(U?G;HDS;ze+E_YuLlZ|No zq!wdLqYuSX=pN`5mLd0W&2ZI{z#5q#-(!204LT%w@=E*OwlxR0p8N4H}&}FY_(hv6oxt)AP-l*nkV(B~l zCoY*wbzP8KD$nIT?(Rxo;~;GV<4{F;iE%cjgPdVObV83c_#ZHra zTnLskwE}igwX)|b<&oS)EyI68@3@xyS>>b_uQsW?Ms0^@fQz&nECn{1hik_$$MWV2 z_%PH3)F#WcrMAV4skcgL#XjdxG|dvr*G7J{yqxDgD<4;S5yFybS8xG-P`#qQ(T7+s zSc|nuB$K)6PSJn7yQyQfo$3>h)!H6byR?M|;0WxcJqmVdoZlW$hG;k$FE`$}4ux*D zrR$HCsd_e3)$SnE=vDQosgISNbLuF)G4925)rXjlWVz8Dyn$o19KAUO&ZMVRgc@&IOU4J>8+oKXR5Dj$fLdFlS9?-rH17KFS>XKr6>r^|>HC zhncjqTn1yt_?sqEWvDTagVH zo9bZ!o6m6LkSDsrxzv1FQlGIMKo{^5Y~*foW!<0a?@?UtH?9Pw7=|;t;}mo)B*ndc4O`t&zUoT2YTC)o>qrjB4)F)(7r2?q4puG7cYs zZKd;;1XmsZ=W=yFHKh`85`jReTHi=m0)AG z%h(1}&>eGYcMf;RnQh$AFb?J4OW(y&rYI#;sVVPNhA2DHp3rs{Uvxt2C^t8iQUr5n ztvC6~cZaXpT>YC?qV#YtV|Bx0C03hkd}RKEd+r5rf~}2yk3G9ctiU*72JfK5(P(!m z{8h6W2~4j&6)o`j$uF_4!a-t;>7FrOZ=yNnsq!M=eNipqJ5Rsm-;{LLRqA>CbOdcTtM(fa-89IIGUWF?d{96V#EG$944#R%z`3 z^-Ni6O=B?IFunDtMOUaH?&)%nwT%7<*0Y>qNy~3YzSdKXlb@-wmS`z7O(M6!Yr2l@ ztIx}md`GFVjCNd+kuV;>2vXNru5{8;tP?EljpbM%s|gPxz#_GmwF?KW3-ooWk3LJ^ z$SS2uB1YAeYqD9}EETbw>u`9BYo@VCl<-v`7hhuv$}$?SMyMB*ncy&2$P(dmEW@Fd z9Mvp}svlIBE1Qhj@JOjM%#Y_!maB=3RMA9Dvep1r<28=a+Zs_=am`^mBNw?%ni{ph zYk1sJ-TvBRl$!3m>mIF)H@;v$*xr)m@zYgFUF}X(JL-Xk?ro7KTegYYEvJk^_kYSA zb+0kU9swJo?y!;ES6!x*Mft`E@s4OmyHP7~Fu*K+p>L&aJgaQuyhqk$wN)3#6 zYI)6OZZE8(onUp;Ry}1Nr`(l$>QC@*v6{J@a1ihJp2NOxKeYqGM`)sxNeQWreYLVW zHd1Kc;IrIs@)#HDYn9XPK>53?lq_krz-QRQ`=<4x<(+4UIMFpr-N1fo4d)P%ixosL zT=CR`)Y`^c;gPjDU5cIxTW!zCC+lc>%_zk(uC2xb?Kis>W&Mp@U+HG_F&~GMVRMo5 z_#`-Gf2FecpEi`wA&sbtg7}7*cyd~-a$4Q0v$ux4;(A)vc#g;WlsJ8%aoOBQ^an_r zy#Y?p?ipTGNA38(wO@1;n`7tG$7rLt1x_)#%9~x=aJ1l!KWfNm#B@Gi zI0){64W-MIc)XiAR3sh~7zuZ971e{KaUiEK!5?Aags* zblX2@yFOdqrS~zfHRhW-F*S5Zlq^00_kA77+w_)C@HSK@+C#X zPzW{;vJB!OQ&&Z+HAUf3jCooH;Oce-iXZMd-=5G{z$K_P1I^? zPp08H!;b>-%vsFIR0~lyc<$G;S^Yf}`tZ%fX2FMA2@MS2V4^^qkb;7dK(9^w6+#uZwT zRXB?Ff}f^*y%zsWc}m=PC9G+>K)=9z=Hw$mkKkZ%26Q6>_>_<3K)94pa)9oqhsba0 zr6&+)#9#OVz3)*Q_JrHXcYKW>u8;XVff^oZun!r`mG=FK#?bXR5S05}0ZgWc;4a!l z%X+<>hQe^#yy9qjJmM>xvkU_9usZWj`KCv*9l{UxcYg4%+Np^{HJKEUZv5MlPWTS4 zZB$_@hjH*diY7NeHO>xJ`>0H{zek+K%~gM0ZNzGNkL zW~_qO$?m69p-M7P6muqE;d#4ExgUNXgO@^c>0Z!=E;4U6YQPriD%)7d3IaF|Y2=h*gD%EuEEzlsyyn(} zwnjI78h}*uJ3_XQ6I^D-0NsRrQCYPa{(!gQg}esl_vE!jbe&L@c15D!6HpuXUupMo}$2@w#mjzGQr+OA0!OOr15X0ysEm&_G?_Naa8vTnW;Hbg|@IF%_ zaBv`vHr<)32{On zT9GWOt}w2|P3IZ#xnv&!bPbInMB7IegYf)t5Jcy{ermLUZ8<3Z1=2yBQi}X^wxBZa zVIN%ZmA(!f0B_S_WCvZOHe$rj$z&OXjI`62^i+xdtbZl=D9n=b5_51QX{mRCqfi`| z!2PF;B^XwROmu_To#Wz!3)Gg{*rvK=-jElJ!bMy>$U zb6;sALfRRpfuH`B?DU9ZbM6B$9ok8AYF9|_ztumcgytA+3Qs-y^3ql zX1Owq@%YBK!fj167?*r=4TW~yVZj@_$-V@OdVqf}R-(~?=gXQ!)0gudKVkr1O z<>0oy9n?0qq961eD$5utZ<$9lfmT#g_D1Nt@CpcsbR>akY);XtSfqpKTRPg9P;>&? z^kM2j+bw;H{uEp+9E%A^7K5dMz0FYm!?Ld%D>~;zT*)2Meax<+-`(f zJCPyTHGwoo zPVec#%1cny2*ShYEb@&`R#%vM33r^6@@vTdfO+B`3<)m``gMsL7Mdg9BYjzwyv>LM z|7>5+25#|S7W{<9Q*2>Ball=soDke!*onK1ZU$%Ao!ppJdz--~`%sbu2GI^_17HvE zLN9H2!gPI;x(4L2ZJ>`3UowtA$SSF8MM*Fal!AlQN@Y5+TbGBIy-tz;vGvyRQ6ycs za8=8AChkH)lq8T4ScuGY_hO6t;>)7J-QC?SxVyV%ki`iWAS4hXNPvX6jkeq~*>~^# z{`knRYMN@RI(6#Qsp_idsrGV5zwlb~YRg0ExH6ZRC5=NHZ37-Bx~`+Pp_vtT07XC4 zYqJ!BM^P7r1s`wg8}A&=1ipO@9O|y@;mwI`=Qo3avvn!!vSbJF(4Gc9^t-?x`xZDb zf3PQA&Aa9K9sqE^HKKWP#N+>H9f;P%YQn%#ArfAGvaiD1UBsy>KqGS1fRh zCIHuSIq-XKVibBCGwDne+h9N!;FzAojz7E#xaoJYaetm*=dZoVc085_JfnHQe_O`B zpNYBf`zr3`3pe14_6M%kaNuc<1>WF9;H_0L2Ye;~-|!h`)$gB~WRn}aU#DYRS^omA z;l;qgyqQ({9%I?x?m&4n*-2-L>$sN_GL_t4qAPczcL1jji2(lII1aexfy?-%{`bnE zOw)ze>-hC9Yl7GogIWV$_-MA##+7W$_}y&a&~q%v1$flovo97D0++A=yxIzG?M+wi zMVUW$uYUyaV8?MY)jAG%3H94Ib^$Ka?MyH2OGdVcX4l?~Vwc?O$2JUF0X(An*iG{< zvjNAS0w+B1n%=2klO__}ymU3E-|Y^Z?)5mg^a!rom^cnN2f3vD*ZOSVxy%>!J7%WZ z4LFb!fE#{DUH#tczXQ0!PXRZ!0l3Xyv6nSpfUC9&WI%AmUsW7JZXiQH;HV9Qyv1@` zP9}1|ug#3vHG?6djx*_(mF&;85y0`=iuLa|l|3?X9owYIZphbJHrZqV{^Iw*xn2l- zwpMnHKyzq(Lx7eDouUOZrFTh7#3-6*hQ-K3_v8yLX{S4%$cZuZY`!|L9Ww_r4-qH_o z>ci~UonanrsATM%#L*dv@XTRso2|>)KPK;FQ*WGQTmNyN4Sbu$epplt`A1x@c`7dJ zup96x2XH;7MsT;g$8n$+z<1k%@e13*?3!Vy<4*iuRgWEbs~tOZ!60eo~9|xSCT&qzrT-&<|T(g&{`pA<#7)#@0%v&Tf z%~u80@&10^GYR;L*8*qmK4^azfiL(G@Xuxg?{6_%ITUd{Qk0;_uE2Zj&*^T5ad-ZS z0q)-f(C0MZ)f~he?R<~1&R4PD2RCMy$M*ux_1P>!8(FdCA-4YdtL*SoPk|3U7x?Kb zpe`_{T&?ETMYwaFssp$;n!Nzn+Wx^MZb>u?=%==^o}ztc5|F0@$*CE!dWR zV}K8P9ms4yaFSmEj_oIGlvgfro|m(a!IA8f_OJYw?(^r~)DH)JjNzUiOyG{>->IvQ z-GAN%o^uU*sC6^oQ|}M$cmePUZ(`feIm~)f*Vqy7pRl^y*}zp_%=$kQ*iP;Wkeds4 zV3i-&bYVD`lhv4e6sQC4-;8x+yC;EK5=sgrc1yzX5Kj& zaIQCGV^ezr@AN|U)9P)&`FsNO?k2l(=u6;r|H87ptAR_H1pA}`?rwL`j{vS=%LtAz zGzKo|B(Ay7J^igQ?U)IRjxY@dlrwB^U*Iop#lG@}`t7wIxPT9^gL_^Ac|Ks5I%I)v z{sQ|dvB2#LoXD=+{?qtCT+Do0oy(9)A2v0dW$C7a*^l}~ zZ0NMjU6YAP8aOncq^I71rH?WgezhZlK&u52wSFz4d2q>q9 zOMBqKy;@nHYd`f-+^uYVImv%V?DIp zo$R8pQ@|H~2SO%$7?%JiwZty(CkMTA=5Dp~gJ*YmWR^N?U}AC$m=}NfvW|ONvS&w)XS03R0+;5__m#a z``m~7=R^qCC7==aXhQ<`?E784XWOpKvbh(S>u(S{!6le2-PaMgzh|(&m2YJGBphMe z-o47kc68fX_UNy_MY_@;QZ_q+ea<4{aNMf_3^{!6t4l244v5 z=?Nv+PiJnEqYu~SS}^zLKhaRX2^`pY{eyR7n2_yvnTq2w;Ixkf&iS5ffX8fB%-G1j zGaQEg_bPjS>mxSv(R;QitO)8zWIGR00O$L^{?$`?DA<=q9H~r%w)axM$#FK5x8+G4 ze|>emIFMT(wzHU^hqA|ZFJ;}>6tFKRpsg5KBI-5xE??P%)+T7vGVWmuXU@5qANTNL z81$Wuxn*;8-0S4``T&p74A>-Q{9z3I?;-5BX6>PWo4_6%u?Bp-z3h`)7r=kM4|XS$ zz1P2x9sB^mUVF&7>Uu7me?LF&RAm_CwK4RWN!*M(`}M#>4f&hJ(1$O9U66y!7}hpm z94lQ~!!~$+fYtB5%C2pn25mYI+FccEg30TiQ#J5B56GfuRPDJ94at9r-nek z-GP<4Ol5n`ThBI<4zejh*T6=kv3s3!p$(RU4?%FtpJ_PTa}O@r6v&-C5(&ORQy4qw zIj?OQ`qdW(Gr%9t%zjeDfcFOd7{fl=Fqkd;xD=kZll5$S0s5&&(5Gdy$;oBxCP#u> z5~JZp=edLY>%kbN0r%Xg372q1$5nVJ81Q?Ti(j5GgCCHr`f3>X7@gTc-zTzNxHaIr z?PbsXaS?3n1NN_R@9XTJQ<20HyA+&pyEAv1@#QL(g+kvR!vUW<=RGA$&-U)m*vAX4 zKOpcwgJJyh2egCn>`&V&w%NjR8!iom}Tzy`{>-9MbUpZ>mFS3ZQx zo79L~9-qiTW6|dktC&#}(wP+=N_OS4NOshOu3+z`vlqw>b^gJ~O;_3Dg-_W9qjSL5 zDq{}^V@^Y;xpsTqz&-_VceN4RhWm}VcZMYBlkNadd}n4{uf5DqTM?tma%BxuTe77N z<6(@o8tl|w7$01MzUUFVOYw=l?+N;1#oPfOHK#b^#&NFx(1(O^$7jVrxf8hVH}>iC zyL4iLE?i=61khmPqS=gHz1Uvbd39}VeA5%)uU=ydM?-&pCy(7Vql9(pgCSok?)^+> zc&;yuD}%YE`x@5ylfa>_A9;B+j0I0Kt^cS3ZgYS3%j{MxjA5Y;*3|hMcK@_b+I{v0 z_m&-U@CUmQreGFcSAehU!p*Jn=ujTZ zK0x153^qmtJE`C%xVUmfVg7ag!ONsLE@Hlpdz^E%PG6cl+{AQmm&+utbY%~ke+R#8 z9O&+Pu*Zkkw-c^I{id;JU6;b5lmTbIHj8T=}zbu&c4$k8=t3aTl{j zSjHSvJ%(R*upz%eU(t^Z*}j4ezn=o*hU0Ad<(n|>c+TEmo)5O53hIJ_e%t}{&z*}r zS&!@3ya6|7NetIam%weyP%^(SUJP>^ZuF>44(s=G($v*uWA(T0HZ87*nnM`ea zZ?H@4!DpNSc4ZUTsiW|Fll@Tff?eV91?*xCjEyL+c!~oz3VA{s4g_B)k{j{935*Bz zpx+ntO`V%D)%7+rAaC$Hv>^9*@Slf6Sy!;92JK-(Wf$4k$&WxEKSFvbyQCWiIjOlF z9o_46MSCZLQ(uh(A6U<=ZU0LjR3uC~&Ah+`{ zM*4?6n3=&o>F|?XR%~Il4P{)P1ShalJ}|BhfqH4g4cL&#owerZW5y3^=?mpr z#LhdH0`o;@*exgTvlSj6*oG}jU`_{dXGf{HT{GN3UIE-;90Btajls9qfv<2*pOoK) z>6V?!%<7{6Uj^(l>H;=k3bfVr;9DMG%j2)I-d~@xuU2M*&s7Y5xs7!lEC+wtkqg=G z3BF4(=lQV_C$>!Foci3<4}0+!GdS)l(ge&Z#H{>{bF7en6?a6YH(-(092m`^;>EwX|5L z?GmFK^gZ3+#y&P6_}3@lN@_09xoo&!oBFw-Q|g0Zr&7TVr>=UNcdL85y$MlX?z*N6 znd^=)*3z;eLZ*s;j~C zdbcEaMv@dH=x*|IeZcWT9oQ({PygddGiQeyVE(`W`MG^*?}Xb0O9F0(Y+sNBdC`?R zFiHQu-~Sf;LcTU8MR{%0+1~@#>0vy5d)Qw&21qm5^ZH;|WNM2+!;>0qJdnEo^jX7C z|M1%hSDqT=fA7#mXY8_2c zr%qnIUiYD*MyJ_wQU`fYguXm=g3FS`3*-nL%oiEH9o?-9m0^8)t3F9^uU&4s4t-_% zwq1FhA;n406n@mfJYN!|-G=_#0BtsD_FuZo~YdyZmULUP*v% zXR1eC9u|x?7|yKeZ`jkMKIChn0pytUwP>3GWC6#d0d&GJa#N{c|I5hRJ?P-NI_*Ip zHmq$w+5q*KYQGQUmugS5=Rc+88oR#ez^>}-_5DbU)5H9m{!!qCy84BCl0a8eQ;Ds z)PX*Mj=CHABs8_l{T7r#B~5$*RBtV_V#jlPE``L7oEL) zjTO;4D2wjkh$i|W2Q%&0rgmMo-2iekK-q6=8^+zX>z7?Otfgb>+5+gP;Rd(3u6^0_ zVXyBgBc1g@^=j&5ZPz`}OP%+W-g=k=(?eU1^S0dvK>47} zc_gW_4%_pWw0eDky^Y(;nhNs1Wv^3vyQ=#AwQkppJ#{ul>AOz{{oCz|WzXz-3S~H> z^Nsln+N8hX*S0vrSfwS^E?>L;fL_(<1k{5LDp>dO#S0ybwRGcp33cJJ9mVBI{G-57PRxcLO_>`oQ(Qdd zH^$=FfVns% zdUBEY>D88om9{DLc-3do6Yv}ru)DDfx+T8&RaFCPJZvUa#u_|Vy2ih!9JQs2erj!`TeL@Q6@1~GY;KNj z@a8sbGaL7EP7j_Zmy>#_7a9yhrqe-RblASHdJr zqhnuar%3I5R4wskABZK@tK}`Mg$2nX=QB!PCj41G$F!A?5Z#Qj4<{Up!lhbY^9y31 zHB~%~)lwo(msU%orIV{RiU`(dO%yJ{ex|8XfNh!3l+H<;ly%TL7*A3TP#hMo&@TbQ zOic(lR(XS3A$prjLf7GY)Z_;D$~L+)jyFw#;s9|o6@t8~wKAi)8CHT%RjyS{VB0wA zh*hu->CMNL(lNy+l`*=NYLM8}^3$3|b%wp=bBJTu@XUiQE@y1BRGR$OmMVp$+6rHY z{}MvsOLRZwv&#H{ae}MzyUVWcH6iiVy~d#04|EvW4E8Z;V70(3^oU*|NP;Jsj%JHp z09!?Q;dR;S+7`hJkx6VuQuuz9PIJ=yvSNVz8ox~%;D3Xvu=w+rsbob+6ixq9bVaS` zJhujlJ>)&QyY+T{fK;0G#W>yg8Qs(U-mY%g{c8GyLwD`6W2xRy_Q5Nj%p(SV~sSPK2uvpJ}&RyU@SFA z?fq>?zB9Q8<%yG})#3(IB-I(%F@C9GB^&+`p?g2jDT2>3MF{!yMW<-8mutVuj$~uN zl8rKUQ)XqJ_oy!I2>iIZ*K1`5kSemd?T}TAwph>9G!)%z&+%bC8C{k=aT@l`>)V5f zdbqt@AnwbO9lQilaq7qJU4U9bQAQ~pZDi!+UX z$W|+R1ORq~wu!R8{}1$;>Ye*Jzgy07SegBV+JS0d4eA)Nf|iY=N2)aq$Ec=T?(u~|vx;2EUzRFUB{@@UqS*57d+k0i zQN7W*i=|mbkI$oJyUep4+LE!_0|*d0kVI60ba(NC1Ri~bbu0m59J&ML7;8swT=G;{ zj6Prs@g3gu7!bARq709L`Tauwth9=mnn6?+xmKtz=qwXKkH?8L_rl?IvQZ zBR?bu(1I7Bo%8}E>Osis6eZOVn~=`Bkgld*^7n)gF~jC4eU#L)ZlRk6i@CM@o96-k zeuHa5CVq-mQ|*CIY5v=J4gvL<+Rjo5I#xSSwMMmvdg<0o{2+x%R%t$3?PJ9Q$li_C z5{qPO$|aYLbXSj2LRY~kO|cFT-dUH6&qNQgVaIGrgTFgBku9)wCHGlp!3ri8-6K-u zdlZjN(Xb--nynK)dV0H%@#B*NuwYo?U0zvZR39n2%7nJ@e@7?P%#^BM-h1-9+=qur zIM{DjPO(H9<`Jx|@Q28ZsVarybr&x=>oTO-GGgNl*Wi_Mi{Q)wS@*kKHsx%3;XK|3mq zMW@koskt-_$~qm*M>_zm=7i)TKhY3<2qVU7*O#2NM4%1iQ(G%od(jD2MQs5_pqc!7 z^v^64zHA#0+@8VcD%uO^^PP!m{5SHp81QRpqC(+^Vmf>K3h}?@3cCT>LSxe_8-{xm zI%^ZGQ*<|W<-a%h3y&|KCGGT|T9!e_8sh_ql0Dz&8UdHs*i*KdoGpt%J>Sljnp$*H zxi5=<_ybDSmXFWJ38Y%URWB1aji}r(U@Vozp%U?{2;3iE zuHiE0U#jt-wJ|DUaoSMsua*=o67cp0GA^%yYUPwgYe|^0IHr9v5AZz0W;k z7K;n51EmUr(f%px7WEg^$y}cj)mKp4e&^9Q%-enlmDr!s1Cmh!^xDs)&(bZiCs5J2 zk?~>UZ7=!5l`9B8u>~;*P~-ZGLHI>IQF}+YX8vK?O>}#+RW`u^(fg3X!c+5!I6{zz zNIl7O!UNOxT7xPK^+$v0jY9Hut+<|t9*)=xXjsFGi`73-!p{blYt&}TZR@YJ?R2Hs zMm+cDB@!d%((w!5Y*H^(2hIn#7Zi*3GslA08F0^;}h%P(HizWYG&@D{&Vv4SFD| z#?z|?AmL`!``y+-IZ%;RsT8MM)5RHrTC93i-FT<=CcU*X%i5jVXqzUy0`%!5bQ5rt zJK$8TCI5nTIL&bGq&9$^J%x9X>H{(eg@6N5Dn_NsUc_u{j`Y{$A>p7}UYOmYfQ4;D`;#*!Oo zjpH_Tvgjx87+7IFM@&YJn!D;YpH>ykt1A0`2sdy#LQf<~HN6E}U$7I$!2!4z)X8zSCKrjW_$B{d;>a-DCL%?O zL_=ZSR-vgg?AL3DD|;?Ab+p~Xduc!d6Pp89)=pH;Zv?B|QamEf1T@zb;%3~O2-!{1 z3i>J9&s(io(k=65SpS%3%&A!D`q{ko!^J8?o?q2s^iNTyhrjZ&no;Bx+;qKeoFO~P zFDRWTo8jB_8(b+%5EzYb{4~HD?qpWgJhSy7`V)bGIQ6(FZBl&+DJ@JebRpq1o3Yeu#Isz6^=6L8j# zr@UTDBMR_XSUnenHT*Nn!uJMomN3e+I%1p0H^2fNK}Oh?LhruYobG>DHWhrcG4B~Z z`I`@!A>)4CrQUn&%-&+$WTG`)=t1H#uhUXnx>r?|=WxnR+9wYRdO@VaK4m}2irR|t z#beAa+5RqT>0Q#-{Ehg7WbQI{-+xt$WFvrygwRgF&c}Aqn3r8t{62= z%Vp11uGobr!IuT^3)=}pb&2x6X*8gCUy%C>$;MyUN$ieW6V0g|!Y(u^{3l?0Q+g0aL)7V~A zhOu4o0oa3aOOoO4A8#66h@EsFncmuoU)?l}9%Ok9`~a(|uKb2izibasigbzyOgP1- z7z3y(bVO`Tyv8pGGqFq6k-lgRYC@~NXRepeBkofx0WED6>4bOSRAIbzIN_s`eLkYK ze0OtRFXfb8QwM%JOMJ==c2NGBQ$D_+i!F`U%JYLx@Oy-Huu5Hz-}zjSdKS!}ZkeyC z_7Y*hrEnI#bn2JoLLC#+tmkW15QT&mJ+^MNG_>V8B#509N2rPxN2tZ$&-0P6Vlw;F zP8@GpOrQF;-~0^w2_8s>tLDv;@y3O!gTi2fLMg~B-h&aS5zP>{8 zc!5`^ccG2sGt)g-Ykf(Wgyvgk9l3_i89!TAl3~(Mv6a+WVi9186X%If=_jPg!du(k z7fYo-gljlib3~>E|05q($}ZFA7+r$a;jLv>+j30;@RV3>H>969$$BZbt#6X8zjD6j zvigU|pSIS86yJ{@Mn;N=zeM@)Kdi~U`d~leZgsA(Qds~TQB!drF+qx^#_-#v_T^2{ zd(qwZK|{0fsU{IE$~%A+fL;GtT5CIRb{30KJ;h@&-TJIH;9^&@+_D7!R=AqfeYh1Q z6U!VKyuY@iY_T-a%1beplVT&hLb)&IEC8;JE$u2DlPaywR1Y}=Ytl1NoZ^hEr~HfK zX4w__i;{MH>&(M+z(M<}fjk^VqZ!itulvP9fbA1P&0KTrqh`pRr^H#!I?z|X~wFtXnzh46EQ38*;J zU>Rm>RePKo{89v#D?ixZc1`|^Z$J*I-_h0)UqR&+nA%*Jl06W;vmG+tL`#SSYYSYV zjA*mee4f)Q@o$AQ{#aE}JG3X?1&^x9=C>Z5=mVOQ^ms8O*$~K6JoJ< zw56TY4`Ee-$5v5rwUxK3=*kB);BB7N1EOcli&yTVG}P*Zffw#Wy4oiW3@& z4I>_0Jtry16O@edlEqUKrH{lwqMkGd@OvVNfqX0RW?>(5uC<>^wC=iAB9r6AbTrJA zga8|Fu&S3>D(w%x=v?3WyGwtq%wI>P6<7tQ=K<6y<@ao7%IbOxPf$xZ+WHYi3hS{^ z2u3r|6>&6*C9mQHTh16I@lA>oC*VXr2V>*VszK6gxHfuc(IMip1Jpa}*PSf9^l`2V!bqILDe`)T}2937e zlHPou@hwZBw2%23>6%|jWnbK$a&k-|jq;C@HTs%9hF(rx!K3*<&`t6+IfpujcH>mK z2Wng9ZT;bIfRa4~#@jT!SH5L7wzkVpuL{*Kb-Xh?joz_LptE~4c z`|!KTT+|P54Mve&-aCFett9$ZC&}H#QiS+l zWSg2dV!kx@M_*!c<&Jk&ZbzK#sS z5qt*y;NzrI;yLj**!Mq@?=+<`)s%l@E+OmVM(72;3D)3&EJgffQUJ@kSdm90*{*!< zO3n9q7Me(H$UDNHG!}4D9cggSwe&=a=f_C)>GVwhf)ts=v(wY2NX&@eyF`tgdOW&-+n7rnG z&6)~xIzJJ`r=h82qI9wPKA)L4L}*-FN)LTmT;WlB-`o+<)eC&(PFKqSa|WAir)*g@ zu~7-aXFginQ98pv%(`J>#D(!#jKOWKUxnjRQ>g~#_4G*3#V4{7rALx8J@b zdfh49BzsO+#CS9bcOse+kL2BC8!ffLEUkIh@LS``d)40572XRy{vL1HRdlpwhwBW* zv7$D%K3-?=VWqVy33jcv^~uY+Q*z9)4EJ@KwG6CFsb1ax{C+HX7_yD+jP z_15?&?`L}fh}7$)HS`xkXK5>9QvmRuwK6`i&G}%GM?boJFDN z7uQD|;`zHZS$Hh8u{wwxYDP4(EE1+h?-6>-wX&-IU%hY>|SAuB43k03%tIq!$;MnhGug zMowqtbdi-*%#r2N8^l>w;2FUbo`M%xM+=?4S$x}SFWC0g|5((I9zr>xvDD30vwiCE z!+~ekp#GpaZuw$%=L-lAekI>u$g;)l{Z0-7ewFutJA7H}WNa(=(=*XiK;ZNKgfCt!-;Nqjo|av750Wt<7bKfRKw=$VXx{Em>U>tJtjGd1E^SW zwjz|wvCQNj=KKP_6%SEt;E4s|A96y)9V`FEvBt zyi>kfr4u?f7_GcOt#vll9-+^xhUI-#gjeL@1c|1%Hx7zjQ`6IOjyg=ZiRmzx;A;C5 za7zwIHwa2tZk@TzAp9jvwmg>l0OMhfxPr)$cA=%VtJquC5yoaO{V(74M-TbS!YKZT zH4^sAoxx7TLy!I9XGv{oA#@fBzICWhk(-@wr4JOGvOXK3mp8roI?SpUgA4kQM{0-3 zS32YgM+m1EyznZ`mp?_O$jZph^ik_B(u3#)v#=7n&BvjOWTtJZg+yAagLrQEA?%9` zHdnEycu2TzTPsB3aGcFwN1IVw`i#^__?^7Hd!(j_yd&ls9RZ=%6WH>`lJkgi;f$>j z9&7aIl!$te)54}xGZpsO9pcrqP9$C(^KhE7v+57GkjsX#Xqp_!|SC-s>jrL)19i;-jkJI ziItXLx;wTsV8@a80=!SDcAY7sD_!sGaVtlef+`!*0{-KR%`@1+EBEv+N}zyr(=gcN=VPF4-IPK+%46!>+yjFFv1 zuy|nG6nTSl?5JRyjy5_JaI3(+`8y{)O(s%0Lm-{m;e)r6vCJ2>KC0Bfd(k1nwH6H za^_GEt;wXCSbJ{@GX9&?E1=Cy~8xrl7=6lc|tzXr*;YdSk=+Zr7E%f71&w>>X>`%XK$s8bvvOW z{;AWSNADvJzPR4z)m<3-mS zjy98rO`>!SzH>K_mP=Q?`heiN%WgP4vve%)?z<)HeNnL0$1>D>1$RdwzXDbFZJOE= zWg74yWSaLIr+p1ku9s=Q-g5Ru|9B;8&$PJX)}M-!O_rvJLxgPk-=sq9M0Otb#3H)<K{?7#B6@Hqak!+%}C+BZJpqV zufpsIjn`=(1@wh^iC%zPG(eoGcq?%aj^Kw>Q`*kqJ~-fY=^&huG_v%Fsk}DJS}R{C z`q(D&BWx$FJEa_FWA;CmFuVm-@P~X@PIy zj^>T3P{772;!8w5Rf2YUca<-}fz%gi{`vjFAflXXB@4D1q)K24mpdA2yBDU~bhUbF1c)4=6q7?F%R{rFz+ zk9Y>ySl*F~71N0W=mvR-Tvt&{55j^nwAjO|#93j!>sTbj8}n2<(i36VcN!in>_)wO zvupq2r;5qEMsXKsN;8BK!0Q@e9&k5?94W4I_*FiJl=G7_uqbmp{cfhYnt!S4Ei@N4 z5Mk1R&oN>+ZZ2CS?lR?+4AUf_=fl&{jp%ADi_v9D#TFr$Wmjfm>k zr=&JUPNIRcJlQdyU)uC5k!?DJa^53ysO* za9cdskc-wUco1&<^A9}MRNvYNcgHvRVq_LbIz=_VT{`eIZp3c%-!?=Is*J26%4uP| ze8OYBdn|fxDHLx@g{VNWjLy)!5NpXH1lhNTkO4c-cZ%yQIkp6t!Q-`m0k3>hhYQvN zwly{Pj4}N7@K&+AwYipofaklbR`<@Su!;IbbOO1cS}jhO9E42a1geGkWLRI3e)VA+ z^96ibFw=SJr$TG`b=78I+B!fUm26UB@C|jDa-MZEu}MV>=QSsO%T~`;+=daya!2OOzgGBJhv8siA5x+< z(gMp_AwFKsH%1{9fic~+Cu{!5nJTKw{{ZXN8Ad#D;t-UFvMc+f&n-J7F?sik?mNZ` zgDvI6T#HdWDMkRh*jzw+*dhKRJ-&4gNb{o{4u6$+g>4W1(|TO;mkjSB#51<(;#sk! zxnEW1m>0sW!p=gbZ9cF$y^^|G9j$KpU&+0EKh+oG5ZuH>xmc3nvusTOH~1@+0Sq{Vb`@fC znx>WJufm(DtFpo1C3;FzfDdC67Li*(XsHi53$GN@V;1|ZQ*NYQf$laTjsm_jLI*tF z+2YBK+TOLLWEgO3EhTQWd|_#-*aBaO28+YAeR6Kt+Lt@Xf@~YyTSoOUP4(Pcxf6#8 zLqv-h^n(a2!b@^G;|sR8{8GA#USU~N@U~oLGXv+yYT}Ujd+5FBNndwR4>eEKe^P6t zWBhQbp3O&!kVZLP3znOfBcawesW17!k^*DUOF}{n4^Tn^{!h#=CWD5`80g1xr7Fx46?rXmi#H(>^X~gOdcif zN^4=B@g-)^9{w*_izO#6u)S1nw(^*%Ft55eYAJumv_?1sSh8jl$LmovUtiHqOsnQ= zQ>aUlh+r04)=})zKFe*irHWS&MY#y`mG_H+W8a&8(i4S1#}-PF_rXu_1Nee{G~m~( z&5egiZGiceCCbDOmYIMs-(Efk_(-(ak-DMzTd1sh=+yV=58tTLi^4#0CU!?UBAjT0 z2L0-SN|bW(JMgPw+ab#>#Svk?ThG+EngZKP@vHYQ)iGHQ`5ALHc~7jNeu%MD{rIZ< z`|y?HEMolICW$}8U6%?EtX*lFMZ+8Up6C?#svZI*UCuDc%4-^sUczPta+v1pS<=Qe zre=W<0~kC6{u=Zfx?S~}jQF@KFV>-%(2P1n^&%q3ev*?=fCEcj(1dMq^cizTez;q< z*~$7$)s<)}U9djJKT!9Qw-(1=EojnAD2KH!1EkjJ<{mhVa3Z%OM`4(Yw&rU78^D50 zCcD_8%p>`EA6(swethL8;9#k1v7&ZXU{uKrS-dnEH9`aNE#olYFqnn+Wxu8(Lt^U_ znnz_XM78pSk9YM#exR)-A=MTt+7n;-H712+0B zVL|y7RiI5<*^#bs(DH$7KQR_Bb{s}MfHg)3iN3b6n#*MkWpdeT(?q9npALnOl=o3r zl#jJG1{RWB$<-a@w$|{GP4NgVCEIGcAdHk1lZB!``2vYPPx+}Xvs^B^AFlp}Yos7_ zMOX%31hX8vXSYX7LSw{uHQ)mBoz-)s$Ep}%lY{a3SNfh65s}o^`~}fZ8+EZc00Y=j z^u@djEtB3-eE|Xdv9u5`P!%c@$u3@*vMG7VRCJi?hfQ8zUTq67UjfFRomCA*F|v!p zL=v0-$@22rO1~7#q-_KxRT0-I*ILJ#qd$kDzko;m3h_ggEq1ldEc)~9AH{p5<+zfc z`u29InD#=ooG#-R;lt<^tVV z2KTS>%XFym#of?9AE#HZ@f+j3NO&MEq}obViuL$ZO+@Vp%OdzH_IGZ6dW4F`#6-@+Q?f0GtDB8HkR-}{_EGGEb3-W7+{%v zwEajtN8B=g5}nOzsju@@*N#*RADir|uoO_$DYq7{|3-1P8}voAnR`jE-5Qc9{67XV+j&~`zZO|%ovNNtqi`#;#8+6XCw=h0is z1W_QmkUeoeK3bgus|2C@R{1JM(#J9T?N?TusTpcOMWDW9o;X# z^a$!HtX4Vkf3~_O&Ha9{zfl|Hd!=(uj>?lpHSk`-7fD1T+5i6JNDiw; z6yP!6%@SJ9_)YiJpB7^`x7DvdZa??0B>sJmJzsX2I6yg_Ab+kP89RRSzom>t@qqr;10~zBY5!MR`Mg+pnZ0s34Q!2h3v4x${y*)swE{v1DL+Qf+yCQltcEO7j^aYKer z4xEr2ICSLT@#BY&ost+BI!a}~4D}p2YD(br;ghF~nlL_a*o5Iz0>@978u-6^14D-e zj%hnPuwmW7kWo`(ro;>#88~jju;GpVy&bh1KYj4nQNsdfj2b^|!i>PFvnCFY4jeLh z!kFRX1E&lgH*xH6w(iQQaKZFR2=(gLCa@0+Jj37 ziin6n5J5T^!A6Y`L~z^)69fsOra;Uzh#3M&!?6rREW?C7)E&z)1)pCDd!Xb%ttH10 zVThnQ6d+;+ChWm}EK_1yuEeB0&`PXSDltTGEuf@ynDxd3U63x){JxnPCX9jl$(vCJOS?%3Vk9YX}? z+_A>h3(M@m!3%qNd0~hk-3x2oeX-mgw7%Ha*B3(s>Au*}GXN{>!6^U-1O#A+AUyy( zdk0~qJvay9pr9ZO5u^v3)QhS3N>$56<<7diClN5J7r9!o{aPp|S^;`b7Qu z^$Ca|y*?2d8cIL}$DxFqe;A>*2e&XHGBT2Y2+|{o*w|PCA~=pEDT)SB%RtO>5Hkc? z4#x@*u>#Bkgt}uTDN`s(>i@9!Cg74@RlRrBsZ;Yj&sA^D^E}s?l5{7KYeGVX1{LU> zbf4}%(o@dq&HyMuMF9aJpn@Po6r4an^b?hf0aOx=!1H)TRPZ7JL?Um01TjIF4hJfBm{tXnw>dFsCngQ7 zP7{8@1feW^hsR`dc}!-3-DAQ}m>|f6?>9L-ev?Ju@SE@xCI~XW$?gf6oW79BDsY8N z_z4pPS;*w@MNRHN)MOL5qb7WX34$zY@`Mv6o4}he;VVoK_z9CQnl{-5zO)HnVS>O< zoBVOjBQ#eyGxdh>gsnKYdAn+Te zUax0@kngRU%@$N`Ma?$U4EQ45Vzr}UJMIDKdB>`iALTL&td3P|brrG-VLF_s*tu#J zNZ#(kq+OUau(?+86RQx)!gqRC?QZX?Md0wR;wM%i$b=tQb$SDQqdLzkIyTF%R#aFCC;3rr8 zvCOJN;Loh$D^?-!Gpm6_Zq+FW=2r0)s}T6P)ljOq>Jo&CtN4vo2>jw|rBYdikgu#p zvei|$AW~gzHk+#u_|4URzrPA0-#1$=uMeX8eX30>5Nt z4>Uu_SItqaX7&i8HFK-gGDG0E%!9$e3?VS$l~%xEuLW1;t+VF7W{+-f-Gur2NP_I3ARPxOIYv~76`J0 z#UD#soPt2wg0HYZ;HNFYgl2IGf|>5C1WXcwgAX2vA zH!KkNWeapaQ3i3;I}Qq;m`shKeXCxc2w;^%}&$|>`wA7RP4e% z06p)vI$Un6P2g}_u~jRC;|P4G2Nip)Hi6__UQF7HNdu?Xil4ATC=1^cu)2H!t6ks@ zSn(592r}V^t)4*G>JWIsR{Vq&f-G!x2Vz!lC}wpEd@(D2!U{navwA{Fw#6jdBJd}z z_zEioS<)JaXRIzkFk{76SRwE;)=)BMbqhi{E55=CfuFO6(?zRC5Gh*m6;=rRqBWYW zSiOR1#fsmsLf}`d?15GY`MNcpZ&-bTc*Dxs!wP}lv5rO~D}?;WX16;~wG%bFP&072 z$h%Ro8}|V8yvOErdu;sBAlDunwrYcL9D(ohqGGSjE|9$2he`V|Y2fnN@Dnx&W#M~+ z9Fv1KhrkoG;U{bmWWtZwyupagDey*Y_z4>XS;XcE#%;cE+~yMa<2L++4T3Cg^M+Gw ziz&865J=hZ6}+|tY$;nXk+r!6p{xyGVS~WW+QO;4%_9isZTJcs1b*HY$&_qfL9}GU zSJ)u%OB}7M9IZjD%FkC+Z4mfX8+)J)LcU>36q+`_AknmO_OL^2z<8>75nTCf#f}YOxll01GnFf zpRhwH3*Q&wm>jY@1>TSyKVgR;6Moe03q|cNfiG&uPuL;IqIPd6VfRN8cDEpqu;VA} z5M&9vj~51lu{7Hv2&V1$3OfW@+8#=3c8?&e+3^*22z<>RNf+#1L8M^ESJ)x&3-)NX zZ1)LbWjnsY4uN0hXkFuI4dOLBe!~udU$e6Z+9BkdJjS$mi~-4(owJ7>0>5XUOeS^+ z`H92nbfIcDYWARJ;PR07qGB)Z0qA+3!|nAsoC3Gcfvq|q97o`L{HWOPa0(>v4Pep% zOd5Cs4*Y}zLRt9!FvsMu!zJ*A9ry_c1ex$-4u3f2a0__n1wY|{Ad5MC;iMxFO*%Y+ zVA6q~a6phH9sX#BZ85{P2tpYLzQO@PmT`nrIfqve$vN;94ha05Bbq5Xe1d4vfv<2t z;1?Y+t>W+t;uQzJ!U2I_;b>jwXblo|2Y$l=fnRs92Rb0+TRg_Jd5i(6wu7^W0|LMA zm`Geg<#MBH4{G+JX5jXc_n~4R?g8j|ztiLMJ6!^g--)d{Ask2GdjqIA;B*Nj z?+aqmK};HWgHHT}6GB<|fe6Rsh|?|bN1XTxCj^=BVj|_f$s~V z;-Jedki0*HNry0L;0w9%6D|m4;RmA}lcO$=AP{xoCtMI@!cVw@(S*w@2qs+k2^R!e z!WD?7U7>i|`%yFS`pE}SaRB!K^nB3m3k2OBfiLLBR^1Se zBk=tpR2*`91dl*Ec{T6V{**x6$E2${Dd2VO!!H6D3)~l1firG zKjDTTOS*%xj60mjxc!1i#*LqFLy%?o8Y#!Nm}6T6(VQD!;f5f~xntR)J0OS`-S`SO z1b)$-$W`1yL89WuSGXbYEAC{W?hXl3bvM4k4S`?hXx-vy4bm+)e!~rc-*U4Dx*_Dd zJjV2Ri~-r6o3n=-0)OOQTU&EO$gg?4ULUIVqvil=2EG9KASw>x9)O+?dHlhU$1CuM zJlLuS!f^zCAdHH`9t5M(J&D4z91l37nc5Y2k<6CMb%EMFt#*%tF`iy)Tw;43^3WO+|qD|v!~ zM9G7%@Ic^~Jjs036A~n=9(;ud0>A1>6&s$gAl>lbD?AYR4UX1rj@BU4_TV=>5cq8m zd!PqGzQzANB@9 zVXsdR2z#+rFNEU={9ptXN4!3P(RI*LhyVAPAB@IojHKa${>obdVu;e;1I;e{X* ze%c#Jq`d(_B<;mdcp=Er-f%+mMpK$MD2QoZ{Dc>ROyg^$0^4GNZ4tx^UVMcYf~??8 z3kni&tGvF}>rBCR>AjpKD@kNsvUr-Ru`0x`x2(pYXlFa#H>6|Yli06Fx2_FPmj<1o5Y>P#AFdlv}>2AlvfcD|`_6EsoY* zj@Cfy`tTb*2>h;(J^eRL{onJgdc)T_*s7}mGy@Nv8*3I;fEm0`lG45Kc30^!-7QKkDu^EkmdOrsl>Ke zVp{~sk{@5;hafBYQ-!KOB1l*L_zFJ+e$}5THT+RQrs2m|_#yBc{%ob~j|sH4A79~z zz;AQ3?s2pRxt<@t;fKKQ`Pl>g5b{GFV@5p2fWpYn*~1TkKl5*GZTTVOw*tXn2vvts za|AVmP=tIG6-RLoK+nel;b<%n6og{|Y&8JkI08QsN5%0#P$2ne0+UW)(jbxu;3onQ z%EFJQIVPux9}8mX0Dd9>K_+}H5Kn7?upq7l@Dl+DGA$5G7XpcFArKKH3jzE@0D`Q* z*GOfy#WLF>NRa0#QMx7Qj~oAnBMrem}q-7=Vx;@fb7aF$NUJ0nQ!)2>f|46bhr>2&#>u zS`dzskD=BWE&=HIcrX%+2Sb8LJcxY;Asj*AM-!+u5ex|=A4_7!Nz52TlRbexZwNw=75VC@ z!d6&eD+K9E5dRQ_Agcs3rFt+X$kv1Shad!gJ*ZV$!MH$c1@R9-2>ezsSL+57f_yiK ze+WY0cR5ZEI8KAYAc(IBLf{XA?0Z27`7w_!6CPbaX%ghT5rn{B3x&fG)Eh;$F;oj8 zG4gTL8pjO)J)a0gKq zRoVVPrW(R0gdoVOp=`MkiVL(x2%ivwz;A?d)pjT$$hAZGgb)ONJCv{YLP~h4BGl2r}Up!YQo~jtNqQFg_p*K~@MSwQ@L}FNfoTOgW4X2t$yS`HHBtA({nGn^3QnqmAv7y`c;&euBOq#)l3;|IbJ_?>W}(GRBt#eNt+5Qf0- zb8H@QYzC!K7@rV^z#oO#-@*{`Qyx)fJfeWgEX=tg41vE9iAH0nH;!r(s20Q$0J!3RVj$SQm-RA-y3v&{jm z9>EVpAjs;GT(uQR3i7Q8ejoyY--;CK-AGDM=tl4Z5eWQlq}Uup(t^?;f**)L;14(| zk2xxX@;HJ|h(O?vBkXAr2>BV0C37B2Ky@DBED?dg-;Bm$anzeYwMkS9;z{x;)S6=H z13jOPCQ|8WOpr)NvB@ZeBL)0q2DN6QF@fY$Sxh&J>4Ic7iVuiFC<{N6=ct>H#s%qo z6dw?UAQOHmn#q@<2|=b5#Ro(o$V$<4z8cLItI?!Dt48qwQ3$dsUj;ST+8S(aAlHcE z2ci&UjcC5sj-~{Kb`(Dlg}`q|i;Z41EhzS)_<<+{elJ>T4Wk)Bc^JhHL?Q5p9FHd) zk3nS;#V14|@F!9Bu_%Q6oJWy09z{THEz0>J3W2{Bi^mhFH;HOfs1_trtj5 z1X(jysCQy%L9r9V55yqwJF!x;AIk_z{TO~A27%v?mD{6OR!|wm@B=Xj{1HduDMw;Z zoyPD9F$nx=jD0KyA-~4s$2yN6puQeYB$B8!g*wxy6C~5*GpI7datC@o8&74j@q{3i zjbn##2uBC_X$@6s@q|F~nH=Vt!(2f+7iZnaA(Vx$6*%)_xp-l&J5}VsSNons?4&)fu7eA>8zGW3es8v+e<(=F2K*^ zP-QNW6i7as$3*j(D9Gd!tn~zhvhZ^yj;p0aN}!bztn~y0neeNLT&bE!3v$&2Ydrx$ zR!wN7Mj~HnBr<|RBf(lvK#(=~I;YJR)@BO>#dd=Ao`4{0CrZs;A}c8O60G+G1b#13 zX%7>cpfXIb-V+e`!$h?^N#q2zNrLsBfWV({#GP}*1@(D?wV!~%pC{O_5)kqmJWg!# zI02fQ$y6$hN;9Z4i#kC%OI|~j8p|5!`CKxi<&r5uCYQwak`Rsv@UwYTnNOw!lGh5D zXaN%i*+P=_orF*pe!k2RwVX@~a^)oJI|)H1{8}qd@afPPC}5?lDTp-S*SLX zSwXRxWPK+g$eMg@(_!1{ux)`-C&?O5LXdTm^Md*`$r?{W;7>W$u5qjdjkP4}JqdxomSm4gLdb9O*s#T8188lf(&-E; z&7w{Xb%KmWK8GrEENh_W^QmkupGpg|`4qO7f^aN=uN6>bA(a+LK3BvgN-87BS5mC+6a<;@>#0Jep2`Xe^%Uzn1wmF%JBR`c6TR zwfK6b%U0E8s{-Y2iZz~sAnT?o?LjIhs18!B@e~C9AXV#*Q+YvcoMMfqAn?bjdViKG z2pY2#Ydi&kKjSF7&QTUL*Hf(b6a@ZyihU^sA-|Q*WU{DHLxnk12(mfydDNF@DFZ!U zNNf2*IwQ~uY3wZxVf%-lE26$)IwO#LzJytpFiVgtrCHNy2xZ|Hs~kV8>8zkoO|z!c z5M;t{q>I%?S`!o-Y1VWaf~=7)RNLuNy`9bp%I!33It@YA=Bt+;TT+iL2~>J%)^!?! zte38KhUvVZHcYdw(-8Q>biFr87Xof%ZoFnT7M^@0< zNVCS%5cnIJY*s^cInzkT0UL zB1;qK`BFAtEM+x8zLdq5vJkd#_=PemD`z!<@*8L-6+*kV9! zkY$}_A;<>VdT*R93L4`q>og02Kh8D>vusJwoMl<3SqS`Dwl!MMmIdwgEbBB2fxpgC zbBm)U=xk+KvsnoIEiISJqq+iWE21`#FOn~zvJ%S?==ri%D3!IGpitJZB@Mz>4Zm1H zWfd(akbJ3%$yG5qP^@aKOASI<_>~4n!iJU?lp7lBQiC89ep{++UjXVL9M5;E;R_U9$$M5*-D0NC7?dkSeqII*-&frCt69+oM@~~4FZ3nwT5%8 zENIO&)}{u5KiAsh4Xq;RY-p@a4FZ27m(LeaQ4#f&P!A}S$d^$~nPms`d?i;bS8{nl zv691PauBv&_@yeUspj$m$(L)GRt?hvrCN^lmxE9ieznOFubC?dD$N}0F9$&;{7$ag z?Bt4qYA46~%R!KJa+PL3S8MlkB|*KPWBuhI$ohPBF=A^Nu{D6kD90MiL6D7d&A~KR z7PO{0)?f|-f0}EL)^Zg=do9Nr%t7F<X;BH*Ym8iJcP3FYb}m! zt$a~XZRJ^Kc?dG$ck{JYH(wIex_Q=F9)hf!ueJvHdS{R?3mStw>nsmJHsI@rF>Zg1 z+Xu~Yp0$>TARFgf!&$x}XwUMjwLAp=EZ-Tg=c|IwdY-kGhrnOYcc)wVnxMCpXRYNS z@V5%ZVhI(MQBMW+fKr8g71dN(MnKQk3gv38P!yDF1#F`LVVi_ssiT^Dp(v1iwSfsW zFd>FJc2l2-_a~Y6BHCiY0;MYfVh0 ziK&2Uv&gzBLMRKr(c$RSDV7EGPLXv}gdh`szu4&XixokmUu4}BA;|j0dS_H@_D033 zpfxJ8Zi*0OBOdpsxa%qI8nmZH)=m+EY+CG$*NQbkcdf|UDMH|{6?@aoVqMVNEV6cr z5cr#=a=C&ks;Hrc8bGB+zK#m&EDNCL8>MQ!Q7Q|njS_QRg0PLjuQgFYvs4yHzTUzl zT9^c=wMwjy5`?nwn_Z4S-BLx+=$2R?B?vO%4@%AMpi~t!2PM`=34&};YIMh?R)1Wo z3EJZl>!SogHs;ZMhWnl2enDqeVvUp_$Y!PPWW7`u^wvwPkrD*{dZ|C#Dm4WCtrBab z1cAR*u2ib1qJ|pkr~y>#6NR3X0OaTC_|75e^_qyhUJ=|H7v6Z$`EA3aK{hYVd^_fJ!o_)*n0&+S@`Wf z$B=%dCTR65*n0(nO!%WpyFaSb1?^DPo&fxlU;)#?nn!El=l7u1{NTMV^@IRic4t~Ofj zYE95+SDCviglz+Uv%^q3)tW%^tu9mCWr{(wTg9%c5X!>u3^+avs&zqoP{ppR5M;t1 zS384owIS$?tJrlFf^1xE4`$WwXjW|sdb28aU48tyc&0 zt!hg!+^S;RRS5j8TD{(2$W4aZVz{8uBHw1HZOj(v`A)6b?$qjnW~av7)gWvG@LOGm z+O5?El5h8z;vQ2BTD=Q?FTZ14I{-o9&PHIg-cT&TCYY=3U zT4y+~^~UpBOVFR!u-_U4*_=nl4cy%Z?hXt#YS?fMf^4JSXfzpGi($1H7HGD~cNkI! z^8|XnTW@u`^@gC;tuse;2yPvIyT_1v^@c$5ojz09XDUIvU&l`C5X!>ujo8LV^`@XZ zs$-{h2r}VM>%Gym-V*etb?mebK{l;-M{D)|WUby74A$z{X&r)WjmNl6+}9@V3k)~w z*lHbuY_rj9wisHQVRaZ5Xm!YU8B!NB1bV*LXm@*!rl8$xFc%F7ZW?~4&yf0!ray5#5 zz0na2*BjVl1A=Uw$E+>f(H8CqjJ6usWCMb1tJ!L`8Cr*7br}|Dcggn{QV(+jdcNQ6 z^!m+~pwn+M7flFm7k+oZkOs|`K=QpIQ#NGEKzG>0?wSzF!XHf7PAAQ_pg(D1cTET~ z;m@0c$-LPS4CYPjt_eXlZ}uk}&EagL*%gd7n%G?vf^4JJZg=Q@m#+8dI_UJs_vv;Y zlLC5v(CYRFt+t>$Xrb>G1Q!awH>BIcR$CzX{)lNAF)g4sYGGR~2xZ|9r)+`KR!1=h1ex&HTEppDt1B3;wXm%g1ld|^Fx_m8=9{gaV7%GFwptKmo9#}gOZR(py-(Lc zw@-dRw+EOF(DTD~Z!m0k1ifJ!owgykL-_p>-5#|&0?7}?sD6yGlMYA5Bs36!n7Pw2K{dA(VwbS!2ss>-GiX zwJvthg&-6DW_Pl-*&PTbn_cXn3qiKo>-PtAaY*+@bPo(h*X8lb_JF3DXGl{IoxsO#1`DXxc|NeF!cC{&+^$ zX8nOc@{>6#oTEZ8p7)v0K7_LHXB)Wcjs8$D-RLu)eF(CR!EiXD8)LdKp$lL%AwQ-0 zDN_aX{A@6u&IUulcs5}C0|-kW{$x(`^TALc`RN*JT0>1>vNmAO1`x`^pKsz;HwPoZ zY;(Yz4Is!ihojM$ZcOOHlrDhrl>Ch5XG{ms^Yh_kHXn`zllhP_4k0XI_|r9-UmK1D zlAo=kigi>0rt3rIWeA}x{IxAy;MQ;~m~Rc4mmvh%)@VGQ(2Xfwn9&6=nUSB<{2Y}7 zJ-;@Z&euj`!E|lJ7)KD6BK+Ap&99Hf0?E%eP{jtS0JDt|x*tI(yD^?jrZhF9nK{jX z>74u;O{}3-py$`ev$gf{L@-+)GmbHYB?W)JK@-#?ko?*v!`)=KV7@s&hl>ehU1ZJpaUxOJ0T!TKioEp9_5 z*w|WIU*Dj}CSvk}jji>KjZIiv8=IS3w;eyV|D1b&=w+{Z?fq|g>$`sA0seMT{+UdU z!+6Ro4?g)jZn){tcRu5`Bgenz^d0B#e%|wc;D=uFvRA(PHLrW)o8J5jZ+*wRe*HJ! z`@Y|O@Zk^t(MSL66My;X&;2d$xnKCKlDia3fdp-k-~lehAX35U-P6bC5^Q1j*e>B4 zPMzOBr`^7zb+t2lTCb@cCr(32MR70~E|foi`q`(?+;v*p**~&(x+mRu-G!J9{dP|}c5?gN&K~7U`r*=*g9;2<@dY0%DJJQcR?V4+(wF{%7Gg9s8ox66>{+ZLXuy^K^cJra9v^9n% zva@?Rw}qK&YYAG z>*$}`Hv9yQXGDQ_myQ~= z@4oTMo5;`6=fP#}nFfQ%JII^b9UG;iEpm&`mFJJ{>h-B>eIlOx9K%84r${r3ZMgaT z?dNvSiSib_E6=e;PKd=XILo*#2lOQ^VOwaBo15C%?freNx2#89_b*=4(P!V@SvIsw zkd|Y|c8}~*GuFAc!@6dco-ONcdrw!U@*9Um?VTeh&+PA1byLu*T(}gyeY^*OWKQj3 z8|RLk*jY>n_SD*x;4t6aeP(XsDYssC9ag0+t6W;^@tt$ZQkV9#%hKLEy?s)#4h`r>w?!x-5%Rfl z`^d9*WNW$9$q65?ynXx0dobstN4Zr@sHr!kHXVI6FWR~Ln{+_hXBiuAvlt$I_+i7B zUi2cOaQPqn*Dt>G`N7`T4G+GQh*yNqLNqWK24C_XJN6}m!JE$?JZSjZgD*W}=mlTe z3qJVpz;NsV*D-$a!|+cpeejKjV9#*dy*7)%XM7QXZ$E5!_(fZWf!{wceD!N*OqSoX z9eHW*_k2fgdthul8GLYj@5$@>*X-fubk8Uukz|;+?;b}#vfj0`XLK{y&YZ`zk7>8d za#Mcn+Dq4^3|=ja<+?v}R#u+2FI&zPr3>yGeV*Johl^eK?@L=0ZHvAaa)~5$d`H_O z?h^afJ!f#5cmTX94=d8tvYa%1S*ar@IH6p0^>^N`S8KRxXPa&H%&~KNh^9kVEw~25 zatnFN4L4oi8f%BHJFpnY)p}#P0&r;EDMuXrbKUt<94lC=vbfRMCDE*QjyAQOyU*@$ zRJd#J3}Urc>31GD!M^_Qxbu>J;Fyk`nLDo1gI`^@d-~ZMrQN1>Kpfsty_kM|BZq<` z+o!KNxqX~#$4xuO4stwMh|cVv<1}$Zzqn?5|J<#Iu0Nn(Tz&Vs>kmosgHJurNlND( zy7`tp>XJZL`t=R?wv*du_54#MM3;nG+YMJ9y>t8Y z5$<2Mby7c?m3HTjV|%Ce&fRhN?4_e-VLyiFxbDoEv)AmN#GUIyTTIk7dU!9LaU;DZ z^w??r;#zV0C%2EtzPIbR<(dPx+;nWA>85tgwNJU_>YHv<*UDb#)^YJJyLawrH}4!@ z90|3>suLy7FSj7Ade6=|*(8`WIYD7i=OnV&Q8oD&_(wTeotB_#daSj(Wh(T~mHT3V z(!06NyP)5juD<#3&DS#sv08L_`!0U#w7Sb+xbB7llExe}aRMIxw>6@N#~$ewidO;;bJ_h-(ZLM}H*fezWcvZlH{As~2L^?VLk#vWCxy z>0R48CZ2Jh4FhFR8&4)o*9AwmG`D}hpa{cz+vvo_pbSdkLn!_&-d5d-1)UMyYTf2&f4H=^}valY5;rgqz>knzS$axL> z<9TF<4e}_?ZmwOsuvc+9c=??@-O83Xa^KC*-aY$-Z#s0tjoQN5=$5^#M%q8PyC**M z-`0l<3zN`%`k*>I)ShJ5Uxpe~KIoFiAHB^h58NnL^MuEG;D)Chyx|b50%S&+bA_jkWdO`jTLir2g403`QE^7ED zCDPe@4YwM8(Qt*~0nRbU46ijjOytc!F_aAd!ypmHe}hQqn&CFX{f18(9wh=U<6nFT z<8s+&+0V0g?CqaBf9G9y-}9X3KJR2B*nknjn)%uLl^<)kF`q zo7{$L(V5M3oxy6dn8pNXe5&ClgV}V8fmTf;VwuWZ4^iNNIhL@HtF~2}%^|Qk9PVW* zd57C=f9&;=FEY2?Zt=|5;x683cE^&26hRbif#7P$oN#C)~r6Ky;0h*va)VB`~zh^jy}wc^0SOb+CK)~XpHIi{ylUIK5g`)zXyqZZ!-K8 z_pj3G9oYS6jH~GJ{f4hnLz>ZMX+On?n%q-lltbFrXq(@VB>bj~(ufW`M31!)F*l;u zooB3lW}(jg8RTi|Zc$%}QA*6>9AoU!zZ&C8BhR9l4*jp7l?gp5po;-oX`rpFfv8v# zAIoKNTU{0`#Z1sFi_MK~!n0Ye7Pn2$TS?8h5|QEJY-XFy!h%`xxNUBefPh-71Zyw> z;^r;l!%@y;^XU0iDzqRoQbJecbX(#L-*SJxem3kKO>$s0NfyA)G zwVLh3p0g4sQ0it;5YNZHqCjGk*o>EaY$Chl!%Dd9V>6-K!^}bi?a4fa3}0Tk$M{_1 z1J3t3|I+*%qxcsS+Ve6CvQw;3!jJas=sC<>$)4gt`-{lMUeXsJ!KRH@QVy@r`Zk-1 z(CM(-T`ni_BjtnQP$gru5$cm=%|dqAEKWNyW(kHW8;40Y41(|(@jwzoj#!m4TxyaJ zmoW{Dz#7U!V*I#1~5)dK5<8i5OR< zKNq|OmBJ8DBR1O&SQ|fw z^}V09bM?wKD^FS}8cW8q(apV9?77cssc^C|`3KI2oqy>3kW*&c%YO9JtP~3~S~t9jHE|by zYKC|C8N9?73?FvhWw_h$6@1EPjh{3B6~ANpcgDXqf6@3i=D#(6-uwmg-SOE&Pxt>HuI_s)G7nC+8GSXn;u%NtHfwF z+GBn~+Qv=JL@;Tv@gseNm5upVodK6Q7$;~?(n8#sNZOhq_=v%Xd-D-DOp6Dqrd*=y zoYwNaSv}ZK&UyWPP417`SBRi7^*c=QfOC}q4>R7x>d%8Nb28+%6jEW2)f-6{DZM^y zmNGtJ^L!~lN{{-nM3XE;3GuZz6QK6 zVlW&4zt1V@R`6L4yUzs@q5GYDt#}joItSf1fNR0mari$Ez8gq{?}s=v|DYV41qRzn zb>+m$34Y(}!PSQ?pSLuvC#^qd|3&BDI1`?^?>WAg1U?ksgt+{sb&nm0+ zcJp^SpPh@gvnO*7M|=(vJcTk)}{fkOlx3ErQbnn2U#kT^xZ(t^^Z`Q zqZE!*syzplNINyv-c=Nq_V&=N>|GP)L{ia#w1CHSRF(b^_9FGlSY@6tO})NXlS(}g(0P&BDJ1>)5;iL3H-MDC8A$v0E4_VG zjl-tOOMj)G&r{{zr^fwO`YH8c=DPfTQqj*r)$e=M{r4#OU&0sp|5Ei^3XA)5@I=4s zYW%;X-&(A3S8|bIZM^o|tnN<4mQ8kYH z)b+zk&tF#h`5DFk0{xc$Y*ML=_fx9gePuVlqw4u#H4m?398&&ODt(C>k6qPoQ|Zf8 zf8VRpm#Xxam0o{S*^O1{;V0GgSlOxcg`zxpF7*FZ`X%Fj4osQ%kE?e6x4K`xTY$yM ze^KsEHIAQB`uT(^*F`RN@g^X8`l1@gySZ7~lyxuiHv^IXxzf*;($7J748`yV5b4KZ z_^3dCE*Jg>RC)0yGVfo5h`tz>e*GHNADJ(a|BBK}M_u2d*1^lv_5W1zm#gdVXW`0x z|G(mK8l@qL>9O8V1EUk6nBb(NkWmHywS^z>IM zJ*oJoRQho>?jKS1@LDy_k177k)j0l``=$TSQvGPC^hcHaZQLjG@OHKSKVDc|{||UF z9{EtE4vOk?AoGrS>hrdxQno>Tp58<%dVVXA`%lwfNgeb<#{DUk_Nh$f^C2pew4&zi z7A|D`pH<^IjKh}x*O^dBe??pL?AhHUtM zfb?%)_3OtNob;=$=JD04{hwtomG<7HE$Y9zy+~#3f-8X3cP)_d{iqt(AE@!XMD_m@ z2&JE&+F$gGEnC08L@NDw36S=a>b}DimhnHN?t48BQ|!G4WS!gqq`d(3i{4(Q+PPBo zZwgP!dDQrRUe)^yrN^%*eLbBr(*LaL_xGuGA60V9K=0opO8yzu&K0VipH}kss`?*P z{rv&OmxF-xFQ?}1AbIKcozy4e`#wSMeo6J?5vAven$I_?`dZ4qcGWmfsB}QP($D8Yq+kE2?COvj=hIaBb=A(BpSqY2 zn%CDvomBMwX(03Ya@FsVYX9j<@Bgg&{ZFd?b5}0v5uMNlep_g9|7+B^enjcxr_}t5 z4y4@MfZS77Ija5dRPtvjJ(Rf?J$+c&%dP7A*OY#q zrmnwR&CmVn`UDO~bZ}OU?-k_5Za$>06KY&Bm7Y-ijJiIk`a4$hGDS`o4RJNTXQ}p@ zN`9;A|HoB7e@k2F<)vy~3QN0I_VH$=&zP$3UzNS=s(#Sa{}ms)qo2=Z4#kGWw}@TQ zeccW;Qjv+DLKXU4$$b5!${!*X``c9G`Vx7Whc_$xxr@B$^@~csa-Z0R><==3(!R8} zv{$A@Z%6Ktb~py<^?y{=|9xuyUa9K)8{|^oa{pU{FZD{DV*j!)Nx$C!q(14Z^zW_e z{^fb=_vx?Ha~R0|Os9VTQ%L3hX92nQt3d95o4Wt={Nd$Yfbt3&2{?~xC z`)MWr19kmVsvp0vuKz`?zvruRf2jKN|0({zs%zOdM6Xh(%;{A?#_~t-rM*w6a$+Yk z-=70A&g+2md#vtf`RO`6s>b=7s^75n`hJ;I+IYR{C&wb4{}-zM1M2$Y>Kb+E?fik# zi_Dj_`v!G?U0r`!*@dhtk^ifb57hOe>iRY6`i<)PZ`Ad=>VI2Z-^cZGTomP7uZ13D zUWEU4`Xl3bM3pB{+Qpz{{(l0)lJwW9lqF-xHx}t< zxk+qV?v*wtK-#$-Nd1x**)iIY`aT4to>!>)zDDPyzQ0oSNO|e+DIoonG06Q{WshG` zq;Lo=c22B z1k(RsQ1fw^yy!(_0vWH|f1?_Y@Z{dRfV6*7=}~ked?_pA6Ug=L5Gg13F(m$7X(5xm z;6Wh$63F$RF&@cF-{txtAlI;UUYk_fl6_Cg{J83uv@6%|SL0av&+q0&DNiw7{$1*N zxi5&nmHhVsneSgxX^T|!@-dal801>omA2lc^eW%a$hFLer1FvU=_-}}%6-y~@Q)~c ze4f1MNajh>_aT(@kQ&cFQ@@P+1=KHXKTYv}iu+|eKT}_%^~NIo3pK8FlqUCm7)bhR zb)V#=AOHP%Vj7S&BoG^vHMLw5qDQf7nJY=fuA~f)hk7dKA-RqMu}ATDVprn-B$ekp zNlQTHqo~q?N^_T_VlNtyRN9wR=3Y{%TkJyGl2lWv+%MNR0_h`8*9mQ=RR+J zeUSMQxs;PKB9~O^lJ;ah%b4U^^e6eH{^UNnU&;$l%8O2K4AprN2u*E$e&PSK;3Rq>QY0;R{c&^v^P8xnBBX@fmWx z+$WZPU-T!sknu{o+&`B7UB)YQX)0arC(Hdo#x3%tUtjw1rQcreH%tG#+((xFT-p?0 zx%AgEcG1Dozluz*mwt7*kI2|%+@cq$W4Vtk{q54vF8$?l-&pP!%Y8!hvGk{siXJ4D zdL>=%AIp6~%FB44sQ;C|iQboUB;%878JDDDpEACZO3Ny(sC2nsE%%+}KC#>%{@b6U zsQ>=_m)3yzbn&?YS>LiYWSvMVens-K?j+p;vXqb-nz1iU-woPo*Z6 zewjf_x%*YR{QHq_0uL9BY+f@1)rKfvT`g-_M$2*l?ep%_GqV#ZDjr*(`-+48zk{ZtgYCQL=e*cN; z_jPPg(m!ci`gH_If8Gv+_gvNfyHvZMQ0-iy^!hSY|NBs)jQ^Et{8jQYz7GJY=c%fm zpH}_eSN;5e>eoo=YlpJZzI-nt<9)j-f0r81LsTa1ynu~H`dtE2KBmfFqx$t0HO_lg zxrZnt{m7|tyiWBy!-gmIJXy&fR^$8W<^8JO9mXYgVpioprRsT~>i_H37klsDtNuQy z`nmi&qbh@ucK%Y0+udK3f4{mvc670q50xJ7rmT!h{tQs`aFe<(tJ?o(cru=ktNvOQ z|E-FDt(kyGlM(^3gquaeh$sd+^|5P28sDZK&kmq59uf@}E=vjw$^-hcStM{;Pf% zp8kD{^dD8}=Vzw)f=^$bSI@$eaVAuHm{jKdNh)3b`_!*-Eq3xWmHwL2zx>?}sx#cK z(hn)U$5r}DrT5=c`j&YYJHJn@k2Xdt>rGSX8|b85pHO!57VeYlHz_}N8yk_>`2jjC zX`0F;eSl6&`b_SZRK_fjzR9@n0y56e02$w(D*OA48i#zpFJ)h?`g@b==Nnaj)|Fj+ zhidm(svYSYUDe-Wk@^n;ssEFz-d&}Ko?3@xRnIfj{YlD_HGE3lxBU0!hm^hws{E6b zol6^1{$r~DA5-Njs@$uGi}f<13`4oF|H=3E($^167jnsqT)yv?aTk<+r)==Do=*U2 z>s3l0SI-xGP4Qo$=I?9ITdcRw!IyFWsA}hn%?1Bz#h^f*?H;1M z*jasdasSJd9_^1T*6}YQlm7aDPu?!#-%Hf^f8$+?XRZg;wf0hz{w(qi>KA)^#SwYK z$zXV+>h~ST7uO$A^Ku|&)t@!$7?0@YrEl=+&mh~%4qvXWkE?MUW}ISYTR`-93P`_S zq3U~zlH;y)d0grFn7Uv3B=?O}fB!-0@jN`ydr|e{um5Q=?zZCR)ja3a^$n_><#Xdf zHBX;LF7xqqRj+)%B-byzW1-iHy53jw^yg|GKJlH4_CBbt8)_cjqOL!~gOHpteig`g zKf)LGG7s-i*AKmOF%O?r^LAG0S^i#5=Iu>5dYK0~r^)rplwSXoyj=gNy8d}}UHIUN zJ}=j*b@YQ>k3KIyzO>7i%iAaX9jwyhi&9SgnNa>NQFQFsPU+Y0q&>NA{ooz?cZ&_B z-{||N`kA()u7k6Pe*G)xRqP<3u6LCkG}Zm`_v+kYcpplYbRWpP{bzlClZt-7id;j%qx}^UWr_>uQ*nm zD=vBQR$h4GBh+-!8NI8832i^|OG(QfFEzgG`9jkdHT>=LyU^}qb$j{9M5o`V(Qh2Z#hxyEx9rtLePRgu zJb!zgK5>nT5r3P{x3TeyJ^w$^@#Pl0u-|X4-%D-xa_d=Yb=jkZCKq}XEj}@u{8sO( zeH$(PM~WXuC{`W}Y;_@xYi&|amCX4!| zMycy^3;x#cSN;cTUub;()fu{O?EkZB%cvj&ZSM9T9DeUUF`%KU?Bl`p&Myf(ae z{kX%6`#oN39`GljBVN|$RoF{s^6_2>Ue5AzH=S7zx)L+SR^rC^O2U{}Ng9(YDPw9y-WdPp^B~_h z909k2r-B23M>GBJqE3-oc*UA`)h~R|@HhETkdIx;60SgfzDYS)i=qZSuEDb8%4J1W ziHiv@L0_m;Zn>=VV=ioql9zKYR&`m9h%ry>!(HFdh0AKX{Nhq2To~dqb3p@(dxE?Q zE;`mVrz`KWE=8U4^7lfh*KkoP_xnV=yp@sb(u)&=(o&_@$Kr&Xfmpo1q+{9=(uLteLN z=-+;0+UqjwD!*9S6Usg6v0IhRKB4j#3O$-|SZMIV^%KrK>TwfYL3aR`8{W68;n7&c zj&i<*Wj)T_M5J0Ztnh8W@elc%%=--Y>am5MiGR9*cl{0;t{{@ujO}v3=Gh^RM}tkZ z!uDEXqs<#~dd)IWff&g$mAshBW3QKdk@3}u{#o+mny**%@1sN@_eweW{)DgR^uLuO zG2D5icX$!1?yw#QO?dJl{@&iU9;H-b0}|x(+`e{l=h(TXMhNBe63%cDzwsssu)8ck z9KU5mTlt z-k!t(KCM0N(19MQ3g@Vz#yRN!1&&_g+k}rZbWWT(wbS{YGpDyDbaqE#1a^*}-9FMe zN9fXL>)FG)A`TPbe7|$$>7#pRc8_)zal|{{b9%RPG4gqb$zvexBlL8?wMn4wJz}07 zR$)Zjk{;G08T0dp-zYzP_S{};^Fkqgv`?s>%Wk>(`WtV#T03;0)mv0>*Qq-Pl6%_j zX@X$xYuE1_-QCvosMFd^wIOyX_9&@*F1^0<$ev!)mA70=tv9J!ZG5?=ap=5)zeT!@ z$T#;IUSYVO??WFje8licqE;C=$7@83xx#p(@iyaGJh1ZM z%12f{w(`l9&#ioEg}>|P3pt-DX3|VmQ`a;#U155%=|bU^S$N=`2O$;%e|Hd z_!jXB>%G$Bs!z%*{m%WUWf8 zEViRHy{=2jEn?WRs4gtvMYP^C$1Z93&QnMAY8i_DxtX63z`K#}H3vUzBmLCDw zJxvHragJvRP=AdcIa#`~@Th0ciXxZsk58z$xI|N?!@ES)m$*`{OaIGe#JOk*Brw_A~?M57gEEY`;+qU zJKo+K-nh0gJp04f4h#1m8ov9!qr+QI?GIn{#up6##rcxqt5#n%+`aGh!~So-Ww`ZY z?;O4=`#*=D-hF8JwtGK19N+Qj;ajf#>hMJ`HI5$mx_xB%VqkRVb5o-S-clY-p4%J! znQ3G6tn02Ft!*C~{l*PPNB>gVAHC$B7mR-Bkr$7i_ow%bUU>BNqnlp-meFAQouks{ z-ZT1m`=QZ?uKeie%J!#6Ph0uw=tqwk$2WY~KK_Rf1jetqJ~jT_`SQ5`q~7@4!|UT` z`L7-C-%-qiR%#Iy+aOQl{AJ6)QM`mC6 z%$H~B4;$v@wte1>1?Io-pWU8VW2-_@Nz?~7}5NBPO~4_0oSf7W42q(A!#6=iP*4FAVnRVA3Mz5B&vOF?B&Z0eAcEwabC{V%FksF( zV8RTF5pxy=#GG?P6vc#!iT`q!9rWFhj{tmMiqACO- z-9>_{_Zq=DwnP|cwpVzu_L!hsTPbv}x+NH_ ze<9fVeHOMBs)*YjYlth)>WBqGPf^u-fat4jErv`L#7lc!#n(H1#kcZM@s>@Bcr`g+ zTz7h3zk%hN9NoT4+Ojrb96q7zXMg+tb-ct=?Wdz zs$)+!uipT6s6mvfP)HU&C{Tv2|Bd!nLZ8tY(#^0SkcVR0#ymFG&eNVy>DhmDG@=uJs`N$gdP_7v z6kxe&6gKGi!njiq1}%t0^0EY!4NXJw%q+N6{@S#;slESem$l4d4vqc)EY(eXtWsZM!^tQWqam*wB7Lv(B8#Azbb zzcb8CdSX^>e{3CQhQZQcD03XJir*V>@`4eNiak&=aU7x#Oo0FX0BHCGMb#N?my9TP&bzPVGvs*xv@u2BUoOW0#^KM5p%t|i5W`=SZUizrXBi# zVctjf?TjiN*`P)F&$`ngr6Fz2wxaZEf%>P9qIpTg;=J4yVuMyJYOh9@TFg#=h^Wj60aK;Yp z`MpD}XE5m3I6>#%FvRtA#e73|eC#?JoxY64w8P$Lj2MsBe16&p*;JM=KMJ9kOud zPZoCH&qi2D4%P(cqLWr0~i+Om0jT-e-rFLq{a5Sxw!X6h?ve;TGU{kQX2hn~w>;`H_Gmhm=r;wy_8`j5pXx1l>v+tIG5PP9tBD~&#-PwDdw z=wP}rRis!@|LH?$S(yXv`#{vyWdu#$Q8f161$^X5?Ypaszv5tEuqdHZ0HHF6ipf4Npi96Rq_zxoIbdUhSj}TeMkkk2^k&=&mN9v|L2KKOy@Mpj_@9nk@v(78GqhHNYrm3YBZ!y6tEJ}5Zui@FXIkm^4X`o(^D@Wdax^#U;4 zb23tL0};3>2xHDq!LVn+kbMtgX3|}DgnjK3AlVB5h3yLbyq}wkO)qjW$0iS_3i2@i zN**G+$kEPE4!@Oh#NOu9P726IDqxzc0PRv>!F>hn)RgcTq{J&PUrMN{Y`ecRG#xr$KI8DSjyW!ETI-mW`OfjJ-y}Jv}3TvV3at}dcU9?btsZi)5TPi%*SR!bvR0u`B)q-~M zQz7%|H{tATH8I~nN4#&{TikujRD5{aP8{YmTs-UOE!va@i)pKqL_bwYe3Cp`}TwOkS`<>|VA{{H}3a{91fLY)ZWGmCZ)9QNYPicDR^CH8k^RQ%*OVh zx7NK#uGg0ytM#XrpGI`|^FW&P$&3`=ENSRJYf9~4LzeyR$xoEg+W})i-Qz?`!M~xbcFVwI7YeqPmuf0Q`BSA8G5|>9L-;Pf%-3~r1`Ti zQ}v8$x>9(B=1#pzf2HfBC*7nQ%G=aWx=Vkg`{XzEAz2narsU~Qse93L>M`df#m|3D zYK!aW;j(&qwdy@}UH^e1H#JiA*3TsD`bwpHnyBl69~4*7Ok0lsrh}*d((>~y)aR87 zuD(`f7M%J2fnR-xgX8>Tqe$fMr8FRK0JH&hItR=A9N+yzPKXZ#rVp zt4?Tqu8l`ebm03?7vt`B#~hMM|7Jp48gx1XD!@ro&oj+h~3 zvpKHMwSZHGC5}(#Hx3?Vg-R1^jOj2KH$M%A*Ucd~cVH+6F0(;yx-BZa?eK{If8E!b z4yb+OfMus0VYf<#vSb0xBSm!W#n95ou>UNS**b9|PkTV^Fzb zEdF|U;qpH(4BR^o-GaTbyrU1c9P$1-;BUFuSm4J5{b>OQ8;%x3ULn6SX~wkZ^IZY zSssI6jaXD<$6{SwEVReRq4SwIY&DNZ_0o7u`xB4rp$RxpnE-3^L=2yoh;JVf;WRo4 zX1kJbP(2yXLz7W{JQ>DaQ!p$(1?|tKAg^00*2JVD_E;+3X{MoXKpNWZNW<2nz9F(5Of#O3B+O^7SiW|3QhuUrLNum$0X^gr$8YsGCb@Zzo}c6Te1w zm$2AZ!k0jPeHj&qaqjPs83ne(0Vi}RQB-}V0gv)%t+`@gGGwyoYw zP5bAU&)CP+Gl%>iYaNc|zH`t!W$1WYWs;+V>RiXy&&wSBHr;j<`>DwELb}WLEVPz= z-QyvzXhnYiT&!9iNDQOi(eJ%#kS8ji9^P16VtBm5-WrEismf`#MQfxh@E3j zii>T|iCsEf5|{m~5j%grF3$RSM{Mf&Nc6FJE^df^Bi`NhUi|*|lh_>eU3^sgTfDMW zg{?|x&8`Y=U??b>8^KQ@>}X@#>M2cy`>@HqCeXA=8%Kb7?<&Sb%Hx$F=r*#fPp%M3x1l1*Mi_S9UGhhYF7FRKyiECJ&jCE|y@?utW zY$JQ|ax>e}X)Aj`+gWl-L9Wx zp##paR*G}1>Fx#QXm^QKuc%@>{?xFW;aA!4YuDKyy2YCJ-eC^L_gTgIhb%+?2}@e_ zjBW1ul6Bnpn(Z-t%cdQC$7T=zz)sz1Wc}j5u(CEyENsIMerM)ij6MIu0%x?aG2K<^ zPkbwKINzFDda2R4thQu%Q=JxBwH{-q3;cX|D+l zu{NVed(G+N5KD?UG>Du8Yf_#WOnuyjQtul!lsDOq?B3dwXNDskYb{XW5|K6;5p_EZ zdgAU(KcBi#Xy$P0)o~;lZgZs!XE)M)>`p&&JjqaR3@tl6mfZcuk;^Y{%30@2pPVPq z=DLZrc)mX!wF@BqXOpRXb`Z(!f+_c92<=!DM(WNHwB&Ond2Eg*iwUu0*FK&iPbJW? zj3gRrnL;(MQ)yapI!&6CNgmy@Y5dI`%3hR5d%YC&S6iY%G5HkXK9!6t3Mi&yA=!K` zq=H-1$hTrT?N~d5q^UFMc4QIl@|;C2LuS+U9&^Y*buQJvolAqR&!dJT^Qr&l1$1rh zLi(1uh~|eZrnR0+sJFvX(lJ^_ncB*--wF+K3zK;p=a)Y@SanVW5*;j zrJXe7dsuETyR%%4o!jJrpp1FP)!WP71|7nx3(r9wi*0{K$ipJmnDW@;gjc z-WBx6;|S@DJWBCS$4FB+PK~xFsN3L^q_j9i#wMq!gV7lpYH*g8_c}*5Jw+qy# z^F@l*uB7@7m#A3tGRi`KQI+3G6ksa~UTD%a^?%XM;Txj{ew z-K5+9ZqdDex2fgd9r9?oOBF5m$W`S5HK{zLbE=Q1wAEue(E178Y4enH+CHNQ_2+a= z;{}at|B~u7U(v!2ugSC18|tA`M@_nK=~`J=S|q4f+kF*82ku?E8_%_G=`C z;V0TV;4{4$_=WnKeI-AOZ?tGo6J4_YPJf5|AWPeyrk^O88B?`5Ac-e`&w- zKiWL3h0gU?LFr}{%r{a+WQi(lja%W@)>b$$ur>Mr`Yd;l`a{TG9z$4YjdplQwMo>0o!U4%GVS!g;MOrs#J@(8|tW-MZkzBdeoNuUk7U9rI_(H2I#ZQ;_>4n1evq3ov} znj`J;@0LA|xj4XTuLA;lI|8#EasRs`Ov89z=~WpTWC8-W3MkMK5hxe&{*4HWaSZ*A zFm@XR*dGm1O1&+YLGrV8iXe6f19EqXtMq<9FE0&hIVz~Aw6sL^BmK&qsGt>>c zm$;$qs~h}%+)=vE9XoV9Fgn=-t7|>5z`_&evptbm=L!Geqw#LTX!QR(8Y=!{F#W(7 z?Cmrb`LSd1{rp(y_VvPzY%e(6@Pdo^ID9D_hY^p)f!TQD{v2=Uz4XQ(M;{a}^g-Dh zALNO?XjtS6l{#M>7REz+;dp4h8jqd!6Yzfa1k^sB03Yj#$SIfzms=CDdw?G*GW`%y z>4yW|{jnv=AGU}65#4qYgz=NGXY(Xn_&f=D2*8cG0l0iW03pVcu{w1!(oRmshjxKb zA0LRb#ewMkE)aS)LD;VdLgU3CRCk(!QGQbpzF`Xby`2K3RWR~0gQ0gK7~@-qV5nON z%IAmR>dg?$(+fqz28)C4^C>9qc$71QySg6;;qIc^!+;NP9O>!J;x5nYY!#Eh} z#6x#vJhtS<<55{WDqh6Hv0DOy-4b9SPr$me1RQ*pfHd7i+!>aL=jn-9T#|_T+lhFq zmW27XNq88ZgzHO^ka#u;`#&XNL!V^Wc_t$xCz*eTlhJr18Ky1C=xCmTwG&csduj?Q zcBf$E-4sZwsR%Pq#aG`{3{s||>$X(vxSERkAE~(0H;valX{bm{L+P?KcpXpU{fBAT zsF4n@LFp*-NyoA5bY!hd$E!2xP<@k*+IAW6w9G)BR|Y1hW#Hqo3=FNvfZ2l#-29yZ z>)x4gqD-`&l8Ia?6I+WjG2>JwdOpoW#6M2&Ec6t!FmqBCc4TLvaCsIwAIL($b?qn``oH1lMGv?oBpKRdZn6GY3y?axi{O4vM03ke#1{ z0jqMbusjDxF6Ut5^Bjz7&Ow=WE^ZCX#SzLy@c3L@jLXHxskykfA{T|Fx%hlG7ya(> zn(;#}s#NnZyjva$% z2Q+yfYi~JB2FalVInIxj!#P-vS;=y&&6h*IP>z8cBZe$e+f1w5^h-Xx^yUaI1Uoj zh&!KQ5K=dYVNzd8T)>;L8aug?Fk*8l&i_y1S-|8H8Ok!`bUhNj)vsxx*c>zVz>A8YMT z=e@HxKW*r+vDGAp6RqYtc)lugcv*7Wq0&&raeH`o#~I749itC}9);442tm@RpT$ zhRA-6O_o_*m1O;2&y=k;SSV{*wNmCaZli3@$epsXoc*$+?~coMt-2_iI^&v5R{lVC ztH*2E*wc-&ZCifH5?;0vGL~ovF`*p=H?J;2=Rkd-vdBOPziBMI6)gpy3qyr1@iO7T z5NF|Q_fbM)&#^)cO%P`12MWf|!-b8(@j~;zG{N$Cp3u8ys<7ztbRp%=EaCWW)^+IISX2ImyHo+@;xA3H8uW)_qLBS;OsPL-)DWTQRb3);xOG3o8 zE5i1hHw5=LcLh(4$HH#M7eY*KolscSAT*nP5vo@H5SqIE6+~}Uai>8W@%;C;;;dWk z#O5PfV&`q0#CvOW#StsJij&vsiTc}nic^pE5f|L)Cyr<~5;qu{h?~Zni*5@BiOa4H z7N_^H74>5s#BpZ@(V{=Z?Xz6O%AX^|8A)#9n-891U7D9TL)BNjuzaGpX=s4h>t2v( zGc8nnYab~(e2oze4<(2@^Hans?+mffB1gQ_K_Ld`<%=8B3dFLcX?!^|M3b~4aarzc z@yhhMV(rrT;>v9cMT?V*#iDyl#nSJ~#npPN#4)r+tcqGEc34&{cE7k$toyZDR1DoJ z-cQ;tHt*RfKK;5|oF(iLf6OQsP44U$dz&5-Z%Y-T*MpD?qSF*w;8coJ7YHN(m*yZz?AL!WX9Icv|zyo zgV@ibRxE7dV78%Y2-~yFhAp(WW5XWWv&wu&*2_d-&euieASd?E#EC7v>&$-59LB6< zBiPW7BbnNkQEY2~JL}TblX+bm%_hwo%LaRnW4E+?*zl{qEPu%aHq+maP3kv^{d^a| zLJkG8rG-=2BJU99XBfubHia|isz?^TA)1ZJj%BLe@hs0WksWWJ%r4ZYu%%UL%(OIv zO<$D7wr1t9xl{6(y_4H9bk;6z2CIph$&w?A z*tf7*%r9&Kb*#QaF`L$R1J4X>WS%27v0VSntRQg< ziEBMaxyNoMw=HE>-ev4q(jL}#{$4h@w49|}*~fxD z?q`PD2ifT%hnUTT!%WJpU>k~$uvHh1vgn3mtV5R*tVle`?nj(rEelSwUq{cdsyAm@ zQs?um-su9fPrAtb*H^MJwU=1;mdk9vbu}{#t6>q#udtk|S{B@LmG!W_&bGweU@Dt$ zGRudzm_?U6?Dy!qY<1B+*8co`=C1OP_rN`34tbB+n=J=dl%6-B19)HOq zTVAnxmp4o{vyS=Iyk#!B?^v_ndnVt|z^dPVU~dLDvYNb4OmXouYu5S75cG|W-POd* zn!mGJ*Pl#W(acioez8=CKTJ0JFROa=kLl>CP`|S(v@Bkg;=8w^t!G=&@Wj?MLca}d zzu1P7($r|BL0dAcZA&_GbqY1ppf2|{$fT$pt+Q`W8FlTcbcH6lj?yBRW-VI3vjYW8 z?nv1kJJI*ko#=L&Hgz7TL*);2XwQ6I>M*P`RsHBpb-TMzSZG%wy>66U+l{oRcPDjG zk0yWBBkf&1s9%^qE$Z2mf^PMsS@U|4j%#oFuF{7bj`g9t8GY%dwE>wo7|^qA{pfR8 ze+o1(B;&`1xW3fX-0i#5&3(A-u86jePm9gw%3^!=ekhZh+(u{ zdpHe#G@LqaA3>BplFmB0(#j5_=*)vr#J0PUR;D{y4ELa7T~7*s?n$|ON7Hj@46PnJ zmbUcuqLxN4+Ie~$ZC&I|UqXFoo{cZ%v>i_e?u{qxnm|326Ulj;A009BC*@CnT2eEK znl=PbNycQ_>>fxT`v%d>rXWhFobm^I#?~j76ZBUXhRiY;A zd`jAwPnx<@>2kqT+WvJa?FcWRn%f1`$+eJYXA0@J=``B3W*WtHm`=XZbPD`Dor=O{ z(2d(Oh>e;_myXV)bju>bh9WZSJd12*%%Y&?S+qTVHt9T@O{;w7kW=LxYAej8_hoab zvHv{MSuu~iHRn^gG@k~2n@^Xc7f`|D1^hTJq%oBXDOg-Y3(9%E(ReY9T)UXA=q#a> znM-KM-zB7-wv^h{FC~L1%gFooGTP{|oV3m^r^OB{$ac>P`Z{1G)vR4fXF9K<>$6wU zAJx_5lCzpNe_Bm_qu0>Er)wx;;##u4x|X`SuA?re){&+CdJ5jNo^}r`CfyCiv`B9Q znJ(Hu587>{l7fv?^m`*sOW#B*KWw54k(;Ugv&|Iczl9#%*g`R$CDid^2~}Y$tv|Ar zW)0m&b4s_-mVw*p_Qvhhv)2yFS-yilXz!$~IXg+O?Jla#-$iSF?;=I!Zp!$)n+oDf zsidxy9*35Z*^@Gw>%WIu-QGjkiR){llcT;xJWquAsFGE2yBu5z3o=gr=(>rH#{$QmyJS z>L4AXz(2?6WX^H2{&Af4rJtaYUrtbc(n(tP;UtB|og%yXQ=}htnmWEdO*&y`$msbQ z8ad@GWj#Ji6#?f+{lPg3_d8G5@0=%(@fYaU%?lLgeUY@UU!-$mD`{G7C3%m&M3yy| zsH?|i(yY2n9o(v@_oXUwaIL10i`BGjL=D|JUqk(eU!lBnSLmrrEsZ@}OI6NSY22Bs z^up;HNvE%ovD0IH|RFqJb9aV?<;*dd51dT zF4>;COJTT2t54md`?yaAr|(m;(*vqJ{eX;}AJW`259yclBT7E|h#FjYF5%o``Zeqc z%{l*s`j2=@r!PFE@R84`W92hC;rg7?EEzfqwB_0xnm?|N6gTQ9$>%MF-+D`d@58qh$> zM-4PD@B^)X@`3hF`AFxVeWV8=jr93NBef6zM24?F5k-C`|GLkV9{q(D)qkPV*soOe z{wuwS|3o z`xo_*|0a{azsXAZhiqE@kX`;?vQhm<)&>8_q;(7Rp4LJ$TdClmiwe>TRq*DV3MRBs z#f9Oj7(87SYc8mwb=y{m8rcd}Gg`r{vK3~kx5jhV)^I3ljd_<^ScsHGFB`7DgUz;WMW#l+|rfqN$Eb4|TkmqYl*?b#&L#fT^bj z?B;3!H5wSE)egfv+kxh`gH2644A5#1UC;Jtp3@!=tJ|YOQxgk4c&2xbCakJ8@x8qk zD%`b@K3fasRa$u1t^;Pcb%6P-4yd}+0ihZl(d60@Q)hOBdSyq0kxZ#X-3)s*ma7!7p7rckGPk z*`0CkaA#cl-WhvsyI?_j7ewvv0=q9=@YlL4jwf|RYFSqpeCUb`=G_n)+YR5hcf-`W zZfI@X9g6Vo_^_!ve4ls6zP@@;57L9rT0Ja#podz$9{4+<2Mm|>0B-hxw~jt0jn#+$ zJbjF*)`w%ep6KD)6Q8E_#PPE|p;YMwJL-j(dA%^>NH6sH(F?n6dc!KUH@5BR&HIRY zBh#!8YNPr+afBh>Y&686Cx(d8H^PbuMmVzA2v=&2 zaJ&5gTpKw6CkqB({mB7H{WSm%cEQ*q3C1h8-5@{>lPF`&h!s&k}60CCqCq(Z1~w%mDV_V*cvsTtZ~J3Fz*W2Ksfh~&tY%y-3 zExuIRVrq*mTI}o)pJ<1RC3et$YzNma_DJxs$J7FQ6dtih`X_sM4|G7EAP3xE>VT=$ z4(Q&>5o;VA(ILqZ@gBcec+@fEI18;(NV5hxr!0*RR; zFns$6s67~ga?Oz##YUnkaU|?FjKqTLBXOgZD_VxSqI-lZ^q0FrqtX@6ez;<@$taBT zABFl^qY!s=6z;tn1?!$}NcC{T`aCxr+{Jn5hK-u;$Q0aR7w3*=tKE@a<&H1S?wDli zfl@yY)X((b$Jzr1Z#uO6Vo<&!uXme%K!1H(Ll+;>#)%+(w2 zKDvy7j>{OlOB#dS>&C#ZdJI1P9D{h{vAFFs7RFP@BBX3AW;`5=B^q9sZR>@&P%qdl z@Iu`&FBHD@f=1VI$Z{Ts+JtfFw0ayIFOGxfmvM0I;|&XUZ~V&eM)^i>jJx8E2S2^x zY2<^gV}0;0*9YCU`oQA456u4fKxd#Yo{jUxD!DIY+kA2Ux-ZYN`eL#1c--+Ck5+l( zp;s~<-L8(upP%DV(|-aAJtx2@a{_mL6VT`K1Z01ifTKMp;`Q)}_?a*f-G3?C6TJfA?h=SoQGw_+FA$;o0`K6p6C+kyvvg5-E=&Vf8x_cX~u2!XXNeCPYEVh{CibQ8-W@g)3L1Q2QZ@x4V2S zjA=ARxJIKsJR0c*d|J%^J`s&M52A78M>MW>iNV#uF*r0P1~cPg;8YZY=UZYBecoZeX>->d463?K+g#Yn3|M;>qQA@w~2eKV+nA$l>o~R3D9brh+BOUF~dF){k#&fH98Sp zrzRqCRU-D5C*slNM0|eEX->ogog|c+CLz{23EKWi*qEGzUPVdBFHXYMLrGAtG&foJr1u9yp_+pTXtG20F;hqY&DXFMS zOGR=~DqgNlg-dxV=3Yp}nfs}D{vj0&s%d!HH4PU`)3BJO!F^mBK8B}3k)4L0bJ7r0 zoQ6I7($H`r4PEc2!L)(X!XN9VqroU0d+gH@FSc?QPK%fQU_8Q8HW0~Mz; zu>X1n*1X6-^4AOuX_JX(T{4k3fcrSROk|JD#Qh1GFp0`UcvdFn&dkK76`3g6mWgGD zGm%=E33fLVO>Z)>`g1ESwmYg|FUO=oXpc^fqWNtfroQ&@LUd#Ugh&Y%)z3%9E5+( zfk{ga9=6ZrZEh~K`{!bbWiHw}<|1ZzE+6NRiLaD%`0I2VuWa^d=gkHh%GJ!4z$4t4V2-!l){1M)D-isw%q z`8cUzc?cez2iu8x_!FFm{jqtNoSugtiaZp~%!BG8o>g6)hwGd3U{uOolm)RyCjo*WbU$??Wij_4tBJd(*VY#8^D z9&)_(;U01_9|IE3on$=Ex~9vqPAjdEQFMCMxkbK#9y?CE7;t=VFv-pQwZ~m3z}n?ppJd*di(MwNMGi zA|%!W#_&wl*+d?oxeYm z`@?MRLv#7|$a!v9$sKM!&qf#U%i@DET zD#39%_l_&L<6OlZ?;7q&*K!BDo^N+C-=>Y+w{GT6c#DMA+z%_Z@qG1mzK=WkI(Ko; zS}O6JJa?0OxQi|4UUwgNl=~&P9pqW;L)>c~mY{cpk6}8>_x%{(=Hq<+6Wo!WlHkfc za@-jSbIktT(6hAwOP^__2JIA1xzjocY?Y(MdB;HZA){+e@} z9KQ0gUz|FQ@J+&e&Qs2yCho>LmpGljbC1s1%&F&C{@`AoQ_lIsvHHnfH)k8?IY*!S zZ*NW!=Q!sRr~fbhUF8&V_HmwZw0`q_;Dm5ybM|rWb6Pk?e|Q#w6UUjyDdk+@eBfwu zM{dFy!3pN%ah7q)IF+0yoF3gp+%auD=wX}^{QufhkvZK8zg^cx9YT^{kK+= z>>XOqwSW1l%)WfSM|*tVP)^Q|I~2DJ~iHs^L#@bzxpLR2Hlq& zU%s2^s5@|>qtnKfjxqil9T$(?>3FbkzvJDe^lYPSGyaPhhjYC4eK}Q7RdB=n{pH2uzC!7}C&YTs>tu6>( zHdYGl^{Ry5i)w`PovsRzi>?b#yWJ87Z@42&vb-+@oO~z@^?4$^eE&>{D|#thHhCko z)Vvk6GTsZH3_c3Gu6+{Nw68*m@LhQI{ipEj;BVn|_CMiPv5IJ*)=Hch-&)MM-A0_@ z)K*lMs*AzB+KHC)+KaDSG{vIy4r15$9mRQJ+G68l9Z{InSxmjxMO@<7Oh5tCkAx2sNA(&Z zp1wU&?7L``7&XRST+zW(+*3PR+`DM3xN^ccF{-zZ*!PXEcyjLqafHH8-0v|-Y}aeD z==w2Gj5|9;%vu>D#wLe}!`&l9HRC9;v~`RqzKj+3osSngZch})%}W;Z(o@Abf$3tw zs7!H+ZMN9oC|9iRA{QsAE5&QSC9zv`zG&ApRdoMSAbNc&6x|x9iMEaZhqbo=uPRyE ze|I1x5XA{3K!SS+F1zau1Pg8nPKdj^Gq}6MKya7A-Q67qcXwxi;l7=abLKnG_kZrW zl6`(G>+Y(quI|-q&Z=HRjYZxJGd_Gf+_?P12&31Rk;eQ#Mj0378Dp$dV61U{!Ewfl zCC3{_mz!X`S7V~FMx#l_pca#j)4EJCZuXjLJQgv{cq(JM@!jGo1@P)?pBNiEdELv=Aynl%?@Xk`>u%F9} z)61?f&Tw669PP8p7&&ycvBmN=MvK#Hjr-oOGX|GhZ_LwtgK>1oMx)u3O~&Zmn~kTQ zZZVcBzRlRfZM$)3^bX^~tewU`&h9e)VY0`VRd=s(V8A|O=UMxW1d6$1CH#u5XO3mcKR5G`u%n>-oW$fBi>e zMXS%o+JRq;RS$eM+B$wSK1ly=Tyo=w(Zl%DnB38z@YA4D*O{nVK6zBnqIuPq!+Di$ zim94YGoPA&H=nYfW~Qv#nX5QMe${nzezi2LfQl|}p*CEzP$82n)r_`Q%9z($_1I~x z9>?3LSI)L7^qH;dzqp_}GN6!J;!s$9yINQso?1kicPpxP7c8cpoi3)vjxDYhw=bdU zS=p&ZC+*Z9V@j&|9ZD%PTYGiqti7r|*+G5sD6L#dmQnX^lu`NTmsN|n*4d_NPO9k} zC)IFsIkhaUyc*|LK|QsosJ5T4sD93>q_+E3R?liwQR6>VQOovLRSid1Q%yaqtBp=I z)cltiV!+s#14n_1LMla(Gi)9p3Gt9*(V}lKRzEnKkRFZ$Ij(7pLp1E?Es! zwU~w~sYN5zq(oyC^{lb7-`zwtnbcIB3^1w-O_l0YNR&JlHGdaW(iB&9Ahekp8>sxYpcdCX{WXhZm&GOJE$OZ zR4+<*QV+j(Qk`#fR<(9^Q3L06RV~xIsr3HcRTWnc)v}zYx@_7*U3=U^bve;fHCfwB zO`F_X`6u;JOZ)Xzecbw~K~?)Jhk{YdHNK)^AB&qnf$tvh!iaPmcs#%4E+VmDO~xO4>SDji^6Fom)Rdb*Vj6S*#hVzEvNl zDy|r&hE*A^9G4DP?<$T^-xrNgQemXpx^SclDL+beUpPu7lpn3mEgY?UD~wS!7mrc3 zDveb^OUJ5fRmQ2oE5<3m8sk;^n(^v%?Fq_r!vs~L!9-=VZK4w6B(-?YB<1EdS(Q36 zSygT~MTMW4qMmh|s^(susz&vjrdHpZrp$w;tC=sSE1%dIddQS(wdI>&DDd z21HOmd)m>#mDBVrd{W${MY9xYribMrLT@M!y&e@c0$pH}lqoKZ#A zpHVy7pHg=EOX}*OOKObIWflALvKl|< zin`tSs`9;ZRoTb?smzO9QrcydxS9xAtSG&gCP^+uoRA-OhRFy++sr3bJtElC- zm5=)!HR9+oD1S@B$r==egVzk8t;O?#<+HhHDS+sErZ|dBb?`l*1AL_)dAF9ZRztvcmpQ`copK45VgG`xjkWDWP z@~WAMG@EWBt6!LiOY=N(dU_ri@-mNfbIU7DXOh=>rF%92dTsK_y1DtJ z#m9W|uAP}|Szsp9zM9F{&gL>_skt2d+g$Q_=9m7f^UE320@AB*0r|e6fNZg}kWs!C zlCZ-x$kTve~z$`CwFbcwyCXj zoMJ1BU)oC1)&*sDRzYdr05Mjh$Qwwv&uQcH-(( zQc9(l6w5zLO40hIq~63*685r`>~Oc2a!c$bE02TJ_i~VXI~-(*U1|9(zO=-hFD)6) zWn|tMzJvC(j8tx2R>m$W%eXv8$?|fP_PZRVpuLkkOLCIym!0H6y>gOwaye=8www&_ zR9>F1E-!&r736D31zEtrC!Z=6rP1(;Qt44esn)WRv|Ln467yD;y*`zt?EcC!)v1a& z{Z>T|-KioOu2rQ|R#jRFgJ)t4WMwb=femx>(+=F3HVm$dCCoWJaEv;_h2h z3LdN}uPW4%dqZo<%SW}ux{b56;M#2yEo#fh(ApAlsH9U+^BK+>N=dUte{b{kx!n_V-BOm8Mx_nOJ$*3G5)>gKYcu$wea za+3=;-DI#^3u(Q)g*e%^6x;ZgQuumHsn)EO^jO+TW?HwFH?ggy&$ZTa-L;KGE^Q+v zZQSKboVzT)?k*FWx0Nx=+sf|++sVGfcJl33J8^H-URJJdFXf7Lkkx4&r2T^qVrbt{ zj&A5Ei|jke)WMx(*7HuXp<8FUyQ8y|tI$P~#&nUpAG(NFzpnE3P*<5=tDAJ0-c8CH zx{FD0clms-yBL~!NSQ?*(#hIWrY3mGtJ|K^$GwMKU*AKb9D0h~u%2?^bx&E?tCtKr z&`Z*4_LgDOd&?q|K5{9PvALJ~NQ`S=xw)dR^exs;UT5}`DbM;z2aoM|nl);7|$r~Od)Bg-&+-$IXTpuiZ%ZAABV?t!?*ASTy z5Gso=gvv?RFfm&bCSC2rW!;EyarzW4i+m%b@wo`OE0Hp5Rip%zijo#1qNLuZC~4>y zE$z-nOSEf@EMF5N?;T>L^XORF{WVrpP@J5(9LM)0S!t(q->>+4R?VajHK-CPz*Xn-vpe{DTQnvg|}z z-fN;Xn=(=EoSrDd3QUrEEhfp+j7hS1+awA8z+>mhViq!4ZZDcFdu~sbrKP6GG><7V zdcqVLabk*$F`FtgnoX4zX;bCEmZ@_8-BhuxHBA}^Pm{<+(`4oCY4WPnbZO){T}Dlu zF85AOmuC5A$Wpf%QY4e>CT^c0CZA@=AeWh95k6C9E}O|Z&y*8oXGuh#Szsj-q!_E0}u;c=1?zun?Pg)>d&Mc6-mJ21Z%|av_MUuX8 zk*K$e#I)98IUBNA7A##XsSg%QFQ+A<`Y(~nvzJJTt4qYH*itd?x>WLyUn;gImx@Dy zWm2ovGHEq$6fa=dF}SH&#lQQmbTtk5$rm>MGfEew8#RxLS5~SS{|OSIf1dt0mfOjaau>!!@VY zh{v8aV)(I!GS*69(po9Md9B=kzgCvJtdqFNb<$$>Iw|>loxHE|hnx@iLpCq^gX8rd zGR|?m{MLWHB+uddq1U*z+aLoyH^`VN8|3%%8)SXKjdH5vMtL!2qZB-`Q5qN6B!R6r z$*iH9-o9*ozYvP*8C-zBRH?Uu~WyTxPtZgD=nTdb}3$m@1{ z|FkhZA@BzpS+`TgqwIoar-{GE7E>TNkF5uXmq%KC@oMcg5A*?35j-yf2L zbq-6Bn8OnA$6?v|=CBm2eMDj+kI4BoN2I~4Bl3IAqhcO@RN_}1l}FEyO7H5&JQ&t=Eu-s9sERr!RN1o9o%B`2ijqZ4wZ;z{xIKPje*Ps*|f zC#7SBQ+!AJlq_0!O1j-YCHcyqmhC>LC1$~Csd?|TJaalDE4|N1#QZZ-?=IKWay%dcuoopI495Mos+}2&+(o0^D@-yyadfVFCA~6mxg68h?Ca^v7L88 ze%`tuZ_8YiNBu9#&AAul%B_oXq0A*Y*Z-27pL#%UqUw{V&UlxtHb3t;=Fw z_KMhfU6E?@t_W^lksf8Qa{Yy?GJ4)sS$_Mf94-5&JoEZfY_k58x_ADRK91L9=zwdo zF6)}yx^qpeovsVKuS?AQ>$3Fjb-CqqLrVDEkgf}E$hdnqSGX5hyGxFh$M+>yqQ@5sc;cjZ~& zU1_=OuFQXOSAJHxC;fx($?oO%#PQiZ8C;F)E`;2d_ABqphUfRizQzL?681n|t$HB6 zUp|l{H6Kd7h=;Op%|j{j`k@SUek7kGA4$l%M{?`UBkAVySdK?OmS*c8%eHrqrB2-^ zvMTn8RNDAN7JPUjW$QncIq^@W)aIu$^V3r)+3=anOnfG#wmy?NU!F$x~LeIc7tUr5uPFJ%As7vip7%DMEH(rfoix%c-=3B@b57VbpsWeB!+nviczN+JBH*V?W5wQy-+Q%}2S~@uLKc|0o~Me3ah` zeiGX*pJdL&Pg3>#C)r&1v$%EpEN3QvmOd9h%j2S7B-Z1L{5|!HjJW(oij?>&zxVhm zm1caEwO7ANqmqBg-d=x6n^}L!nQMQEr~Nm%(dV0Z&-uo2@SB8`{w}ZjeV6FD-{t+S z?-F13hkW$Yd z6wiZ>4f0^1XCACi$b);+@}TgRJZN?$528Nj!S5yV;zYx|_}n8e$|vPT#~FFK)>K~1 zznT}vzvRU`J5!WwYzp);g@3XsM$RTRYt`==@1e>FwXQu$D?Nj`M%oe!}o`7m)- zKCIrJ567?N!^6Mw;b$o`*fr(ap?%EICe;l6XPY5zhZ#m(H^c02W>{lyjy+Ayakh^+ zZl{{#hQLjklf z7C`g91>l-i0LD25&~Rq~xZEg!s^1I1$-x38j25u!Yk{As7I-(?0{3@V;KFqa?E7Xx z`IeZ~)RONdS|TFV5}vayVccN}r|Xu;_stTIOIhJ)6Dut1ZG~YeR`8i+1=((e64$Kw z|4UloNJ(qVX>5(CUe;)yY>gr_t#N;=HP&6VM*0_Pw6U{6p++{i+QSC(5^dl+-3FDm z*x<=!8!Y`~1OMW-DA&LiH$7}IE#4L#r`p1FlP$Jhv_;4VTi6#Zh~sq&BB@(JRERBz z(~}A!VSPb3oG*xdZwtb&P$8JP6vE=ph2R!d2)D-(J9`&L{*>bAID2YS&O5(IhDO_?ag+EaW*ZY^kwREm+IHwfO?y#{^G%q{iFBZ;CzNfwo7j^Y*ZPYmb+<4meiJ0Sh`fAUVtd9Y#B#>UmquCpGC0+^43c}6LAk^- zI6AcqLN}Iy)rB%x@wN(=Ebit6vlu7%O>n}VHBKmT$_Zi5 zov^z=IapUIhhDA9VS!&cJQ-9D)#sN(=$>*|db1qvek%vNQsvREQF)|#mdCQV^0+Xm zJie|gkJ4w#Ltd6gAIl0zs9FJITUWq*f3B@QxB~XfuYhBFD&Xu*t_S&z@41((i1Q6A z;-p7K9Eh!mEfXv9z59xoa;hRSo>zo_fl6poxe}_htOQfvO1L?&5;n}Ogkd`?!Q)yb zIDM&vr^PCB?exls>QWiCA}izRn99gnQ5oHjR)*=L%2=Pb3i>!zfeET$QQsF$CrQ7#A`>w?S6T_A^DxORvO^89pxmwg>`ut%r)8>Y-{V8P5HM_296l9&E4I!;eq(@T72koUT)O`G*ns*7 z7*rok=hlbi_WHPTiLn81>%+&o0i3FGjnEbiFlj&ov`A}!x6>P7)`kYanFhH1tN~KZ z8lrHyhFGi`qF%3t*d5mpZW9{f;L3(*cBCP;-D`-Ne>cROl8s#7@~-@0L~MGHJB-vSP*1=@MGKwM-C%pB1ITj#gH`Ry(6 z=t2vwH`M|LGsa1jC5>9b(4{3l26LU*K`n7^c1vvD*b>uEwM5LLmT2>{B}&@0!o%9F zu+qI1!hBkxN@^?In#`DrRjttUP%GTK*$RU{wL)3j*4SLRHCns2#)Y1((L1^|Zj5Y= zo(o#z%=XrBz0ew~p0`F3(>926XoGY0+MsfWHc0kwgG1?UU^%S~I;?4fk%!x0&#g9i z^QjFSY~9hkvO9d?j?5nJm>TJhCBxnE$2@mz*+R~^WBp@yEc@xsc5aKo&Rh$YwioR-#)A`zAQ0aDXsoxIQ+P6c7UpqLYwZo>#?a*dr zJ6zh|4*jmR!=1O>7HH4=W_z@5)E*l;wMVJI_DIWUkE>JLqt@#7$UN8{$FH|X!T0Ua z*`fnRJ9WU`Mjh~`QwOH)0Lkcpep5RjVO0l=JkSBtuXRAy+YVTmzaz5BcEt1s9Wk;) zMm1C#1LOgz8?Ma526U-^J{N zVhcNA)wWK+*-kj|s1v&W=!6SJI-^sy&N$@SneXIw#=P*(FdfnvzOy=G*SgLqc%(D> z-|UQ~?>pmZfi9@z*aiI>biw%cU9iKa3uD;2z+`+EI4tgh+B>?y^;{RYKkkAKKf0h@ zk*;v7+7{VS6x}VpsGT!86S8U7M4bdgLp`vp)oNv*M z?@o4ueN;DW8QKjUW_QD_b=?qjxEo$x?}o6q-SEh)J9;^E#}SwAsMWeVCid-)m(kt1 zE^K#9nbRG&|LBhLN4mrJMt974+Z|`jJn+Nb0~K97(7KfeeEWDHIm!d0hI(M?EDy|F z>wy^uJuvA{4-9?fftb9W=xyf-V@*%kHTT3TPfzR)^~8vQo_uETgyjlP9Ng`RgbSW1 z|HKm~zI!69P!E__>VY{;dZ0$99@y;L15J{8V9S^uaGu`-3pVwD&G8;n1Qdyn6P;oG=~_>k5(Cp>obMBKTa827Lz*SYD5wbs3`#fkAR z^?PBHdoQf)*9)_wdtunnUI>}l3vE{Sg44cUcz>}M_CD!_;op0qb-~`qQ=vDuH0+Il zcD-Ti)f?+$dZW{@-gq>#HxgI(M&5nBG2&uxm_O-_-@f(62b(_dDaSR;>i0o)_dXcj zw-0Va_CbxoeULD%54JC7?99$Sa6Zd5&hGcY*iU`1p+H|;bm)s$&V7-`tuG3CGKMC& zFG{8LMTzl!VZER)er)WECrA3?-}l3#eEs2X*B`g4^+y-gAGwigP&^}_2s18}(L08Fnm06vWdpi0{Tc-&_Ivcd|*N77T#<#sPSEh%r4^2EgL!08IXC0E%0AV@hdnSUP(n-PIdUx_G05uQyi5dBbcN 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%0AA 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 diff --git a/extra_lib/lib/android/armeabi/libft2.so b/extra_lib/lib/android/armeabi/libft2.so deleted file mode 100755 index e066dc2169609d60dc2489364f2393ca4d11968b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 304104 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 &u-=1U|jhnX`b<0r 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

  • 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

    =~1Fjl`82paFyN7QWaNUBS#&1gh|1%WK9dLb+ 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 diff --git a/extra_lib/lib/android/armeabi/libopenjpeg.so b/extra_lib/lib/android/armeabi/libopenjpeg.so deleted file mode 100755 index 48905d0b95a0dd37451b804e0c7bbd796e71d100..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 77820 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 x%N=dxhgZ*9S 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%0AJR`U>Bygg}T`H2B)I4Y{BkR6^-(0+XBb2 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 G{{9yLUzr#H diff --git a/extra_lib/lib/android/armeabi/libpng.so b/extra_lib/lib/android/armeabi/libpng.so deleted file mode 100755 index 78ff0bbe2f66e055b91b18e7a87b85fc000df9e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109644 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 V(;rPv%TtRPQHJ$WBY>LRe*o%HERX;I diff --git a/extra_lib/lib/android/armeabi/libz.so b/extra_lib/lib/android/armeabi/libz.so deleted file mode 100755 index 075217dbb76e694fa75e66f90451b22033d377c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68988 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 diff --git a/gui/extensions/widget_manager/init.js b/gui/extensions/widget_manager/init.js index 1f931c9..e8e8b79 100644 --- a/gui/extensions/widget_manager/init.js +++ b/gui/extensions/widget_manager/init.js @@ -49,7 +49,7 @@ function scan_directory(dir) if (j==count) { new_wid = WidgetManager.open(uri, null); if (new_wid!=null) { - widget_insert_icon(new_wid, 1); + widget_insert_icon(new_wid); } } } @@ -78,13 +78,14 @@ function open_widget_manager(extension) var new_wid = WidgetManager.open(value, null); if (new_wid==null) return; WidgetManager.last_widget_dir = directory; - widget_insert_icon(new_wid, 0); + widget_insert_icon(new_wid); dock.layout(dock.width, dock.height); open_dock(true); } filebrowse.on_directory = function(directory) { WidgetManager.last_widget_dir = directory; scan_directory(directory); + open_dock(true); } filebrowse.set_size(320 , 240); gpacui_show_window(filebrowse); @@ -109,7 +110,8 @@ function open_widget_manager(extension) } function widget_insert_icon(new_wid) { - var icon = gw_new_icon_button(dock, widget_get_icon(new_wid), new_wid.name, 'button'); + //var icon = gw_new_icon_button(dock, widget_get_icon(new_wid), new_wid.name, 'button'); + var icon = gpacui_insert_dock_icon(new_wid.name, widget_get_icon(new_wid) ); new_wid.in_panel = true; new_wid.visible = false; new_wid.icon_dock = icon; diff --git a/gui/gui.js b/gui/gui.js index 57adfd0..6767db7 100644 --- a/gui/gui.js +++ b/gui/gui.js @@ -28,6 +28,7 @@ UPnP_Enabled = false; browser_mode = false; upnp_renderers = null; current_url = ''; +current_time = 0.0; player_control = null; all_extensions = []; @@ -57,6 +58,9 @@ function on_movie_active(value) function on_movie_time(value) { + /*filter out every 1/2 seconds*/ + if (current_time+0.5 > value) return; + current_time = value; player_control.set_time(value); if (UPnP_Enabled) UPnP.MovieTime = value; } @@ -83,6 +87,15 @@ function filter_event(evt) return true; } return false; + + case GF_EVENT_OPENFILE: + var files = evt.files; + /*todo - handle playlist*/ + if (files.length) { + set_movie_url(files[0]); + } + return true; + case GF_EVENT_MOUSEUP: in_drag = false; if (evt.picked) return false; @@ -95,21 +108,25 @@ function filter_event(evt) { open_dock(false); if (player_control.visible) { - player_control.hide(); + //player_control.hide(); top_wnd = null; } else { player_control.show(); top_wnd = player_control; } } + return false; } - return true; + return false; case GF_EVENT_KEYUP: // alert(evt.keycode); + //commented out as HOME is used for viewpoint reset +/* if (evt.keycode=='Home') { open_dock(!dock.visible); return true; } +*/ if (evt.keycode=='Up') { if (dock.visible) return false; if (player_control.visible) { @@ -149,7 +166,9 @@ function open_dock(show) { if (show) { dock.show(); + dock.layout(); player_control.hide(); + set_movie_url(''); top_wnd = dock; // uidisplay.hide(); } else { @@ -164,14 +183,16 @@ function open_dock(show) function gpacui_insert_dock_icon(label, icon) { - if (0) { + if (1) { var wnd = gw_new_window(dock, true, 'offscreen'); var icon = gw_new_icon_button(wnd, icon, label, 'osdbutton'); wnd.set_size(icon.width, icon.height); wnd.show(); + dock.set_size(display_width, display_height); return icon; } else { var icon = gw_new_icon_button(dock, icon, label, 'osdbutton'); + dock.set_size(display_width, display_height); return icon; } } @@ -333,8 +354,9 @@ function initialize() { if (url.indexOf('://')<0) set_movie_url('gpac://'+url); else set_movie_url(url); } else { - open_dock(true); - } +// open_dock(true); + player_control.show(); + } } @@ -406,6 +428,11 @@ function set_movie_url(url) controlled_renderer.Open(uri); } current_url = url; + current_time = 0; + + if (url == '') player_control.show(); + else player_control.hide(); + } //performs layout on all contents @@ -730,9 +757,7 @@ function new_player_control(container) this.view.show(); } } else { - if (this.media_line.visible) - this.media_line.set_size(width - min_w - 5, control_icon_size/3); - + if (this.snd_low) this.snd_low.hide(); if (this.snd_ctrl) this.snd_ctrl.hide(); if (this.rewind) this.rewind.hide(); @@ -740,6 +765,26 @@ function new_player_control(container) if (this.forward) this.forward.hide(); if (this.fullscreen) this.fullscreen.hide(); if (this.remote) this.remote.hide(); + + if (this.view && movie_connected && (gpac.navigation_type!= GF_NAVIGATE_TYPE_NONE) ) { + if (min_w + time_w + this.view.width < width) { + min_w += this.view.width; + this.view.show(); + } + } + + if (this.remote) { + if (UPnP.MediaRenderersCount && (current_url!='') && (min_w + time_w + this.remote.width < width)) { + min_w += this.remote.width; + this.remote.show(); + } else { + this.remote.hide(); + } + } + + if (this.media_line.visible) + this.media_line.set_size(width - min_w - 5, control_icon_size/3); + } width += control_icon_size/2; this.infobar.set_size(width, height); @@ -1096,12 +1141,14 @@ function browse_remote_servers() item.is_server = false; item.on_click = this._on_server_click; } else { - for (var j=0; j +#include +#include + +#define AIT_SECTION_LENGTH_MAX 1021 +#define APPLICATION_TYPE_HTTP_APPLICATION 16 + +typedef enum { + APPLICATION_DESCRIPTOR = 0x00, + APPLICATION_NAME_DESCRIPTOR = 0x01, + TRANSPORT_PROTOCOL_DESCRIPTOR = 0x02, + SIMPLE_APPLICATION_LOCATION_DESCRIPTOR = 0x15, + APPLICATION_USAGE_DESCRIPTOR = 0x16, +} DESCRIPTOR_TAG; + + +typedef struct +{ + + ABSTRACT_ES + GF_M2TS_SectionFilter *sec; + + u32 service_id; + u8 table_id; + Bool section_syntax_indicator; + u16 section_length; + Bool test_application_flag; + u16 application_type; + u8 version_number; + Bool current_next_indicator; + u8 section_number; + u8 last_section_number; + u16 common_descriptors_length; + GF_List * common_descriptors; + u16 application_loop_length; + GF_List * application; + u32 CRC_32; + +} GF_M2TS_AIT; + + +typedef struct +{ + u32 organisation_id; + u16 application_id; + u8 application_control_code; + u16 application_descriptors_loop_length; + GF_List * application_descriptors; + u8 application_descriptors_id[50]; + u8 index_app_desc_id; + +} +GF_M2TS_AIT_APPLICATION; + + +typedef enum { + FUTURE_USE = 0x00, + CAROUSEL = 0x01, + RESERVED = 0x02, + TRANSPORT_HTTP = 0x03, + DVB_USE = 0x04, + TO_REGISTER = 0x100, +} PROTOCOL_ID; + +typedef struct +{ + u8 descriptor_tag; + u8 descriptor_length; + u8 application_profiles_length; + u16 application_profile; + u8 version_major; + u8 version_minor; + u8 version_micro; + Bool service_bound_flag; + u8 visibility; + u8 application_priority; + u8 transport_protocol_label; + +} GF_M2TS_APPLICATION_DESCRIPTOR; + +typedef struct +{ + u8 descriptor_tag; + u8 descriptor_length; + u8 usage_type; + +} GF_M2TS_APPLICATION_USAGE; + +typedef struct +{ + u8 descriptor_tag; + u8 descriptor_length; + char* initial_path_bytes; + +}GF_M2TS_SIMPLE_APPLICATION_LOCATION; + +typedef struct +{ + Bool remote_connection; + u16 original_network_id; + u16 transport_stream_id; + u16 service_id; + u8 component_tag; + +} GF_M2TS_OBJECT_CAROUSEL_SELECTOR_BYTE; + +typedef struct{ + + u8 URL_extension_length; + char* URL_extension_byte; + +}GF_M2TS_TRANSPORT_HTTP_URL_EXTENTION; + +typedef struct +{ + u8 URL_base_length; + char* URL_base_byte; + u8 URL_extension_count; + GF_M2TS_TRANSPORT_HTTP_URL_EXTENTION* URL_extentions; + +} GF_M2TS_TRANSPORT_HTTP_SELECTOR_BYTE; + +typedef struct +{ + u8 descriptor_tag; + u8 descriptor_length; + u16 protocol_id; + u8 transport_protocol_label; + void* selector_byte; + +} GF_M2TS_TRANSPORT_PROTOCOL_DESCRIPTOR; + +typedef struct +{ + u8 descriptor_tag; + u8 descriptor_length; + u32 ISO_639_language_code; + u8 application_name_length; + char* application_name_char; + +} GF_M2TS_APPLICATION_NAME_DESCRIPTOR; + +GF_Err gf_m2ts_process_ait(GF_M2TS_AIT *es, char *data, u32 data_size, u32 table_id); +void on_ait_section(GF_M2TS_Demuxer *ts, u32 evt_type, void *par); +GF_M2TS_ES *gf_ait_section_new(u32 service_id); +void gf_ait_destroy(GF_M2TS_AIT* ait); + + +#endif //_GF_CAROUSSEL_H_ + diff --git a/include/gpac/compositor.h b/include/gpac/compositor.h index 5799a45..ea55d1f 100644 --- a/include/gpac/compositor.h +++ b/include/gpac/compositor.h @@ -108,7 +108,9 @@ scene timing*/ /*force render tick*/ void gf_sc_render(GF_Compositor *sr); /*gets screen buffer - this locks the scene graph too until released is called*/ -GF_Err gf_sc_get_screen_buffer(GF_Compositor *sr, GF_VideoSurface *framebuffer, Bool depth_buffer); +GF_Err gf_sc_get_screen_buffer(GF_Compositor *sr, GF_VideoSurface *framebuffer, u32 depth_buffer_mode); +/*gets offscreen buffer - this locks the scene graph too until released is called*/ +GF_Err gf_sc_get_offscreen_buffer(GF_Compositor *sr, GF_VideoSurface *framebuffer, u32 view_idx, u32 depth_buffer_mode); /*releases screen buffer and unlocks graph*/ GF_Err gf_sc_release_screen_buffer(GF_Compositor *sr, GF_VideoSurface *framebuffer); diff --git a/include/gpac/config_file.h b/include/gpac/config_file.h index 8398047..d08a4f6 100644 --- a/include/gpac/config_file.h +++ b/include/gpac/config_file.h @@ -50,6 +50,18 @@ extern "C" { typedef struct __tag_config GF_Config; +/*! + * \brief configuration file initialization + * + * Constructs a configuration file from fileName. if fileName is NULL, the default GPAC configuration file is loaded. + * If no configuration file is found, a default configuration file is created with the proper module directory, font directory + * and other default options. + *\param fileName name of the configuration file, or NULL for default file + *\param new_cfg Boolean set to true if a new configuration file has been created + *\return the configuration file object, NULL if the file could not be created + */ +GF_Config *gf_cfg_init(const char *file, Bool *new_cfg); + /*! * \brief configuration file constructor * diff --git a/include/gpac/configuration.h b/include/gpac/configuration.h index a3b4bec..c4f6eb1 100644 --- a/include/gpac/configuration.h +++ b/include/gpac/configuration.h @@ -28,12 +28,8 @@ #define GPAC_CONFIGURATION "(static configuration file)" -/*this file defines all common macros for libgpac compilation*/ -#ifdef WIN32 -#define GPAC_CONFIG_WIN32 -#endif - -/*except for symbian32 which uses .mmp directives ... */ +/*this file defines all common macros for libgpac compilation + except for symbian32 which uses .mmp directives ... */ #if defined(WIN32) || defined(_WIN32_WCE) || defined(GPAC_CONFIG_DARWIN) /*visual studio and xcode*/ /*enables GPAC fixed point*/ @@ -51,7 +47,9 @@ //#define GPAC_BIG_ENDIAN /*SSL enabled*/ -//#define GPAC_HAS_SSL +#ifdef WIN32 +#define GPAC_HAS_SSL +#endif /*spidermonkey enabled*/ #define GPAC_HAS_SPIDERMONKEY diff --git a/include/gpac/constants.h b/include/gpac/constants.h index 75723b4..8220aa4 100644 --- a/include/gpac/constants.h +++ b/include/gpac/constants.h @@ -188,6 +188,9 @@ typedef enum /*!Stereo RGBA. Component ordering in bytes is R-G-B-A. */ GF_PIXEL_RGBAS = GF_4CC('R', 'G', 'A', 'S'), + /*internal format for OpenGL using pachek RGB 24 bit plus planaer depth plane at the end of the image*/ + GF_PIXEL_RGB_24_DEPTH = GF_4CC('R', 'G', 'B', 'd'), + /*!YUV packed format*/ GF_PIXEL_YUY2 = GF_4CC('Y','U','Y','2'), /*!YUV packed format*/ @@ -399,9 +402,29 @@ enum /*!OTI for 13K Voice / QCELP audio streams*/ GPAC_OTI_AUDIO_13K_VOICE = 0xE1, - /*!OTI for LIBPLAYER private streams. The data pointer in the DSI is the libplayer handle object*/ - GPAC_OTI_PRIVATE_MEDIA_LIBPLAYER = 0xF1 + /*!OTI for RAW media streams. Input data is directly dispatched to the composition memory. The DSI contains is formated (MSBF) as follows:\n + * DSI Syntax for audio streams + \code + * u32 sample_rate: sampling rate + * u16 nb_channels: num channels + * u16 nb_bits_per_sample: num of bits per audio sample + * u32 frame_size: max size of audio frame in byte + * u32 channel_config: GPAC mask of GF_AUDIO_CH_ constants, or 0 if unknown + \endcode + \n + * DSI Syntax for video streams + \code + * u32 codec_four_cc: the codec 4CC reg code / codec id for ffmpeg + * u16 width: video width or 0 if unknown + * u16 height: video height or 0 if unknown + * u32 frame_size: size of the video frame + * u32 stride: horizontal stride of the video frame + \endcode + */ + GPAC_OTI_RAW_MEDIA_STREAM = 0x101, + /*!OTI for LIBPLAYER private streams. The data pointer in the DSI is the libplayer handle object*/ + GPAC_OTI_PRIVATE_MEDIA_LIBPLAYER = 0xF1 }; diff --git a/include/gpac/download.h b/include/gpac/download.h index 0979175..a96194f 100644 --- a/include/gpac/download.h +++ b/include/gpac/download.h @@ -162,10 +162,12 @@ extern "C" { { /*!session is not threaded, the user must explicitely fetch the data */ GF_NETIO_SESSION_NOT_THREADED = 1, - /*!session has no cache: data will be sent to the user if threaded mode (live streams like radios & co)*/ + /*! session data is live, e.g. data will be sent to the user if threaded mode (live streams like radios & co) + Whether the data is cached or not to disk cannot be controlled by the user at the current time. + */ GF_NETIO_SESSION_NOT_CACHED = 1<<1, - /*! ignores any data already in the cache */ - GF_NETIO_SESSION_FORCE_NO_CACHE = 1<<2 + /*indicates that the connection to the server should be kept once the download is successfully completed*/ + GF_NETIO_SESSION_PERSISTENT = 1<<2, }; @@ -304,6 +306,17 @@ extern "C" { *\return the mime type of the URL, or NULL if error. You should get the error with \ref gf_dm_sess_last_error */ const char *gf_dm_sess_mime_type(GF_DownloadSession * sess); + + /*! + *\brief sets session range + * + *Sets the session byte range. This shll be called before processing the session. + *\param sess the download session + *\param start_range HTTP download start range in byte + *\param end_range HTTP download end range in byte + *\note this can only be used when the session is not threaded + */ + GF_Err gf_dm_sess_set_range(GF_DownloadSession *sess, u64 start_range, u64 end_range); /*! *\brief get cache file name * @@ -357,6 +370,21 @@ extern "C" { GF_Err gf_dm_sess_process(GF_DownloadSession * sess); /*! + *\brief fetch session object headers + * + *Fetch the session object headers and stops after that. This is only usable if the session is not threaded + *\param sess the download session + *\return the last error in the session or 0 if none*/ + GF_Err gf_dm_sess_process_headers(GF_DownloadSession * sess); + + /*! + *\brief fetch session status + * + *Fetch the session current status + *\param sess the download session + *\return the session status*/ + u32 gf_dm_sess_get_status(GF_DownloadSession * sess); + /*! *\brief Get session resource url * *Returns the original resource URL associated with the session @@ -364,6 +392,15 @@ extern "C" { *\return the associated URL */ const char *gf_dm_sess_get_resource_name(GF_DownloadSession *dnload); + /*! + *\brief Get session original resource url + * + *Returns the original resource URL before any redirection associated with the session + *\param sess the download session + *\return the associated URL + */ + const char *gf_dm_sess_get_original_resource_name(GF_DownloadSession *dnload); + /*! * \brief Download a file over the network using a download manager @@ -410,7 +447,57 @@ extern "C" { */ Bool gf_dm_sess_can_be_cached_on_disk(const GF_DownloadSession *sess); - /*! @} */ + + /*! + * Reassigns session flags and callbacks. This is only possible if the session is not threaded. + * \param sess The session + * \param flags The new flags for the session + * \param user_io The new callback function + * \param cbk The new user data to ba used in the callback function + * \return GF_OK or error + */ + GF_Err gf_dm_sess_reassign(GF_DownloadSession *sess, u32 flags, gf_dm_user_io user_io, void *cbk); + + /*! + * Re-setup an existing, completed session to download a new URL. If same server/port/protocol is used, the same socket will be reused if the session + has the @GF_NETIO_SESSION_PERSISTENT flag set. This is only possible if the session is not threaded. + * \param sess The session + * \param url The new url for the session + * \return GF_OK or error + */ + GF_Err gf_dm_sess_setup_from_url(GF_DownloadSession *sess, const char *url); + + /* + *\brief sets download manager max rate per session + * + *Sets the maximum rate (per session only at the current time). + *\param dm the download manager object + *\param rate_in_byte_per_sec the new rate in bytes per sec. If 0, HTTP rate will not be limited + */ + void gf_dm_set_data_rate(GF_DownloadManager *dm, u32 rate_in_byte_per_sec); + + /* + *\brief gets download manager max rate per session + * + *Sets the maximum rate (per session only at the current time). + *\param dm the download manager object + *\return the rate in bytes per sec. If 0, HTTP rate is not limited + */ + u32 gf_dm_get_data_rate(GF_DownloadManager *dm); + + + /* + *\brief fetches remote file in memory + * + *Fetches remote file in memory . + *\param url the data to fetch + *\param out_data output data (allocated by function) + *\param out_size output data size + *\param out_mime if not NULL, pointer will contain the mime type (allocated by function) + *\return error code if any + */ + GF_Err gf_dm_get_file_memory(const char *url, char **out_data, u32 *out_size, char **out_mime); + /*! @} */ #ifdef __cplusplus } diff --git a/include/gpac/esi.h b/include/gpac/esi.h index d942c46..e2f8e77 100644 --- a/include/gpac/esi.h +++ b/include/gpac/esi.h @@ -109,6 +109,8 @@ enum GF_ESI_SIGNAL_DTS = 1<<1, /*no more data to expect from this stream*/ GF_ESI_STREAM_IS_OVER = 1<<2, + /*stream is not signaled through MPEG-4 Systems (OD stream) */ + GF_ESI_STREAM_WITHOUT_MPEG4_SYSTEMS = 1<<3, }; typedef struct __elementary_stream_ifce @@ -137,6 +139,9 @@ typedef struct __elementary_stream_ifce char *decoder_config; u32 decoder_config_size; + + /* MPEG-4 SL Config if any*/ + GF_SLConfig *sl_config; struct __esi_video_info info_video; struct __esi_audio_info info_audio; diff --git a/include/gpac/events.h b/include/gpac/events.h index a186f3d..f5f06d8 100644 --- a/include/gpac/events.h +++ b/include/gpac/events.h @@ -199,16 +199,17 @@ enum { GF_EVENT_NAVIGATE_INFO, /*indicates the link or its description under the mouse pointer*/ GF_EVENT_MESSAGE, /*message from the MPEG-4 terminal*/ GF_EVENT_PROGRESS, /*progress message from the MPEG-4 terminal*/ + GF_EVENT_FORWARDED, /*event forwarded by service (MPEG-2, RTP, ...)*/ GF_EVENT_VIEWPOINTS, /*indicates viewpoint list has changed - no struct associated*/ GF_EVENT_STREAMLIST, /*indicates stream list has changed - no struct associated - only used when no scene info is present*/ GF_EVENT_METADATA, /*indicates a change in associated metadata*/ GF_EVENT_MIGRATE, /*indicates a session migration request*/ GF_EVENT_DISCONNECT, /*indicates the current url should be disconnected*/ GF_EVENT_RESOLUTION, /*indicates the screen resolution has changed*/ - - /* Events for Keyboad */ - GF_EVENT_TEXT_EDITING_START, - GF_EVENT_TEXT_EDITING_END + GF_EVENT_OPENFILE, + /* Events for Keyboad */ + GF_EVENT_TEXT_EDITING_START, + GF_EVENT_TEXT_EDITING_END }; /*GPAC/DOM3 key codes*/ @@ -689,6 +690,32 @@ typedef struct { u8 attrChange; } GF_EventMutation; +enum +{ + /*events forwarded from MPEG-2 stack*/ + GF_EVT_FORWARDED_MPEG2 = 0, + /*events forwarded from RTP/RTSP/IP stack (not used yet)*/ + GF_EVT_FORWARDED_RTP_RTSP +}; + +typedef struct { + /* GF_EVENT_OPENFILE*/ + u8 type; + u32 nb_files; + char **files; +} GF_EventOpenFile; + +typedef struct { + /* GF_EVENT_FORWARDED*/ + u8 type; + /*one of te above event*/ + u8 forward_type; + /*original type of event as forwarded by the service*/ + u32 service_event_type; + /*parameter of event as forwarded by the service - creation/deletion is handled by the service*/ + void *param; +} GF_EventForwarded; + typedef union { u8 type; @@ -709,6 +736,8 @@ typedef union GF_EventMove move; GF_EventVideoSetup setup; GF_EventMutation mutation; + GF_EventForwarded forwarded_event; + GF_EventOpenFile open_file; } GF_Event; diff --git a/include/gpac/ietf.h b/include/gpac/ietf.h index 8e449a9..7818052 100644 --- a/include/gpac/ietf.h +++ b/include/gpac/ietf.h @@ -939,6 +939,10 @@ typedef struct /* stream profile and level indication - for AVC/H264, 0xPPCCLL, with PP:profile, CC:compatibility, LL:level*/ u32 PL_ID; + /*rvc config of the stream if carried in SDP*/ + u16 rvc_predef; + char *rvc_config; + u32 rvc_config_size; /*2 - optional options*/ diff --git a/include/gpac/internal/bifs_tables.h b/include/gpac/internal/bifs_tables.h index c36268f..b3c384d 100644 --- a/include/gpac/internal/bifs_tables.h +++ b/include/gpac/internal/bifs_tables.h @@ -24,7 +24,7 @@ /* - DO NOT MOFIFY - File generated on GMT Mon Jan 18 12:27:12 2010 + DO NOT MOFIFY - File generated on GMT Wed Jul 20 05:50:21 2011 BY MPEG4Gen for GPAC Version 0.4.6-DEV */ diff --git a/include/gpac/internal/camera.h b/include/gpac/internal/camera.h index 0434545..2f031f2 100644 --- a/include/gpac/internal/camera.h +++ b/include/gpac/internal/camera.h @@ -36,6 +36,8 @@ enum CAM_IS_DIRTY = 1, /*if set when ortho, indicates the viewport matrix shall be used when computing modelview (2D only)*/ CAM_HAS_VIEWPORT = 1<<2, + /*if set when ortho to disable LookAt mode*/ + CAM_NO_LOOKAT = 1<<3, }; enum diff --git a/include/gpac/internal/compositor_dev.h b/include/gpac/internal/compositor_dev.h index 8d85cf6..f6510f1 100644 --- a/include/gpac/internal/compositor_dev.h +++ b/include/gpac/internal/compositor_dev.h @@ -134,6 +134,14 @@ enum GF_SC_DRAW_FLUSH, }; +enum +{ + GF_SC_DEPTH_GL_NONE=0, + GF_SC_DEPTH_GL_POINTS, + GF_SC_DEPTH_GL_STRIPS, + GF_SC_DEPTH_GL_VBO, +}; + struct __tag_compositor { /*the main user*/ @@ -462,8 +470,7 @@ struct __tag_compositor void *tgl_ctx; #endif - Float depth_gl_scale, depth_gl_strips_filter; - /*0: none - 1: point-based, 2: elevation grid*/ + Fixed depth_gl_scale, depth_gl_strips_filter; u32 depth_gl_type; /*increase/decrease the standard interoccular offset by the specified distance in cm*/ Fixed interoccular_offset; @@ -1114,10 +1121,11 @@ GF_Camera *compositor_layer3d_get_camera(GF_Node *node); void compositor_layer3d_bind_camera(GF_Node *node, Bool do_bind, u32 nav_value); void compositor_3d_draw_bitmap(struct _drawable *stack, DrawAspect2D *asp, GF_TraverseState *tr_state, Fixed width, Fixed height, Fixed bmp_scale_x, Fixed bmp_scale_y); -GF_Err compositor_3d_get_screen_buffer(GF_Compositor *sr, GF_VideoSurface *fb, Bool depth_buffer); +GF_Err compositor_3d_get_screen_buffer(GF_Compositor *sr, GF_VideoSurface *fb, u32 depth_buffer_mode); +GF_Err compositor_3d_get_offscreen_buffer(GF_Compositor *sr, GF_VideoSurface *fb, u32 view_idx, u32 depth_buffer_mode); GF_Err compositor_3d_release_screen_buffer(GF_Compositor *sr, GF_VideoSurface *framebuffer); -void gf_sc_load_opengl_extensions(GF_Compositor *sr); +void gf_sc_load_opengl_extensions(GF_Compositor *sr, Bool has_gl_context); Bool gf_sc_fit_world_to_screen(GF_Compositor *compositor); @@ -1327,6 +1335,9 @@ typedef struct GF_Err gf_sc_add_audio_listener(GF_Compositor *compositor, GF_AudioListener *al); GF_Err gf_sc_remove_audio_listener(GF_Compositor *compositor, GF_AudioListener *al); + +GF_Err gf_sc_set_scene_size(GF_Compositor *compositor, u32 Width, u32 Height, Bool force_size); + #ifdef __cplusplus } #endif diff --git a/include/gpac/internal/ietf_dev.h b/include/gpac/internal/ietf_dev.h index 23876ba..03d0040 100644 --- a/include/gpac/internal/ietf_dev.h +++ b/include/gpac/internal/ietf_dev.h @@ -206,7 +206,7 @@ void gf_rtp_get_next_report_time(GF_RTPChannel *ch); if (sig < 0) { \ sprintf(temp, "%d", d); \ } else { \ - sprintf(temp, "%ud", d); \ + sprintf(temp, "%d", d); \ } \ RTSP_WRITE_ALLOC_STR_WITHOUT_CHECK(buf, buf_size, pos, temp); diff --git a/include/gpac/internal/isomedia_dev.h b/include/gpac/internal/isomedia_dev.h index 91bd860..9b68c46 100644 --- a/include/gpac/internal/isomedia_dev.h +++ b/include/gpac/internal/isomedia_dev.h @@ -183,8 +183,7 @@ enum /* 3GPP Adaptive Streaming extensions */ GF_ISOM_BOX_TYPE_STYP = GF_4CC( 's', 't', 'y', 'p' ), - GF_ISOM_BOX_TYPE_TFAD = GF_4CC( 't', 'f', 'a', 'd' ), - GF_ISOM_BOX_TYPE_TFMA = GF_4CC( 't', 'f', 'm', 'a' ), + GF_ISOM_BOX_TYPE_TFDT = GF_4CC( 't', 'f', 'd', 't' ), GF_ISOM_BOX_TYPE_SIDX = GF_4CC( 's', 'i', 'd', 'x' ), /*3GPP text / MPEG-4 StreamingText*/ @@ -308,6 +307,8 @@ enum GF_ISOM_BOX_TYPE_SUBS = GF_4CC( 's', 'u', 'b', 's' ), + GF_ISOM_BOX_TYPE_RVCC = GF_4CC( 'r', 'v', 'c', 'c' ), + /*ALL INTERNAL BOXES - NEVER WRITTEN TO FILE!!*/ /*generic handlers*/ @@ -745,6 +746,12 @@ typedef struct u32 vSpacing; } GF_PixelAspectRatioBox; +typedef struct +{ + GF_ISOM_BOX + u16 predefined_rvc_config; + u32 rvc_meta_idx; +} GF_RVCConfigurationBox; #define GF_ISOM_VISUAL_SAMPLE_ENTRY \ GF_ISOM_SAMPLE_ENTRY_FIELDS \ @@ -760,7 +767,8 @@ typedef struct char compressor_name[33]; \ u16 bit_depth; \ s16 color_table_index; \ - GF_PixelAspectRatioBox *pasp; + GF_PixelAspectRatioBox *pasp; \ + GF_RVCConfigurationBox *rvcc; \ typedef struct { @@ -1055,7 +1063,7 @@ typedef struct u32 gf_isom_sample_get_subsample_entry(GF_ISOFile *movie, u32 track, u32 sampleNumber, GF_SampleEntry **sub_sample); #ifndef GPAC_DISABLE_ISOM_WRITE -GF_Err gf_isom_add_subsample_info(GF_SubSampleInformationBox *sub_samples, u32 sampleNumber, u32 subSampleSize, u32 priority, Bool discardable); +GF_Err gf_isom_add_subsample_info(GF_SubSampleInformationBox *sub_samples, u32 sampleNumber, u32 subSampleSize, u8 priority, u32 reserved, Bool discardable); #endif typedef struct @@ -1337,6 +1345,8 @@ typedef struct char *content_encoding; // needed to actually read the resource file, but not written in the MP21 file. char *full_path; + // if not 0, full_path is actually the data to write. + u32 data_len; } GF_ItemInfoEntryBox; typedef struct @@ -1499,6 +1509,13 @@ typedef struct u8 IFrameSwitching; } GF_TrackFragmentHeaderBox; + +typedef struct +{ + GF_ISOM_FULL_BOX + u64 baseMediaDecodeTime; +} GF_TFBaseMediaDecodeTimeBox; + typedef struct { GF_ISOM_BOX @@ -1510,7 +1527,7 @@ typedef struct GF_SubSampleInformationBox *subs; /*when data caching is on*/ u32 DataCache; - GF_Box *tfad; + GF_TFBaseMediaDecodeTimeBox *tfdt; } GF_TrackFragmentBox; /*FLAGS for TRUN : specify what is written in the SampleTable of TRUN*/ @@ -1840,7 +1857,7 @@ typedef struct __oma_kms_box typedef struct { Bool reference_type; - u32 reference_offset; + u32 reference_size; u32 subsegment_duration; Bool contains_RAP; u32 RAP_delta_time; @@ -1883,6 +1900,8 @@ enum /*read-only access to the movie file: we create a file mapping object mode is set to GF_ISOM_DATA_MAP_READ afterwards*/ GF_ISOM_DATA_MAP_READ_ONLY = 4, + /*write-only access at the end of the movie - only used for movie fragments concatenation*/ + GF_ISOM_DATA_MAP_CAT = 5, }; /*this is the DataHandler structure each data handler has its own bitstream*/ @@ -1955,6 +1974,8 @@ GF_Err gf_isom_datamap_add_data(GF_DataMap *ptr, char *data, u32 dataSize); #define GF_ISOM_GET_FRAG_PAD(flag) ( (flag) >> 17) & 0x7 #define GF_ISOM_GET_FRAG_SYNC(flag) ( ! ( ( (flag) >> 16) & 0x1)) #define GF_ISOM_GET_FRAG_DEG(flag) (flag) & 0x7FFF + +GF_TrackExtendsBox *GetTrex(GF_MovieBox *moov, u32 TrackID); #endif enum @@ -2005,6 +2026,7 @@ struct __tag_isom { #ifndef GPAC_DISABLE_ISOM_FRAGMENTS u32 FragmentsFlags, NextMoofNumber; + Bool first_moof_merged; /*active fragment*/ GF_MovieFragmentBox *moof; /*in WRITE mode, this is the current MDAT where data is written*/ @@ -2013,7 +2035,7 @@ struct __tag_isom { u64 segment_start; GF_List *moof_list; - Bool use_segments, moof_first; + Bool use_segments, moof_first, append_segment; Bool is_index_segment; #endif @@ -2073,6 +2095,8 @@ GF_Err findEntryForTime(GF_SampleTableBox *stbl, u64 DTS, u8 useCTS, u32 *sample GF_Err stbl_GetSampleSize(GF_SampleSizeBox *stsz, u32 SampleNumber, u32 *Size); GF_Err stbl_GetSampleCTS(GF_CompositionOffsetBox *ctts, u32 SampleNumber, u32 *CTSoffset); GF_Err stbl_GetSampleDTS(GF_TimeToSampleBox *stts, u32 SampleNumber, u64 *DTS); +GF_Err stbl_GetSampleDTS_and_Duration(GF_TimeToSampleBox *stts, u32 SampleNumber, u64 *DTS, u32 *duration); + /*find a RAP or set the prev / next RAPs if vars are passed*/ GF_Err stbl_GetSampleRAP(GF_SyncSampleBox *stss, u32 SampleNumber, u8 *IsRAP, u32 *prevRAP, u32 *nextRAP); GF_Err stbl_GetSampleInfos(GF_SampleTableBox *stbl, u32 sampleNumber, u64 *offset, u32 *chunkNumber, u32 *descIndex, u8 *isEdited); @@ -3319,6 +3343,20 @@ GF_Err subs_Size(GF_Box *s); GF_Err subs_Read(GF_Box *s, GF_BitStream *bs); GF_Err subs_dump(GF_Box *a, FILE * trace); +GF_Box *tfdt_New(); +void tfdt_del(GF_Box *); +GF_Err tfdt_Write(GF_Box *s, GF_BitStream *bs); +GF_Err tfdt_Size(GF_Box *s); +GF_Err tfdt_Read(GF_Box *s, GF_BitStream *bs); +GF_Err tfdt_dump(GF_Box *a, FILE * trace); + +GF_Box *rvcc_New(); +void rvcc_del(GF_Box *); +GF_Err rvcc_Write(GF_Box *s, GF_BitStream *bs); +GF_Err rvcc_Size(GF_Box *s); +GF_Err rvcc_Read(GF_Box *s, GF_BitStream *bs); +GF_Err rvcc_dump(GF_Box *a, FILE * trace); + #endif /*GPAC_DISABLE_ISOM*/ #ifdef __cplusplus diff --git a/include/gpac/internal/m3u8.h b/include/gpac/internal/m3u8.h index 9672235..aaf37ab 100644 --- a/include/gpac/internal/m3u8.h +++ b/include/gpac/internal/m3u8.h @@ -1,188 +1,188 @@ -/** - * GPAC - Multimedia Framework C SDK - * - * Copyright (c) Jean Le Feuvre 2000-2005 - * All rights reserved - * - * This file is part of GPAC - * - * GPAC is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * GPAC 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * Written by Pierre Souchay for VizionR SAS - * - */ -#ifndef M3U8_PLAYLIST_H -#define M3U8_PLAYLIST_H -#include -#include - -/** - * Global Structure - * - * For a stream with multiple bandwidths and multiple programs - * - * VariantPlayList - * | - * |_ program id 1 - * | | - * | |_ bandwidth X : playlistElement1 - * | |- bandwidth Y : playlistElement2 - * | - * |- program id 2 - * | - * |_ bandwidth Z : playlistElement - * - * For a "normal" playlist - * - * VariantPlayList - * | - * |_ program id 1 - * | - * |_ bandwidth 0 : playlistElement1 - * - * Where PlaylistElement can be : - * - a stream (real resource) - * - a playlist (list of PlaylistElements itself) - */ - -#define M3U8_UNKOWN_MIME_TYPE "unknown" - -/** - * Basic Stream structure - */ -typedef struct s_stream { - u8 i; -} Stream; - -/** - * The playlist contains a list of elements to play - */ -typedef struct s_playList { - int currentMediaSequence; - int target_duration; - int mediaSequenceMin; - int mediaSequenceMax; - char is_ended; - GF_List * elements; -} Playlist; - -typedef enum e_playlistElementType { TYPE_PLAYLIST, TYPE_STREAM, TYPE_UNKNOWN} PlaylistElementType; - -/** - * The Structure containing the playlist element - */ -typedef struct s_playlistElement { - int durationInfo; - int bandwidth; - char * title; - char * codecs; - char * url; - PlaylistElementType elementType; - union { Playlist playlist; - Stream stream; - } element; - -} PlaylistElement; - -typedef struct s_program { - int programId; - GF_List * bitrates; - int currentBitrateIndex; -} Program; - - -/** - * The root playlist, can contains several PlaylistElements structures - */ -typedef struct s_variantPlaylist { - GF_List * programs; - int currentProgram; - Bool playlistNeedsRefresh; -} VariantPlaylist; - -/** - * Creates a new playlist - * @return NULL if playlist could not be allocated - * -Playlist * playlist_new(); -*/ -/** - * Deletes a given playlist and all of its sub elements - * -GF_Err playlist_del(Playlist *); -*/ - -/** - * Deletes an Playlist element - */ -GF_Err playlist_element_del(PlaylistElement *); - -/** - * Creates a new program properly initialized - */ -Program * program_new(int programId); - -/** - * Deletes the specified program - */ -GF_Err program_del(Program * program); - -/** - * Creates an Playlist element. - * This element can be either a playlist of a stream according to first parameter. - * @return NULL if element could not be created. Element deletion will be deleted recusivly by #playlist_del(Playlist*) - */ -PlaylistElement * playlist_element_new(PlaylistElementType elementType, const char * url, const char * title, const char *codecs, int durationInfo); - -/** - * Creates a new VariantPlaylist - * @return NULL if VariantPlaylist element could not be allocated - */ -VariantPlaylist * variant_playlist_new (); - -/** - * Deletes the given VariantPlaylist and all of its sub elements - */ -GF_Err variant_playlist_del(VariantPlaylist *); - -GF_Err playlist_element_dump(const PlaylistElement * e, int indent); - -GF_Err variant_playlist_dump(const VariantPlaylist *); - -Program * variant_playlist_find_matching_program(const VariantPlaylist *, const u32 programId); - -Program * variant_playlist_get_current_program(const VariantPlaylist *); - - - -/** - * Parse the given playlist file - * @param file The file from cache to parse - * @param The playlist to fill. If argument is null, and file is valid, playlist will be allocated - * @return GF_OK if playlist valid - */ -GF_Err parse_root_playlist(const char * file, VariantPlaylist ** playlist, const char * baseURL); -/** - * Parse the given playlist file as a subplaylist of an existing playlist - * @param file The file from cache to parse - * @param The playlist to fill. - * @param baseURL base URL of the playlist - * @param program in which the playlist is parsed - * @param sub_playlist existing subplaylist element in the @playlist in which the playlist is parsed - * @return GF_OK if playlist valid - */ -GF_Err parse_sub_playlist(const char * file, VariantPlaylist ** playlist, const char * baseURL, Program * in_program, PlaylistElement *sub_playlist); - -#endif /* M3U8_PLAYLIST_H */ - +/** + * GPAC - Multimedia Framework C SDK + * + * Copyright (c) Jean Le Feuvre 2000-2005 + * All rights reserved + * + * This file is part of GPAC + * + * GPAC is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * GPAC 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; see the file COPYING. If not, write to + * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + * Written by Pierre Souchay for VizionR SAS + * + */ +#ifndef M3U8_PLAYLIST_H +#define M3U8_PLAYLIST_H +#include +#include + +/** + * Global Structure + * + * For a stream with multiple bandwidths and multiple programs + * + * VariantPlayList + * | + * |_ program id 1 + * | | + * | |_ bandwidth X : playlistElement1 + * | |- bandwidth Y : playlistElement2 + * | + * |- program id 2 + * | + * |_ bandwidth Z : playlistElement + * + * For a "normal" playlist + * + * VariantPlayList + * | + * |_ program id 1 + * | + * |_ bandwidth 0 : playlistElement1 + * + * Where PlaylistElement can be : + * - a stream (real resource) + * - a playlist (list of PlaylistElements itself) + */ + +#define M3U8_UNKOWN_MIME_TYPE "unknown" + +/** + * Basic Stream structure + */ +typedef struct s_stream { + u8 i; +} Stream; + +/** + * The playlist contains a list of elements to play + */ +typedef struct s_playList { + int currentMediaSequence; + int target_duration; + int mediaSequenceMin; + int mediaSequenceMax; + char is_ended; + GF_List * elements; +} Playlist; + +typedef enum e_playlistElementType { TYPE_PLAYLIST, TYPE_STREAM, TYPE_UNKNOWN} PlaylistElementType; + +/** + * The Structure containing the playlist element + */ +typedef struct s_playlistElement { + int durationInfo; + int bandwidth; + char * title; + char * codecs; + char * url; + PlaylistElementType elementType; + union { Playlist playlist; + Stream stream; + } element; + +} PlaylistElement; + +typedef struct s_program { + int programId; + GF_List * bitrates; + int currentBitrateIndex; +} Program; + + +/** + * The root playlist, can contains several PlaylistElements structures + */ +typedef struct s_variantPlaylist { + GF_List * programs; + int currentProgram; + Bool playlistNeedsRefresh; +} VariantPlaylist; + +/** + * Creates a new playlist + * @return NULL if playlist could not be allocated + * +Playlist * playlist_new(); +*/ +/** + * Deletes a given playlist and all of its sub elements + * +GF_Err playlist_del(Playlist *); +*/ + +/** + * Deletes an Playlist element + */ +GF_Err playlist_element_del(PlaylistElement *); + +/** + * Creates a new program properly initialized + */ +Program * program_new(int programId); + +/** + * Deletes the specified program + */ +GF_Err program_del(Program * program); + +/** + * Creates an Playlist element. + * This element can be either a playlist of a stream according to first parameter. + * @return NULL if element could not be created. Element deletion will be deleted recusivly by #playlist_del(Playlist*) + */ +PlaylistElement * playlist_element_new(PlaylistElementType elementType, const char * url, const char * title, const char *codecs, int durationInfo); + +/** + * Creates a new VariantPlaylist + * @return NULL if VariantPlaylist element could not be allocated + */ +VariantPlaylist * variant_playlist_new (); + +/** + * Deletes the given VariantPlaylist and all of its sub elements + */ +GF_Err variant_playlist_del(VariantPlaylist *); + +GF_Err playlist_element_dump(const PlaylistElement * e, int indent); + +GF_Err variant_playlist_dump(const VariantPlaylist *); + +Program * variant_playlist_find_matching_program(const VariantPlaylist *, const u32 programId); + +Program * variant_playlist_get_current_program(const VariantPlaylist *); + + + +/** + * Parse the given playlist file + * @param file The file from cache to parse + * @param The playlist to fill. If argument is null, and file is valid, playlist will be allocated + * @return GF_OK if playlist valid + */ +GF_Err parse_root_playlist(const char * file, VariantPlaylist ** playlist, const char * baseURL); +/** + * Parse the given playlist file as a subplaylist of an existing playlist + * @param file The file from cache to parse + * @param The playlist to fill. + * @param baseURL base URL of the playlist + * @param program in which the playlist is parsed + * @param sub_playlist existing subplaylist element in the @playlist in which the playlist is parsed + * @return GF_OK if playlist valid + */ +GF_Err parse_sub_playlist(const char * file, VariantPlaylist ** playlist, const char * baseURL, Program * in_program, PlaylistElement *sub_playlist); + +#endif /* M3U8_PLAYLIST_H */ + diff --git a/include/gpac/internal/mesh.h b/include/gpac/internal/mesh.h index 9ccdb7b..3bed651 100644 --- a/include/gpac/internal/mesh.h +++ b/include/gpac/internal/mesh.h @@ -165,6 +165,7 @@ typedef struct __gf_mesh // u32 aabb_nb_index; u32 vbo; + Bool vbo_dirty, vbo_dynamic; } GF_Mesh; GF_Mesh *new_mesh(); diff --git a/include/gpac/internal/mpd.h b/include/gpac/internal/mpd.h index effa68e..d481434 100644 --- a/include/gpac/internal/mpd.h +++ b/include/gpac/internal/mpd.h @@ -1,130 +1,131 @@ -/* - * GPAC - Multimedia Framework C SDK - * - * Authors: Cyril Concolato - * Copyright (c) Telecom ParisTech 2010- - * All rights reserved - * - * This file is part of GPAC / 3GPP/MPEG Media Presentation Description input module - * - * GPAC is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * GPAC 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ -#ifndef _MPD_IN_H_ -#define _MPD_IN_H_ - -#include -#include -#include -#include - -typedef struct -{ - char *url; - Bool use_byterange; - u32 byterange_start; - u32 byterange_end; -} GF_MPD_SegmentInfo; - -typedef struct { - char *id; - u32 bandwidth; - u32 width; - u32 height; - char *lang; - char *mime; - u32 groupID; - Bool startWithRap; - /* TODO: maximumRAPPeriod */ - /* TODO: depid*/ - /* TODO: default rep*/ - - u32 qualityRanking; - char *content_protection_type; - char *content_protection_uri; - double alternatePlayoutRate; - u32 default_segment_duration; - /*TODO: multiple views */ - char *default_base_url; - - /* initialization segment */ - char *init_url; - Bool init_use_range; - u32 init_byterange_start; - u32 init_byterange_end; - - /* other segments */ - char *url_template; - u32 startIndex; - u32 endIndex; - - GF_List *segments; -} GF_MPD_Representation; - -typedef struct { - u32 start; /* expressed in seconds, relative to the start of the MPD */ - u32 duration; /* TODO */ - char *id; /* TODO */ - u8 flags; - Bool segment_alignment_flag; /* to be merged into real flags */ - Bool bitstream_switching_flag; - - u32 default_segment_duration; /* milliseconds */ - char *default_base_url; - /* TODO: default timeline */ - char *url_template; - - /* TODO: xlink:href & xlink:actuate */ - - GF_List *representations; - /* TODO: representation groups */ - /* TODO: subset */ -} GF_MPD_Period; - -typedef enum { - GF_MPD_TYPE_ON_DEMAND, - GF_MPD_TYPE_LIVE, -} GF_MPD_Type; - -typedef struct { - GF_MPD_Type type; - char *base_url; - /* TODO: add alternate URL */ - u32 duration; /* expressed in milliseconds */ - u32 min_update_time; /* expressed in milliseconds */ - u32 min_buffer_time; /* expressed in milliseconds */ - /*start time*/ - /*end time*/ - u32 time_shift_buffer_depth; /* expressed in milliseconds */ - char *title; - char *source; - char *copyright; - char *more_info_url; - - /* the number of periods is dynamic since we may update the MPD from time to time, cannot avoid GF_List */ - GF_List *periods; -} GF_MPD; - -GF_Err gf_mpd_init_from_dom(GF_XMLNode *root, GF_MPD *mpd); - -GF_MPD *gf_mpd_new(); -void gf_mpd_del(GF_MPD *mpd); - -GF_Err gf_m3u8_to_mpd(GF_ClientService *service, const char *m3u8_file, const char *base_url, - const char *mpd_file, - u32 reload_count, char *mimeTypeForM3U8Segments); - -#endif // _MPD_IN_H_ - +/* + * GPAC - Multimedia Framework C SDK + * + * Authors: Cyril Concolato + * Copyright (c) Telecom ParisTech 2010- + * All rights reserved + * + * This file is part of GPAC / 3GPP/MPEG Media Presentation Description input module + * + * GPAC is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * GPAC 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; see the file COPYING. If not, write to + * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + * + */ +#ifndef _MPD_IN_H_ +#define _MPD_IN_H_ + +#include +#include +#include +#include + +typedef struct +{ + char *url; + Bool use_byterange; + u32 byterange_start; + u32 byterange_end; +} GF_MPD_SegmentInfo; + +typedef struct { + char *id; + u32 bandwidth; + u32 width; + u32 height; + char *lang; + char *mime; + u32 groupID; + Bool disabled; + Bool startWithRap; + /* TODO: maximumRAPPeriod */ + /* TODO: depid*/ + /* TODO: default rep*/ + + u32 qualityRanking; + char *content_protection_type; + char *content_protection_uri; + double alternatePlayoutRate; + u32 default_segment_duration; + /*TODO: multiple views */ + char *default_base_url; + + /* initialization segment */ + char *init_url; + Bool init_use_range; + u32 init_byterange_start; + u32 init_byterange_end; + + /* other segments */ + char *url_template; + u32 startIndex; + u32 endIndex; + + GF_List *segments; +} GF_MPD_Representation; + +typedef struct { + u32 start; /* expressed in seconds, relative to the start of the MPD */ + u32 duration; /* TODO */ + char *id; /* TODO */ + u8 flags; + Bool segment_alignment_flag; /* to be merged into real flags */ + Bool bitstream_switching_flag; + + u32 default_segment_duration; /* milliseconds */ + char *default_base_url; + /* TODO: default timeline */ + char *url_template; + + /* TODO: xlink:href & xlink:actuate */ + + GF_List *representations; + /* TODO: representation groups */ + /* TODO: subset */ +} GF_MPD_Period; + +typedef enum { + GF_MPD_TYPE_ON_DEMAND, + GF_MPD_TYPE_LIVE, +} GF_MPD_Type; + +typedef struct { + GF_MPD_Type type; + char *base_url; + /* TODO: add alternate URL */ + u32 duration; /* expressed in milliseconds */ + u32 min_update_time; /* expressed in milliseconds */ + u32 min_buffer_time; /* expressed in milliseconds */ + /*start time*/ + /*end time*/ + u32 time_shift_buffer_depth; /* expressed in milliseconds */ + char *title; + char *source; + char *copyright; + char *more_info_url; + + /* the number of periods is dynamic since we may update the MPD from time to time, cannot avoid GF_List */ + GF_List *periods; +} GF_MPD; + +GF_Err gf_mpd_init_from_dom(GF_XMLNode *root, GF_MPD *mpd, const char *base_url); + +GF_MPD *gf_mpd_new(); +void gf_mpd_del(GF_MPD *mpd); + +GF_Err gf_m3u8_to_mpd(GF_ClientService *service, const char *m3u8_file, const char *base_url, + const char *mpd_file, + u32 reload_count, char *mimeTypeForM3U8Segments); + +#endif // _MPD_IN_H_ + diff --git a/include/gpac/internal/scenegraph_dev.h b/include/gpac/internal/scenegraph_dev.h index 0af5d53..8df8523 100644 --- a/include/gpac/internal/scenegraph_dev.h +++ b/include/gpac/internal/scenegraph_dev.h @@ -835,6 +835,7 @@ void gf_smil_anim_init_runtime_info(GF_Node *node); void gf_smil_anim_delete_runtime_info(SMIL_Anim_RTI *rai); void gf_smil_anim_delete_animations(GF_Node *e); void gf_smil_anim_remove_from_target(GF_Node *anim, GF_Node *target); +GF_Node *gf_smil_anim_get_target(GF_Node *e); void gf_sg_handle_dom_event(GF_Node *hdl, GF_DOM_Event *event, GF_Node *observer); void gf_smil_setup_events(GF_Node *node); @@ -975,7 +976,7 @@ struct _node_js_binding typedef struct __tag_svg_script_ctx { Bool (*script_execute)(struct __tag_scene_graph *sg, char *utf8_script, GF_DOM_Event *event); - Bool (*handler_execute)(GF_Node *n, GF_DOM_Event *event, GF_Node *observer); + Bool (*handler_execute)(GF_Node *n, GF_DOM_Event *event, GF_Node *observer, char *utf8_script); u32 nb_scripts; /*global script context for the scene*/ struct JSContext *js_ctx; diff --git a/include/gpac/internal/terminal_dev.h b/include/gpac/internal/terminal_dev.h index 383632f..4cb5f40 100644 --- a/include/gpac/internal/terminal_dev.h +++ b/include/gpac/internal/terminal_dev.h @@ -70,6 +70,10 @@ struct _net_service GF_List *dnloads; /*cache asscoiated with service, if any*/ GF_StreamingCache *cache; + + /*quick hack for avoiding double session creation*/ + GF_DownloadSession *pending_service_session; + }; @@ -169,6 +173,8 @@ struct _scene /*FIXME - Dynamic scenes are only supported through VRML/BIFS nodes, we should add support for SVG scene graph generation if needed*/ Bool is_dynamic_scene; + /*for MPEG-2 TS, indicates the current serviceID played from mux*/ + u32 selected_service_id; /*clock for dynamic scene - current assumption is that all selected streams are synchronized in the dyn scene*/ GF_Clock *dyn_ck; /*URLs of current video, audio and subs (we can't store objects since they may be destroyed when seeking)*/ @@ -350,6 +356,8 @@ struct _tag_terminal /*net services*/ GF_List *net_services; + /*net services to be connected*/ + GF_List *net_services_to_connect; /*net services to be destroyed*/ GF_List *net_services_to_remove; /*channels waiting for service CONNECT ack to be setup*/ @@ -396,7 +404,6 @@ struct _tag_terminal GF_Shortcut shortcuts[MAX_SHORTCUTS]; Fixed speed_ratio; - }; @@ -484,6 +491,7 @@ struct _object_clock u32 discontinuity_time; s32 drift; u32 data_timeout; + Bool probe_ocr; }; /*destroys clock*/ @@ -575,7 +583,7 @@ struct _es_channel /*last received AU time - if exceeding a certain time and buffering is on, buffering is turned off. This is needed for streams with very short duration (less than buffer time) and stream with only one AU (BIFS/OD)*/ u32 last_au_time; - /*Current reassemnbling buffer - currently packets are NOT reordered, only AUs are*/ + /*Current reassembling buffer - currently packets are NOT reordered, only AUs are*/ char *buffer; u32 len, allocSize; /*only for last packet of an AU*/ @@ -641,6 +649,9 @@ struct _es_channel GF_IPMPTool *ipmp_tool; Bool is_protected; + /*indicates that AU received will be copied to the composition memory*/ + Bool is_raw_channel; + u32 resync_drift; /*TSs as received from network - these are used for cache storage*/ @@ -679,6 +690,8 @@ these channels are ALWAYS pulling ones, and this function will init the channel void gf_es_init_dummy(GF_Channel *ch); /*setup DRM info*/ void gf_es_config_drm(GF_Channel *ch, GF_NetComDRMConfig *isma_cryp); +/*dispatch raw media AU to the composition buffer and BLOCKS until the AU is consumed by the decoder*/ +void gf_es_dispatch_raw_media_au(GF_Channel *ch, char *payload, u32 payload_size, u32 cts); /* decoder stuff @@ -710,6 +723,9 @@ enum GF_ESM_CODEC_IS_USE = 1<<1, /*set for OD codec when static (ressources are declared in OD stream esd a la ISMA*/ GF_ESM_CODEC_IS_STATIC_OD = 1<<2, + /*set when codec is identified as RAW, meaning all AU comming from the network are directly + dispatched to the composition memory*/ + GF_ESM_CODEC_IS_RAW_MEDIA = 1<<3, }; struct _generic_codec @@ -797,6 +813,8 @@ enum /*flag set if object has been started before any start request from the scene*/ GF_ODM_PREFETCH = (1<<8), + /*flag set if object has been deleted*/ + GF_ODM_DESTROYED = (1<<9), /*dynamic flags*/ /*flag set if associated subscene must be regenerated*/ @@ -809,7 +827,6 @@ enum GF_ODM_STATE_PLAY, GF_ODM_STATE_IN_SETUP, GF_ODM_STATE_BLOCKED, - GF_ODM_STATE_DESTROYED, }; enum @@ -872,6 +889,9 @@ struct _od_manager u32 action_type; +// u32 raw_media_frame_pending; + GF_Semaphore *raw_frame_sema; + #ifndef GPAC_DISABLE_VRML /*the one and only media control currently attached to this object*/ struct _media_control *media_ctrl; @@ -1001,6 +1021,10 @@ void gf_term_service_media_event(GF_ObjectManager *odm, u32 event_type); /*checks the URL and returns the ODID (MPEG-4 od://) or GF_MEDIA_EXTERNAL_ID for all regular URLs*/ u32 gf_mo_get_od_id(MFURL *url); +void gf_scene_generate_views(GF_Scene *scene, char *url); + +GF_Err gf_codec_process_private_media(GF_Codec *codec, u32 TimeAvailable); + #ifdef __cplusplus } #endif diff --git a/include/gpac/isomedia.h b/include/gpac/isomedia.h index ce36dda..03bf281 100644 --- a/include/gpac/isomedia.h +++ b/include/gpac/isomedia.h @@ -100,7 +100,9 @@ enum /*Opens an existing file in EDIT mode*/ GF_ISOM_OPEN_EDIT, /*Creates a new file in EDIT mode*/ - GF_ISOM_WRITE_EDIT + GF_ISOM_WRITE_EDIT, + /*Opens an existing file for fragment concatenation*/ + GF_ISOM_OPEN_CAT_FRAGMENTS, }; /*Movie Options for file writing*/ @@ -478,6 +480,12 @@ u64 gf_isom_get_sample_dts(GF_ISOFile *the_file, u32 trackNumber, u32 sampleNumb /*returns sample duration in media timeScale*/ u32 gf_isom_get_sample_duration(GF_ISOFile *the_file, u32 trackNumber, u32 sampleNumber); +/*returns sample size in bytes*/ +u32 gf_isom_get_sample_size(GF_ISOFile *the_file, u32 trackNumber, u32 sampleNumber); + +/*returns sync flag of sample*/ +u8 gf_isom_get_sample_sync(GF_ISOFile *the_file, u32 trackNumber, u32 sampleNumber); + /*gets a sample given a desired decoding time IN MEDIA TIME SCALE and set the StreamDescIndex of this sample this index allows to retrieve the stream description if needed (2 media in 1 track) @@ -591,6 +599,9 @@ return -1 if error, 0 if the reference is a NULL one, or the trackNumber */ GF_Err gf_isom_get_reference(GF_ISOFile *the_file, u32 trackNumber, u32 referenceType, u32 referenceIndex, u32 *refTrack); +/*Return 1 if the given track has a reference to the given TreckID of a given ReferenceType, 0 otherwise*/ +Bool gf_isom_has_track_reference(GF_ISOFile *movie, u32 trackNumber, u32 referenceType, u32 refTrackID); + u8 gf_isom_get_pl_indication(GF_ISOFile *the_file, u8 PL_Code); /*locates the first ObjectDescriptor using the given track by inspecting any OD tracks*/ @@ -640,6 +651,9 @@ GF_Err gf_isom_get_track_matrix(GF_ISOFile *the_file, u32 trackNumber, u32 matri /*returns width and height of the given visual sample desc - error if not a visual track*/ GF_Err gf_isom_get_pixel_aspect_ratio(GF_ISOFile *the_file, u32 trackNumber, u32 StreamDescriptionIndex, u32 *hSpacing, u32 *vSpacing); +/*gets RVC config of given sample description*/ +GF_Err gf_isom_get_rvc_config(GF_ISOFile *movie, u32 track, u32 sampleDescriptionIndex, u16 *rvc_predefined, char **data, u32 *size, const char **mime); + /* User Data Manipulation (cf write API too) */ @@ -769,6 +783,9 @@ fragmented options such as MPEG-4 video packets. This will update the data size. CANNOT be used with OD media type*/ GF_Err gf_isom_append_sample_data(GF_ISOFile *the_file, u32 trackNumber, char *data, u32 data_size); +/*sets RAP flag of last sample added to TRUE*/ +GF_Err gf_isom_set_sample_rap(GF_ISOFile *movie, u32 trackNumber); + /*Add sample references to a track. The dataOffset is the offset of the data in the referenced file you MUST have created a StreamDescription with URL or URN specifying your referenced file Use streamDescriptionIndex to specify the desired stream (if several)*/ @@ -967,6 +984,9 @@ GF_Err gf_isom_set_media_language(GF_ISOFile *the_file, u32 trackNumber, char *t /*removes given stream description*/ GF_Err gf_isom_remove_sample_description(GF_ISOFile *the_file, u32 trackNumber, u32 streamDescIndex); +/*sets the RVC config for the given track sample description*/ +GF_Err gf_isom_set_rvc_config(GF_ISOFile *movie, u32 track, u32 sampleDescriptionIndex, u16 rvc_predefined, char *mime, char *data, u32 size); + /* some authoring extensions */ @@ -1123,14 +1143,11 @@ GF_Err gf_isom_start_fragment(GF_ISOFile *movie, Bool moof_first); /*starts a new segment in the file. If SegName is given, the output will be written in the SegName file*/ GF_Err gf_isom_start_segment(GF_ISOFile *movie, char *SegName); -typedef struct -{ - u32 track_ID; - u64 decoding_time; -} GF_SIDXTrackTimes; +/*sets the baseMediaDecodeTime of the first sample of the given track*/ +GF_Err gf_isom_set_traf_base_media_decode_time(GF_ISOFile *movie, u32 TrackID, u64 decode_time); -/*closes current segment*/ -GF_Err gf_isom_close_segment(GF_ISOFile *movie, u32 fragments_per_sidx, u32 referenceTrackID, GF_SIDXTrackTimes *tracks_times, u32 nb_times, Bool daisy_chain_sidx); +/*closes current segment - if fragments_per_sidx is <0, no sidx is used - if fragments_per_sidx is ==0, a single sidx is used*/ +GF_Err gf_isom_close_segment(GF_ISOFile *movie, s32 fragments_per_sidx, u32 referenceTrackID, u64 ref_track_decode_time, Bool daisy_chain_sidx, Bool last_segment); enum { @@ -1753,9 +1770,15 @@ u32 gf_isom_get_meta_item_by_id(GF_ISOFile *file, Bool root_meta, u32 track_num, /*extracts item from given meta @item_num: 1-based index of item to query + @dump_file_name: if NULL, use item name for dumping */ GF_Err gf_isom_extract_meta_item(GF_ISOFile *file, Bool root_meta, u32 track_num, u32 item_num, const char *dump_file_name); +/*extracts item from given meta in memory + @item_num: 1-based index of item to query +*/ +GF_Err gf_isom_extract_meta_item_mem(GF_ISOFile *file, Bool root_meta, u32 track_num, u32 item_id, char **out_data, u32 *out_size, const char **mime_type); + /*retirves primary item ID, 0 if none found (primary can also be stored through meta XML)*/ u32 gf_isom_get_meta_primary_item_id(GF_ISOFile *file, Bool root_meta, u32 track_num); @@ -1784,6 +1807,8 @@ GF_Err gf_isom_set_meta_xml_memory(GF_ISOFile *file, Bool root_meta, u32 track_n @URL, @URN: if set, resource will be remote (same as stream descriptions) */ GF_Err gf_isom_add_meta_item(GF_ISOFile *file, Bool root_meta, u32 track_num, Bool self_reference, char *resource_path, const char *item_name, const char *mime_type, const char *content_encoding, const char *URL, const char *URN); +/*same as above excepts take the item directly in memory*/ +GF_Err gf_isom_add_meta_item_memory(GF_ISOFile *file, Bool root_meta, u32 track_num, const char *item_name, const char *mime_type, const char *content_encoding, char *data, u32 data_len); /*removes item from meta*/ GF_Err gf_isom_remove_meta_item(GF_ISOFile *file, Bool root_meta, u32 track_num, u32 item_num); @@ -1931,18 +1956,22 @@ GF_Err gf_isom_ac3_config_new(GF_ISOFile *the_file, u32 trackNumber, GF_AC3Confi /*returns the number of subsamples in the given sample */ u32 gf_isom_sample_has_subsamples(GF_ISOFile *movie, u32 track, u32 sampleNumber); -GF_Err gf_isom_sample_get_subsample(GF_ISOFile *movie, u32 track, u32 sampleNumber, u32 subSampleNumber, u32 *size, u8 *priority, Bool *discardable); +GF_Err gf_isom_sample_get_subsample(GF_ISOFile *movie, u32 track, u32 sampleNumber, u32 subSampleNumber, u32 *size, u8 *priority, u32 *reserved, Bool *discardable); #ifndef GPAC_DISABLE_ISOM_WRITE /*adds subsample information to a given sample. Subsample information shall be added in increasing order of sampleNumbers, insertion of information is not supported. Note that you may add subsample information for samples not yet added to the file specifying 0 as subSampleSize will remove the last subsample information if any*/ -GF_Err gf_isom_add_subsample(GF_ISOFile *movie, u32 track, u32 sampleNumber, u32 subSampleSize, u32 priority, Bool discardable); +GF_Err gf_isom_add_subsample(GF_ISOFile *movie, u32 track, u32 sampleNumber, u32 subSampleSize, u8 priority, u32 reserved, Bool discardable); #endif /*add subsample information for the latest sample added to the current track fragment*/ -GF_Err gf_isom_fragment_add_subsample(GF_ISOFile *movie, u32 TrackID, u32 subSampleSize, u32 priority, Bool discardable); +GF_Err gf_isom_fragment_add_subsample(GF_ISOFile *movie, u32 TrackID, u32 subSampleSize, u8 priority, u32 reserved, Bool discardable); /*copy over the subsample information of the given sample from the source track/file to the last sample added to the current track fragment of the destination file*/ GF_Err gf_isom_fragment_copy_subsample(GF_ISOFile *dest, u32 TrackID, GF_ISOFile *orig, u32 track, u32 sampleNumber); +/*gets the number of the next moof to be produced*/ +u32 gf_isom_get_next_moof_number(GF_ISOFile *movie); +/*Sets the number of the next moof to be produced*/ +void gf_isom_set_next_moof_number(GF_ISOFile *movie, u32 value); #endif /*GPAC_DISABLE_ISOM*/ diff --git a/include/gpac/media_tools.h b/include/gpac/media_tools.h index a05efdf..1f6bb73 100644 --- a/include/gpac/media_tools.h +++ b/include/gpac/media_tools.h @@ -91,6 +91,10 @@ enum /* oversampled SBR */ GF_IMPORT_OVSBR = 1<<14, + /* set subsample information with SVC*/ + GF_IMPORT_SET_SUBSAMPLES = 1<<15, + + /*when set, only updates tracks info and return*/ GF_IMPORT_PROBE_ONLY = 1<<20, /*only set when probing, signals several frames per sample possible*/ @@ -105,6 +109,9 @@ enum GF_IMPORT_DO_ABORT = 1<<31 }; +#define GF_IMPORT_DEFAULT_FPS 25.0 +#define GF_IMPORT_AUTO_FPS 10000.0 + #define GF_IMPORT_MAX_TRACKS 100 struct __track_video_info { @@ -212,7 +219,7 @@ GF_Err gf_media_import_chapters(GF_ISOFile *file, char *chap_file, Double import /*save file as fragmented movie @dash_mode: 0 = DASH not used, 1 = DASH used without GOP spliting, 2 = DASH used with GOP spliting, */ -GF_Err gf_media_fragment_file(GF_ISOFile *input, char *output_file, Double max_duration_sec, u32 dash_mode, Double dash_duration_sec, char *seg_rad_name, char *seg_ext, u32 fragments_per_sidx, Bool daisy_chain_sidx, Bool use_url_template); +GF_Err gf_media_fragment_file(GF_ISOFile *input, char *output_file, Double max_duration_sec, u32 dash_mode, Double dash_duration_sec, char *seg_rad_name, char *seg_ext, s32 fragments_per_sidx, Bool daisy_chain_sidx, Bool use_url_template, const char *dash_ctx); /*make the file ISMA compliant: creates ISMA BIFS / OD tracks if needed, and update audio/video IDs the file should not contain more than one audio and one video track @@ -234,6 +241,9 @@ GF_Err gf_media_change_par(GF_ISOFile *file, u32 track, s32 ar_num, s32 ar_den); /*changes the profile (if not 0) and level (if not 0) indication of the media - only AVC/H264 supported for now*/ GF_Err gf_media_change_pl(GF_ISOFile *file, u32 track, u32 profile, u32 level); +/*rewrite AVC samples if nalu size_length has to be changed*/ +GF_Err gf_media_avc_rewrite_samples(GF_ISOFile *file, u32 track, u32 prev_size_in_bits, u32 new_size_in_bits); + #endif /*GPAC_DISABLE_MEDIA_IMPORT*/ diff --git a/include/gpac/mediaobject.h b/include/gpac/mediaobject.h index 5873f05..897edf5 100644 --- a/include/gpac/mediaobject.h +++ b/include/gpac/mediaobject.h @@ -125,7 +125,8 @@ Bool gf_mo_has_audio(GF_MediaObject *mo); /*checks if the service associated withthis object has an audio stream*/ Bool gf_mo_is_private_media(GF_MediaObject *mo); -void gf_mo_set_position(GF_MediaObject *mo, GF_Window *src, GF_Window *dst); +/*set destination window for harware codecs directly outputing to video out - returns 1 if video size has changed*/ +Bool gf_mo_set_position(GF_MediaObject *mo, GF_Window *src, GF_Window *dst); enum { diff --git a/include/gpac/modules/codec.h b/include/gpac/modules/codec.h index ee9c196..14bb2cf 100644 --- a/include/gpac/modules/codec.h +++ b/include/gpac/modules/codec.h @@ -111,6 +111,8 @@ enum /*this is only used for audio in case transport mapping relies on sampleRate (RTP) gets the CU duration in samplerate unit (type: int) */ GF_CODEC_CU_DURATION, + /*queries whether data is RAW (directly dispatched to CompositionMemory) or not*/ + GF_CODEC_RAW_MEDIA, /*This is only called on scene decoders to signal that potential overlay scene should be showed (cap.valueINT=1) or hidden (cap.valueINT=0). Currently only used with SetCap*/ @@ -128,6 +130,18 @@ enum }; +enum +{ + /*stream format is NOT supported by this codec*/ + GF_CODEC_NOT_SUPPORTED = 0, + /*stream type (eg audio, video) is supported by this codec*/ + GF_CODEC_STREAM_TYPE_SUPPORTED = 1, + /*stream format may be (partially) supported by this codec*/ + GF_CODEC_MAYBE_SUPPORTED = 127, + /*stream format is supported by this codec*/ + GF_CODEC_SUPPORTED = 255, +}; + /* Generic interface used by both media decoders and scene decoders @AttachStream: Add a Stream to the codec. If DependsOnESID is NULL, the stream is a base layer @@ -143,7 +157,7 @@ enum Set the desired capability given its code if possible if the codec does not support the request capability, return GF_NOT_SUPPORTED @CanHandleStream - Can module handle this codec? Return 0 if No and !0 otherwise + Can module handle this codec? Return one of GF_CODEC_NOT_SUPPORTED, GF_CODEC_MAYBE_SUPPORTED or GF_CODEC_SUPPORTED esd is provided for more advanced inspection ( eg MPEG4 audio/visual where a bunch of codecs are defined with same objectType). If esd is NULL, only decoder type is checked (audio or video), not codec type @GetDecoderName @@ -158,7 +172,7 @@ enum GF_Err (*DetachStream)(IFCE_NAME, u16 ES_ID);\ GF_Err (*GetCapabilities)(IFCE_NAME, GF_CodecCapability *capability);\ GF_Err (*SetCapabilities)(IFCE_NAME, GF_CodecCapability capability);\ - Bool (*CanHandleStream)(IFCE_NAME, u32 StreamType, GF_ESD *esd, u8 ProfileLevelIndication);\ + u32 (*CanHandleStream)(IFCE_NAME, u32 StreamType, GF_ESD *esd, u8 ProfileLevelIndication);\ const char *(*GetName)(IFCE_NAME);\ void *privateStack; \ diff --git a/include/gpac/modules/service.h b/include/gpac/modules/service.h index 13d79ca..fb74d09 100644 --- a/include/gpac/modules/service.h +++ b/include/gpac/modules/service.h @@ -31,6 +31,7 @@ extern "C" { /*for SL, ESD and OD*/ #include +#include #include /*handle to service*/ @@ -39,7 +40,7 @@ typedef struct _net_service GF_ClientService; /*handle to channel*/ typedef void *LPNETCHANNEL; -enum +typedef enum { /*channel control, app->module. Note that most modules don't need to handle pause/resume/set_speed*/ GF_NET_CHAN_PLAY, @@ -94,9 +95,12 @@ enum /*instructs the service to get the migration info - term->net only*/ GF_NET_SERVICE_MIGRATION_INFO, + /*When using DASH or playlists, query the next file to concatenate to thecurrent one net->proxy only*/ + GF_NET_SERVICE_QUALITY_SWITCH, + /*When using DASH or playlists, query the next file to concatenate to thecurrent one net->proxy only*/ GF_NET_SERVICE_QUERY_NEXT, -}; +} GF_NET_CHAN_CMD; /*channel command for all commands that don't need params: GF_NET_CHAN_SET_PULL: module shall return GF_OK or GF_NOT_SUPPORTED @@ -260,6 +264,7 @@ typedef struct u32 command_type; LPNETCHANNEL on_channel; u32 hSpacing, vSpacing; + u32 width, height, pixel_format; } GF_NetComPixelAR; /*GF_NET_SERVICE_INFO*/ @@ -304,6 +309,16 @@ typedef struct const char *next_url; } GF_NetURLQuery; +/*GF_NET_SERVICE_QUALITY_SWITCH*/ +typedef struct +{ + u32 command_type; + /*currently NULL only*/ + LPNETCHANNEL on_channel; + /*out: next url to play after current one*/ + Bool up; +} GF_NetQualitySwitch; + typedef union __netcommand { u32 command_type; @@ -323,6 +338,7 @@ typedef union __netcommand GF_NetComHasAudio audio; GF_NetComMigration migrate; GF_NetURLQuery url_query; + GF_NetQualitySwitch switch_quality; } GF_NetworkCommand; /* @@ -337,7 +353,7 @@ typedef struct _netinterface /* interface declaration*/ GF_DECL_MODULE_INTERFACE - /*retuns 1 if module can process this URL, 0 otherwise. This is only called when the file extension/mimeType cannot be + /*returns 1 if module can process this URL, 0 otherwise. This is only called when the file extension/mimeType cannot be retrieved in the cfg file, otherwise the mime type/file ext is used to load service. Typically a module would register its mime types in this function (cf gf_term_register_mime_type below) */ @@ -451,6 +467,8 @@ no_scene_check: specifies if the scene description shall be rebuilt or not. */ void gf_term_add_media(GF_ClientService *service, GF_Descriptor *media_desc, Bool no_scene_update); +Bool gf_term_on_service_event(GF_ClientService *service, GF_Event *service_event); + /*check if @fileExt extension is supported for given mimeType, and if associated with module. If mimeType not registered, register it for given module*/ Bool gf_term_check_extension(GF_InputService *ifce, const char *mimeType, const char *extList, const char *description, const char *fileExt); diff --git a/include/gpac/mpeg4_odf.h b/include/gpac/mpeg4_odf.h index fdafff4..787a542 100644 --- a/include/gpac/mpeg4_odf.h +++ b/include/gpac/mpeg4_odf.h @@ -156,6 +156,11 @@ typedef struct /*includes BOTH IPMP_DescriptorPointer (IPMP & IPMPX) and GF_IPMP_Descriptor (IPMPX only)*/ GF_List *IPMP_Descriptors; GF_List *extensionDescriptors; + /*MPEG-2 (or other service mux formats) service ID*/ + u16 ServiceID; + /*pointer to the service interface (GF_InputService) of the service having declared the object + only used for DASH*/ + void *service_ifce; } GF_ObjectDescriptor; /*GF_InitialObjectDescriptor - WARNING: even though the bitstream IOD is not @@ -171,6 +176,11 @@ typedef struct /*includes BOTH IPMP_DescriptorPointer (IPMP & IPMPX) and GF_IPMP_Descriptor (IPMPX only)*/ GF_List *IPMP_Descriptors; GF_List *extensionDescriptors; + /*MPEG-2 (or other service mux formats) service ID*/ + u16 ServiceID; + /*pointer to the service interface (GF_InputService) of the service having declared the object + only used for DASH*/ + void *service_ifce; /*IOD extensions*/ u8 inlineProfileFlag; @@ -235,7 +245,8 @@ typedef struct { typedef struct { BASE_DESCRIPTOR - u8 objectTypeIndication; + /*coded on 8 bit, but we use 32 bits for internal signaling in GPAC to enable usage of 4CC*/ + u32 objectTypeIndication; u8 streamType; u8 upstream; u32 bufferSizeDB; @@ -243,10 +254,13 @@ typedef struct u32 avgBitrate; GF_DefaultDescriptor *decoderSpecificInfo; - /*placeholder for RVC decoder config*/ + /*placeholder for RVC decoder config if any*/ + u16 predefined_rvc_config; GF_DefaultDescriptor *rvc_config; GF_List *profileLevelIndicationIndexDescriptor; + /*pass through data for some modules*/ + void *udta; } GF_DecoderConfig; diff --git a/include/gpac/mpegts.h b/include/gpac/mpegts.h index 17e4248..f119b12 100644 --- a/include/gpac/mpegts.h +++ b/include/gpac/mpegts.h @@ -40,6 +40,9 @@ typedef struct tag_m2ts_demux GF_M2TS_Demuxer; typedef struct tag_m2ts_es GF_M2TS_ES; typedef struct tag_m2ts_section_es GF_M2TS_SECTION_ES; +#ifdef GPAC_HAS_LINUX_DVB +typedef struct __gf_dvb_tuner GF_Tuner; +#endif /*Maximum number of streams in a TS*/ #define GF_M2TS_MAX_STREAMS 8192 @@ -47,8 +50,8 @@ typedef struct tag_m2ts_section_es GF_M2TS_SECTION_ES; /*Maximum number of service in a TS*/ #define GF_M2TS_MAX_SERVICES 65535 -/*When ODProfileLevelIndication has this value, only scene and od streams are sl-packetized*/ -#define GPAC_MAGIC_OD_PROFILE_FOR_MPEG4_SIGNALING 10 +/*Maximum size of the buffer in UDP */ +#define UDP_BUFFER_SIZE 0x40000 /*MPEG-2 TS Media types*/ enum @@ -170,11 +173,11 @@ enum GF_M2TS_EVT_EIT_OTHER_PF, /* An EIT message for the schedule of an other TS has been received */ GF_M2TS_EVT_EIT_OTHER_SCHEDULE, +#endif /* A message to inform about the current date and time in the TS */ GF_M2TS_EVT_TDT, /* A message to inform about the current time offset in the TS */ GF_M2TS_EVT_TOT, -#endif /* A generic event message for EIT, TDT, TOT etc */ GF_M2TS_EVT_DVB_GENERAL, /* MPE / MPE-FEC frame extraction and IP datagrams decryptation */ @@ -185,6 +188,9 @@ enum GF_M2TS_EVT_CAT_REPEAT, /*PMT has been changed - assoctiated parameter: updated PMT*/ GF_M2TS_EVT_CAT_UPDATE, + /*AIT has been found (carousel) */ + GF_M2TS_EVT_AIT_FOUND, + }; enum @@ -280,6 +286,10 @@ typedef struct used to compute PCR interpolation value*/ u64 before_last_pcr_value; u32 before_last_pcr_value_pck_number; + + /*for hybrid use-cases we need to know if TDT has already been processed*/ + Bool tdt_found; + } GF_M2TS_Program; /*ES flags*/ @@ -379,6 +389,10 @@ typedef struct tag_m2ts_pes Bool rap; u64 PTS, DTS; u32 pes_end_packet_number; + /*bytes not consumed from previous PES - shall be less than 9*/ + unsigned char *prev_data; + /*number of bytes not consumed from previous PES - shall be less than 9*/ + u32 prev_data_len; u32 pes_start_packet_number; /* PCR info related to the PES start */ @@ -393,8 +407,8 @@ typedef struct tag_m2ts_pes /*PES reframer - if NULL, pes processing is skiped*/ u32 frame_state; - /*returns the number of bytes consummed from the input data buffer*/ - void (*reframe)(struct tag_m2ts_demux *ts, struct tag_m2ts_pes *pes, u64 DTS, u64 CTS, unsigned char *data, u32 data_len); + /*returns the number of bytes NOT consummed from the input data buffer - these bytes are kept when reassembling the next PES packet*/ + u32 (*reframe)(struct tag_m2ts_demux *ts, struct tag_m2ts_pes *pes, u64 DTS, u64 CTS, unsigned char *data, u32 data_len); /*LATM stuff - should be moved out of mpegts*/ unsigned char *buf; u32 buf_len; @@ -427,6 +441,16 @@ typedef struct u32 logical_channel_number; } GF_M2TS_NIT; +typedef struct +{ + u16 year; + u8 month; + u8 day; + u8 hour; + u8 minute; + u8 second; +} GF_M2TS_TDT_TOT; + #define GF_M2TS_BASE_DESCRIPTOR u32 tag; typedef struct { @@ -526,10 +550,48 @@ typedef struct /*MPEG-2 TS demuxer*/ struct tag_m2ts_demux { + /* From M2TSIn */ + GF_List *requested_progs; + GF_List *requested_pids; + + /*demuxer thread*/ + GF_Thread *th; + u32 run_state; + + /*net playing*/ + GF_Socket *sock; + +#ifdef GPAC_HAS_LINUX_DVB + /*dvb playing*/ + GF_Tuner *tuner; +#endif + /*local file playing*/ + FILE *file; + char filename[GF_MAX_PATH]; + u32 start_range, end_range; + u64 file_size; + Double duration; + u32 nb_playing; + Bool file_regulate; + u64 pcr_last; + u32 stb_at_last_pcr; + u32 nb_pck; + Bool loop_demux; + + /* "Network" = "MobileIP", "DefaultMCastInterface" */ + Bool MobileIPEnabled; + const char *network_type; + /* Set it to 1 if the TS is meant to be played during the demux */ + Bool demux_and_play; + /* End of M2TSIn */ + GF_M2TS_ES *ess[GF_M2TS_MAX_STREAMS]; GF_List *programs; + u32 nb_prog_pmt_received; + Bool all_prog_pmt_received; /*keep it seperate for now - TODO check if we're sure of the order*/ GF_List *SDTs; + GF_M2TS_TDT_TOT *TDT_time; /*UTC time from both TDT and TOT (we currently ignore local offset)*/ /*user callback - MUST NOT BE NULL*/ void (*on_event)(struct tag_m2ts_demux *ts, u32 evt_type, void *par); @@ -540,7 +602,7 @@ struct tag_m2ts_demux char *buffer; u32 buffer_size, alloc_size; /*default transport PID filters*/ - GF_M2TS_SectionFilter *pat, *cat, *nit, *sdt, *eit, *tdt_tot_st; + GF_M2TS_SectionFilter *pat, *cat, *nit, *sdt, *eit, *tdt_tot; Bool has_4on2; /* analyser */ @@ -549,12 +611,21 @@ struct tag_m2ts_demux Bool direct_mpe; Bool dvb_h_demux; + /*user callback - MUST NOT BE NULL*/ void (*on_mpe_event)(struct tag_m2ts_demux *ts, u32 evt_type, void *par); /* Structure to hold all the INT tables if the TS contains IP streams */ struct __gf_dvb_mpe_ip_platform *ip_platform; - + u32 pck_number; + + /*remote file handling - created and destroyed by user*/ + struct __gf_download_session *dnload; + + const char *dvb_channels_conf_path; + + const char *(*query_next)(void *udta); + void *udta_query; }; GF_M2TS_Demuxer *gf_m2ts_demux_new(); @@ -563,6 +634,7 @@ void gf_m2ts_reset_parsers(GF_M2TS_Demuxer *ts); GF_ESD *gf_m2ts_get_esd(GF_M2TS_ES *es); GF_Err gf_m2ts_set_pes_framing(GF_M2TS_PES *pes, u32 mode); GF_Err gf_m2ts_process_data(GF_M2TS_Demuxer *ts, char *data, u32 data_size); +u32 gf_dvb_get_freq_from_url(const char *channels_config_path, const char *url); @@ -599,6 +671,7 @@ enum /* ... */ GF_M2TS_AVC_TIMING_HRD_DESCRIPTOR = 0x2A, /* ... */ + GF_M2TS_MPEG4_ODUPDATE_DESCRIPTOR = 0x35, /* 0x2D - 0x3F - ISO/IEC 13818-6 values */ /* 0x40 - 0xFF - User Private values */ @@ -650,11 +723,11 @@ enum { GF_M2TS_PID_TSDT = 0x0002, /* reserved 0x0003 to 0x000F */ GF_M2TS_PID_NIT_ST = 0x0010, - GF_M2TS_PID_SDT_BAT_ST = 0x0011, - GF_M2TS_PID_EIT_ST_CIT = 0x0012, + GF_M2TS_PID_SDT_BAT_ST = 0x0011, + GF_M2TS_PID_EIT_ST_CIT = 0x0012, GF_M2TS_PID_RST_ST = 0x0013, - GF_M2TS_PID_TDT_TOT_ST = 0x0014, - GF_M2TS_PID_NET_SYNC = 0x0015, + GF_M2TS_PID_TDT_TOT_ST = 0x0014, + GF_M2TS_PID_NET_SYNC = 0x0015, GF_M2TS_PID_RNT = 0x0016, /* reserved 0x0017 to 0x001B */ GF_M2TS_PID_IN_SIG = 0x001C, @@ -672,10 +745,10 @@ enum { GF_M2TS_TABLE_ID_MPEG4_BIFS = 0x04, /* max size for section 4096 */ GF_M2TS_TABLE_ID_MPEG4_OD = 0x05, /* max size for section 4096 */ GF_M2TS_TABLE_ID_METADATA = 0x06, - GF_M2TS_TABLE_ID_IPMP_CONTROL = 0x07, + GF_M2TS_TABLE_ID_IPMP_CONTROL = 0x07, /* 0x08 - 0x37 reserved */ /* 0x38 - 0x3D DSM-CC defined */ - GF_M2TS_TABLE_ID_DSM_CC_PRIVATE = 0x3E, /* used for MPE (only, not MPE-FEC) */ + GF_M2TS_TABLE_ID_DSM_CC_PRIVATE = 0x3E, /* used for MPE (only, not MPE-FEC) */ /* 0x3F DSM-CC defined */ GF_M2TS_TABLE_ID_NIT_ACTUAL = 0x40, /* max size for section 1024 */ GF_M2TS_TABLE_ID_NIT_OTHER = 0x41, @@ -688,20 +761,20 @@ enum { GF_M2TS_TABLE_ID_INT = 0x4c, /* max size for section 4096 */ /* 0x4d reserved */ - GF_M2TS_TABLE_ID_EIT_ACTUAL_PF = 0x4E, /* max size for section 4096 */ - GF_M2TS_TABLE_ID_EIT_OTHER_PF = 0x4F, + GF_M2TS_TABLE_ID_EIT_ACTUAL_PF = 0x4E, /* max size for section 4096 */ + GF_M2TS_TABLE_ID_EIT_OTHER_PF = 0x4F, /* 0x50 - 0x6f EIT SCHEDULE */ GF_M2TS_TABLE_ID_EIT_SCHEDULE_MIN = 0x50, GF_M2TS_TABLE_ID_EIT_SCHEDULE_ACTUAL_MAX= 0x5F, GF_M2TS_TABLE_ID_EIT_SCHEDULE_MAX = 0x6F, - GF_M2TS_TABLE_ID_TDT = 0x70, + GF_M2TS_TABLE_ID_TDT = 0x70, /* max size for section 1024 */ GF_M2TS_TABLE_ID_RST = 0x71, /* max size for section 1024 */ GF_M2TS_TABLE_ID_ST = 0x72, /* max size for section 4096 */ - GF_M2TS_TABLE_ID_TOT = 0x73, - GF_M2TS_TABLE_ID_AI = 0x74, + GF_M2TS_TABLE_ID_TOT = 0x73, /* max size for section 1024 */ + GF_M2TS_TABLE_ID_AIT = 0x74, GF_M2TS_TABLE_ID_CONT = 0x75, - GF_M2TS_TABLE_ID_RC = 0x76, + GF_M2TS_TABLE_ID_RC = 0x76, GF_M2TS_TABLE_ID_CID = 0x77, GF_M2TS_TABLE_ID_MPE_FEC = 0x78, GF_M2TS_TABLE_ID_RES_NOT = 0x79, @@ -824,6 +897,8 @@ typedef struct __m2ts_mux_stream { /*multiplexer time - NOT THE PCR*/ GF_M2TS_Time time; + /*for PCR strreams, set to 1 when PCR has to be sent, 0 otherwise*/ + u32 pcr_priority; /*table tools*/ GF_M2TS_Mux_Table *tables; @@ -835,22 +910,32 @@ typedef struct __m2ts_mux_stream { u32 current_section_offset; u32 refresh_rate_ms; Bool table_needs_update; + Bool table_needs_send; - Bool (*process)(struct __m2ts_mux *muxer, struct __m2ts_mux_stream *stream); + /*process PES or table update/framing + returns the priority of the stream, 0 meaning not scheduled, 1->N highest priority sent first*/ + u32 (*process)(struct __m2ts_mux *muxer, struct __m2ts_mux_stream *stream); /*PES tools*/ void *pes_packetizer; u32 mpeg2_stream_type; u32 mpeg2_stream_id; + u32 scheduling_priority; GF_ESIPacket curr_pck; /*current packet being processed - does not belong to the packet fifo*/ u32 pck_offset; + u32 next_payload_size, copy_from_next_packets; + u32 pes_data_len, pes_data_remain; Bool force_new; Bool discard_data; + + u32 next_pck_flags; + u64 next_pck_cts, next_pck_dts; + + u32 reframe_overhead; struct __elementary_stream_ifce *ifce; Double ts_scale; - u64 initial_ts; /*packet fifo*/ GF_M2TS_Packet *pck_first, *pck_last; @@ -859,13 +944,11 @@ typedef struct __m2ts_mux_stream { GF_Mutex *mx; /*avg bitrate compute*/ u64 last_br_time; - u32 bytes_since_last_time; + u32 bytes_since_last_time, pes_since_last_time; /*MPEG-4 over MPEG-2*/ u8 table_id; GF_SLHeader sl_header; - /* MPEG-4 SL Config */ - GF_SLConfig sl_config; u32 last_aac_time; } GF_M2TS_Mux_Stream; @@ -873,10 +956,17 @@ typedef struct __m2ts_mux_stream { enum { GF_M2TS_MPEG4_SIGNALING_NONE = 0, GF_M2TS_MPEG4_SIGNALING_FULL, - /*experimental profile where all PES media streams (audio, video, images) are sent directly on PES without SL-packetization*/ + /*MPEG-4 over MPEG-2 profile where PES media streams may be refered to by the scene without SL-packetization*/ GF_M2TS_MPEG4_SIGNALING_SCENE }; +typedef struct __m2ts_base_descriptor +{ + u8 tag; + u8 data_len; + char *data; +} GF_M2TSDescriptor; + struct __m2ts_mux_program { struct __m2ts_mux_program *next; @@ -894,9 +984,15 @@ struct __m2ts_mux_program { GF_M2TS_Time ts_time_at_pcr_init; u64 pcr_init_time, num_pck_at_pcr_init; u64 last_pcr; + u64 last_dts; u32 last_sys_clock; + u64 initial_ts; + Bool initial_ts_set; + u32 pcr_offset; GF_Descriptor *iod; + /*list of GF_M2TSDescriptor to add to the program descriptor loop. By default set to NULL, if non null will be reset and destroyed upon cleanup*/ + GF_List *loop_descriptors; Bool mpeg4_signaling; Bool mpeg4_signaling_for_scene_only; }; @@ -920,6 +1016,9 @@ struct __m2ts_mux { /*output bit-rate in bit/sec*/ u32 bit_rate; + /*init value for PCRs on all streams if 0, random value is used*/ + u64 init_pcr_value; + char dst_pck[188], null_pck[188]; /*multiplexer time, incremented each time a packet is sent @@ -932,12 +1031,16 @@ struct __m2ts_mux { /* System time when the muxer is started */ u32 init_sys_time; + Bool one_au_per_pes; + Bool eos_found; u32 pck_sent_over_br_window, last_br_time, avg_br; u64 tot_pck_sent, tot_pad_sent; }; + + enum { GF_M2TS_STATE_IDLE, @@ -946,25 +1049,73 @@ enum GF_M2TS_STATE_EOS, }; +#define GF_M2TS_PSI_DEFAULT_REFRESH_RATE 200 /*! * mux_rate en kbps */ GF_M2TS_Mux *gf_m2ts_mux_new(u32 mux_rate, u32 pat_refresh_rate, Bool real_time); void gf_m2ts_mux_del(GF_M2TS_Mux *mux); -GF_M2TS_Mux_Program *gf_m2ts_mux_program_add(GF_M2TS_Mux *muxer, u32 program_number, u32 pmt_pid, u32 pmt_refresh_rate, Bool mpeg4_signaling); -GF_M2TS_Mux_Stream *gf_m2ts_program_stream_add(GF_M2TS_Mux_Program *program, GF_ESInterface *ifce, u32 pid, Bool is_pcr); -void gf_m2ts_mux_update_config(GF_M2TS_Mux *mux, Bool reset_time); +GF_M2TS_Mux_Program *gf_m2ts_mux_program_add(GF_M2TS_Mux *muxer, u32 program_number, u32 pmt_pid, u32 pmt_refresh_rate, u32 pcr_offset, Bool mpeg4_signaling); +GF_M2TS_Mux_Stream *gf_m2ts_program_stream_add(GF_M2TS_Mux_Program *program, GF_ESInterface *ifce, u32 pid, Bool is_pcr, Bool force_pes_mode); +void gf_m2ts_mux_update_config(GF_M2TS_Mux *mux, Bool reset_time); +void gf_m2ts_mux_update_bitrate(GF_M2TS_Mux *mux); + const char *gf_m2ts_mux_process(GF_M2TS_Mux *muxer, u32 *status); u32 gf_m2ts_get_sys_clock(GF_M2TS_Mux *muxer); u32 gf_m2ts_get_ts_clock(GF_M2TS_Mux *muxer); +/*set muxer in/out single-au pes mode. In this mode, each PES contains one and only one AU*/ +GF_Err gf_m2ts_mux_use_single_au_pes_mode(GF_M2TS_Mux *muxer, Bool strict_au_pes_mode); +GF_Err gf_m2ts_mux_set_initial_pcr(GF_M2TS_Mux *muxer, u64 init_pcr_value); + /*user inteface functions*/ GF_Err gf_m2ts_program_stream_update_ts_scale(GF_ESInterface *_self, u32 time_scale); -void gf_m2ts_program_stream_update_sl_config(GF_ESInterface *_self, GF_SLConfig *slc); #endif /*GPAC_DISABLE_MPEG2TS_MUX*/ +/******************* Demux DVB ****************************/ +#include + + +#define UDP_BUFFER_SIZE 0x40000 +#define M2TS_BUFFER_MAX 400 + + +#ifdef GPAC_HAS_LINUX_DVB +#include +#include +#include +#include +#include + +struct __gf_dvb_tuner { + u32 freq; + u16 vpid; + u16 apid; + fe_spectral_inversion_t specInv; + fe_modulation_t modulation; + fe_bandwidth_t bandwidth; + fe_transmit_mode_t TransmissionMode; + fe_guard_interval_t guardInterval; + fe_code_rate_t HP_CodeRate; + fe_code_rate_t LP_CodeRate; + fe_hierarchy_t hierarchy; + + int ts_fd; +}; + + +#define DVB_BUFFER_SIZE 3760 // DVB buffer size 188x20 + +#endif + + +GF_Err TSDemux_Demux_Setup(GF_M2TS_Demuxer *ts, const char *url, Bool loop); +GF_Err TSDemux_DemuxPlay(GF_M2TS_Demuxer *ts); +GF_Err TSDemux_CloseDemux(GF_M2TS_Demuxer *ts); + + #endif /*GPAC_DISABLE_MPEG2TS*/ #endif //_GF_MPEG_TS_H_ diff --git a/include/gpac/nodes_mpeg4.h b/include/gpac/nodes_mpeg4.h index 99e101a..04640a8 100644 --- a/include/gpac/nodes_mpeg4.h +++ b/include/gpac/nodes_mpeg4.h @@ -24,7 +24,7 @@ /* - DO NOT MOFIFY - File generated on GMT Mon Jan 18 12:27:12 2010 + DO NOT MOFIFY - File generated on GMT Wed Jul 20 05:50:21 2011 BY MPEG4Gen for GPAC Version 0.4.6-DEV */ @@ -3185,6 +3185,9 @@ typedef struct _tagCacheTexture SFInt32 expirationDate; /*field*/ SFBool repeatS; /*field*/ SFBool repeatT; /*field*/ + /*GPAC private*/ + u8 *data; + u32 data_len; } M_CacheTexture; diff --git a/include/gpac/options.h b/include/gpac/options.h index bf0ecb9..9fbcba1 100644 --- a/include/gpac/options.h +++ b/include/gpac/options.h @@ -293,6 +293,9 @@ enum GF_OPT_COLLISION, /*set/get gravity*/ GF_OPT_GRAVITY, + + /*get the number of offscreen views in stereo mode, or 1 if no offscreen stereo views are available*/ + GF_OPT_NUM_STEREO_VIEWS, }; #ifdef __cplusplus diff --git a/include/gpac/rtp_streamer.h b/include/gpac/rtp_streamer.h index bda1a1b..7a96f2d 100644 --- a/include/gpac/rtp_streamer.h +++ b/include/gpac/rtp_streamer.h @@ -92,7 +92,7 @@ GF_Err gf_rtp_streamer_append_sdp_extended(GF_RTPStreamer *rtp, u16 ESID, char * GF_Err gf_rtp_streamer_send_au(GF_RTPStreamer *rtp, char *data, u32 size, u64 cts, u64 dts, Bool is_rap); -GF_Err gf_rtp_streamer_send_au_with_sn(GF_RTPStreamer *rtp, char *data, u32 size, u64 cts, u64 dts, Bool is_rap, Bool inc_au_sn); +GF_Err gf_rtp_streamer_send_au_with_sn(GF_RTPStreamer *rtp, char *data, u32 size, u64 cts, u64 dts, Bool is_rap, u32 inc_au_sn); GF_Err gf_rtp_streamer_send_data(GF_RTPStreamer *rtp, char *data, u32 size, u32 fullsize, u64 cts, u64 dts, Bool is_rap, Bool au_start, Bool au_end, u32 au_sn, u32 sampleDuration, u32 sampleDescIndex); diff --git a/include/gpac/scene_manager.h b/include/gpac/scene_manager.h index d95d88f..368af1e 100644 --- a/include/gpac/scene_manager.h +++ b/include/gpac/scene_manager.h @@ -85,7 +85,6 @@ typedef struct _stream_context u32 timeScale; GF_List *AUs; - u64 dump_time_offset; /*last stream AU time, when playing the context directly*/ u64 last_au_time; /*set if stream is part of root OD (playback only)*/ @@ -95,6 +94,9 @@ typedef struct _stream_context char *dec_cfg; u32 dec_cfg_len; + /*time offset when exporting (dumping), max AU time created when importing*/ + u64 imp_exp_time; + u16 aggregate_on_esid; u32 carousel_period; Bool disable_aggregation; diff --git a/include/gpac/setup.h b/include/gpac/setup.h index 89b0ef9..3fbe32d 100644 --- a/include/gpac/setup.h +++ b/include/gpac/setup.h @@ -372,7 +372,12 @@ void gf_memory_print(void); /*prints the state of current allocations*/ #define LLU "%llu" #define LLX "%llx" #define LLXPAD( pad ) "%" pad "llx" + +#ifdef __LP64__ /* Mac OS 64 bits */ +#define PTR_TO_U_CAST (u64) +#else #define PTR_TO_U_CAST (u32) +#endif #elif defined(_LP64) /*Unix 64 bits*/ diff --git a/include/gpac/terminal.h b/include/gpac/terminal.h index f93c88d..cfd5c0b 100644 --- a/include/gpac/terminal.h +++ b/include/gpac/terminal.h @@ -96,6 +96,9 @@ u32 gf_term_get_option(GF_Terminal *term, u32 opt_type); if use_parent_url is set, relative URLs are solved against the current presentation URL*/ Bool gf_term_is_supported_url(GF_Terminal *term, const char *fileName, Bool use_parent_url, Bool no_mime_check); +/*returns the current service ID for MPEG-2 TS mux - returns 0 if no service ID is associated (or not loaded yet)*/ +u32 gf_term_get_current_service_id(GF_Terminal *term); + /*sets simulation frame rate*/ GF_Err gf_term_set_simulation_frame_rate(GF_Terminal * term, Double frame_rate); /*gets simulation frame rate*/ @@ -180,6 +183,11 @@ GF_Err gf_term_get_screen_buffer(GF_Terminal *term, GF_VideoSurface *framebuffer /*releases screen buffer and unlocks graph*/ GF_Err gf_term_release_screen_buffer(GF_Terminal *term, GF_VideoSurface *framebuffer); +/*gets view buffer - this locks the scene graph too until released is called +view_idx ranges from 0 to GF_OPT_NUM_STEREO_VIEWS value +the buffer is released by calling gf_term_release_screen_buffer*/ +GF_Err gf_term_get_offscreen_buffer(GF_Terminal *term, GF_VideoSurface *framebuffer, u32 view_idx, u32 depth_buffer_type); + /*ObjectManager used by both terminal and object browser (term_info.h)*/ typedef struct _od_manager GF_ObjectManager; diff --git a/include/gpac/tools.h b/include/gpac/tools.h index 9236fbc..abc0f09 100644 --- a/include/gpac/tools.h +++ b/include/gpac/tools.h @@ -71,6 +71,14 @@ extern "C" { */ #define GPAC_VERSION_INT 0x00000406 +/*! + * \brief Stringizer + * \hideinitializer + * + * Macro transforming its input name into a string +*/ +#define gf_stringizer(x) #x + /*! * \brief Memory allocation * \hideinitializer @@ -288,6 +296,15 @@ enum */ void gf_log_set_level(u32 level); +/*! + * \brief Log exits at first error assignment + * + * When GF_LOG_ERROR happens, program leaves with instruction exit(1); + * \param strict strict behaviour when encoutering a serious error. + * + */ +void gf_log_set_strict_error(Bool strict); + /*! * GPAC Log tools @@ -340,8 +357,9 @@ enum /*! generic Log for modules*/ GF_LOG_MODULE = 1<<20, /*! log for threads and mutexes */ - GF_LOG_MUTEX = 1<<21 - + GF_LOG_MUTEX = 1<<21, + /*! All logs*/ + GF_LOG_ALL = (1<<22)-1 }; /*! diff --git a/include/gpac/user.h b/include/gpac/user.h index 4f4dd76..4357231 100644 --- a/include/gpac/user.h +++ b/include/gpac/user.h @@ -37,7 +37,7 @@ extern "C" { /*GPAC client terminal*/ typedef struct _tag_terminal GF_Terminal; - +typedef struct _tag_user GF_User; enum @@ -77,7 +77,7 @@ enum }; /*user object for all callbacks*/ -typedef struct +struct _tag_user { /*user defined callback for all functions - cannot be NULL*/ void *opaque; @@ -98,7 +98,7 @@ typedef struct /*init flags bypassing GPAC config file */ u32 init_flags; -} GF_User; +}; #ifdef __cplusplus diff --git a/include/win32/stdint.h b/include/win32/stdint.h index fa4054e..5202006 100644 --- a/include/win32/stdint.h +++ b/include/win32/stdint.h @@ -1,17 +1,17 @@ - -#ifndef _STDINT_H -#define _STDINT_H - - -typedef signed char int8_t; -typedef signed short int16_t; -typedef signed int int32_t; -typedef unsigned char uint8_t; -typedef unsigned short uint16_t; -typedef unsigned int uint32_t; -typedef signed __int64 int64_t; -typedef unsigned __int64 uint64_t; - - - -#endif /* _STDINT_H */ + +#ifndef _STDINT_H +#define _STDINT_H + + +typedef signed char int8_t; +typedef signed short int16_t; +typedef signed int int32_t; +typedef unsigned char uint8_t; +typedef unsigned short uint16_t; +typedef unsigned int uint32_t; +typedef signed __int64 int64_t; +typedef unsigned __int64 uint64_t; + + + +#endif /* _STDINT_H */ diff --git a/include/wince/errno.h b/include/wince/errno.h index 6878115..f021af7 100644 --- a/include/wince/errno.h +++ b/include/wince/errno.h @@ -1,104 +1,104 @@ -#ifdef _WIN32_WCE - -/*** -*errno.h - system wide error numbers (set by system calls) -* -* Copyright (c) Microsoft Corporation. All rights reserved. -* -*Purpose: -* This file defines the system-wide error numbers (set by -* system calls). Conforms to the XENIX standard. Extended -* for compatibility with Uniforum standard. -* [System V] -* -* [Public] -* -****/ - -#if _MSC_VER > 1000 -#pragma once -#endif - -#ifndef _INC_ERRNO -#define _INC_ERRNO - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/* declare reference to errno */ - -#ifndef _CRT_ERRNO_DEFINED -#define _CRT_ERRNO_DEFINED -_CRTIMP extern int * __cdecl _errno(void); -#define errno (*_errno()) - -errno_t __cdecl _set_errno(__in int _Value); -errno_t __cdecl _get_errno(__out int * _Value); -#endif - -/* Error Codes */ - -#define EPERM 1 -#define ENOENT 2 -#define ESRCH 3 -#define EINTR 4 -#define EIO 5 -#define ENXIO 6 -#define E2BIG 7 -#define ENOEXEC 8 -#define EBADF 9 -#define ECHILD 10 -#define EAGAIN 11 -#define ENOMEM 12 -#define EACCES 13 -#define EFAULT 14 -#define EBUSY 16 -#define EEXIST 17 -#define EXDEV 18 -#define ENODEV 19 -#define ENOTDIR 20 -#define EISDIR 21 -#define ENFILE 23 -#define EMFILE 24 -#define ENOTTY 25 -#define EFBIG 27 -#define ENOSPC 28 -#define ESPIPE 29 -#define EROFS 30 -#define EMLINK 31 -#define EPIPE 32 -#define EDOM 33 -#define EDEADLK 36 -#define ENAMETOOLONG 38 -#define ENOLCK 39 -#define ENOSYS 40 -#define ENOTEMPTY 41 - -/* Error codes used in the Secure CRT functions */ - -#ifndef RC_INVOKED -#if !defined(_SECURECRT_ERRCODE_VALUES_DEFINED) -#define _SECURECRT_ERRCODE_VALUES_DEFINED -#define EINVAL 22 -#define ERANGE 34 -#define EILSEQ 42 -#define STRUNCATE 80 -#endif -#endif - - -/* - * Support EDEADLOCK for compatibiity with older MS-C versions. - */ -#define EDEADLOCK EDEADLK - -#ifdef __cplusplus -} -#endif - -#endif /* _INC_ERRNO */ - +#ifdef _WIN32_WCE + +/*** +*errno.h - system wide error numbers (set by system calls) +* +* Copyright (c) Microsoft Corporation. All rights reserved. +* +*Purpose: +* This file defines the system-wide error numbers (set by +* system calls). Conforms to the XENIX standard. Extended +* for compatibility with Uniforum standard. +* [System V] +* +* [Public] +* +****/ + +#if _MSC_VER > 1000 +#pragma once +#endif + +#ifndef _INC_ERRNO +#define _INC_ERRNO + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* declare reference to errno */ + +#ifndef _CRT_ERRNO_DEFINED +#define _CRT_ERRNO_DEFINED +_CRTIMP extern int * __cdecl _errno(void); +#define errno (*_errno()) + +errno_t __cdecl _set_errno(__in int _Value); +errno_t __cdecl _get_errno(__out int * _Value); +#endif + +/* Error Codes */ + +#define EPERM 1 +#define ENOENT 2 +#define ESRCH 3 +#define EINTR 4 +#define EIO 5 +#define ENXIO 6 +#define E2BIG 7 +#define ENOEXEC 8 +#define EBADF 9 +#define ECHILD 10 +#define EAGAIN 11 +#define ENOMEM 12 +#define EACCES 13 +#define EFAULT 14 +#define EBUSY 16 +#define EEXIST 17 +#define EXDEV 18 +#define ENODEV 19 +#define ENOTDIR 20 +#define EISDIR 21 +#define ENFILE 23 +#define EMFILE 24 +#define ENOTTY 25 +#define EFBIG 27 +#define ENOSPC 28 +#define ESPIPE 29 +#define EROFS 30 +#define EMLINK 31 +#define EPIPE 32 +#define EDOM 33 +#define EDEADLK 36 +#define ENAMETOOLONG 38 +#define ENOLCK 39 +#define ENOSYS 40 +#define ENOTEMPTY 41 + +/* Error codes used in the Secure CRT functions */ + +#ifndef RC_INVOKED +#if !defined(_SECURECRT_ERRCODE_VALUES_DEFINED) +#define _SECURECRT_ERRCODE_VALUES_DEFINED +#define EINVAL 22 +#define ERANGE 34 +#define EILSEQ 42 +#define STRUNCATE 80 +#endif +#endif + + +/* + * Support EDEADLOCK for compatibiity with older MS-C versions. + */ +#define EDEADLOCK EDEADLK + +#ifdef __cplusplus +} +#endif + +#endif /* _INC_ERRNO */ + #endif //_WIN32_WCE \ No newline at end of file diff --git a/mkdmg.sh b/mkdmg.sh index a4a3ce8..89f83c6 100755 --- a/mkdmg.sh +++ b/mkdmg.sh @@ -97,5 +97,7 @@ hdiutil flatten gpac_sla.dmg hdiutil internet-enable -yes gpac_sla.dmg echo "GPAC-$full_version.dmg ready" +chmod o+rx gpac_sla.dmg +chmod g+rx gpac_sla.dmg mv gpac_sla.dmg GPAC-$full_version.dmg diff --git a/modules/Makefile b/modules/Makefile index 2838b4e..863654b 100644 --- a/modules/Makefile +++ b/modules/Makefile @@ -64,6 +64,10 @@ ifeq ($(CONFIG_X11),yes) PLUGDIRS+=x11_out endif +ifeq ($(CONFIG_DIRECTFB),yes) +PLUGDIRS+=directfb_out +endif + ifeq ($(CONFIG_JS),no) else PLUGDIRS+=gpac_js diff --git a/modules/aac_in/Makefile b/modules/aac_in/Makefile index 27eb47b..980c110 100644 --- a/modules/aac_in/Makefile +++ b/modules/aac_in/Makefile @@ -44,7 +44,7 @@ all: $(LIB) $(LIB): $(OBJS) $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/$@ $(OBJS) -L../../bin/gcc -lgpac $(EXTRALIBS) ifeq ($(STATICBUILD),yes) - $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/gm_aac_in-static.so $(OBJS) -L../../bin/gcc -lgpac_static $(EXTRALIBS) + $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/gm_aac_in-static.$(DYN_LIB_SUFFIX) $(OBJS) -L../../bin/gcc -lgpac_static $(EXTRALIBS) endif diff --git a/modules/aac_in/aac_in.c b/modules/aac_in/aac_in.c index 5b41a88..c051c75 100644 --- a/modules/aac_in/aac_in.c +++ b/modules/aac_in/aac_in.c @@ -21,7 +21,6 @@ * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. * */ - #ifndef DONT_USE_TERMINAL_MODULE_API #include #endif @@ -31,12 +30,15 @@ #include #include +#include + #ifndef GPAC_DISABLE_AV_PARSERS typedef struct { #ifndef DONT_USE_TERMINAL_MODULE_API GF_ClientService *service; + GF_InputService *input; LPNETCHANNEL ch; #endif @@ -70,6 +72,9 @@ typedef struct char *icy_name; char *icy_genre; char *icy_track_name; + + Bool hybrid_on; + u64 prev_map_time; } AACReader; typedef struct @@ -80,7 +85,7 @@ typedef struct #ifndef DONT_USE_TERMINAL_MODULE_API -static const char * AAC_MIMES[] = { "audio/x-m4a", "audio/aac", "audio/aacp", 0 }; +static const char * AAC_MIMES[] = { "audio/x-m4a", "audio/aac", "audio/aacp", "audio/x-aac", 0 }; static const char * AAC_EXTENSIONS = "aac mp4a"; @@ -164,7 +169,8 @@ static void AAC_SetupObject(AACReader *read) { GF_ESD *esd; GF_ObjectDescriptor *od = (GF_ObjectDescriptor *) gf_odf_desc_new(GF_ODF_OD_TAG); - od->objectDescriptorID = 1; + od->objectDescriptorID = 0; + od->service_ifce = read->input; esd = AAC_GetESD(read); esd->OCRESID = 0; gf_list_add(od->ESDescriptors, esd); @@ -334,6 +340,41 @@ static void AAC_OnLiveData(AACReader *read, const char *data, u32 data_size) SampleCallBack(audio_prog, AUDIO_DATA_ESID, read->data + pos, hdr.frame_size, read->sl_hdr.compositionTimeStamp); #endif gf_bs_skip_bytes(bs, hdr.frame_size); + +#ifndef DONT_USE_TERMINAL_MODULE_API +#ifndef _WIN32_WCE + /* For Hybrid scenarios*/ + if (read->hybrid_on && (!read->prev_map_time || (read->sl_hdr.compositionTimeStamp - read->prev_map_time) > read->sample_rate*5)) { + Double hybrid_delay = 0.0; + time_t now; + struct tm *now_tm; + const char *opt; + + opt = gf_modules_get_option((GF_BaseInterface *)read->input, "HybRadio", "AudioDelay"); + if (opt) { + hybrid_delay = atof(opt); + } + time(&now); + now += (s32)hybrid_delay; + now_tm = gmtime(&now); + { + GF_NetworkCommand com; + memset(&com, 0, sizeof(com)); + com.command_type = GF_NET_CHAN_MAP_TIME; + com.map_time.media_time = now_tm->tm_hour*3600+now_tm->tm_min*60+now_tm->tm_sec + hybrid_delay; + com.map_time.timestamp = read->sl_hdr.compositionTimeStamp; + com.map_time.reset_buffers = 0; + com.base.on_channel = read->ch; + gf_term_on_command(read->service, &com, GF_OK); + GF_LOG(GF_LOG_INFO, GF_LOG_MEDIA, ("[AAC In] Mapping WC Time %04d/%02d/%02d %02d:%02d:%02d and AAC time "LLD" (audio delay %f)\n", + (now_tm->tm_year + 1900), (now_tm->tm_mon + 1), now_tm->tm_mday, now_tm->tm_hour, now_tm->tm_min, now_tm->tm_sec, + com.map_time.timestamp, hybrid_delay)); + + } + read->prev_map_time = read->sl_hdr.compositionTimeStamp; + } +#endif +#endif } pos = (u32) gf_bs_get_position(bs); @@ -532,9 +573,9 @@ static void AAC_Reader_del(AACReader * read) } static AACReader * AAC_Reader_new(){ - AACReader *reader = gf_malloc(sizeof(AACReader)); - memset(reader, 0, sizeof(AACReader)); - return reader; + AACReader *reader = gf_malloc(sizeof(AACReader)); + memset(reader, 0, sizeof(AACReader)); + return reader; } @@ -550,9 +591,16 @@ static GF_Err AAC_ConnectService(GF_InputService *plug, GF_ClientService *serv, { char szURL[2048]; char *ext; + const char *opt; GF_Err reply; AACReader *read = plug->priv; - read->service = serv; + read->service = serv; + read->input = plug; + + opt = gf_modules_get_option((GF_BaseInterface *)read->input, "HybRadio", "Activated"); + if (opt && !strcmp(opt, "true")) { + read->hybrid_on = 1; + } AAC_disconnect_from_http_and_free(read); @@ -770,6 +818,19 @@ fetch_next: if (!sync) { gf_bs_del(bs); if (!read->dnload) { + if (read->input->query_proxy) { + GF_NetworkCommand param; + param.command_type = GF_NET_SERVICE_QUERY_NEXT; + if ((read->input->query_proxy(read->input, ¶m)==GF_OK) + && param.url_query.next_url + ) { + fclose(read->stream); + read->stream = gf_f64_open(param.url_query.next_url, "rb"); + *out_reception_status = GF_OK; + return GF_OK; + } + } + *out_reception_status = GF_EOS; read->done = 1; } else { diff --git a/modules/aac_in/faad_dec.c b/modules/aac_in/faad_dec.c index 2c5621d..b7a1999 100644 --- a/modules/aac_in/faad_dec.c +++ b/modules/aac_in/faad_dec.c @@ -50,7 +50,6 @@ typedef struct static GF_Err FAAD_AttachStream(GF_BaseDecoder *ifcg, GF_ESD *esd) { - s8 Test; #ifndef GPAC_DISABLE_AV_PARSERS GF_Err e; GF_M4ADecSpecInfo a_cfg; @@ -73,26 +72,35 @@ static GF_Err FAAD_AttachStream(GF_BaseDecoder *ifcg, GF_ESD *esd) e = gf_m4a_get_config((unsigned char *) esd->decoderConfig->decoderSpecificInfo->data, esd->decoderConfig->decoderSpecificInfo->dataLength, &a_cfg); if (e) return e; #endif - GF_LOG(GF_LOG_DEBUG, GF_LOG_CODEC, ("ctx->sample_rate:%d ctx->num_channels:%d esd->decoderConfig->decoderSpecificInfo->dataLength:%d esd->decoderConfig->decoderSpecificInfo->data:%s \n",ctx->sample_rate,ctx->num_channels,esd->decoderConfig->decoderSpecificInfo->dataLength,esd->decoderConfig->decoderSpecificInfo->data)); - Test = (s8) faacDecInit2(ctx->codec, (unsigned char *) esd->decoderConfig->decoderSpecificInfo->data, esd->decoderConfig->decoderSpecificInfo->dataLength, (unsigned long *) &ctx->sample_rate, (u8 *) &ctx->num_channels); - GF_LOG(GF_LOG_DEBUG, GF_LOG_CODEC, ("Test: %d \n",Test)); - if ( Test < 0) + if (faacDecInit2(ctx->codec, (unsigned char *)esd->decoderConfig->decoderSpecificInfo->data, esd->decoderConfig->decoderSpecificInfo->dataLength, (unsigned long*)&ctx->sample_rate, (u8*)&ctx->num_channels) < 0) { #ifndef GPAC_DISABLE_AV_PARSERS s8 res; - char *dsi; + char *dsi, *s_base_object_type; u32 dsi_len; switch (a_cfg.base_object_type) { - case GF_M4A_AAC_MAIN: - case GF_M4A_AAC_LC: - case GF_M4A_AAC_SSR: - case GF_M4A_AAC_LTP: - case GF_M4A_AAC_SBR: - case GF_M4A_AAC_PS: - GF_LOG(GF_LOG_ERROR, GF_LOG_CODEC, ("[FAAD] 1 Error initializing stream %d\n", esd->ESID)); - return GF_NOT_SUPPORTED; - default: - break; + case GF_M4A_AAC_MAIN: + s_base_object_type = gf_stringizer(GF_M4A_AAC_MAIN); + goto base_object_type_error; + case GF_M4A_AAC_LC: + s_base_object_type = gf_stringizer(GF_M4A_AAC_LC); + goto base_object_type_error; + case GF_M4A_AAC_SSR: + s_base_object_type = gf_stringizer(GF_M4A_AAC_SSR); + goto base_object_type_error; + case GF_M4A_AAC_LTP: + s_base_object_type = gf_stringizer(GF_M4A_AAC_LTP); + goto base_object_type_error; + case GF_M4A_AAC_SBR: + s_base_object_type = gf_stringizer(GF_M4A_AAC_SBR); + goto base_object_type_error; + case GF_M4A_AAC_PS: + s_base_object_type = gf_stringizer(GF_M4A_AAC_PS); + base_object_type_error: /*error case*/ + GF_LOG(GF_LOG_ERROR, GF_LOG_CODEC, ("[FAAD] Error: unsupported %s format for stream %d\n", s_base_object_type, esd->ESID)); + return GF_NOT_SUPPORTED; + default: + break; } a_cfg.base_object_type = GF_M4A_AAC_LC; a_cfg.has_sbr = 0; @@ -104,7 +112,7 @@ static GF_Err FAAD_AttachStream(GF_BaseDecoder *ifcg, GF_ESD *esd) if (res < 0) #endif { - GF_LOG(GF_LOG_ERROR, GF_LOG_CODEC, ("[FAAD] 2 Error initializing stream %d\n", esd->ESID)); + GF_LOG(GF_LOG_ERROR, GF_LOG_CODEC, ("[FAAD] Error when initializing AAC decoder for stream %d\n", esd->ESID)); return GF_NOT_SUPPORTED; } } @@ -319,15 +327,16 @@ static const char *FAAD_GetCodecName(GF_BaseDecoder *ifcg) return "FAAD2 " FAAD2_VERSION; } -static Bool FAAD_CanHandleStream(GF_BaseDecoder *dec, u32 StreamType, GF_ESD *esd, u8 PL) +static u32 FAAD_CanHandleStream(GF_BaseDecoder *dec, u32 StreamType, GF_ESD *esd, u8 PL) { #ifndef GPAC_DISABLE_AV_PARSERS GF_M4ADecSpecInfo a_cfg; #endif + /*audio decs*/ - if (StreamType != GF_STREAM_AUDIO) return 0; + if (StreamType != GF_STREAM_AUDIO) return GF_CODEC_NOT_SUPPORTED; /*media type query*/ - if (!esd) return 1; + if (!esd) return GF_CODEC_STREAM_TYPE_SUPPORTED; switch (esd->decoderConfig->objectTypeIndication) { /*MPEG2 aac*/ @@ -338,16 +347,32 @@ static Bool FAAD_CanHandleStream(GF_BaseDecoder *dec, u32 StreamType, GF_ESD *es case GPAC_OTI_AUDIO_AAC_MPEG4: break; default: - return 0; + return GF_CODEC_NOT_SUPPORTED; } - if (!esd->decoderConfig->decoderSpecificInfo || !esd->decoderConfig->decoderSpecificInfo->data) return 0; + /*this codec currently requires AAC config in ESD*/ + if (!esd->decoderConfig->decoderSpecificInfo || !esd->decoderConfig->decoderSpecificInfo->data) return GF_CODEC_NOT_SUPPORTED; #ifndef GPAC_DISABLE_AV_PARSERS - if (gf_m4a_get_config((unsigned char *) esd->decoderConfig->decoderSpecificInfo->data, esd->decoderConfig->decoderSpecificInfo->dataLength, &a_cfg) != GF_OK) return 0; - /*BSAC not supported*/ - if (a_cfg.base_object_type == GF_M4A_ER_BSAC) return 0; + if (gf_m4a_get_config((unsigned char *) esd->decoderConfig->decoderSpecificInfo->data, esd->decoderConfig->decoderSpecificInfo->dataLength, &a_cfg) != GF_OK) return GF_CODEC_NOT_SUPPORTED; + + switch (a_cfg.base_object_type) { + case GF_M4A_AAC_MAIN: + case GF_M4A_AAC_LC: + case GF_M4A_AAC_SSR: + case GF_M4A_AAC_LTP: + case GF_M4A_AAC_SBR: + return GF_CODEC_SUPPORTED; + case GF_M4A_ER_AAC_LC: + case GF_M4A_ER_AAC_LTP: + case GF_M4A_ER_AAC_SCALABLE: + case GF_M4A_ER_AAC_LD: + case GF_M4A_AAC_PS: + return GF_CODEC_MAYBE_SUPPORTED; + default: + return GF_CODEC_NOT_SUPPORTED; + } #endif - return 1; + return GF_CODEC_SUPPORTED; } GF_BaseDecoder *NewFAADDec() diff --git a/modules/ac3_in/liba52_dec.c b/modules/ac3_in/liba52_dec.c index 2ed4f27..265f088 100644 --- a/modules/ac3_in/liba52_dec.c +++ b/modules/ac3_in/liba52_dec.c @@ -293,17 +293,17 @@ static const char *AC3_GetCodecName(GF_BaseDecoder *ifcg) return "LIBA52 AC3 Decoder"; } -static Bool AC3_CanHandleStream(GF_BaseDecoder *dec, u32 StreamType, GF_ESD *esd, u8 PL) +static u32 AC3_CanHandleStream(GF_BaseDecoder *dec, u32 StreamType, GF_ESD *esd, u8 PL) { /*audio decs*/ - if (StreamType != GF_STREAM_AUDIO) return 0; + if (StreamType != GF_STREAM_AUDIO) return GF_CODEC_NOT_SUPPORTED; /*media type query*/ - if (!esd) return 1; + if (!esd) return GF_CODEC_STREAM_TYPE_SUPPORTED; switch (esd->decoderConfig->objectTypeIndication) { case 0xA5: - return 1; + return GF_CODEC_SUPPORTED; } - return 0; + return GF_CODEC_NOT_SUPPORTED; } GF_BaseDecoder *NewAC3Dec() diff --git a/modules/amr_dec/amr_dec.c b/modules/amr_dec/amr_dec.c index 2477a8f..6c1a755 100644 --- a/modules/amr_dec/amr_dec.c +++ b/modules/amr_dec/amr_dec.c @@ -241,17 +241,17 @@ static u32 AMR_CanHandleStream(GF_BaseDecoder *dec, u32 StreamType, GF_ESD *esd, { char *dsi; /*we handle audio only*/ - if (StreamType!=GF_STREAM_AUDIO) return 0; + if (StreamType!=GF_STREAM_AUDIO) return GF_CODEC_NOT_SUPPORTED; /*media type query*/ - if (!esd) return 1; + if (!esd) return GF_CODEC_STREAM_TYPE_SUPPORTED; - if (esd->decoderConfig->objectTypeIndication != GPAC_OTI_MEDIA_GENERIC) return 0; + if (esd->decoderConfig->objectTypeIndication != GPAC_OTI_MEDIA_GENERIC) return GF_CODEC_NOT_SUPPORTED; dsi = esd->decoderConfig->decoderSpecificInfo ? esd->decoderConfig->decoderSpecificInfo->data : NULL; - if (!dsi) return 0; - if (esd->decoderConfig->decoderSpecificInfo->dataLength < 4) return 0; + if (!dsi) return GF_CODEC_NOT_SUPPORTED; + if (esd->decoderConfig->decoderSpecificInfo->dataLength < 4) return GF_CODEC_NOT_SUPPORTED; - if (!strnicmp(dsi, "samr", 4) || !strnicmp(dsi, "amr ", 4)) return 1; - return 0; + if (!strnicmp(dsi, "samr", 4) || !strnicmp(dsi, "amr ", 4)) return GF_CODEC_SUPPORTED; + return GF_CODEC_NOT_SUPPORTED; } diff --git a/modules/amr_float_dec/amr_float_dec.c b/modules/amr_float_dec/amr_float_dec.c index fb20c7b..c4d45b3 100644 --- a/modules/amr_float_dec/amr_float_dec.c +++ b/modules/amr_float_dec/amr_float_dec.c @@ -252,22 +252,22 @@ static u32 AMR_CanHandleStream(GF_BaseDecoder *dec, u32 StreamType, GF_ESD *esd, { char *dsi; /*we handle audio only*/ - if (StreamType!=GF_STREAM_AUDIO) return 0; + if (StreamType!=GF_STREAM_AUDIO) return GF_CODEC_NOT_SUPPORTED; /*media type query*/ - if (!esd) return 1; + if (!esd) return GF_CODEC_STREAM_TYPE_SUPPORTED; - if (esd->decoderConfig->objectTypeIndication != GPAC_OTI_MEDIA_GENERIC) return 0; + if (esd->decoderConfig->objectTypeIndication != GPAC_OTI_MEDIA_GENERIC) return GF_CODEC_NOT_SUPPORTED; dsi = esd->decoderConfig->decoderSpecificInfo ? esd->decoderConfig->decoderSpecificInfo->data : NULL; - if (!dsi) return 0; - if (esd->decoderConfig->decoderSpecificInfo->dataLength < 4) return 0; + if (!dsi) return GF_CODEC_NOT_SUPPORTED; + if (esd->decoderConfig->decoderSpecificInfo->dataLength < 4) return GF_CODEC_NOT_SUPPORTED; #ifdef GPAC_HAS_AMR_FT - if (!strnicmp(dsi, "samr", 4) || !strnicmp(dsi, "amr ", 4)) return 1; + if (!strnicmp(dsi, "samr", 4) || !strnicmp(dsi, "amr ", 4)) return GF_CODEC_SUPPORTED; #endif #ifdef GPAC_HAS_AMR_FT_WB - if (!strnicmp(dsi, "sawb", 4)) return 1; + if (!strnicmp(dsi, "sawb", 4)) return GF_CODEC_SUPPORTED; #endif - return 0; + return GF_CODEC_NOT_SUPPORTED; } diff --git a/modules/bifs_dec/Makefile b/modules/bifs_dec/Makefile index 9600afe..516bd85 100644 --- a/modules/bifs_dec/Makefile +++ b/modules/bifs_dec/Makefile @@ -31,7 +31,7 @@ all: $(LIB) $(LIB): $(OBJS) $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/$@ $(OBJS) $(EXTRALIBS) -L../../bin/gcc -lgpac ifeq ($(STATICBUILD),yes) - $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/gm_bifs_dec-static.so $(OBJS) -L../../bin/gcc -lgpac_static + $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/gm_bifs_dec-static.$(DYN_LIB_SUFFIX) $(OBJS) -L../../bin/gcc -lgpac_static endif diff --git a/modules/bifs_dec/bifs_dec.c b/modules/bifs_dec/bifs_dec.c index 819edfe..ea08deb 100644 --- a/modules/bifs_dec/bifs_dec.c +++ b/modules/bifs_dec/bifs_dec.c @@ -112,12 +112,12 @@ static GF_Err BIFS_ProcessData(GF_SceneDecoder*plug, const char *inBuffer, u32 i return e; } -Bool BIFS_CanHandleStream(GF_BaseDecoder *ifce, u32 StreamType, GF_ESD *esd, u8 PL) +static u32 BIFS_CanHandleStream(GF_BaseDecoder *ifce, u32 StreamType, GF_ESD *esd, u8 PL) { BIFSPriv *priv = (BIFSPriv *)ifce->privateStack; - if (StreamType!=GF_STREAM_SCENE) return 0; + if (StreamType!=GF_STREAM_SCENE) return GF_CODEC_NOT_SUPPORTED; /*media type query*/ - if (!esd) return 1; + if (!esd) return GF_CODEC_STREAM_TYPE_SUPPORTED; switch (esd->decoderConfig->objectTypeIndication) { case GPAC_OTI_SCENE_BIFS: @@ -126,9 +126,9 @@ Bool BIFS_CanHandleStream(GF_BaseDecoder *ifce, u32 StreamType, GF_ESD *esd, u8 shall be treated as if the ObjectTypeIndication had been set to 0x01*/ case 0xFF: priv->PL = PL; - return 1; + return GF_CODEC_SUPPORTED; default: - return 0; + return GF_CODEC_NOT_SUPPORTED; } } diff --git a/modules/ctx_load/Makefile b/modules/ctx_load/Makefile index 654d00f..ac62a0b 100644 --- a/modules/ctx_load/Makefile +++ b/modules/ctx_load/Makefile @@ -31,7 +31,7 @@ all: $(LIB) $(LIB): $(OBJS) $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/$@ $(OBJS) $(EXTRALIBS) -L../../bin/gcc -lgpac ifeq ($(STATICBUILD),yes) - $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/gm_ctx_load-static.so $(OBJS) $(EXTRALIBS) -L../../bin/gcc -lgpac_static + $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/gm_ctx_load-static.$(DYN_LIB_SUFFIX) $(OBJS) $(EXTRALIBS) -L../../bin/gcc -lgpac_static endif diff --git a/modules/ctx_load/ctx_load.c b/modules/ctx_load/ctx_load.c index 40352ca..0a273e8 100644 --- a/modules/ctx_load/ctx_load.c +++ b/modules/ctx_load/ctx_load.c @@ -692,25 +692,37 @@ const char *CTXLoad_GetName(struct _basedecoder *plug) } } -Bool CTXLoad_CanHandleStream(GF_BaseDecoder *ifce, u32 StreamType, GF_ESD *esd, u8 PL) +static u32 CTXLoad_CanHandleStream(GF_BaseDecoder *ifce, u32 StreamType, GF_ESD *esd, u8 PL) { if (StreamType==GF_STREAM_PRIVATE_SCENE) { /*media type query*/ - if (!esd) return 1; + if (!esd) return GF_CODEC_STREAM_TYPE_SUPPORTED; switch (esd->decoderConfig->objectTypeIndication) { case GPAC_OTI_PRIVATE_SCENE_GENERIC: - return 1; + return GF_CODEC_SUPPORTED; /*LASeR ML: we use this plugin since it has command handling*/ case GPAC_OTI_PRIVATE_SCENE_LASER: - return 1; + return GF_CODEC_SUPPORTED; /* XBL */ case GPAC_OTI_PRIVATE_SCENE_XBL: - return 1; + return GF_CODEC_SUPPORTED; + /*SVG*/ + case GPAC_OTI_PRIVATE_SCENE_SVG: + return GF_CODEC_MAYBE_SUPPORTED; + } + } else if (StreamType==GF_STREAM_SCENE) { + /*media type query*/ + if (!esd) return GF_CODEC_STREAM_TYPE_SUPPORTED; + switch (esd->decoderConfig->objectTypeIndication) { + case GPAC_OTI_SCENE_SVG: + case GPAC_OTI_SCENE_SVG_GZ: + case GPAC_OTI_SCENE_DIMS: + return GF_CODEC_MAYBE_SUPPORTED; + default: + break; } } - /*SVG*/ - //if ((StreamType==GF_STREAM_PRIVATE_SCENE) && (ObjectType==2)) return 1; - return 0; + return GF_CODEC_NOT_SUPPORTED; } void DeleteContextLoader(GF_BaseDecoder *plug) diff --git a/modules/directfb_out/Makefile b/modules/directfb_out/Makefile index 3650a7d..dff6a44 100644 --- a/modules/directfb_out/Makefile +++ b/modules/directfb_out/Makefile @@ -4,7 +4,7 @@ vpath %.c $(SRC_PATH)/modules/directfb_out CFLAGS= $(OPTFLAGS) CFLAGS+=-I"$(SRC_PATH)/include" -I$(DIRECTFB_INC_PATH) -LDFLAGS+=-ldirectfb -lfusion -ldirect +LDFLAGS+=$(DIRECTFB_LIB) ifeq ($(DEBUGBUILD), yes) CFLAGS+=-g diff --git a/modules/directfb_out/directfb_out.c b/modules/directfb_out/directfb_out.c index d36d2c8..a751bd7 100755 --- a/modules/directfb_out/directfb_out.c +++ b/modules/directfb_out/directfb_out.c @@ -15,9 +15,6 @@ u32 DirectFBVid_TranslatePixelFormatToGPAC(u32 dfbpf) case DSPF_RGB24: return GF_PIXEL_RGB_24; case DSPF_RGB32: return GF_PIXEL_RGB_32; case DSPF_ARGB: return GF_PIXEL_ARGB; -// case DSPF_YUY2: return GF_PIXEL_YUY2; -// case DSPF_YV12: return GF_PIXEL_YV12; -// case DSPF_I420: return GF_PIXEL_YV12; default: return 0; } } @@ -32,10 +29,9 @@ u32 DirectFBVid_TranslatePixelFormatFromGPAC(u32 gpacpf) case GF_PIXEL_RGB_32 : return DSPF_RGB32; case GF_PIXEL_ARGB: return DSPF_ARGB; case GF_PIXEL_RGBA: return DSPF_ARGB; - case GF_PIXEL_BGRA: return DSPF_ARGB; case GF_PIXEL_YUY2 : return DSPF_YUY2; case GF_PIXEL_YV12 : return DSPF_YV12; - default: + default: GF_LOG(GF_LOG_ERROR, GF_LOG_MMIO, ("[DirectFB] pixel format %s not supported\n", gf_4cc_to_str(gpacpf))); return 0; } @@ -62,10 +58,10 @@ static void directfb_translate_key(DFBInputDeviceKeySymbol DirectFBkey, GF_Event evt->flags = 0; evt->hw_code = DirectFBkey; switch (DirectFBkey){ - case DIKS_BACKSPACE: - evt->key_code = GF_KEY_BACKSPACE; break; - case DIKS_RETURN: - evt->key_code = GF_KEY_ENTER; break; + case DIKS_BACKSPACE: + evt->key_code = GF_KEY_BACKSPACE; break; + case DIKS_RETURN: + evt->key_code = GF_KEY_ENTER; break; case DIKS_CANCEL: evt->key_code = GF_KEY_CANCEL; break; case DIKS_ESCAPE: @@ -224,7 +220,7 @@ static void directfb_translate_key(DFBInputDeviceKeySymbol DirectFBkey, GF_Event case DIKS_INSERT: evt->key_code = GF_KEY_INSERT; break; case DIKS_HOME: - evt->key_code = GF_KEY_HOME; break; + evt->key_code = GF_KEY_HOME; break; case DIKS_END: evt->key_code = GF_KEY_END; break; case DIKS_PAGE_UP: @@ -251,51 +247,51 @@ static void directfb_translate_key(DFBInputDeviceKeySymbol DirectFBkey, GF_Event case DIKS_PAUSE: evt->key_code = GF_KEY_MEDIAPLAYPAUSE; break; case DIKS_PLAY: - evt->key_code = GF_KEY_PLAY; break; + evt->key_code = GF_KEY_PLAY; break; case DIKS_STOP: - evt->key_code = GF_KEY_MEDIASTOP; break; + evt->key_code = GF_KEY_MEDIASTOP; break; case DIKS_PREVIOUS: evt->key_code = GF_KEY_MEDIAPREVIOUSTRACK; break; case DIKS_F1: - evt->key_code = GF_KEY_F1; break; + evt->key_code = GF_KEY_F1; break; case DIKS_F2: - evt->key_code = GF_KEY_F2; break; + evt->key_code = GF_KEY_F2; break; case DIKS_F3: - evt->key_code = GF_KEY_F3; break; + evt->key_code = GF_KEY_F3; break; case DIKS_F4: - evt->key_code = GF_KEY_F4; break; + evt->key_code = GF_KEY_F4; break; case DIKS_F5: - evt->key_code = GF_KEY_F5; break; + evt->key_code = GF_KEY_F5; break; case DIKS_F6: - evt->key_code = GF_KEY_F6; break; + evt->key_code = GF_KEY_F6; break; case DIKS_F7: - evt->key_code = GF_KEY_F7; break; + evt->key_code = GF_KEY_F7; break; case DIKS_F8: - evt->key_code = GF_KEY_F8; break; + evt->key_code = GF_KEY_F8; break; case DIKS_F9: - evt->key_code = GF_KEY_F9; break; + evt->key_code = GF_KEY_F9; break; case DIKS_F10: - evt->key_code = GF_KEY_F10; break; + evt->key_code = GF_KEY_F10; break; case DIKS_F11: - evt->key_code = GF_KEY_F11; break; + evt->key_code = GF_KEY_F11; break; case DIKS_F12: - evt->key_code = GF_KEY_F12; break; + evt->key_code = GF_KEY_F12; break; case DIKS_SHIFT: - evt->key_code = GF_KEY_SHIFT; break; + evt->key_code = GF_KEY_SHIFT; break; case DIKS_CONTROL: - evt->key_code = GF_KEY_CONTROL; break; + evt->key_code = GF_KEY_CONTROL; break; case DIKS_ALT: - evt->key_code = GF_KEY_ALT; break; + evt->key_code = GF_KEY_ALT; break; case DIKS_ALTGR: - evt->key_code = GF_KEY_ALTGRAPH; break; + evt->key_code = GF_KEY_ALTGRAPH; break; case DIKS_META: - evt->key_code = GF_KEY_META; break; + evt->key_code = GF_KEY_META; break; case DIKS_CAPS_LOCK: - evt->key_code = GF_KEY_CAPSLOCK; break; + evt->key_code = GF_KEY_CAPSLOCK; break; case DIKS_NUM_LOCK: - evt->key_code = GF_KEY_NUMLOCK; break; + evt->key_code = GF_KEY_NUMLOCK; break; case DIKS_SCROLL_LOCK: - evt->key_code = GF_KEY_SCROLL; break; + evt->key_code = GF_KEY_SCROLL; break; case DIKS_FAVORITES: evt->key_code = GF_KEY_BROWSERFAVORITES; break; case DIKS_CUSTOM0: @@ -323,9 +319,9 @@ static void directfb_translate_key(DFBInputDeviceKeySymbol DirectFBkey, GF_Event case DIKS_REWIND: evt->key_code = GF_KEY_BROWSERBACK; break; case DIKS_FASTFORWARD: - evt->key_code = GF_KEY_BROWSERFORWARD; break; + evt->key_code = GF_KEY_BROWSERFORWARD; break; case DIKS_SUBTITLE: - evt->key_code = GF_KEY_DEL; break; + evt->key_code = GF_KEY_DEL; break; case DIKS_CHANNEL_UP: evt->key_code = GF_KEY_CHANNELUP; break; case DIKS_CHANNEL_DOWN: @@ -346,7 +342,7 @@ static void directfb_translate_key(DFBInputDeviceKeySymbol DirectFBkey, GF_Event } #if 0 -static int compare_symbol( const void *a, const void *b ) +static int compare_symbol( const void *a, const void *b ) { u32 *keycode = (u32 *) a; struct predef_keyid *idname = (struct predef_keyid *) b; @@ -363,7 +359,7 @@ static const char *get_local_key_name(u32 key_code) { } static void show_key_event(DirectFBVidCtx *ctx, GF_EventKey *evt ) -{ +{ //DirectFBVID(); char buf[16]; struct predef_keyid *predefine_keyid; @@ -389,17 +385,17 @@ static void DirectFBVid_DrawHLine(GF_VideoOutput *driv, u32 x, u32 y, u32 length { DirectFBVID(); u8 r, g, b; - + //GF_LOG(GF_LOG_DEBUG, GF_LOG_MMIO, ("[DirectFB] in DirectFBVid_DrawHLine(). Drawing line x %d y %d length %d color %08X\n", x, y, length, color)); SET_DRAWING_FLAGS( DSDRAW_NOFX ); r = GF_COL_R(color); g = GF_COL_G(color); b = GF_COL_B(color); - + ctx->primary->SetColor(ctx->primary, r, g, b, 0xFF); // no alpha //ctx->primary->DrawLine(ctx->primary, x, y, x+length, y); // no acceleration - ctx->primary->FillRectangle(ctx->primary, x, y,length, 1); + ctx->primary->FillRectangle(ctx->primary, x, y,length, 1); } @@ -410,12 +406,12 @@ static void DirectFBVid_DrawHLineAlpha(GF_VideoOutput *driv, u32 x, u32 y, u32 l //GF_LOG(GF_LOG_DEBUG, GF_LOG_MMIO, ("[DirectFB] in DirectFBVid_DrawHLineAlpha(). Alpha line drawing x %d y %d length %d color %08X alpha %d\n", x, y, length, color, alpha)); - SET_DRAWING_FLAGS( DSDRAW_BLEND ); // use alpha + SET_DRAWING_FLAGS( DSDRAW_BLEND ); // use alpha r = GF_COL_R(color); g = GF_COL_G(color); - b = GF_COL_B(color); - + b = GF_COL_B(color); + ctx->primary->SetColor(ctx->primary, r, g, b, alpha); //ctx->primary->DrawLine(ctx->primary, x, y, x+length, y); ctx->primary->FillRectangle(ctx->primary, x, y, length, 1); // with acceleration @@ -433,8 +429,8 @@ static void DirectFBVid_DrawRectangle(GF_VideoOutput *driv, u32 x, u32 y, u32 wi g = GF_COL_G(color); b = GF_COL_B(color); a = GF_COL_A(color); - - SET_DRAWING_FLAGS( DSDRAW_NOFX ); + + SET_DRAWING_FLAGS( DSDRAW_NOFX ); ctx->primary->SetColor(ctx->primary, r, g, b, a); ctx->primary->FillRectangle(ctx->primary, x, y, width, height); @@ -450,18 +446,18 @@ GF_Err DirectFBVid_Setup(GF_VideoOutput *driv, void *os_handle, void *os_display DFBSurfacePixelFormat dfbpf; DFBAccelerationMask mask; DeviceInfo *devices = NULL; - + DirectFBVID(); ctx->is_init = 0; argc=0; - DFBCHECK(DirectFBInit(&argc, & (argv) )); - + DFBCHECK(DirectFBInit(&argc, & (argv) )); + DirectFBSetOption ("bg-none", NULL); DirectFBSetOption ("no-init-layer", NULL); - + /* create the super interface */ DFBCHECK(DirectFBCreate( &(ctx->dfb) )); - + GF_LOG(GF_LOG_DEBUG, GF_LOG_MMIO, ("[DirectFB] Initialization\n")); /* create a list of input devices */ @@ -469,18 +465,18 @@ GF_Err DirectFBVid_Setup(GF_VideoOutput *driv, void *os_handle, void *os_display /* create an event buffer for all devices */ DFBCHECK(ctx->dfb->CreateInputEventBuffer(ctx->dfb, DICAPS_KEYS, DFB_FALSE, &(ctx->events) )); - + /* Set the cooperative level */ err = ctx->dfb->SetCooperativeLevel( ctx->dfb, DFSCL_FULLSCREEN ); if (err) DirectFBError( "Failed to set cooperative level", err ); - + /* Get the primary surface, i.e. the surface of the primary layer. */ dsc.flags = DSDESC_CAPS; dsc.caps = DSCAPS_PRIMARY | DSCAPS_DOUBLE; if (ctx->use_systems_memory) dsc.caps |= DSCAPS_SYSTEMONLY; - + DFBCHECK(ctx->dfb->CreateSurface( ctx->dfb, &dsc, &(ctx->primary) )); ctx->primary->GetPixelFormat( ctx->primary, &dfbpf ); @@ -510,11 +506,11 @@ GF_Err DirectFBVid_Setup(GF_VideoOutput *driv, void *os_handle, void *os_display opt = gf_modules_get_option((GF_BaseInterface *)driv, "DirectFB", "DisableBlit"); if (!opt) gf_modules_set_option((GF_BaseInterface *)driv, "DirectFB", "DisableBlit", "no"); if (opt && !strcmp(opt, "all")) { - driv->hw_caps &= ~(GF_VIDEO_HW_HAS_RGB | GF_VIDEO_HW_HAS_RGBA | GF_VIDEO_HW_HAS_YUV); + driv->hw_caps &= ~(GF_VIDEO_HW_HAS_RGB | GF_VIDEO_HW_HAS_RGBA | GF_VIDEO_HW_HAS_YUV); } - else if (opt && !strcmp(opt, "yuv")) driv->hw_caps &= ~GF_VIDEO_HW_HAS_YUV; - else if (opt && !strcmp(opt, "rgb")) driv->hw_caps &= ~GF_VIDEO_HW_HAS_RGB; - else if (opt && !strcmp(opt, "rgba")) driv->hw_caps &= ~GF_VIDEO_HW_HAS_RGBA; + else if (opt && !strcmp(opt, "yuv")) driv->hw_caps &= ~GF_VIDEO_HW_HAS_YUV; + else if (opt && !strcmp(opt, "rgb")) driv->hw_caps &= ~GF_VIDEO_HW_HAS_RGB; + else if (opt && !strcmp(opt, "rgba")) driv->hw_caps &= ~GF_VIDEO_HW_HAS_RGBA; if (!ctx->disable_acceleration){ @@ -528,26 +524,31 @@ GF_Err DirectFBVid_Setup(GF_VideoOutput *driv, void *os_handle, void *os_display GF_LOG(GF_LOG_INFO, GF_LOG_MMIO, ("[DirectFB] hardware acceleration mask %08x - Line: %d Rectangle: %d\n", mask, ctx->accel_drawline, ctx->accel_fillrect)); - driv->hw_caps |= GF_VIDEO_HW_HAS_LINE_BLIT; + driv->hw_caps |= GF_VIDEO_HW_HAS_LINE_BLIT; driv->DrawHLine = DirectFBVid_DrawHLine; driv->DrawHLineAlpha = DirectFBVid_DrawHLineAlpha; driv->DrawRectangle = DirectFBVid_DrawRectangle; } - + ctx->is_init = 1; - GF_LOG(GF_LOG_DEBUG, GF_LOG_MMIO, ("[DirectFB] Initialization success\n")); + GF_LOG(GF_LOG_DEBUG, GF_LOG_MMIO, ("[DirectFB] Initialization success - HW caps %08x\n", driv->hw_caps)); + // GF_LOG(GF_LOG_DEBUG, GF_LOG_MMIO, ("[DirectFB] Pixel format %s\n", gf_4cc_to_str(ctx->pixel_format))); - return GF_OK; + return GF_OK; } static void DirectFBVid_Shutdown(GF_VideoOutput *driv) { DirectFBVID(); if (!ctx->is_init) return; + //ctx->primary->Clear(ctx->primary,0,0,0,0); + //ctx->primary->Flip( ctx->primary, NULL, DSFLIP_NONE); + //ctx->primary->Clear(ctx->primary,0,0,0,0); ctx->primary->Release( ctx->primary ); ctx->events->Release( ctx->events ); ctx->dfb->Release( ctx->dfb ); ctx->is_init = 0; + system("stgfb_control /dev/fb0 a 0"); } static GF_Err DirectFBVid_Flush(GF_VideoOutput *driv, GF_Window *dest) @@ -565,8 +566,8 @@ static GF_Err DirectFBVid_Flush(GF_VideoOutput *driv, GF_Window *dest) GF_Err DirectFBVid_SetFullScreen(GF_VideoOutput *driv, u32 bFullScreenOn, u32 *screen_width, u32 *screen_height) { DFBResult err; - DirectFBVID(); - + DirectFBVID(); + *screen_width = ctx->width; *screen_height = ctx->height; @@ -578,8 +579,8 @@ Bool DirectFBVid_ProcessMessageQueue(DirectFBVidCtx *ctx, GF_VideoOutput *driv) { DFBInputEvent directfb_evt; GF_Event gpac_evt; - - while (ctx->events->GetEvent( ctx->events, DFB_EVENT(&directfb_evt) ) == DFB_OK) + + while (ctx->events->GetEvent( ctx->events, DFB_EVENT(&directfb_evt) ) == DFB_OK) { u32 i; switch (directfb_evt.type){ @@ -589,21 +590,21 @@ Bool DirectFBVid_ProcessMessageQueue(DirectFBVidCtx *ctx, GF_VideoOutput *driv) directfb_translate_key(directfb_evt.key_symbol, &gpac_evt.key); gpac_evt.type = (directfb_evt.type == DIET_KEYPRESS) ? GF_EVENT_KEYDOWN : GF_EVENT_KEYUP; #if 0 - fprintf(stderr, "before %d %s\n", gpac_evt.key.key_code, + fprintf(stderr, "before %d %s\n", gpac_evt.key.key_code, gf_dom_get_key_name(gpac_evt.key.key_code)); - - for (i=0;i<200; i++) { + + for (i=0;i<200; i++) { fprintf(stderr, "%03d %s\n", i, gf_dom_get_key_name(i)); } #endif driv->on_event(driv->evt_cbk_hdl, &gpac_evt); - //fprintf(stderr, "after %d %s\n", gpac_evt.key.key_code, gf_dom_get_key_name(gpac_evt.key.key_code)); - default: + //fprintf(stderr, "after %d %s\n", gpac_evt.key.key_code, gf_dom_get_key_name(gpac_evt.key.key_code)); + default: break; } - + } - + return GF_OK; } @@ -627,10 +628,10 @@ static GF_Err DirectFBVid_ProcessEvent(GF_VideoOutput *driv, GF_Event *evt) driv->on_event(driv->evt_cbk_hdl, &gpac_evt); } return GF_OK; - + case GF_EVENT_VIDEO_SETUP: if (evt->setup.opengl_mode) return GF_NOT_SUPPORTED; - + if ((ctx->width !=evt->setup.width) || (ctx->height != evt->setup.height)) { GF_Event gpac_evt; gpac_evt.type = GF_EVENT_SIZE; @@ -651,7 +652,7 @@ static GF_Err DirectFBVid_LockBackBuffer(GF_VideoOutput *driv, GF_VideoSurface * void *buf; u32 width, height; DFBSurfacePixelFormat format; - + DirectFBVID(); if (!ctx->primary) return GF_BAD_PARAM; if (do_lock) @@ -666,7 +667,7 @@ static GF_Err DirectFBVid_LockBackBuffer(GF_VideoOutput *driv, GF_VideoSurface * video_info->pitch_y = pitch; video_info->video_buffer = buf; video_info->pixel_format = ctx->pixel_format; - video_info->is_hardware_memory = !ctx->use_systems_memory; + video_info->is_hardware_memory = !ctx->use_systems_memory; GF_LOG(GF_LOG_DEBUG, GF_LOG_MMIO, ("[DirectFB] backbuffer locked\n")); } else { @@ -674,7 +675,7 @@ static GF_Err DirectFBVid_LockBackBuffer(GF_VideoOutput *driv, GF_VideoSurface * GF_LOG(GF_LOG_DEBUG, GF_LOG_MMIO, ("[DirectFB] backbuffer unlocked\n")); } return GF_OK; - + } static GF_Err DirectFBVid_Blit(GF_VideoOutput *driv, GF_VideoSurface *video_src, GF_Window *src_wnd, GF_Window *dst_wnd, u32 overlay_type) @@ -699,13 +700,10 @@ static GF_Err DirectFBVid_Blit(GF_VideoOutput *driv, GF_VideoSurface *video_src, srcdesc.preallocated[0].data = video_src->video_buffer; srcdesc.preallocated[0].pitch = video_src->pitch_y; - GF_LOG(GF_LOG_DEBUG, GF_LOG_MMIO, ("[DirectFB] video_src->pitch_y %d \n",video_src->pitch_y )); - switch (video_src->pixel_format){ case GF_PIXEL_ARGB: //return DSPF_ARGB; case GF_PIXEL_RGBA: //return DSPF_ARGB; - case GF_PIXEL_BGRA: //return DSPF_ARGB; ctx->primary->SetBlittingFlags(ctx->primary, DSBLIT_BLEND_ALPHACHANNEL); break; default: @@ -718,9 +716,8 @@ static GF_Err DirectFBVid_Blit(GF_VideoOutput *driv, GF_VideoSurface *video_src, GF_LOG(GF_LOG_ERROR, GF_LOG_MMIO, ("[DirectFB] cannot create blit source surface for pixel format %s: %s (%d)\n", gf_4cc_to_str(video_src->pixel_format), DirectFBErrorString(res), res)); return GF_IO_ERR; } - - GF_LOG(GF_LOG_DEBUG, GF_LOG_MMIO, ("[DirectFB] blit source surface created\n")); - + + dfbsrc.x = src_wnd->x; dfbsrc.y = src_wnd->y; dfbsrc.w = src_wnd->w; @@ -728,7 +725,7 @@ static GF_Err DirectFBVid_Blit(GF_VideoOutput *driv, GF_VideoSurface *video_src, if (!src_wnd->x && !src_wnd->y && (dst_wnd->w==src_wnd->w) && (dst_wnd->h==src_wnd->h)) { ctx->primary->Blit(ctx->primary, src, &dfbsrc, dst_wnd->x, dst_wnd->y); - } else { + } else { dfbdst.x = dst_wnd->x; dfbdst.y = dst_wnd->y; dfbdst.w = dst_wnd->w; @@ -737,6 +734,7 @@ static GF_Err DirectFBVid_Blit(GF_VideoOutput *driv, GF_VideoSurface *video_src, } src->Release(src); + GF_LOG(GF_LOG_DEBUG, GF_LOG_MMIO, ("[DirectFB] blit successful\n")); return GF_OK; } @@ -745,14 +743,14 @@ void *DirectFBNewVideo() { DirectFBVidCtx *ctx; GF_VideoOutput *driv; - + driv = gf_malloc(sizeof(GF_VideoOutput)); memset(driv, 0, sizeof(GF_VideoOutput)); GF_REGISTER_MODULE_INTERFACE(driv, GF_VIDEO_OUTPUT_INTERFACE, "DirectFB Video Output", "gpac distribution"); - + ctx = gf_malloc(sizeof(DirectFBVidCtx)); memset(ctx, 0, sizeof(DirectFBVidCtx)); - + /* GF_VideoOutput */ driv->opaque = ctx; driv->Setup = DirectFBVid_Setup; @@ -763,9 +761,9 @@ void *DirectFBNewVideo() driv->LockBackBuffer = DirectFBVid_LockBackBuffer; driv->LockOSContext = NULL; driv->Blit = DirectFBVid_Blit; - driv->hw_caps |= GF_VIDEO_HW_HAS_RGB | GF_VIDEO_HW_HAS_RGBA | GF_VIDEO_HW_HAS_YUV; - - return driv; + driv->hw_caps |= GF_VIDEO_HW_HAS_RGB | GF_VIDEO_HW_HAS_RGBA | GF_VIDEO_HW_HAS_YUV | GF_VIDEO_HW_HAS_STRETCH; + + return driv; } void DirectFBDeleteVideo(void *ifce) @@ -778,13 +776,13 @@ void DirectFBDeleteVideo(void *ifce) /*interface query*/ -const u32 *QueryInterfaces() +const u32 *QueryInterfaces() { static u32 si [] = { GF_VIDEO_OUTPUT_INTERFACE, 0 }; - return si; + return si; } /*interface create*/ diff --git a/modules/droid_audio/droidaudio.c b/modules/droid_audio/droidaudio.c index 711429a..b0b6c4f 100644 --- a/modules/droid_audio/droidaudio.c +++ b/modules/droid_audio/droidaudio.c @@ -1,452 +1,452 @@ -/* - * GPAC - Multimedia Framework C SDK - * - * Copyright (c) ENST 2009- - * Authors: Jean Le Feuvre - * All rights reserved - * - * Created by NGO Van Luyen / ARTEMIS / Telecom SudParis /Institut TELECOM on Oct, 2010 - * nvluyen81@gmail.com - * - * This file is part of GPAC / Wrapper - * - * GPAC is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * GPAC 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -#include "javaenv.h" - -#include -#include -#include -#include - -#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 -#define CHANNEL_OUT_MONO 4 -#define CHANNEL_IN_STEREO 12 -#define CHANNEL_IN_MONO 16 - - -/*for channel codes*/ -#include - -static const char android_device[] = "Android Default"; - -static jclass cAudioTrack = NULL; -static jobject mtrack = NULL; - -static jmethodID mAudioTrack; -static jmethodID setStereoVolume; -static jmethodID mGetMinBufferSize; -static jmethodID mPlay; -static jmethodID mStop; -static jmethodID mRelease; -static jmethodID mWrite; -static jmethodID mFlush; - -#include -#define TAG "GPAC Android Audio" -#define LOGV(X, Y) __android_log_print(ANDROID_LOG_VERBOSE, TAG, X, Y) -#define LOGV3(X, Y, Z, K) __android_log_print(ANDROID_LOG_VERBOSE, TAG, X, Y, Z, K) -#define LOGD(X, Y) __android_log_print(ANDROID_LOG_DEBUG, TAG, X, Y) -#define LOGD2(X, Y, Z) __android_log_print(ANDROID_LOG_DEBUG, TAG, X, Y, Z) -#define LOGE(X, Y) __android_log_print(ANDROID_LOG_ERROR, TAG, X, Y) -#define LOGE3(X, Y, Z, W) __android_log_print(ANDROID_LOG_ERROR, TAG, X, Y, Z, W) -#define LOGW(X, Y) __android_log_print(ANDROID_LOG_WARN, TAG, X, Y) -#define LOGI(X, Y) __android_log_print(ANDROID_LOG_INFO, TAG, X, Y) - - -/* Uncomment the next line if you want to debug */ -/* #define DROID_EXTREME_LOGS */ - -typedef struct -{ - JNIEnv* env; - - jobject mtrack; - - u32 num_buffers; - - u32 delay, total_length_ms; - - Bool force_config; - u32 cfg_num_buffers, cfg_duration; - - u32 sampleRateInHz; - u32 channelConfig; //AudioFormat.CHANNEL_OUT_MONO - u32 audioFormat; //AudioFormat.ENCODING_PCM_16BIT - s32 mbufferSizeInBytes; - u32 volume; - u32 pan; - jarray buff; -} DroidContext; - -//---------------------------------------------------------------------- -//---------------------------------------------------------------------- -// Called by the main thread -static GF_Err WAV_Setup(GF_AudioOutput *dr, void *os_handle, u32 num_buffers, u32 total_duration) -{ - DroidContext *ctx = (DroidContext *)dr->opaque; - JNIEnv* env = GetEnv(); - int channels; - int bytes; - LOGV("[Android Audio] Setup for %d buffers", num_buffers); - - ctx->force_config = (num_buffers && total_duration) ? 1 : 0; - ctx->cfg_num_buffers = num_buffers; - if (ctx->cfg_num_buffers <= 1) ctx->cfg_num_buffers = 2; - ctx->cfg_duration = total_duration; - if (!ctx->force_config) ctx->num_buffers = 1; - ctx->volume = 100; - ctx->pan = 50; - - if (!cAudioTrack){ - cAudioTrack = (*env)->FindClass(env, "android/media/AudioTrack"); - if (!cAudioTrack) { - return GF_NOT_SUPPORTED; - } - - cAudioTrack = (*env)->NewGlobalRef(env, cAudioTrack); - - mAudioTrack = (*env)->GetMethodID(env, cAudioTrack, "", "(IIIIII)V"); - mGetMinBufferSize = (*env)->GetStaticMethodID(env, cAudioTrack, "getMinBufferSize", "(III)I"); - mPlay = (*env)->GetMethodID(env, cAudioTrack, "play", "()V"); - mStop = (*env)->GetMethodID(env, cAudioTrack, "stop", "()V"); - mRelease = (*env)->GetMethodID(env, cAudioTrack, "release", "()V"); - mWrite = (*env)->GetMethodID(env, cAudioTrack, "write", "([BII)I"); - mFlush = (*env)->GetMethodID(env, cAudioTrack, "flush", "()V"); - setStereoVolume = (*env)->GetMethodID(env, cAudioTrack, "setStereoVolume", "(FF)I"); - } - - return GF_OK; -} -//---------------------------------------------------------------------- -// Called by the audio thread -static void WAV_Shutdown(GF_AudioOutput *dr) -{ - DroidContext *ctx = (DroidContext *)dr->opaque; - JNIEnv* env = ctx->env; - - (*env)->CallNonvirtualVoidMethod(env, mtrack, cAudioTrack, mStop); - (*env)->CallNonvirtualVoidMethod(env, mtrack, cAudioTrack, mRelease); - - (*env)->PopLocalFrame(env, NULL); - - (*GetJavaVM())->DetachCurrentThread(GetJavaVM()); -} - - -/*we assume what was asked is what we got*/ -/* Called by the audio thread */ -static GF_Err WAV_ConfigureOutput(GF_AudioOutput *dr, u32 *SampleRate, u32 *NbChannels, u32 *nbBitsPerSample, u32 channel_cfg) -{ - JNIEnv* env = NULL; - u32 i; - DroidContext *ctx = (DroidContext *)dr->opaque; - - LOGI("[Android Audio] Configure Output for %u channels...", *NbChannels); - - if (!ctx) return GF_BAD_PARAM; - - ctx->sampleRateInHz = *SampleRate; - ctx->channelConfig = (*NbChannels == 1) ? CHANNEL_CONFIGURATION_MONO : CHANNEL_CONFIGURATION_STEREO; //AudioFormat.CHANNEL_CONFIGURATION_MONO - ctx->audioFormat = (*nbBitsPerSample == 8)? ENCODING_PCM_8BIT : ENCODING_PCM_16BIT; //AudioFormat.ENCODING_PCM_16BIT - - // Get the java environment in the new thread - (*GetJavaVM())->AttachCurrentThread(GetJavaVM(), &env, NULL); - ctx->env = env; - LOGV("[Android Audio] SampleRate : %d",ctx->sampleRateInHz); - LOGV("[Android Audio] BitPerSample : %d", *nbBitsPerSample); - - (*env)->PushLocalFrame(env, 2); - - ctx->num_buffers = 1; - ctx->mbufferSizeInBytes = (*env)->CallStaticIntMethod(env, cAudioTrack, mGetMinBufferSize, - ctx->sampleRateInHz, ctx->channelConfig, ctx->audioFormat); - - i = 1; - if ( ctx->channelConfig == CHANNEL_CONFIGURATION_STEREO ) - i *= 2; - if ( ctx->audioFormat == ENCODING_PCM_16BIT ) - i *= 2; - - ctx->total_length_ms = 1000 * ctx->num_buffers * ctx->mbufferSizeInBytes / i / ctx->sampleRateInHz; - - /*initial delay is full buffer size*/ - ctx->delay = ctx->total_length_ms; - - mtrack = (*env)->NewObject(env, cAudioTrack, mAudioTrack, STREAM_MUSIC, ctx->sampleRateInHz, - ctx->channelConfig, ctx->audioFormat, ctx->mbufferSizeInBytes, MODE_STREAM); //AudioTrack.MODE_STREAM - if (mtrack){ - mtrack = (*env)->NewGlobalRef(env, mtrack); - ctx->mtrack = mtrack; - (*env)->CallNonvirtualVoidMethod(env, mtrack, cAudioTrack, mPlay); - } else { - LOGV("[Android Audio] mtrack = %p", mtrack); - return GF_NOT_SUPPORTED; - } - - ctx->buff = (*env)->NewByteArray(env, ctx->mbufferSizeInBytes); - LOGV("[Android Audio] ConfigureOutput DONE.", *NbChannels); - return GF_OK; -} - -/* Called by the audio thread */ -static void WAV_WriteAudio(GF_AudioOutput *dr) -{ - DroidContext *ctx = (DroidContext *)dr->opaque; - if (!ctx) - return; - JNIEnv* env = ctx->env; - u32 written; - void* pBuffer; - if (!env) - return; -#ifdef DROID_EXTREME_LOGS - LOGV("[Android Audio] WAV_WriteAudio() : entering",ctx->sampleRateInHz); -#endif /* DROID_EXTREME_LOGS */ - pBuffer = (*env)->GetPrimitiveArrayCritical(env, ctx->buff, NULL); - if (pBuffer) - { - written = dr->FillBuffer(dr->audio_renderer, pBuffer, ctx->mbufferSizeInBytes); - (*env)->ReleasePrimitiveArrayCritical(env, ctx->buff, pBuffer, 0); - if (written) - { - (*env)->CallNonvirtualIntMethod(env, mtrack, cAudioTrack, mWrite, ctx->buff, 0, ctx->mbufferSizeInBytes); - } - } - else - { - LOGV("[Android Audio] Failed to get pointer to array bytes = %p", pBuffer); - } -#ifdef DROID_EXTREME_LOGS - LOGV("[Android Audio] WAV_WriteAudio() : done",ctx->sampleRateInHz); -#endif /* DROID_EXTREME_LOGS */ -} - -/* Called by the main thread */ -static void WAV_Play(GF_AudioOutput *dr, u32 PlayType) -{ - DroidContext *ctx = (DroidContext *)dr->opaque; - JNIEnv* env = GetEnv(); - - LOGV("[Android Audio] Play: %d\n", PlayType); - - switch ( PlayType ) - { - case 0: - // Stop playing - (*env)->CallNonvirtualVoidMethod(env, mtrack, cAudioTrack, mStop); - // Clear the internal buffers - (*env)->CallNonvirtualVoidMethod(env, mtrack, cAudioTrack, mFlush); - break; - case 1: - case 2: - (*env)->CallNonvirtualVoidMethod(env, mtrack, cAudioTrack, mPlay); - break; - default: - LOGW("[Android Audio] Unknown Play method=%d.\n", PlayType); - } - LOGV("[Android Audio] Play DONE (%d).\n", PlayType); -} - -static void WAV_UpdateVolume(DroidContext *ctx){ - float lV, rV; - JNIEnv* env = GetEnv(); - if (!ctx) - return; - if (ctx->pan > 100) - ctx->pan = 100; - lV =rV = ctx->volume / 100.0; - if (ctx->pan > 50){ - float m = (100 - ctx->pan) / 50.0; - lV*=m; - } else if (ctx->pan < 50){ - float m = ctx->pan / 50.0; - rV*=m; - } - if (env && setStereoVolume && mtrack && cAudioTrack){ - int success; - if (0!= (success=((*env)->CallNonvirtualIntMethod(env, mtrack, cAudioTrack, setStereoVolume, lV, rV)))) - LOGE3("SetVolume(%f,%f) returned Error code %d", lV, rV, success ); - } else { - LOGD2("SetVolume(%f,%f)", lV, rV ); - } -} - -static void WAV_SetVolume(GF_AudioOutput *dr, u32 Volume) { - DroidContext *ctx = (DroidContext *)dr->opaque; - ctx->volume = Volume; - WAV_UpdateVolume(ctx); -} - -static void WAV_SetPan(GF_AudioOutput *dr, u32 Pan) -{ - DroidContext *ctx = (DroidContext *)dr->opaque; - WAV_UpdateVolume(ctx); -} - -/* Called by the audio thread */ -static GF_Err WAV_QueryOutputSampleRate(GF_AudioOutput *dr, u32 *desired_samplerate, u32 *NbChannels, u32 *nbBitsPerSample) -{ - DroidContext *ctx = (DroidContext *)dr->opaque; - JNIEnv* env = ctx->env; - u32 sampleRateInHz, channelConfig, audioFormat; - - LOGV("Query sample=%d", *desired_samplerate ); - -#ifdef TEST_QUERY_SAMPLE - sampleRateInHz = *desired_samplerate; - channelConfig = (*NbChannels == 1) ? CHANNEL_CONFIGURATION_MONO : CHANNEL_CONFIGURATION_STEREO; - audioFormat = (*nbBitsPerSample == 8)? ENCODING_PCM_8BIT : ENCODING_PCM_16BIT; - - LOGV3("[Android Audio] Query: SampleRate ChannelConfig AudioFormat: %d %d %d \n", - sampleRateInHz, - (channelConfig == CHANNEL_CONFIGURATION_MONO)? 1 : 2, - (ctx->audioFormat == ENCODING_PCM_8BIT)? 8 : 16); - - switch (*desired_samplerate) { - case 11025: - *desired_samplerate = 11025; - if ( (*env)->CallStaticIntMethod(env, cAudioTrack, mGetMinBufferSize, - *desired_samplerate, channelConfig, audioFormat) > 0 ) - return GF_OK; - case 22050: - *desired_samplerate = 22050; - if ( (*env)->CallStaticIntMethod(env, cAudioTrack, mGetMinBufferSize, - *desired_samplerate, channelConfig, audioFormat) > 0 ) - return GF_OK; - break; - case 8000: - *desired_samplerate = 8000; - if ( (*env)->CallStaticIntMethod(env, cAudioTrack, mGetMinBufferSize, - *desired_samplerate, channelConfig, audioFormat) > 0 ) - return GF_OK; - case 16000: - *desired_samplerate = 16000; - if ( (*env)->CallStaticIntMethod(env, cAudioTrack, mGetMinBufferSize, - *desired_samplerate, channelConfig, audioFormat) > 0 ) - return GF_OK; - case 32000: - *desired_samplerate = 32000; - if ( (*env)->CallStaticIntMethod(env, cAudioTrack, mGetMinBufferSize, - *desired_samplerate, channelConfig, audioFormat) > 0 ) - return GF_OK; - break; - case 24000: - *desired_samplerate = 24000; - if ( (*env)->CallStaticIntMethod(env, cAudioTrack, mGetMinBufferSize, - *desired_samplerate, channelConfig, audioFormat) > 0 ) - return GF_OK; - case 48000: - *desired_samplerate = 48000; - if ( (*env)->CallStaticIntMethod(env, cAudioTrack, mGetMinBufferSize, - *desired_samplerate, channelConfig, audioFormat) > 0 ) - return GF_OK; - break; - case 44100: - *desired_samplerate = 44100; - if ( (*env)->CallStaticIntMethod(env, cAudioTrack, mGetMinBufferSize, - *desired_samplerate, channelConfig, audioFormat) > 0 ) - return GF_OK; - break; - default: - break; - } -#endif - - return GF_OK; -} - -static u32 WAV_GetAudioDelay(GF_AudioOutput *dr) -{ - DroidContext *ctx = (DroidContext *)dr->opaque; - - return ctx->delay; -} - -static u32 WAV_GetTotalBufferTime(GF_AudioOutput *dr) -{ - DroidContext *ctx = (DroidContext *)dr->opaque; - - return ctx->total_length_ms; -} - -//---------------------------------------------------------------------- -void *NewWAVRender() -{ - DroidContext *ctx; - GF_AudioOutput *driv; - ctx = gf_malloc(sizeof(DroidContext)); - memset(ctx, 0, sizeof(DroidContext)); - ctx->num_buffers = 1; - ctx->pan = 50; - ctx->volume = 100; - driv = gf_malloc(sizeof(GF_AudioOutput)); - memset(driv, 0, sizeof(GF_AudioOutput)); - GF_REGISTER_MODULE_INTERFACE(driv, GF_AUDIO_OUTPUT_INTERFACE, "Android Audio Output", "gpac distribution") - - driv->opaque = ctx; - - driv->SelfThreaded = 0; - driv->Setup = WAV_Setup; - driv->Shutdown = WAV_Shutdown; - driv->ConfigureOutput = WAV_ConfigureOutput; - driv->GetAudioDelay = WAV_GetAudioDelay; - driv->GetTotalBufferTime = WAV_GetTotalBufferTime; - driv->SetVolume = WAV_SetVolume; - driv->SetPan = WAV_SetPan; - driv->Play = WAV_Play; - driv->QueryOutputSampleRate = WAV_QueryOutputSampleRate; - driv->WriteAudio = WAV_WriteAudio; - return driv; -} -//---------------------------------------------------------------------- -void DeleteWAVRender(void *ifce) -{ - GF_AudioOutput *dr = (GF_AudioOutput *) ifce; - if (!ifce) - return; - gf_free(dr); -} -//---------------------------------------------------------------------- -const u32 *QueryInterfaces() -{ - static u32 si [] = { - GF_AUDIO_OUTPUT_INTERFACE, - 0 - }; - return si; -} - -GF_BaseInterface *LoadInterface(u32 InterfaceType) -{ - if (InterfaceType == GF_AUDIO_OUTPUT_INTERFACE) return NewWAVRender(); - return NULL; -} - -void ShutdownInterface(GF_BaseInterface *ifce) -{ - switch (ifce->InterfaceType) { - case GF_AUDIO_OUTPUT_INTERFACE: - DeleteWAVRender((GF_AudioOutput *) ifce); - break; - } -} +/* + * GPAC - Multimedia Framework C SDK + * + * Copyright (c) ENST 2009- + * Authors: Jean Le Feuvre + * All rights reserved + * + * Created by NGO Van Luyen / ARTEMIS / Telecom SudParis /Institut TELECOM on Oct, 2010 + * nvluyen81@gmail.com + * + * This file is part of GPAC / Wrapper + * + * GPAC is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * GPAC 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; see the file COPYING. If not, write to + * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + * + */ + +#include "javaenv.h" + +#include +#include +#include +#include + +#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 +#define CHANNEL_OUT_MONO 4 +#define CHANNEL_IN_STEREO 12 +#define CHANNEL_IN_MONO 16 + + +/*for channel codes*/ +#include + +static const char android_device[] = "Android Default"; + +static jclass cAudioTrack = NULL; +static jobject mtrack = NULL; + +static jmethodID mAudioTrack; +static jmethodID setStereoVolume; +static jmethodID mGetMinBufferSize; +static jmethodID mPlay; +static jmethodID mStop; +static jmethodID mRelease; +static jmethodID mWrite; +static jmethodID mFlush; + +#include +#define TAG "GPAC Android Audio" +#define LOGV(X, Y) __android_log_print(ANDROID_LOG_VERBOSE, TAG, X, Y) +#define LOGV3(X, Y, Z, K) __android_log_print(ANDROID_LOG_VERBOSE, TAG, X, Y, Z, K) +#define LOGD(X, Y) __android_log_print(ANDROID_LOG_DEBUG, TAG, X, Y) +#define LOGD2(X, Y, Z) __android_log_print(ANDROID_LOG_DEBUG, TAG, X, Y, Z) +#define LOGE(X, Y) __android_log_print(ANDROID_LOG_ERROR, TAG, X, Y) +#define LOGE3(X, Y, Z, W) __android_log_print(ANDROID_LOG_ERROR, TAG, X, Y, Z, W) +#define LOGW(X, Y) __android_log_print(ANDROID_LOG_WARN, TAG, X, Y) +#define LOGI(X, Y) __android_log_print(ANDROID_LOG_INFO, TAG, X, Y) + + +/* Uncomment the next line if you want to debug */ +/* #define DROID_EXTREME_LOGS */ + +typedef struct +{ + JNIEnv* env; + + jobject mtrack; + + u32 num_buffers; + + u32 delay, total_length_ms; + + Bool force_config; + u32 cfg_num_buffers, cfg_duration; + + u32 sampleRateInHz; + u32 channelConfig; //AudioFormat.CHANNEL_OUT_MONO + u32 audioFormat; //AudioFormat.ENCODING_PCM_16BIT + s32 mbufferSizeInBytes; + u32 volume; + u32 pan; + jarray buff; +} DroidContext; + +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// Called by the main thread +static GF_Err WAV_Setup(GF_AudioOutput *dr, void *os_handle, u32 num_buffers, u32 total_duration) +{ + DroidContext *ctx = (DroidContext *)dr->opaque; + JNIEnv* env = GetEnv(); + int channels; + int bytes; + LOGV("[Android Audio] Setup for %d buffers", num_buffers); + + ctx->force_config = (num_buffers && total_duration) ? 1 : 0; + ctx->cfg_num_buffers = num_buffers; + if (ctx->cfg_num_buffers <= 1) ctx->cfg_num_buffers = 2; + ctx->cfg_duration = total_duration; + if (!ctx->force_config) ctx->num_buffers = 1; + ctx->volume = 100; + ctx->pan = 50; + + if (!cAudioTrack){ + cAudioTrack = (*env)->FindClass(env, "android/media/AudioTrack"); + if (!cAudioTrack) { + return GF_NOT_SUPPORTED; + } + + cAudioTrack = (*env)->NewGlobalRef(env, cAudioTrack); + + mAudioTrack = (*env)->GetMethodID(env, cAudioTrack, "", "(IIIIII)V"); + mGetMinBufferSize = (*env)->GetStaticMethodID(env, cAudioTrack, "getMinBufferSize", "(III)I"); + mPlay = (*env)->GetMethodID(env, cAudioTrack, "play", "()V"); + mStop = (*env)->GetMethodID(env, cAudioTrack, "stop", "()V"); + mRelease = (*env)->GetMethodID(env, cAudioTrack, "release", "()V"); + mWrite = (*env)->GetMethodID(env, cAudioTrack, "write", "([BII)I"); + mFlush = (*env)->GetMethodID(env, cAudioTrack, "flush", "()V"); + setStereoVolume = (*env)->GetMethodID(env, cAudioTrack, "setStereoVolume", "(FF)I"); + } + + return GF_OK; +} +//---------------------------------------------------------------------- +// Called by the audio thread +static void WAV_Shutdown(GF_AudioOutput *dr) +{ + DroidContext *ctx = (DroidContext *)dr->opaque; + JNIEnv* env = ctx->env; + + (*env)->CallNonvirtualVoidMethod(env, mtrack, cAudioTrack, mStop); + (*env)->CallNonvirtualVoidMethod(env, mtrack, cAudioTrack, mRelease); + + (*env)->PopLocalFrame(env, NULL); + + (*GetJavaVM())->DetachCurrentThread(GetJavaVM()); +} + + +/*we assume what was asked is what we got*/ +/* Called by the audio thread */ +static GF_Err WAV_ConfigureOutput(GF_AudioOutput *dr, u32 *SampleRate, u32 *NbChannels, u32 *nbBitsPerSample, u32 channel_cfg) +{ + JNIEnv* env = NULL; + u32 i; + DroidContext *ctx = (DroidContext *)dr->opaque; + + LOGI("[Android Audio] Configure Output for %u channels...", *NbChannels); + + if (!ctx) return GF_BAD_PARAM; + + ctx->sampleRateInHz = *SampleRate; + ctx->channelConfig = (*NbChannels == 1) ? CHANNEL_CONFIGURATION_MONO : CHANNEL_CONFIGURATION_STEREO; //AudioFormat.CHANNEL_CONFIGURATION_MONO + ctx->audioFormat = (*nbBitsPerSample == 8)? ENCODING_PCM_8BIT : ENCODING_PCM_16BIT; //AudioFormat.ENCODING_PCM_16BIT + + // Get the java environment in the new thread + (*GetJavaVM())->AttachCurrentThread(GetJavaVM(), &env, NULL); + ctx->env = env; + LOGV("[Android Audio] SampleRate : %d",ctx->sampleRateInHz); + LOGV("[Android Audio] BitPerSample : %d", *nbBitsPerSample); + + (*env)->PushLocalFrame(env, 2); + + ctx->num_buffers = 1; + ctx->mbufferSizeInBytes = (*env)->CallStaticIntMethod(env, cAudioTrack, mGetMinBufferSize, + ctx->sampleRateInHz, ctx->channelConfig, ctx->audioFormat); + + i = 1; + if ( ctx->channelConfig == CHANNEL_CONFIGURATION_STEREO ) + i *= 2; + if ( ctx->audioFormat == ENCODING_PCM_16BIT ) + i *= 2; + + ctx->total_length_ms = 1000 * ctx->num_buffers * ctx->mbufferSizeInBytes / i / ctx->sampleRateInHz; + + /*initial delay is full buffer size*/ + ctx->delay = ctx->total_length_ms; + + mtrack = (*env)->NewObject(env, cAudioTrack, mAudioTrack, STREAM_MUSIC, ctx->sampleRateInHz, + ctx->channelConfig, ctx->audioFormat, ctx->mbufferSizeInBytes, MODE_STREAM); //AudioTrack.MODE_STREAM + if (mtrack){ + mtrack = (*env)->NewGlobalRef(env, mtrack); + ctx->mtrack = mtrack; + (*env)->CallNonvirtualVoidMethod(env, mtrack, cAudioTrack, mPlay); + } else { + LOGV("[Android Audio] mtrack = %p", mtrack); + return GF_NOT_SUPPORTED; + } + + ctx->buff = (*env)->NewByteArray(env, ctx->mbufferSizeInBytes); + LOGV("[Android Audio] ConfigureOutput DONE.", *NbChannels); + return GF_OK; +} + +/* Called by the audio thread */ +static void WAV_WriteAudio(GF_AudioOutput *dr) +{ + DroidContext *ctx = (DroidContext *)dr->opaque; + if (!ctx) + return; + JNIEnv* env = ctx->env; + u32 written; + void* pBuffer; + if (!env) + return; +#ifdef DROID_EXTREME_LOGS + LOGV("[Android Audio] WAV_WriteAudio() : entering",ctx->sampleRateInHz); +#endif /* DROID_EXTREME_LOGS */ + pBuffer = (*env)->GetPrimitiveArrayCritical(env, ctx->buff, NULL); + if (pBuffer) + { + written = dr->FillBuffer(dr->audio_renderer, pBuffer, ctx->mbufferSizeInBytes); + (*env)->ReleasePrimitiveArrayCritical(env, ctx->buff, pBuffer, 0); + if (written) + { + (*env)->CallNonvirtualIntMethod(env, mtrack, cAudioTrack, mWrite, ctx->buff, 0, ctx->mbufferSizeInBytes); + } + } + else + { + LOGV("[Android Audio] Failed to get pointer to array bytes = %p", pBuffer); + } +#ifdef DROID_EXTREME_LOGS + LOGV("[Android Audio] WAV_WriteAudio() : done",ctx->sampleRateInHz); +#endif /* DROID_EXTREME_LOGS */ +} + +/* Called by the main thread */ +static void WAV_Play(GF_AudioOutput *dr, u32 PlayType) +{ + DroidContext *ctx = (DroidContext *)dr->opaque; + JNIEnv* env = GetEnv(); + + LOGV("[Android Audio] Play: %d\n", PlayType); + + switch ( PlayType ) + { + case 0: + // Stop playing + (*env)->CallNonvirtualVoidMethod(env, mtrack, cAudioTrack, mStop); + // Clear the internal buffers + (*env)->CallNonvirtualVoidMethod(env, mtrack, cAudioTrack, mFlush); + break; + case 1: + case 2: + (*env)->CallNonvirtualVoidMethod(env, mtrack, cAudioTrack, mPlay); + break; + default: + LOGW("[Android Audio] Unknown Play method=%d.\n", PlayType); + } + LOGV("[Android Audio] Play DONE (%d).\n", PlayType); +} + +static void WAV_UpdateVolume(DroidContext *ctx){ + float lV, rV; + JNIEnv* env = GetEnv(); + if (!ctx) + return; + if (ctx->pan > 100) + ctx->pan = 100; + lV =rV = ctx->volume / 100.0; + if (ctx->pan > 50){ + float m = (100 - ctx->pan) / 50.0; + lV*=m; + } else if (ctx->pan < 50){ + float m = ctx->pan / 50.0; + rV*=m; + } + if (env && setStereoVolume && mtrack && cAudioTrack){ + int success; + if (0!= (success=((*env)->CallNonvirtualIntMethod(env, mtrack, cAudioTrack, setStereoVolume, lV, rV)))) + LOGE3("SetVolume(%f,%f) returned Error code %d", lV, rV, success ); + } else { + LOGD2("SetVolume(%f,%f)", lV, rV ); + } +} + +static void WAV_SetVolume(GF_AudioOutput *dr, u32 Volume) { + DroidContext *ctx = (DroidContext *)dr->opaque; + ctx->volume = Volume; + WAV_UpdateVolume(ctx); +} + +static void WAV_SetPan(GF_AudioOutput *dr, u32 Pan) +{ + DroidContext *ctx = (DroidContext *)dr->opaque; + WAV_UpdateVolume(ctx); +} + +/* Called by the audio thread */ +static GF_Err WAV_QueryOutputSampleRate(GF_AudioOutput *dr, u32 *desired_samplerate, u32 *NbChannels, u32 *nbBitsPerSample) +{ + DroidContext *ctx = (DroidContext *)dr->opaque; + JNIEnv* env = ctx->env; + u32 sampleRateInHz, channelConfig, audioFormat; + + LOGV("Query sample=%d", *desired_samplerate ); + +#ifdef TEST_QUERY_SAMPLE + sampleRateInHz = *desired_samplerate; + channelConfig = (*NbChannels == 1) ? CHANNEL_CONFIGURATION_MONO : CHANNEL_CONFIGURATION_STEREO; + audioFormat = (*nbBitsPerSample == 8)? ENCODING_PCM_8BIT : ENCODING_PCM_16BIT; + + LOGV3("[Android Audio] Query: SampleRate ChannelConfig AudioFormat: %d %d %d \n", + sampleRateInHz, + (channelConfig == CHANNEL_CONFIGURATION_MONO)? 1 : 2, + (ctx->audioFormat == ENCODING_PCM_8BIT)? 8 : 16); + + switch (*desired_samplerate) { + case 11025: + *desired_samplerate = 11025; + if ( (*env)->CallStaticIntMethod(env, cAudioTrack, mGetMinBufferSize, + *desired_samplerate, channelConfig, audioFormat) > 0 ) + return GF_OK; + case 22050: + *desired_samplerate = 22050; + if ( (*env)->CallStaticIntMethod(env, cAudioTrack, mGetMinBufferSize, + *desired_samplerate, channelConfig, audioFormat) > 0 ) + return GF_OK; + break; + case 8000: + *desired_samplerate = 8000; + if ( (*env)->CallStaticIntMethod(env, cAudioTrack, mGetMinBufferSize, + *desired_samplerate, channelConfig, audioFormat) > 0 ) + return GF_OK; + case 16000: + *desired_samplerate = 16000; + if ( (*env)->CallStaticIntMethod(env, cAudioTrack, mGetMinBufferSize, + *desired_samplerate, channelConfig, audioFormat) > 0 ) + return GF_OK; + case 32000: + *desired_samplerate = 32000; + if ( (*env)->CallStaticIntMethod(env, cAudioTrack, mGetMinBufferSize, + *desired_samplerate, channelConfig, audioFormat) > 0 ) + return GF_OK; + break; + case 24000: + *desired_samplerate = 24000; + if ( (*env)->CallStaticIntMethod(env, cAudioTrack, mGetMinBufferSize, + *desired_samplerate, channelConfig, audioFormat) > 0 ) + return GF_OK; + case 48000: + *desired_samplerate = 48000; + if ( (*env)->CallStaticIntMethod(env, cAudioTrack, mGetMinBufferSize, + *desired_samplerate, channelConfig, audioFormat) > 0 ) + return GF_OK; + break; + case 44100: + *desired_samplerate = 44100; + if ( (*env)->CallStaticIntMethod(env, cAudioTrack, mGetMinBufferSize, + *desired_samplerate, channelConfig, audioFormat) > 0 ) + return GF_OK; + break; + default: + break; + } +#endif + + return GF_OK; +} + +static u32 WAV_GetAudioDelay(GF_AudioOutput *dr) +{ + DroidContext *ctx = (DroidContext *)dr->opaque; + + return ctx->delay; +} + +static u32 WAV_GetTotalBufferTime(GF_AudioOutput *dr) +{ + DroidContext *ctx = (DroidContext *)dr->opaque; + + return ctx->total_length_ms; +} + +//---------------------------------------------------------------------- +void *NewWAVRender() +{ + DroidContext *ctx; + GF_AudioOutput *driv; + ctx = gf_malloc(sizeof(DroidContext)); + memset(ctx, 0, sizeof(DroidContext)); + ctx->num_buffers = 1; + ctx->pan = 50; + ctx->volume = 100; + driv = gf_malloc(sizeof(GF_AudioOutput)); + memset(driv, 0, sizeof(GF_AudioOutput)); + GF_REGISTER_MODULE_INTERFACE(driv, GF_AUDIO_OUTPUT_INTERFACE, "Android Audio Output", "gpac distribution") + + driv->opaque = ctx; + + driv->SelfThreaded = 0; + driv->Setup = WAV_Setup; + driv->Shutdown = WAV_Shutdown; + driv->ConfigureOutput = WAV_ConfigureOutput; + driv->GetAudioDelay = WAV_GetAudioDelay; + driv->GetTotalBufferTime = WAV_GetTotalBufferTime; + driv->SetVolume = WAV_SetVolume; + driv->SetPan = WAV_SetPan; + driv->Play = WAV_Play; + driv->QueryOutputSampleRate = WAV_QueryOutputSampleRate; + driv->WriteAudio = WAV_WriteAudio; + return driv; +} +//---------------------------------------------------------------------- +void DeleteWAVRender(void *ifce) +{ + GF_AudioOutput *dr = (GF_AudioOutput *) ifce; + if (!ifce) + return; + gf_free(dr); +} +//---------------------------------------------------------------------- +const u32 *QueryInterfaces() +{ + static u32 si [] = { + GF_AUDIO_OUTPUT_INTERFACE, + 0 + }; + return si; +} + +GF_BaseInterface *LoadInterface(u32 InterfaceType) +{ + if (InterfaceType == GF_AUDIO_OUTPUT_INTERFACE) return NewWAVRender(); + return NULL; +} + +void ShutdownInterface(GF_BaseInterface *ifce) +{ + switch (ifce->InterfaceType) { + case GF_AUDIO_OUTPUT_INTERFACE: + DeleteWAVRender((GF_AudioOutput *) ifce); + break; + } +} diff --git a/modules/droid_audio/javaenv.c b/modules/droid_audio/javaenv.c index ce552a3..26148bf 100644 --- a/modules/droid_audio/javaenv.c +++ b/modules/droid_audio/javaenv.c @@ -1,51 +1,51 @@ -/* - * GPAC - Multimedia Framework C SDK - * - * Copyright (c) ENST 2009- - * Authors: Jean Le Feuvre - * All rights reserved - * - * Created by Arsov Ivica / ARTEMIS / Telecom SudParis /Institut TELECOM on Oct, 2010 - * - * This file is part of GPAC / Wrapper - * - * GPAC is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * GPAC 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -#include "javaenv.h" - -static JavaVM* javaVM = 0; - -//---------------------------------------------------------------------- -jint JNI_OnLoad(JavaVM* vm, void* reserved) -{ - javaVM = vm; - return JNI_VERSION_1_2; -} -//---------------------------------------------------------------------- -JNIEnv* GetEnv() -{ - JNIEnv* env = 0; - //if (javaVM) javaVM->GetEnv((void**)&env, JNI_VERSION_1_2); - if (javaVM) (*javaVM)->GetEnv(javaVM, (void**)&env, JNI_VERSION_1_2); - return env; -} -//---------------------------------------------------------------------- -JavaVM* GetJavaVM() -{ - return javaVM; -} -//---------------------------------------------------------------------- +/* + * GPAC - Multimedia Framework C SDK + * + * Copyright (c) ENST 2009- + * Authors: Jean Le Feuvre + * All rights reserved + * + * Created by Arsov Ivica / ARTEMIS / Telecom SudParis /Institut TELECOM on Oct, 2010 + * + * This file is part of GPAC / Wrapper + * + * GPAC is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * GPAC 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; see the file COPYING. If not, write to + * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + * + */ + +#include "javaenv.h" + +static JavaVM* javaVM = 0; + +//---------------------------------------------------------------------- +jint JNI_OnLoad(JavaVM* vm, void* reserved) +{ + javaVM = vm; + return JNI_VERSION_1_2; +} +//---------------------------------------------------------------------- +JNIEnv* GetEnv() +{ + JNIEnv* env = 0; + //if (javaVM) javaVM->GetEnv((void**)&env, JNI_VERSION_1_2); + if (javaVM) (*javaVM)->GetEnv(javaVM, (void**)&env, JNI_VERSION_1_2); + return env; +} +//---------------------------------------------------------------------- +JavaVM* GetJavaVM() +{ + return javaVM; +} +//---------------------------------------------------------------------- diff --git a/modules/droid_audio/javaenv.h b/modules/droid_audio/javaenv.h index de8adc7..813ee82 100644 --- a/modules/droid_audio/javaenv.h +++ b/modules/droid_audio/javaenv.h @@ -1,36 +1,36 @@ -/* - * GPAC - Multimedia Framework C SDK - * - * Copyright (c) ENST 2009- - * Authors: Jean Le Feuvre - * All rights reserved - * - * Created by Arsov Ivica / ARTEMIS / Telecom SudParis /Institut TELECOM on Oct, 2010 - * - * This file is part of GPAC / Wrapper - * - * GPAC is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * GPAC 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -#ifndef JAVA_ENV -#define JAVA_ENV - -#include - -JavaVM* GetJavaVM(); -JNIEnv* GetEnv(); - -#endif //JAVA_ENV +/* + * GPAC - Multimedia Framework C SDK + * + * Copyright (c) ENST 2009- + * Authors: Jean Le Feuvre + * All rights reserved + * + * Created by Arsov Ivica / ARTEMIS / Telecom SudParis /Institut TELECOM on Oct, 2010 + * + * This file is part of GPAC / Wrapper + * + * GPAC is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * GPAC 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; see the file COPYING. If not, write to + * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + * + */ + +#ifndef JAVA_ENV +#define JAVA_ENV + +#include + +JavaVM* GetJavaVM(); +JNIEnv* GetEnv(); + +#endif //JAVA_ENV diff --git a/modules/droid_out/droid_vout-bitmap.c b/modules/droid_out/droid_vout-bitmap.c index 98d5a51..09933c1 100644 --- a/modules/droid_out/droid_vout-bitmap.c +++ b/modules/droid_out/droid_vout-bitmap.c @@ -1,216 +1,216 @@ -/* - * GPAC - Multimedia Framework C SDK - * - * Copyright (c) ENST 2009- - * Authors: Jean Le Feuvre - * All rights reserved - * - * Created by NGO Van Luyen, Ivica ARSOV / ARTEMIS / Telecom SudParis /Institut TELECOM on Oct, 2010 - * - * This file is part of GPAC / Wrapper - * - * GPAC is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * GPAC 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - - -/*driver interfaces*/ -#include -#include -#include - -#include - -#include - -typedef struct -{ - JNIEnv * env; - jobject * bitmap; - u32 width, height; - void * locked_data; -} AndroidContext; - - -#define RAW_OUT_PIXEL_FORMAT GF_PIXEL_RGB_32 -#define NBPP 4 - -#define RAWCTX AndroidContext *rc = (AndroidContext *)dr->opaque - -static GF_Err raw_resize(GF_VideoOutput *dr, u32 w, u32 h) -{ - GF_LOG(GF_LOG_DEBUG, GF_LOG_CORE, ("Android vout raw_resize\n")); - return GF_OK; -} - -GF_Err RAW_Setup(GF_VideoOutput *dr, void *os_handle, void *os_display, u32 init_flags) -{ - AndroidBitmapInfo info; - RAWCTX; - void * pixels; - int ret; - - GF_LOG(GF_LOG_DEBUG, GF_LOG_CORE, ("Android vout RAW_Setup\n")); - - if (!rc->width) - { - rc->env = (JNIEnv *)os_handle; - rc->bitmap = (jobject *)os_display; - - AndroidBitmap_getInfo(rc->env, *(rc->bitmap), &info); - rc->width = info.width; - rc->height = info.height; - rc->locked_data = NULL; - } - else - { - rc->env = (JNIEnv *)os_handle; - rc->bitmap = (jobject *)os_display; - } - - GF_LOG(GF_LOG_DEBUG, GF_LOG_CORE, ("Android vout rc dims: %d:%d\n", rc->height, rc->width)); - - return GF_OK; -} - - -static void RAW_Shutdown(GF_VideoOutput *dr) -{ - RAWCTX; - GF_LOG(GF_LOG_DEBUG, GF_LOG_CORE, ("Android vout RAW_Shutdown\n")); - rc->bitmap = NULL; -} - - -static GF_Err RAW_Flush(GF_VideoOutput *dr, GF_Window *dest) -{ - GF_LOG(GF_LOG_DEBUG, GF_LOG_CORE, ("Android vout RAW_Flush\n")); - return GF_OK; -} - -static GF_Err RAW_LockBackBuffer(GF_VideoOutput *dr, GF_VideoSurface *vi, Bool do_lock) -{ - RAWCTX; - int ret; - void * pixels; - - GF_LOG(GF_LOG_DEBUG, GF_LOG_CORE, ("Android vout RAW_LockBackBuffer: %d\n", do_lock)); - if (do_lock) { - if (!vi) return GF_BAD_PARAM; - GF_LOG(GF_LOG_DEBUG, GF_LOG_CORE, ("Android vout locked_data: %d\n", rc->locked_data)); - if (!rc->locked_data) - { - if ((ret = AndroidBitmap_lockPixels(rc->env, *(rc->bitmap), &pixels)) < 0) { - GF_LOG(GF_LOG_DEBUG, GF_LOG_CORE, ("Android vout lock failed\n")); - } - rc->locked_data = pixels; - } - GF_LOG(GF_LOG_DEBUG, GF_LOG_CORE, ("Android vout rc dims: %d:%d\n", rc->height, rc->width)); - vi->height = rc->height; - vi->width = rc->width; - vi->video_buffer = rc->locked_data; - vi->is_hardware_memory = 0; - vi->pitch_x = NBPP; - vi->pitch_y = NBPP * vi->width; - vi->pixel_format = RAW_OUT_PIXEL_FORMAT; - } - else - { - if (rc->locked_data) - { - AndroidBitmap_unlockPixels(rc->env, *(rc->bitmap)); - rc->locked_data = NULL; - } - } - return GF_OK; -} - -static GF_Err RAW_ProcessEvent(GF_VideoOutput *dr, GF_Event *evt) -{ - GF_LOG(GF_LOG_DEBUG, GF_LOG_CORE, ("Android vout RAW_ProcessEvent\n")); - if (evt) { - switch (evt->type) { - case GF_EVENT_SIZE: - //if (evt->setup.opengl_mode) return GF_OK; - return raw_resize(dr, evt->setup.width, evt->setup.height); - case GF_EVENT_VIDEO_SETUP: - return GF_OK; - } - } - return GF_OK; -} - -GF_VideoOutput *NewRawVideoOutput() -{ - AndroidContext *pCtx; - GF_VideoOutput *driv = (GF_VideoOutput *) gf_malloc(sizeof(GF_VideoOutput)); - memset(driv, 0, sizeof(GF_VideoOutput)); - GF_REGISTER_MODULE_INTERFACE(driv, GF_VIDEO_OUTPUT_INTERFACE, "Android Video Output", "gpac distribution") - - pCtx = gf_malloc(sizeof(AndroidContext)); - memset(pCtx, 0, sizeof(AndroidContext)); - - driv->opaque = pCtx; - - driv->Flush = RAW_Flush; - driv->LockBackBuffer = RAW_LockBackBuffer; - driv->Setup = RAW_Setup; - driv->Shutdown = RAW_Shutdown; - driv->ProcessEvent = RAW_ProcessEvent; - - driv->hw_caps = GF_VIDEO_HW_OPENGL; - - GF_LOG(GF_LOG_DEBUG, GF_LOG_CORE, ("Android vout init\n")); - return (void *)driv; -} - -void DeleteVideoOutput(void *ifce) -{ - AndroidContext *rc; - GF_VideoOutput *driv = (GF_VideoOutput *) ifce; - - RAW_Shutdown(driv); - rc = (AndroidContext *)driv->opaque; - gf_free(rc); - gf_free(driv); - - GF_LOG(GF_LOG_DEBUG, GF_LOG_CORE, ("Android vout deinit\n")); -} - -/*interface query*/ -GF_EXPORT -const u32 *QueryInterfaces() -{ - static u32 si [] = { - GF_VIDEO_OUTPUT_INTERFACE, - 0 - }; - return si; -} -/*interface create*/ -GF_BaseInterface *LoadInterface(u32 InterfaceType) -{ - if (InterfaceType == GF_VIDEO_OUTPUT_INTERFACE) return (GF_BaseInterface *) NewRawVideoOutput(); - return NULL; -} -/*interface destroy*/ -void ShutdownInterface(GF_BaseInterface *ifce) -{ - switch (ifce->InterfaceType) { - case GF_VIDEO_OUTPUT_INTERFACE: - DeleteVideoOutput((GF_VideoOutput *)ifce); - break; - } -} +/* + * GPAC - Multimedia Framework C SDK + * + * Copyright (c) ENST 2009- + * Authors: Jean Le Feuvre + * All rights reserved + * + * Created by NGO Van Luyen, Ivica ARSOV / ARTEMIS / Telecom SudParis /Institut TELECOM on Oct, 2010 + * + * This file is part of GPAC / Wrapper + * + * GPAC is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * GPAC 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; see the file COPYING. If not, write to + * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + * + */ + + +/*driver interfaces*/ +#include +#include +#include + +#include + +#include + +typedef struct +{ + JNIEnv * env; + jobject * bitmap; + u32 width, height; + void * locked_data; +} AndroidContext; + + +#define RAW_OUT_PIXEL_FORMAT GF_PIXEL_RGB_32 +#define NBPP 4 + +#define RAWCTX AndroidContext *rc = (AndroidContext *)dr->opaque + +static GF_Err raw_resize(GF_VideoOutput *dr, u32 w, u32 h) +{ + GF_LOG(GF_LOG_DEBUG, GF_LOG_CORE, ("Android vout raw_resize\n")); + return GF_OK; +} + +GF_Err RAW_Setup(GF_VideoOutput *dr, void *os_handle, void *os_display, u32 init_flags) +{ + AndroidBitmapInfo info; + RAWCTX; + void * pixels; + int ret; + + GF_LOG(GF_LOG_DEBUG, GF_LOG_CORE, ("Android vout RAW_Setup\n")); + + if (!rc->width) + { + rc->env = (JNIEnv *)os_handle; + rc->bitmap = (jobject *)os_display; + + AndroidBitmap_getInfo(rc->env, *(rc->bitmap), &info); + rc->width = info.width; + rc->height = info.height; + rc->locked_data = NULL; + } + else + { + rc->env = (JNIEnv *)os_handle; + rc->bitmap = (jobject *)os_display; + } + + GF_LOG(GF_LOG_DEBUG, GF_LOG_CORE, ("Android vout rc dims: %d:%d\n", rc->height, rc->width)); + + return GF_OK; +} + + +static void RAW_Shutdown(GF_VideoOutput *dr) +{ + RAWCTX; + GF_LOG(GF_LOG_DEBUG, GF_LOG_CORE, ("Android vout RAW_Shutdown\n")); + rc->bitmap = NULL; +} + + +static GF_Err RAW_Flush(GF_VideoOutput *dr, GF_Window *dest) +{ + GF_LOG(GF_LOG_DEBUG, GF_LOG_CORE, ("Android vout RAW_Flush\n")); + return GF_OK; +} + +static GF_Err RAW_LockBackBuffer(GF_VideoOutput *dr, GF_VideoSurface *vi, Bool do_lock) +{ + RAWCTX; + int ret; + void * pixels; + + GF_LOG(GF_LOG_DEBUG, GF_LOG_CORE, ("Android vout RAW_LockBackBuffer: %d\n", do_lock)); + if (do_lock) { + if (!vi) return GF_BAD_PARAM; + GF_LOG(GF_LOG_DEBUG, GF_LOG_CORE, ("Android vout locked_data: %d\n", rc->locked_data)); + if (!rc->locked_data) + { + if ((ret = AndroidBitmap_lockPixels(rc->env, *(rc->bitmap), &pixels)) < 0) { + GF_LOG(GF_LOG_DEBUG, GF_LOG_CORE, ("Android vout lock failed\n")); + } + rc->locked_data = pixels; + } + GF_LOG(GF_LOG_DEBUG, GF_LOG_CORE, ("Android vout rc dims: %d:%d\n", rc->height, rc->width)); + vi->height = rc->height; + vi->width = rc->width; + vi->video_buffer = rc->locked_data; + vi->is_hardware_memory = 0; + vi->pitch_x = NBPP; + vi->pitch_y = NBPP * vi->width; + vi->pixel_format = RAW_OUT_PIXEL_FORMAT; + } + else + { + if (rc->locked_data) + { + AndroidBitmap_unlockPixels(rc->env, *(rc->bitmap)); + rc->locked_data = NULL; + } + } + return GF_OK; +} + +static GF_Err RAW_ProcessEvent(GF_VideoOutput *dr, GF_Event *evt) +{ + GF_LOG(GF_LOG_DEBUG, GF_LOG_CORE, ("Android vout RAW_ProcessEvent\n")); + if (evt) { + switch (evt->type) { + case GF_EVENT_SIZE: + //if (evt->setup.opengl_mode) return GF_OK; + return raw_resize(dr, evt->setup.width, evt->setup.height); + case GF_EVENT_VIDEO_SETUP: + return GF_OK; + } + } + return GF_OK; +} + +GF_VideoOutput *NewRawVideoOutput() +{ + AndroidContext *pCtx; + GF_VideoOutput *driv = (GF_VideoOutput *) gf_malloc(sizeof(GF_VideoOutput)); + memset(driv, 0, sizeof(GF_VideoOutput)); + GF_REGISTER_MODULE_INTERFACE(driv, GF_VIDEO_OUTPUT_INTERFACE, "Android Video Output", "gpac distribution") + + pCtx = gf_malloc(sizeof(AndroidContext)); + memset(pCtx, 0, sizeof(AndroidContext)); + + driv->opaque = pCtx; + + driv->Flush = RAW_Flush; + driv->LockBackBuffer = RAW_LockBackBuffer; + driv->Setup = RAW_Setup; + driv->Shutdown = RAW_Shutdown; + driv->ProcessEvent = RAW_ProcessEvent; + + driv->hw_caps = GF_VIDEO_HW_OPENGL; + + GF_LOG(GF_LOG_DEBUG, GF_LOG_CORE, ("Android vout init\n")); + return (void *)driv; +} + +void DeleteVideoOutput(void *ifce) +{ + AndroidContext *rc; + GF_VideoOutput *driv = (GF_VideoOutput *) ifce; + + RAW_Shutdown(driv); + rc = (AndroidContext *)driv->opaque; + gf_free(rc); + gf_free(driv); + + GF_LOG(GF_LOG_DEBUG, GF_LOG_CORE, ("Android vout deinit\n")); +} + +/*interface query*/ +GF_EXPORT +const u32 *QueryInterfaces() +{ + static u32 si [] = { + GF_VIDEO_OUTPUT_INTERFACE, + 0 + }; + return si; +} +/*interface create*/ +GF_BaseInterface *LoadInterface(u32 InterfaceType) +{ + if (InterfaceType == GF_VIDEO_OUTPUT_INTERFACE) return (GF_BaseInterface *) NewRawVideoOutput(); + return NULL; +} +/*interface destroy*/ +void ShutdownInterface(GF_BaseInterface *ifce) +{ + switch (ifce->InterfaceType) { + case GF_VIDEO_OUTPUT_INTERFACE: + DeleteVideoOutput((GF_VideoOutput *)ifce); + break; + } +} diff --git a/modules/droid_out/droid_vout.c b/modules/droid_out/droid_vout.c index dcdd350..ac199e9 100644 --- a/modules/droid_out/droid_vout.c +++ b/modules/droid_out/droid_vout.c @@ -1,664 +1,664 @@ -/* - * GPAC - Multimedia Framework C SDK - * - * Copyright (c) ENST 2009- - * Authors: Jean Le Feuvre - * All rights reserved - * - * Created by NGO Van Luyen, Ivica ARSOV / ARTEMIS / Telecom SudParis /Institut TELECOM on Oct, 2010 - * - * This file is part of GPAC / Wrapper - * - * GPAC is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * GPAC 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -/*driver interfaces*/ -#include -#include -#include - -#include - -#include -#include - -#include - -#define TAG "DROID_VIDEO" - -#define LOG __android_log_print - -#ifdef PI -#undef PI -#endif - -#define PI 3.1415926535897932f - -/* Uncomment the next line if you want to debug */ -/* #define DROID_EXTREME_LOGS */ - -typedef struct -{ - u32 width, height; - void * locked_data; - u8 out_3d_type; - - u32 tex_width, tex_height; - - GLuint texID; - GLuint framebuff; - GLuint depthbuff; - - GLubyte* texData; - - u8 draw_texture; - u8 non_power_two; -} AndroidContext; - - -#define RAW_OUT_PIXEL_FORMAT GF_PIXEL_RGBA -#define NBPP 4 - -#define RAWCTX AndroidContext *rc = (AndroidContext *)dr->opaque - -//#define GLES_FRAMEBUFFER_TEST - -#ifdef GLES_FRAMEBUFFER_TEST -#warning "Using FrameBuffer" -#endif - -void initGL(AndroidContext *rc) -{ - char* ext; - - LOG( ANDROID_LOG_DEBUG, TAG, "Android InitGL"); - - ext = (char*)glGetString(GL_VENDOR); - LOG( ANDROID_LOG_INFO, TAG, "OpenGL ES Vendor: %s", ext); - - ext = (char*)glGetString(GL_RENDERER); - LOG( ANDROID_LOG_INFO, TAG, "OpenGL ES Renderer: %s", ext); - - ext = (char*)glGetString(GL_VERSION); - LOG( ANDROID_LOG_INFO, TAG, "OpenGL ES Version: %s", ext); - - ext = (char*)glGetString(GL_EXTENSIONS); - LOG( ANDROID_LOG_INFO, TAG, "OpenGL ES Extensions: %s", ext); - - if ( strstr(ext, "GL_OES_draw_texture") ) - { - rc->draw_texture = 1; - LOG( ANDROID_LOG_INFO, TAG, "Using GL_OES_draw_texture"); - } - if ( strstr(ext, "GL_ARB_texture_non_power_of_two") ) - { - rc->non_power_two = 0; - LOG( ANDROID_LOG_INFO, TAG, "Using GL_ARB_texture_non_power_of_two"); - } - - /* Enable smooth shading */ - glShadeModel(GL_SMOOTH); - - /* Set the background black */ - glClearColor(0.0f, 0.0f, 0.0f, 0.0f); - - /* Depth buffer setup */ - glClearDepthf(1.0f); - - /* Enables Depth Testing */ - glEnable(GL_DEPTH_TEST); - - /* The Type Of Depth Test To Do */ - glDepthFunc(GL_LEQUAL); - - /* Really Nice Perspective Calculations */ - glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); - - glDisable(GL_CULL_FACE | GL_NORMALIZE | GL_LIGHTING | GL_BLEND | GL_FOG | GL_COLOR_MATERIAL | GL_TEXTURE_2D); -} - -void gluPerspective(GLfloat fovy, GLfloat aspect, - GLfloat zNear, GLfloat zFar) -{ - GLfloat xmin, xmax, ymin, ymax; - - ymax = zNear * (GLfloat)tan(fovy * PI / 360); - ymin = -ymax; - xmin = ymin * aspect; - xmax = ymax * aspect; - - glFrustumx((GLfixed)(xmin * 65536), (GLfixed)(xmax * 65536), - (GLfixed)(ymin * 65536), (GLfixed)(ymax * 65536), - (GLfixed)(zNear * 65536), (GLfixed)(zFar * 65536)); -} - -void resizeWindow(AndroidContext *rc) -{ - LOG( ANDROID_LOG_VERBOSE, TAG, "resizeWindow : start"); - /* Height / width ration */ - GLfloat ratio; - - /* Protect against a divide by zero */ - if (rc->height==0) - { - rc->height=1; - } - - ratio=(GLfloat)rc->width/(GLfloat)rc->height; - - /* Setup our viewport. */ - glViewport(0, 0, (GLsizei)rc->width, (GLsizei)rc->height); - - /* change to the projection matrix and set our viewing volume. */ - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - - /* Set our perspective */ - glOrthox(0, INT2FIX(rc->width), 0, INT2FIX(rc->height), INT2FIX(-1), INT2FIX(1)); - - /* Make sure we're chaning the model view and not the projection */ - glMatrixMode(GL_MODELVIEW); - - /* Reset The View */ - glLoadIdentity(); - LOG( ANDROID_LOG_VERBOSE, TAG, "resizeWindow : end"); -} - -void drawGLScene(AndroidContext *rc) -{ -#ifdef DROID_EXTREME_LOGS - LOG( ANDROID_LOG_VERBOSE, TAG, "drawGLScene : start"); -#endif /* DROID_EXTREME_LOGS */ - GLfloat vertices[4][3]; - GLfloat texcoord[4][2]; -// int i, j; - - float rgba[4]; - -#ifdef GLES_FRAMEBUFFER_TEST - glBindFramebufferOES(GL_FRAMEBUFFER_OES, 0); -#endif - - // Reset states - rgba[0] = rgba[1] = rgba[2] = 0.f; - rgba[0] = 1.f; - glColor4f(1.f, 1.f, 1.f, 1.f); - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, rgba); - glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, rgba); - glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, rgba); - glDisable(GL_CULL_FACE | GL_NORMALIZE | GL_LIGHTING | GL_BLEND | GL_FOG | GL_COLOR_MATERIAL | GL_TEXTURE_2D); - - /* Clear The Screen And The Depth Buffer */ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - //glEnable(GL_BLEND); - //glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - - glEnable(GL_TEXTURE_2D); - glBindTexture( GL_TEXTURE_2D, rc->texID); - glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); - glTexEnvx(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - -// for ( i = 0; i < rc->height/2; i++ ) -// for ( j = 0; j < rc->width; j++ ) -// rc->texData[ i*rc->width*NBPP + j*NBPP + 3] = 200; - -// memset(rc->texData, 255, 4 * rc->width * rc->height ); -#ifndef GLES_FRAMEBUFFER_TEST - glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, rc->tex_width, rc->tex_height, 0, - GL_RGBA, GL_UNSIGNED_BYTE, rc->texData ); -#endif - - if ( rc->draw_texture ) - { - int cropRect[4] = {0,rc->height,rc->width,-rc->height}; - glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, cropRect); - - glDrawTexsOES(0, 0, 0, rc->width, rc->height); - } - else - { - /* Enable VERTEX array */ - glEnableClientState(GL_VERTEX_ARRAY); - glEnableClientState(GL_TEXTURE_COORD_ARRAY); - - /* Setup pointer to VERTEX array */ - glVertexPointer(3, GL_FLOAT, 0, vertices); - glTexCoordPointer(2, GL_FLOAT, 0, texcoord); - - /* Move Left 1.5 Units And Into The Screen 6.0 */ - glLoadIdentity(); - //glTranslatef(0.0f, 0.0f, -3.3f); - //glTranslatef(0.0f, 0.0f, -2.3f); - - /* Top Right Of The Quad */ - vertices[0][0]=rc->tex_width; vertices[0][1]=rc->tex_height; vertices[0][2]=0.0f; - texcoord[0][0]=1.f; texcoord[0][1]=0.f; - /* Top Left Of The Quad */ - vertices[1][0]=0.f; vertices[1][1]=rc->tex_height; vertices[1][2]=0.0f; - texcoord[1][0]=0.f; texcoord[1][1]=0.f; - /* Bottom Left Of The Quad */ - vertices[2][0]=rc->tex_width; vertices[2][1]=0.f; vertices[2][2]=0.0f; - texcoord[2][0]=1.f; texcoord[2][1]=1.f; - /* Bottom Right Of The Quad */ - vertices[3][0]=0.f; vertices[3][1]=0.f; vertices[3][2]=0.0f; - texcoord[3][0]=0.f; texcoord[3][1]=1.f; - - /* Drawing using triangle strips, draw triangles using 4 vertices */ - glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); - - /* Disable vertex array */ - glDisableClientState(GL_VERTEX_ARRAY); - glDisableClientState(GL_TEXTURE_COORD_ARRAY); - } - - glDisable(GL_TEXTURE_2D); - - /* Flush all drawings */ - glFinish(); -#ifdef GLES_FRAMEBUFFER_TEST - glBindFramebufferOES(GL_FRAMEBUFFER_OES, rc->framebuff); -#endif -#ifdef DROID_EXTREME_LOGS - LOG( ANDROID_LOG_VERBOSE, TAG, "drawGLScene : end"); -#endif /* DROID_EXTREME_LOGS */ -} - -int releaseTexture(AndroidContext *rc) -{ - if (!rc) - return 0; - LOG( ANDROID_LOG_DEBUG, TAG, "Android Delete Texture"); - - if ( rc->texID >= 0 ) - { - glDeleteTextures(1, &(rc->texID)); - rc->texID = -1; - } - if (rc->texData) - { - gf_free(rc->texData); - rc->texData = NULL; - } - LOG( ANDROID_LOG_VERBOSE, TAG, "Android Delete Texture DONE"); - return 0; -} - -int createTexture(AndroidContext *rc) -{ - if (!rc) - return 0; - if ( rc->texID >= 0 ) - releaseTexture(rc); - - LOG( ANDROID_LOG_INFO, TAG, "Android Create Texture Size: WxH: %dx%d", - rc->tex_width, rc->tex_height); - - glGenTextures( 1, &(rc->texID) ); - - rc->texData = (GLubyte*)gf_malloc( 4 * rc->tex_width * rc->tex_height ); - memset(rc->texData, 255, 4 * rc->tex_width * rc->tex_height ); - //memset(data, 0, 4 * width * height/2 ); - - glBindTexture( GL_TEXTURE_2D, rc->texID); - glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); - glTexEnvx(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - - glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, rc->tex_width, rc->tex_height, 0, - GL_RGBA, GL_UNSIGNED_BYTE, NULL/*rc->texData*/ ); - - glBindTexture( GL_TEXTURE_2D, 0); - LOG( ANDROID_LOG_VERBOSE, TAG, "Android Create Texture DONE"); - return 0; -} - -#ifdef GLES_FRAMEBUFFER_TEST - -int releaseFrameBuffer(AndroidContext *rc) -{ - LOG( ANDROID_LOG_DEBUG, TAG, "Android Delete FrameBuffer"); - - glBindFramebufferOES(GL_FRAMEBUFFER_OES, 0); - - if ( rc->framebuff >= 0 ) - { - glDeleteFramebuffersOES(1, &(rc->framebuff)); - rc->framebuff = -1; - } - if ( rc->depthbuff >= 0 ) - { - glDeleteRenderbuffersOES(1, &(rc->depthbuff)); - rc->depthbuff = -1; - } -} - -int createFrameBuffer(AndroidContext *rc) -{ - int backingWidth; - int backingHeight; - int res; - - if ( rc->framebuff >= 0 ) - releaseFrameBuffer(rc); - - LOG( ANDROID_LOG_DEBUG, TAG, "Android Create FrameBuffer")); - - glGenFramebuffersOES(1, &(rc->framebuff)); - glBindFramebufferOES(GL_FRAMEBUFFER_OES, rc->framebuff); - -// glGenRenderbuffersOES(1, &(rc->depthbuff)); -// glBindRenderbufferOES(GL_RENDERBUFFER_OES, rc->depthbuff); - -// glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &backingWidth); -// glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &backingHeight); - -// LOG( ANDROID_LOG_ERROR, TAG, "Android Depth Buffer Size: %dx%d\n", backingWidth, backingHeight)); - -// glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_DEPTH_COMPONENT16_OES, rc->width, rc->height); - -// glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT_OES, -// GL_RENDERBUFFER_OES, rc->depthbuff); - - glFramebufferTexture2DOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, - GL_TEXTURE_2D, rc->texID, 0); - - if ( (res=(int)glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES)) != GL_FRAMEBUFFER_COMPLETE_OES ) - { - LOG( ANDROID_LOG_ERROR, TAG, "Android failed to make complete framebuffer object:"); - switch (res) - { - case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES: - LOG( ANDROID_LOG_ERROR, TAG, "GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES"); - break; - case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_OES: - LOG( ANDROID_LOG_ERROR, TAG, "GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES"); - break; - case GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_OES: - LOG( ANDROID_LOG_ERROR, TAG, "GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_OES"); - break; - case GL_FRAMEBUFFER_INCOMPLETE_FORMATS_OES: - LOG( ANDROID_LOG_ERROR, TAG, "GL_FRAMEBUFFER_INCOMPLETE_FORMATS_OES"); - break; - case GL_FRAMEBUFFER_UNSUPPORTED_OES: - LOG( ANDROID_LOG_ERROR, TAG, "GL_FRAMEBUFFER_UNSUPPORTED_OES"); - break; - default : - LOG( ANDROID_LOG_ERROR, TAG, "Unknown error: %d", res); - break; - } - - return 1; - } - - //glBindFramebufferOES(GL_FRAMEBUFFER_OES, 0); - - return 0; -} - -#endif - -u32 find_pow_2(u32 num) -{ - u32 res = 1; - while (res < num) - res *= 2; - return res; -} - -static GF_Err droid_Resize(GF_VideoOutput *dr, u32 w, u32 h) -{ - RAWCTX; - LOG( ANDROID_LOG_DEBUG, TAG, "Android Resize: %dx%d", w, h); - - rc->width = w; - rc->height = h; - - if ( rc->non_power_two ) - { - rc->tex_width = rc->width; - rc->tex_height = rc->height; - } - else - { - rc->tex_width = find_pow_2(rc->width); - rc->tex_height = find_pow_2(rc->height); - } - - resizeWindow(rc); - - if ( rc->out_3d_type == 0 ) - { - createTexture(rc); -#ifdef GLES_FRAMEBUFFER_TEST - createFrameBuffer(rc); -#endif - } - LOG( ANDROID_LOG_VERBOSE, TAG, "Android Resize DONE", w, h); - return GF_OK; -} - -GF_Err droid_Setup(GF_VideoOutput *dr, void *os_handle, void *os_display, u32 init_flags) -{ - RAWCTX; - void * pixels; - int ret; - - LOG( ANDROID_LOG_DEBUG, TAG, "Android Setup: %d", init_flags); - -#ifndef GLES_FRAMEBUFFER_TEST - if ( rc->out_3d_type == 0 ) -#endif - initGL(rc); - LOG( ANDROID_LOG_VERBOSE, TAG, "Android Setup DONE"); - return GF_OK; -} - - -static void droid_Shutdown(GF_VideoOutput *dr) -{ - RAWCTX; - LOG( ANDROID_LOG_DEBUG, TAG, "Android Shutdown\n"); - - releaseTexture(rc); -#ifdef GLES_FRAMEBUFFER_TEST - releaseFrameBuffer(rc); -#endif - LOG( ANDROID_LOG_VERBOSE, TAG, "Android Shutdown DONE"); -} - - -static GF_Err droid_Flush(GF_VideoOutput *dr, GF_Window *dest) -{ - RAWCTX; -#ifdef DROID_EXTREME_LOGS - LOG( ANDROID_LOG_VERBOSE, TAG, "Android Flush\n"); -#endif /* DROID_EXTREME_LOGS */ - -#ifndef GLES_FRAMEBUFFER_TEST - if ( rc->out_3d_type == 0 ) -#endif - drawGLScene(rc); -#ifdef DROID_EXTREME_LOGS - LOG( ANDROID_LOG_VERBOSE, TAG, "Android Flush DONE"); -#endif /* DROID_EXTREME_LOGS */ - return GF_OK; -} - -static GF_Err droid_LockBackBuffer(GF_VideoOutput *dr, GF_VideoSurface *vi, Bool do_lock) -{ - RAWCTX; - int ret; - void * pixels; - int i,j,t; -#ifdef DROID_EXTREME_LOGS - LOG( ANDROID_LOG_VERBOSE, TAG, "Android LockBackBuffer: %d", do_lock); -#endif /* DROID_EXTREME_LOGS */ - if (do_lock) { - if (!vi) return GF_BAD_PARAM; - - if ( rc->out_3d_type != 0 ) - return GF_NOT_SUPPORTED; - - vi->height = rc->height; - vi->width = rc->width; - vi->video_buffer = rc->texData; - vi->is_hardware_memory = 0; - vi->pitch_x = NBPP; - vi->pitch_y = NBPP * rc->tex_width; - vi->pixel_format = RAW_OUT_PIXEL_FORMAT; - } - else - { - if (rc->locked_data) - { - //glBindTexture( GL_TEXTURE_2D, rc->texID); - //glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); - //glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); - - //glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, rc->width, rc->height, 0, - // GL_RGBA, GL_UNSIGNED_BYTE, rc->locked_data ); - } - } -#ifdef DROID_EXTREME_LOGS - LOG( ANDROID_LOG_VERBOSE, TAG, "Android LockBackBuffer DONE"); -#endif /* DROID_EXTREME_LOGS */ - return GF_OK; -} - -static GF_Err droid_ProcessEvent(GF_VideoOutput *dr, GF_Event *evt) -{ - RAWCTX; - - if (evt) { - switch (evt->type) { - case GF_EVENT_SIZE: - LOG( ANDROID_LOG_VERBOSE, TAG, "GF_EVENT_SIZE( %d x %d)", - evt->setup.width, evt->setup.height); - //if (evt->setup.opengl_mode) return GF_OK; - return droid_Resize(dr, evt->setup.width, evt->setup.height); - case GF_EVENT_VIDEO_SETUP: - LOG( ANDROID_LOG_DEBUG, TAG, "Android OpenGL mode: %d", evt->setup.opengl_mode); - switch (evt->setup.opengl_mode) - { - case 0: - rc->out_3d_type = 0; -// initGL(rc); - droid_Resize(dr, evt->setup.width, evt->setup.height); - return GF_OK; - case 1: - rc->out_3d_type = 1; - droid_Resize(dr, evt->setup.width, evt->setup.height); - return GF_OK; - case 2: - rc->out_3d_type = 2; - droid_Resize(dr, evt->setup.width, evt->setup.height); - return GF_OK; - case GF_EVENT_SET_CURSOR: - LOG( ANDROID_LOG_VERBOSE, TAG, "GF_EVENT_SET_CURSOR"); - return GF_OK; - case GF_EVENT_SET_CAPTION: - LOG( ANDROID_LOG_VERBOSE, TAG, "GF_EVENT_SET_CAPTION"); - return GF_OK; - case GF_EVENT_SHOWHIDE: - LOG( ANDROID_LOG_VERBOSE, TAG, "GF_EVENT_SHOWHIDE"); - return GF_OK; - default: - LOG( ANDROID_LOG_DEBUG, TAG, "Process Unknown Event: %d", evt->type); - return GF_OK; - } - break; - } - } - return GF_OK; -} - -GF_VideoOutput *NewRawVideoOutput() -{ - AndroidContext *pCtx; - GF_VideoOutput *driv = (GF_VideoOutput *) gf_malloc(sizeof(GF_VideoOutput)); - LOG( ANDROID_LOG_INFO, TAG, "Android Video Initialization in progress..."); - memset(driv, 0, sizeof(GF_VideoOutput)); - GF_REGISTER_MODULE_INTERFACE(driv, GF_VIDEO_OUTPUT_INTERFACE, "Android Video Output", "gpac distribution") - - pCtx = gf_malloc(sizeof(AndroidContext)); - memset(pCtx, 0, sizeof(AndroidContext)); - - pCtx->texID = -1; - pCtx->framebuff = -1; - pCtx->depthbuff = -1; - driv->opaque = pCtx; - - driv->Flush = droid_Flush; - driv->LockBackBuffer = droid_LockBackBuffer; - driv->Setup = droid_Setup; - driv->Shutdown = droid_Shutdown; - driv->ProcessEvent = droid_ProcessEvent; - - driv->max_screen_width = 1024; - driv->max_screen_height = 1024; - - driv->hw_caps = GF_VIDEO_HW_OPENGL;// | GF_VIDEO_HW_OPENGL_OFFSCREEN_ALPHA;//GF_VIDEO_HW_DIRECT_ONLY;// - - LOG( ANDROID_LOG_INFO, TAG, "Android Video Init Done.\n"); - return (void *)driv; -} - -void DeleteVideoOutput(void *ifce) -{ - AndroidContext *rc; - GF_VideoOutput *driv = (GF_VideoOutput *) ifce; - if (!ifce) - return; - droid_Shutdown(driv); - rc = (AndroidContext *)driv->opaque; - if (rc) - gf_free(rc); - driv->opaque = NULL; - gf_free(driv); - LOG( ANDROID_LOG_DEBUG, TAG, "Android vout deinit\n"); -} - -/*interface query*/ -GF_EXPORT -const u32 *QueryInterfaces() -{ - static u32 si [] = { - GF_VIDEO_OUTPUT_INTERFACE, - 0 - }; - return si; -} -/*interface create*/ -GF_BaseInterface *LoadInterface(u32 InterfaceType) -{ - if (InterfaceType == GF_VIDEO_OUTPUT_INTERFACE) return (GF_BaseInterface *) NewRawVideoOutput(); - return NULL; -} -/*interface destroy*/ -void ShutdownInterface(GF_BaseInterface *ifce) -{ - switch (ifce->InterfaceType) { - case GF_VIDEO_OUTPUT_INTERFACE: - DeleteVideoOutput((GF_VideoOutput *)ifce); - break; - } -} +/* + * GPAC - Multimedia Framework C SDK + * + * Copyright (c) ENST 2009- + * Authors: Jean Le Feuvre + * All rights reserved + * + * Created by NGO Van Luyen, Ivica ARSOV / ARTEMIS / Telecom SudParis /Institut TELECOM on Oct, 2010 + * + * This file is part of GPAC / Wrapper + * + * GPAC is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * GPAC 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; see the file COPYING. If not, write to + * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + * + */ + +/*driver interfaces*/ +#include +#include +#include + +#include + +#include +#include + +#include + +#define TAG "DROID_VIDEO" + +#define LOG __android_log_print + +#ifdef PI +#undef PI +#endif + +#define PI 3.1415926535897932f + +/* Uncomment the next line if you want to debug */ +/* #define DROID_EXTREME_LOGS */ + +typedef struct +{ + u32 width, height; + void * locked_data; + u8 out_3d_type; + + u32 tex_width, tex_height; + + GLuint texID; + GLuint framebuff; + GLuint depthbuff; + + GLubyte* texData; + + u8 draw_texture; + u8 non_power_two; +} AndroidContext; + + +#define RAW_OUT_PIXEL_FORMAT GF_PIXEL_RGBA +#define NBPP 4 + +#define RAWCTX AndroidContext *rc = (AndroidContext *)dr->opaque + +//#define GLES_FRAMEBUFFER_TEST + +#ifdef GLES_FRAMEBUFFER_TEST +#warning "Using FrameBuffer" +#endif + +void initGL(AndroidContext *rc) +{ + char* ext; + + LOG( ANDROID_LOG_DEBUG, TAG, "Android InitGL"); + + ext = (char*)glGetString(GL_VENDOR); + LOG( ANDROID_LOG_INFO, TAG, "OpenGL ES Vendor: %s", ext); + + ext = (char*)glGetString(GL_RENDERER); + LOG( ANDROID_LOG_INFO, TAG, "OpenGL ES Renderer: %s", ext); + + ext = (char*)glGetString(GL_VERSION); + LOG( ANDROID_LOG_INFO, TAG, "OpenGL ES Version: %s", ext); + + ext = (char*)glGetString(GL_EXTENSIONS); + LOG( ANDROID_LOG_INFO, TAG, "OpenGL ES Extensions: %s", ext); + + if ( strstr(ext, "GL_OES_draw_texture") ) + { + rc->draw_texture = 1; + LOG( ANDROID_LOG_INFO, TAG, "Using GL_OES_draw_texture"); + } + if ( strstr(ext, "GL_ARB_texture_non_power_of_two") ) + { + rc->non_power_two = 0; + LOG( ANDROID_LOG_INFO, TAG, "Using GL_ARB_texture_non_power_of_two"); + } + + /* Enable smooth shading */ + glShadeModel(GL_SMOOTH); + + /* Set the background black */ + glClearColor(0.0f, 0.0f, 0.0f, 0.0f); + + /* Depth buffer setup */ + glClearDepthf(1.0f); + + /* Enables Depth Testing */ + glEnable(GL_DEPTH_TEST); + + /* The Type Of Depth Test To Do */ + glDepthFunc(GL_LEQUAL); + + /* Really Nice Perspective Calculations */ + glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); + + glDisable(GL_CULL_FACE | GL_NORMALIZE | GL_LIGHTING | GL_BLEND | GL_FOG | GL_COLOR_MATERIAL | GL_TEXTURE_2D); +} + +void gluPerspective(GLfloat fovy, GLfloat aspect, + GLfloat zNear, GLfloat zFar) +{ + GLfloat xmin, xmax, ymin, ymax; + + ymax = zNear * (GLfloat)tan(fovy * PI / 360); + ymin = -ymax; + xmin = ymin * aspect; + xmax = ymax * aspect; + + glFrustumx((GLfixed)(xmin * 65536), (GLfixed)(xmax * 65536), + (GLfixed)(ymin * 65536), (GLfixed)(ymax * 65536), + (GLfixed)(zNear * 65536), (GLfixed)(zFar * 65536)); +} + +void resizeWindow(AndroidContext *rc) +{ + LOG( ANDROID_LOG_VERBOSE, TAG, "resizeWindow : start"); + /* Height / width ration */ + GLfloat ratio; + + /* Protect against a divide by zero */ + if (rc->height==0) + { + rc->height=1; + } + + ratio=(GLfloat)rc->width/(GLfloat)rc->height; + + /* Setup our viewport. */ + glViewport(0, 0, (GLsizei)rc->width, (GLsizei)rc->height); + + /* change to the projection matrix and set our viewing volume. */ + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + + /* Set our perspective */ + glOrthox(0, INT2FIX(rc->width), 0, INT2FIX(rc->height), INT2FIX(-1), INT2FIX(1)); + + /* Make sure we're chaning the model view and not the projection */ + glMatrixMode(GL_MODELVIEW); + + /* Reset The View */ + glLoadIdentity(); + LOG( ANDROID_LOG_VERBOSE, TAG, "resizeWindow : end"); +} + +void drawGLScene(AndroidContext *rc) +{ +#ifdef DROID_EXTREME_LOGS + LOG( ANDROID_LOG_VERBOSE, TAG, "drawGLScene : start"); +#endif /* DROID_EXTREME_LOGS */ + GLfloat vertices[4][3]; + GLfloat texcoord[4][2]; +// int i, j; + + float rgba[4]; + +#ifdef GLES_FRAMEBUFFER_TEST + glBindFramebufferOES(GL_FRAMEBUFFER_OES, 0); +#endif + + // Reset states + rgba[0] = rgba[1] = rgba[2] = 0.f; + rgba[0] = 1.f; + glColor4f(1.f, 1.f, 1.f, 1.f); + glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, rgba); + glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, rgba); + glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, rgba); + glDisable(GL_CULL_FACE | GL_NORMALIZE | GL_LIGHTING | GL_BLEND | GL_FOG | GL_COLOR_MATERIAL | GL_TEXTURE_2D); + + /* Clear The Screen And The Depth Buffer */ + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + //glEnable(GL_BLEND); + //glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + glEnable(GL_TEXTURE_2D); + glBindTexture( GL_TEXTURE_2D, rc->texID); + glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); + glTexEnvx(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + +// for ( i = 0; i < rc->height/2; i++ ) +// for ( j = 0; j < rc->width; j++ ) +// rc->texData[ i*rc->width*NBPP + j*NBPP + 3] = 200; + +// memset(rc->texData, 255, 4 * rc->width * rc->height ); +#ifndef GLES_FRAMEBUFFER_TEST + glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, rc->tex_width, rc->tex_height, 0, + GL_RGBA, GL_UNSIGNED_BYTE, rc->texData ); +#endif + + if ( rc->draw_texture ) + { + int cropRect[4] = {0,rc->height,rc->width,-rc->height}; + glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, cropRect); + + glDrawTexsOES(0, 0, 0, rc->width, rc->height); + } + else + { + /* Enable VERTEX array */ + glEnableClientState(GL_VERTEX_ARRAY); + glEnableClientState(GL_TEXTURE_COORD_ARRAY); + + /* Setup pointer to VERTEX array */ + glVertexPointer(3, GL_FLOAT, 0, vertices); + glTexCoordPointer(2, GL_FLOAT, 0, texcoord); + + /* Move Left 1.5 Units And Into The Screen 6.0 */ + glLoadIdentity(); + //glTranslatef(0.0f, 0.0f, -3.3f); + //glTranslatef(0.0f, 0.0f, -2.3f); + + /* Top Right Of The Quad */ + vertices[0][0]=rc->tex_width; vertices[0][1]=rc->tex_height; vertices[0][2]=0.0f; + texcoord[0][0]=1.f; texcoord[0][1]=0.f; + /* Top Left Of The Quad */ + vertices[1][0]=0.f; vertices[1][1]=rc->tex_height; vertices[1][2]=0.0f; + texcoord[1][0]=0.f; texcoord[1][1]=0.f; + /* Bottom Left Of The Quad */ + vertices[2][0]=rc->tex_width; vertices[2][1]=0.f; vertices[2][2]=0.0f; + texcoord[2][0]=1.f; texcoord[2][1]=1.f; + /* Bottom Right Of The Quad */ + vertices[3][0]=0.f; vertices[3][1]=0.f; vertices[3][2]=0.0f; + texcoord[3][0]=0.f; texcoord[3][1]=1.f; + + /* Drawing using triangle strips, draw triangles using 4 vertices */ + glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); + + /* Disable vertex array */ + glDisableClientState(GL_VERTEX_ARRAY); + glDisableClientState(GL_TEXTURE_COORD_ARRAY); + } + + glDisable(GL_TEXTURE_2D); + + /* Flush all drawings */ + glFinish(); +#ifdef GLES_FRAMEBUFFER_TEST + glBindFramebufferOES(GL_FRAMEBUFFER_OES, rc->framebuff); +#endif +#ifdef DROID_EXTREME_LOGS + LOG( ANDROID_LOG_VERBOSE, TAG, "drawGLScene : end"); +#endif /* DROID_EXTREME_LOGS */ +} + +int releaseTexture(AndroidContext *rc) +{ + if (!rc) + return 0; + LOG( ANDROID_LOG_DEBUG, TAG, "Android Delete Texture"); + + if ( rc->texID >= 0 ) + { + glDeleteTextures(1, &(rc->texID)); + rc->texID = -1; + } + if (rc->texData) + { + gf_free(rc->texData); + rc->texData = NULL; + } + LOG( ANDROID_LOG_VERBOSE, TAG, "Android Delete Texture DONE"); + return 0; +} + +int createTexture(AndroidContext *rc) +{ + if (!rc) + return 0; + if ( rc->texID >= 0 ) + releaseTexture(rc); + + LOG( ANDROID_LOG_INFO, TAG, "Android Create Texture Size: WxH: %dx%d", + rc->tex_width, rc->tex_height); + + glGenTextures( 1, &(rc->texID) ); + + rc->texData = (GLubyte*)gf_malloc( 4 * rc->tex_width * rc->tex_height ); + memset(rc->texData, 255, 4 * rc->tex_width * rc->tex_height ); + //memset(data, 0, 4 * width * height/2 ); + + glBindTexture( GL_TEXTURE_2D, rc->texID); + glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); + glTexEnvx(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + + glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, rc->tex_width, rc->tex_height, 0, + GL_RGBA, GL_UNSIGNED_BYTE, NULL/*rc->texData*/ ); + + glBindTexture( GL_TEXTURE_2D, 0); + LOG( ANDROID_LOG_VERBOSE, TAG, "Android Create Texture DONE"); + return 0; +} + +#ifdef GLES_FRAMEBUFFER_TEST + +int releaseFrameBuffer(AndroidContext *rc) +{ + LOG( ANDROID_LOG_DEBUG, TAG, "Android Delete FrameBuffer"); + + glBindFramebufferOES(GL_FRAMEBUFFER_OES, 0); + + if ( rc->framebuff >= 0 ) + { + glDeleteFramebuffersOES(1, &(rc->framebuff)); + rc->framebuff = -1; + } + if ( rc->depthbuff >= 0 ) + { + glDeleteRenderbuffersOES(1, &(rc->depthbuff)); + rc->depthbuff = -1; + } +} + +int createFrameBuffer(AndroidContext *rc) +{ + int backingWidth; + int backingHeight; + int res; + + if ( rc->framebuff >= 0 ) + releaseFrameBuffer(rc); + + LOG( ANDROID_LOG_DEBUG, TAG, "Android Create FrameBuffer")); + + glGenFramebuffersOES(1, &(rc->framebuff)); + glBindFramebufferOES(GL_FRAMEBUFFER_OES, rc->framebuff); + +// glGenRenderbuffersOES(1, &(rc->depthbuff)); +// glBindRenderbufferOES(GL_RENDERBUFFER_OES, rc->depthbuff); + +// glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &backingWidth); +// glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &backingHeight); + +// LOG( ANDROID_LOG_ERROR, TAG, "Android Depth Buffer Size: %dx%d\n", backingWidth, backingHeight)); + +// glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_DEPTH_COMPONENT16_OES, rc->width, rc->height); + +// glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT_OES, +// GL_RENDERBUFFER_OES, rc->depthbuff); + + glFramebufferTexture2DOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, + GL_TEXTURE_2D, rc->texID, 0); + + if ( (res=(int)glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES)) != GL_FRAMEBUFFER_COMPLETE_OES ) + { + LOG( ANDROID_LOG_ERROR, TAG, "Android failed to make complete framebuffer object:"); + switch (res) + { + case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES: + LOG( ANDROID_LOG_ERROR, TAG, "GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES"); + break; + case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_OES: + LOG( ANDROID_LOG_ERROR, TAG, "GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES"); + break; + case GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_OES: + LOG( ANDROID_LOG_ERROR, TAG, "GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_OES"); + break; + case GL_FRAMEBUFFER_INCOMPLETE_FORMATS_OES: + LOG( ANDROID_LOG_ERROR, TAG, "GL_FRAMEBUFFER_INCOMPLETE_FORMATS_OES"); + break; + case GL_FRAMEBUFFER_UNSUPPORTED_OES: + LOG( ANDROID_LOG_ERROR, TAG, "GL_FRAMEBUFFER_UNSUPPORTED_OES"); + break; + default : + LOG( ANDROID_LOG_ERROR, TAG, "Unknown error: %d", res); + break; + } + + return 1; + } + + //glBindFramebufferOES(GL_FRAMEBUFFER_OES, 0); + + return 0; +} + +#endif + +u32 find_pow_2(u32 num) +{ + u32 res = 1; + while (res < num) + res *= 2; + return res; +} + +static GF_Err droid_Resize(GF_VideoOutput *dr, u32 w, u32 h) +{ + RAWCTX; + LOG( ANDROID_LOG_DEBUG, TAG, "Android Resize: %dx%d", w, h); + + rc->width = w; + rc->height = h; + + if ( rc->non_power_two ) + { + rc->tex_width = rc->width; + rc->tex_height = rc->height; + } + else + { + rc->tex_width = find_pow_2(rc->width); + rc->tex_height = find_pow_2(rc->height); + } + + resizeWindow(rc); + + if ( rc->out_3d_type == 0 ) + { + createTexture(rc); +#ifdef GLES_FRAMEBUFFER_TEST + createFrameBuffer(rc); +#endif + } + LOG( ANDROID_LOG_VERBOSE, TAG, "Android Resize DONE", w, h); + return GF_OK; +} + +GF_Err droid_Setup(GF_VideoOutput *dr, void *os_handle, void *os_display, u32 init_flags) +{ + RAWCTX; + void * pixels; + int ret; + + LOG( ANDROID_LOG_DEBUG, TAG, "Android Setup: %d", init_flags); + +#ifndef GLES_FRAMEBUFFER_TEST + if ( rc->out_3d_type == 0 ) +#endif + initGL(rc); + LOG( ANDROID_LOG_VERBOSE, TAG, "Android Setup DONE"); + return GF_OK; +} + + +static void droid_Shutdown(GF_VideoOutput *dr) +{ + RAWCTX; + LOG( ANDROID_LOG_DEBUG, TAG, "Android Shutdown\n"); + + releaseTexture(rc); +#ifdef GLES_FRAMEBUFFER_TEST + releaseFrameBuffer(rc); +#endif + LOG( ANDROID_LOG_VERBOSE, TAG, "Android Shutdown DONE"); +} + + +static GF_Err droid_Flush(GF_VideoOutput *dr, GF_Window *dest) +{ + RAWCTX; +#ifdef DROID_EXTREME_LOGS + LOG( ANDROID_LOG_VERBOSE, TAG, "Android Flush\n"); +#endif /* DROID_EXTREME_LOGS */ + +#ifndef GLES_FRAMEBUFFER_TEST + if ( rc->out_3d_type == 0 ) +#endif + drawGLScene(rc); +#ifdef DROID_EXTREME_LOGS + LOG( ANDROID_LOG_VERBOSE, TAG, "Android Flush DONE"); +#endif /* DROID_EXTREME_LOGS */ + return GF_OK; +} + +static GF_Err droid_LockBackBuffer(GF_VideoOutput *dr, GF_VideoSurface *vi, Bool do_lock) +{ + RAWCTX; + int ret; + void * pixels; + int i,j,t; +#ifdef DROID_EXTREME_LOGS + LOG( ANDROID_LOG_VERBOSE, TAG, "Android LockBackBuffer: %d", do_lock); +#endif /* DROID_EXTREME_LOGS */ + if (do_lock) { + if (!vi) return GF_BAD_PARAM; + + if ( rc->out_3d_type != 0 ) + return GF_NOT_SUPPORTED; + + vi->height = rc->height; + vi->width = rc->width; + vi->video_buffer = rc->texData; + vi->is_hardware_memory = 0; + vi->pitch_x = NBPP; + vi->pitch_y = NBPP * rc->tex_width; + vi->pixel_format = RAW_OUT_PIXEL_FORMAT; + } + else + { + if (rc->locked_data) + { + //glBindTexture( GL_TEXTURE_2D, rc->texID); + //glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); + //glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); + + //glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, rc->width, rc->height, 0, + // GL_RGBA, GL_UNSIGNED_BYTE, rc->locked_data ); + } + } +#ifdef DROID_EXTREME_LOGS + LOG( ANDROID_LOG_VERBOSE, TAG, "Android LockBackBuffer DONE"); +#endif /* DROID_EXTREME_LOGS */ + return GF_OK; +} + +static GF_Err droid_ProcessEvent(GF_VideoOutput *dr, GF_Event *evt) +{ + RAWCTX; + + if (evt) { + switch (evt->type) { + case GF_EVENT_SIZE: + LOG( ANDROID_LOG_VERBOSE, TAG, "GF_EVENT_SIZE( %d x %d)", + evt->setup.width, evt->setup.height); + //if (evt->setup.opengl_mode) return GF_OK; + return droid_Resize(dr, evt->setup.width, evt->setup.height); + case GF_EVENT_VIDEO_SETUP: + LOG( ANDROID_LOG_DEBUG, TAG, "Android OpenGL mode: %d", evt->setup.opengl_mode); + switch (evt->setup.opengl_mode) + { + case 0: + rc->out_3d_type = 0; +// initGL(rc); + droid_Resize(dr, evt->setup.width, evt->setup.height); + return GF_OK; + case 1: + rc->out_3d_type = 1; + droid_Resize(dr, evt->setup.width, evt->setup.height); + return GF_OK; + case 2: + rc->out_3d_type = 2; + droid_Resize(dr, evt->setup.width, evt->setup.height); + return GF_OK; + case GF_EVENT_SET_CURSOR: + LOG( ANDROID_LOG_VERBOSE, TAG, "GF_EVENT_SET_CURSOR"); + return GF_OK; + case GF_EVENT_SET_CAPTION: + LOG( ANDROID_LOG_VERBOSE, TAG, "GF_EVENT_SET_CAPTION"); + return GF_OK; + case GF_EVENT_SHOWHIDE: + LOG( ANDROID_LOG_VERBOSE, TAG, "GF_EVENT_SHOWHIDE"); + return GF_OK; + default: + LOG( ANDROID_LOG_DEBUG, TAG, "Process Unknown Event: %d", evt->type); + return GF_OK; + } + break; + } + } + return GF_OK; +} + +GF_VideoOutput *NewRawVideoOutput() +{ + AndroidContext *pCtx; + GF_VideoOutput *driv = (GF_VideoOutput *) gf_malloc(sizeof(GF_VideoOutput)); + LOG( ANDROID_LOG_INFO, TAG, "Android Video Initialization in progress..."); + memset(driv, 0, sizeof(GF_VideoOutput)); + GF_REGISTER_MODULE_INTERFACE(driv, GF_VIDEO_OUTPUT_INTERFACE, "Android Video Output", "gpac distribution") + + pCtx = gf_malloc(sizeof(AndroidContext)); + memset(pCtx, 0, sizeof(AndroidContext)); + + pCtx->texID = -1; + pCtx->framebuff = -1; + pCtx->depthbuff = -1; + driv->opaque = pCtx; + + driv->Flush = droid_Flush; + driv->LockBackBuffer = droid_LockBackBuffer; + driv->Setup = droid_Setup; + driv->Shutdown = droid_Shutdown; + driv->ProcessEvent = droid_ProcessEvent; + + driv->max_screen_width = 1024; + driv->max_screen_height = 1024; + + driv->hw_caps = GF_VIDEO_HW_OPENGL;// | GF_VIDEO_HW_OPENGL_OFFSCREEN_ALPHA;//GF_VIDEO_HW_DIRECT_ONLY;// + + LOG( ANDROID_LOG_INFO, TAG, "Android Video Init Done.\n"); + return (void *)driv; +} + +void DeleteVideoOutput(void *ifce) +{ + AndroidContext *rc; + GF_VideoOutput *driv = (GF_VideoOutput *) ifce; + if (!ifce) + return; + droid_Shutdown(driv); + rc = (AndroidContext *)driv->opaque; + if (rc) + gf_free(rc); + driv->opaque = NULL; + gf_free(driv); + LOG( ANDROID_LOG_DEBUG, TAG, "Android vout deinit\n"); +} + +/*interface query*/ +GF_EXPORT +const u32 *QueryInterfaces() +{ + static u32 si [] = { + GF_VIDEO_OUTPUT_INTERFACE, + 0 + }; + return si; +} +/*interface create*/ +GF_BaseInterface *LoadInterface(u32 InterfaceType) +{ + if (InterfaceType == GF_VIDEO_OUTPUT_INTERFACE) return (GF_BaseInterface *) NewRawVideoOutput(); + return NULL; +} +/*interface destroy*/ +void ShutdownInterface(GF_BaseInterface *ifce) +{ + switch (ifce->InterfaceType) { + case GF_VIDEO_OUTPUT_INTERFACE: + DeleteVideoOutput((GF_VideoOutput *)ifce); + break; + } +} diff --git a/modules/dummy_in/Makefile b/modules/dummy_in/Makefile index ef3c462..2576530 100644 --- a/modules/dummy_in/Makefile +++ b/modules/dummy_in/Makefile @@ -31,7 +31,7 @@ all: $(LIB) $(LIB): $(OBJS) $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/$@ $(OBJS) $(EXTRALIBS) -L../../bin/gcc -lgpac ifeq ($(STATICBUILD),yes) - $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/gm_dummy_in-static.so $(OBJS) $(EXTRALIBS) -L../../bin/gcc -lgpac_static + $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/gm_dummy_in-static.$(DYN_LIB_SUFFIX) $(OBJS) $(EXTRALIBS) -L../../bin/gcc -lgpac_static endif diff --git a/modules/dx_hw/copy_pixels.c b/modules/dx_hw/copy_pixels.c index 9d0edb4..9e39708 100644 --- a/modules/dx_hw/copy_pixels.c +++ b/modules/dx_hw/copy_pixels.c @@ -81,7 +81,7 @@ static Bool is_planar_yuv(u32 pf) } -static void VR_write_yv12_to_yuv(GF_VideoSurface *vs, unsigned char *src, u32 src_stride, u32 src_pf, +static void write_yv12_to_yuv(GF_VideoSurface *vs, unsigned char *src, u32 src_stride, u32 src_pf, u32 src_width, u32 src_height, const GF_Window *src_wnd) { unsigned char *pY, *pU, *pV; @@ -211,6 +211,124 @@ static void VR_write_yv12_to_yuv(GF_VideoSurface *vs, unsigned char *src, u32 s } +static void write_yvyu_to_yuv(GF_VideoSurface *vs, unsigned char *src, u32 src_stride, u32 src_pf, + u32 src_width, u32 src_height, const GF_Window *src_wnd) +{ + u32 i, j, base_pf; + unsigned char *pY, *pU, *pV; + + switch (get_yuv_base(src_pf) ) { + case GF_PIXEL_UYVY: + pU = src + src_stride * src_wnd->y + src_wnd->x; + pY = src + src_stride * src_wnd->y + src_wnd->x + 1; + pV = src + src_stride * src_wnd->y + src_wnd->x + 3; + break; + case GF_PIXEL_YUY2: + pY = src + src_stride * src_wnd->y + src_wnd->x; + pU = src + src_stride * src_wnd->y + src_wnd->x + 1; + pV = src + src_stride * src_wnd->y + src_wnd->x + 3; + break; + case GF_PIXEL_YVYU: + pY = src + src_stride * src_wnd->y + src_wnd->x; + pV = src + src_stride * src_wnd->y + src_wnd->x + 1; + pU = src + src_stride * src_wnd->y + src_wnd->x + 3; + break; + default: + return; + } + + if (is_planar_yuv(vs->pixel_format)) { + u32 i, j; + unsigned char *dst_y, *dst_u, *dst_v; + + dst_y = vs->video_buffer; + if (vs->pixel_format == GF_PIXEL_YV12) { + dst_v = vs->video_buffer + vs->pitch_y * vs->height; + dst_u = vs->video_buffer + 5*vs->pitch_y * vs->height/4; + } else { + dst_u = vs->video_buffer + vs->pitch_y * vs->height; + dst_v = vs->video_buffer + 5*vs->pitch_y * vs->height/4; + } + for (i=0; ih; i++) { + for (j=0; jw; j+=2) { + *dst_y = * pY; + *(dst_y+1) = * (pY+2); + dst_y += 2; + pY += 4; + if (i%2) continue; + + *dst_u = (*pU + *(pU + src_stride)) / 2; + *dst_v = (*pV + *(pV + src_stride)) / 2; + dst_u++; + dst_v++; + pU += 4; + pV += 4; + } + if (i%2) { + pU += src_stride; + pV += src_stride; + } + } + return; + } + + if (get_yuv_base(src_pf) == get_yuv_base(vs->pixel_format)) { + u32 i; + for (i=0; ih; i++) { + char *dst = vs->video_buffer + i*vs->pitch_y; + pY = src + src_stride * (i+src_wnd->y) + src_wnd->x; + memcpy(dst, pY, sizeof(char)*2*src_wnd->w); + } + return; + } + + base_pf = get_yuv_base(vs->pixel_format); + for (i=0; ih; i++) { + char *dst = vs->video_buffer + i*vs->pitch_y; + char *y = pY + src_stride * i; + char *u = pU + src_stride * i; + char *v = pV + src_stride * i; + switch (base_pf) { + case GF_PIXEL_UYVY: + for (j=0; jw; j+=2) { + dst[0] = *u; + dst[1] = *y; + dst[2] = *v; + dst[3] = *(y+2); + dst += 4; + y+=4; + u+=4; + v+=4; + } + break; + case GF_PIXEL_YVYU: + for (j=0; jw; j+=2) { + dst[0] = *y; + dst[1] = *v; + dst[2] = *(y+2); + dst[3] = *u; + dst += 4; + y+=4; + u+=4; + v+=4; + } + break; + case GF_PIXEL_YUY2: + for (j=0; jw; j+=2) { + dst[0] = *y; + dst[1] = *u; + dst[2] = *(y+2); + dst[3] = *v; + dst += 4; + y+=4; + u+=4; + v+=4; + } + break; + } + } +} + u32 get_bpp(u32 pf) { switch (pf) { @@ -433,31 +551,37 @@ void dx_copy_pixels(GF_VideoSurface *dst_s, const GF_VideoSurface *src_s, const if (get_yuv_base(src_s->pixel_format)==GF_PIXEL_YV12) { if (format_is_yuv(dst_s->pixel_format)) { /*generic YV planar to YUV (planar or not) */ - VR_write_yv12_to_yuv(dst_s, src_s->video_buffer, src_s->pitch_y, src_s->pixel_format, src_s->width, src_s->height, src_wnd); - } else { - gf_stretch_bits(dst_s, (GF_VideoSurface*) src_s, NULL, (GF_Window *)src_wnd, 0xFF, 0, NULL, NULL); + write_yv12_to_yuv(dst_s, src_s->video_buffer, src_s->pitch_y, src_s->pixel_format, src_s->width, src_s->height, src_wnd); + return; + } + } else if (format_is_yuv(src_s->pixel_format)) { + if (format_is_yuv(dst_s->pixel_format)) { + write_yvyu_to_yuv(dst_s, src_s->video_buffer, src_s->pitch_y, src_s->pixel_format, src_s->width, src_s->height, src_wnd); + return; } } else { switch (dst_s->pixel_format) { case GF_PIXEL_RGB_555: rgb_to_555(dst_s, src_s->video_buffer, src_s->pitch_y, src_s->width, src_s->height, src_s->pixel_format, src_wnd); - break; + return; case GF_PIXEL_RGB_565: rgb_to_565(dst_s, src_s->video_buffer, src_s->pitch_y, src_s->width, src_s->height, src_s->pixel_format, src_wnd); - break; + return; case GF_PIXEL_RGB_24: case GF_PIXEL_RGBS: case GF_PIXEL_BGR_24: rgb_to_24(dst_s, src_s->video_buffer, src_s->pitch_y, src_s->width, src_s->height, src_s->pixel_format, src_wnd); - break; + return; case GF_PIXEL_RGB_32: case GF_PIXEL_RGBD: case GF_PIXEL_RGBDS: case GF_PIXEL_BGR_32: rgb_to_32(dst_s, src_s->video_buffer, src_s->pitch_y, src_s->width, src_s->height, src_s->pixel_format, src_wnd); - break; + return; } } + + gf_stretch_bits(dst_s, (GF_VideoSurface*) src_s, NULL, (GF_Window *)src_wnd, 0xFF, 0, NULL, NULL); } diff --git a/modules/dx_hw/dx_2d.c b/modules/dx_hw/dx_2d.c index ab3e25c..bf6ebd8 100644 --- a/modules/dx_hw/dx_2d.c +++ b/modules/dx_hw/dx_2d.c @@ -415,7 +415,7 @@ static GF_Err DD_BlitSurface(DDContext *dd, DDSurface *src, GF_Window *src_wnd, src_h = src_wnd ? src_wnd->h : src->height; dst_w = dst_wnd ? dst_wnd->w : dd->width; dst_h = dst_wnd ? dst_wnd->h : dd->height; - + if (src_wnd != NULL) MAKERECT(r_src, src_wnd); if (dst_wnd != NULL) MAKERECT(r_dst, dst_wnd); @@ -439,11 +439,11 @@ static GF_Err DD_BlitSurface(DDContext *dd, DDSurface *src, GF_Window *src_wnd, if (key) flags |= DDBLT_KEYSRC; hr = IDirectDrawSurface_Blt(dd->pBack, dst_wnd ? &r_dst : NULL, src->pSurface, src_wnd ? &r_src : NULL, flags, NULL); } - GF_LOG(GF_LOG_DEBUG, GF_LOG_MMIO, ("[DX Out] Hardware blit result: %d (%08x)\n", hr, hr)); + GF_LOG(GF_LOG_DEBUG, GF_LOG_MMIO, ("[DX Out] Hardware blit src w=%d,h=%d to dst w=%d,h=%d - result: %08x\n", src_w, src_h, dst_w, dst_h, hr)); return FAILED(hr) ? GF_IO_ERR : GF_OK; } -static DDSurface *DD_GetSurface(GF_VideoOutput *dr, u32 width, u32 height, u32 pixel_format) +static DDSurface *DD_GetSurface(GF_VideoOutput *dr, u32 width, u32 height, u32 pixel_format, Bool check_caps) { #ifdef USE_DX_3 DDSURFACEDESC ddsd; @@ -477,19 +477,42 @@ static DDSurface *DD_GetSurface(GF_VideoOutput *dr, u32 width, u32 height, u32 p ddsd.dwSize = sizeof(ddsd); ddsd.ddpfPixelFormat.dwSize = sizeof(ddsd.ddpfPixelFormat); ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT; - ddsd.ddsCaps.dwCaps = DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY; + + ddsd.ddsCaps.dwCaps = DDSCAPS_VIDEOMEMORY; + if (dr->hw_caps & GF_VIDEO_HW_HAS_YUV_OVERLAY) + ddsd.ddsCaps.dwCaps |= DDSCAPS_OVERLAY; + ddsd.ddpfPixelFormat.dwFlags = DDPF_FOURCC; ddsd.dwWidth = width; ddsd.dwHeight = height; ddsd.ddpfPixelFormat.dwFourCC = get_win_4CC(dr->yuv_pixel_format); #ifdef USE_DX_3 - if( FAILED( hr = IDirectDraw_CreateSurface(dd->pDD, &ddsd, &yuvp->pSurface, NULL ) ) ) - return NULL; + if( FAILED( hr = IDirectDraw_CreateSurface(dd->pDD, &ddsd, &yuvp->pSurface, NULL ) ) ) { +#else + if( FAILED( hr = IDirectDraw7_CreateSurface(dd->pDD, &ddsd, &yuvp->pSurface, NULL ) ) ) { +#endif + if (!check_caps) return NULL; + + /*try withou overlay cap*/ + if (dr->hw_caps & GF_VIDEO_HW_HAS_YUV_OVERLAY) { + dr->hw_caps &= ~GF_VIDEO_HW_HAS_YUV_OVERLAY; + ddsd.ddsCaps.dwCaps = DDSCAPS_VIDEOMEMORY; + +#ifdef USE_DX_3 + if( FAILED( hr = IDirectDraw_CreateSurface(dd->pDD, &ddsd, &yuvp->pSurface, NULL ) ) ) { #else - if( FAILED( hr = IDirectDraw7_CreateSurface(dd->pDD, &ddsd, &yuvp->pSurface, NULL ) ) ) - return NULL; + if( FAILED( hr = IDirectDraw7_CreateSurface(dd->pDD, &ddsd, &yuvp->pSurface, NULL ) ) ) { #endif + return NULL; + } + } + /*YUV not supported*/ + else { + return NULL; + } + + } yuvp->format = dr->yuv_pixel_format; yuvp->width = width; yuvp->height = height; @@ -550,7 +573,7 @@ static GF_Err DD_Blit(GF_VideoOutput *dr, GF_VideoSurface *video_src, GF_Window /*get RGB or YUV pool surface*/ //if (video_src->pixel_format==GF_PIXEL_YUVD) return GF_NOT_SUPPORTED; if (video_src->pixel_format==GF_PIXEL_YUVD) video_src->pixel_format=GF_PIXEL_YV12; - pool = DD_GetSurface(dr, w, h, video_src->pixel_format); + pool = DD_GetSurface(dr, w, h, video_src->pixel_format, 0); if (!pool) return GF_IO_ERR; @@ -695,6 +718,10 @@ void DD_InitYUV(GF_VideoOutput *dr) if (formats[num_yuv]) num_yuv++; } gf_free(codes); + + + dr->hw_caps |= GF_VIDEO_HW_HAS_YUV | GF_VIDEO_HW_HAS_YUV_OVERLAY; + /*too bad*/ if (!num_yuv) { dr->hw_caps &= ~(GF_VIDEO_HW_HAS_YUV | GF_VIDEO_HW_HAS_YUV_OVERLAY); @@ -714,7 +741,7 @@ void DD_InitYUV(GF_VideoOutput *dr) } dr->yuv_pixel_format = formats[i]; - if (DD_GetSurface(dr, w, h, dr->yuv_pixel_format) == NULL) + if (DD_GetSurface(dr, w, h, dr->yuv_pixel_format, 1) == NULL) goto rem_fmt; now = gf_sys_clock(); @@ -779,7 +806,6 @@ rem_fmt: dr->yuv_pixel_format = GF_PIXEL_YV12; GF_LOG(GF_LOG_INFO, GF_LOG_MMIO, ("[DX Out] Picked YUV format %s - drawn in %d ms\n", gf_4cc_to_str(dr->yuv_pixel_format), min_planar)); - dr->hw_caps |= GF_VIDEO_HW_HAS_YUV_OVERLAY; /*enable YUV->RGB on the backbuffer ?*/ opt = gf_modules_get_option((GF_BaseInterface *)dr, "Video", "EnableOffscreenYUV"); @@ -788,7 +814,7 @@ rem_fmt: opt = "yes"; gf_modules_set_option((GF_BaseInterface *)dr, "Video", "EnableOffscreenYUV", "yes"); } - if (!strcmp(opt, "yes")) dr->hw_caps |= GF_VIDEO_HW_HAS_YUV; + if (opt && strcmp(opt, "yes")) dr->hw_caps &= ~GF_VIDEO_HW_HAS_YUV; /*get YUV overlay key*/ diff --git a/modules/dx_hw/dx_hw.h b/modules/dx_hw/dx_hw.h index 2da1a1c..0a89cda 100644 --- a/modules/dx_hw/dx_hw.h +++ b/modules/dx_hw/dx_hw.h @@ -87,6 +87,10 @@ typedef struct # endif #endif +#ifndef WM_UNICHAR +#define WM_UNICHAR 0x0109 +#endif //WM_UNICHAR + typedef struct { HWND os_hwnd, fs_hwnd, cur_hwnd, parent_wnd; diff --git a/modules/dx_hw/dx_window.c b/modules/dx_hw/dx_window.c index f7da3a2..20cc9a7 100644 --- a/modules/dx_hw/dx_window.c +++ b/modules/dx_hw/dx_window.c @@ -419,6 +419,30 @@ LRESULT APIENTRY DD_WindowProc(HWND hWnd, UINT msg, UINT wParam, LONG lParam) if (ctx->cur_hwnd==hWnd) DD_SetCursor(vout, ctx->cursor_type); break; + case WM_DROPFILES: + { + char szFile[GF_MAX_PATH]; + GF_Event evt; + u32 i; + + HDROP hDrop = (HDROP) wParam; + evt.type = GF_EVENT_OPENFILE; + evt.open_file.nb_files = DragQueryFile(hDrop, 0xFFFFFFFF, NULL, 0); + evt.open_file.files = gf_malloc(sizeof(char *)*evt.open_file.nb_files); + for (i=0; ion_event(vout->evt_cbk_hdl, &evt); + for (i=0; icur_hwnd!=hWnd) break; @@ -587,8 +611,11 @@ LRESULT APIENTRY DD_WindowProc(HWND hWnd, UINT msg, UINT wParam, LONG lParam) ret = vout->on_event(vout->evt_cbk_hdl, &evt); break; + case WM_UNICHAR: case WM_CHAR: - if (wParam>=32) { + /*no reason to filter out things*/ +// if (wParam>=32) + { evt.type = GF_EVENT_TEXTINPUT; evt.character.unicode_char = wParam; ret = vout->on_event(vout->evt_cbk_hdl, &evt); @@ -726,6 +753,8 @@ Bool DD_InitWindows(GF_VideoOutput *vout, DDContext *ctx) if (ctx->os_hwnd == NULL) { return 0; } + DragAcceptFiles(ctx->os_hwnd, TRUE); + if (flags & GF_TERM_INIT_HIDE) { ShowWindow(ctx->os_hwnd, SW_HIDE); } else { diff --git a/modules/epoc_hw/epoc_codec.cpp b/modules/epoc_hw/epoc_codec.cpp index 3a499a0..ca4b6ef 100644 --- a/modules/epoc_hw/epoc_codec.cpp +++ b/modules/epoc_hw/epoc_codec.cpp @@ -332,7 +332,7 @@ static const char *EDEC_GetCodecName(GF_BaseDecoder *ifcg) return ctx->codec_name; } -static Bool EDEC_CanHandleStream(GF_BaseDecoder *ifcg, u32 StreamType, GF_ESD *esd, u8 PL) +static u32 EDEC_CanHandleStream(GF_BaseDecoder *ifcg, u32 StreamType, GF_ESD *esd, u8 PL) { char *dsi; GF_M4ADecSpecInfo a_cfg; @@ -341,7 +341,7 @@ static Bool EDEC_CanHandleStream(GF_BaseDecoder *ifcg, u32 StreamType, GF_ESD *e /*audio decs*/ if (StreamType == GF_STREAM_AUDIO) { /*media type query*/ - if (!esd) return 1; + if (!esd) return GF_CODEC_STREAM_TYPE_SUPPORTED; dsi = esd->decoderConfig->decoderSpecificInfo ? esd->decoderConfig->decoderSpecificInfo->data : NULL; switch (esd->decoderConfig->objectTypeIndication) { /*MPEG2 aac*/ @@ -350,13 +350,13 @@ static Bool EDEC_CanHandleStream(GF_BaseDecoder *ifcg, u32 StreamType, GF_ESD *e case GPAC_OTI_AUDIO_AAC_MPEG2_SSRP: /*MPEG4 aac*/ case GPAC_OTI_AUDIO_AAC_MPEG4: - if (!dsi) return 0; - if (gf_m4a_get_config(dsi, esd->decoderConfig->decoderSpecificInfo->dataLength, &a_cfg) != GF_OK) return 0; + if (!dsi) return GF_CODEC_NOT_SUPPORTED; + if (gf_m4a_get_config(dsi, esd->decoderConfig->decoderSpecificInfo->dataLength, &a_cfg) != GF_OK) return GF_CODEC_MAYBE_SUPPORTED; switch (a_cfg.base_object_type) { /*only LTP and LC supported*/ case GF_M4A_AAC_LC: case GF_M4A_AAC_LTP: - if ((ctx->caps & GF_EPOC_HAS_AAC) || (ctx->caps & GF_EPOC_HAS_HEAAC) ) return 1; + if ((ctx->caps & GF_EPOC_HAS_AAC) || (ctx->caps & GF_EPOC_HAS_HEAAC) ) return GF_CODEC_SUPPORTED; default: break; } @@ -369,20 +369,20 @@ static Bool EDEC_CanHandleStream(GF_BaseDecoder *ifcg, u32 StreamType, GF_ESD *e break; /*non-mpeg4 codecs*/ case GPAC_OTI_MEDIA_GENERIC: - if (!dsi) return 0; - if (esd->decoderConfig->decoderSpecificInfo->data < 4) return 0; + if (!dsi) return GF_CODEC_NOT_SUPPORTED; + if (esd->decoderConfig->decoderSpecificInfo->data < 4) return GF_CODEC_NOT_SUPPORTED; if (!strnicmp(dsi, "samr", 4) || !strnicmp(dsi, "amr ", 4)) { - if (ctx->caps & GF_EPOC_HAS_AMR) return 1; + if (ctx->caps & GF_EPOC_HAS_AMR) return GF_CODEC_SUPPORTED; } if (!strnicmp(dsi, "sawb", 4)) { - if (ctx->caps & GF_EPOC_HAS_AMR_WB) return 1; + if (ctx->caps & GF_EPOC_HAS_AMR_WB) return GF_CODEC_SUPPORTED; } break; default: - return 0; + return GF_CODEC_NOT_SUPPORTED; } } - return 0; + return GF_CODEC_NOT_SUPPORTED; } #ifdef __cplusplus diff --git a/modules/ffmpeg_in/Makefile b/modules/ffmpeg_in/Makefile index 58935f6..c561bd6 100644 --- a/modules/ffmpeg_in/Makefile +++ b/modules/ffmpeg_in/Makefile @@ -2,7 +2,7 @@ include ../../config.mak vpath %.c $(SRC_PATH)/modules/ffmpeg_in -CFLAGS= $(OPTFLAGS) -I"$(SRC_PATH)/include" +CFLAGS=$(OPTFLAGS) -I"$(SRC_PATH)/include" $(ffmpeg_cflags) ifeq ($(DEBUGBUILD), yes) CFLAGS+=-g @@ -15,7 +15,7 @@ LDFLAGS+=-pg endif LOCAL_LIB= -LINKLIBS=-lgpac -lavcodec -lavformat -lavutil -lz +LINKLIBS=-lgpac -lz $(ffmpeg_lflags) #darwin needs bz2 ifeq ($(CONFIG_DARWIN),yes) @@ -24,7 +24,7 @@ endif #old ffmpeg lib ifeq ($(CONFIG_FFMPEG_OLD), yes) -CFLAGS+=-DFFMPEG_OLD_HEADERS +CFLAGS+=-DFFMPEG_OLD_HEADERS -I/usr/include else LINKLIBS+=-lswscale endif diff --git a/modules/ffmpeg_in/ffmpeg_decode.c b/modules/ffmpeg_in/ffmpeg_decode.c index 7c30833..19808a9 100644 --- a/modules/ffmpeg_in/ffmpeg_decode.c +++ b/modules/ffmpeg_in/ffmpeg_decode.c @@ -317,7 +317,8 @@ static GF_Err FFDEC_AttachStream(GF_BaseDecoder *plug, GF_ESD *esd) /*setup audio streams*/ if (ffd->st==GF_STREAM_AUDIO) { - if ((*codec)->type == CODEC_ID_MP2) { + /* souchay : test was wrong I think, was codec->type but must be codec->id */ + if ((*codec)->id == CODEC_ID_MP2) { (*ctx)->frame_size = ((*ctx)->sample_rate > 24000) ? 1152 : 576; } /*may be 0 (cfg not known yet)*/ @@ -510,11 +511,13 @@ static GF_Err FFDEC_GetCapabilities(GF_BaseDecoder *plug, GF_CodecCapability *ca static GF_Err FFDEC_SetCapabilities(GF_BaseDecoder *plug, GF_CodecCapability capability) { FFDec *ffd = (FFDec *)plug->privateStack; + assert(plug); + assert( ffd ); switch (capability.CapCode) { case GF_CODEC_WAIT_RAP: ffd->frame_start = 0; if (ffd->st==GF_STREAM_VISUAL) { - avcodec_flush_buffers(ffd->base_ctx); + if (ffd->base_ctx) avcodec_flush_buffers(ffd->base_ctx); if (ffd->depth_ctx) avcodec_flush_buffers(ffd->depth_ctx); } return GF_OK; @@ -646,6 +649,7 @@ redecode: return GF_PACKED_FRAMES; } + *outBufferLength = 0; /*visual stream*/ w = ctx->width; h = ctx->height; @@ -720,6 +724,12 @@ redecode: } } + if (!gotpic && (!ctx->width || !ctx->height) ) { + ctx->width = w; + ctx->height = h; + return GF_OK; + } + /*some streams use odd width/height frame values*/ if (ffd->out_pix_fmt == GF_PIXEL_YV12) { if (ctx->width%2) ctx->width++; @@ -730,6 +740,10 @@ redecode: if ((w != ctx->width) || (h != ctx->height)) { outsize = ctx->width * ctx->height * 3; if (ffd->out_pix_fmt != GF_PIXEL_RGB_24) outsize /= 2; + if (ffd->depth_codec) { + outsize = 5 * ctx->width * ctx->height / 2; + ffd->yuv_size = 3 * ctx->width * ctx->height / 2; + } ffd->out_size = outsize; *outBufferLength = ffd->out_size; if (ffd->check_h264_isma) { @@ -742,6 +756,9 @@ redecode: *cached_sws = NULL; } #endif + if (!ffd->no_par_update && ctx->sample_aspect_ratio.num && ctx->sample_aspect_ratio.den) { + ffd->previous_par = (ctx->sample_aspect_ratio.num<<16) | ctx->sample_aspect_ratio.den; + } return GF_BUFFER_TOO_SMALL; } /*check PAR in case on-the-fly change*/ @@ -754,7 +771,6 @@ redecode: } } - *outBufferLength = 0; if (mmlevel == GF_CODEC_LEVEL_SEEK) return GF_OK; if (!gotpic) return GF_OK; @@ -762,6 +778,7 @@ redecode: if (ES_ID == ffd->depth_ES_ID) { s32 i; u8 *pYO, *pYD; + pYO = frame->data[0]; pYD = outBuffer+ffd->yuv_size; for (i=0; iheight; i++) { @@ -841,7 +858,7 @@ redecode: return GF_OK; } -static Bool FFDEC_CanHandleStream(GF_BaseDecoder *plug, u32 StreamType, GF_ESD *esd, u8 PL) +static u32 FFDEC_CanHandleStream(GF_BaseDecoder *plug, u32 StreamType, GF_ESD *esd, u8 PL) { GF_BitStream *bs; u32 codec_id; @@ -850,8 +867,8 @@ static Bool FFDEC_CanHandleStream(GF_BaseDecoder *plug, u32 StreamType, GF_ESD * /*media type query*/ if (!esd) { - if ((StreamType==GF_STREAM_VISUAL) || (StreamType==GF_STREAM_AUDIO)) return 1; - return 0; + if ((StreamType==GF_STREAM_VISUAL) || (StreamType==GF_STREAM_AUDIO)) return GF_CODEC_STREAM_TYPE_SUPPORTED; + return GF_CODEC_NOT_SUPPORTED; } /*store types*/ @@ -883,6 +900,33 @@ static Bool FFDEC_CanHandleStream(GF_BaseDecoder *plug, u32 StreamType, GF_ESD * /*std MPEG-4 visual*/ else if (StreamType==GF_STREAM_VISUAL) { + + /*fixme - we should use some priority rather than declare ffmpeg can't handle svc*/ + if (esd->decoderConfig->objectTypeIndication == GPAC_OTI_VIDEO_AVC) { + if (esd->decoderConfig->decoderSpecificInfo && esd->decoderConfig->decoderSpecificInfo->data) { + Bool is_svc = 0; + u32 i, count; + GF_AVCConfig *cfg = gf_odf_avc_cfg_read(esd->decoderConfig->decoderSpecificInfo->data, esd->decoderConfig->decoderSpecificInfo->dataLength); + if (!cfg) return GF_CODEC_SUPPORTED; + + /*decode all NALUs*/ + count = gf_list_count(cfg->sequenceParameterSets); + for (i=0; isequenceParameterSets, i); + u8 nal_type = slc->data[0] & 0x1F; + + if (nal_type==GF_AVC_NALU_SVC_SUBSEQ_PARAM) { + is_svc = 1; + break; + } + } + gf_odf_avc_cfg_del(cfg); + return (is_svc || esd->decoderConfig->rvc_config || esd->decoderConfig->predefined_rvc_config) ? GF_CODEC_MAYBE_SUPPORTED : GF_CODEC_SUPPORTED; + } + if (esd->decoderConfig->rvc_config || esd->decoderConfig->predefined_rvc_config) return GF_CODEC_MAYBE_SUPPORTED; + return GF_CODEC_SUPPORTED; + } + switch (ffd->oti) { /*MPEG-4 v1 simple profile*/ case GPAC_OTI_VIDEO_MPEG4_PART2: codec_id = CODEC_ID_MPEG4; break; @@ -900,25 +944,33 @@ static Bool FFDEC_CanHandleStream(GF_BaseDecoder *plug, u32 StreamType, GF_ESD * codec_id = CODEC_ID_MPEG2VIDEO; break; /*JPEG*/ case GPAC_OTI_IMAGE_JPEG: -// return 0; /*I'm having troubles with ffmpeg & jpeg, it appears to crash randomly*/ codec_id = CODEC_ID_MJPEG; - //break; - /* SOUCHAY : the JPEG handler has some issues with some JPEG files, - * since GPAC also has img_in plugin for images, do not use FFMPEG one - */ - return 0; + /*return maybe supported as FFMPEG JPEG decoder has some issues with many files, so let's use it only if no + other dec is available*/ + if (avcodec_find_decoder(codec_id) != NULL) + return GF_CODEC_MAYBE_SUPPORTED; + + return GF_CODEC_NOT_SUPPORTED; default: - return 0; + return GF_CODEC_NOT_SUPPORTED; } } /*NeroDigital DVD subtitles*/ else if ((StreamType==GF_STREAM_ND_SUBPIC) && (ffd->oti==0xe0)) - return 1; + return GF_CODEC_SUPPORTED; - if (!codec_id) return 0; - if (check_4cc && (ffmpeg_get_codec(codec_id) != NULL)) return 1; - if (avcodec_find_decoder(codec_id) != NULL) return 1; - return 0; + if (!codec_id) return GF_CODEC_NOT_SUPPORTED; + + if (check_4cc && (ffmpeg_get_codec(codec_id) != NULL)) { + if (esd->decoderConfig->rvc_config || esd->decoderConfig->predefined_rvc_config) return GF_CODEC_MAYBE_SUPPORTED; + return GF_CODEC_SUPPORTED; + } + + if (avcodec_find_decoder(codec_id) != NULL) { + if (esd->decoderConfig->rvc_config || esd->decoderConfig->predefined_rvc_config) return GF_CODEC_MAYBE_SUPPORTED; + return GF_CODEC_SUPPORTED; + } + return GF_CODEC_NOT_SUPPORTED; } static const char *FFDEC_GetCodecName(GF_BaseDecoder *dec) @@ -970,6 +1022,7 @@ void FFDEC_Delete(void *ifce) if (!ifce) return; ffd = dec->privateStack; + dec->privateStack = NULL; if (ffd){ if (ffd->base_ctx) avcodec_close(ffd->base_ctx); ffd->base_ctx = NULL; @@ -983,6 +1036,5 @@ void FFDEC_Delete(void *ifce) #endif gf_free(ffd); } - dec->privateStack = NULL; - gf_free(dec); + gf_free(dec); } diff --git a/modules/ffmpeg_in/ffmpeg_demux.c b/modules/ffmpeg_in/ffmpeg_demux.c index 948897c..6f87ae2 100644 --- a/modules/ffmpeg_in/ffmpeg_demux.c +++ b/modules/ffmpeg_in/ffmpeg_demux.c @@ -36,6 +36,22 @@ #include #endif +/** + * New versions of ffmpeg do not declare AVERROR_NOMEM, AVERROR_IO, AVERROR_NOFMT + */ + +#ifndef AVERROR_NOMEM +#define AVERROR_NOMEM AVERROR(ENOMEM) +#endif /* AVERROR_NOMEM */ + +#ifndef AVERROR_IO +#define AVERROR_IO AVERROR(EIO) +#endif /* AVERROR_IO */ + +#ifndef AVERROR_NOFMT +#define AVERROR_NOFMT AVERROR(EINVAL) +#endif /* AVERROR_NOFMT */ + static u32 FFDemux_Run(void *par) { AVPacket pkt; @@ -224,6 +240,8 @@ static Bool FFD_CanHandleURL(GF_InputService *plug, const char *url) if (ext) ext[0] = 0; ext = strrchr(szName, '.'); + if (ext && strlen(ext) > 19) ext = NULL; + if (ext && strlen(ext) > 1) { strcpy(szExt, &ext[1]); strlwr(szExt); @@ -248,7 +266,7 @@ static Bool FFD_CanHandleURL(GF_InputService *plug, const char *url) { u32 i; for (i = 0 ; FFD_MIME_TYPES[i]; i+=3){ - if (gf_term_check_extension(plug, FFD_MIME_TYPES[0], FFD_MIME_TYPES[i+1], FFD_MIME_TYPES[i+2], ext)) + if (gf_term_check_extension(plug, FFD_MIME_TYPES[i], FFD_MIME_TYPES[i+1], FFD_MIME_TYPES[i+2], ext)) return 1; } } @@ -264,8 +282,8 @@ static Bool FFD_CanHandleURL(GF_InputService *plug, const char *url) return 0; } } - if (!ctx || av_find_stream_info(ctx) <0) goto exit; + /*figure out if we can use codecs or not*/ has_video = has_audio = 0; for(i = 0; i < (s32)ctx->nb_streams; i++) { @@ -460,7 +478,7 @@ static int ff_url_read(void *h, unsigned char *buf, int size) full_size = 0; if (ffd->buffer_used) { - if (ffd->buffer_used > (u32) size) { + if (ffd->buffer_used >= (u32) size) { ffd->buffer_used-=size; memcpy(ffd->buffer, ffd->buffer+size, sizeof(char)*ffd->buffer_used); #ifdef FFMPEG_DUMP_REMOTE @@ -502,10 +520,6 @@ static int ff_url_read(void *h, unsigned char *buf, int size) return full_size ? (int) full_size : -1; } -static void FFD_NetIO(void *cbk, GF_NETIO_Parameter *param) -{ -} - static GF_Err FFD_ConnectService(GF_InputService *plug, GF_ClientService *serv, const char *url) { @@ -559,27 +573,34 @@ static GF_Err FFD_ConnectService(GF_InputService *plug, GF_ClientService *serv, init_put_byte(&ffd->io, ffd->buffer, ffd->buffer_size, 0, ffd, ff_url_read, NULL, NULL); ffd->io.is_streamed = 1; - ffd->dnload = gf_term_download_new(ffd->service, url, GF_NETIO_SESSION_NOT_THREADED | GF_NETIO_SESSION_NOT_CACHED, FFD_NetIO, ffd); + ffd->dnload = gf_term_download_new(ffd->service, url, GF_NETIO_SESSION_NOT_THREADED | GF_NETIO_SESSION_NOT_CACHED, NULL, ffd); if (!ffd->dnload) return GF_URL_ERROR; while (1) { - e = gf_dm_sess_fetch_data(ffd->dnload, ffd->buffer, ffd->buffer_size, &ffd->buffer_used); + u32 read; + e = gf_dm_sess_fetch_data(ffd->dnload, ffd->buffer + ffd->buffer_used, ffd->buffer_size - ffd->buffer_used, &read); if (e==GF_EOS) break; /*we're sync!!*/ if (e==GF_IP_NETWORK_EMPTY) continue; if (e) goto err_exit; - if (ffd->buffer_used) break; + ffd->buffer_used += read; + if (ffd->buffer_used == ffd->buffer_size) break; } - - pd.filename = szName; - pd.buf_size = ffd->buffer_used; - pd.buf = ffd->buffer; - av_in = av_probe_input_format(&pd, 1); - if (!av_in) { - return GF_NOT_SUPPORTED; + if (e==GF_EOS) { + const char *cache_file = gf_dm_sess_get_cache_name(ffd->dnload); + res = av_open_input_file(&ffd->ctx, cache_file, av_in, 0, NULL); + } else { + pd.filename = szName; + pd.buf_size = ffd->buffer_used; + pd.buf = ffd->buffer; + av_in = av_probe_input_format(&pd, 1); + if (!av_in) { + GF_LOG(GF_LOG_ERROR, GF_LOG_CONTAINER, ("[FFMPEG] error probing file %s - probe start with %c %c %c %c\n", url, ffd->buffer[0], ffd->buffer[1], ffd->buffer[2], ffd->buffer[3])); + return GF_NOT_SUPPORTED; + } + /*setup downloader*/ + av_in->flags |= AVFMT_NOFILE; + res = av_open_input_stream(&ffd->ctx, &ffd->io, szName, av_in, NULL); } - /*setup downloader*/ - av_in->flags |= AVFMT_NOFILE; - res = av_open_input_stream(&ffd->ctx, &ffd->io, szName, av_in, NULL); } else { res = av_open_input_file(&ffd->ctx, szName, av_in, 0, NULL); } @@ -895,16 +916,15 @@ void *New_FFMPEG_Demux() GF_InputService *ffd = gf_malloc(sizeof(GF_InputService)); memset(ffd, 0, sizeof(GF_InputService)); - priv = gf_malloc(sizeof(FFDemux)); - memset(priv, 0, sizeof(FFDemux)); + GF_SAFEALLOC(priv, FFDemux); - GF_LOG(GF_LOG_INFO, GF_LOG_CONTAINER, ("[FFMPEG Demuxer] Registering all ffmpeg plugins...\n") ); - /* register all codecs, demux and protocols */ - av_register_all(); - GF_LOG(GF_LOG_DEBUG, GF_LOG_CONTAINER, ("[FFMPEG Demuxer] Registering all ffmpeg plugins DONE.\n") ); + GF_LOG(GF_LOG_INFO, GF_LOG_CONTAINER, ("[FFMPEG Demuxer] Registering all ffmpeg plugins...\n") ); + /* register all codecs, demux and protocols */ + av_register_all(); + GF_LOG(GF_LOG_DEBUG, GF_LOG_CONTAINER, ("[FFMPEG Demuxer] Registering all ffmpeg plugins DONE.\n") ); ffd->RegisterMimeTypes = FFD_RegisterMimeTypes; - ffd->CanHandleURL = FFD_CanHandleURL; + ffd->CanHandleURL = FFD_CanHandleURL; ffd->CloseService = FFD_CloseService; ffd->ConnectChannel = FFD_ConnectChannel; ffd->ConnectService = FFD_ConnectService; diff --git a/modules/ft_font/Makefile b/modules/ft_font/Makefile index 58e29c3..1b5fa80 100644 --- a/modules/ft_font/Makefile +++ b/modules/ft_font/Makefile @@ -38,7 +38,7 @@ all: $(LIB) $(LIB): $(OBJS) $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/$@ $(OBJS) $(LINKVAR) $(EXTRALIBS) ifeq ($(STATICBUILD),yes) - $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/gm_ft_font-static.so $(OBJS) $(LINKVAR) $(EXTRALIBS) + $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/gm_ft_font-static.$(DYN_LIB_SUFFIX) $(OBJS) $(LINKVAR) $(EXTRALIBS) endif diff --git a/modules/gpac_js/gpac_js.c b/modules/gpac_js/gpac_js.c index 0ecfc28..62e5046 100644 --- a/modules/gpac_js/gpac_js.c +++ b/modules/gpac_js/gpac_js.c @@ -50,6 +50,8 @@ #include #include +#define GPAC_JS_RTI_REFRESH_RATE 200 + typedef struct { u32 nb_loaded; @@ -64,7 +66,11 @@ typedef struct GF_Event *evt; JSContext *c; - JSObject *obj, *evt_obj; + JSObject *evt_filter_obj, *evt_obj; + JSObject *gpac_obj; + + u32 rti_refresh_rate; + GF_SystemRTInfo rti; } GF_GPACJSExt; @@ -170,6 +176,23 @@ static JSBool gpac_getProperty(JSContext *c, JSObject *obj, SMJS_PROP_GETTER, js else if (!strcmp(prop_name, "hardware_stretch")) { *vp = INT_TO_JSVAL( (term->compositor->video_out->hw_caps & GF_VIDEO_HW_HAS_STRETCH) ? 1 : 0 ); } + else if (!strcmp(prop_name, "http_bitrate")) { + *vp = INT_TO_JSVAL( gf_dm_get_data_rate(term->downloader)*8/1024); + } + else if (!strcmp(prop_name, "fps")) { + Double fps = gf_sc_get_fps(term->compositor, 0); + *vp = DOUBLE_TO_JSVAL(JS_NewDouble(c, fps) ); + } + else if (!strcmp(prop_name, "cpu_load")) { + GF_GPACJSExt *ext = (GF_GPACJSExt *)JS_GetPrivate(c, obj); + gf_sys_get_rti(ext->rti_refresh_rate, &ext->rti, 0); + *vp = INT_TO_JSVAL(ext->rti.process_cpu_usage); + } + else if (!strcmp(prop_name, "memory")) { + GF_GPACJSExt *ext = (GF_GPACJSExt *)JS_GetPrivate(c, obj); + gf_sys_get_rti(ext->rti_refresh_rate, &ext->rti, 0); + *vp = INT_TO_JSVAL(ext->rti.process_memory); + } SMJS_FREE(c, prop_name); @@ -237,6 +260,11 @@ static JSBool gpac_setProperty(JSContext *c, JSObject *obj, SMJS_PROP_SETTER, js gf_sc_set_option(term->compositor, GF_OPT_REFRESH, 0); } } + else if (!strcmp(prop_name, "http_bitrate")) { + u32 new_rate = JSVAL_TO_INT(*vp); + gf_dm_set_data_rate(term->downloader, new_rate * 128 /*1024/8*/); + } + SMJS_FREE(c, prop_name); return JS_TRUE; } @@ -330,6 +358,8 @@ static Bool enum_dir_fct(void *cbck, char *file_name, char *file_path) JSObject *obj; enum_dir_cbk *cbk = (enum_dir_cbk*)cbck; + if (file_name && (file_name[0]=='.')) return 0; + obj = JS_NewObject(cbk->c, 0, 0, 0); s = JS_NewStringCopyZ(cbk->c, file_name); JS_DefineProperty(cbk->c, obj, "name", STRING_TO_JSVAL(s), 0, 0, JSPROP_READONLY | JSPROP_PERMANENT); @@ -366,8 +396,10 @@ static JSBool SMJS_FUNCTION(gpac_enum_directory) char *url = NULL; char *dir = NULL; char *filter = NULL; + char *an_url; Bool dir_only = 0; Bool browse_root = 0; + GF_Terminal *term; SMJS_OBJ SMJS_ARGS @@ -413,15 +445,15 @@ static JSBool SMJS_FUNCTION(gpac_enum_directory) cbk.array = JS_NewArrayObject(c, 0, 0); cbk.is_dir = 1; - err = gf_enum_directory(url ? url : dir, 1, enum_dir_fct, &cbk, NULL); - if (err==GF_IO_ERR) { - GF_Terminal *term = gpac_get_term(c, obj); - /*try to concatenate with service url*/ - char *an_url = gf_url_concatenate(term->root_scene->root_od->net_service->url, url ? url : dir); + + term = gpac_get_term(c, obj); + /*concatenate with service url*/ + an_url = gf_url_concatenate(term->root_scene->root_od->net_service->url, url ? url : dir); + if (an_url) { gf_free(url); url = an_url; - gf_enum_directory(url ? url : dir, 1, enum_dir_fct, &cbk, NULL); } + err = gf_enum_directory(url ? url : dir, 1, enum_dir_fct, &cbk, NULL); if (!dir_only) { cbk.is_dir = 0; @@ -665,6 +697,19 @@ static JSBool gpacevt_getProperty(JSContext *c, JSObject *obj, SMJS_PROP_GETTER, if (!strcmp(name, "target_url")) { *vp = STRING_TO_JSVAL( JS_NewStringCopyZ(c, evt->navigate.to_url) ); } + else if (!strcmp(name, "files")) { + u32 i, idx; + jsval v; + JSObject *files_array = JS_NewArrayObject(c, 0, NULL); + for (i=0; iopen_file.nb_files; i++) { + if (evt->open_file.files[i]) { + JS_GetArrayLength(c, files_array, &idx); + v = STRING_TO_JSVAL( JS_NewStringCopyZ(c, evt->open_file.files[i]) ); + JS_SetElement(c, files_array, idx, &v); + } + } + *vp = OBJECT_TO_JSVAL(files_array); + } SMJS_FREE(c, name); } @@ -680,18 +725,18 @@ static Bool gjs_event_filter(void *udta, GF_Event *evt, Bool consumed_by_composi if (gjs->evt != NULL) return 0; gf_sg_lock_javascript(gjs->c, 1); - + rval = JSVAL_VOID; gjs->evt = evt; JS_SetPrivate(gjs->c, gjs->evt_obj, gjs); argv[0] = OBJECT_TO_JSVAL(gjs->evt_obj); - JS_CallFunctionValue(gjs->c, gjs->obj, gjs->evt_fun, 1, argv, &rval); + rval = JSVAL_VOID; + JS_CallFunctionValue(gjs->c, gjs->evt_filter_obj, gjs->evt_fun, 1, argv, &rval); JS_SetPrivate(gjs->c, gjs->evt_obj, NULL); gjs->evt = NULL; - if (rval==JSVAL_VOID) { - res = 0; - } else if (JSVAL_IS_BOOLEAN(rval) ) { + res = 0; + if (JSVAL_IS_BOOLEAN(rval) ) { res = (JSVAL_TO_BOOLEAN(rval)==JS_TRUE) ? 1 : 0; } else if (JSVAL_IS_INT(rval) ) { res = (JSVAL_TO_INT(rval)) ? 1 : 0; @@ -710,7 +755,7 @@ static JSBool SMJS_FUNCTION(gpac_set_event_filter) if (gjs->evt_fun) return JS_TRUE; gjs->evt_fun = argv[0]; - gjs->obj = obj; + gjs->evt_filter_obj = obj; gjs->c = c; gjs->evt_filter.udta = gjs; gjs->evt_filter.on_event = gjs_event_filter; @@ -786,8 +831,6 @@ static JSBool SMJS_FUNCTION(gpac_get_scene) static void gjs_load(GF_JSUserExtension *jsext, GF_SceneGraph *scene, JSContext *c, JSObject *global, Bool unload) { GF_GPACJSExt *gjs; - JSObject *obj; - GF_JSAPIParam par; JSPropertySpec gpacEvtClassProps[] = { @@ -810,6 +853,8 @@ static void gjs_load(GF_JSUserExtension *jsext, GF_SceneGraph *scene, JSContext JSFunctionSpec gpacClassFuncs[] = { SMJS_FUNCTION_SPEC("getOption", gpac_getOption, 3), SMJS_FUNCTION_SPEC("setOption", gpac_setOption, 4), + SMJS_FUNCTION_SPEC("get_option", gpac_getOption, 3), + SMJS_FUNCTION_SPEC("set_option", gpac_setOption, 4), SMJS_FUNCTION_SPEC("enum_directory", gpac_enum_directory, 1), SMJS_FUNCTION_SPEC("set_size", gpac_set_size, 1), SMJS_FUNCTION_SPEC("get_horizontal_dpi", gpac_get_horizontal_dpi, 0), @@ -839,10 +884,7 @@ static void gjs_load(GF_JSUserExtension *jsext, GF_SceneGraph *scene, JSContext } return; } - if (gjs->nb_loaded) { - gjs->nb_loaded++; - return; - } + gjs->nb_loaded++; if (!scene) return; @@ -850,52 +892,58 @@ static void gjs_load(GF_JSUserExtension *jsext, GF_SceneGraph *scene, JSContext JS_SETUP_CLASS(gjs->gpacClass, "GPAC", JSCLASS_HAS_PRIVATE, gpac_getProperty, gpac_setProperty, JS_FinalizeStub); - JS_InitClass(c, global, 0, &gjs->gpacClass, 0, 0, gpacClassProps, gpacClassFuncs, 0, 0); - obj = JS_DefineObject(c, global, "gpac", &gjs->gpacClass, 0, 0); + if (!gjs->gpac_obj) { + JS_InitClass(c, global, 0, &gjs->gpacClass, 0, 0, gpacClassProps, gpacClassFuncs, 0, 0); + gjs->gpac_obj = JS_DefineObject(c, global, "gpac", &gjs->gpacClass, 0, 0); - if (scene->script_action) { - if (scene->script_action(scene->script_action_cbck, GF_JSAPI_OP_GET_TERM, scene->RootNode, &par)) { - gjs->term = par.term; + if (scene->script_action) { + if (scene->script_action(scene->script_action_cbck, GF_JSAPI_OP_GET_TERM, scene->RootNode, &par)) { + gjs->term = par.term; + } } + JS_SetPrivate(c, gjs->gpac_obj, gjs); + } else { + JS_DefineProperty(c, global, "gpac", OBJECT_TO_JSVAL(gjs->gpac_obj), 0, 0, JSPROP_READONLY | JSPROP_PERMANENT); } - JS_SetPrivate(c, obj, gjs); - - JS_SETUP_CLASS(gjs->gpacEvtClass, "GPACEVT", JSCLASS_HAS_PRIVATE, gpacevt_getProperty, JS_PropertyStub_forSetter, JS_FinalizeStub); - JS_InitClass(c, global, 0, &gjs->gpacEvtClass, 0, 0, gpacEvtClassProps, gpacEvtClassFuncs, 0, 0); - gjs->evt_obj = JS_DefineObject(c, global, "gpacevt", &gjs->gpacEvtClass, 0, 0); + if (!gjs->evt_obj) { + JS_SETUP_CLASS(gjs->gpacEvtClass, "GPACEVT", JSCLASS_HAS_PRIVATE, gpacevt_getProperty, JS_PropertyStub_forSetter, JS_FinalizeStub); + JS_InitClass(c, global, 0, &gjs->gpacEvtClass, 0, 0, gpacEvtClassProps, gpacEvtClassFuncs, 0, 0); + gjs->evt_obj = JS_DefineObject(c, global, "gpacevt", &gjs->gpacEvtClass, 0, 0); #define DECLARE_GPAC_CONST(name) \ - JS_DefineProperty(c, global, #name, INT_TO_JSVAL(name), 0, 0, JSPROP_READONLY | JSPROP_PERMANENT); - - DECLARE_GPAC_CONST(GF_EVENT_CLICK); - DECLARE_GPAC_CONST(GF_EVENT_MOUSEUP); - DECLARE_GPAC_CONST(GF_EVENT_MOUSEDOWN); - DECLARE_GPAC_CONST(GF_EVENT_MOUSEMOVE); - DECLARE_GPAC_CONST(GF_EVENT_MOUSEWHEEL); - DECLARE_GPAC_CONST(GF_EVENT_KEYUP); - DECLARE_GPAC_CONST(GF_EVENT_KEYDOWN); - DECLARE_GPAC_CONST(GF_EVENT_TEXTINPUT); - DECLARE_GPAC_CONST(GF_EVENT_CONNECT); - DECLARE_GPAC_CONST(GF_EVENT_NAVIGATE_INFO); - DECLARE_GPAC_CONST(GF_EVENT_NAVIGATE); - - DECLARE_GPAC_CONST(GF_NAVIGATE_NONE); - DECLARE_GPAC_CONST(GF_NAVIGATE_WALK); - DECLARE_GPAC_CONST(GF_NAVIGATE_FLY); - DECLARE_GPAC_CONST(GF_NAVIGATE_PAN); - DECLARE_GPAC_CONST(GF_NAVIGATE_GAME); - DECLARE_GPAC_CONST(GF_NAVIGATE_SLIDE); - DECLARE_GPAC_CONST(GF_NAVIGATE_EXAMINE); - DECLARE_GPAC_CONST(GF_NAVIGATE_ORBIT); - DECLARE_GPAC_CONST(GF_NAVIGATE_VR); - - DECLARE_GPAC_CONST(GF_NAVIGATE_TYPE_NONE); - DECLARE_GPAC_CONST(GF_NAVIGATE_TYPE_2D); - DECLARE_GPAC_CONST(GF_NAVIGATE_TYPE_3D); - - JS_SETUP_CLASS(gjs->anyClass, "GPACOBJECT", JSCLASS_HAS_PRIVATE, JS_PropertyStub, JS_PropertyStub_forSetter, JS_FinalizeStub); - JS_InitClass(c, global, 0, &gjs->anyClass, 0, 0, 0, 0, 0, 0); + JS_DefineProperty(c, global, #name, INT_TO_JSVAL(name), 0, 0, JSPROP_READONLY | JSPROP_PERMANENT); + + DECLARE_GPAC_CONST(GF_EVENT_CLICK); + DECLARE_GPAC_CONST(GF_EVENT_MOUSEUP); + DECLARE_GPAC_CONST(GF_EVENT_MOUSEDOWN); + DECLARE_GPAC_CONST(GF_EVENT_MOUSEMOVE); + DECLARE_GPAC_CONST(GF_EVENT_MOUSEWHEEL); + DECLARE_GPAC_CONST(GF_EVENT_KEYUP); + DECLARE_GPAC_CONST(GF_EVENT_KEYDOWN); + DECLARE_GPAC_CONST(GF_EVENT_TEXTINPUT); + DECLARE_GPAC_CONST(GF_EVENT_CONNECT); + DECLARE_GPAC_CONST(GF_EVENT_NAVIGATE_INFO); + DECLARE_GPAC_CONST(GF_EVENT_NAVIGATE); + DECLARE_GPAC_CONST(GF_EVENT_OPENFILE); + + DECLARE_GPAC_CONST(GF_NAVIGATE_NONE); + DECLARE_GPAC_CONST(GF_NAVIGATE_WALK); + DECLARE_GPAC_CONST(GF_NAVIGATE_FLY); + DECLARE_GPAC_CONST(GF_NAVIGATE_PAN); + DECLARE_GPAC_CONST(GF_NAVIGATE_GAME); + DECLARE_GPAC_CONST(GF_NAVIGATE_SLIDE); + DECLARE_GPAC_CONST(GF_NAVIGATE_EXAMINE); + DECLARE_GPAC_CONST(GF_NAVIGATE_ORBIT); + DECLARE_GPAC_CONST(GF_NAVIGATE_VR); + + DECLARE_GPAC_CONST(GF_NAVIGATE_TYPE_NONE); + DECLARE_GPAC_CONST(GF_NAVIGATE_TYPE_2D); + DECLARE_GPAC_CONST(GF_NAVIGATE_TYPE_3D); + + JS_SETUP_CLASS(gjs->anyClass, "GPACOBJECT", JSCLASS_HAS_PRIVATE, JS_PropertyStub, JS_PropertyStub_forSetter, JS_FinalizeStub); + JS_InitClass(c, global, 0, &gjs->anyClass, 0, 0, 0, 0, 0, 0); + } } @@ -911,6 +959,7 @@ GF_JSUserExtension *gjs_new() GF_REGISTER_MODULE_INTERFACE(dr, GF_JS_USER_EXT_INTERFACE, "GPAC JavaScript Bindings", "gpac distribution"); GF_SAFEALLOC(gjs, GF_GPACJSExt); + gjs->rti_refresh_rate = GPAC_JS_RTI_REFRESH_RATE; dr->load = gjs_load; dr->udta = gjs; return dr; diff --git a/modules/hyb_in/fm_fake_pull.c b/modules/hyb_in/fm_fake_pull.c new file mode 100644 index 0000000..2680791 --- /dev/null +++ b/modules/hyb_in/fm_fake_pull.c @@ -0,0 +1,184 @@ +/* + * GPAC - Multimedia Framework C SDK + * + * Authors: Romain Bouqueau + * Copyright (c) Telecom ParisTech 2010-20xx + * All rights reserved + * + * This file is part of GPAC / Hybrid Media input module + * + * GPAC is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * GPAC 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; see the file COPYING. If not, write to + * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + * + */ + +/*hybrid media interface implementation generating fake audio consisting in beeps every second in pull mode*/ + +#include +#include "hyb_in.h" + +/**********************************************************************************************************************/ + +#define FM_FAKE_PULL_AUDIO_FREQ 44100 +#define FM_FAKE_PULL_CHAN_NUM 2 +#define FM_FAKE_PULL_BITS 16 +#define FM_FAKE_PULL_TYPE s16 +#define FM_FAKE_PULL_FRAME_DUR 60 /*in ms*/ +#define FM_FAKE_PULL_FRAME_LEN ((FM_FAKE_PULL_FRAME_DUR*FM_FAKE_PULL_CHAN_NUM*FM_FAKE_PULL_BITS*FM_FAKE_PULL_AUDIO_FREQ)/(1000*8)) /*in bytes*/ + +/**********************************************************************************************************************/ + +typedef struct s_FM_FAKE_PULL { + u64 PTS; + unsigned char buffer10[FM_FAKE_PULL_FRAME_LEN]; /*played 10 percent of time*/ + unsigned char buffer90[FM_FAKE_PULL_FRAME_LEN]; /*played 90 percent of time*/ + +} FM_FAKE_PULL; +FM_FAKE_PULL FM_FAKE_PULL_private_data; + +/**********************************************************************************************************************/ + +static Bool FM_FAKE_PULL_CanHandleURL(const char *url); +static GF_ObjectDescriptor* FM_FAKE_PULL_GetOD(void); +static GF_Err FM_FAKE_PULL_Connect(GF_HYBMEDIA *self, GF_ClientService *service, const char *url); +static GF_Err FM_FAKE_PULL_Disconnect(GF_HYBMEDIA *self); +static GF_Err FM_FAKE_PULL_GetData(GF_HYBMEDIA *self, char **out_data_ptr, u32 *out_data_size, GF_SLHeader *out_sl_hdr); +static GF_Err FM_FAKE_PULL_ReleaseData(GF_HYBMEDIA *self); + +GF_HYBMEDIA master_fm_fake_pull = { + "Fake FM (pull mode)", /*name*/ + FM_FAKE_PULL_CanHandleURL, /*CanHandleURL()*/ + FM_FAKE_PULL_GetOD, /*GetOD()*/ + FM_FAKE_PULL_Connect, /*Connect()*/ + FM_FAKE_PULL_Disconnect, /*Disconnect()*/ + NULL, /*SetState()*/ + FM_FAKE_PULL_GetData, /*GetData()*/ + FM_FAKE_PULL_ReleaseData, /*ReleaseData()*/ + HYB_PULL, /*data_mode*/ + &FM_FAKE_PULL_private_data /*private_data*/ +}; + +/**********************************************************************************************************************/ + +static Bool FM_FAKE_PULL_CanHandleURL(const char *url) +{ + if (!strnicmp(url, "fm://fake_pull", 14)) + return 1; + + return 0; +} + +/**********************************************************************************************************************/ + +static GF_ESD* get_esd() +{ + GF_BitStream *dsi = gf_bs_new(NULL, 0, GF_BITSTREAM_WRITE); + GF_ESD *esd = gf_odf_desc_esd_new(0); + + esd->ESID = 1; + esd->decoderConfig->streamType = GF_STREAM_AUDIO; + esd->decoderConfig->objectTypeIndication = GPAC_OTI_RAW_MEDIA_STREAM; + esd->decoderConfig->avgBitrate = esd->decoderConfig->maxBitrate = 0; + esd->slConfig->timestampResolution = FM_FAKE_PULL_AUDIO_FREQ; + + /*Decoder Specific Info for raw media*/ + gf_bs_write_u32(dsi, FM_FAKE_PULL_AUDIO_FREQ); /*u32 sample_rate*/ + gf_bs_write_u16(dsi, FM_FAKE_PULL_CHAN_NUM); /*u16 nb_channels*/ + gf_bs_write_u16(dsi, FM_FAKE_PULL_BITS); /*u16 nb_bits_per_sample*/ + gf_bs_write_u32(dsi, FM_FAKE_PULL_FRAME_LEN); /*u32 frame_size*/ + gf_bs_write_u32(dsi, 0); /*u32 channel_config*/ + gf_bs_get_content(dsi, &esd->decoderConfig->decoderSpecificInfo->data, &esd->decoderConfig->decoderSpecificInfo->dataLength); + gf_bs_del(dsi); + + return esd; +} + +/**********************************************************************************************************************/ + +static GF_ObjectDescriptor* FM_FAKE_PULL_GetOD(void) +{ + /*declare object to terminal*/ + GF_ObjectDescriptor *od = (GF_ObjectDescriptor*)gf_odf_desc_new(GF_ODF_OD_TAG); + GF_ESD *esd = get_esd(); + od->objectDescriptorID = 1; + gf_list_add(od->ESDescriptors, esd); + return od; +} + +/**********************************************************************************************************************/ + +static GF_Err FM_FAKE_PULL_Connect(GF_HYBMEDIA *self, GF_ClientService *service, const char *url) +{ + u32 i; + + if (!self) + return GF_BAD_PARAM; + + if (!service) + return GF_BAD_PARAM; + + self->owner = service; + + /*set audio preloaded data*/ + assert(self->private_data); + memset(self->private_data, 0, sizeof(FM_FAKE_PULL)); + for (i=0; i<(FM_FAKE_PULL_FRAME_LEN*8)/FM_FAKE_PULL_BITS; i++) { + if (((2*i)/(FM_FAKE_PULL_CHAN_NUM*100))%2) /*100Hz*/ + *((FM_FAKE_PULL_TYPE*)((FM_FAKE_PULL*)self->private_data)->buffer10+i) = 1 << (FM_FAKE_PULL_BITS-1); + } + + return GF_OK; +} + +/**********************************************************************************************************************/ + +static GF_Err FM_FAKE_PULL_Disconnect(GF_HYBMEDIA *self) +{ + self->owner = NULL; + return GF_OK; +} + +/**********************************************************************************************************************/ + +static GF_Err FM_FAKE_PULL_GetData(GF_HYBMEDIA *self, char **out_data_ptr, u32 *out_data_size, GF_SLHeader *out_sl_hdr) +{ + u64 delta_pts = (FM_FAKE_PULL_FRAME_DUR*FM_FAKE_PULL_AUDIO_FREQ)/1000; + assert(!(FM_FAKE_PULL_FRAME_DUR*FM_FAKE_PULL_AUDIO_FREQ%1000)); + + /*write SL header*/ + memset(out_sl_hdr, 0, sizeof(GF_SLHeader)); + out_sl_hdr->compositionTimeStampFlag = 1; + out_sl_hdr->compositionTimeStamp = ((FM_FAKE_PULL*)self->private_data)->PTS; + out_sl_hdr->accessUnitStartFlag = 1; + + /*write audio data*/ + if ((((FM_FAKE_PULL*)self->private_data)->PTS%(10*delta_pts))) { + *out_data_ptr = ((FM_FAKE_PULL*)self->private_data)->buffer90; + } else { + *out_data_ptr = ((FM_FAKE_PULL*)self->private_data)->buffer10; + } + *out_data_size = FM_FAKE_PULL_FRAME_LEN; + ((FM_FAKE_PULL*)self->private_data)->PTS += delta_pts; + + return GF_OK; +} + +/**********************************************************************************************************************/ + +static GF_Err FM_FAKE_PULL_ReleaseData(GF_HYBMEDIA *self) +{ + return GF_OK; +} + +/**********************************************************************************************************************/ diff --git a/modules/hyb_in/fm_fake_push.c b/modules/hyb_in/fm_fake_push.c new file mode 100644 index 0000000..1ef2c35 --- /dev/null +++ b/modules/hyb_in/fm_fake_push.c @@ -0,0 +1,307 @@ +/* + * GPAC - Multimedia Framework C SDK + * + * Authors: Romain Bouqueau + * Copyright (c) Telecom ParisTech 2010-20xx + * All rights reserved + * + * This file is part of GPAC / Hybrid Media input module + * + * GPAC is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * GPAC 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; see the file COPYING. If not, write to + * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + * + */ + +/*hybrid media interface implementation generating fake audio consisting in beeps every second in push mode*/ + +#include +#include +#include +#include "hyb_in.h" + +/**********************************************************************************************************************/ + +#define FM_FAKE_PUSH_AUDIO_FREQ 44100 +#define FM_FAKE_PUSH_CHAN_NUM 2 +#define FM_FAKE_PUSH_BITS 16 +#define FM_FAKE_PUSH_TYPE s16 +#define FM_FAKE_PUSH_FRAME_DUR 60 /*in ms*/ +#define FM_FAKE_PUSH_FRAME_LEN ((FM_FAKE_PUSH_FRAME_DUR*FM_FAKE_PUSH_CHAN_NUM*FM_FAKE_PUSH_BITS*FM_FAKE_PUSH_AUDIO_FREQ)/(1000*8)) /*in bytes*/ + +/**********************************************************************************************************************/ + +typedef struct s_FM_FAKE_PUSH { + u64 PTS; + unsigned char buffer10[FM_FAKE_PUSH_FRAME_LEN]; /*played 10 percent of time*/ + unsigned char buffer90[FM_FAKE_PUSH_FRAME_LEN]; /*played 90 percent of time*/ + + GF_Thread *th; + +} FM_FAKE_PUSH; +FM_FAKE_PUSH FM_FAKE_PUSH_private_data; + +/**********************************************************************************************************************/ + +static Bool FM_FAKE_PUSH_CanHandleURL(const char *url); +static GF_ObjectDescriptor* FM_FAKE_PUSH_GetOD(void); +static GF_Err FM_FAKE_PUSH_Connect(GF_HYBMEDIA *self, GF_ClientService *service, const char *url); +static GF_Err FM_FAKE_PUSH_Disconnect(GF_HYBMEDIA *self); +static GF_Err FM_FAKE_PUSH_SetState(GF_HYBMEDIA *self, const GF_NET_CHAN_CMD state); + +GF_HYBMEDIA master_fm_fake_push = { + "Fake FM (push mode)", /*name*/ + FM_FAKE_PUSH_CanHandleURL, /*CanHandleURL()*/ + FM_FAKE_PUSH_GetOD, /*GetOD()*/ + FM_FAKE_PUSH_Connect, /*Connect()*/ + FM_FAKE_PUSH_Disconnect, /*Disconnect()*/ + FM_FAKE_PUSH_SetState, /*SetState()*/ + NULL, /*GetData()*/ + NULL, /*ReleaseData()*/ + HYB_PUSH, /*data_mode*/ + &FM_FAKE_PUSH_private_data /*private_data*/ +}; + +/**********************************************************************************************************************/ + +static Bool FM_FAKE_PUSH_CanHandleURL(const char *url) +{ + if (!strnicmp(url, "fm://fake_push", 14)) + return 1; + + return 0; +} + +/**********************************************************************************************************************/ + +static GF_ESD* get_esd() +{ + GF_BitStream *dsi = gf_bs_new(NULL, 0, GF_BITSTREAM_WRITE); + GF_ESD *esd = gf_odf_desc_esd_new(0); + + esd->ESID = 1; + esd->decoderConfig->streamType = GF_STREAM_AUDIO; + esd->decoderConfig->objectTypeIndication = GPAC_OTI_RAW_MEDIA_STREAM; + esd->decoderConfig->avgBitrate = esd->decoderConfig->maxBitrate = 0; + esd->slConfig->timestampResolution = FM_FAKE_PUSH_AUDIO_FREQ; + + /*Decoder Specific Info for raw media*/ + gf_bs_write_u32(dsi, FM_FAKE_PUSH_AUDIO_FREQ); /*u32 sample_rate*/ + gf_bs_write_u16(dsi, FM_FAKE_PUSH_CHAN_NUM); /*u16 nb_channels*/ + gf_bs_write_u16(dsi, FM_FAKE_PUSH_BITS); /*u16 nb_bits_per_sample*/ + gf_bs_write_u32(dsi, FM_FAKE_PUSH_FRAME_LEN); /*u32 frame_size*/ + gf_bs_write_u32(dsi, 0); /*u32 channel_config*/ + gf_bs_get_content(dsi, &esd->decoderConfig->decoderSpecificInfo->data, &esd->decoderConfig->decoderSpecificInfo->dataLength); + gf_bs_del(dsi); + + return esd; +} + +/**********************************************************************************************************************/ + +static GF_ObjectDescriptor* FM_FAKE_PUSH_GetOD(void) +{ + /*declare object to terminal*/ + GF_ObjectDescriptor *od = (GF_ObjectDescriptor*)gf_odf_desc_new(GF_ODF_OD_TAG); + GF_ESD *esd = get_esd(); + od->objectDescriptorID = 1; + gf_list_add(od->ESDescriptors, esd); + return od; +} + +/**********************************************************************************************************************/ + +static GF_Err GetData(const GF_HYBMEDIA *self, char **out_data_ptr, u32 *out_data_size, GF_SLHeader *out_sl_hdr) +{ + u64 delta_pts = (FM_FAKE_PUSH_FRAME_DUR*FM_FAKE_PUSH_AUDIO_FREQ)/1000; + assert(!(FM_FAKE_PUSH_FRAME_DUR*FM_FAKE_PUSH_AUDIO_FREQ%1000)); + + /*write SL header*/ + memset(out_sl_hdr, 0, sizeof(GF_SLHeader)); + out_sl_hdr->compositionTimeStampFlag = 1; + out_sl_hdr->compositionTimeStamp = ((FM_FAKE_PUSH*)self->private_data)->PTS; + out_sl_hdr->accessUnitStartFlag = 1; + + /*write audio data*/ + if ((((FM_FAKE_PUSH*)self->private_data)->PTS%(10*delta_pts))) { + *out_data_ptr = ((FM_FAKE_PUSH*)self->private_data)->buffer90; + } else { + *out_data_ptr = ((FM_FAKE_PUSH*)self->private_data)->buffer10; + } + *out_data_size = FM_FAKE_PUSH_FRAME_LEN; + ((FM_FAKE_PUSH*)self->private_data)->PTS += delta_pts; + + return GF_OK; +} + +/**********************************************************************************************************************/ + +static u32 audio_gen_th(void *par) +{ + GF_Err e; + char *data; + u32 data_size, init_time; + s32 time_to_wait = 0; + GF_SLHeader slh; + GF_HYBMEDIA *self = (GF_HYBMEDIA*) par; + FM_FAKE_PUSH *fm_fake_push = (FM_FAKE_PUSH*)self->private_data; + memset(&slh, 0, sizeof(GF_SLHeader)); + + while (self->state >= 0) /*pause or play*/ + { + if (self->state == HYB_STATE_PAUSE) { + gf_sleep(10); + init_time = (u32)(gf_sys_clock() - ((u64)slh.compositionTimeStamp*1000)/FM_FAKE_PUSH_AUDIO_FREQ); /*pause: won't wait at resume*/ + continue; + } + + if (!time_to_wait) + { + /*TODO: remove the sleep*/ + gf_sleep(1000); + + /*for hybrid scenarios: add an external media*/ + { + /*declare object to terminal*/ + GF_ObjectDescriptor *od = (GF_ObjectDescriptor*)gf_odf_desc_new(GF_ODF_OD_TAG); + od->URLString = PUT_TOUR_URL_HERE; + od->objectDescriptorID = 0; + gf_term_add_media(self->owner, (GF_Descriptor*)od, 0); + } + + /*for hybrid scenarios: map clocks*/ + { + time_t now; + struct tm *now_tm; + time(&now); + now_tm = gmtime(&now); + { + GF_NetworkCommand com; + memset(&com, 0, sizeof(com)); + com.command_type = GF_NET_CHAN_MAP_TIME; + com.map_time.media_time = now_tm->tm_hour*3600+now_tm->tm_min*60+now_tm->tm_sec; + com.map_time.timestamp = slh.compositionTimeStamp; + com.map_time.reset_buffers = 0; + com.base.on_channel = self->channel; + gf_term_on_command(self->owner, &com, GF_OK); + GF_LOG(GF_LOG_INFO, GF_LOG_MEDIA, ("[HYB In] Mapping WC Time %04d/%02d/%02d %02d:%02d:%02d and Hyb time "LLD"\n", + (now_tm->tm_year + 1900), (now_tm->tm_mon + 1), now_tm->tm_mday, now_tm->tm_hour, now_tm->tm_min, now_tm->tm_sec, + com.map_time.timestamp)); + } + } + + /*initialize clock*/ + init_time = gf_sys_clock(); + } + + time_to_wait = (u32)(init_time + ((u64)slh.compositionTimeStamp*1000)/FM_FAKE_PUSH_AUDIO_FREQ - gf_sys_clock()); + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[HYB_IN] FM_FAKE_PUSH - %d ms before next AU\n", time_to_wait)); + if (time_to_wait > 0) { + if (time_to_wait > 1000) /*TODO: understand the big shifts when playing icecasts contents*/ + GF_LOG(GF_LOG_WARNING, GF_LOG_MODULE, ("[HYB_IN] FM_FAKE_PUSH - audio asked to sleep for %d ms\n", time_to_wait)); + gf_sleep(time_to_wait); + } + + e = GetData(self, &data, &data_size, &slh); + gf_term_on_sl_packet(self->owner, self->channel, data, data_size, &slh, e); + } + + self->state = HYB_STATE_STOPPED; + + return 0; +} + +/**********************************************************************************************************************/ + +static void audio_gen_stop(GF_HYBMEDIA *self) +{ + if (self->state >= 0) { /*only when playing*/ + self->state = HYB_STATE_STOP_REQ; + while (self->state != HYB_STATE_STOPPED) + gf_sleep(10); + } +} + +/**********************************************************************************************************************/ + +static GF_Err FM_FAKE_PUSH_Connect(GF_HYBMEDIA *self, GF_ClientService *service, const char *url) +{ + u32 i; + FM_FAKE_PUSH *priv; + + if (!self) + return GF_BAD_PARAM; + + if (!service) + return GF_BAD_PARAM; + + priv = (FM_FAKE_PUSH*)self->private_data; + if (!priv) + return GF_BAD_PARAM; + + self->owner = service; + + /*set audio preloaded data*/ + memset(self->private_data, 0, sizeof(FM_FAKE_PUSH)); + for (i=0; i<(FM_FAKE_PUSH_FRAME_LEN*8)/FM_FAKE_PUSH_BITS; i++) { + if (((2*i)/(FM_FAKE_PUSH_CHAN_NUM*100))%2) /*100Hz*/ + *((FM_FAKE_PUSH_TYPE*)((FM_FAKE_PUSH*)self->private_data)->buffer10+i) = 1 << (FM_FAKE_PUSH_BITS-1); + } + + assert(!priv->th); + priv->th = gf_th_new("HYB-FM fake audio generation thread"); + self->state = HYB_STATE_PAUSE; + gf_th_run(priv->th, audio_gen_th, self); + + return GF_OK; +} + +/**********************************************************************************************************************/ + +static GF_Err FM_FAKE_PUSH_Disconnect(GF_HYBMEDIA *self) +{ + FM_FAKE_PUSH *priv = (FM_FAKE_PUSH*)self->private_data; + + audio_gen_stop(self); + gf_th_del(priv->th); + priv->th = NULL; + + self->owner = NULL; + return GF_OK; +} + +/**********************************************************************************************************************/ + +static GF_Err FM_FAKE_PUSH_SetState(GF_HYBMEDIA *self, const GF_NET_CHAN_CMD state) +{ + switch(state) { + case GF_NET_CHAN_PLAY: + self->state = HYB_STATE_PLAYING; + break; + case GF_NET_CHAN_STOP: + audio_gen_stop(self); + break; + case GF_NET_CHAN_PAUSE: + self->state = HYB_STATE_PAUSE; + break; + case GF_NET_CHAN_RESUME: + self->state = HYB_STATE_PLAYING; + break; + default: + return GF_BAD_PARAM; + } + + return GF_OK; +} + +/**********************************************************************************************************************/ diff --git a/modules/hyb_in/fm_mmbtools.c b/modules/hyb_in/fm_mmbtools.c new file mode 100644 index 0000000..bf598fc --- /dev/null +++ b/modules/hyb_in/fm_mmbtools.c @@ -0,0 +1,104 @@ +/* + * GPAC - Multimedia Framework C SDK + * + * Authors: Romain Bouqueau + * Copyright (c) Telecom ParisTech 2010-20xx + * All rights reserved + * + * This file is part of GPAC / Hybrid Media input module + * + * GPAC is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * GPAC 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; see the file COPYING. If not, write to + * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + * + */ + + +/*hybrid media interface implementation using MMB Tools from the Communication Research Center Canada (http://mmbtools.crc.ca/)*/ + +#include + +#if 0 + + +GF_HYBMEDIA master_fm_mmbtools = { +}; + + +typedef struct { + Bool clock_found_time; /*simulate the discovery of a RDS clock: arrives within the first minutes with a 100ms jitter*/ + + GF_Thread *fm_th; + volatile u32 fm_th_state; +} FM_MMBTOOLS; + + + +static Bool FM_MMBTOOLS_CanHandleURL(const char *url) +{ + if (!strnicmp(url, "fm://", 5)) + return 1; + + return 0; +} + +static GF_ObjectDescriptor* FM_MMBTOOLS_GetOD() +{ + + return od; +} + +static GF_Err HYB_FM_Close(GF_HYB_In *hyb_in) +{ + /*stop the audio_generation thread*/ + hyb_in->fm_th_state = HYB_STATE_STOPPING; + while (hyb_in->fm_th_state != HYB_STATE_STOPPED) + gf_sleep(10); + + return GF_OK; +} + +static GF_Err HYB_FM_Connect(GF_HYB_In *hyb_in, const char *url) +{ + FM_MMBTOOLS* audio_gen; + if (hyb_in->fm_thread) + return GF_ERR; + GF_SAFEALLOC(audio_gen, FM_MMBTOOLS); + hyb_in->fm_thread = gf_th_new("HYB-FM fake audio generation thread"); + gf_th_run(hyb_in->fm_thread, audio_gen_th, audio_gen); + + return GF_OK; +} + +static u32 audio_gen_th(void *par) +{ + FM_MMBTOOLS audio_gen = (FM_MMBTOOLS*) par; + + /*RDS clock discovery time*/ + clock_found_time = rand() % XXX; //radom in the 1st minute + + while (!audio_gen->state) /*FM_MMBTOOLS_STATE_RUNNING*/ + { + gf_sleep (remaining); + + if (clock > clock_found_time && ) { + gf_term_clock clock(); + } else { + gf_term_clock utc_clock(); + } + } + + audio_gen->state = FM_MMBTOOLS_STATE_STOPPED; +} + +#endif diff --git a/modules/hyb_in/hyb_in.c b/modules/hyb_in/hyb_in.c new file mode 100644 index 0000000..5500f55 --- /dev/null +++ b/modules/hyb_in/hyb_in.c @@ -0,0 +1,308 @@ +/* + * GPAC - Multimedia Framework C SDK + * + * Authors: Romain Bouqueau + * Copyright (c) Telecom ParisTech 2010-20xx + * All rights reserved + * + * This file is part of GPAC / Hybrid Media input module + * + * GPAC is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * GPAC 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; see the file COPYING. If not, write to + * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + * + */ + +#include "hyb_in.h" + +/*register by hand existing masters*/ +extern GF_HYBMEDIA master_fm_mmbtools; +extern GF_HYBMEDIA master_fm_fake_pull; +extern GF_HYBMEDIA master_fm_fake_push; + +GF_HYBMEDIA* hyb_masters[] = { + &master_fm_fake_pull, + &master_fm_fake_push, +#ifdef GPAC_ANDROID + &master_fm_mmbtools, +#endif +}; + +typedef struct { + /*GPAC Service object (i.e. how this module is seen by the terminal)*/ + GF_ClientService *service; + + /*This Hybrid media architecture assumes there is a master media*/ + GF_HYBMEDIA* master; + +} GF_HYB_In; + + +static u32 HYB_RegisterMimeTypes(const GF_InputService *plug) +{ + if (!plug) + return 0; + + return 1; +} + +static Bool HYB_CanHandleURL(GF_InputService *plug, const char *url) +{ + u32 i; + const size_t nb_masters = sizeof(hyb_masters) / sizeof(GF_HYBMEDIA*); + + for (i=0; iCanHandleURL(url)) + return 1; + } + + return 0; +} + +static GF_Err hybmedia_sanity_check(GF_HYBMEDIA *master) +{ + /*these checks need to be upgraded when the interface changes*/ + if (master->data_mode != HYB_PUSH && master->data_mode != HYB_PULL) + return GF_BAD_PARAM; + + if (!master->name) goto error_exit; + if (!master->CanHandleURL) goto error_exit; + if (!master->GetOD) goto error_exit; + if (!master->Connect) goto error_exit; + if (!master->Disconnect) goto error_exit; + + if (master->data_mode == HYB_PUSH) { + if (!master->SetState) goto error_exit; + } + + if (master->data_mode == HYB_PULL) { + if (!master->GetData) goto error_exit; + if (!master->ReleaseData) goto error_exit; + } + + return GF_OK; + +error_exit: + return GF_SERVICE_ERROR; +} + +static GF_Err HYB_ConnectService(GF_InputService *plug, GF_ClientService *serv, const char *url) +{ + u32 i; + GF_Err e = GF_OK; + const size_t nb_masters = sizeof(hyb_masters) / sizeof(GF_HYBMEDIA*); + + GF_HYB_In *hyb_in = (GF_HYB_In*)plug->priv; + + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[HYB_IN] Received Connection request from service %p for %s\n", serv, url)); + + if (!hyb_in || !serv || !url) return GF_BAD_PARAM; + hyb_in->service = serv; + + /*choose the master service*/ + for (i=0; iCanHandleURL(url)) { + hyb_in->master = hyb_masters[i]; + break; + } + } + assert(hyb_in->master); + + /*sanity check about the master*/ + e = hybmedia_sanity_check(hyb_in->master); + if (e) { + GF_LOG(GF_LOG_ERROR, GF_LOG_MODULE, ("[HYB_IN] Error - object \"%s\" failed the sanity checks\n", hyb_in->master->name)); + gf_term_on_connect(hyb_in->service, NULL, e); + return e; + } + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[HYB_IN] Selected master object \"%s\" for URL: %s\n", hyb_in->master->name, url)); + + /*connect the master*/ + e = hyb_in->master->Connect(hyb_in->master, hyb_in->service, url); + if (e) { + GF_LOG(GF_LOG_ERROR, GF_LOG_MODULE, ("[HYB_IN] Error - cannot connect service, wrong URL %s\n", url)); + gf_term_on_connect(hyb_in->service, NULL, GF_BAD_PARAM); + return e; + } + gf_term_on_connect(hyb_in->service, NULL, GF_OK); + gf_term_add_media(hyb_in->service, (GF_Descriptor*)hyb_in->master->GetOD(), 0); + + return GF_OK; +} + +static GF_Err HYB_CloseService(GF_InputService *plug) +{ + GF_Err e; + GF_HYB_In *hyb_in = (GF_HYB_In*)plug->priv; + + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[HYB_IN] Received Close Service (%p) request from terminal\n", ((GF_HYB_In*)plug->priv)->service)); + + /*force to stop and disconnect the master*/ + hyb_in->master->SetState(hyb_in->master, GF_NET_CHAN_STOP); + e = hyb_in->master->Disconnect(hyb_in->master); + if (e) { + GF_LOG(GF_LOG_ERROR, GF_LOG_MODULE, ("[HYB_IN] Error - cannot disconnect service %p\n", hyb_in->service)); + gf_term_on_connect(hyb_in->service, NULL, GF_BAD_PARAM); + return e; + } + + return GF_OK; +} + +static GF_Descriptor *HYB_GetServiceDesc(GF_InputService *plug, u32 expect_type, const char *sub_url) +{ + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[HYB_IN] Received Service Description request from terminal for %s\n", sub_url)); + + return NULL; +} + +static GF_Err HYB_ConnectChannel(GF_InputService *plug, LPNETCHANNEL channel, const char *url, Bool upstream) +{ + GF_HYB_In *hyb_in; + GF_HYBMEDIA *master; + + if (!plug || !plug->priv) + return GF_SERVICE_ERROR; + + hyb_in = (GF_HYB_In*)plug->priv; + master = (GF_HYBMEDIA*)hyb_in->master; + + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[HYB_IN] Received Channel Connection request from service %p for %s\n", channel, url)); + + master->channel = channel; + gf_term_on_connect(hyb_in->service, channel, GF_OK); + + return GF_OK; +} + +static GF_Err HYB_DisconnectChannel(GF_InputService *plug, LPNETCHANNEL channel) +{ + GF_HYB_In *hyb_in = (GF_HYB_In*)plug->priv; + + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[HYB_IN] Received Channel Disconnect Service (%p) request from terminal\n", hyb_in->service)); + + hyb_in->master->channel = NULL; + gf_term_on_disconnect(hyb_in->service, NULL, GF_OK); + + return GF_OK; +} + +static GF_Err HYB_ServiceCommand(GF_InputService *plug, GF_NetworkCommand *com) +{ + GF_HYB_In *hyb_in = (GF_HYB_In*)plug->priv; + + switch (com->command_type) { + case GF_NET_CHAN_SET_SPEED: + /*not implemented for push mode*/ + assert(hyb_in->master->data_mode == HYB_PULL); + return GF_OK; + case GF_NET_CHAN_INTERACTIVE: + return GF_NOT_SUPPORTED; + case GF_NET_CHAN_BUFFER: + com->buffer.max = com->buffer.min = 0; + return GF_OK; + case GF_NET_CHAN_DURATION: + com->duration.duration = 0; + return GF_OK; + case GF_NET_CHAN_PLAY: + case GF_NET_CHAN_STOP: + case GF_NET_CHAN_PAUSE: + case GF_NET_CHAN_RESUME: + if (hyb_in->master->data_mode == HYB_PUSH) + return hyb_in->master->SetState(hyb_in->master, com->command_type); + return GF_OK; + case GF_NET_CHAN_SET_PULL: + if (hyb_in->master->data_mode == HYB_PULL) + return GF_OK; + else + return GF_NOT_SUPPORTED; /*we're in push mode*/ + } + + return GF_OK; +} + +static Bool HYB_CanHandleURLInService(GF_InputService *plug, const char *url) +{ + return 0; +} + +static GF_Err HYB_ChannelGetSLP(GF_InputService *plug, LPNETCHANNEL channel, char **out_data_ptr, u32 *out_data_size, GF_SLHeader *out_sl_hdr, Bool *sl_compressed, GF_Err *out_reception_status, Bool *is_new_data) +{ + GF_HYB_In *hyb_in = (GF_HYB_In*)plug->priv; + assert(hyb_in->master->data_mode == HYB_PULL && hyb_in->master->GetData && hyb_in->master->ReleaseData); + + assert(((GF_HYB_In*)plug->priv)->master->channel == channel); + hyb_in->master->GetData(hyb_in->master, out_data_ptr, out_data_size, out_sl_hdr); + *sl_compressed = 0; + *out_reception_status = GF_OK; + *is_new_data = 1; + return GF_OK; +} + +static GF_Err HYB_ChannelReleaseSLP(GF_InputService *plug, LPNETCHANNEL channel) +{ + GF_HYB_In *hyb_in = (GF_HYB_In*)plug->priv; + assert(((GF_HYB_In*)plug->priv)->master->channel == channel); + return GF_OK; +} + +GF_EXPORT +const u32 *QueryInterfaces() +{ + static u32 si [] = { + GF_NET_CLIENT_INTERFACE, + 0 + }; + return si; +} + +GF_EXPORT +GF_BaseInterface *LoadInterface(u32 InterfaceType) +{ + GF_HYB_In *hyb_in; + GF_InputService *plug; + if (InterfaceType != GF_NET_CLIENT_INTERFACE) return NULL; + + GF_SAFEALLOC(plug, GF_InputService); + GF_REGISTER_MODULE_INTERFACE(plug, GF_NET_CLIENT_INTERFACE, "GPAC HYBRID MEDIA Loader", "gpac distribution") + plug->RegisterMimeTypes= HYB_RegisterMimeTypes; + plug->CanHandleURL= HYB_CanHandleURL; + plug->ConnectService= HYB_ConnectService; + plug->CloseService= HYB_CloseService; + plug->GetServiceDescriptor= HYB_GetServiceDesc; + plug->ConnectChannel= HYB_ConnectChannel; + plug->DisconnectChannel= HYB_DisconnectChannel; + plug->ServiceCommand= HYB_ServiceCommand; + plug->CanHandleURLInService=HYB_CanHandleURLInService; + plug->ChannelGetSLP= HYB_ChannelGetSLP; + plug->ChannelReleaseSLP= HYB_ChannelReleaseSLP; + + GF_SAFEALLOC(hyb_in, GF_HYB_In); + plug->priv = hyb_in; + + return (GF_BaseInterface *)plug; +} + +GF_EXPORT +void ShutdownInterface(GF_BaseInterface *ifce) +{ + GF_LOG(GF_LOG_MEDIA, GF_LOG_ERROR, ("DeleteLoaderInterface %p: 1\n", ifce)); + if (ifce->InterfaceType == GF_NET_CLIENT_INTERFACE) { + GF_InputService *plug = (GF_InputService*)ifce; + GF_HYB_In *hyb_in = (GF_HYB_In*)plug->priv; + gf_free(hyb_in); + plug->priv = NULL; + gf_free(plug); + GF_LOG(GF_LOG_MEDIA, GF_LOG_ERROR, ("DeleteLoaderInterface %p: 2\n", ifce)); + } +} diff --git a/modules/hyb_in/hyb_in.h b/modules/hyb_in/hyb_in.h new file mode 100644 index 0000000..1c60ed6 --- /dev/null +++ b/modules/hyb_in/hyb_in.h @@ -0,0 +1,96 @@ +/* + * GPAC - Multimedia Framework C SDK + * + * Authors: Romain Bouqueau + * Copyright (c) Telecom ParisTech 2010-20xx + * All rights reserved + * + * This file is part of GPAC / Hybrid Media input module + * + * GPAC is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * GPAC 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; see the file COPYING. If not, write to + * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + * + */ + +#ifndef _HYB_IN_H +#define _HYB_IN_H + +#include +#include +#include + + +typedef enum { + HYB_STATE_STOPPED = -2, /*thread received HYB_STATE_STOP_REQ and stopped*/ + HYB_STATE_STOP_REQ = -1, /*user asked to stop*/ + HYB_STATE_PAUSE = 0, /*default state*/ + //HYB_STATE_PLAY_REQ = 1, /*user asked to play*/ + HYB_STATE_PLAYING = 2, /*thread received HYB_STATE_PLAY_REQ and has started playing*/ +} HYB_STATE; + +typedef enum { + HYB_PUSH = 0, /*threaded*/ + HYB_PULL, /*not threaded*/ +} HYB_DATA_MODE; + +/*base structure for media hybridation*/ +typedef struct s_GF_HYBMEDIA { + + /*object description*/ + const char* name; + + /* *** static methods *** */ + + /*is url handled by this service?*/ + Bool (*CanHandleURL)(const char *url); + + /*retrieve object descriptor*/ + GF_ObjectDescriptor* (*GetOD)(void); + + + /* *** other methods *** */ + + /*create/destroy the object and all its data*/ + GF_Err (*Connect) (struct s_GF_HYBMEDIA *self, GF_ClientService *service, const char *url); + GF_Err (*Disconnect)(struct s_GF_HYBMEDIA *self); + + /*request state from */ + GF_Err (*SetState)(struct s_GF_HYBMEDIA *self, const GF_NET_CHAN_CMD state); + + /*in case data retrieval paradigm is pull these two functions shall not be NULL*/ + GF_Err (*GetData) (struct s_GF_HYBMEDIA *self, char **out_data_ptr, u32 *out_data_size, GF_SLHeader *out_sl_hdr); /*only available when data_mode is pull*/ + GF_Err (*ReleaseData)(struct s_GF_HYBMEDIA *self); /*only available when data_mode is pull*/ + + + /* *** statically initialized data *** */ + + /*data retrieval mode: HYB_PUSH or HYB_PULL*/ + HYB_DATA_MODE data_mode; + + /*pivate data which type depends on dynamic considerations*/ + void *private_data; + + + /* *** dynamically initialized data *** */ + + /*object state: play/stop/pause/...*/ + HYB_STATE state; + + /*object carrying us (needed to communicate with the player)*/ + GF_ClientService *owner; + LPNETCHANNEL channel; + +} GF_HYBMEDIA; + +#endif diff --git a/modules/img_in/Makefile b/modules/img_in/Makefile index 2cd7f68..f085be1 100644 --- a/modules/img_in/Makefile +++ b/modules/img_in/Makefile @@ -60,7 +60,7 @@ all: $(LIB) $(LIB): $(OBJS) $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/$@ $(OBJS) $(EXTRALIBS) -L$(LOCAL_LIB) $(LINKLIBS) ifeq ($(STATICBUILD),yes) - $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/gm_img_in-static.so $(OBJS) $(EXTRALIBS) -L$(LOCAL_LIB) $(LINKLIBS) + $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/gm_img_in-static.$(DYN_LIB_SUFFIX) $(OBJS) $(EXTRALIBS) -L$(LOCAL_LIB) $(LINKLIBS) endif diff --git a/modules/img_in/img_dec.c b/modules/img_in/img_dec.c index 323a7c9..69c5ddc 100644 --- a/modules/img_in/img_dec.c +++ b/modules/img_in/img_dec.c @@ -26,39 +26,44 @@ #include "img_in.h" -static Bool DEC_CanHandleStream(GF_BaseDecoder *dec, u32 StreamType, GF_ESD *esd, u8 PL) +static u32 DEC_CanHandleStream(GF_BaseDecoder *dec, u32 StreamType, GF_ESD *esd, u8 PL) { - if (StreamType != GF_STREAM_VISUAL) return 0; + if (StreamType != GF_STREAM_VISUAL) return GF_CODEC_NOT_SUPPORTED; /*media type query*/ - if (!esd) return 1; + if (!esd) return GF_CODEC_STREAM_TYPE_SUPPORTED; switch (esd->decoderConfig->objectTypeIndication) { #ifdef GPAC_HAS_PNG case GPAC_OTI_IMAGE_PNG: - return NewPNGDec(dec); + if (NewPNGDec(dec)) return GF_CODEC_SUPPORTED; + return GF_CODEC_NOT_SUPPORTED; #endif #ifdef GPAC_HAS_JPEG case GPAC_OTI_IMAGE_JPEG: - return NewJPEGDec(dec); + if (NewJPEGDec(dec)) return GF_CODEC_SUPPORTED; + return GF_CODEC_NOT_SUPPORTED; #endif #ifdef GPAC_HAS_JP2 case GPAC_OTI_IMAGE_JPEG_2000: - return NewJP2Dec(dec); + if (NewJP2Dec(dec)) return GF_CODEC_SUPPORTED; + return GF_CODEC_NOT_SUPPORTED; #endif case GPAC_BMP_OTI: - return NewBMPDec(dec); + if (NewBMPDec(dec)) return GF_CODEC_SUPPORTED; + return GF_CODEC_NOT_SUPPORTED; default: #ifdef GPAC_HAS_JP2 { char *dsi = esd->decoderConfig->decoderSpecificInfo ? esd->decoderConfig->decoderSpecificInfo->data : NULL; if (dsi && (dsi[0]=='m') && (dsi[1]=='j') && (dsi[2]=='p') && (dsi[3]=='2')) - return NewJP2Dec(dec); + if (NewJP2Dec(dec)) return GF_CODEC_SUPPORTED; + return GF_CODEC_NOT_SUPPORTED; } #endif - return 0; + return GF_CODEC_NOT_SUPPORTED; } - return 0; + return GF_CODEC_NOT_SUPPORTED; } diff --git a/modules/img_in/jp2_dec.c b/modules/img_in/jp2_dec.c index ca93728..40a0398 100644 --- a/modules/img_in/jp2_dec.c +++ b/modules/img_in/jp2_dec.c @@ -344,7 +344,11 @@ static GF_Err JP2_ProcessData(GF_MediaDecoder *ifcg, static const char *JP2_GetCodecName(GF_BaseDecoder *dec) { +#ifdef OPENJPEG_VERSION return "OpenJPEG "OPENJPEG_VERSION ; +#else + return "OpenJPEG" ; +#endif } diff --git a/modules/ismacryp/Makefile b/modules/ismacryp/Makefile index 1a4e72b..d83c52d 100644 --- a/modules/ismacryp/Makefile +++ b/modules/ismacryp/Makefile @@ -30,7 +30,7 @@ all: $(LIB) $(LIB): $(OBJS) $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/$@ $(OBJS) $(EXTRALIBS) -L../../bin/gcc -lgpac ifeq ($(STATICBUILD),yes) - $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/gm_ismacryp-static.so $(OBJS) $(EXTRALIBS) -L../../bin/gcc -lgpac_static + $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/gm_ismacryp-static.$(DYN_LIB_SUFFIX) $(OBJS) $(EXTRALIBS) -L../../bin/gcc -lgpac_static endif diff --git a/modules/isom_in/Makefile b/modules/isom_in/Makefile index 6138688..df8f591 100644 --- a/modules/isom_in/Makefile +++ b/modules/isom_in/Makefile @@ -31,7 +31,7 @@ all: $(LIB) $(LIB): $(OBJS) $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/$@ $(OBJS) -L../../bin/gcc -lgpac $(EXTRALIBS) ifeq ($(STATICBUILD),yes) - $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/gm_isom_in-static.so $(OBJS) -L../../bin/gcc -lgpac_static $(EXTRALIBS) + $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/gm_isom_in-static.$(DYN_LIB_SUFFIX) $(OBJS) -L../../bin/gcc -lgpac_static $(EXTRALIBS) endif diff --git a/modules/isom_in/load.c b/modules/isom_in/load.c index eb9d3f1..26c05d9 100644 --- a/modules/isom_in/load.c +++ b/modules/isom_in/load.c @@ -108,7 +108,8 @@ void isor_declare_objects(ISOMReader *read) esd = gf_media_map_esd(read->mov, i+1); if (esd) { od = (GF_ObjectDescriptor *) gf_odf_desc_new(GF_ODF_OD_TAG); - od->objectDescriptorID = esd->ESID; + od->service_ifce = read->input; + od->objectDescriptorID = 0; if (!ocr_es_id) ocr_es_id = esd->ESID; esd->OCRESID = ocr_es_id; gf_list_add(od->ESDescriptors, esd); @@ -119,24 +120,46 @@ void isor_declare_objects(ISOMReader *read) if (gf_isom_apple_get_tag(read->mov, GF_ISOM_ITUNE_COVER_ART, &tag, &tlen)==GF_OK) { const char *cdir = gf_modules_get_option((GF_BaseInterface *)gf_term_get_service_interface(read->service), "General", "CacheDirectory"); if (cdir) { - char szName[GF_MAX_PATH], *sep; + char szName[GF_MAX_PATH]; + const char *sep; FILE *t; sep = strrchr(gf_isom_get_filename(read->mov), '\\'); if (!sep) sep = strrchr(gf_isom_get_filename(read->mov), '/'); + if (!sep) sep = gf_isom_get_filename(read->mov); if ((cdir[strlen(cdir)-1] != '\\') && (cdir[strlen(cdir)-1] != '/')) { sprintf(szName, "%s/%s_cover.%s", cdir, sep, (tlen & 0x80000000) ? "png" : "jpg"); } else { sprintf(szName, "%s%s_cover.%s", cdir, sep, (tlen & 0x80000000) ? "png" : "jpg"); } + t = gf_f64_open(szName, "wb"); + if (t) { + Bool isom_contains_video = 0; + + /*write cover data*/ + assert(!(tlen & 0x80000000)); fwrite(tag, tlen & 0x7FFFFFFF, 1, t); fclose(t); - od = (GF_ObjectDescriptor *) gf_odf_desc_new(GF_ODF_OD_TAG); - od->objectDescriptorID = 1050; - od->URLString = gf_strdup(szName); - gf_term_add_media(read->service, (GF_Descriptor*)od, 1); + + /*don't display cover art when video is present*/ + for (i=0; imov); i++) { + if (!gf_isom_is_track_enabled(read->mov, i+1)) + continue; + if (gf_isom_get_media_type(read->mov, i+1) == GF_ISOM_MEDIA_VISUAL) { + isom_contains_video = 1; + break; + } + } + + if (!isom_contains_video) { + od = (GF_ObjectDescriptor *) gf_odf_desc_new(GF_ODF_OD_TAG); + od->service_ifce = read->input; + od->objectDescriptorID = GF_MEDIA_EXTERNAL_ID; + od->URLString = gf_strdup(szName); + gf_term_add_media(read->service, (GF_Descriptor*)od, 1); + } } } } diff --git a/modules/isom_in/read.c b/modules/isom_in/read.c index 39a5434..05b39f2 100644 --- a/modules/isom_in/read.c +++ b/modules/isom_in/read.c @@ -643,7 +643,7 @@ GF_Err ISOR_ChannelGetSLP(GF_InputService *plug, LPNETCHANNEL channel, char **ou if (!ch->sample) { /*get sample*/ isor_reader_get_sample(ch); - *is_new_data = 1; + *is_new_data = ch->sample ? 1 : 0; } if (ch->sample) { diff --git a/modules/isom_in/read_ch.c b/modules/isom_in/read_ch.c index 516a7a5..801a02b 100644 --- a/modules/isom_in/read_ch.c +++ b/modules/isom_in/read_ch.c @@ -104,6 +104,7 @@ static void check_segment_switch(ISOMReader *read) { GF_NetworkCommand param; u32 i, count; + GF_Err e; if (!read->frag_type) return; if (!read->input->query_proxy) return; @@ -111,23 +112,30 @@ static void check_segment_switch(ISOMReader *read) for (i=0; ichannels, i); /*check all playing channels are waiting for next segment*/ - if (ch->is_playing && !ch->wait_for_segment_switch) return; + if (ch->is_playing && !ch->wait_for_segment_switch) { + return; + } } /*close current segment*/ gf_isom_release_segment(read->mov, 1); + GF_LOG(GF_LOG_DEBUG, GF_LOG_NETWORK, ("[IsoMedia] Done playing segment - querying new one\n")); /*update current fragment if any*/ param.command_type = GF_NET_SERVICE_QUERY_NEXT; if ((read->input->query_proxy(read->input, ¶m)==GF_OK) && param.url_query.next_url){ - gf_isom_open_segment(read->mov, param.url_query.next_url); + + e = gf_isom_open_segment(read->mov, param.url_query.next_url); + GF_LOG(GF_LOG_DEBUG, GF_LOG_NETWORK, ("[IsoMedia] playing new segment %s: %s\n", param.url_query.next_url, gf_error_to_string(e) )); for (i=0; ichannels, i); ch->wait_for_segment_switch = 0; + GF_LOG(GF_LOG_DEBUG, GF_LOG_NETWORK, ("[IsoMedia] Track %d - cur sample %d - new sample count %d\n", ch->track, ch->sample_num, gf_isom_get_sample_count(ch->owner->mov, ch->track) )); } } else { /*consider we are done*/ read->frag_type = 2; + GF_LOG(GF_LOG_DEBUG, GF_LOG_NETWORK, ("[IsoMedia] No more segments - done playing file\n")); } } @@ -190,10 +198,6 @@ fetch_next: ch->sample_num++; goto fetch_next; } - /*if sample cannot be found and file is fragmented, rewind sample*/ - if (!ch->sample && ch->owner->frag_type) { - ch->sample_num--; - } } if (!ch->sample) { /*incomplete file - check if we're still downloading or not*/ @@ -207,11 +211,19 @@ fetch_next: } } else if (!ch->sample_num || (ch->sample_num >= gf_isom_get_sample_count(ch->owner->mov, ch->track))) { if (ch->owner->frag_type==1) { + if (!ch->wait_for_segment_switch) { + ch->wait_for_segment_switch = 1; + GF_LOG(GF_LOG_DEBUG, GF_LOG_NETWORK, ("[IsoMedia] Track #%d end of segment reached - waiting for sample %d - current count %d\n", ch->track, ch->sample_num, gf_isom_get_sample_count(ch->owner->mov, ch->track) )); + } + /*if sample cannot be found and file is fragmented, rewind sample*/ + if (ch->sample_num) ch->sample_num--; ch->last_state = GF_OK; - ch->wait_for_segment_switch = 1; } else { + GF_LOG(GF_LOG_DEBUG, GF_LOG_NETWORK, ("[IsoMedia] Track #%d end of stream reached\n", ch->track)); ch->last_state = GF_EOS; } + } else { + GF_LOG(GF_LOG_DEBUG, GF_LOG_NETWORK, ("[IsoMedia] Track #%d fail to fetch sample %d / %d: %s\n", ch->track, ch->sample_num, gf_isom_get_sample_count(ch->owner->mov, ch->track), gf_error_to_string(gf_isom_last_error(ch->owner->mov)) )); } if (ch->wait_for_segment_switch) check_segment_switch(ch->owner); return; diff --git a/modules/laser_dec/Makefile b/modules/laser_dec/Makefile index ac6ba4d..f457f73 100644 --- a/modules/laser_dec/Makefile +++ b/modules/laser_dec/Makefile @@ -31,7 +31,7 @@ all: $(LIB) $(LIB): $(OBJS) $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/$@ $(OBJS) $(EXTRALIBS) -L../../bin/gcc -lgpac ifeq ($(STATICBUILD),yes) - $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/gm_laser_dec-static.so $(OBJS) $(EXTRALIBS) -L../../bin/gcc -lgpac_static + $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/gm_laser_dec-static.$(DYN_LIB_SUFFIX) $(OBJS) $(EXTRALIBS) -L../../bin/gcc -lgpac_static endif diff --git a/modules/laser_dec/laser_dec.c b/modules/laser_dec/laser_dec.c index d87f5e0..5469af5 100644 --- a/modules/laser_dec/laser_dec.c +++ b/modules/laser_dec/laser_dec.c @@ -105,13 +105,13 @@ static GF_Err LSR_ProcessData(GF_SceneDecoder*plug, const char *inBuffer, u32 in return e; } -Bool LSR_CanHandleStream(GF_BaseDecoder *ifce, u32 StreamType, GF_ESD *esd, u8 PL) +static u32 LSR_CanHandleStream(GF_BaseDecoder *ifce, u32 StreamType, GF_ESD *esd, u8 PL) { - if (StreamType!=GF_STREAM_SCENE) return 0; + if (StreamType!=GF_STREAM_SCENE) return GF_CODEC_NOT_SUPPORTED; /*media type query*/ - if (!esd) return 1; - if (esd->decoderConfig->objectTypeIndication == GPAC_OTI_SCENE_LASER) return 1; - return 0; + if (!esd) return GF_CODEC_STREAM_TYPE_SUPPORTED; + if (esd->decoderConfig->objectTypeIndication == GPAC_OTI_SCENE_LASER) return GF_CODEC_SUPPORTED; + return GF_CODEC_NOT_SUPPORTED; } diff --git a/modules/libplayer/Makefile b/modules/libplayer/Makefile index b4042f9..3266c90 100644 --- a/modules/libplayer/Makefile +++ b/modules/libplayer/Makefile @@ -1,53 +1,53 @@ -include ../../config.mak - -vpath %.c $(SRC_PATH)/modules/libplayer - -CFLAGS= $(OPTFLAGS) -I"$(SRC_PATH)/include" - -ifeq ($(DEBUGBUILD), yes) -CFLAGS+=-g -LDFLAGS+=-g -endif - -ifeq ($(GPROFBUILD), yes) -CFLAGS+=-pg -LDFLAGS+=-pg -endif - -#common obj -OBJS= libplayer.o - -SRCS := $(OBJS:.o=.c) - -LIB=gm_libplayer.$(DYN_LIB_SUFFIX) - - -all: $(LIB) - - -$(LIB): $(OBJS) - $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/$@ $(OBJS) $(EXTRALIBS) -L../../bin/gcc -lgpac - -%.o: %.c - $(CC) $(CFLAGS) -c -o $@ $< - - -clean: - rm -f $(OBJS) ../../bin/gcc/$(LIB) - -dep: depend - -depend: - rm -f .depend - $(CC) -MM $(CFLAGS) $(SRCS) 1>.depend - -distclean: clean - rm -f Makefile.bak .depend - - - -# include dependency files if they exist -# -ifneq ($(wildcard .depend),) -include .depend -endif +include ../../config.mak + +vpath %.c $(SRC_PATH)/modules/libplayer + +CFLAGS= $(OPTFLAGS) -I"$(SRC_PATH)/include" + +ifeq ($(DEBUGBUILD), yes) +CFLAGS+=-g +LDFLAGS+=-g +endif + +ifeq ($(GPROFBUILD), yes) +CFLAGS+=-pg +LDFLAGS+=-pg +endif + +#common obj +OBJS= libplayer.o + +SRCS := $(OBJS:.o=.c) + +LIB=gm_libplayer.$(DYN_LIB_SUFFIX) + + +all: $(LIB) + + +$(LIB): $(OBJS) + $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/$@ $(OBJS) $(EXTRALIBS) -L../../bin/gcc -lgpac -lplayer + +%.o: %.c + $(CC) $(CFLAGS) -c -o $@ $< + + +clean: + rm -f $(OBJS) ../../bin/gcc/$(LIB) + +dep: depend + +depend: + rm -f .depend + $(CC) -MM $(CFLAGS) $(SRCS) 1>.depend + +distclean: clean + rm -f Makefile.bak .depend + + + +# include dependency files if they exist +# +ifneq ($(wildcard .depend),) +include .depend +endif diff --git a/modules/libplayer/libplayer.c b/modules/libplayer/libplayer.c index d240a41..67276d4 100644 --- a/modules/libplayer/libplayer.c +++ b/modules/libplayer/libplayer.c @@ -10,15 +10,15 @@ * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. - * + * * GPAC 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 Lesser General Public License for more details. - * + * * You should have received a copy of the GNU Lesser General Public * License along with this library; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. * */ @@ -29,7 +29,7 @@ #include #include -#define TEST_LIBPLAYER +//#define TEST_LIBPLAYER #ifndef TEST_LIBPLAYER @@ -42,16 +42,20 @@ typedef s32 off_t; #include "player.h" - #endif +static int libplayer_id = 0; typedef struct { /*the service we're responsible for*/ GF_ClientService *service; + u32 init; u32 state; - + u32 player_id; + u32 width; + u32 height; + char *url; #ifndef TEST_LIBPLAYER player_t *player; #endif @@ -60,7 +64,7 @@ typedef struct static const char * LIBPLAYER_MIME_TYPES[] = { - "video/x-mpeg", "mpg mpeg mp2 mpa mpe mpv2", "MPEG 1/2 Movies", + "video/x-mpeg", "mpg mpeg mp2 mpa mpe mpv2 ts", "MPEG 1/2 Movies", "video/x-mpeg-systems", "mpg mpeg mp2 mpa mpe mpv2", "MPEG 1/2 Movies", "audio/basic", "snd au", "Basic Audio", "audio/x-wav", "wav", "WAV Audio", @@ -74,11 +78,8 @@ static const char * LIBPLAYER_MIME_TYPES[] = { "video/H263", "h263 263", "H263 Video", "video/H264", "h264 264", "H264 Video", "video/MPEG4", "cmp", "MPEG-4 Video", -/* We let ffmpeg handle mov because some QT files with uncompressed or adpcm audio use 1 audio sample - per MP4 sample which is a killer for our MP4 lib, whereas ffmpeg handles these as complete audio chunks - moreover ffmpeg handles cmov, we don't */ + "video/mp4", "mp4", "MPEG-4 Movie", "video/quicktime", "mov qt", "QuickTime Movies", -/* Supported by latest versions of FFMPEG */ "video/webm", "webm", "Google WebM Movies", "audio/webm", "webm", "Google WebM Music", NULL @@ -105,7 +106,7 @@ Bool LIBPLAYER_CanHandleURL(GF_InputService *plug, const char *url) if (!strnicmp(url, "rtsp://", 7)) return 0; sExt++; - cgi_par = strchr(sExt, '?'); + cgi_par = strchr(sExt, '?'); if (cgi_par) cgi_par[0] = 0; for (i = 0 ; LIBPLAYER_MIME_TYPES[i] ; i+=3) { @@ -124,13 +125,19 @@ Bool LIBPLAYER_CanHandleURL(GF_InputService *plug, const char *url) static int on_libplayer_event(player_event_t e, void *data) { - fprintf(stdout, "Received event %d\n", e); + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[LibPlayerEvent] Received event %d\n", e)); - switch (e) { + switch (e) { + case PLAYER_EVENT_PLAYBACK_FINISHED: + player_playback_stop(data); + player_playback_start(data); + break; case PLAYER_EVENT_FE_HAS_LOCK: break; case PLAYER_EVENT_FE_TIMEDOUT: break; + case PLAYER_EVENT_VIDEO_PICTURE: + break; default: break; } @@ -138,6 +145,8 @@ static int on_libplayer_event(player_event_t e, void *data) return 0; } + + #endif GF_Err LIBPLAYER_ConnectService(GF_InputService *plug, GF_ClientService *serv, const char *url) @@ -147,28 +156,42 @@ GF_Err LIBPLAYER_ConnectService(GF_InputService *plug, GF_ClientService *serv, c mrl_t *mrl = NULL; #endif + GF_LOG(GF_LOG_ERROR, GF_LOG_MODULE, ("[LibPlayerIN] Connecting\n")); + if (!read || !serv || !url) return GF_BAD_PARAM; + if (!strnicmp(url, "libplayer://", 12)) url+=12; + + if (!read->init) { + read->init=1; + /* libplayer init with default width/height */ + read->width = 80; + read->height = 20; + read->url = url; + read->player_id = libplayer_id; #ifndef TEST_LIBPLAYER - if (!read->player) { - /* libplayer init */ - read->player = player_init(PLAYER_TYPE_DUMMY, PLAYER_AO_AUTO, PLAYER_VO_AUTO, PLAYER_MSG_ERROR, 0, on_libplayer_event); + read->player = player_init(PLAYER_TYPE_DUMMY, PLAYER_AO_AUTO, PLAYER_VO_AUTO, PLAYER_MSG_INFO, read->player_id, on_libplayer_event); + if (!read->player) { - GF_LOG(GF_LOG_ERROR, GF_LOG_MODULE, ("[LibPlayerIN] Failed to instanciate libplayer\n")); + GF_LOG(GF_LOG_ERROR, GF_LOG_MODULE, ("[LibPlayerIN] Failed to instanciate libplayer instance %d\n", read->player_id)); gf_term_on_connect(serv, NULL, GF_REMOTE_SERVICE_ERROR); return GF_OK; } +#endif + libplayer_id++; + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[LibPlayerIN] Opening URL %s for Player instance %d\n", url, read->player_id)); } - + +#ifndef TEST_LIBPLAYER mrl = NULL; if (!strnicmp(url, "dvb://", 6)) { - } + } else if (!strnicmp(url, "file://", 7) || !strstr(url, "://")) { mrl_resource_local_args_t *mrl_args; mrl_args = calloc(1, sizeof(mrl_resource_local_args_t)); if (!strnicmp(url, "file://", 7)) { mrl_args->location = strdup(url + 7); - } else { + } else { mrl_args->location = strdup(url); } mrl = mrl_new (read->player, MRL_RESOURCE_FILE, mrl_args); @@ -183,8 +206,8 @@ GF_Err LIBPLAYER_ConnectService(GF_InputService *plug, GF_ClientService *serv, c } player_mrl_set(read->player, mrl); -#endif +#endif read->state = 0; read->service = serv; @@ -196,35 +219,42 @@ GF_Err LIBPLAYER_ConnectService(GF_InputService *plug, GF_ClientService *serv, c { GF_ESD *esd; GF_ObjectDescriptor *od = (GF_ObjectDescriptor *) gf_odf_desc_new(GF_ODF_OD_TAG); - od->objectDescriptorID = 1; - + od->objectDescriptorID = 1+read->player_id; + esd = gf_odf_desc_esd_new(0); - esd->ESID = 1; + esd->ESID = 1+read->player_id; esd->slConfig->timestampResolution = 1000; esd->decoderConfig->streamType = GF_STREAM_PRIVATE_MEDIA; esd->decoderConfig->objectTypeIndication = GPAC_OTI_PRIVATE_MEDIA_LIBPLAYER; #ifndef TEST_LIBPLAYER - esd->decoderConfig->decoderSpecificInfo->data = read->player; + esd->decoderConfig->decoderSpecificInfo->data = read; #endif gf_list_add(od->ESDescriptors, esd); gf_term_add_media(read->service, (GF_Descriptor*)od, 0); } - return GF_OK; } GF_Err LIBPLAYER_CloseService(GF_InputService *plug) { LibPlayerIn *read = (LibPlayerIn *) plug->priv; + #ifndef TEST_LIBPLAYER - player_playback_stop(read->player); - player_uninit(read->player); - read->player = NULL; + player_playback_stop(read->player); + printf("[LibPlayerIN]player_playback_stop for instance %d\n", read->player_id); + player_uninit(read->player); + printf("[LibPlayerIN]player_uninit for instance %d\n", read->player_id); + read->player = NULL; + libplayer_id--; + + #endif - read->state = 0; + read->state = 0; + gf_term_on_disconnect(read->service, NULL, GF_OK); + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[LibPlayerIn] Closing libplayer instance %d\n", read->player_id)); return GF_OK; } @@ -238,20 +268,24 @@ static GF_Descriptor *LIBPLAYER_GetServiceDesc(GF_InputService *plug, u32 expect GF_Err LIBPLAYER_ServiceCommand(GF_InputService *plug, GF_NetworkCommand *com) { LibPlayerIn *read = (LibPlayerIn *) plug->priv; - + unsigned long prop = 0; + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[LibPlayerIN] ServiceCommand for instance %d, read->state=%d\n", read->player_id, read->state)); if (!com->base.on_channel) return GF_NOT_SUPPORTED; + if (com->command_type==GF_NET_SERVICE_HAS_AUDIO) return GF_NOT_SUPPORTED; + switch (com->command_type) { case GF_NET_CHAN_SET_PULL: return GF_NOT_SUPPORTED; case GF_NET_CHAN_INTERACTIVE: return GF_OK; /*since data is file-based, no padding is needed (decoder plugin will handle it itself)*/ - case GF_NET_CHAN_SET_PADDING: return GF_OK; + case GF_NET_CHAN_SET_PADDING: return GF_OK; case GF_NET_CHAN_BUFFER: + return GF_OK; com->buffer.max = com->buffer.min = 0; return GF_OK; case GF_NET_CHAN_DURATION: /*this module is not made for updates, use undefined duration*/ - com->duration.duration = 0; + com->duration.duration = -1; return GF_OK; case GF_NET_CHAN_PLAY: if (read->state==0) { @@ -259,6 +293,7 @@ GF_Err LIBPLAYER_ServiceCommand(GF_InputService *plug, GF_NetworkCommand *com) player_playback_start(read->player); #endif read->state = 1; + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[LibPlayerIN] Starting playback for instance %d\n", read->player_id)); } return GF_OK; case GF_NET_CHAN_STOP: @@ -267,9 +302,10 @@ GF_Err LIBPLAYER_ServiceCommand(GF_InputService *plug, GF_NetworkCommand *com) player_playback_pause(read->player); #endif read->state = 0; + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[LibPlayerIN] Stopping playback for instance %d\n", read->player_id)); } return GF_OK; - case GF_NET_CHAN_CONFIG: return GF_OK; + case GF_NET_CHAN_CONFIG: return GF_OK; case GF_NET_CHAN_GET_DSI: com->get_dsi.dsi = NULL; com->get_dsi.dsi_len = 0; @@ -282,9 +318,9 @@ GF_Err LIBPLAYER_ConnectChannel(GF_InputService *plug, LPNETCHANNEL channel, con { u32 ESID; LibPlayerIn *read = (LibPlayerIn *) plug->priv; - sscanf(url, "ES_ID=%ud", &ESID); - if (ESID != 1) { + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[LibPlayerIN] instance %d connect channel %d\n", read->player_id, ESID)); + if (ESID != 1+read->player_id) { gf_term_on_connect(read->service, channel, GF_STREAM_NOT_FOUND); } else { gf_term_on_connect(read->service, channel, GF_OK); @@ -295,6 +331,7 @@ GF_Err LIBPLAYER_ConnectChannel(GF_InputService *plug, LPNETCHANNEL channel, con GF_Err LIBPLAYER_DisconnectChannel(GF_InputService *plug, LPNETCHANNEL channel) { LibPlayerIn *read = (LibPlayerIn *) plug->priv; + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[LibPlayerIN] instance %d disconnect channel\n", read->player_id)); gf_term_on_disconnect(read->service, channel, GF_OK); return GF_OK; } @@ -308,48 +345,57 @@ Bool LIBPLAYER_CanHandleURLInService(GF_InputService *plug, const char *url) static GF_Err LIBPLAYER_AttachStream(GF_BaseDecoder *dec, GF_ESD *esd) { - if (esd->ESID!=1) return GF_BAD_PARAM; + LibPlayerIn *read; + if (dec->privateStack) return GF_BAD_PARAM; if (!esd->decoderConfig->decoderSpecificInfo) return GF_BAD_PARAM; -#ifndef TEST_LIBPLAYER if (!esd->decoderConfig->decoderSpecificInfo->data) return GF_BAD_PARAM; - dec->privateStack = esd->decoderConfig->decoderSpecificInfo->data; -#endif + read = (LibPlayerIn *) esd->decoderConfig->decoderSpecificInfo->data; + if (esd->ESID!=1+read->player_id) return GF_BAD_PARAM; + dec->privateStack = read; + + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[LibPlayerDEC] AttachStream for instance %d\n", read->player_id)); esd->decoderConfig->decoderSpecificInfo->data = NULL; return GF_OK; } static GF_Err LIBPLAYER_DetachStream(GF_BaseDecoder *dec, u16 ES_ID) { + LibPlayerIn *player = dec->privateStack; + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[LibPlayerDEC] DetachStream for instance %d\n", player ? player->player_id : -1)); dec->privateStack = NULL; return GF_OK; } static GF_Err LIBPLAYER_GetCapabilities(GF_BaseDecoder *dec, GF_CodecCapability *capability) { + LibPlayerIn *read = dec->privateStack; + //GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[LibPlayerDEC] GetCapabilities\n")); switch (capability->CapCode) { case GF_CODEC_WIDTH: - capability->cap.valueInt = 320; + capability->cap.valueInt = read->width; break; case GF_CODEC_HEIGHT: - capability->cap.valueInt = 240; + capability->cap.valueInt = read->height; break; } return GF_OK; } static GF_Err LIBPLAYER_SetCapabilities(GF_BaseDecoder *dec, GF_CodecCapability capability) { - return GF_OK; + return GF_NOT_SUPPORTED; } -static Bool LIBPLAYER_CanHandleStream(GF_BaseDecoder *dec, u32 StreamType, GF_ESD *esd, u8 PL) +static u32 LIBPLAYER_CanHandleStream(GF_BaseDecoder *dec, u32 StreamType, GF_ESD *esd, u8 PL) { - if (StreamType!=GF_STREAM_PRIVATE_MEDIA) return 0; + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[LibPlayerDEC] CanHandleStream\n")); + if (StreamType!=GF_STREAM_PRIVATE_MEDIA) return GF_CODEC_NOT_SUPPORTED; /*don't reply to media type queries*/ - if (!esd) return 0; - if (esd->decoderConfig->objectTypeIndication==GPAC_OTI_PRIVATE_MEDIA_LIBPLAYER) return 1; - return 0; + if (!esd) return GF_CODEC_NOT_SUPPORTED; + if (esd->decoderConfig->objectTypeIndication==GPAC_OTI_PRIVATE_MEDIA_LIBPLAYER) return GF_CODEC_SUPPORTED; + return GF_CODEC_NOT_SUPPORTED; } static const char *LIBPLAYER_GetName(GF_BaseDecoder *dec) { + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[LibPlayerDEC] GetName\n")); return "LibPlayer decoder"; } @@ -357,28 +403,43 @@ static GF_Err LIBPLAYER_Control(GF_PrivateMediaDecoder *dec, Bool mute, GF_Windo { #ifndef TEST_LIBPLAYER video_rect_t in, out; - player_t *player = dec->privateStack; - - if (!player) return GF_OK; - - in.x = src->x; - in.y = src->y; - in.w = src->w; - in.h = src->h; - out.x = dst->x; - out.y = dst->y; - out.w = dst->w; - out.h = dst->h; - player_video_io_windows_set(player, &in, &out); -#endif + LibPlayerIn *read = dec->privateStack; + u32 width, height; + + if (!read) return GF_OK; + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[LibPlayerDEC] Control instance %d\n",read->player_id)); -// fprintf(stdout, "Repositioning video src %d %d %d %d - dest %d %d %d %d\n", src->x, src->y, src->w, src->h, dst->x, dst->y, dst->w, dst->h); + width = mrl_get_property(read->player, NULL, MRL_PROPERTY_VIDEO_WIDTH); + height = mrl_get_property(read->player, NULL, MRL_PROPERTY_VIDEO_HEIGHT); + + if((width != read->width) || (height != read->height)) { + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[LibPlayerDEC] video size changed to width %d - height %d\n", width, height)); + if (width && height) { + read->width = width; + read->height = height; + } + return GF_BUFFER_TOO_SMALL; + } + + in.x = src->x; + in.y = src->y; + in.w = src->w; + in.h = src->h; + out.x = dst->x; + out.y = dst->y; + out.w = dst->w; + out.h = dst->h; + player_video_io_windows_set(read->player, &in, &out); + +#endif + + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[LibPlayerDEC] Repositioning video src %d %d %d %d - dest %d %d %d %d\n", src->x, src->y, src->w, src->h, dst->x, dst->y, dst->w, dst->h) ); return GF_OK; } GF_EXPORT -const u32 *QueryInterfaces() +const u32 *QueryInterfaces() { static u32 si [] = { GF_NET_CLIENT_INTERFACE, @@ -418,7 +479,7 @@ GF_BaseInterface *LoadInterface(u32 InterfaceType) GF_SAFEALLOC(ifce, GF_PrivateMediaDecoder); GF_REGISTER_MODULE_INTERFACE(ifce, GF_PRIVATE_MEDIA_DECODER_INTERFACE, "LibPlayer Decoder", "gpac distribution") - /*setup our own interface*/ + /*setup our own interface*/ ifce->AttachStream = LIBPLAYER_AttachStream; ifce->DetachStream = LIBPLAYER_DetachStream; ifce->GetCapabilities = LIBPLAYER_GetCapabilities; diff --git a/modules/mp3_in/Makefile b/modules/mp3_in/Makefile index be86d62..d77f42f 100644 --- a/modules/mp3_in/Makefile +++ b/modules/mp3_in/Makefile @@ -46,7 +46,7 @@ all: $(LIB) $(LIB): $(OBJS) $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/$@ $(OBJS) -L../../bin/gcc -lgpac $(EXTRALIBS) ifeq ($(STATICBUILD),yes) - $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/gm_mp3_in-static.so $(OBJS) -L../../bin/gcc -lgpac_static $(EXTRALIBS) + $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/gm_mp3_in-static.$(DYN_LIB_SUFFIX) $(OBJS) -L../../bin/gcc -lgpac_static $(EXTRALIBS) endif diff --git a/modules/mp3_in/mad_dec.c b/modules/mp3_in/mad_dec.c index 9485fde..2ccd017 100644 --- a/modules/mp3_in/mad_dec.c +++ b/modules/mp3_in/mad_dec.c @@ -62,6 +62,7 @@ typedef struct static GF_Err MAD_AttachStream(GF_BaseDecoder *ifcg, GF_ESD *esd) { MADCTX(); + assert( ctx ); if (ctx->ES_ID && ctx->ES_ID!=esd->ESID) return GF_NOT_SUPPORTED; if (ctx->configured) { @@ -89,7 +90,10 @@ static GF_Err MAD_AttachStream(GF_BaseDecoder *ifcg, GF_ESD *esd) static GF_Err MAD_DetachStream(GF_BaseDecoder *ifcg, u16 ES_ID) { MADCTX(); + assert( ctx ); if (ES_ID != ctx->ES_ID) return GF_BAD_PARAM; + assert( ifcg ); + assert( ctx ); ctx->ES_ID = 0; if (ctx->buffer) gf_free(ctx->buffer); ctx->buffer = NULL; @@ -106,6 +110,7 @@ static GF_Err MAD_DetachStream(GF_BaseDecoder *ifcg, u16 ES_ID) static GF_Err MAD_GetCapabilities(GF_BaseDecoder *ifcg, GF_CodecCapability *capability) { MADCTX(); + assert( ctx ); switch (capability->CapCode) { /*not tested yet*/ case GF_CODEC_RESILIENT: @@ -153,6 +158,7 @@ static GF_Err MAD_GetCapabilities(GF_BaseDecoder *ifcg, GF_CodecCapability *capa static GF_Err MAD_SetCapabilities(GF_BaseDecoder *ifcg, GF_CodecCapability capability) { MADCTX(); + assert( ctx ); switch (capability.CapCode) { /*reset storage buffer*/ case GF_CODEC_WAIT_RAP: @@ -194,6 +200,7 @@ static GF_Err MAD_ProcessData(GF_MediaDecoder *ifcg, char *ptr; u32 num, outSize; MADCTX(); + assert( ctx ); /*check not using scalabilty*/ assert(ctx->ES_ID == ES_ID); @@ -290,21 +297,21 @@ static const char *MAD_GetCodecName(GF_BaseDecoder *dec) MAD_VERSION; } -static Bool MAD_CanHandleStream(GF_BaseDecoder *dec, u32 StreamType, GF_ESD *esd, u8 PL) +static u32 MAD_CanHandleStream(GF_BaseDecoder *dec, u32 StreamType, GF_ESD *esd, u8 PL) { /*audio decs*/ - if (StreamType != GF_STREAM_AUDIO) return 0; + if (StreamType != GF_STREAM_AUDIO) return GF_CODEC_NOT_SUPPORTED; /*media type query*/ - if (!esd) return 1; + if (!esd) return GF_CODEC_STREAM_TYPE_SUPPORTED; switch (esd->decoderConfig->objectTypeIndication) { /*MPEG1 audio*/ case GPAC_OTI_AUDIO_MPEG2_PART3: /*MPEG2 audio*/ case GPAC_OTI_AUDIO_MPEG1: - return 1; + return GF_CODEC_SUPPORTED; } - return 0; + return GF_CODEC_NOT_SUPPORTED; } GF_BaseDecoder *NewMADDec() @@ -337,6 +344,7 @@ void DeleteMADDec(GF_MediaDecoder *ifcg) if (!ifcg) return; ctx = (MADDec *) ifcg->privateStack; + ifcg->privateStack = NULL; if (ctx){ if (ctx->configured) { mad_stream_finish(&ctx->stream); @@ -348,8 +356,8 @@ void DeleteMADDec(GF_MediaDecoder *ifcg) ctx->num_channels = 0; gf_free(ctx); } - ifcg->privateStack = NULL; gf_free(ifcg); } #endif + diff --git a/modules/mpd_in/Makefile b/modules/mpd_in/Makefile index b5d8969..22bb385 100644 --- a/modules/mpd_in/Makefile +++ b/modules/mpd_in/Makefile @@ -1,57 +1,57 @@ -include ../../config.mak - -vpath %.c $(SRC_PATH)/modules/mpd_in - -CFLAGS= $(OPTFLAGS) -w -I"$(SRC_PATH)/include" -Wall - - -ifeq ($(DEBUGBUILD), yes) -CFLAGS+=-g -DDEBUG -LDFLAGS+=-g -endif - -ifeq ($(GPROFBUILD), yes) -CFLAGS+=-pg -LDFLAGS+=-pg -endif - -#common obj -OBJS=mpd_in.o - -SRCS := $(OBJS:.o=.c) - -LIB=gm_mpd_in.$(DYN_LIB_SUFFIX) - -all: $(LIB) - - -$(LIB): $(OBJS) - $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/$@ $(OBJS) $(EXTRALIBS) -L../../bin/gcc -lgpac -ifeq ($(STATICBUILD),yes) - $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/gm_mpegts_in-static.so $(OBJS) $(EXTRALIBS) -L../../bin/gcc -lgpac_static -endif - - -%.o: %.c - $(CC) $(CFLAGS) -c -o $@ $< - - -clean: - rm -f $(OBJS) ../../bin/gcc/$(LIB) - -dep: depend - -depend: - rm -f .depend - $(CC) -MM $(CFLAGS) $(SRCS) 1>.depend - -distclean: clean - rm -f Makefile.bak .depend - - - -# include dependency files if they exist -# -ifneq ($(wildcard .depend),) -include .depend -endif +include ../../config.mak + +vpath %.c $(SRC_PATH)/modules/mpd_in + +CFLAGS= $(OPTFLAGS) -w -I"$(SRC_PATH)/include" -Wall + + +ifeq ($(DEBUGBUILD), yes) +CFLAGS+=-g -DDEBUG +LDFLAGS+=-g +endif + +ifeq ($(GPROFBUILD), yes) +CFLAGS+=-pg +LDFLAGS+=-pg +endif + +#common obj +OBJS=mpd_in.o + +SRCS := $(OBJS:.o=.c) + +LIB=gm_mpd_in.$(DYN_LIB_SUFFIX) + +all: $(LIB) + + +$(LIB): $(OBJS) + $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/$@ $(OBJS) $(EXTRALIBS) -L../../bin/gcc -lgpac +ifeq ($(STATICBUILD),yes) + $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/gm_mpegts_in-static.$(DYN_LIB_SUFFIX) $(OBJS) $(EXTRALIBS) -L../../bin/gcc -lgpac_static +endif + + +%.o: %.c + $(CC) $(CFLAGS) -c -o $@ $< + + +clean: + rm -f $(OBJS) ../../bin/gcc/$(LIB) + +dep: depend + +depend: + rm -f .depend + $(CC) -MM $(CFLAGS) $(SRCS) 1>.depend + +distclean: clean + rm -f Makefile.bak .depend + + + +# include dependency files if they exist +# +ifneq ($(wildcard .depend),) +include .depend +endif diff --git a/modules/mpd_in/mpd_in.c b/modules/mpd_in/mpd_in.c index 1d066db..6e03e95 100644 --- a/modules/mpd_in/mpd_in.c +++ b/modules/mpd_in/mpd_in.c @@ -1,7 +1,7 @@ /* * GPAC - Multimedia Framework C SDK * - * Authors: Cyril Concolato + * Authors: Cyril Concolato, Jean Le Feuvre * Copyright (c) Telecom ParisTech 2010- * All rights reserved * @@ -43,74 +43,100 @@ static const char * MPD_MIME_TYPES[] = { "video/vnd.3gpp.mpd", "audio/vnd.3gpp.m */ static const char * M3U8_MIME_TYPES[] = { "video/x-mpegurl", "audio/x-mpegurl", "application/x-mpegurl", "application/vnd.apple.mpegurl", NULL}; +typedef enum { + MPD_STATE_STOPPED = 0, + MPD_STATE_RUNNING, + MPD_STATE_CONNECTING, +} MPD_STATE; + +GF_Err MPD_downloadWithRetry( GF_ClientService * service, GF_DownloadSession ** sess, const char *url, gf_dm_user_io user_io, void *usr_cbk, u64 start_range, u64 end_range, Bool persistent); + typedef struct { char *cache; char *url; } segment_cache_entry; +typedef struct __mpd_group +{ + GF_List *representations; + u32 group_id; + Bool selected; + Bool done; + Bool force_switch_bandwidth; + u32 nb_bw_check; + /*pointer toactive period*/ + GF_MPD_Period *period; + /*active representation index in period->representations*/ + u32 active_rep_index; + u32 active_bitrate, max_bitrate, min_bitrate; + /*local file playback, do not delete them*/ + Bool local_files; + /*next segment to download for this group*/ + u32 download_segment_index; + + /*next file (cached) to delete at next GF_NET_SERVICE_QUERY_NEXT for this group*/ + char * urlToDeleteNext; + volatile u32 max_cached, nb_cached; + segment_cache_entry *cached; + + GF_DownloadSession *segment_dnload; + const char *segment_local_url; + + u32 nb_segments_done; + + Bool segment_must_be_streamed; + + /* Service really managing the segments */ + GF_InputService *service; + char *service_mime; + Bool service_connected; +} GF_MPD_Group; + typedef struct __mpd_module { /* GPAC Service object (i.e. how this module is seen by the terminal)*/ GF_ClientService *service; /* URL to which this service is connected Used to detect when audio service connection request is made on the same URL as video */ char *url; - Bool is_service_connected; - /* number of time the service has been connected */ - u32 nb_service_connections; - u32 nb_connected_channels; - u32 nb_playing_or_paused_channels; - - /* Download of the MPD */ - volatile Bool is_mpd_in_download; - GF_DownloadSession *mpd_dnload; - char * urlToDeleteNext; - volatile u32 max_cached, nb_cached; u32 option_max_cached; - segment_cache_entry *cached; + u32 auto_switch_count; + Bool keep_files; - /* MPD and active informations */ + /* MPD downloader*/ + GF_DownloadSession *mpd_dnload; + /* MPD */ GF_MPD *mpd; + /* number of time the MPD has been reloaded and last update time*/ + u32 reload_count, last_update_time; + /*signature of last MPD*/ + u8 lastMPDSignature[20]; + /*mime used by M3U8 server*/ + char *mimeTypeForM3U8Segments; + + /* active period in MPD (only one currently supported) */ u32 active_period_index; - u32 active_rep_index; - u32 download_segment_index; - /* playback status */ - Double playback_speed; - Double playback_start_range, playback_end_range; + /*list of groups in the active period*/ + GF_List *groups; + /*group 0 if present, NULL otherwise*/ + GF_MPD_Group *group_zero_selected; - /* For Segment downloads */ - GF_DownloadSession *seg_dnload; - const char *seg_local_url; - GF_Thread *dl_thread; + /*Main MPD Thread handling segment downloads and MPD/M3U8 update*/ + GF_Thread *mpd_thread; + /*mutex for group->cache file name access and MPD update*/ GF_Mutex *dl_mutex; /* 0 not started, 1 download in progress */ - Bool is_dl_segments; - Bool dl_stop_request; - - /* Service really managing the segments */ - GF_InputService *seg_ifce; + MPD_STATE mpd_is_running; + Bool mpd_stop_request; - u32 reload_count; - volatile u32 last_update_time; - u32 nb_segs_done; - Bool auto_switch; - u8 lastMPDSignature[20]; - Bool segment_must_be_streamed; - char * mimeTypeForM3U8Segments; + /* TODO - handle playback status for SPEED/SEEK through SIDX */ + Double playback_speed, playback_start_range, playback_end_range; } GF_MPD_In; -static void dumpStatus( GF_MPD_In *mpdin) { - u32 i; - for (i = 0 ; i < mpdin->nb_cached; i++) { - printf("\t[%u] - %s\t:\t%s\n", i, mpdin->cached[i].cache, mpdin->cached[i].url); - } - printf("\t***********\n\n"); -} - static Bool MPD_CheckRootType(const char *local_url) { @@ -134,21 +160,60 @@ static Bool MPD_CheckRootType(const char *local_url) void MPD_NetIO_Segment(void *cbk, GF_NETIO_Parameter *param) { GF_Err e; - GF_MPD_In *mpdin = (GF_MPD_In*) cbk; + u32 download_rate; + GF_MPD_Group *group= (GF_MPD_Group*) cbk; /*handle service message*/ - gf_term_download_update_stats(mpdin->seg_dnload); - e = param->error; + gf_term_download_update_stats(group->segment_dnload); + if (group->done) { + gf_dm_sess_abort(group->segment_dnload); + return; + } + + if ((param->msg_type == GF_NETIO_PARSE_HEADER) && !strcmp(param->name, "Content-Type")) { + if (!group->service_mime) group->service_mime = gf_strdup(param->value); + else if (strcmp(group->service_mime, param->value)) { + GF_MPD_Representation *rep = gf_list_get(group->period->representations, group->active_rep_index); + if (!rep->mime) rep->mime = gf_strdup(param->value); + rep->disabled = 1; + group->force_switch_bandwidth = 1; + gf_dm_sess_abort(group->segment_dnload); + return; + } + } + + e = param->error; if (param->msg_type == GF_NETIO_PARSE_REPLY) { - if (! gf_dm_sess_can_be_cached_on_disk(mpdin->seg_dnload)) { + if (! gf_dm_sess_can_be_cached_on_disk(group->segment_dnload)) { GF_LOG(GF_LOG_INFO, GF_LOG_MODULE, - ("[MPD_IN] Segment %s cannot be cached on disk, will use direct streaming\n", gf_dm_sess_get_resource_name(mpdin->seg_dnload))); - mpdin->segment_must_be_streamed = 1; - gf_dm_sess_abort(mpdin->seg_dnload); + ("[MPD_IN] Segment %s cannot be cached on disk, will use direct streaming\n", gf_dm_sess_get_resource_name(group->segment_dnload))); + group->segment_must_be_streamed = 1; + gf_dm_sess_abort(group->segment_dnload); } else { - mpdin->segment_must_be_streamed = 0; + group->segment_must_be_streamed = 0; } } + else if ((param->msg_type == GF_NETIO_DATA_EXCHANGE) || (param->msg_type == GF_NETIO_DATA_TRANSFERED)) { + if (gf_dm_sess_get_stats(group->segment_dnload, NULL, NULL, NULL, NULL, &download_rate, NULL) == GF_OK) { + if (download_rate) { + download_rate *= 8; + if (download_ratemin_bitrate) group->min_bitrate = download_rate; + if (download_rate>group->max_bitrate) group->max_bitrate = download_rate; + + if (download_rate && (download_rate < group->active_bitrate)) { + fprintf(stdout, "Downloading from group %d at rate %d kbps but group bitrate is %d kbps\n", group->group_id, download_rate/1024, group->active_bitrate/1024); + group->nb_bw_check ++; + if (group->nb_bw_check>2) { + fprintf(stdout, "Downloading from group %d at rate %d kbps but group bitrate is %d kbps - switching\n", group->group_id, download_rate/1024, group->active_bitrate/1024); + group->force_switch_bandwidth = 1; + gf_dm_sess_abort(group->segment_dnload); + } + } else { + group->nb_bw_check = 0; + } + } + } + } } /*! @@ -202,11 +267,10 @@ void MPD_NetIO(void *cbk, GF_NETIO_Parameter *param) e = param->error; } -GF_Err MPD_downloadWithRetry( GF_ClientService * service, GF_DownloadSession ** sess, const char *url, gf_dm_user_io user_io, void *usr_cbk); static GF_Err MPD_UpdatePlaylist(GF_MPD_In *mpdin) { GF_Err e; - u32 i, j, rep_idx; + u32 i, j, rep_idx, group_idx; Bool seg_found = 0; GF_DOMParser *mpd_parser; GF_MPD_Period *period, *new_period; @@ -233,7 +297,8 @@ static GF_Err MPD_UpdatePlaylist(GF_MPD_In *mpdin) gf_delete_file(local_url); purl = gf_strdup(gf_dm_sess_get_resource_name(mpdin->mpd_dnload)); GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Updating Playlist %s...\n", purl)); - e = MPD_downloadWithRetry(mpdin->service, &(mpdin->mpd_dnload), purl, MPD_NetIO, mpdin); + /*use non-persistent connection for MPD*/ + e = MPD_downloadWithRetry(mpdin->service, &(mpdin->mpd_dnload), purl, MPD_NetIO, mpdin, 0, 0, 0); if (e!=GF_OK) { GF_LOG(GF_LOG_ERROR, GF_LOG_MODULE, ("[MPD_IN] Error - cannot update playlist: download problem %s for MPD file\n", gf_error_to_string(e))); gf_free(purl); @@ -290,7 +355,7 @@ static GF_Err MPD_UpdatePlaylist(GF_MPD_In *mpdin) return GF_NON_COMPLIANT_BITSTREAM; } new_mpd = gf_mpd_new(); - e = gf_mpd_init_from_dom(gf_xml_dom_get_root(mpd_parser), new_mpd); + e = gf_mpd_init_from_dom(gf_xml_dom_get_root(mpd_parser), new_mpd, purl); gf_xml_dom_del(mpd_parser); if (e) { GF_LOG(GF_LOG_ERROR, GF_LOG_MODULE, ("[MPD_IN] Error - cannot update playlist: error in MPD creation %s\n", gf_error_to_string(e))); @@ -313,78 +378,96 @@ static GF_Err MPD_UpdatePlaylist(GF_MPD_In *mpdin) return GF_NON_COMPLIANT_BITSTREAM; } - rep = gf_list_get(period->representations, mpdin->active_rep_index); - info1 = gf_list_get(rep->segments, mpdin->download_segment_index - 1); - - for (rep_idx = 0; rep_idxrepresentations); rep_idx++) { - rep = gf_list_get(period->representations, rep_idx); - new_rep = gf_list_get(new_period->representations, rep_idx); - if (!new_rep) { - GF_LOG(GF_LOG_ERROR, GF_LOG_MODULE, ("[MPD_IN] Error - cannot update playlist: missing representation in period\n")); - gf_mpd_del(new_mpd); - return GF_NON_COMPLIANT_BITSTREAM; - } - /*merge init segment*/ - if (new_rep->init_url) { - seg_found = 0; - - if (!strcmp(new_rep->init_url, rep->init_url)) { - seg_found = 1; - } else { - for (j=0; jsegments); j++) { - GF_MPD_SegmentInfo *seg = gf_list_get(rep->segments, j); - if (!strcmp(new_rep->init_url, seg->url)) { - seg_found = 1; - break; - } - } - } - /*remove from new list and push to old one*/ - if (!seg_found) { - GF_MPD_SegmentInfo *new_seg; - GF_SAFEALLOC(new_seg, GF_MPD_SegmentInfo); - new_seg->url = gf_strdup(new_rep->init_url); - new_seg->use_byterange = new_rep->init_use_range; - new_seg->byterange_start = new_rep->init_byterange_start; - new_seg->byterange_end = new_rep->init_byterange_end; - gf_list_add(rep->segments, new_seg); - GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Representation #%d: Adding new segment from initialization segment %s\n", rep_idx+1, new_seg->url)); - } - } - - /*merge segment list*/ - for (i=0; isegments); i++) { - GF_MPD_SegmentInfo *new_seg = gf_list_get(new_rep->segments, i); - assert( new_seg ); - assert( new_seg->url); - seg_found = 0; - for (j=0; jsegments); j++) { - GF_MPD_SegmentInfo *seg = gf_list_get(rep->segments, j); - assert( seg ); - assert( seg->url); - if (!strcmp(new_seg->url, seg->url)) { - seg_found = 1; - break; - } - } - /*remove from new list and push to old one*/ - if (!seg_found) { - gf_list_rem(new_rep->segments, i); - gf_list_add(rep->segments, new_seg); - GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Representation #%d: Adding new segment %s\n", rep_idx+1, new_seg->url)); - i--; - } - } - /*swap lists*/ - { - GF_MPD_SegmentInfo *info2; - segs = new_rep->segments; - new_rep->segments = rep->segments; - rep->segments = segs; - info2 = gf_list_get(rep->segments, mpdin->download_segment_index); - } - } - + for (group_idx=0; group_idxgroups); group_idx++) { + GF_MPD_Group *group = gf_list_get(mpdin->groups, group_idx); + if (!group->selected) continue; + + rep = gf_list_get(period->representations, group->active_rep_index); + info1 = gf_list_get(rep->segments, group->download_segment_index - 1); + + for (rep_idx = 0; rep_idxrepresentations); rep_idx++) { + rep = gf_list_get(period->representations, rep_idx); + new_rep = gf_list_get(new_period->representations, rep_idx); + if (!new_rep) { + GF_LOG(GF_LOG_ERROR, GF_LOG_MODULE, ("[MPD_IN] Error - cannot update playlist: missing representation in period\n")); + gf_mpd_del(new_mpd); + return GF_NON_COMPLIANT_BITSTREAM; + } + /*merge init segment*/ + if (new_rep->init_url) { + seg_found = 0; + + if (!strcmp(new_rep->init_url, rep->init_url)) { + seg_found = 1; + } else { + for (j=0; jsegments); j++) { + GF_MPD_SegmentInfo *seg = gf_list_get(rep->segments, j); + if (!strcmp(new_rep->init_url, seg->url)) { + seg_found = 1; + break; + } + } + } + /*remove from new list and push to old one*/ + if (!seg_found) { + GF_MPD_SegmentInfo *new_seg; + GF_SAFEALLOC(new_seg, GF_MPD_SegmentInfo); + new_seg->url = gf_strdup(new_rep->init_url); + new_seg->use_byterange = new_rep->init_use_range; + new_seg->byterange_start = new_rep->init_byterange_start; + new_seg->byterange_end = new_rep->init_byterange_end; + gf_list_add(rep->segments, new_seg); + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Representation #%d: Adding new segment from initialization segment %s\n", rep_idx+1, new_seg->url)); + } + } + + /*merge segment list*/ + for (i=0; isegments); i++) { + GF_MPD_SegmentInfo *new_seg = gf_list_get(new_rep->segments, i); + assert( new_seg ); + assert( new_seg->url); + seg_found = 0; + for (j=0; jsegments); j++) { + GF_MPD_SegmentInfo *seg = gf_list_get(rep->segments, j); + assert( seg ); + assert( seg->url); + if (!strcmp(new_seg->url, seg->url)) { + seg_found = 1; + break; + } + } + /*remove from new list and push to old one*/ + if (!seg_found) { + gf_list_rem(new_rep->segments, i); + gf_list_add(rep->segments, new_seg); + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Representation #%d: Adding new segment %s\n", rep_idx+1, new_seg->url)); + i--; + } + } + /*swap lists*/ + { + GF_MPD_SegmentInfo *info2; + segs = new_rep->segments; + new_rep->segments = rep->segments; + new_rep->disabled = rep->disabled; + if (!new_rep->mime) { + new_rep->mime = rep->mime; + rep->mime = NULL; + } + rep->segments = segs; + info2 = gf_list_get(rep->segments, group->download_segment_index); + } + } + /*update group/period to new period*/ + group->period = new_period; + + /*and rebuild representations for this group*/ + gf_list_reset(group->representations); + for (i=0; irepresentations); i++) { + GF_MPD_Representation *rep = gf_list_get(new_period->representations, i); + if (rep->groupID==group->group_id) gf_list_add(group->representations, rep); + } + } /*swap representations - we don't need to update download_segment_index as it still points to the right entry in the merged list*/ if (mpdin->mpd) gf_mpd_del(mpdin->mpd); @@ -399,50 +482,70 @@ static GF_Err MPD_UpdatePlaylist(GF_MPD_In *mpdin) static GF_Err MPD_ClientQuery(GF_InputService *ifce, GF_NetworkCommand *param) { + u32 i; + GF_MPD_Group *group = NULL; if (!param || !ifce || !ifce->proxy_udta) return GF_BAD_PARAM; - if (param->command_type==GF_NET_SERVICE_QUERY_NEXT) { + + if (param->command_type==GF_NET_SERVICE_QUERY_NEXT) { u32 timer = gf_sys_clock(); GF_MPD_In *mpdin = (GF_MPD_In *) ifce->proxy_udta; GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Service Query Next request from terminal\n")); gf_mx_p(mpdin->dl_mutex); + + for (i=0; igroups); i++) { + group = gf_list_get(mpdin->groups, i); + if (group->selected && (group->service == ifce)) break; + group = NULL; + } + + if (!group) { + gf_mx_v(mpdin->dl_mutex); + return GF_SERVICE_ERROR; + } + /* Wait until no file is scheduled to be downloaded */ - while (mpdin->is_dl_segments && mpdin->nb_cached<2) { + while (mpdin->mpd_is_running && group->nb_cached<2) { gf_mx_v(mpdin->dl_mutex); + if (group->done) { + return GF_EOS; + } gf_sleep(16); gf_mx_p(mpdin->dl_mutex); } - if (mpdin->nb_cached<2) { + if (group->nb_cached<2) { GF_LOG(GF_LOG_INFO, GF_LOG_MODULE, ("[MPD_IN] No more file in cache, EOS\n")); gf_mx_v(mpdin->dl_mutex); return GF_EOS; } else { GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Had to wait for %u ms for the only cache file to be downloaded\n", (gf_sys_clock() - timer))); } - if (mpdin->cached[0].cache) { - if (mpdin->urlToDeleteNext) { - gf_dm_delete_cached_file_entry_session(mpdin->mpd_dnload, mpdin->urlToDeleteNext); - gf_free( mpdin->urlToDeleteNext); - mpdin->urlToDeleteNext = NULL; + if (group->cached[0].cache) { + if (group->urlToDeleteNext) { + if (!group->local_files && !mpdin->keep_files) + gf_dm_delete_cached_file_entry_session(mpdin->mpd_dnload, group->urlToDeleteNext); + + gf_free( group->urlToDeleteNext); + group->urlToDeleteNext = NULL; } - assert( mpdin->cached[0].url ); - GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] deleting cache file %s : %s\n", mpdin->cached[0].url, mpdin->cached[0].cache)); - mpdin->urlToDeleteNext = gf_strdup( mpdin->cached[0].url ); - gf_free(mpdin->cached[0].cache); - gf_free(mpdin->cached[0].url); - mpdin->cached[0].url = NULL; - mpdin->cached[0].cache = NULL; + assert( group->cached[0].url ); + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] deleting cache file %s : %s\n", group->cached[0].url, group->cached[0].cache)); + group->urlToDeleteNext = gf_strdup( group->cached[0].url ); + gf_free(group->cached[0].cache); + gf_free(group->cached[0].url); + group->cached[0].url = NULL; + group->cached[0].cache = NULL; } - memmove(&mpdin->cached[0], &mpdin->cached[1], sizeof(segment_cache_entry)*(mpdin->nb_cached-1)); - memset(&(mpdin->cached[mpdin->nb_cached-1]), 0, sizeof(segment_cache_entry)); - mpdin->nb_cached--; - param->url_query.next_url = mpdin->cached[0].cache; + memmove(&group->cached[0], &group->cached[1], sizeof(segment_cache_entry)*(group->nb_cached-1)); + memset(&(group->cached[group->nb_cached-1]), 0, sizeof(segment_cache_entry)); + group->nb_cached--; + param->url_query.next_url = group->cached[0].cache; gf_mx_v(mpdin->dl_mutex); { u32 timer2 = gf_sys_clock() - timer ; if (timer2 > 1000) { GF_LOG(GF_LOG_WARNING, GF_LOG_MODULE, ("[MPD_IN] We were stuck waiting for download to end during too much time : %u ms !\n", timer2)); } - GF_LOG(GF_LOG_INFO, GF_LOG_MODULE, ("[MPD_IN] Switching segment playback to \n\tURL: %s in %u ms\n\tCache: %s\n\tElements in cache: %u/%u\n", mpdin->cached[0].url, timer2, mpdin->cached[0].cache, mpdin->nb_cached, mpdin->max_cached)); + GF_LOG(GF_LOG_INFO, GF_LOG_MODULE, ("[MPD_IN] Switching segment playback to \n\tURL: %s in %u ms\n\tCache: %s\n\tElements in cache: %u/%u\n", group->cached[0].url, timer2, group->cached[0].cache, group->nb_cached, group->max_cached)); } } else { GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Client Query request (%d) from terminal\n", param->command_type)); @@ -450,27 +553,40 @@ static GF_Err MPD_ClientQuery(GF_InputService *ifce, GF_NetworkCommand *param) return GF_OK; } -static GF_Err MPD_LoadMediaService(GF_MPD_In *mpdin, const char *mime) +static GF_Err MPD_LoadMediaService(GF_MPD_In *mpdin, GF_MPD_Group *group, const char *mime, const char *init_segment_name) { + u32 i; const char *sPlug; - /* Check MIME type to start the right InputService (ISOM or MPEG-2) */ - sPlug = gf_cfg_get_key(mpdin->service->term->user->config, "MimeTypes", mime); - if (sPlug) sPlug = strrchr(sPlug, '"'); - if (sPlug) { - sPlug += 2; - mpdin->seg_ifce = (GF_InputService *) gf_modules_load_interface_by_name(mpdin->service->term->user->modules, sPlug, GF_NET_CLIENT_INTERFACE); - if (mpdin->seg_ifce) { - mpdin->seg_ifce->proxy_udta = mpdin; - mpdin->seg_ifce->query_proxy = MPD_ClientQuery; - } else { - goto exit; - } - } else { - goto exit; - } - return GF_OK; -exit: - GF_LOG(GF_LOG_ERROR, GF_LOG_MODULE, ("[MPD_IN] Error locating plugin for segment mime type: %s\n", mime)); + if (mime) { + /* Check MIME type to start the right InputService */ + sPlug = gf_cfg_get_key(mpdin->service->term->user->config, "MimeTypes", mime); + if (sPlug) sPlug = strrchr(sPlug, '"'); + if (sPlug) { + sPlug += 2; + group->service = (GF_InputService *) gf_modules_load_interface_by_name(mpdin->service->term->user->modules, sPlug, GF_NET_CLIENT_INTERFACE); + if (group->service) { + group->service->proxy_udta = mpdin; + group->service->query_proxy = MPD_ClientQuery; + return GF_OK; + } + } + } + if (init_segment_name) { + for (i=0; i< gf_modules_get_count(mpdin->service->term->user->modules); i++) { + GF_InputService *ifce = (GF_InputService *) gf_modules_load_interface(mpdin->service->term->user->modules, i, GF_NET_CLIENT_INTERFACE); + if (!ifce) continue; + + if (ifce->CanHandleURL && ifce->CanHandleURL(ifce, init_segment_name)) { + group->service = ifce; + group->service->proxy_udta = mpdin; + group->service->query_proxy = MPD_ClientQuery; + return GF_OK; + } + gf_modules_close_interface((GF_BaseInterface *) ifce); + } + } + + GF_LOG(GF_LOG_ERROR, GF_LOG_MODULE, ("[MPD_IN] Error locating plugin for segment - mime type %s - name %s\n", mime, init_segment_name)); return GF_CODEC_NOT_FOUND; } @@ -481,20 +597,35 @@ exit: * Parameters are identical to the ones of gf_term_download_new. * \see gf_term_download_new() */ -GF_Err MPD_downloadWithRetry( GF_ClientService * service, GF_DownloadSession ** sess, const char *url, gf_dm_user_io user_io, void *usr_cbk) +GF_Err MPD_downloadWithRetry( GF_ClientService * service, GF_DownloadSession **sess, const char *url, gf_dm_user_io user_io, void *usr_cbk, u64 start_range, u64 end_range, Bool persistent) { GF_Err e; - if (*sess) { - gf_term_download_del(*sess); - *sess = NULL; - } - GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Downloading %s...\n", url)); - *sess = gf_term_download_new(service, url, GF_NETIO_SESSION_NOT_THREADED, user_io, usr_cbk); - if (!(*sess)){ - assert(0); - GF_LOG(GF_LOG_ERROR, GF_LOG_MODULE, ("[MPD_IN] Cannot try to download %s... OUT of memory ?\n", url)); - return GF_OUT_OF_MEM; - } + + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Downloading %s...\n", url)); + if (! *sess) { + u32 flags = GF_NETIO_SESSION_NOT_THREADED; + if (persistent) flags |= GF_NETIO_SESSION_PERSISTENT; + *sess = gf_term_download_new(service, url, flags, user_io, usr_cbk); + if (!(*sess)){ + assert(0); + GF_LOG(GF_LOG_ERROR, GF_LOG_MODULE, ("[MPD_IN] Cannot try to download %s... OUT of memory ?\n", url)); + return GF_OUT_OF_MEM; + } + } else { + e = gf_dm_sess_setup_from_url(*sess, url); + if (e) { + GF_LOG(GF_LOG_ERROR, GF_LOG_MODULE, ("[MPD_IN] Cannot resetup session for url %s: %s\n", url, gf_error_to_string(e) )); + return e; + } + + } + if (end_range) { + e = gf_dm_sess_set_range(*sess, start_range, end_range); + if (e) { + GF_LOG(GF_LOG_ERROR, GF_LOG_MODULE, ("[MPD_IN] Cannot setup byte-range download for %s: %s\n", url, gf_error_to_string(e) )); + return e; + } + } e = gf_dm_sess_process(*sess); switch (e) { case GF_IP_CONNECTION_FAILURE: @@ -524,44 +655,130 @@ GF_Err MPD_downloadWithRetry( GF_ClientService * service, GF_DownloadSession ** } } +static void MPD_SwitchGroupRepresentation(GF_MPD_In *mpd, GF_MPD_Group *group) +{ + u32 i, bandwidth, min_bandwidth; + GF_MPD_Representation *rep_sel = NULL; + GF_MPD_Representation *min_rep_sel = NULL; + Bool min_bandwidth_selected = 0; + bandwidth = 0; + min_bandwidth = (u32) -1; + + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPDIn] Checking representations between %d and %d kbps\n", group->min_bitrate/1024, group->max_bitrate/1024)); + + for (i=0; irepresentations); i++) { + GF_MPD_Representation *rep = gf_list_get(group->representations, i); + if (rep->disabled) continue; + if ((rep->bandwidth > bandwidth) && (rep->bandwidth < group->max_bitrate )) { + rep_sel = rep; + bandwidth = rep->bandwidth; + } + if (rep->bandwidth < min_bandwidth) { + min_rep_sel = rep; + min_bandwidth = rep->bandwidth; + } + } + if (!rep_sel) { + rep_sel = min_rep_sel; + min_bandwidth_selected = 1; + } + assert(rep_sel); + i = gf_list_find(group->period->representations, rep_sel); + + assert((s32) i >= 0); + + group->force_switch_bandwidth = 0; + group->max_bitrate = 0; + group->min_bitrate = (u32) -1; + + if (i != group->active_rep_index) { + if (min_bandwidth_selected) { + GF_LOG(GF_LOG_ERROR, GF_LOG_MODULE, ("[MPDIn] No representation found with bandwidth below %d kbps - using representation @ %d kbps\n", group->max_bitrate/1024, rep_sel->bandwidth/1024)); + } else { + GF_LOG(GF_LOG_ERROR, GF_LOG_MODULE, ("[MPDIn] Switching to representation bandwidth %d kbps for download bandwidth %d kbps\n", rep_sel->bandwidth/1024, group->max_bitrate/1024)); + } + group->active_rep_index = i; + group->active_bitrate = rep_sel->bandwidth; + } +} -static GF_Err MPD_DownloadInitSegment(GF_MPD_In *mpdin, GF_MPD_Period *period) +static GF_Err MPD_DownloadInitSegment(GF_MPD_In *mpdin, GF_MPD_Group *group) { GF_Err e; char *base_init_url; char * url_to_dl; GF_MPD_Representation *rep; + u64 start_range, end_range; /* This variable is 0 if there is a initURL, the index of first segment downloaded otherwise */ u32 firstSegment = 0; - if (!mpdin || !period) + if (!mpdin || !group) return GF_BAD_PARAM; gf_mx_p(mpdin->dl_mutex); - assert( period->representations ); - rep = gf_list_get(period->representations, mpdin->active_rep_index); + + assert( group->period && group->period->representations ); + rep = gf_list_get(group->period->representations, group->active_rep_index); if (!rep) { gf_mx_v(mpdin->dl_mutex); GF_LOG(GF_LOG_ERROR, GF_LOG_MODULE, ("[MPD_IN] Unable to find any representation, aborting.\n")); return GF_IO_ERR; } + start_range = end_range = 0; if (!rep->init_url) { GF_MPD_SegmentInfo * seg = gf_list_get(rep->segments, 0); /* No init URL provided, we have to download the first segment then */ if (!seg->url) { - mpdin->dl_stop_request = 1; + mpdin->mpd_stop_request = 1; gf_mx_v(mpdin->dl_mutex); return GF_BAD_PARAM; } firstSegment = 1; url_to_dl = seg->url; + if (seg->use_byterange) { + start_range = seg->byterange_start; + end_range = seg->byterange_end; + } } else { url_to_dl = rep->init_url; + if (rep->init_use_range) { + start_range = rep->init_byterange_start; + end_range = rep->init_byterange_end; + } } if (rep->default_base_url) { base_init_url = gf_url_concatenate(rep->default_base_url, url_to_dl); } else { base_init_url = gf_strdup(url_to_dl); } - e = MPD_downloadWithRetry(mpdin->service, &(mpdin->seg_dnload), base_init_url, MPD_NetIO_Segment, mpdin); + + + if (!strstr(base_init_url, "://") || !strnicmp(base_init_url, "file://", 7)) { + assert(!group->nb_cached); + group->cached[0].cache = gf_strdup(base_init_url); + group->cached[0].url = gf_strdup(base_init_url); + group->nb_cached = 1; + /*do not erase local files*/ + group->local_files = 1; + group->download_segment_index = firstSegment; + group->segment_local_url = group->cached[0].cache; + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Setup initialization segment %s \n", group->segment_local_url)); + if (!group->service) e = MPD_LoadMediaService(mpdin, group, rep->mime, group->segment_local_url); + gf_mx_v(mpdin->dl_mutex); + gf_free(base_init_url); + return GF_OK; + } + + group->max_bitrate = 0; + group->min_bitrate = (u32)-1; + /*use persistent connection for segment downloads*/ + e = MPD_downloadWithRetry(mpdin->service, &(group->segment_dnload), base_init_url, MPD_NetIO_Segment, group, start_range, end_range, 1); + + if ((e==GF_OK) && group->force_switch_bandwidth && !mpdin->auto_switch_count) { + MPD_SwitchGroupRepresentation(mpdin, group); + gf_mx_v(mpdin->dl_mutex); + return MPD_DownloadInitSegment(mpdin, group); + } + + if (e == GF_URL_ERROR && !base_init_url) { /* We have a 404 and started with segments */ /* It is possible that the first segment has been deleted while we made the first request... * so we try with the next segment on some M3U8 servers */ @@ -578,86 +795,95 @@ static GF_Err MPD_DownloadInitSegment(GF_MPD_In *mpdin, GF_MPD_Period *period) } GF_LOG(GF_LOG_WARNING, GF_LOG_MODULE, ("Download of first segment failed... retrying with second one : %s\n", base_init_url)); firstSegment = 2; - e = MPD_downloadWithRetry(mpdin->service, &(mpdin->seg_dnload), base_init_url, MPD_NetIO_Segment, mpdin); + /*use persistent connection for segment downloads*/ + e = MPD_downloadWithRetry(mpdin->service, &(group->segment_dnload), base_init_url, MPD_NetIO_Segment, group, 0, 0, 1); } /* end of 404 */ - if (e!= GF_OK && !mpdin->segment_must_be_streamed) { - mpdin->dl_stop_request = 1; + if (e!= GF_OK && !group->segment_must_be_streamed) { + mpdin->mpd_stop_request = 1; gf_mx_v(mpdin->dl_mutex); gf_free(base_init_url); return e; } else { char mime[128]; - GF_MPD_Representation *rep = gf_list_get(period->representations, mpdin->active_rep_index); u32 count = gf_list_count(rep->segments) + 1; - if (count < mpdin->max_cached) { + if (count < group->max_cached) { if (count < 1) { GF_LOG(GF_LOG_ERROR, GF_LOG_MODULE, ("[MPD_IN] 0 representations, aborting\n")); gf_free(base_init_url); + gf_mx_v(mpdin->dl_mutex); return GF_BAD_PARAM; } - GF_LOG(GF_LOG_INFO, GF_LOG_MODULE, ("[MPD_IN] Resizing to %u max_cached elements instead of %u.\n", count, mpdin->max_cached)); + GF_LOG(GF_LOG_INFO, GF_LOG_MODULE, ("[MPD_IN] Resizing to %u max_cached elements instead of %u.\n", count, group->max_cached)); /* OK, we have a problem, it may ends download */ - mpdin->max_cached = count; + group->max_cached = count; } - e = gf_dm_sess_process(mpdin->seg_dnload); + e = gf_dm_sess_process(group->segment_dnload); /* Mime-Type check */ - strncpy(mime, gf_dm_sess_mime_type(mpdin->seg_dnload), sizeof(mime)); + strncpy(mime, gf_dm_sess_mime_type(group->segment_dnload), sizeof(mime)); strlwr(mime); - if (mime && mpdin->seg_ifce == NULL) { + if (mime && group->service == NULL) { GF_Err e; - GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Searching a decoder for mime type : %s...\n", mime)); + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Searching an input plugin for mime type : %s...\n", mime)); gf_free( mpdin->mimeTypeForM3U8Segments); mpdin->mimeTypeForM3U8Segments = gf_strdup( mime ); gf_free( rep->mime); rep->mime = gf_strdup( mime ); - e = MPD_LoadMediaService(mpdin, mime); - if (e != GF_OK) + e = MPD_LoadMediaService(mpdin, group, mime, base_init_url); + if (e != GF_OK) { + gf_mx_v(mpdin->dl_mutex); return e; + } } if (!mime || (stricmp(mime, rep->mime))) { GF_LOG(GF_LOG_ERROR, GF_LOG_MODULE, ("[MPD_IN] Mime '%s' is not correct for '%s', it should be '%s'\n", mime, base_init_url, rep->mime)); - mpdin->dl_stop_request = 0; + mpdin->mpd_stop_request = 0; gf_mx_v(mpdin->dl_mutex); gf_free(base_init_url); base_init_url = NULL; return GF_BAD_PARAM; } - if (mpdin->segment_must_be_streamed ) { - mpdin->seg_local_url = gf_dm_sess_get_resource_name(mpdin->seg_dnload); + if (group->segment_must_be_streamed ) { + group->segment_local_url = gf_dm_sess_get_resource_name(group->segment_dnload); e = GF_OK; } else { - mpdin->seg_local_url = rep->init_use_range ? gf_cache_get_cache_filename_range(mpdin->seg_dnload, rep->init_byterange_start, rep->init_byterange_end ) : gf_dm_sess_get_cache_name(mpdin->seg_dnload); + group->segment_local_url = gf_dm_sess_get_cache_name(group->segment_dnload); } - if ((e!=GF_OK) || !mpdin->seg_local_url) { - GF_LOG(GF_LOG_ERROR, GF_LOG_MODULE, ("[MPD_IN] Error with initialization segment: download result:%s, cache file:%s\n", gf_error_to_string(e), mpdin->seg_local_url)); - mpdin->dl_stop_request = 1; + if ((e!=GF_OK) || !group->segment_local_url) { + GF_LOG(GF_LOG_ERROR, GF_LOG_MODULE, ("[MPD_IN] Error with initialization segment: download result:%s, cache file:%s\n", gf_error_to_string(e), group->segment_local_url)); + mpdin->mpd_stop_request = 1; gf_mx_v(mpdin->dl_mutex); gf_free(base_init_url); return GF_BAD_PARAM; } else { -#ifndef DONT_USE_TERMINAL_MODULE_API - GF_NetworkCommand com; -#endif - assert(!mpdin->nb_cached); - mpdin->cached[0].cache = gf_strdup(mpdin->seg_local_url); - mpdin->cached[0].url = gf_strdup(gf_dm_sess_get_resource_name(mpdin->seg_dnload)); - mpdin->nb_cached = 1; - mpdin->download_segment_index = firstSegment; - GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Adding initialization segment %s to cache: %s\n", mpdin->seg_local_url, mpdin->cached[0].url )); + assert(!group->nb_cached); + group->cached[0].cache = gf_strdup(group->segment_local_url); + group->cached[0].url = gf_strdup(gf_dm_sess_get_resource_name(group->segment_dnload)); + group->nb_cached = 1; + group->download_segment_index = firstSegment; + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Adding initialization segment %s to cache: %s\n", group->segment_local_url, group->cached[0].url )); gf_mx_v(mpdin->dl_mutex); gf_free(base_init_url); -#ifndef DONT_USE_TERMINAL_MODULE_API - com.base.command_type = GF_NET_SERVICE_INFO; - gf_term_on_command(mpdin->service, &com, GF_OK); -#endif return GF_OK; } } } - +static void MPDIn_skip_disabled_rep(GF_MPD_Group *group, GF_MPD_Representation *rep) +{ + s32 rep_idx = gf_list_find(group->representations, rep); + while (1) { + rep_idx++; + if (rep_idx==gf_list_count(group->representations)) rep_idx = 0; + rep = gf_list_get(group->representations, rep_idx); + if (!rep->disabled) break; + } + assert(rep && !rep->disabled); + group->active_rep_index = gf_list_find(group->period->representations, rep); + group->active_bitrate = rep->bandwidth; + GF_LOG(GF_LOG_INFO, GF_LOG_MODULE, ("[MPD_IN] Switching to representation %d - BW %d\n", group->active_rep_index, group->active_bitrate )); +} static u32 download_segments(void *par) { @@ -666,144 +892,267 @@ static u32 download_segments(void *par) GF_MPD_Period *period; GF_MPD_Representation *rep; GF_MPD_SegmentInfo *seg; + u32 i, group_count, ret = 0; + Bool go_on = 1; char *new_base_seg_url; assert(mpdin); if (!mpdin->mpd){ - GF_LOG(GF_LOG_WARNING, GF_LOG_MODULE, ("[MPD_IN] Incorrect state, no mpdin->mpd for URL=%s, already stopped ?\n", mpdin->seg_local_url)); + GF_LOG(GF_LOG_WARNING, GF_LOG_MODULE, ("[MPD_IN] Incorrect state, no mpdin->mpd for URL=%s, already stopped ?\n", mpdin->url)); return 1; } + /* Setting the download status in exclusive code */ gf_mx_p(mpdin->dl_mutex); - mpdin->is_dl_segments = 1; + mpdin->mpd_is_running = MPD_STATE_CONNECTING; gf_mx_v(mpdin->dl_mutex); + e = GF_OK; period = gf_list_get(mpdin->mpd->periods, mpdin->active_period_index); - e = MPD_DownloadInitSegment(mpdin, period); - mpdin->dl_stop_request=0; - if (e != GF_OK) { + group_count = gf_list_count(mpdin->groups); + for (i=0; igroups, i); + if (!group->selected) continue; + e = MPD_DownloadInitSegment(mpdin, group); + if (e) break; + } + mpdin->mpd_stop_request=0; + + if (e != GF_OK) { gf_term_on_connect(mpdin->service, NULL, e); - return 1; + ret = 1; + goto exit; } - if (!mpdin->is_service_connected) mpdin->is_service_connected = 1; mpdin->last_update_time = gf_sys_clock(); - /* Forward the ConnectService message to the appropriate service for this type of segment */ - GF_LOG(GF_LOG_INFO, GF_LOG_MODULE, ("[MPD_IN] Connecting initial service... %s\n", mpdin->seg_local_url)); - mpdin->seg_ifce->ConnectService(mpdin->seg_ifce, mpdin->service, mpdin->seg_local_url); - GF_LOG(GF_LOG_INFO, GF_LOG_MODULE, ("[MPD_IN] Connecting initial service DONE\n", mpdin->seg_local_url)); - while (1) { + + gf_mx_p(mpdin->dl_mutex); + mpdin->mpd_is_running = MPD_STATE_CONNECTING; + gf_mx_v(mpdin->dl_mutex); + + for (i=0; igroups, i); + GF_LOG(GF_LOG_INFO, GF_LOG_MODULE, ("[MPD_IN] Connecting initial service... %s\n", group->segment_local_url)); + if (! group->service) { + e = GF_SERVICE_ERROR; + gf_term_on_connect(mpdin->service, NULL, e); + ret = 1; + goto exit; + } + e = group->service->ConnectService(group->service, mpdin->service, group->segment_local_url); + if (e) { + ret = 1; + goto exit; + } + GF_LOG(GF_LOG_INFO, GF_LOG_MODULE, ("[MPD_IN] Connecting initial service DONE\n", group->segment_local_url)); + } + + gf_mx_p(mpdin->dl_mutex); + mpdin->mpd_is_running = MPD_STATE_RUNNING; + gf_mx_v(mpdin->dl_mutex); + + while (go_on) { + const char *local_file_name = NULL; + const char *resource_name = NULL; /*wait until next segment is needed*/ - gf_mx_p(mpdin->dl_mutex); - while (!mpdin->dl_stop_request && (mpdin->nb_cached==mpdin->max_cached)) { + while (!mpdin->mpd_stop_request) { u32 timer = gf_sys_clock() - mpdin->last_update_time; Bool shouldParsePlaylist = mpdin->mpd->min_update_time && (timer > mpdin->mpd->min_update_time); - gf_mx_v(mpdin->dl_mutex); - if (shouldParsePlaylist) { + + if (shouldParsePlaylist) { GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Next segment in cache, but it is time to update the playlist (%u ms/%u)\n", timer, mpdin->mpd->min_update_time)); e = MPD_UpdatePlaylist(mpdin); + group_count = gf_list_count(mpdin->groups); if (e) { GF_LOG(GF_LOG_ERROR, GF_LOG_MODULE, ("[MPD_IN] Error updating MDP %s\n", gf_error_to_string(e))); } } else { - gf_sleep(16); + Bool cache_full = 1; + gf_mx_p(mpdin->dl_mutex); + for (i=0; igroups, i); + if (!group->selected || group->done) continue; + if (group->nb_cachedmax_cached) { + cache_full = 0; + break; + } + } + gf_mx_v(mpdin->dl_mutex); + if (!cache_full) break; + + gf_sleep(16); } - gf_mx_p(mpdin->dl_mutex); } /* stop the thread if requested */ - if (mpdin->dl_stop_request) { - mpdin->is_dl_segments = 0; - gf_mx_v(mpdin->dl_mutex); + if (mpdin->mpd_stop_request) { + go_on = 0; break; } - gf_mx_v(mpdin->dl_mutex); /* Continue the processing (no stop request) */ period = gf_list_get(mpdin->mpd->periods, mpdin->active_period_index); - rep = gf_list_get(period->representations, mpdin->active_rep_index); - /* if the index of the segment to be downloaded is greater or equal to the last segment (as seen in the playlist), - we need to check if a new playlist is ready */ - if (mpdin->download_segment_index>=gf_list_count(rep->segments)) { - u32 timer = gf_sys_clock() - mpdin->last_update_time; - /* update of the playlist, only if indicated */ - if (mpdin->mpd->min_update_time && timer > mpdin->mpd->min_update_time) { - GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Last segment in current playlist downloaded, checking updates after %u ms\n", timer)); - e = MPD_UpdatePlaylist(mpdin); - if (e) { - GF_LOG(GF_LOG_ERROR, GF_LOG_MODULE, ("[MPD_IN] Error updating MDP %s\n", gf_error_to_string(e))); - } - period = gf_list_get(mpdin->mpd->periods, mpdin->active_period_index); - rep = gf_list_get(period->representations, mpdin->active_rep_index); - } else { - gf_sleep(16); - } - /* Now that the playlist is up to date, we can check again */ - if (mpdin->download_segment_index>=gf_list_count(rep->segments)) { - if (mpdin->mpd->min_update_time) { - /* if there is a specified update period, we redo the whole process */ - continue; - } else { - /* if not, we are really at the end of the playlist, we can quit */ - GF_LOG(GF_LOG_INFO, GF_LOG_MODULE, ("[MPD_IN] End of playlist reached... downloading remaining elements...")); - break; - } - } - } - gf_mx_p(mpdin->dl_mutex); - /* At this stage, there are some segments left to be downloaded */ - seg = gf_list_get(rep->segments, mpdin->download_segment_index); - gf_mx_v(mpdin->dl_mutex); + /*for each selected groups*/ + for (i=0; igroups, i); + if (! group->selected) continue; + if (group->done) continue; + + + if (group->nb_cached>=group->max_cached) { + continue; + } + + rep = gf_list_get(period->representations, group->active_rep_index); + + /* if the index of the segment to be downloaded is greater or equal to the last segment (as seen in the playlist), + we need to check if a new playlist is ready */ + if (group->download_segment_index>=gf_list_count(rep->segments)) { + u32 timer = gf_sys_clock() - mpdin->last_update_time; + /* update of the playlist, only if indicated */ + if (mpdin->mpd->min_update_time && timer > mpdin->mpd->min_update_time) { + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Last segment in current playlist downloaded, checking updates after %u ms\n", timer)); + e = MPD_UpdatePlaylist(mpdin); + if (e) { + GF_LOG(GF_LOG_ERROR, GF_LOG_MODULE, ("[MPD_IN] Error updating MDP %s\n", gf_error_to_string(e))); + } + group_count = gf_list_count(mpdin->groups); + period = gf_list_get(mpdin->mpd->periods, mpdin->active_period_index); + rep = gf_list_get(period->representations, group->active_rep_index); + } else { + gf_sleep(16); + } + /* Now that the playlist is up to date, we can check again */ + if (group->download_segment_index >= gf_list_count(rep->segments)) { + if (mpdin->mpd->min_update_time) { + /* if there is a specified update period, we redo the whole process */ + continue; + } else { + /* if not, we are really at the end of the playlist, we can quit */ + GF_LOG(GF_LOG_INFO, GF_LOG_MODULE, ("[MPD_IN] End of playlist reached... downloading remaining elements...")); + group->done = 1; + break; + } + } + } + gf_mx_p(mpdin->dl_mutex); + /* At this stage, there are some segments left to be downloaded */ + seg = gf_list_get(rep->segments, group->download_segment_index); + gf_mx_v(mpdin->dl_mutex); + + if (!seg->url) { + if (rep->init_url) + new_base_seg_url = gf_url_concatenate(rep->default_base_url, rep->init_url); + else + new_base_seg_url = gf_strdup(rep->default_base_url); + } else if (rep->default_base_url) { + new_base_seg_url = gf_url_concatenate(rep->default_base_url, seg->url); + } else { + new_base_seg_url = gf_strdup(seg->url); + } + if (seg->use_byterange) { + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Downloading new segment: %s (range: %d-%d)\n", new_base_seg_url, seg->byterange_start, seg->byterange_end)); + } + + /*local file*/ + if (!strstr(new_base_seg_url, "://") || !strnicmp(new_base_seg_url, "file://", 7)) { + /*byte-range request from file are ignored*/ + if (seg->use_byterange) { + group->done = 1; + break; + } + resource_name = local_file_name = (char *) new_base_seg_url; + e = GF_OK; + /*do not erase local files*/ + group->local_files = 1; + } else { + group->max_bitrate = 0; + group->min_bitrate = (u32)-1; + /*use persistent connection for segment downloads*/ + if (seg->use_byterange) { + e = MPD_downloadWithRetry(mpdin->service, &(group->segment_dnload), new_base_seg_url, MPD_NetIO_Segment, group, seg->byterange_start, seg->byterange_end, 1); + } else { + e = MPD_downloadWithRetry(mpdin->service, &(group->segment_dnload), new_base_seg_url, MPD_NetIO_Segment, group, 0, 0, 1); + } + + if ((e==GF_OK) && group->force_switch_bandwidth) { + if (!mpdin->auto_switch_count) { + MPD_SwitchGroupRepresentation(mpdin, group); + /*restart*/ + i--; + continue; + } + if (rep->disabled) { + MPDIn_skip_disabled_rep(group, rep); + /*restart*/ + i--; + continue; + } + } + + if (group->segment_must_be_streamed) local_file_name = gf_dm_sess_get_resource_name(group->segment_dnload); + else local_file_name = gf_dm_sess_get_cache_name(group->segment_dnload); + + resource_name = gf_dm_sess_get_resource_name(group->segment_dnload); + + { + u32 total_size, bytes_per_sec; + Double bitrate; + gf_dm_sess_get_stats(group->segment_dnload, NULL, NULL, &total_size, NULL, &bytes_per_sec, NULL); + bitrate = 8*total_size; + bitrate *= 1000; + bitrate /= rep->default_segment_duration; + bitrate /= 1024; + fprintf(stdout, "Downloaded segment bitrate %d kbps with bandwith %d kbps\n", (u32) bitrate, 8*bytes_per_sec/1024); + /*TODO switch quality*/ + + if (!mpdin->auto_switch_count) { + MPD_SwitchGroupRepresentation(mpdin, group); + } + } + } + + if (e == GF_OK || group->segment_must_be_streamed) { + gf_mx_p(mpdin->dl_mutex); + assert(group->nb_cachedmax_cached); + group->cached[group->nb_cached].cache = gf_strdup(local_file_name); + group->cached[group->nb_cached].url = gf_strdup( resource_name ); + GF_LOG(GF_LOG_INFO, GF_LOG_MODULE, ("[MPD_IN] Added file to cache\n\tURL: %s\n\tCache: %s\n\tElements in cache: %u/%u\n", group->cached[group->nb_cached].url, group->cached[group->nb_cached].cache, group->nb_cached+1, group->max_cached)); + group->nb_cached++; + group->download_segment_index++; + if (mpdin->auto_switch_count) { + group->nb_segments_done++; + if (group->nb_segments_done==mpdin->auto_switch_count) { + group->nb_segments_done=0; + MPDIn_skip_disabled_rep(group, rep); + } + } + gf_mx_v(mpdin->dl_mutex); + } + gf_free(new_base_seg_url); + new_base_seg_url = NULL; + if (e != GF_OK) { + GF_LOG(GF_LOG_ERROR, GF_LOG_MODULE, ("[MPD_IN] Error in downloading new segment: %s %s\n", new_base_seg_url, gf_error_to_string(e))); + go_on=0; + break; + } + } + + if (!go_on) break; - if (rep->default_base_url) { - new_base_seg_url = gf_url_concatenate(rep->default_base_url, seg->url); - } else { - new_base_seg_url = gf_strdup(seg->url); - } - if (seg->use_byterange) { - GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Downloading new segment: %s (range: %d-%d)\n", new_base_seg_url, seg->byterange_start, seg->byterange_end)); - } - e = MPD_downloadWithRetry(mpdin->service, &(mpdin->seg_dnload), new_base_seg_url, MPD_NetIO_Segment, mpdin); - if (e == GF_OK || mpdin->segment_must_be_streamed) { - gf_mx_p(mpdin->dl_mutex); - mpdin->cached[mpdin->nb_cached].cache = gf_strdup(mpdin->segment_must_be_streamed? - gf_dm_sess_get_resource_name(mpdin->seg_dnload) : - (rep->init_use_range ? gf_cache_get_cache_filename_range(mpdin->seg_dnload, rep->init_byterange_start, rep->init_byterange_end ) : gf_dm_sess_get_cache_name(mpdin->seg_dnload))); - mpdin->cached[mpdin->nb_cached].url = gf_strdup( gf_dm_sess_get_resource_name(mpdin->seg_dnload)); - GF_LOG(GF_LOG_INFO, GF_LOG_MODULE, ("[MPD_IN] Added file to cache\n\tURL: %s\n\tCache: %s\n\tElements in cache: %u/%u\n", mpdin->cached[mpdin->nb_cached].url, mpdin->cached[mpdin->nb_cached].cache, mpdin->nb_cached+1, mpdin->max_cached)); - mpdin->nb_cached++; - gf_mx_v(mpdin->dl_mutex); - mpdin->download_segment_index++; - if (mpdin->auto_switch) { - mpdin->nb_segs_done++; - if (mpdin->nb_segs_done==1) { - mpdin->nb_segs_done=0; - mpdin->active_rep_index++; - if (mpdin->active_rep_index>=gf_list_count(period->representations)) mpdin->active_rep_index=0; - } - } - } - if (e != GF_OK) { - GF_LOG(GF_LOG_ERROR, GF_LOG_MODULE, ("[MPD_IN] Error in downloading new segment: %s %s\n", new_base_seg_url, gf_error_to_string(e))); - gf_free(new_base_seg_url); - new_base_seg_url = NULL; - break; - } else { - gf_free(new_base_seg_url); - new_base_seg_url = NULL; - } } +exit: /* Signal that the download thread has ended */ gf_mx_p(mpdin->dl_mutex); - mpdin->is_dl_segments = 0; + mpdin->mpd_is_running = MPD_STATE_STOPPED; gf_mx_v(mpdin->dl_mutex); - return 0; + return ret; } const char * MPD_MPD_DESC = "HTTP MPD Streaming"; -const char * MPD_MPD_EXT = "3gm mdp"; +const char * MPD_MPD_EXT = "3gm mpd"; const char * MPD_M3U8_DESC = "HTTP M3U8 Playlist Streaming"; @@ -839,30 +1188,44 @@ Bool MPD_CanHandleURL(GF_InputService *plug, const char *url) return MPD_CheckRootType(url); } + +GF_InputService *MPD_GetInputServiceForChannel(GF_MPD_In *mpdin, LPNETCHANNEL channel) +{ + GF_Channel *ch; + if (mpdin->group_zero_selected) return mpdin->group_zero_selected->service; + ch = (GF_Channel *) channel; + assert(ch && ch->odm && ch->odm->OD); + + return (GF_InputService *) ch->odm->OD->service_ifce; +} + +GF_MPD_Group *MPD_GetGroupForInputService(GF_MPD_In *mpdin, GF_InputService *ifce) +{ + u32 i; + for (i=0; igroups); i++) { + GF_MPD_Group *group = gf_list_get(mpdin->groups, i); + if (group->service==ifce) return group; + } + return NULL; +} + GF_Err MPD_ConnectChannel(GF_InputService *plug, LPNETCHANNEL channel, const char *url, Bool upstream) { GF_MPD_In *mpdin = (GF_MPD_In*) plug->priv; - GF_Err e; - GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Channel Connection (0x%x) request from terminal for %s\n", channel, url)); - if (!plug || !plug->priv || !mpdin->seg_ifce) return GF_SERVICE_ERROR; - e = mpdin->seg_ifce->ConnectChannel(mpdin->seg_ifce, channel, url, upstream); - if (e == GF_OK) { - mpdin->nb_connected_channels++; - } - return e; + GF_InputService *segment_ifce = MPD_GetInputServiceForChannel(mpdin, channel); + if (!plug || !plug->priv || !segment_ifce) return GF_SERVICE_ERROR; + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Channel Connection (%p) request from terminal for %s\n", channel, url)); + return segment_ifce->ConnectChannel(segment_ifce, channel, url, upstream); } GF_Err MPD_DisconnectChannel(GF_InputService *plug, LPNETCHANNEL channel) { GF_MPD_In *mpdin = (GF_MPD_In*) plug->priv; - GF_Err e; - GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Disconnect channel (0x%x) request from terminal \n", channel)); - if (!plug || !plug->priv || !mpdin->seg_ifce) return GF_SERVICE_ERROR; - e = mpdin->seg_ifce->DisconnectChannel(mpdin->seg_ifce, channel); - if (e == GF_OK) { - mpdin->nb_connected_channels--; - } - return e; + GF_InputService *segment_ifce = MPD_GetInputServiceForChannel(mpdin, channel); + if (!plug || !plug->priv || !segment_ifce) return GF_SERVICE_ERROR; + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Disconnect channel (%p) request from terminal \n", channel)); + + return segment_ifce->DisconnectChannel(segment_ifce, channel); } static u32 MPD_GetPeriodIndexFromTime(GF_MPD_In *mpdin, u32 time) @@ -881,16 +1244,24 @@ static u32 MPD_GetPeriodIndexFromTime(GF_MPD_In *mpdin, u32 time) static void MPD_DownloadStop(GF_MPD_In *mpdin) { + u32 i; + for (i=0; igroups); i++) { + GF_MPD_Group *group = gf_list_get(mpdin->groups, i); + if (group->selected && group->segment_dnload) { + gf_dm_sess_abort(group->segment_dnload); + group->done = 1; + } + } /* stop the download thread */ gf_mx_p(mpdin->dl_mutex); - if (mpdin->is_dl_segments == 1) { - mpdin->dl_stop_request = 1; + if (mpdin->mpd_is_running != MPD_STATE_STOPPED) { + mpdin->mpd_stop_request = 1; gf_mx_v(mpdin->dl_mutex); while (1) { /* waiting for the download thread to stop */ gf_sleep(16); gf_mx_p(mpdin->dl_mutex); - if (mpdin->is_dl_segments == 0) { + if (mpdin->mpd_is_running != MPD_STATE_RUNNING) { /* it's stopped we can continue */ gf_mx_v(mpdin->dl_mutex); break; @@ -902,20 +1273,114 @@ static void MPD_DownloadStop(GF_MPD_In *mpdin) } } +void MPD_ResetGroups(GF_MPD_In *mpdin) +{ + while (gf_list_count(mpdin->groups)) { + GF_MPD_Group *group = gf_list_last(mpdin->groups); + gf_list_rem_last(mpdin->groups); + gf_list_del(group->representations); + + if (group->urlToDeleteNext) { + if (!mpdin->keep_files && !group->local_files) + gf_dm_delete_cached_file_entry_session(mpdin->mpd_dnload, group->urlToDeleteNext); + + gf_free(group->urlToDeleteNext); + group->urlToDeleteNext = NULL; + } + if (group->segment_dnload) { + gf_term_download_del(group->segment_dnload); + group->segment_dnload = NULL; + } + while (group->nb_cached) { + group->nb_cached --; + if (!mpdin->keep_files && !group->local_files) + gf_delete_file(group->cached[group->nb_cached].cache); + + gf_free(group->cached[group->nb_cached].cache); + gf_free(group->cached[group->nb_cached].url); + } + gf_free(group->cached); + gf_free(group); + } + gf_list_del(mpdin->groups); + mpdin->groups = NULL; +} + +GF_Err MPD_SetupGroups(GF_MPD_In *mpdin) +{ + GF_Err e; + u32 i, j, count; + GF_MPD_Period *period; + if (!mpdin->groups) { + mpdin->groups = gf_list_new(); + if (!mpdin->groups) return GF_OUT_OF_MEM; + } + + period = gf_list_get(mpdin->mpd->periods, mpdin->active_period_index); + if (!period) return GF_BAD_PARAM; + + count = gf_list_count(period->representations); + for (i=0; irepresentations, i); + for (j=0; jgroups); j++) { + GF_MPD_Group *group = gf_list_get(mpdin->groups, j); + if (group->group_id==rep->groupID) { + found = 1; + e = gf_list_add(group->representations, rep); + if (e) return e; + break; + } + } + if (!found) { + GF_MPD_Group *group; + GF_SAFEALLOC(group, GF_MPD_Group); + if (!group) return GF_OUT_OF_MEM; + group->representations = gf_list_new(); + if (!group->representations) { + gf_free(group); + return GF_OUT_OF_MEM; + } + group->group_id = rep->groupID; + group->period = period; + group->max_cached = mpdin->option_max_cached; + group->cached = gf_malloc(sizeof(segment_cache_entry)*group->max_cached); + memset(group->cached, 0, sizeof(segment_cache_entry)*group->max_cached); + if (!group->cached) { + gf_list_del(group->representations); + gf_free(group); + return GF_OUT_OF_MEM; + } + e = gf_list_add(mpdin->groups, group); + if (e) { + gf_free(group->cached); + gf_list_del(group->representations); + gf_free(group); + return e; + } + + e = gf_list_add(group->representations, rep); + if (e) return e; + + } + } + return GF_OK; +} + static GF_Err MPD_SegmentsProcessStart(GF_MPD_In *mpdin, u32 time) { GF_Err e; - u32 rep_i; + u32 rep_i, group_i; GF_MPD_Period *period; - GF_MPD_Representation *rep; - e = GF_BAD_PARAM; -#if 1 +#if 0 MPD_DownloadStop(mpdin); #endif - /* Get the right period from the given time */ + MPD_ResetGroups(mpdin); + + /* Get the right period from the given time */ mpdin->active_period_index = MPD_GetPeriodIndexFromTime(mpdin, time); period = gf_list_get(mpdin->mpd->periods, mpdin->active_period_index); if (!period || !gf_list_count(period->representations) ) { @@ -923,38 +1388,62 @@ static GF_Err MPD_SegmentsProcessStart(GF_MPD_In *mpdin, u32 time) goto exit; } - /* Select the appropriate representation in the given period */ - mpdin->active_rep_index = 0; - for (rep_i = 0; rep_i < gf_list_count(period->representations); rep_i++) { - GF_MPD_Representation *rep = gf_list_get(period->representations, rep_i); - GF_MPD_Representation *rep_sel = gf_list_get(period->representations, mpdin->active_rep_index); - if (rep->qualityRanking > rep_sel->qualityRanking) { - mpdin->active_rep_index = rep_i; - } else if (rep->bandwidth < rep_sel->bandwidth) { - mpdin->active_rep_index = rep_i; - } - } + /*setup all groups*/ + MPD_SetupGroups(mpdin); + mpdin->group_zero_selected = NULL; - /* TODO: Generate segment names if urltemplates are used */ - rep = gf_list_get(period->representations, mpdin->active_rep_index); - if (!gf_list_count(rep->segments) || !rep->mime) { - if (!rep->mime) { - GF_LOG(GF_LOG_ERROR, GF_LOG_MODULE, ("[MPD_IN] Error - cannot start: missing mime\n")); - } else { - GF_LOG(GF_LOG_ERROR, GF_LOG_MODULE, ("[MPD_IN] Error - cannot start: missing segments\n")); - } - goto exit; - } + for (group_i=0; group_igroups); group_i++) { + GF_MPD_Representation *rep_sel; + u32 active_rep; + GF_MPD_Group *group = gf_list_get(mpdin->groups, group_i); - mpdin->seg_ifce = NULL; - if (strcmp(M3U8_UNKOWN_MIME_TYPE, rep->mime)) { - e = MPD_LoadMediaService(mpdin, rep->mime); - if (e != GF_OK) - goto exit; - } else { - GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Ignoring mime type %s, wait for first file...\n", rep->mime)); - } - gf_th_run(mpdin->dl_thread, download_segments, mpdin); + if (group->group_id==0) { + mpdin->group_zero_selected = group; + } else if (mpdin->group_zero_selected) { + break; + } + + /* Select the appropriate representation in the given period */ + active_rep = 0; + for (rep_i = 0; rep_i < gf_list_count(group->representations); rep_i++) { + GF_MPD_Representation *rep = gf_list_get(group->representations, rep_i); + rep_sel = gf_list_get(group->representations, active_rep); + /*by default tune to best quality and/or full bandwith*/ + if (rep->qualityRanking > rep_sel->qualityRanking) { + active_rep = rep_i; + } else if (rep->bandwidth > rep_sel->bandwidth) { + active_rep = rep_i; + } + } + + rep_sel = gf_list_get(group->representations, active_rep); + group->active_rep_index = gf_list_find(group->period->representations, rep_sel); + group->active_bitrate = rep_sel->bandwidth; + + + /* TODO: Generate segment names if urltemplates are used */ + if (!gf_list_count(rep_sel->segments) || !rep_sel->mime) { + if (!rep_sel->mime) { + GF_LOG(GF_LOG_ERROR, GF_LOG_MODULE, ("[MPD_IN] Error - cannot start: missing mime\n")); + } else { + GF_LOG(GF_LOG_ERROR, GF_LOG_MODULE, ("[MPD_IN] Error - cannot start: missing segments\n")); + } + goto exit; + } + + group->service = NULL; + if (strcmp(M3U8_UNKOWN_MIME_TYPE, rep_sel->mime)) { + e = MPD_LoadMediaService(mpdin, group, rep_sel->mime, NULL); + if (e != GF_OK) + goto exit; + } else { + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Ignoring mime type %s, wait for first file...\n", rep_sel->mime)); + } + group->selected = 1; + } + + + gf_th_run(mpdin->mpd_thread, download_segments, mpdin); return GF_OK; exit: @@ -965,30 +1454,17 @@ exit: GF_Err MPD_ConnectService(GF_InputService *plug, GF_ClientService *serv, const char *url) { GF_MPD_In *mpdin = (GF_MPD_In*) plug->priv; + char local_path[GF_MAX_PATH]; const char *local_url, *opt; GF_Err e; GF_DOMParser *mpd_parser; Bool is_m3u8 = 0; + Bool is_local = 0; - GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Service Connection request (0x%x) from terminal for %s\n", serv, url)); + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Service Connection request (%p) from terminal for %s\n", serv, url)); if (!mpdin|| !serv || !url) return GF_BAD_PARAM; - /* If the service is reused on a different URL while already connected this is a problem - The service should only be reused for audio/video in the same stream - WARNING: should check fragment identifiers */ - if (mpdin->is_service_connected) { - if (strcmp(mpdin->url, url)) { - GF_LOG(GF_LOG_ERROR, GF_LOG_MODULE, ("[MPD_IN] Error - cannot connect service with different url when already connected: %s / %s \n", mpdin->url, url)); - return GF_BAD_PARAM; - } else { - mpdin->nb_service_connections++; - GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Reusing Service\n")); - return GF_OK; - } - } - - mpdin->nb_service_connections = 1; mpdin->service = serv; memset( mpdin->lastMPDSignature, 0, sizeof(mpdin->last_update_time)); mpdin->reload_count = 0; @@ -996,32 +1472,35 @@ GF_Err MPD_ConnectService(GF_InputService *plug, GF_ClientService *serv, const c gf_free(mpdin->url); mpdin->url = gf_strdup(url); mpdin->option_max_cached = 0; - mpdin->max_cached = 0; - mpdin->urlToDeleteNext = NULL; - opt = gf_modules_get_option((GF_BaseInterface *)plug, "DASH", "MaxCachedSegments"); - if (!opt) gf_modules_set_option((GF_BaseInterface *)plug, "DASH", "MaxCachedSegments", "5"); + + opt = gf_modules_get_option((GF_BaseInterface *)plug, "DASH", "MaxCachedSegments"); + if (!opt) gf_modules_set_option((GF_BaseInterface *)plug, "DASH", "MaxCachedSegments", "3"); if (opt) mpdin->option_max_cached = atoi(opt); - if (mpdin->option_max_cached < 3) - mpdin->option_max_cached = 3; - mpdin->max_cached = mpdin->option_max_cached; - mpdin->cached = gf_malloc(sizeof(segment_cache_entry)*mpdin->max_cached); - memset(mpdin->cached, 0, sizeof(segment_cache_entry)*mpdin->max_cached); - - mpdin->auto_switch = 0; - opt = gf_modules_get_option((GF_BaseInterface *)plug, "DASH", "AutoSwitch"); - if (!opt) gf_modules_set_option((GF_BaseInterface *)plug, "DASH", "AutoSwitch", "no"); - if (opt && !strcmp(opt, "yes")) mpdin->auto_switch = 1; - - if (mpdin->mpd_dnload) gf_term_download_del(mpdin->mpd_dnload); + if (!mpdin->option_max_cached) mpdin->option_max_cached = 1; + /*we need one more entry for the current segment being played*/ + mpdin->option_max_cached++; + + mpdin->auto_switch_count = 0; + opt = gf_modules_get_option((GF_BaseInterface *)plug, "DASH", "AutoSwitchCount"); + if (!opt) gf_modules_set_option((GF_BaseInterface *)plug, "DASH", "AutoSwitchCount", "0"); + if (opt) mpdin->auto_switch_count = atoi(opt); + + opt = gf_modules_get_option((GF_BaseInterface *)plug, "DASH", "KeepFiles"); + if (!opt) gf_modules_set_option((GF_BaseInterface *)plug, "DASH", "KeepFiles", "no"); + if (opt && !strcmp(opt, "yes")) mpdin->keep_files = 1; + + if (mpdin->mpd_dnload) gf_term_download_del(mpdin->mpd_dnload); mpdin->mpd_dnload = NULL; if (!strnicmp(url, "file://", 7)) { local_url = url + 7; + is_local = 1; if (strstr(url, ".m3u8")) { is_m3u8 = 1; } } else if (strstr(url, "://")) { - e = MPD_downloadWithRetry(mpdin->service, &(mpdin->mpd_dnload), url, MPD_NetIO, mpdin); + /*use non-persistent connection for MPD downloads*/ + e = MPD_downloadWithRetry(mpdin->service, &(mpdin->mpd_dnload), url, MPD_NetIO, mpdin, 0, 0, 1); if (e!=GF_OK) { GF_LOG(GF_LOG_ERROR, GF_LOG_MODULE, ("[MPD_IN] Error - cannot connect service: MPD downloading problem %s for %s\n", gf_error_to_string(e), url)); gf_term_on_connect(mpdin->service, NULL, GF_IO_ERR); @@ -1038,7 +1517,7 @@ GF_Err MPD_ConnectService(GF_InputService *plug, GF_ClientService *serv, const c /* Some servers, for instance http://tv.freebox.fr, serve m3u8 as text/plain */ if (MPD_isM3U8_mime(mime) || strstr(url, ".m3u8")) { is_m3u8 = 1; - } else if (!MPD_is_MPD_mime(mime)) { + } else if (!MPD_is_MPD_mime(mime) && !strstr(url, ".mpd")) { GF_LOG(GF_LOG_ERROR, GF_LOG_MODULE, ("[MPD_IN] mime '%s' for '%s' should be m3u8 or mpd\n", mime, url)); gf_term_on_connect(mpdin->service, NULL, GF_BAD_PARAM); gf_term_download_del(mpdin->mpd_dnload); @@ -1056,10 +1535,33 @@ GF_Err MPD_ConnectService(GF_InputService *plug, GF_ClientService *serv, const c } } else { local_url = url; + is_local = 1; + if (strstr(url, ".m3u8")) + is_m3u8 = 1; } + + if (is_local) { + FILE *f = fopen(local_url, "rt"); + if (!f) { + gf_term_on_connect(mpdin->service, NULL, GF_URL_ERROR); + return GF_OK; + } + fclose(f); + } if (is_m3u8) { - gf_m3u8_to_mpd(mpdin->service, local_url, url, NULL, mpdin->reload_count, mpdin->mimeTypeForM3U8Segments); + if (is_local) { + char *sep; + strcpy(local_path, local_url); + sep = strrchr(local_path, '.'); + if (sep) sep[0]=0; + strcat(local_path, ".mpd"); + + gf_m3u8_to_mpd(mpdin->service, local_url, url, local_path, mpdin->reload_count, mpdin->mimeTypeForM3U8Segments); + local_url = local_path; + } else { + gf_m3u8_to_mpd(mpdin->service, local_url, url, NULL, mpdin->reload_count, mpdin->mimeTypeForM3U8Segments); + } } if (!MPD_CheckRootType(local_url)) { @@ -1087,7 +1589,7 @@ GF_Err MPD_ConnectService(GF_InputService *plug, GF_ClientService *serv, const c if (!mpdin->mpd) { e = GF_OUT_OF_MEM; } else { - e = gf_mpd_init_from_dom(gf_xml_dom_get_root(mpd_parser), mpdin->mpd); + e = gf_mpd_init_from_dom(gf_xml_dom_get_root(mpd_parser), mpdin->mpd, url); } gf_xml_dom_del(mpd_parser); if (e != GF_OK) { @@ -1109,37 +1611,36 @@ static GF_Descriptor *MPD_GetServiceDesc(GF_InputService *plug, u32 expect_type, { GF_MPD_In *mpdin = (GF_MPD_In*) plug->priv; GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Service Description request from terminal for %s\n", sub_url)); - if (mpdin->seg_ifce) { - return mpdin->seg_ifce->GetServiceDescriptor(mpdin->seg_ifce, expect_type, sub_url); - } else { - GF_LOG(GF_LOG_ERROR, GF_LOG_MODULE, ("[MPD_IN] Error - cannot provide service description: no segment service hanlder created\n")); - return NULL; - } + if (mpdin->group_zero_selected) { + if (mpdin->group_zero_selected->service) { + return mpdin->group_zero_selected->service->GetServiceDescriptor(mpdin->group_zero_selected->service, expect_type, sub_url); + } else { + GF_LOG(GF_LOG_ERROR, GF_LOG_MODULE, ("[MPD_IN] Error - cannot provide service description: no segment service hanlder created\n")); + return NULL; + } + } else { + u32 i; + for (i=0; igroups); i++) { + GF_MPD_Group *group = gf_list_get(mpdin->groups, i); + if (!group->selected) continue; + if (group->service_connected) continue; + group->service_connected = 1; + return group->service->GetServiceDescriptor(group->service, expect_type, sub_url); + } + return NULL; + } } void MPD_Stop(GF_MPD_In *mpdin) { - GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Stopping service 0x%x\n", mpdin->service)); + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Stopping service %p\n", mpdin->service)); MPD_DownloadStop(mpdin); - if (mpdin->urlToDeleteNext) { - gf_dm_delete_cached_file_entry_session(mpdin->mpd_dnload, mpdin->urlToDeleteNext); - gf_free( mpdin->urlToDeleteNext); - mpdin->urlToDeleteNext = NULL; - } + MPD_ResetGroups(mpdin); + if (mpdin->mpd_dnload) { gf_term_download_del(mpdin->mpd_dnload); mpdin->mpd_dnload = NULL; } - if (mpdin->seg_dnload) { - gf_term_download_del(mpdin->seg_dnload); - mpdin->seg_dnload = NULL; - } - while (mpdin->nb_cached) { - mpdin->nb_cached --; - gf_delete_file(mpdin->cached[mpdin->nb_cached].cache); - gf_free(mpdin->cached[mpdin->nb_cached].cache); - gf_free(mpdin->cached[mpdin->nb_cached].url); - } if (mpdin->mpd) gf_mpd_del(mpdin->mpd); mpdin->mpd = NULL; @@ -1147,73 +1648,99 @@ void MPD_Stop(GF_MPD_In *mpdin) GF_Err MPD_CloseService(GF_InputService *plug) { + u32 i; GF_MPD_In *mpdin = (GF_MPD_In*) plug->priv; - GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Close Service (0x%x) request from terminal (#%d connections)\n", mpdin->service, mpdin->nb_service_connections)); - mpdin->nb_service_connections--; - if (mpdin->nb_service_connections == 0) { - if (mpdin->seg_ifce && mpdin->is_service_connected) { - mpdin->seg_ifce->CloseService(mpdin->seg_ifce); - mpdin->is_service_connected = 0; - mpdin->seg_ifce = NULL; - } - MPD_Stop(mpdin); - gf_term_on_disconnect(mpdin->service, NULL, GF_OK); - } - return GF_OK; + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Close Service (%p) request from terminal\n", mpdin->service)); + + for (i=0; igroups); i++) { + GF_MPD_Group *group = gf_list_get(mpdin->groups, i); + + if (group->service && group->service_connected) { + group->service->CloseService(group->service); + group->service_connected = 0; + group->service = NULL; + } + } + MPD_Stop(mpdin); + MPD_ResetGroups(mpdin); + gf_term_on_disconnect(mpdin->service, NULL, GF_OK); + + return GF_OK; } GF_Err MPD_ServiceCommand(GF_InputService *plug, GF_NetworkCommand *com) { GF_Err e; GF_MPD_In *mpdin = (GF_MPD_In*) plug->priv; - if (!plug || !plug->priv || !com || !mpdin->seg_ifce) return GF_SERVICE_ERROR; + GF_InputService *segment_ifce = NULL; + GF_MPD_Group *group = NULL; + if (!plug || !plug->priv || !com ) return GF_SERVICE_ERROR; - switch (com->command_type) { + if (mpdin->group_zero_selected) segment_ifce = mpdin->group_zero_selected->service; + + switch (com->command_type) { case GF_NET_SERVICE_INFO: { - GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Info command from terminal on Service (0x%x)\n", mpdin->service)); - /* defer to the real input service */ - e = mpdin->seg_ifce->ServiceCommand(mpdin->seg_ifce, com); - if (e!= GF_OK || !com->info.name || 2 > strlen(com->info.name)) { - char * title = mpdin->mpd->title; - if (!title) - title = mpdin->cached[0].url; - com->info.name = title; - if (mpdin->mpd->source) + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Info command from terminal on Service (%p)\n", mpdin->service)); + + e = GF_OK; + if (segment_ifce) { + /* defer to the real input service */ + e = segment_ifce->ServiceCommand(segment_ifce, com); + } + + if (e!= GF_OK || !com->info.name || 2 > strlen(com->info.name)) { + com->info.name = mpdin->mpd->title; + if (!com->info.name && mpdin->group_zero_selected) + com->info.name = mpdin->group_zero_selected->cached[0].url; + + if (mpdin->mpd->source) com->info.comment = mpdin->mpd->source; } return GF_OK; } case GF_NET_SERVICE_HAS_AUDIO: - GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Has Audio command from terminal on Service (0x%x)\n", mpdin->service)); - /* defer to the real input service */ - return mpdin->seg_ifce->ServiceCommand(mpdin->seg_ifce, com); - break; + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Has Audio command from terminal on Service (%p)\n", mpdin->service)); + if (segment_ifce) { + /* defer to the real input service */ + return segment_ifce->ServiceCommand(segment_ifce, com); + } + return GF_NOT_SUPPORTED; + } + /*not supported*/ + if (!com->base.on_channel) return GF_NOT_SUPPORTED; + + segment_ifce = MPD_GetInputServiceForChannel(mpdin, com->base.on_channel); + if (!segment_ifce) return GF_NOT_SUPPORTED; + group = MPD_GetGroupForInputService(mpdin, segment_ifce); + + + switch (com->command_type) { case GF_NET_CHAN_SET_PADDING: - GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Set Padding command from terminal on channel 0x%x on Service (0x%x)\n", com->base.on_channel, mpdin->service)); + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Set Padding command from terminal on channel %p on Service (%p)\n", com->base.on_channel, mpdin->service)); /* for padding settings, the MPD level should not change anything */ - return mpdin->seg_ifce->ServiceCommand(mpdin->seg_ifce, com); + return segment_ifce->ServiceCommand(segment_ifce, com); break; case GF_NET_CHAN_SET_PULL: - GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Set Pull command from terminal on channel 0x%x on Service (0x%x)\n", com->base.on_channel, mpdin->service)); + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Set Pull command from terminal on channel %p on Service (%p)\n", com->base.on_channel, mpdin->service)); /* defer to the real input service */ - return mpdin->seg_ifce->ServiceCommand(mpdin->seg_ifce, com); + return segment_ifce->ServiceCommand(segment_ifce, com); break; case GF_NET_CHAN_INTERACTIVE: - GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Interactive command from terminal on channel 0x%x on Service (0x%x)\n", com->base.on_channel, mpdin->service)); + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Interactive command from terminal on channel %p on Service (%p)\n", com->base.on_channel, mpdin->service)); /* we are interactive (that's the whole point of MPD) */ return GF_OK; case GF_NET_CHAN_BUFFER: - GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Buffer query command from terminal on channel 0x%x on Service (0x%x)\n", com->base.on_channel, mpdin->service)); - return mpdin->seg_ifce->ServiceCommand(mpdin->seg_ifce, com); + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Buffer query command from terminal on channel %p on Service (%p)\n", com->base.on_channel, mpdin->service)); + return segment_ifce->ServiceCommand(segment_ifce, com); break; case GF_NET_CHAN_BUFFER_QUERY: - GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received buffer query from terminal on channel 0x%x on Service (0x%x)\n", com->base.on_channel, mpdin->service)); - return mpdin->seg_ifce->ServiceCommand(mpdin->seg_ifce, com); + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received buffer query from terminal on channel %p on Service (%p)\n", com->base.on_channel, mpdin->service)); + return segment_ifce->ServiceCommand(segment_ifce, com); break; case GF_NET_CHAN_DURATION: - GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Duration query from terminal on channel 0x%x on Service (0x%x)\n", com->base.on_channel, mpdin->service)); + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Duration query from terminal on channel %p on Service (%p)\n", com->base.on_channel, mpdin->service)); /* Ignore the duration given by the input service and use the one given in the MPD Note: the duration of the initial segment will be 0 anyway (in MP4).*/ { @@ -1225,92 +1752,77 @@ GF_Err MPD_ServiceCommand(GF_InputService *plug, GF_NetworkCommand *com) } break; case GF_NET_CHAN_PLAY: - GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Play command (#%d playing) from terminal on channel 0x%x on Service (0x%x)\n", mpdin->nb_playing_or_paused_channels, com->base.on_channel, mpdin->service)); + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Play command from terminal on channel %p on Service (%p)\n", com->base.on_channel, mpdin->service)); mpdin->playback_speed = com->play.speed; mpdin->playback_start_range = com->play.start_range; mpdin->playback_end_range = com->play.end_range; - e = mpdin->seg_ifce->ServiceCommand(mpdin->seg_ifce, com); - if (e == GF_OK) { - mpdin->nb_playing_or_paused_channels++; - } - return e; - break; - case GF_NET_CHAN_STOP: - GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Stop command (#%d playing) from terminal on channel 0x%x on Service (0x%x)\n", mpdin->nb_playing_or_paused_channels, com->base.on_channel, mpdin->service)); - e = mpdin->seg_ifce->ServiceCommand(mpdin->seg_ifce, com); - if (e == GF_OK) { - mpdin->nb_playing_or_paused_channels--; - if (mpdin->nb_playing_or_paused_channels == 0) { -// MPD_Stop(mpdin); - } - } - return e; - break; + group->done = 0; + return segment_ifce->ServiceCommand(segment_ifce, com); + + case GF_NET_CHAN_STOP: + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Stop command from terminal on channel %p on Service (%p)\n", com->base.on_channel, mpdin->service)); + group->done = 1; + return segment_ifce->ServiceCommand(segment_ifce, com); case GF_NET_CHAN_PAUSE: - GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Pause command from terminal on channel 0x%x on Service (0x%x)\n", com->base.on_channel, mpdin->service)); - e = mpdin->seg_ifce->ServiceCommand(mpdin->seg_ifce, com); - return e; - break; + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Pause command from terminal on channel %p on Service (%p)\n", com->base.on_channel, mpdin->service)); + return segment_ifce->ServiceCommand(segment_ifce, com); case GF_NET_CHAN_RESUME: - GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Resume command from terminal on channel 0x%x on Service (0x%x)\n", com->base.on_channel, mpdin->service)); - e = mpdin->seg_ifce->ServiceCommand(mpdin->seg_ifce, com); - return e; - break; - case GF_NET_CHAN_SET_SPEED: - GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Set Speed command from terminal on channel 0x%x on Service (0x%x)\n", com->base.on_channel, mpdin->service)); + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Resume command from terminal on channel %p on Service (%p)\n", com->base.on_channel, mpdin->service)); + return segment_ifce->ServiceCommand(segment_ifce, com); + case GF_NET_CHAN_SET_SPEED: + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Set Speed command from terminal on channel %p on Service (%p)\n", com->base.on_channel, mpdin->service)); /* recording the speed, to change the segment download speed */ mpdin->playback_speed = com->play.speed; - /* not supported in MP4 ?? */ - return mpdin->seg_ifce->ServiceCommand(mpdin->seg_ifce, com); - break; - case GF_NET_CHAN_CONFIG: - GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Set Config command from terminal on channel 0x%x on Service (0x%x)\n", com->base.on_channel, mpdin->service)); + return segment_ifce->ServiceCommand(segment_ifce, com); + + case GF_NET_CHAN_CONFIG: + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Set Config command from terminal on channel %p on Service (%p)\n", com->base.on_channel, mpdin->service)); /* defer to the real input service */ - return mpdin->seg_ifce->ServiceCommand(mpdin->seg_ifce, com); + return segment_ifce->ServiceCommand(segment_ifce, com); break; case GF_NET_CHAN_GET_PIXEL_AR: - GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Pixel Aspect Ratio query from terminal on channel 0x%x on Service (0x%x)\n", com->base.on_channel, mpdin->service)); + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Pixel Aspect Ratio query from terminal on channel %p on Service (%p)\n", com->base.on_channel, mpdin->service)); /* defer to the real input service */ - return mpdin->seg_ifce->ServiceCommand(mpdin->seg_ifce, com); + return segment_ifce->ServiceCommand(segment_ifce, com); break; case GF_NET_CHAN_GET_DSI: - GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Decoder Specific Info query from terminal on channel 0x%x on Service (0x%x)\n", com->base.on_channel, mpdin->service)); - return mpdin->seg_ifce->ServiceCommand(mpdin->seg_ifce, com); + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Decoder Specific Info query from terminal on channel %p on Service (%p)\n", com->base.on_channel, mpdin->service)); + return segment_ifce->ServiceCommand(segment_ifce, com); break; case GF_NET_CHAN_MAP_TIME: - GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Map Time query from terminal on channel 0x%x on Service (0x%x)\n", com->base.on_channel, mpdin->service)); - return mpdin->seg_ifce->ServiceCommand(mpdin->seg_ifce, com); + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Map Time query from terminal on channel %p on Service (%p)\n", com->base.on_channel, mpdin->service)); + return segment_ifce->ServiceCommand(segment_ifce, com); break; case GF_NET_CHAN_RECONFIG: - GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Reconfig command from terminal on channel 0x%x on Service (0x%x)\n", com->base.on_channel, mpdin->service)); - return mpdin->seg_ifce->ServiceCommand(mpdin->seg_ifce, com); + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Reconfig command from terminal on channel %p on Service (%p)\n", com->base.on_channel, mpdin->service)); + return segment_ifce->ServiceCommand(segment_ifce, com); break; case GF_NET_CHAN_DRM_CFG: - GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received DRM query from terminal on channel 0x%x on Service (0x%x)\n", com->base.on_channel, mpdin->service)); - return mpdin->seg_ifce->ServiceCommand(mpdin->seg_ifce, com); + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received DRM query from terminal on channel %p on Service (%p)\n", com->base.on_channel, mpdin->service)); + return segment_ifce->ServiceCommand(segment_ifce, com); break; case GF_NET_CHAN_GET_ESD: - GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Elementary Stream Descriptor query from terminal on channel 0x%x on Service (0x%x)\n", com->base.on_channel, mpdin->service)); - return mpdin->seg_ifce->ServiceCommand(mpdin->seg_ifce, com); + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Elementary Stream Descriptor query from terminal on channel %p on Service (%p)\n", com->base.on_channel, mpdin->service)); + return segment_ifce->ServiceCommand(segment_ifce, com); break; case GF_NET_BUFFER_QUERY: - GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Global Buffer query from terminal on Service (0x%x)\n", mpdin->service)); - return mpdin->seg_ifce->ServiceCommand(mpdin->seg_ifce, com); + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Global Buffer query from terminal on Service (%p)\n", mpdin->service)); + return segment_ifce->ServiceCommand(segment_ifce, com); break; case GF_NET_GET_STATS: - GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Statistics query from terminal on Service (0x%x)\n", mpdin->service)); - return mpdin->seg_ifce->ServiceCommand(mpdin->seg_ifce, com); + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Statistics query from terminal on Service (%p)\n", mpdin->service)); + return segment_ifce->ServiceCommand(segment_ifce, com); break; case GF_NET_IS_CACHABLE: - GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Cachable query from terminal on Service (0x%x)\n", mpdin->service)); - return mpdin->seg_ifce->ServiceCommand(mpdin->seg_ifce, com); + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Cachable query from terminal on Service (%p)\n", mpdin->service)); + return segment_ifce->ServiceCommand(segment_ifce, com); break; case GF_NET_SERVICE_MIGRATION_INFO: - GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Migration info query from terminal on Service (0x%x)\n", mpdin->service)); - return mpdin->seg_ifce->ServiceCommand(mpdin->seg_ifce, com); + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Migration info query from terminal on Service (%p)\n", mpdin->service)); + return segment_ifce->ServiceCommand(segment_ifce, com); break; default: - GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received unknown command (%d) on Service (0x%x)\n",com->command_type, mpdin->service)); + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received unknown command (%d) on Service (%p)\n",com->command_type, mpdin->service)); return GF_SERVICE_ERROR; } } @@ -1319,11 +1831,12 @@ GF_Err MPD_ChannelGetSLP(GF_InputService *plug, LPNETCHANNEL channel, char **out { GF_Err e; GF_MPD_In *mpdin = (GF_MPD_In*) plug->priv; - if (!plug || !plug->priv || !mpdin->seg_ifce) return GF_SERVICE_ERROR; + GF_InputService *segment_ifce = MPD_GetInputServiceForChannel(mpdin, channel); + if (!plug || !plug->priv || !segment_ifce) return GF_SERVICE_ERROR; - gf_mx_p(mpdin->dl_mutex); - e = mpdin->seg_ifce->ChannelGetSLP(mpdin->seg_ifce, channel, out_data_ptr, out_data_size, out_sl_hdr, sl_compressed, out_reception_status, is_new_data); - gf_mx_v(mpdin->dl_mutex); +// gf_mx_p(mpdin->dl_mutex); + e = segment_ifce->ChannelGetSLP(segment_ifce, channel, out_data_ptr, out_data_size, out_sl_hdr, sl_compressed, out_reception_status, is_new_data); +// gf_mx_v(mpdin->dl_mutex); return e; } @@ -1331,24 +1844,30 @@ GF_Err MPD_ChannelReleaseSLP(GF_InputService *plug, LPNETCHANNEL channel) { GF_Err e; GF_MPD_In *mpdin = (GF_MPD_In*) plug->priv; - if (!plug || !plug->priv || !mpdin->seg_ifce) return GF_SERVICE_ERROR; + GF_InputService *segment_ifce = MPD_GetInputServiceForChannel(mpdin, channel); + if (!plug || !plug->priv || !segment_ifce) return GF_SERVICE_ERROR; - gf_mx_p(mpdin->dl_mutex); - e = mpdin->seg_ifce->ChannelReleaseSLP(mpdin->seg_ifce, channel); - gf_mx_v(mpdin->dl_mutex); +// gf_mx_p(mpdin->dl_mutex); + e = segment_ifce->ChannelReleaseSLP(segment_ifce, channel); +// gf_mx_v(mpdin->dl_mutex); return e; } Bool MPD_CanHandleURLInService(GF_InputService *plug, const char *url) { - GF_MPD_In *mpdin = (GF_MPD_In*) plug->priv; - GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Can Handle URL In Service (0x%x) request from terminal for %s\n", mpdin->service, url)); - if (!plug || !plug->priv || !mpdin->seg_ifce) return GF_SERVICE_ERROR; - if (!strcmp(mpdin->url, url)) { + /*JLF: commented out, this shall not happen*/ +#if 0 + GF_MPD_In *mpdin = (GF_MPD_In*) plug->priv; + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD_IN] Received Can Handle URL In Service (%p) request from terminal for %s\n", mpdin->service, url)); + if (!plug || !plug->priv) return GF_SERVICE_ERROR; + if (mpdin->url && !strcmp(mpdin->url, url)) { return 1; } else { return 0; } +#endif + + return 0; } GF_EXPORT @@ -1382,9 +1901,8 @@ GF_BaseInterface *LoadInterface(u32 InterfaceType) plug->ChannelGetSLP = MPD_ChannelGetSLP; plug->ChannelReleaseSLP = MPD_ChannelReleaseSLP; GF_SAFEALLOC(mpdin, GF_MPD_In); - memset(mpdin, 0, sizeof(GF_MPD_In)); plug->priv = mpdin; - mpdin->dl_thread = gf_th_new("MPD Segment Downloader Thread"); + mpdin->mpd_thread = gf_th_new("MPD Segment Downloader Thread"); mpdin->dl_mutex = gf_mx_new("MPD Segment Downloader Mutex"); mpdin->mimeTypeForM3U8Segments = gf_strdup( M3U8_UNKOWN_MIME_TYPE ); return (GF_BaseInterface *)plug; @@ -1402,10 +1920,9 @@ void ShutdownInterface(GF_BaseInterface *bi) if (mpdin->url) gf_free(mpdin->url); mpdin->url = NULL; - gf_th_del(mpdin->dl_thread); + gf_th_del(mpdin->mpd_thread); gf_mx_del(mpdin->dl_mutex); gf_free(mpdin->mimeTypeForM3U8Segments); - gf_free(mpdin->cached); gf_free(mpdin); gf_free(bi); } diff --git a/modules/mpegts_in/Makefile b/modules/mpegts_in/Makefile index 951d8ab..f9245ac 100644 --- a/modules/mpegts_in/Makefile +++ b/modules/mpegts_in/Makefile @@ -15,10 +15,6 @@ CFLAGS+=-pg LDFLAGS+=-pg endif -ifeq ($(LINUX_DVB), yes) -CFLAGS+=-DGPAC_HAS_LINUX_DVB -endif - #common obj OBJS=mpegts_in.o @@ -35,7 +31,7 @@ all: $(LIB) $(LIB): $(OBJS) $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/$@ $(OBJS) $(EXTRALIBS) -L../../bin/gcc -lgpac ifeq ($(STATICBUILD),yes) - $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/gm_mpegts_in-static.so $(OBJS) $(EXTRALIBS) -L../../bin/gcc -lgpac_static + $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/gm_mpegts_in-static.$(DYN_LIB_SUFFIX) $(OBJS) $(EXTRALIBS) -L../../bin/gcc -lgpac_static endif diff --git a/modules/mpegts_in/mpegts_in.c b/modules/mpegts_in/mpegts_in.c index 1b48308..6d84d6b 100644 --- a/modules/mpegts_in/mpegts_in.c +++ b/modules/mpegts_in/mpegts_in.c @@ -32,36 +32,7 @@ #ifndef GPAC_DISABLE_MPEG2TS - -#ifdef GPAC_HAS_LINUX_DVB -#include -#include -#include -#include -#include - -typedef struct { - u32 freq; - u16 vpid; - u16 apid; - fe_spectral_inversion_t specInv; - fe_modulation_t modulation; - fe_bandwidth_t bandwidth; - fe_transmit_mode_t TransmissionMode; - fe_guard_interval_t guardInterval; - fe_code_rate_t HP_CodeRate; - fe_code_rate_t LP_CodeRate; - fe_hierarchy_t hierarchy; - - int ts_fd; -} GF_Tuner; - -#define DVB_BUFFER_SIZE 3760 // DVB buffer size 188x20 - -#endif - static const char * MIMES[] = { "video/mpeg-2", "video/mp2t", "video/mpeg", NULL}; -#define UDP_BUFFER_SIZE 0x40000 typedef struct { char *fragment; @@ -70,204 +41,36 @@ typedef struct { u32 pid; } M2TSIn_Prog; -typedef struct +typedef struct { - GF_InputService *owner; - - GF_ClientService *service; GF_M2TS_Demuxer *ts; - Bool request_all_pids; - GF_List *requested_progs; - GF_List *requested_pids; + GF_InputService *owner; - /*demuxer thread*/ - GF_Thread *th; - u32 run_state; - GF_Mutex *mx; - /*net playing*/ - GF_Socket *sock; + GF_ClientService *service; -#ifdef GPAC_HAS_LINUX_DVB - /*dvb playing*/ - GF_Tuner *tuner; -#endif - /*local file playing*/ - FILE *file; - char filename[GF_MAX_PATH]; - u32 start_range, end_range; - u64 file_size; - Double duration; - u32 nb_playing; - Bool file_regulate; - u64 pcr_last; - u32 stb_at_last_pcr; - u32 nb_pck; - - /*remote file handling*/ - GF_DownloadSession *dnload; Bool ts_setup; + Bool request_all_pids; + Bool is_connected; Bool epg_requested; Bool has_eit; LPNETCHANNEL eit_channel; + GF_Mutex *mx; + Bool mpeg4on2_scene_only; char * network_buffer; u32 network_buffer_size; -} M2TSIn; -#define M2TS_BUFFER_MAX 400 + /*pick first pcr pid for regulation*/ + u32 regulation_pcr_pid; + Bool hybrid_on; +}M2TSIn; -#ifdef GPAC_HAS_LINUX_DVB - -static GF_Err gf_dvb_tune(GF_Tuner *tuner, char *url, const char *chan_path) { - struct dmx_pes_filter_params pesFilterParams; - struct dvb_frontend_parameters frp; - int demux1, front1; - FILE *chanfile; - char line[255], chan_name_t[255]; - char freq_str[255], inv[255], bw[255], lcr[255], hier[255], cr[255], - mod[255], transm[255], gi[255], apid_str[255], vpid_str[255]; - const char *chan_conf = ":%255[^:]:%255[^:]:%255[^:]:%255[^:]:%255[^:]:%255[^:]:%255[^:]:%255[^:]:%255[^:]:%255[^:]:%255[^:]:"; - char *chan_name; - char *tmp; - char frontend_name[100], demux_name[100], dvr_name[100]; - u32 adapter_num; - - chanfile = gf_f64_open(chan_path, "r"); - if (!chanfile) return GF_BAD_PARAM; - - chan_name = url+6; // 6 = strlen("dvb://") - - // support for multiple frontends - tmp = strchr(chan_name, '@'); - if (tmp) { - adapter_num = atoi(tmp+1); - tmp[0] = 0; - } else { - adapter_num = 0; - } - GF_LOG(GF_LOG_DEBUG, GF_LOG_CONTAINER, ("Channel name %s\n", chan_name)); - - while(!feof(chanfile)) { - if ( fgets(line, 255, chanfile) != NULL) { - if (line[0]=='#') continue; - if (line[0]=='\r') continue; - if (line[0]=='\n') continue; - - strncpy(chan_name_t, line, index(line, ':')-line); - if (strncmp(chan_name,chan_name_t,strlen(chan_name))==0) { - sscanf(strstr(line,":"), chan_conf, freq_str, inv, bw, lcr, cr, mod, transm, gi, hier, apid_str, vpid_str); - tuner->freq = (uint32_t) atoi(freq_str); - tuner->apid = (uint16_t) atoi(apid_str); - tuner->vpid = (uint16_t) atoi(vpid_str); - //Inversion - if(! strcmp(inv, "INVERSION_ON")) tuner->specInv = INVERSION_ON; - else if(! strcmp(inv, "INVERSION_OFF")) tuner->specInv = INVERSION_OFF; - else tuner->specInv = INVERSION_AUTO; - //LP Code Rate - if(! strcmp(lcr, "FEC_1_2")) tuner->LP_CodeRate =FEC_1_2; - else if(! strcmp(lcr, "FEC_2_3")) tuner->LP_CodeRate =FEC_2_3; - else if(! strcmp(lcr, "FEC_3_4")) tuner->LP_CodeRate =FEC_3_4; - else if(! strcmp(lcr, "FEC_4_5")) tuner->LP_CodeRate =FEC_4_5; - else if(! strcmp(lcr, "FEC_6_7")) tuner->LP_CodeRate =FEC_6_7; - else if(! strcmp(lcr, "FEC_8_9")) tuner->LP_CodeRate =FEC_8_9; - else if(! strcmp(lcr, "FEC_5_6")) tuner->LP_CodeRate =FEC_5_6; - else if(! strcmp(lcr, "FEC_7_8")) tuner->LP_CodeRate =FEC_7_8; - else if(! strcmp(lcr, "FEC_NONE")) tuner->LP_CodeRate =FEC_NONE; - else tuner->LP_CodeRate =FEC_AUTO; - //HP Code Rate - if(! strcmp(cr, "FEC_1_2")) tuner->HP_CodeRate =FEC_1_2; - else if(! strcmp(cr, "FEC_2_3")) tuner->HP_CodeRate =FEC_2_3; - else if(! strcmp(cr, "FEC_3_4")) tuner->HP_CodeRate =FEC_3_4; - else if(! strcmp(cr, "FEC_4_5")) tuner->HP_CodeRate =FEC_4_5; - else if(! strcmp(cr, "FEC_6_7")) tuner->HP_CodeRate =FEC_6_7; - else if(! strcmp(cr, "FEC_8_9")) tuner->HP_CodeRate =FEC_8_9; - else if(! strcmp(cr, "FEC_5_6")) tuner->HP_CodeRate =FEC_5_6; - else if(! strcmp(cr, "FEC_7_8")) tuner->HP_CodeRate =FEC_7_8; - else if(! strcmp(cr, "FEC_NONE")) tuner->HP_CodeRate =FEC_NONE; - else tuner->HP_CodeRate =FEC_AUTO; - //Modulation - if(! strcmp(mod, "QAM_128")) tuner->modulation = QAM_128; - else if(! strcmp(mod, "QAM_256")) tuner->modulation = QAM_256; - else if(! strcmp(mod, "QAM_64")) tuner->modulation = QAM_64; - else if(! strcmp(mod, "QAM_32")) tuner->modulation = QAM_32; - else if(! strcmp(mod, "QAM_16")) tuner->modulation = QAM_16; - //Bandwidth - if(! strcmp(bw, "BANDWIDTH_6_MHZ")) tuner->bandwidth = BANDWIDTH_6_MHZ; - else if(! strcmp(bw, "BANDWIDTH_7_MHZ")) tuner->bandwidth = BANDWIDTH_7_MHZ; - else if(! strcmp(bw, "BANDWIDTH_8_MHZ")) tuner->bandwidth = BANDWIDTH_8_MHZ; - //Transmission Mode - if(! strcmp(transm, "TRANSMISSION_MODE_2K")) tuner->TransmissionMode = TRANSMISSION_MODE_2K; - else if(! strcmp(transm, "TRANSMISSION_MODE_8K")) tuner->TransmissionMode = TRANSMISSION_MODE_8K; - //Guard Interval - if(! strcmp(gi, "GUARD_INTERVAL_1_32")) tuner->guardInterval = GUARD_INTERVAL_1_32; - else if(! strcmp(gi, "GUARD_INTERVAL_1_16")) tuner->guardInterval = GUARD_INTERVAL_1_16; - else if(! strcmp(gi, "GUARD_INTERVAL_1_8")) tuner->guardInterval = GUARD_INTERVAL_1_8; - else tuner->guardInterval = GUARD_INTERVAL_1_4; - //Hierarchy - if(! strcmp(hier, "HIERARCHY_1")) tuner->hierarchy = HIERARCHY_1; - else if(! strcmp(hier, "HIERARCHY_2")) tuner->hierarchy = HIERARCHY_2; - else if(! strcmp(hier, "HIERARCHY_4")) tuner->hierarchy = HIERARCHY_4; - else if(! strcmp(hier, "HIERARCHY_AUTO")) tuner->hierarchy = HIERARCHY_AUTO; - else tuner->hierarchy = HIERARCHY_NONE; - - break; - } - } - } - fclose(chanfile); - sprintf(frontend_name, "/dev/dvb/adapter%d/frontend0", adapter_num); - sprintf(demux_name, "/dev/dvb/adapter%d/demux0", adapter_num); - sprintf(dvr_name, "/dev/dvb/adapter%d/dvr0", adapter_num); - - // Open frontend - if((front1 = open(frontend_name,O_RDWR|O_NONBLOCK)) < 0){ - GF_LOG(GF_LOG_ERROR, GF_LOG_CONTAINER, ("Cannot open frontend %s.\n", frontend_name)); - return GF_IO_ERR; - } else { - GF_LOG(GF_LOG_DEBUG, GF_LOG_CONTAINER, ("Frontend %s opened.\n", frontend_name)); - } - // Open demuxes - if ((demux1=open(demux_name, O_RDWR|O_NONBLOCK)) < 0){ - GF_LOG(GF_LOG_ERROR, GF_LOG_CONTAINER, ("Cannot open demux %s\n", demux_name)); - return GF_IO_ERR; - } else { - GF_LOG(GF_LOG_ERROR, GF_LOG_CONTAINER, ("Demux %s opened.\n", demux_name)); - } - // Set FrontendParameters - DVB-T - frp.frequency = tuner->freq; - frp.inversion = tuner->specInv; - frp.u.ofdm.bandwidth = tuner->bandwidth; - frp.u.ofdm.code_rate_HP = tuner->HP_CodeRate; - frp.u.ofdm.code_rate_LP = tuner->LP_CodeRate; - frp.u.ofdm.constellation = tuner->modulation; - frp.u.ofdm.transmission_mode = tuner->TransmissionMode; - frp.u.ofdm.guard_interval = tuner->guardInterval; - frp.u.ofdm.hierarchy_information = tuner->hierarchy; - // Set frontend - if (ioctl(front1, FE_SET_FRONTEND, &frp) < 0){ - return GF_IO_ERR; - } - // Set dumex - pesFilterParams.pid = 0x2000; // Linux-DVB API take PID=2000 for FULL/RAW TS flag - pesFilterParams.input = DMX_IN_FRONTEND; - pesFilterParams.output = DMX_OUT_TS_TAP; - pesFilterParams.pes_type = DMX_PES_OTHER; - pesFilterParams.flags = DMX_IMMEDIATE_START; - if (ioctl(demux1, DMX_SET_PES_FILTER, &pesFilterParams) < 0){ - return GF_IO_ERR; - } - /* The following code differs from mplayer and alike because the device is opened in blocking mode */ - if ((tuner->ts_fd = open(dvr_name, O_RDONLY/*|O_NONBLOCK*/)) < 0){ - return GF_IO_ERR; - } - return GF_OK; -} -#endif +static void M2TS_GetNetworkType(GF_InputService *plug,M2TSIn *reader); static Bool M2TS_CanHandleURL(GF_InputService *plug, const char *url) { @@ -281,7 +84,7 @@ static Bool M2TS_CanHandleURL(GF_InputService *plug, const char *url) || !strnicmp(url, "dvb://", 6) #endif ) { - return 1; + return 1; } sExt = strrchr(url, '.'); @@ -294,55 +97,23 @@ static Bool M2TS_CanHandleURL(GF_InputService *plug, const char *url) return 0; } -#ifdef GPAC_HAS_LINUX_DVB -static u32 gf_dvb_get_freq_from_url(const char *channels_config_path, const char *url) -{ - FILE *channels_config_file; - char line[255], name[255], *tmp, *channel_name; - - u32 freq; - - /* get rid of trailing @ */ - tmp = strchr(url, '@'); - if (tmp) tmp[0] = 0; - - channel_name = url+6; - - channels_config_file = gf_f64_open(channels_config_path, "r"); - if (!channels_config_file) return GF_BAD_PARAM; - - freq = 0; - while(!feof(channels_config_file)) { - if ( fgets(line, 255, channels_config_file) != NULL) { - if (line[0]=='#') continue; - if (line[0]=='\r') continue; - if (line[0]=='\n') continue; - - tmp = strchr(line, ':'); - tmp[0] = 0; - if (!strcmp(line, channel_name)) { - char *tmp2; - tmp++; - tmp2 = strchr(tmp, ':'); - if (tmp2) tmp2[0] = 0; - freq = (u32)atoi(tmp); - break; - } - } - } - return freq; -} -#endif - static Bool M2TS_CanHandleURLInService(GF_InputService *plug, const char *url) { Bool ret = 0; M2TSIn *m2ts; - if (!plug || !url) - return 0; - m2ts = (M2TSIn *)plug->priv; - if (!m2ts) - return 0; + + if (!plug || !url) + return 0; + m2ts = (M2TSIn *)plug->priv; + if (!m2ts) + return 0; + + if (!strnicmp(url, "pid://", 6)) { + u32 pid = atoi(url+6); + if (pid>=GF_M2TS_MAX_STREAMS) return 0; + if (m2ts->ts->ess[pid]) return 1; + return 0; + } #ifdef GPAC_HAS_LINUX_DVB if (!stricmp(url, "dvb://EPG")) return 1; @@ -355,10 +126,10 @@ static Bool M2TS_CanHandleURLInService(GF_InputService *plug, const char *url) } /* if the tuner is already tuned to the same frequence, nothing needs to be done */ - else if (m2ts->tuner->freq != 0) { + else if (m2ts->ts->tuner->freq != 0) { char *frag = strchr(url, '#'); if (frag) frag[0] = 0; - if (m2ts->tuner->freq == gf_dvb_get_freq_from_url(chan_conf, url)) { + if (m2ts->ts->tuner->freq == gf_dvb_get_freq_from_url(chan_conf, url)) { GF_LOG(GF_LOG_DEBUG, GF_LOG_CONTAINER, ("[DVBIn] Reusing the same tuner for %s\n", url)); ret = 1; } @@ -375,7 +146,7 @@ static Bool M2TS_CanHandleURLInService(GF_InputService *plug, const char *url) } else { char *frag = strchr(url, '#'); if (frag) frag[0] = 0; - if (!strlen(url) || !strcmp(url, m2ts->filename)) { + if (!strlen(url) || !strcmp(url, m2ts->ts->filename)) { GF_LOG(GF_LOG_DEBUG, GF_LOG_CONTAINER, ("[DVBIn] Reusing the same input file for %s\n", url)); ret = 1; } @@ -422,7 +193,7 @@ static GF_ObjectDescriptor *MP2TS_GetOD(M2TSIn *m2ts, GF_M2TS_PES *stream, char case GF_M2TS_AUDIO_AAC: if (!dsi) { /*discard regulate until we fetch the AAC config*/ - m2ts->file_regulate = 0; + m2ts->ts->file_regulate = 0; /*turn on parsing*/ gf_m2ts_set_pes_framing(stream, GF_M2TS_PES_FRAMING_DEFAULT); gf_odf_desc_del((GF_Descriptor *)esd); @@ -461,8 +232,11 @@ static GF_ObjectDescriptor *MP2TS_GetOD(M2TSIn *m2ts, GF_M2TS_PES *stream, char /*declare object to terminal*/ od = (GF_ObjectDescriptor*)gf_odf_desc_new(GF_ODF_OD_TAG); gf_list_add(od->ESDescriptors, esd); - od->objectDescriptorID = esd->ESID; + od->objectDescriptorID = 0; if (streamType) *streamType = esd->decoderConfig->streamType; + /*remember program number for service/program selection*/ + od->ServiceID = stream->program->number; + od->service_ifce = m2ts->owner; return od; } @@ -477,25 +251,21 @@ static void MP2TS_DeclareStream(M2TSIn *m2ts, GF_M2TS_PES *stream, char *dsi, u3 static void MP2TS_SetupProgram(M2TSIn *m2ts, GF_M2TS_Program *prog, Bool regenerate_scene, Bool no_declare) { u32 i, count; - Bool force_declare_ods = 0; count = gf_list_count(prog->streams); #ifdef GPAC_HAS_LINUX_DVB - if (m2ts->tuner) { + if (m2ts->ts->tuner) { Bool found = 0; for (i=0; istreams, i); - if (pes->pid==m2ts->tuner->vpid) found = 1; - else if (pes->pid==m2ts->tuner->apid) found = 1; + if (pes->pid==m2ts->ts->tuner->vpid) found = 1; + else if (pes->pid==m2ts->ts->tuner->apid) found = 1; } if (!found) return; } #endif - if (m2ts->file || m2ts->dnload) m2ts->file_regulate = no_declare ? 0 : 1; + if (m2ts->ts->file || m2ts->ts->dnload) m2ts->ts->file_regulate = no_declare ? 0 : 1; - if (prog->pmt_iod && (prog->pmt_iod->tag==GF_ODF_IOD_TAG) && (((GF_InitialObjectDescriptor*)prog->pmt_iod)->OD_profileAndLevel==GPAC_MAGIC_OD_PROFILE_FOR_MPEG4_SIGNALING)) { - force_declare_ods = 1; - } for (i=0; istreams, i); if (es->pid==prog->pmt_pid) continue; @@ -505,11 +275,9 @@ static void MP2TS_SetupProgram(M2TSIn *m2ts, GF_M2TS_Program *prog, Bool regener if (!prog->pmt_iod && !no_declare) { MP2TS_DeclareStream(m2ts, (GF_M2TS_PES *)es, NULL, 0); - } else if (force_declare_ods) { - if ((es->stream_type!=GF_M2TS_SYSTEMS_MPEG4_PES) && (es->stream_type!=GF_M2TS_SYSTEMS_MPEG4_SECTIONS)) { - MP2TS_DeclareStream(m2ts, (GF_M2TS_PES *)es, NULL, 0); - } - } + } + /*if IOD, streams not declared through OD framework are refered to by pid:// scheme, and will be declared upon + request by the terminal through GetServiceDesc*/ } /*force scene regeneration*/ @@ -528,8 +296,13 @@ static void MP2TS_SendPacket(M2TSIn *m2ts, GF_M2TS_PES_PCK *pck) memset(&slh, 0, sizeof(GF_SLHeader)); slh.accessUnitStartFlag = (pck->flags & GF_M2TS_PES_PCK_AU_START) ? 1 : 0; if (slh.accessUnitStartFlag) { +#if 0 slh.OCRflag = 1; - slh.objectClockReference = pck->stream->program->last_pcr_value/300; + slh.m2ts_pcr = 1; + slh.objectClockReference = pck->stream->program->last_pcr_value; +#else + slh.OCRflag = 0; +#endif slh.compositionTimeStampFlag = 1; slh.compositionTimeStamp = pck->PTS; if (pck->DTS) { @@ -579,7 +352,8 @@ static GF_ObjectDescriptor *M2TS_GenerateEPG_OD(M2TSIn *m2ts) /*declare object to terminal*/ od = (GF_ObjectDescriptor*)gf_odf_desc_new(GF_ODF_OD_TAG); gf_list_add(od->ESDescriptors, esd); - od->objectDescriptorID = GF_M2TS_PID_EIT_ST_CIT; + od->objectDescriptorID = 0; + od->service_ifce = m2ts->owner; return od; } @@ -590,9 +364,9 @@ static void M2TS_FlushRequested(M2TSIn *m2ts) gf_mx_p(m2ts->mx); found = 0; - count = gf_list_count(m2ts->requested_pids); + count = gf_list_count(m2ts->ts->requested_pids); for (i=0; irequested_pids, i); + M2TSIn_Prog *req_pid = gf_list_get(m2ts->ts->requested_pids, i); GF_M2TS_ES *es = m2ts->ts->ess[req_pid->pid]; if (es==NULL) continue; @@ -600,15 +374,15 @@ static void M2TS_FlushRequested(M2TSIn *m2ts) if (!(es->flags & GF_M2TS_ES_IS_SECTION) && !es->user) gf_m2ts_set_pes_framing((GF_M2TS_PES *)es, GF_M2TS_PES_FRAMING_SKIP); MP2TS_DeclareStream(m2ts, (GF_M2TS_PES *)es, NULL, 0); - gf_list_rem(m2ts->requested_pids, i); + gf_list_rem(m2ts->ts->requested_pids, i); gf_free(req_pid); i--; count--; found++; } - req_prog_count = gf_list_count(m2ts->requested_progs); + req_prog_count = gf_list_count(m2ts->ts->requested_progs); for (i = 0; i < req_prog_count; i++) { - M2TSIn_Prog *req_prog = gf_list_get(m2ts->requested_progs, i); + M2TSIn_Prog *req_prog = gf_list_get(m2ts->ts->requested_progs, i); prog_id = atoi(req_prog->fragment); count = gf_list_count(m2ts->ts->SDTs); for (j=0; jfragment); gf_free(req_prog); - gf_list_rem(m2ts->requested_progs, i); + gf_list_rem(m2ts->ts->requested_progs, i); req_prog_count--; i--; break; @@ -653,22 +427,52 @@ static void M2TS_FlushRequested(M2TSIn *m2ts) static void M2TS_OnEvent(GF_M2TS_Demuxer *ts, u32 evt_type, void *param) { + GF_Event evt; M2TSIn *m2ts = (M2TSIn *) ts->user; + switch (evt_type) { case GF_M2TS_EVT_PAT_UPDATE: +/* example code showing how to forward an event from MPEG-2 TS input service to GPAC user*/ +#if 0 + { + GF_Event evt; + evt.type = GF_EVENT_FORWARDED; + evt.forwarded_event.forward_type = GF_EVT_FORWARDED_MPEG2; + evt.forwarded_event.forward_type = GF_EVT_FORWARDED_MPEG2; + evt.forwarded_event.service_event_type = evt_type; + evt.forwarded_event.param = param; + gf_term_on_service_event(m2ts->service, &evt); + } +#endif + break; + case GF_M2TS_EVT_AIT_FOUND: + evt.type = GF_EVENT_FORWARDED; + evt.forwarded_event.forward_type = GF_EVT_FORWARDED_MPEG2; + evt.forwarded_event.service_event_type = evt_type; + evt.forwarded_event.param = param; + gf_term_on_service_event(m2ts->service, &evt); break; case GF_M2TS_EVT_PAT_FOUND: - /* In case the TS has one program, wait for the PMT to send connect, in case of IOD in PMT */ - if (gf_list_count(m2ts->ts->programs) != 1) + /* In case the TS has one program, wait for the PMT to send connect, in case of IOD in PMT */ + if (gf_list_count(m2ts->ts->programs) != 1) { gf_term_on_connect(m2ts->service, NULL, GF_OK); + m2ts->is_connected = 1; + } + /* Send the TS to the a user if needed. Useful to check the number of received programs*/ + evt.type = GF_EVENT_FORWARDED; + evt.forwarded_event.forward_type = GF_M2TS_EVT_PAT_FOUND; + evt.forwarded_event.service_event_type = evt_type; + evt.forwarded_event.param = ts; + gf_term_on_service_event(m2ts->service, &evt); break; case GF_M2TS_EVT_PMT_FOUND: - if (gf_list_count(m2ts->ts->programs) == 1) + if (gf_list_count(m2ts->ts->programs) == 1) { gf_term_on_connect(m2ts->service, NULL, GF_OK); + m2ts->is_connected = 1; + } /*do not declare if single program was requested for playback*/ MP2TS_SetupProgram(m2ts, param, m2ts->request_all_pids, m2ts->request_all_pids ? 0 : 1); - M2TS_FlushRequested(m2ts); break; case GF_M2TS_EVT_PMT_REPEAT: @@ -698,7 +502,7 @@ static void M2TS_OnEvent(GF_M2TS_Demuxer *ts, u32 evt_type, void *param) if (!pck->stream->first_dts) { gf_m2ts_set_pes_framing(pck->stream, GF_M2TS_PES_FRAMING_SKIP_NO_RESET); MP2TS_DeclareStream(m2ts, pck->stream, pck->data, pck->data_len); - if (m2ts->file || m2ts->dnload) m2ts->file_regulate = 1; + if (ts->file || ts->dnload) ts->file_regulate = 1; pck->stream->first_dts=1; /*force scene regeneration*/ gf_term_add_media(m2ts->service, NULL, 0); @@ -717,33 +521,70 @@ static void M2TS_OnEvent(GF_M2TS_Demuxer *ts, u32 evt_type, void *param) } ((GF_M2TS_PES_PCK *) param)->stream->program->first_dts = 1; - if (m2ts->file_regulate) { + if ( ((GF_M2TS_PES_PCK *) param)->flags & GF_M2TS_PES_PCK_DISCONTINUITY) { +#if 0 + if (ts->pcr_last) { + ts->pcr_last = ((GF_M2TS_PES_PCK *) param)->PTS; + ts->stb_at_last_pcr = gf_sys_clock(); + } +#endif + GF_LOG(GF_LOG_ERROR, GF_LOG_CONTAINER, ("[M2TS In] PCR discontinuity - switching from old STB "LLD" to new one "LLD"\n", ts->pcr_last, ((GF_M2TS_PES_PCK *) param)->PTS)); + /*FIXME - we need to find a way to treat PCR discontinuities correctly while ignoring broken PCR discontinuities + seen in many HLS solutions*/ + return; + } + + if (ts->file_regulate) { u64 pcr = ((GF_M2TS_PES_PCK *) param)->PTS; u32 stb = gf_sys_clock(); - if (m2ts->pcr_last) { + + if (m2ts->regulation_pcr_pid==0) { + /*we pick the first PCR PID for file regulation - we don't need to make sure this is the PCR of a program being plyaed as we + only check buffer levels, not DTS/PTS of the streams in the regulation step*/ + m2ts->regulation_pcr_pid = ((GF_M2TS_PES_PCK *) param)->stream->pid; + } else if (m2ts->regulation_pcr_pid != ((GF_M2TS_PES_PCK *) param)->stream->pid) { + return; + } + + + if (ts->pcr_last) { s32 diff; - u64 pcr_diff = (pcr - m2ts->pcr_last); - pcr_diff /= 27000; - diff = (u32) pcr_diff - (stb - m2ts->stb_at_last_pcr); + if (pcr < ts->pcr_last) { + GF_LOG(GF_LOG_ERROR, GF_LOG_CONTAINER, ("[M2TS In] PCR "LLU" less than previous PCR "LLU"\n", ((GF_M2TS_PES_PCK *) param)->PTS, ts->pcr_last)); + ts->pcr_last = pcr; + ts->stb_at_last_pcr = gf_sys_clock(); + diff = 0; + } else { + u64 pcr_diff = (pcr - ts->pcr_last); + pcr_diff /= 27000; + if (pcr_diff>1000) { + GF_LOG(GF_LOG_ERROR, GF_LOG_CONTAINER, ("[M2TS In] PCR diff too big: "LLU" ms - PCR "LLU" - previous PCR "LLU" - error in TS ?\n", pcr_diff, ((GF_M2TS_PES_PCK *) param)->PTS, ts->pcr_last)); + diff = 100; + } else { + diff = (u32) pcr_diff - (stb - ts->stb_at_last_pcr); + } + } if (diff<0) { - GF_LOG(GF_LOG_WARNING, GF_LOG_CONTAINER, ("[M2TS In] Demux not going fast enough according to PCR (drift %d, pcr: "LLD", last pcr: "LLD")\n", diff, pcr, m2ts->pcr_last)); + GF_LOG(GF_LOG_WARNING, GF_LOG_CONTAINER, ("[M2TS In] Demux not going fast enough according to PCR (drift %d, pcr: "LLU", last pcr: "LLU")\n", diff, pcr, ts->pcr_last)); } else if (diff>0) { - u32 sleep_for=50; + u32 sleep_for=1; #ifndef GPAC_DISABLE_LOG u32 nb_sleep=0; #endif /*query buffer level, don't sleep if too low*/ GF_NetworkCommand com; com.command_type = GF_NET_BUFFER_QUERY; - while (m2ts->run_state) { + while (ts->run_state) { gf_term_on_command(m2ts->service, &com, GF_OK); - if (com.buffer.occupancy < M2TS_BUFFER_MAX) + if (com.buffer.occupancy < M2TS_BUFFER_MAX) { + GF_LOG(GF_LOG_DEBUG, GF_LOG_CONTAINER, ("[M2TS In] Demux not going to sleep: buffer occupancy %d ms\n", com.buffer.occupancy)); break; + } /*We don't sleep for the entire buffer occupancy, because we would take the risk of starving the audio chains. We try to keep buffers half full*/ #ifndef GPAC_DISABLE_LOG if (!nb_sleep) { - GF_LOG(GF_LOG_INFO, GF_LOG_CONTAINER, ("[M2TS In] Demux going to sleep (buffer occupancy %d ms)\n", com.buffer.occupancy)); + GF_LOG(GF_LOG_DEBUG, GF_LOG_CONTAINER, ("[M2TS In] Demux going to sleep (buffer occupancy %d ms)\n", com.buffer.occupancy)); } nb_sleep++; #endif @@ -751,154 +592,54 @@ static void M2TS_OnEvent(GF_M2TS_Demuxer *ts, u32 evt_type, void *param) } #ifndef GPAC_DISABLE_LOG if (nb_sleep) { - GF_LOG(GF_LOG_INFO, GF_LOG_CONTAINER, ("[M2TS In] Demux resume after %d ms - current buffer occupancy %d ms\n", sleep_for*nb_sleep, com.buffer.occupancy)); + GF_LOG(GF_LOG_DEBUG, GF_LOG_CONTAINER, ("[M2TS In] Demux resume after %d ms - current buffer occupancy %d ms\n", sleep_for*nb_sleep, com.buffer.occupancy)); } #endif - m2ts->nb_pck = 0; - m2ts->pcr_last = pcr; - m2ts->stb_at_last_pcr = gf_sys_clock(); + ts->nb_pck = 0; + ts->pcr_last = pcr; + ts->stb_at_last_pcr = gf_sys_clock(); } else { - GF_LOG(GF_LOG_INFO, GF_LOG_CONTAINER, ("[M2TS In] Demux drift according to PCR (drift %d, pcr: "LLD", last pcr: "LLD")\n", diff, pcr, m2ts->pcr_last)); + GF_LOG(GF_LOG_INFO, GF_LOG_CONTAINER, ("[M2TS In] Demux drift according to PCR (drift %d, pcr: "LLD", last pcr: "LLD")\n", diff, pcr, ts->pcr_last)); } } else { - m2ts->pcr_last = pcr; - m2ts->stb_at_last_pcr = gf_sys_clock(); + ts->pcr_last = pcr; + ts->stb_at_last_pcr = gf_sys_clock(); } } break; - } -} - - -u32 M2TS_Run(void *_p) -{ - GF_Err e; - char data[UDP_BUFFER_SIZE]; -#ifdef GPAC_HAS_LINUX_DVB - char dvbts[DVB_BUFFER_SIZE]; -#endif - u32 size, i; - M2TSIn *m2ts = _p; - - m2ts->run_state = 1; - m2ts->ts->on_event = M2TS_OnEvent; - gf_m2ts_reset_parsers(m2ts->ts); - - -#ifdef GPAC_HAS_LINUX_DVB - if (m2ts->tuner) { - // in case of DVB - while (m2ts->run_state) { - s32 ts_size = read(m2ts->tuner->ts_fd, dvbts, DVB_BUFFER_SIZE); - if (ts_size>0) gf_m2ts_process_data(m2ts->ts, dvbts, (u32) ts_size); - } - } else -#endif - if (m2ts->sock) { - Bool first_run, is_rtp; - first_run = 1; - is_rtp = 0; - while (m2ts->run_state) { - size = 0; - /*m2ts chunks by chunks*/ - e = gf_sk_receive(m2ts->sock, data, UDP_BUFFER_SIZE, 0, &size); - if (!size || e) { - gf_sleep(0); - continue; - } - if (first_run) { - first_run = 0; - /*FIXME: we assume only simple RTP packaging (no CSRC nor extensions)*/ - if ((data[0] != 0x47) && ((data[1] & 0x7F) == 33) ) { - is_rtp = 1; - } - } - /*process chunk*/ - if (is_rtp) { - gf_m2ts_process_data(m2ts->ts, data+12, size-12); - } else { - gf_m2ts_process_data(m2ts->ts, data, size); - } - } - } else if (m2ts->dnload) { - while (m2ts->run_state) { - gf_dm_sess_process(m2ts->dnload); - gf_sleep(1); - } - } else if (m2ts->file) { - u64 pos = 0; - if (m2ts->start_range && m2ts->duration) { - Double perc = m2ts->start_range / (1000 * m2ts->duration); - pos = (u64) (perc * m2ts->file_size); - /*align to TS packet size*/ - while (pos%188) pos++; - if (pos>=m2ts->file_size) { - m2ts->start_range = 0; - pos = 0; - } - } - gf_f64_seek(m2ts->file, pos, SEEK_SET); -restart_file: - while (m2ts->run_state && !feof(m2ts->file) ) { - /*m2ts chunks by chunks*/ - size = fread(data, 1, 188, m2ts->file); - if (!size) break; - if (size != 188){ - GF_LOG(GF_LOG_WARNING, GF_LOG_CONTAINER, ("[M2TS In] %u bytes read from file instead of 188.\n", size)); - } - /*process chunk*/ - gf_m2ts_process_data(m2ts->ts, data, size); - - m2ts->nb_pck++; - /*if asked to regulate, wait until we get a play request*/ - if (m2ts->run_state && !m2ts->nb_playing && m2ts->file_regulate) { - while (m2ts->run_state && !m2ts->nb_playing && m2ts->file_regulate) { - gf_sleep(50); + case GF_M2TS_EVT_TDT: + if (m2ts->hybrid_on) { + u32 i, count; + GF_M2TS_TDT_TOT *tdt = (GF_M2TS_TDT_TOT *)param; + GF_NetworkCommand com; + memset(&com, 0, sizeof(com)); + com.command_type = GF_NET_CHAN_MAP_TIME; + com.map_time.media_time = tdt->hour*3600+tdt->minute*60+tdt->second; + com.map_time.reset_buffers = 0; + count = gf_list_count(ts->programs); + for (i=0; iprograms, i); + u32 j, count2; + if (prog->tdt_found || !prog->last_pcr_value) /*map TDT one time, after we received a PCR*/ continue; + prog->tdt_found = 1; + count2 = gf_list_count(prog->streams); + com.map_time.timestamp = prog->last_pcr_value/300; + for (j=0; jstreams, j); + if (stream->user) { + com.base.on_channel = stream->user; + gf_term_on_command(m2ts->service, &com, GF_OK); + } } - } else if (m2ts->file) { - gf_sleep(0); - } - } - - if (feof(m2ts->file) && m2ts->owner && m2ts->owner->query_proxy) { - GF_NetworkCommand param; - GF_Err query_ret; - fclose(m2ts->file); - m2ts->file = NULL; - param.command_type = GF_NET_SERVICE_QUERY_NEXT; - param.url_query.next_url = NULL; - assert(m2ts->owner); - assert( m2ts->owner->query_proxy); - query_ret = m2ts->owner->query_proxy(m2ts->owner, ¶m); - if ((query_ret==GF_OK) && param.url_query.next_url){ - m2ts->file = gf_f64_open(param.url_query.next_url, "rb"); - if (m2ts->file) { - goto restart_file; - } else { - GF_LOG(GF_LOG_ERROR, GF_LOG_CONTAINER, ("[M2TS In] Cannot open next file %s\n", param.url_query.next_url)); - } - } else { - if (query_ret==GF_OK){ - GF_LOG(GF_LOG_ERROR, GF_LOG_CONTAINER, ("[M2TS In] Cannot query next file since no file was provided but no error was raised\n")); - } else - GF_LOG(GF_LOG_ERROR, GF_LOG_CONTAINER, ("[M2TS In] Cannot query next file: error: %s\n", gf_error_to_string(query_ret))); - } - } - - GF_LOG(GF_LOG_ERROR, GF_LOG_CONTAINER, ("\n[M2TS In]EOS reached, remaining segments=%u\n", m2ts->nb_playing)); - if (m2ts->nb_playing) { - for (i=0; its->ess[i]; - if (!pes || (pes->pid==pes->program->pmt_pid)) continue; - if (!pes->user || !pes->reframe) continue; - gf_term_on_sl_packet(m2ts->service, pes->user, NULL, 0, NULL, GF_EOS); - gf_m2ts_set_pes_framing(pes, GF_M2TS_PES_FRAMING_SKIP); + GF_LOG(GF_LOG_INFO, GF_LOG_CONTAINER, ("[M2TS In] Mapping TDT Time %04d/%02d/%02d %02d:%02d:%02d and PCR time "LLD" on program %d\n", + tdt->year, tdt->month, tdt->day, tdt->hour, tdt->minute, tdt->second, com.map_time.timestamp, prog->number)); } } + break; + case GF_M2TS_EVT_TOT: + break; } - m2ts->run_state = 2; - return 0; } static void M2TS_OnEventPCR(GF_M2TS_Demuxer *ts, u32 evt_type, void *param) @@ -906,60 +647,22 @@ static void M2TS_OnEventPCR(GF_M2TS_Demuxer *ts, u32 evt_type, void *param) if (evt_type==GF_M2TS_EVT_PES_PCR) { M2TSIn *m2ts = ts->user; GF_M2TS_PES_PCK *pck = param; - if (!m2ts->nb_playing) { - m2ts->nb_playing = pck->stream->pid; - m2ts->end_range = (u32) (pck->PTS / 90); - } else if (m2ts->nb_playing == pck->stream->pid) { - m2ts->start_range = (u32) (pck->PTS / 90); + if (!ts->nb_playing) { + ts->nb_playing = pck->stream->pid; + ts->end_range = (u32) (pck->PTS / 90); + } else if (ts->nb_playing == pck->stream->pid) { + ts->start_range = (u32) (pck->PTS / 90); } } } -#ifdef GPAC_HAS_LINUX_DVB -void M2TS_SetupDVB(GF_InputService *plug, M2TSIn *m2ts, char *url) -{ - GF_Err e = GF_OK; - char *str; - const char *chan_conf; - - if (strnicmp(url, "dvb://", 6)) { - e = GF_NOT_SUPPORTED; - goto exit; - } - - chan_conf = gf_modules_get_option((GF_BaseInterface *)plug, "DVB", "ChannelsFile"); - if (!chan_conf) { - GF_LOG(GF_LOG_ERROR, GF_LOG_CONTAINER, ("[DVBIn] Cannot locate channel configuration file\n")); - e = GF_SERVICE_ERROR; - goto exit; - } - - if (!m2ts->tuner) GF_SAFEALLOC(m2ts->tuner, GF_Tuner); - - if (m2ts->tuner->freq != 0 && m2ts->tuner->freq == gf_dvb_get_freq_from_url(chan_conf, url)) { - GF_LOG(GF_LOG_DEBUG, GF_LOG_CONTAINER, ("[DVBIn] Tuner already tuned to that frequency\n")); - goto exit; - } - - e = gf_dvb_tune(m2ts->tuner, url, chan_conf); - if (e) goto exit; - - m2ts->th = gf_th_new("MPEG-2 TS Demux"); - /*start playing for tune-in*/ - gf_th_run(m2ts->th, M2TS_Run, m2ts); - -exit: - if (e) gf_term_on_connect(m2ts->service, NULL, e); -} -#endif - void m2ts_net_io(void *cbk, GF_NETIO_Parameter *param) { GF_Err e; M2TSIn *m2ts = (M2TSIn *) cbk; assert( m2ts ); /*handle service message*/ - gf_term_download_update_stats(m2ts->dnload); + gf_term_download_update_stats(m2ts->ts->dnload); if (param->msg_type==GF_NETIO_DATA_TRANSFERED) { e = GF_EOS; @@ -979,18 +682,18 @@ void m2ts_net_io(void *cbk, GF_NETIO_Parameter *param) } /*if asked to regulate, wait until we get a play request*/ - if (m2ts->run_state && !m2ts->nb_playing && m2ts->file_regulate) { - while (m2ts->run_state && !m2ts->nb_playing && m2ts->file_regulate) { + if (m2ts->ts->run_state && !m2ts->ts->nb_playing && m2ts->ts->file_regulate) { + while (m2ts->ts->run_state && !m2ts->ts->nb_playing && m2ts->ts->file_regulate) { gf_sleep(50); continue; } } else { gf_sleep(1); } - if (!m2ts->run_state){ - if (m2ts->dnload) - gf_term_download_del( m2ts->dnload ); - m2ts->dnload = NULL; + if (!m2ts->ts->run_state) { + if (m2ts->ts->dnload) + gf_term_download_del( m2ts->ts->dnload ); + m2ts->ts->dnload = NULL; } } else { @@ -999,224 +702,93 @@ void m2ts_net_io(void *cbk, GF_NETIO_Parameter *param) switch (e){ case GF_EOS: - gf_term_on_connect(m2ts->service, NULL, GF_OK); - return; + if (!m2ts->is_connected) { + gf_term_on_connect(m2ts->service, NULL, GF_OK); + } + return; case GF_OK: - return; + return; default: - if (!m2ts->ts_setup) { - m2ts->ts_setup = 1; - } - GF_LOG( GF_LOG_ERROR, GF_LOG_CONTAINER, - ("[MPEGTSIn] : Error while getting data : %s\n", gf_error_to_string(e))); - gf_term_on_connect(m2ts->service, NULL, e); + if (!m2ts->ts_setup) { + m2ts->ts_setup = 1; + } + GF_LOG( GF_LOG_ERROR, GF_LOG_CONTAINER,("[MPEGTSIn] : Error while getting data : %s\n", gf_error_to_string(e))); + gf_term_on_connect(m2ts->service, NULL, e); } } -void M2TS_SetupLive(GF_InputService *plug, M2TSIn *m2ts, char *url) +static const char *M2TS_QueryNextFile(void *udta) { - GF_Err e = GF_OK; - char *str; - u16 port; - u32 sock_type = 0; - - if (!strnicmp(url, "udp://", 6) || !strnicmp(url, "mpegts-udp://", 13)) { - sock_type = GF_SOCK_TYPE_UDP; - } else if (!strnicmp(url, "mpegts-tcp://", 13) ) { - sock_type = GF_SOCK_TYPE_TCP; + GF_NetworkCommand param; + GF_Err query_ret; + M2TSIn *m2ts = (M2TSIn *) udta; + assert(m2ts->owner); + assert( m2ts->owner->query_proxy); + + param.command_type = GF_NET_SERVICE_QUERY_NEXT; + param.url_query.next_url = NULL; + query_ret = m2ts->owner->query_proxy(m2ts->owner, ¶m); + if ((query_ret==GF_OK) && param.url_query.next_url){ + GF_LOG(GF_LOG_INFO, GF_LOG_CONTAINER, ("[M2TS In] Switching to next segment %s\n", param.url_query.next_url)); + return param.url_query.next_url; + } else if (query_ret==GF_OK){ + GF_LOG(GF_LOG_ERROR, GF_LOG_CONTAINER, ("[M2TS In] Cannot query next file: no file provided but no error raised\n")); } else { - e = GF_NOT_SUPPORTED; - goto exit; - } - - url = strchr(url, ':'); - url += 3; - - m2ts->sock = gf_sk_new(sock_type); - if (!m2ts->sock) { e = GF_IO_ERR; goto exit; } - - /*setup port and src*/ - port = 1234; - str = strrchr(url, ':'); - /*take care of IPv6 address*/ - if (str && strchr(str, ']')) str = strchr(url, ':'); - if (str) { - port = atoi(str+1); - str[0] = 0; - } - - /*do we have a source ?*/ - if (strlen(url) && strcmp(url, "localhost") ) { - const char *mob_ip = NULL; - const char *mob_on = gf_modules_get_option((GF_BaseInterface*)plug, "Network", "MobileIPEnabled"); - if (mob_on && !strcmp(mob_on, "yes")) - mob_ip = gf_modules_get_option((GF_BaseInterface*)plug, "Network", "MobileIP"); - - if (gf_sk_is_multicast_address(url)) { - const char *mcast_ifce = gf_modules_get_option((GF_BaseInterface *) plug, "Network", "DefaultMCastInterface"); - if (mcast_ifce) mob_ip = mcast_ifce; - - gf_sk_setup_multicast(m2ts->sock, url, port, 0, 0, (char*)mob_ip); - } else { - gf_sk_bind(m2ts->sock, (char*)mob_ip, port, url, 0, GF_SOCK_REUSE_PORT); - } - } else { - gf_sk_bind(m2ts->sock, NULL, port, NULL, 0, GF_SOCK_REUSE_PORT); - } - if (str) str[0] = ':'; - - gf_sk_set_buffer_size(m2ts->sock, 0, UDP_BUFFER_SIZE); - gf_sk_set_block_mode(m2ts->sock, 0); - - m2ts->th = gf_th_new("MPEG-2 TS Demux"); - /*start playing for tune-in*/ - gf_th_run(m2ts->th, M2TS_Run, m2ts); - -exit: - if (e) { - gf_term_on_connect(m2ts->service, NULL, e); - } + GF_LOG(GF_LOG_ERROR, GF_LOG_CONTAINER, ("[M2TS In] Cannot query next file: error: %s\n", gf_error_to_string(query_ret))); + } + return NULL; } -void M2TS_SetupFile(M2TSIn *m2ts, char *url) -{ -#if 0 - char data[188]; - u64 size, fsize; - s32 nb_rwd; -#endif - if (m2ts->file && !strcmp(m2ts->filename, url)) { - GF_LOG(GF_LOG_DEBUG, GF_LOG_CONTAINER, ("[MPEGTSIn] TS already being processed\n")); - return; - } - - m2ts->file = gf_f64_open(url, "rb"); - if (!m2ts->file) { - gf_term_on_connect(m2ts->service, NULL, GF_URL_ERROR); - return; - } - strcpy(m2ts->filename, url); - - gf_f64_seek(m2ts->file, 0, SEEK_END); - m2ts->file_size = gf_f64_tell(m2ts->file); - -#if 0 - /* - estimate duration by reading the end of the file - m2ts->end_range is initialized to the PTS of the last TS packet - m2ts->nb_playing is initialized to the PID of the last TS packet - */ - m2ts->nb_playing = 0; - m2ts->ts->on_event = M2TS_OnEventPCR; - m2ts->end_range = 0; - nb_rwd = 1; - fsize = m2ts->file_size; - while (fsize % 188) fsize--; - while (1) { - gf_f64_seek(m2ts->file, fsize - 188 * nb_rwd, SEEK_SET); - /*m2ts chunks by chunks*/ - size = fread(data, 1, 188, m2ts->file); - if (!size) break; - /*process chunk*/ - gf_m2ts_process_data(m2ts->ts, data, size); - if (m2ts->nb_playing) break; - nb_rwd ++; - } - - /* - reset of the file - initialization of m2ts->start_range to the PTS of the first TS packet with PID = m2ts->nb_playing - */ - gf_f64_seek(m2ts->file, 0, SEEK_SET); - gf_m2ts_reset_parsers(m2ts->ts); - m2ts->start_range = 0; - while (1) { - /*m2ts chunks by chunks*/ - size = fread(data, 1, 188, m2ts->file); - if (!size) break; - /*process chunk*/ - gf_m2ts_process_data(m2ts->ts, data, size); - if (m2ts->start_range) break; - } - m2ts->duration = (m2ts->end_range - m2ts->start_range) / 300000.0; - gf_m2ts_demux_del(m2ts->ts); - - /* Creation of the real demuxer for playback */ - m2ts->ts = gf_m2ts_demux_new(); - m2ts->ts->user = m2ts; -#endif - - /* reinitialization for seek */ - m2ts->end_range = m2ts->start_range = 0; - m2ts->nb_playing = 0; - - m2ts->th = gf_th_new("MPEG-2 TS Demux"); - /*start playing for tune-in*/ - gf_th_run(m2ts->th, M2TS_Run, m2ts); -} static GF_Err M2TS_ConnectService(GF_InputService *plug, GF_ClientService *serv, const char *url) { - char szURL[2048]; - char *frag; + GF_Err e; + const char *opt; M2TSIn *m2ts = plug->priv; - m2ts->owner = plug; - m2ts->service = serv; - strcpy(szURL, url); - frag = strrchr(szURL, '#'); - if (frag) frag[0] = 0; + M2TS_GetNetworkType(plug,m2ts); - m2ts->file_regulate = 0; - m2ts->duration = 0; + m2ts->owner = plug; - if (!strnicmp(url, "udp://", 6) - || !strnicmp(url, "mpegts-udp://", 13) - || !strnicmp(url, "mpegts-tcp://", 13) - ) { - M2TS_SetupLive(plug, m2ts, (char *) szURL); + opt = gf_modules_get_option((GF_BaseInterface *)m2ts->owner, "HybRadio", "Activated"); + if (opt && !strcmp(opt, "true")) { + m2ts->hybrid_on = 1; } -#ifdef GPAC_HAS_LINUX_DVB - else if (!strnicmp(url, "dvb://", 6)) { - // DVB Setup - M2TS_SetupDVB(plug, m2ts, (char *) szURL); + + m2ts->service = serv; + if (m2ts->owner->query_proxy) { + m2ts->ts->query_next = M2TS_QueryNextFile; + m2ts->ts->udta_query = m2ts; } -#endif - else if (!strnicmp(url, "http://", 7)) { - - m2ts->dnload = gf_term_download_new(m2ts->service, url, GF_NETIO_SESSION_NOT_THREADED | GF_NETIO_SESSION_NOT_CACHED, m2ts_net_io, m2ts); - if (!m2ts->dnload) gf_term_on_connect(m2ts->service, NULL, GF_NOT_SUPPORTED); - else { - m2ts->th = gf_th_new("MPEG-2 TS Demux"); - /*start playing for tune-in*/ - gf_th_run(m2ts->th, M2TS_Run, m2ts); + + if (!strnicmp(url, "http://", 7)) { + m2ts->ts->dnload = gf_term_download_new(m2ts->service, url, GF_NETIO_SESSION_NOT_THREADED | GF_NETIO_SESSION_NOT_CACHED, m2ts_net_io, m2ts); + if (!m2ts->ts->dnload){ + gf_term_on_connect(m2ts->service, NULL, GF_NOT_SUPPORTED); + return GF_OK; + } else { + e = TSDemux_DemuxPlay(m2ts->ts); } + } else { + e = TSDemux_Demux_Setup(m2ts->ts,url,0); } - else { - M2TS_SetupFile(m2ts, (char *) szURL); + + if (e) { + gf_term_on_connect(m2ts->service, NULL, e); } - return GF_OK; + return e; } static GF_Err M2TS_CloseService(GF_InputService *plug) { M2TSIn *m2ts = plug->priv; + GF_M2TS_Demuxer* ts = m2ts->ts; - GF_LOG(GF_LOG_ERROR, GF_LOG_CONTAINER, ("destroying TSin\n")); - if (m2ts->th) { - if (m2ts->run_state == 1) { - m2ts->run_state = 0; - while (m2ts->run_state!=2) gf_sleep(0); - } - gf_th_del(m2ts->th); - m2ts->th = NULL; - } - - if (m2ts->file) fclose(m2ts->file); - m2ts->file = NULL; - - if (m2ts->dnload) gf_term_download_del(m2ts->dnload); - m2ts->dnload = NULL; + TSDemux_CloseDemux(ts); + + + if (ts->dnload) gf_term_download_del(ts->dnload); + ts->dnload = NULL; gf_term_on_disconnect(m2ts->service, NULL, GF_OK); return GF_OK; @@ -1227,6 +799,15 @@ static GF_Descriptor *M2TS_GetServiceDesc(GF_InputService *plug, u32 expect_type M2TSIn *m2ts = plug->priv; GF_Descriptor *desc = NULL; char *frag; + M2TSIn_Prog *prog; + + if (sub_url && !strnicmp(sub_url, "pid://", 6)) { + GF_ObjectDescriptor *od; + u32 pid = atoi(sub_url+6); + if (pid>=GF_M2TS_MAX_STREAMS) return NULL; + od = MP2TS_GetOD(m2ts, (GF_M2TS_PES*) m2ts->ts->ess[pid], NULL, 0, NULL); + return (GF_Descriptor *) od; + } frag = sub_url ? strrchr(sub_url, '#') : NULL; if (frag) frag++; @@ -1239,39 +820,39 @@ static GF_Descriptor *M2TS_GetServiceDesc(GF_InputService *plug, u32 expect_type if (!frag) { m2ts->request_all_pids = 1; } else { - M2TSIn_Prog *prog; - /*we need exclusive access*/ gf_mx_p(m2ts->mx); if (!strnicmp(frag, "pid=", 4)) { GF_SAFEALLOC(prog, M2TSIn_Prog); prog->pid = atoi(frag+4); - gf_list_add(m2ts->requested_pids, prog); + gf_list_add(m2ts->ts->requested_pids, prog); } else if (!strnicmp(frag, "EPG", 3)) { m2ts->epg_requested = 1; } else { u32 i, count; - count = gf_list_count(m2ts->requested_progs); + count = gf_list_count(m2ts->ts->requested_progs); prog = NULL; for (i=0; irequested_progs, i); + prog = gf_list_get(m2ts->ts->requested_progs, i); if (!strcmp(prog->fragment, frag)) break; prog = NULL; } if (!prog) { GF_SAFEALLOC(prog, M2TSIn_Prog); - gf_list_add(m2ts->requested_progs, prog); + gf_list_add(m2ts->ts->requested_progs, prog); prog->fragment = gf_strdup(frag); } } gf_mx_v(m2ts->mx); } - if (expect_type==GF_MEDIA_OBJECT_SCENE) { + /*if type is undefined, check the PMT for an IOD*/ + if (expect_type<=GF_MEDIA_OBJECT_SCENE) { if (gf_list_count(m2ts->ts->programs) == 1) { GF_M2TS_Program *prog = gf_list_get(m2ts->ts->programs, 0); if (prog->pmt_iod) { + m2ts->request_all_pids = 0; gf_odf_desc_copy((GF_Descriptor *)prog->pmt_iod, &desc); return desc; } @@ -1289,9 +870,9 @@ static GF_Descriptor *M2TS_GetServiceDesc(GF_InputService *plug, u32 expect_type } /* restart the thread if the same service is reused and if the previous thread terminated */ - if (m2ts->run_state == 2) { - m2ts->file_regulate = 0; - gf_th_run(m2ts->th, M2TS_Run, m2ts); + if (m2ts->ts->run_state == 2) { + m2ts->ts->file_regulate = 0; + TSDemux_DemuxPlay(m2ts->ts); } return NULL; @@ -1316,7 +897,10 @@ static GF_Err M2TS_ConnectChannel(GF_InputService *plug, LPNETCHANNEL channel, c for (i=0; its->ess[i]; if (!pes || (pes->pid==pes->program->pmt_pid)) continue; - if (pes->mpeg4_es_id == ES_ID) { + if ((pes->mpeg4_es_id == ES_ID) + /*for pid:// url*/ + || (!pes->mpeg4_es_id && (pes->pid == ES_ID)) + ) { if (pes->user) { e = GF_SERVICE_ERROR; gf_term_on_connect(m2ts->service, channel, e); @@ -1379,6 +963,7 @@ static GF_Err M2TS_ServiceCommand(GF_InputService *plug, GF_NetworkCommand *com) { GF_M2TS_PES *pes; M2TSIn *m2ts = plug->priv; + GF_M2TS_Demuxer *ts = m2ts->ts; if (com->command_type==GF_NET_SERVICE_HAS_AUDIO) { char *frag = strchr(com->audio.base_url, '#'); @@ -1398,7 +983,7 @@ static GF_Err M2TS_ServiceCommand(GF_InputService *plug, GF_NetworkCommand *com) com->buffer.min = 0; return GF_OK; case GF_NET_CHAN_DURATION: - com->duration.duration = m2ts->duration; + com->duration.duration = ts->duration; return GF_OK; case GF_NET_CHAN_PLAY: pes = M2TS_GetChannel(m2ts, com->base.on_channel); @@ -1413,15 +998,15 @@ static GF_Err M2TS_ServiceCommand(GF_InputService *plug, GF_NetworkCommand *com) gf_m2ts_set_pes_framing(pes, GF_M2TS_PES_FRAMING_DEFAULT); GF_LOG(GF_LOG_DEBUG, GF_LOG_CONTAINER, ("[M2TSIn] Setting default reframing for PID %d\n", pes->pid)); /*this is a multplex, only trigger the play command for the first stream activated*/ - if (!m2ts->nb_playing) { - m2ts->start_range = (u32) (com->play.start_range*1000); - m2ts->end_range = (com->play.end_range>0) ? (u32) (com->play.end_range*1000) : 0; + if (!ts->nb_playing) { + ts->start_range = (u32) (com->play.start_range*1000); + ts->end_range = (com->play.end_range>0) ? (u32) (com->play.end_range*1000) : 0; /*start demuxer*/ - if (m2ts->run_state!=1) { - gf_th_run(m2ts->th, M2TS_Run, m2ts); + if (ts->run_state!=1) { + return TSDemux_DemuxPlay(ts); } } - m2ts->nb_playing++; + ts->nb_playing++; return GF_OK; case GF_NET_CHAN_STOP: pes = M2TS_GetChannel(m2ts, com->base.on_channel); @@ -1434,15 +1019,15 @@ static GF_Err M2TS_ServiceCommand(GF_InputService *plug, GF_NetworkCommand *com) gf_m2ts_set_pes_framing(pes, GF_M2TS_PES_FRAMING_SKIP); /* In case of EOS, we may receive a stop command after no one is playing */ - if (m2ts->nb_playing) - m2ts->nb_playing--; + if (ts->nb_playing) + ts->nb_playing--; /*stop demuxer*/ - if (!m2ts->nb_playing && (m2ts->run_state==1)) { - m2ts->run_state=0; - while (m2ts->run_state!=2) gf_sleep(2); - if (gf_list_count(m2ts->requested_progs)) { - m2ts->file_regulate = 0; - gf_th_run(m2ts->th, M2TS_Run, m2ts); + if (!ts->nb_playing && (ts->run_state==1)) { + ts->run_state=0; + while (ts->run_state!=2) gf_sleep(2); + if (gf_list_count(m2ts->ts->requested_progs)) { + ts->file_regulate = 0; + return TSDemux_DemuxPlay(ts); } } return GF_OK; @@ -1471,6 +1056,20 @@ static u32 M2TS_RegisterMimeTypes(const GF_InputService * service){ return i; } +static void M2TS_GetNetworkType(GF_InputService *plug,M2TSIn *reader) +{ + const char *mob_on; + const char *mcast_ifce; + + mob_on = gf_modules_get_option((GF_BaseInterface*)plug, "Network", "MobileIPEnabled"); + if(mob_on && !strcmp(mob_on, "yes")){ + reader->ts->MobileIPEnabled = 1; + reader->ts->network_type = gf_modules_get_option((GF_BaseInterface*)plug, "Network", "MobileIP"); + } + + mcast_ifce = gf_modules_get_option((GF_BaseInterface*)plug, "Network", "DefaultMCastInterface"); + if(mcast_ifce) reader->ts->network_type = gf_strdup(mcast_ifce); +} GF_InputService *NewM2TSReader() { @@ -1492,12 +1091,14 @@ GF_InputService *NewM2TSReader() reader = gf_malloc(sizeof(M2TSIn)); memset(reader, 0, sizeof(M2TSIn)); plug->priv = reader; - reader->requested_progs = gf_list_new(); - reader->requested_pids = gf_list_new(); reader->ts = gf_m2ts_demux_new(); reader->ts->on_event = M2TS_OnEvent; reader->ts->user = reader; + reader->ts->demux_and_play = 1; + reader->ts->th = gf_th_new("MPEG-2 TS Demux"); + reader->mx = gf_mx_new("MPEG2 Demux"); + return plug; } @@ -1511,25 +1112,25 @@ void DeleteM2TSReader(void *ifce) m2ts = plug->priv; if (!m2ts) return; - if( m2ts->requested_progs ){ - count = gf_list_count(m2ts->requested_progs); + if( m2ts->ts->requested_progs ){ + count = gf_list_count(m2ts->ts->requested_progs); for (i = 0; i < count; i++) { - M2TSIn_Prog *prog = gf_list_get(m2ts->requested_progs, i); + M2TSIn_Prog *prog = gf_list_get(m2ts->ts->requested_progs, i); gf_free(prog->fragment); gf_free(prog); } - gf_list_del(m2ts->requested_progs); + gf_list_del(m2ts->ts->requested_progs); } - m2ts->requested_progs = NULL; - if( m2ts->requested_pids ){ - count = gf_list_count(m2ts->requested_pids); + m2ts->ts->requested_progs = NULL; + if( m2ts->ts->requested_pids ){ + count = gf_list_count(m2ts->ts->requested_pids); for (i = 0; i < count; i++) { - M2TSIn_Prog *prog = gf_list_get(m2ts->requested_pids, i); + M2TSIn_Prog *prog = gf_list_get(m2ts->ts->requested_pids, i); gf_free(prog); } - gf_list_del(m2ts->requested_pids); + gf_list_del(m2ts->ts->requested_pids); } - m2ts->requested_pids = NULL; + m2ts->ts->requested_pids = NULL; if (m2ts->network_buffer) gf_free(m2ts->network_buffer); m2ts->network_buffer = NULL; diff --git a/modules/odf_dec/Makefile b/modules/odf_dec/Makefile index 3299357..4192681 100644 --- a/modules/odf_dec/Makefile +++ b/modules/odf_dec/Makefile @@ -31,7 +31,7 @@ all: $(LIB) $(LIB): $(OBJS) $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/$@ $(OBJS) $(EXTRALIBS) -L../../bin/gcc -lgpac ifeq ($(STATICBUILD),yes) - $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/gm_odf_dec-static.so $(OBJS) $(EXTRALIBS) -L../../bin/gcc -lgpac_static + $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/gm_odf_dec-static.$(DYN_LIB_SUFFIX) $(OBJS) $(EXTRALIBS) -L../../bin/gcc -lgpac_static endif diff --git a/modules/odf_dec/odf_dec.c b/modules/odf_dec/odf_dec.c index ac05da3..c2bd4c4 100644 --- a/modules/odf_dec/odf_dec.c +++ b/modules/odf_dec/odf_dec.c @@ -236,14 +236,14 @@ err_exit: } -Bool ODF_CanHandleStream(GF_BaseDecoder *ifce, u32 StreamType, GF_ESD *esd, u8 PL) +static u32 ODF_CanHandleStream(GF_BaseDecoder *ifce, u32 StreamType, GF_ESD *esd, u8 PL) { ODPriv *priv = (ODPriv *)ifce->privateStack; if (StreamType==GF_STREAM_OD) { priv->PL = PL; - return 1; + return GF_CODEC_SUPPORTED; } - return 0; + return GF_CODEC_NOT_SUPPORTED; } diff --git a/modules/ogg/ogg_load.c b/modules/ogg/ogg_load.c index 5324336..fa7783a 100644 --- a/modules/ogg/ogg_load.c +++ b/modules/ogg/ogg_load.c @@ -25,47 +25,47 @@ #include "ogg_in.h" -static Bool OGG_CanHandleStream(GF_BaseDecoder *dec, u32 StreamType, GF_ESD *esd, u8 PL) +static u32 OGG_CanHandleStream(GF_BaseDecoder *dec, u32 StreamType, GF_ESD *esd, u8 PL) { /*video decs*/ if (StreamType == GF_STREAM_VISUAL) { char *dsi; /*media type query*/ - if (!esd) return 1; + if (!esd) return GF_CODEC_STREAM_TYPE_SUPPORTED; dsi = esd->decoderConfig->decoderSpecificInfo ? esd->decoderConfig->decoderSpecificInfo->data : NULL; switch (esd->decoderConfig->objectTypeIndication) { #ifdef GPAC_HAS_THEORA case GPAC_OTI_MEDIA_OGG: if (dsi && (esd->decoderConfig->decoderSpecificInfo->dataLength>=9) && !strncmp((char *) &dsi[3], "theora", 6)) { - return NewTheoraDecoder(dec); + if (NewTheoraDecoder(dec)) return GF_CODEC_SUPPORTED; } - return 0; + return GF_CODEC_NOT_SUPPORTED; #endif default: - return 0; + return GF_CODEC_NOT_SUPPORTED; } } /*audio decs*/ if (StreamType == GF_STREAM_AUDIO) { char *dsi; /*media type query*/ - if (!esd) return 1; + if (!esd) return GF_CODEC_STREAM_TYPE_SUPPORTED; dsi = esd->decoderConfig->decoderSpecificInfo ? esd->decoderConfig->decoderSpecificInfo->data : NULL; switch (esd->decoderConfig->objectTypeIndication) { #ifdef GPAC_HAS_VORBIS case GPAC_OTI_MEDIA_OGG: if (dsi && (esd->decoderConfig->decoderSpecificInfo->dataLength>=9) && !strncmp((char *) &dsi[3], "vorbis", 6)) { - return NewVorbisDecoder(dec); + if (NewVorbisDecoder(dec)) return GF_CODEC_SUPPORTED; } - return 0; + return GF_CODEC_NOT_SUPPORTED; #endif default: - return 0; + return GF_CODEC_NOT_SUPPORTED; } } - return 0; + return GF_CODEC_NOT_SUPPORTED; } diff --git a/modules/opensvc_dec/Makefile b/modules/opensvc_dec/Makefile index a4f65e4..dec8bf2 100644 --- a/modules/opensvc_dec/Makefile +++ b/modules/opensvc_dec/Makefile @@ -30,7 +30,7 @@ all: $(LIB) $(LIB): $(OBJS) $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/$@ $(OBJS) $(EXTRALIBS) -L../../bin/gcc -lgpac ifeq ($(STATICBUILD),yes) - $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/gm_opensvc_dec-static.so $(OBJS) $(EXTRALIBS) -L../../bin/gcc -lgpac_static + $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/gm_opensvc_dec-static.$(DYN_LIB_SUFFIX) $(OBJS) $(EXTRALIBS) -L../../bin/gcc -lgpac_static endif diff --git a/modules/opensvc_dec/opensvc_dec.c b/modules/opensvc_dec/opensvc_dec.c index ed49fc0..20639f7 100644 --- a/modules/opensvc_dec/opensvc_dec.c +++ b/modules/opensvc_dec/opensvc_dec.c @@ -1,399 +1,399 @@ -/* - * GPAC - Multimedia Framework C SDK - * - * Copyright (c) Telecom ParisTech 2010- - * Author(s): Jean Le Feuvre - * All rights reserved - * - * This file is part of GPAC / OpenSVC Decoder module - * - * GPAC is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * GPAC 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - - -#include -#include -#include - - -#if (defined(WIN32) || defined(_WIN32_WCE)) && !defined(__GNUC__) -# pragma comment(lib, "OpenSVCDecoder") -#endif - -typedef struct{ - int Width; - int Height; - unsigned char* pY[1]; - unsigned char* pU[1]; - unsigned char* pV[1]; -} OPENSVCFRAME; - - -enum { - SVC_STATUS_ERROR = -1, - SVC_STATUS_OK = 0, // no error and no frame ready - SVC_IMAGE_READY = 1, // no error and image ready - SVC_GHOST_IMAGE = 2 // no image for chosen layer but image could be ready for other layers -}; - -int SVCDecoder_init(void **PlayerStruct); -int SVCDecoder_close(void *PlayerStruct); -//TODO -int decodeNAL(void *PlayerStruct, unsigned char* nal, int nal_length, OPENSVCFRAME *Frame, int *LayerCommand); -/*ID vient du NAL type 14 et 20*/ -//TODO -void SetCommandLayer(int *Command, int DqIdMax, int CurrDqId, int *TemporalCom, int TemporalId); -void ParseAuPlayers(void *PlayerStruct, const unsigned char *buf, int buf_size, int nal_length_size, int is_avc); -int GetDqIdMax(const unsigned char *buf, int buf_size, int nal_length_size, int *DqidTable, int is_avc); - - -typedef struct -{ - u16 ES_ID; - u32 width, stride, height, out_size, pixel_ar, layer; - Bool first_frame; - - u32 nalu_size_length; - - /*OpenSVC things*/ - void *codec; - int InitParseAU; - int svc_init_done; - int save_Width; - int save_Height; - int CurrDqId; - int MaxDqId; - int DqIdTable [8]; - int TemporalId; - int TemporalCom; -} OSVCDec; - -static GF_Err OSVC_AttachStream(GF_BaseDecoder *ifcg, GF_ESD *esd) -{ - u32 i, count; - s32 res; - OPENSVCFRAME Picture; - int Layer[4]; - OSVCDec *ctx = (OSVCDec*) ifcg->privateStack; - - /*not supported in this version*/ - if (esd->dependsOnESID) return GF_NOT_SUPPORTED; - - ctx->ES_ID = esd->ESID; - ctx->width = ctx->height = ctx->out_size = 0; - - if (esd->decoderConfig->decoderSpecificInfo && esd->decoderConfig->decoderSpecificInfo->data) { - GF_AVCConfig *cfg = gf_odf_avc_cfg_read(esd->decoderConfig->decoderSpecificInfo->data, esd->decoderConfig->decoderSpecificInfo->dataLength); - if (!cfg) return GF_NON_COMPLIANT_BITSTREAM; - ctx->nalu_size_length = cfg->nal_unit_size; - if (SVCDecoder_init(&ctx->codec) == SVC_STATUS_ERROR) return GF_IO_ERR; - - /*decode all NALUs*/ - count = gf_list_count(cfg->sequenceParameterSets); - SetCommandLayer(Layer, 255, 0, &i, 0);//bufindex can be reset without pb - for (i=0; isequenceParameterSets, i); - - gf_avc_get_sps_info(slc->data, slc->size, &slc->id, &w, &h, &par_n, &par_d); - /*by default use the base layer*/ - if (!i) { - if ((ctx->widthheightwidth = w; - ctx->height = h; - if ( ((s32)par_n>0) && ((s32)par_d>0) ) - ctx->pixel_ar = (par_n<<16) || par_d; - } - } - res = decodeNAL(ctx->codec, slc->data, slc->size, &Picture, Layer); - if (res<0) { - GF_LOG(GF_LOG_ERROR, GF_LOG_CODEC, ("[SVC Decoder] Error decoding SPS %d\n", res)); - } - } - - count = gf_list_count(cfg->pictureParameterSets); - for (i=0; ipictureParameterSets, i); - res = decodeNAL(ctx->codec, slc->data, slc->size, &Picture, Layer); - if (res<0) { - GF_LOG(GF_LOG_ERROR, GF_LOG_CODEC, ("[SVC Decoder] Error decoding PPS %d\n", res)); - } - } - - gf_odf_avc_cfg_del(cfg); - } else { - ctx->nalu_size_length = 0; - if (SVCDecoder_init(&ctx->codec) == SVC_STATUS_ERROR) return GF_IO_ERR; - } - ctx->stride = ctx->width + 32; - ctx->layer = 0; - ctx->CurrDqId = ctx->layer; - ctx->out_size = ctx->stride * ctx->height * 3 / 2; - return GF_OK; -} -static GF_Err OSVC_DetachStream(GF_BaseDecoder *ifcg, u16 ES_ID) -{ - OSVCDec *ctx = (OSVCDec*) ifcg->privateStack; - - if (ctx->codec) SVCDecoder_close(ctx->codec); - ctx->codec = NULL; - ctx->width = ctx->height = ctx->out_size = 0; - return GF_OK; -} -static GF_Err OSVC_GetCapabilities(GF_BaseDecoder *ifcg, GF_CodecCapability *capability) -{ - OSVCDec *ctx = (OSVCDec*) ifcg->privateStack; - - switch (capability->CapCode) { - case GF_CODEC_RESILIENT: - capability->cap.valueInt = 1; - break; - case GF_CODEC_WIDTH: - capability->cap.valueInt = ctx->width; - break; - case GF_CODEC_HEIGHT: - capability->cap.valueInt = ctx->height; - break; - case GF_CODEC_STRIDE: - capability->cap.valueInt = ctx->stride; - break; - case GF_CODEC_PAR: - capability->cap.valueInt = ctx->pixel_ar; - break; - case GF_CODEC_OUTPUT_SIZE: - capability->cap.valueInt = ctx->out_size; - break; - case GF_CODEC_PIXEL_FORMAT: - capability->cap.valueInt = GF_PIXEL_YV12; - break; - case GF_CODEC_BUFFER_MIN: - capability->cap.valueInt = 1; - break; - case GF_CODEC_BUFFER_MAX: - capability->cap.valueInt = 4; - break; - case GF_CODEC_PADDING_BYTES: - capability->cap.valueInt = 32; - break; - case GF_CODEC_REORDER: - capability->cap.valueInt = 1; - break; - /*not known at our level...*/ - case GF_CODEC_CU_DURATION: - default: - capability->cap.valueInt = 0; - break; - } - return GF_OK; -} -static GF_Err OSVC_SetCapabilities(GF_BaseDecoder *ifcg, GF_CodecCapability capability) -{ - OSVCDec *ctx = (OSVCDec*) ifcg->privateStack; - switch (capability.CapCode) { - case GF_CODEC_MEDIA_SWITCH_QUALITY: - if (capability.cap.valueInt) { - if (ctx->layer<32) { - ctx->layer += 8; - ctx->CurrDqId = ctx->layer; - } - } else { - if (ctx->layer>=8) { - ctx->layer -= 8; - ctx->CurrDqId = ctx->layer; - } - } - return GF_OK; - } - /*return unsupported to avoid confusion by the player (like color space changing ...) */ - return GF_NOT_SUPPORTED; - -} - -static GF_Err OSVC_ProcessData(GF_MediaDecoder *ifcg, - char *inBuffer, u32 inBufferLength, - u16 ES_ID, - char *outBuffer, u32 *outBufferLength, - u8 PaddingBits, u32 mmlevel) -{ - - s32 got_pic; - OPENSVCFRAME pic; - int Layer[4]; - OSVCDec *ctx = (OSVCDec*) ifcg->privateStack; - - if (!ES_ID || (ES_ID!=ctx->ES_ID) || !ctx->codec) { - *outBufferLength = 0; - return GF_OK; - } - if (*outBufferLength < ctx->out_size) { - *outBufferLength = ctx->out_size; - return GF_BUFFER_TOO_SMALL; - } - - got_pic = 0; - if (ctx->nalu_size_length) { - u32 i, nalu_size = 0; - u8 *ptr = inBuffer; - - ctx->MaxDqId = GetDqIdMax(inBuffer, inBufferLength, ctx->nalu_size_length, ctx->DqIdTable, 1); - if(!ctx->InitParseAU){ - if (ctx->MaxDqId == -1) { - //AVC stream in a h264 file - ctx->MaxDqId = 0; - } else { - //Firts time only, we parse the first AU to know the file configuration - //does not need to ba called again ever after, unless SPS or PPS changed - ParseAuPlayers(ctx->codec, inBuffer, inBufferLength, ctx->nalu_size_length, 1); - } - ctx->InitParseAU = 1; - } - SetCommandLayer(Layer, ctx->MaxDqId, ctx->CurrDqId, &ctx->TemporalCom, ctx->TemporalId); - - while (inBufferLength) { - for (i=0; inalu_size_length; i++) { - nalu_size = (nalu_size<<8) + ptr[i]; - } - ptr += ctx->nalu_size_length; - - if (!got_pic) - got_pic = decodeNAL(ctx->codec, ptr, nalu_size, &pic, Layer); - else - decodeNAL(ctx->codec, ptr, nalu_size, &pic, Layer); - - ptr += nalu_size; - if (inBufferLength < nalu_size + ctx->nalu_size_length) break; - - inBufferLength -= nalu_size + ctx->nalu_size_length; - } - } else { - } - if (got_pic!=1) return GF_OK; - - if ((pic.Width != ctx->width) || (pic.Height!=ctx->height)) { - ctx->width = pic.Width; - ctx->stride = pic.Width + 32; - ctx->height = pic.Height; - ctx->out_size = ctx->stride * ctx->height * 3 / 2; - - /*always force layer resize*/ - *outBufferLength = ctx->out_size; - return GF_BUFFER_TOO_SMALL; - } - *outBufferLength = ctx->out_size; - memcpy(outBuffer, pic.pY[0], ctx->stride*ctx->height); - memcpy(outBuffer + ctx->stride * ctx->height, pic.pU[0], ctx->stride*ctx->height/4); - memcpy(outBuffer + 5*ctx->stride * ctx->height/4, pic.pV[0], ctx->stride*ctx->height/4); - - return GF_OK; -} - -static Bool OSVC_CanHandleStream(GF_BaseDecoder *dec, u32 StreamType, GF_ESD *esd, u8 PL) -{ - if (StreamType != GF_STREAM_VISUAL) return 0; - - /*media type query*/ - if (!esd) return 1; - - switch (esd->decoderConfig->objectTypeIndication) { - case GPAC_OTI_VIDEO_AVC: - if (esd->decoderConfig->decoderSpecificInfo && esd->decoderConfig->decoderSpecificInfo->data) { - Bool is_svc = 0; - u32 i, count; - GF_AVCConfig *cfg = gf_odf_avc_cfg_read(esd->decoderConfig->decoderSpecificInfo->data, esd->decoderConfig->decoderSpecificInfo->dataLength); - if (!cfg) return 0; - - /*decode all NALUs*/ - count = gf_list_count(cfg->sequenceParameterSets); - for (i=0; isequenceParameterSets, i); - u8 nal_type = slc->data[0] & 0x1F; - - if (nal_type==GF_AVC_NALU_SVC_SUBSEQ_PARAM) { - is_svc = 1; - break; - } - } - gf_odf_avc_cfg_del(cfg); - return is_svc; - } - return 1; - } - return 0; -} - -static const char *OSVC_GetCodecName(GF_BaseDecoder *dec) -{ - return "OpenSVC Decoder"; -} - -GF_BaseDecoder *NewOSVCDec() -{ - GF_MediaDecoder *ifcd; - OSVCDec *dec; - - GF_SAFEALLOC(ifcd, GF_MediaDecoder); - GF_SAFEALLOC(dec, OSVCDec); - GF_REGISTER_MODULE_INTERFACE(ifcd, GF_MEDIA_DECODER_INTERFACE, "OpenSVC Decoder", "gpac distribution") - - ifcd->privateStack = dec; - - /*setup our own interface*/ - ifcd->AttachStream = OSVC_AttachStream; - ifcd->DetachStream = OSVC_DetachStream; - ifcd->GetCapabilities = OSVC_GetCapabilities; - ifcd->SetCapabilities = OSVC_SetCapabilities; - ifcd->GetName = OSVC_GetCodecName; - ifcd->CanHandleStream = OSVC_CanHandleStream; - ifcd->ProcessData = OSVC_ProcessData; - return (GF_BaseDecoder *) ifcd; -} - -void DeleteOSVCDec(GF_BaseDecoder *ifcg) -{ - OSVCDec *ctx = (OSVCDec*) ifcg->privateStack; - gf_free(ctx); - gf_free(ifcg); -} - -const u32 *QueryInterfaces() -{ - static u32 si [] = { -#ifndef GPAC_DISABLE_AV_PARSERS - GF_MEDIA_DECODER_INTERFACE, -#endif - 0 - }; - return si; -} - -GF_BaseInterface *LoadInterface(u32 InterfaceType) -{ -#ifndef GPAC_DISABLE_AV_PARSERS - if (InterfaceType == GF_MEDIA_DECODER_INTERFACE) return (GF_BaseInterface *)NewOSVCDec(); -#endif - return NULL; -} - -void ShutdownInterface(GF_BaseInterface *ifce) -{ - switch (ifce->InterfaceType) { -#ifndef GPAC_DISABLE_AV_PARSERS - case GF_MEDIA_DECODER_INTERFACE: - DeleteOSVCDec((GF_BaseDecoder*)ifce); - break; -#endif - } -} +/* + * GPAC - Multimedia Framework C SDK + * + * Copyright (c) Telecom ParisTech 2010- + * Author(s): Jean Le Feuvre + * All rights reserved + * + * This file is part of GPAC / OpenSVC Decoder module + * + * GPAC is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * GPAC 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; see the file COPYING. If not, write to + * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + * + */ + + +#include +#include +#include + + +#if (defined(WIN32) || defined(_WIN32_WCE)) && !defined(__GNUC__) +# pragma comment(lib, "OpenSVCDecoder") +#endif + +typedef struct{ + int Width; + int Height; + unsigned char* pY[1]; + unsigned char* pU[1]; + unsigned char* pV[1]; +} OPENSVCFRAME; + + +enum { + SVC_STATUS_ERROR = -1, + SVC_STATUS_OK = 0, // no error and no frame ready + SVC_IMAGE_READY = 1, // no error and image ready + SVC_GHOST_IMAGE = 2 // no image for chosen layer but image could be ready for other layers +}; + +int SVCDecoder_init(void **PlayerStruct); +int SVCDecoder_close(void *PlayerStruct); +//TODO +int decodeNAL(void *PlayerStruct, unsigned char* nal, int nal_length, OPENSVCFRAME *Frame, int *LayerCommand); +/*ID vient du NAL type 14 et 20*/ +//TODO +void SetCommandLayer(int *Command, int DqIdMax, int CurrDqId, int *TemporalCom, int TemporalId); +void ParseAuPlayers(void *PlayerStruct, const unsigned char *buf, int buf_size, int nal_length_size, int is_avc); +int GetDqIdMax(const unsigned char *buf, int buf_size, int nal_length_size, int *DqidTable, int is_avc); + + +typedef struct +{ + u16 ES_ID; + u32 width, stride, height, out_size, pixel_ar, layer; + Bool first_frame; + + u32 nalu_size_length; + + /*OpenSVC things*/ + void *codec; + int InitParseAU; + int svc_init_done; + int save_Width; + int save_Height; + int CurrDqId; + int MaxDqId; + int DqIdTable [8]; + int TemporalId; + int TemporalCom; +} OSVCDec; + +static GF_Err OSVC_AttachStream(GF_BaseDecoder *ifcg, GF_ESD *esd) +{ + u32 i, count; + s32 res; + OPENSVCFRAME Picture; + int Layer[4]; + OSVCDec *ctx = (OSVCDec*) ifcg->privateStack; + + /*not supported in this version*/ + if (esd->dependsOnESID) return GF_NOT_SUPPORTED; + + ctx->ES_ID = esd->ESID; + ctx->width = ctx->height = ctx->out_size = 0; + + if (esd->decoderConfig->decoderSpecificInfo && esd->decoderConfig->decoderSpecificInfo->data) { + GF_AVCConfig *cfg = gf_odf_avc_cfg_read(esd->decoderConfig->decoderSpecificInfo->data, esd->decoderConfig->decoderSpecificInfo->dataLength); + if (!cfg) return GF_NON_COMPLIANT_BITSTREAM; + ctx->nalu_size_length = cfg->nal_unit_size; + if (SVCDecoder_init(&ctx->codec) == SVC_STATUS_ERROR) return GF_IO_ERR; + + /*decode all NALUs*/ + count = gf_list_count(cfg->sequenceParameterSets); + SetCommandLayer(Layer, 255, 0, &i, 0);//bufindex can be reset without pb + for (i=0; isequenceParameterSets, i); + + gf_avc_get_sps_info(slc->data, slc->size, &slc->id, &w, &h, &par_n, &par_d); + /*by default use the base layer*/ + if (!i) { + if ((ctx->widthheightwidth = w; + ctx->height = h; + if ( ((s32)par_n>0) && ((s32)par_d>0) ) + ctx->pixel_ar = (par_n<<16) || par_d; + } + } + res = decodeNAL(ctx->codec, slc->data, slc->size, &Picture, Layer); + if (res<0) { + GF_LOG(GF_LOG_ERROR, GF_LOG_CODEC, ("[SVC Decoder] Error decoding SPS %d\n", res)); + } + } + + count = gf_list_count(cfg->pictureParameterSets); + for (i=0; ipictureParameterSets, i); + res = decodeNAL(ctx->codec, slc->data, slc->size, &Picture, Layer); + if (res<0) { + GF_LOG(GF_LOG_ERROR, GF_LOG_CODEC, ("[SVC Decoder] Error decoding PPS %d\n", res)); + } + } + + gf_odf_avc_cfg_del(cfg); + } else { + ctx->nalu_size_length = 0; + if (SVCDecoder_init(&ctx->codec) == SVC_STATUS_ERROR) return GF_IO_ERR; + } + ctx->stride = ctx->width + 32; + ctx->layer = 0; + ctx->CurrDqId = ctx->layer; + ctx->out_size = ctx->stride * ctx->height * 3 / 2; + return GF_OK; +} +static GF_Err OSVC_DetachStream(GF_BaseDecoder *ifcg, u16 ES_ID) +{ + OSVCDec *ctx = (OSVCDec*) ifcg->privateStack; + + if (ctx->codec) SVCDecoder_close(ctx->codec); + ctx->codec = NULL; + ctx->width = ctx->height = ctx->out_size = 0; + return GF_OK; +} +static GF_Err OSVC_GetCapabilities(GF_BaseDecoder *ifcg, GF_CodecCapability *capability) +{ + OSVCDec *ctx = (OSVCDec*) ifcg->privateStack; + + switch (capability->CapCode) { + case GF_CODEC_RESILIENT: + capability->cap.valueInt = 1; + break; + case GF_CODEC_WIDTH: + capability->cap.valueInt = ctx->width; + break; + case GF_CODEC_HEIGHT: + capability->cap.valueInt = ctx->height; + break; + case GF_CODEC_STRIDE: + capability->cap.valueInt = ctx->stride; + break; + case GF_CODEC_PAR: + capability->cap.valueInt = ctx->pixel_ar; + break; + case GF_CODEC_OUTPUT_SIZE: + capability->cap.valueInt = ctx->out_size; + break; + case GF_CODEC_PIXEL_FORMAT: + capability->cap.valueInt = GF_PIXEL_YV12; + break; + case GF_CODEC_BUFFER_MIN: + capability->cap.valueInt = 1; + break; + case GF_CODEC_BUFFER_MAX: + capability->cap.valueInt = 4; + break; + case GF_CODEC_PADDING_BYTES: + capability->cap.valueInt = 32; + break; + case GF_CODEC_REORDER: + capability->cap.valueInt = 1; + break; + /*not known at our level...*/ + case GF_CODEC_CU_DURATION: + default: + capability->cap.valueInt = 0; + break; + } + return GF_OK; +} +static GF_Err OSVC_SetCapabilities(GF_BaseDecoder *ifcg, GF_CodecCapability capability) +{ + OSVCDec *ctx = (OSVCDec*) ifcg->privateStack; + switch (capability.CapCode) { + case GF_CODEC_MEDIA_SWITCH_QUALITY: + if (capability.cap.valueInt) { + if (ctx->layer<32) { + ctx->layer += 8; + ctx->CurrDqId = ctx->layer; + } + } else { + if (ctx->layer>=8) { + ctx->layer -= 8; + ctx->CurrDqId = ctx->layer; + } + } + return GF_OK; + } + /*return unsupported to avoid confusion by the player (like color space changing ...) */ + return GF_NOT_SUPPORTED; + +} + +static GF_Err OSVC_ProcessData(GF_MediaDecoder *ifcg, + char *inBuffer, u32 inBufferLength, + u16 ES_ID, + char *outBuffer, u32 *outBufferLength, + u8 PaddingBits, u32 mmlevel) +{ + + s32 got_pic; + OPENSVCFRAME pic; + int Layer[4]; + OSVCDec *ctx = (OSVCDec*) ifcg->privateStack; + + if (!ES_ID || (ES_ID!=ctx->ES_ID) || !ctx->codec) { + *outBufferLength = 0; + return GF_OK; + } + if (*outBufferLength < ctx->out_size) { + *outBufferLength = ctx->out_size; + return GF_BUFFER_TOO_SMALL; + } + + got_pic = 0; + if (ctx->nalu_size_length) { + u32 i, nalu_size = 0; + u8 *ptr = inBuffer; + + ctx->MaxDqId = GetDqIdMax(inBuffer, inBufferLength, ctx->nalu_size_length, ctx->DqIdTable, 1); + if(!ctx->InitParseAU){ + if (ctx->MaxDqId == -1) { + //AVC stream in a h264 file + ctx->MaxDqId = 0; + } else { + //Firts time only, we parse the first AU to know the file configuration + //does not need to ba called again ever after, unless SPS or PPS changed + ParseAuPlayers(ctx->codec, inBuffer, inBufferLength, ctx->nalu_size_length, 1); + } + ctx->InitParseAU = 1; + } + SetCommandLayer(Layer, ctx->MaxDqId, ctx->CurrDqId, &ctx->TemporalCom, ctx->TemporalId); + + while (inBufferLength) { + for (i=0; inalu_size_length; i++) { + nalu_size = (nalu_size<<8) + ptr[i]; + } + ptr += ctx->nalu_size_length; + + if (!got_pic) + got_pic = decodeNAL(ctx->codec, ptr, nalu_size, &pic, Layer); + else + decodeNAL(ctx->codec, ptr, nalu_size, &pic, Layer); + + ptr += nalu_size; + if (inBufferLength < nalu_size + ctx->nalu_size_length) break; + + inBufferLength -= nalu_size + ctx->nalu_size_length; + } + } else { + } + if (got_pic!=1) return GF_OK; + + if ((pic.Width != ctx->width) || (pic.Height!=ctx->height)) { + ctx->width = pic.Width; + ctx->stride = pic.Width + 32; + ctx->height = pic.Height; + ctx->out_size = ctx->stride * ctx->height * 3 / 2; + + /*always force layer resize*/ + *outBufferLength = ctx->out_size; + return GF_BUFFER_TOO_SMALL; + } + *outBufferLength = ctx->out_size; + memcpy(outBuffer, pic.pY[0], ctx->stride*ctx->height); + memcpy(outBuffer + ctx->stride * ctx->height, pic.pU[0], ctx->stride*ctx->height/4); + memcpy(outBuffer + 5*ctx->stride * ctx->height/4, pic.pV[0], ctx->stride*ctx->height/4); + + return GF_OK; +} + +static u32 OSVC_CanHandleStream(GF_BaseDecoder *dec, u32 StreamType, GF_ESD *esd, u8 PL) +{ + if (StreamType != GF_STREAM_VISUAL) return GF_CODEC_NOT_SUPPORTED; + + /*media type query*/ + if (!esd) return GF_CODEC_STREAM_TYPE_SUPPORTED; + + switch (esd->decoderConfig->objectTypeIndication) { + case GPAC_OTI_VIDEO_AVC: + if (esd->decoderConfig->decoderSpecificInfo && esd->decoderConfig->decoderSpecificInfo->data) { + Bool is_svc = 0; + u32 i, count; + GF_AVCConfig *cfg = gf_odf_avc_cfg_read(esd->decoderConfig->decoderSpecificInfo->data, esd->decoderConfig->decoderSpecificInfo->dataLength); + if (!cfg) return GF_CODEC_NOT_SUPPORTED; + + /*decode all NALUs*/ + count = gf_list_count(cfg->sequenceParameterSets); + for (i=0; isequenceParameterSets, i); + u8 nal_type = slc->data[0] & 0x1F; + + if (nal_type==GF_AVC_NALU_SVC_SUBSEQ_PARAM) { + is_svc = 1; + break; + } + } + gf_odf_avc_cfg_del(cfg); + return is_svc ? GF_CODEC_SUPPORTED : GF_CODEC_MAYBE_SUPPORTED; + } + return GF_CODEC_MAYBE_SUPPORTED; + } + return GF_CODEC_NOT_SUPPORTED; +} + +static const char *OSVC_GetCodecName(GF_BaseDecoder *dec) +{ + return "OpenSVC Decoder"; +} + +GF_BaseDecoder *NewOSVCDec() +{ + GF_MediaDecoder *ifcd; + OSVCDec *dec; + + GF_SAFEALLOC(ifcd, GF_MediaDecoder); + GF_SAFEALLOC(dec, OSVCDec); + GF_REGISTER_MODULE_INTERFACE(ifcd, GF_MEDIA_DECODER_INTERFACE, "OpenSVC Decoder", "gpac distribution") + + ifcd->privateStack = dec; + + /*setup our own interface*/ + ifcd->AttachStream = OSVC_AttachStream; + ifcd->DetachStream = OSVC_DetachStream; + ifcd->GetCapabilities = OSVC_GetCapabilities; + ifcd->SetCapabilities = OSVC_SetCapabilities; + ifcd->GetName = OSVC_GetCodecName; + ifcd->CanHandleStream = OSVC_CanHandleStream; + ifcd->ProcessData = OSVC_ProcessData; + return (GF_BaseDecoder *) ifcd; +} + +void DeleteOSVCDec(GF_BaseDecoder *ifcg) +{ + OSVCDec *ctx = (OSVCDec*) ifcg->privateStack; + gf_free(ctx); + gf_free(ifcg); +} + +const u32 *QueryInterfaces() +{ + static u32 si [] = { +#ifndef GPAC_DISABLE_AV_PARSERS + GF_MEDIA_DECODER_INTERFACE, +#endif + 0 + }; + return si; +} + +GF_BaseInterface *LoadInterface(u32 InterfaceType) +{ +#ifndef GPAC_DISABLE_AV_PARSERS + if (InterfaceType == GF_MEDIA_DECODER_INTERFACE) return (GF_BaseInterface *)NewOSVCDec(); +#endif + return NULL; +} + +void ShutdownInterface(GF_BaseInterface *ifce) +{ + switch (ifce->InterfaceType) { +#ifndef GPAC_DISABLE_AV_PARSERS + case GF_MEDIA_DECODER_INTERFACE: + DeleteOSVCDec((GF_BaseDecoder*)ifce); + break; +#endif + } +} diff --git a/modules/oss_audio/Makefile b/modules/oss_audio/Makefile index cd5e60d..1582048 100644 --- a/modules/oss_audio/Makefile +++ b/modules/oss_audio/Makefile @@ -37,7 +37,7 @@ all: $(LIB) $(LIB): $(OBJS) $(CC) $(SHFLAGS) -o ../../bin/gcc/$@ $(OBJS) $(EXTRALIBS) -L../../bin/gcc -lgpac $(OSS_LDFLAGS) ifeq ($(STATICBUILD),yes) - $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/gm_oss_audio-static.so $(OBJS) $(EXTRALIBS) -L../../bin/gcc -lgpac_static $(OSS_LDFLAGS) + $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/gm_oss_audio-static.$(DYN_LIB_SUFFIX) $(OBJS) $(EXTRALIBS) -L../../bin/gcc -lgpac_static $(OSS_LDFLAGS) endif diff --git a/modules/platinum/GPACPlatinum.cpp b/modules/platinum/GPACPlatinum.cpp index e1e66bb..6431d7e 100644 --- a/modules/platinum/GPACPlatinum.cpp +++ b/modules/platinum/GPACPlatinum.cpp @@ -1550,8 +1550,13 @@ static Bool upnp_process(GF_TermExt *termext, u32 action, void *param) case GF_TERM_EXT_START: opt = gf_modules_get_option((GF_BaseInterface*)termext, "UPnP", "Enabled"); if (!opt) { +#ifdef GPAC_CONFIG_DARWIN + opt = "no"; + fprintf(stdout, "Disabling UPnP - to enable it, modify section [UPnP] key \"Enabled\" in /Users/yourname/.gpacrc"); +#else opt = "yes"; - gf_modules_set_option((GF_BaseInterface*)termext, "UPnP", "Enabled", "yes"); +#endif + gf_modules_set_option((GF_BaseInterface*)termext, "UPnP", "Enabled", opt); } if (!strcmp(opt, "yes")) { upnp->Load((GF_Terminal *)param); diff --git a/modules/raw_out/Makefile b/modules/raw_out/Makefile index a900efb..ed6e0dd 100644 --- a/modules/raw_out/Makefile +++ b/modules/raw_out/Makefile @@ -39,7 +39,7 @@ all: $(LIB) $(LIB): $(OBJS) $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/$@ $(OBJS) $(EXTRALIBS) -L../../bin/gcc -lgpac ifeq ($(STATICBUILD),yes) - $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/gm_raw_out-static.so $(OBJS) $(EXTRALIBS) -L../../bin/gcc -lgpac_static + $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/gm_raw_out-static.$(DYN_LIB_SUFFIX) $(OBJS) $(EXTRALIBS) -L../../bin/gcc -lgpac_static endif diff --git a/modules/redirect_av/Makefile b/modules/redirect_av/Makefile index d43bd3e..c514a1b 100644 --- a/modules/redirect_av/Makefile +++ b/modules/redirect_av/Makefile @@ -1,58 +1,58 @@ -include ../../config.mak - -vpath %.c $(SRC_PATH)/modules/redirect_av - -CFLAGS= $(OPTFLAGS) -I"$(SRC_PATH)/include" $(ffmpeg_cflags) - -ifeq ($(DEBUGBUILD), yes) -CFLAGS+=-g -LDFLAGS+=-g -endif - -ifeq ($(GPROFBUILD), yes) -CFLAGS+=-pg -LDFLAGS+=-pg -endif - -LINKLIBS= -lgpac $(ffmpeg_lflags) -LOCAL_LIB=../../bin/gcc - -#common objects -OBJS=redirect_av.o - - - -SRCS := $(OBJS:.o=.c) - -LIB=gm_redirect_av.$(DYN_LIB_SUFFIX) - -all: $(LIB) - - -$(LIB): $(OBJS) - $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/$@ $(OBJS) $(EXTRALIBS) -L$(LOCAL_LIB) $(LINKLIBS) - - -%.o: %.c - $(CC) $(CFLAGS) -c -o $@ $< - - -clean: - rm -f $(OBJS) ../../bin/gcc/$(LIB) - -dep: depend - -depend: - rm -f .depend - $(CC) -MM $(CFLAGS) $(SRCS) 1>.depend - -distclean: clean - rm -f Makefile.bak .depend - - - -# include dependency files if they exist -# -ifneq ($(wildcard .depend),) -include .depend -endif +include ../../config.mak + +vpath %.c $(SRC_PATH)/modules/redirect_av + +CFLAGS= $(OPTFLAGS) -I"$(SRC_PATH)/include" $(ffmpeg_cflags) + +ifeq ($(DEBUGBUILD), yes) +CFLAGS+=-g +LDFLAGS+=-g +endif + +ifeq ($(GPROFBUILD), yes) +CFLAGS+=-pg +LDFLAGS+=-pg +endif + +LINKLIBS= -lgpac $(ffmpeg_lflags) +LOCAL_LIB=../../bin/gcc + +#common objects +OBJS=redirect_av.o + + + +SRCS := $(OBJS:.o=.c) + +LIB=gm_redirect_av.$(DYN_LIB_SUFFIX) + +all: $(LIB) + + +$(LIB): $(OBJS) + $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/$@ $(OBJS) $(EXTRALIBS) -L$(LOCAL_LIB) $(LINKLIBS) + + +%.o: %.c + $(CC) $(CFLAGS) -c -o $@ $< + + +clean: + rm -f $(OBJS) ../../bin/gcc/$(LIB) + +dep: depend + +depend: + rm -f .depend + $(CC) -MM $(CFLAGS) $(SRCS) 1>.depend + +distclean: clean + rm -f Makefile.bak .depend + + + +# include dependency files if they exist +# +ifneq ($(wildcard .depend),) +include .depend +endif diff --git a/modules/redirect_av/ffmpeg_ts_muxer.c b/modules/redirect_av/ffmpeg_ts_muxer.c index 6d8a40e..2489fec 100644 --- a/modules/redirect_av/ffmpeg_ts_muxer.c +++ b/modules/redirect_av/ffmpeg_ts_muxer.c @@ -41,6 +41,7 @@ static AVPacketList * wait_for_packet(GF_AbstractTSMuxer* ts, GF_Mutex * mx, AVP while (ts->encode && !(*pkts)) { gf_mx_v(mx); gf_mx_p(mx); + gf_sleep(1); } if (!ts->encode) { gf_mx_v(mx); @@ -138,6 +139,7 @@ static Bool ts_interleave_thread_run(void *param) { } gf_free(pl); } + gf_sleep(1); } exit: GF_LOG(GF_LOG_INFO, GF_LOG_MODULE, ("[AVRedirect] Ending TS thread...\n")); @@ -166,6 +168,7 @@ GF_AbstractTSMuxer * ts_amux_new(GF_AVRedirect * avr, u32 videoBitrateInBitsPerS if (!ts->oc->oformat) ts->oc->oformat = GUESS_FORMAT("mpegts", NULL, NULL); assert( ts->oc->oformat); +#if REDIRECT_AV_AUDIO_ENABLED ts->audio_st = av_new_stream(ts->oc, avr->audioCodec->id); { AVCodecContext * c = ts->audio_st->codec; @@ -176,14 +179,15 @@ GF_AbstractTSMuxer * ts_amux_new(GF_AVRedirect * avr, u32 videoBitrateInBitsPerS c->bit_rate = audioBitRateInBitsPerSec; c->sample_rate = avr->audioSampleRate; c->channels = 2; - c->time_base.num = 1; - c->time_base.den = 1000; + c->time_base.num = 1; + c->time_base.den = 1000; // some formats want stream headers to be separate if (ts->oc->oformat->flags & AVFMT_GLOBALHEADER) c->flags |= CODEC_FLAG_GLOBAL_HEADER; } - ts->video_st = av_new_stream(ts->oc, avr->videoCodec->id); +#endif + ts->video_st = av_new_stream(ts->oc, avr->videoCodec->id); { AVCodecContext * c = ts->video_st->codec; c->codec_id = avr->videoCodec->id; @@ -231,12 +235,14 @@ GF_AbstractTSMuxer * ts_amux_new(GF_AVRedirect * avr, u32 videoBitrateInBitsPerS GF_LOG(GF_LOG_ERROR, GF_LOG_MODULE, ("[AVRedirect] failed to open video codec\n")); return NULL; } +#if REDIRECT_AV_AUDIO_ENABLED if (avcodec_open(ts->audio_st->codec, avr->audioCodec) < 0) { GF_LOG(GF_LOG_ERROR, GF_LOG_MODULE, ("[AVRedirect] failed to open audio codec\n")); return NULL; } - ts->videoMx = gf_mx_new("TS_VideoMx"); ts->audioMx = gf_mx_new("TS_AudioMx"); +#endif + ts->videoMx = gf_mx_new("TS_VideoMx"); ts->tsEncodingThread = gf_th_new("ts_interleave_thread_run"); ts->encode = 1; ts->audioPackets = NULL; @@ -252,18 +258,22 @@ void ts_amux_del(GF_AbstractTSMuxer * muxerToDelete) { gf_sleep(100); gf_th_stop(muxerToDelete->tsEncodingThread); muxerToDelete->tsEncodingThread = NULL; +#if REDIRECT_AV_AUDIO_ENABLED gf_mx_del(muxerToDelete->audioMx); muxerToDelete->audioMx = NULL; +#endif gf_mx_del(muxerToDelete->videoMx); muxerToDelete->videoMx = NULL; if (muxerToDelete->video_st) { avcodec_close(muxerToDelete->video_st->codec); muxerToDelete->video_st = NULL; } +#if REDIRECT_AV_AUDIO_ENABLED if (muxerToDelete->audio_st) { avcodec_close(muxerToDelete->audio_st->codec); muxerToDelete->audio_st = NULL; } +#endif /* write the trailer, if any. the trailer must be written * before you close the CodecContexts open when you wrote the * header; otherwise write_trailer may try to use memory that diff --git a/modules/redirect_av/redirect_av.c b/modules/redirect_av/redirect_av.c index 5e4b8c0..0c7f15c 100644 --- a/modules/redirect_av/redirect_av.c +++ b/modules/redirect_av/redirect_av.c @@ -1,815 +1,830 @@ -/* - * GPAC - Multimedia Framework C SDK - * - * Authors: Jean le Feuvre - * Copyright (c) 2010-20XX Telecom ParisTech - * All rights reserved - * - * This file is part of GPAC / AVI Recorder demo module - * - * GPAC is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * GPAC 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ -#include - -#if (defined(WIN32) || defined(_WIN32_WCE)) && !defined(__MINGW32__) - -#define EMULATE_INTTYPES -#define EMULATE_FAST_INT -#ifndef inline -#define inline __inline -#endif - -#if defined(__SYMBIAN32__) -#define EMULATE_INTTYPES -#endif - - -#ifndef __MINGW32__ -#define __attribute__(s) -#endif - - -/*include FFMPEG APIs*/ -#ifdef _WIN32_WCE -#define inline __inline -#endif - - -# define INT64_C(x) (x ## i64) -# define UINT64_C(x) (x ## Ui64) - - -#endif - - -#include "ts_muxer.h" - -#define USE_GPAC_MPEG2TS -#undef USE_GPAC_MPEG2TS - -#ifdef USE_GPAC_MPEG2TS -#include "gpac_ts_muxer.c" -#else -#include "ffmpeg_ts_muxer.c" -#endif /* USE_GPAC_MPEG2TS */ - -#include -#include -#include - - -#if (defined(WIN32) || defined(_WIN32_WCE)) && !defined(__GNUC__) - -#if defined(_WIN32_WCE) -#pragma comment(lib, "toolhelp") -#pragma comment(lib, "winsock") -#endif - -#define _TOSTR(_val) #_val -#define TOSTR(_val) _TOSTR(_val) - -#pragma comment(lib, "avcodec-"TOSTR(LIBAVCODEC_VERSION_MAJOR) ) -#pragma comment(lib, "avformat-"TOSTR(LIBAVFORMAT_VERSION_MAJOR) ) -#pragma comment(lib, "avutil-"TOSTR(LIBAVUTIL_VERSION_MAJOR) ) -#pragma comment(lib, "swscale-"TOSTR(LIBSWSCALE_VERSION_MAJOR) ) - -#endif - - -/* This number * 188 should be lower than the UDP packet size */ -#define TS_PACKETS_PER_UDP_PACKET 1 - -#define audioCodecBitrate 96000 - -#if !defined(WIN32) && !defined(_WIN32_WCE) -#include -#endif - -static const u32 maxFPS = 25; - -static const char * moduleName = "AVRedirect"; - -static const char * AVR_VIDEO_CODEC_OPTION = "VideoCodec"; - - -#define AVR_TIMERS_LENGHT 25 - -#define U32_ABS( a, b ) (a > b ? a - b : b - a) - -#define DUMP_MP3 -#undef DUMP_MP3 - -/** - * This thread sends the frame to TS mux - * \param Parameter The GF_AVRedirect pointer - */ -static Bool audio_encoding_thread_run(void *param) -{ - u8 * inBuff; - u8 * outBuff; - u32 inBuffSize, outBuffSize, samplesReaden, toRead; - u64 myTime = 0; - u32 frameCountSinceReset = 0; - u32 lastCurrentTime; - Bool sendPts = 1; - GF_AVRedirect * avr = (GF_AVRedirect*) param; - AVCodecContext * ctx = NULL; - assert( avr ); - - outBuffSize = FF_MIN_BUFFER_SIZE; - - outBuff = gf_malloc(outBuffSize* sizeof(u8)); - inBuff = NULL; -#ifdef DUMP_MP3 - FILE * mp3 = fopen("/tmp/dump.mp3", "w"); -#endif /* DUMP_MP3 */ - sendPts = 1; - gf_sc_add_audio_listener ( avr->term->compositor, &avr->audio_listen ); - while (avr->is_running && !ctx) { - ctx = ts_get_audio_codec_context(avr->ts_implementation); - gf_sleep(16); - } - if (!ctx) { - goto exit; - } - - printf("******* Audio Codec Context = %d/%d, start="LLU", frame_size=%u\n", ctx->time_base.num, ctx->time_base.den, ctx->timecode_frame_start, ctx->frame_size); - samplesReaden = ctx->frame_size * ctx->channels; - - //printf("SETUP input sample size=%u, output samplesize=%u, buffsize=%u, samplesReaden=%u\n", ctx->input_sample_size, ctx->frame_size, sizeof(outbuf), samplesReaden); - // 2 chars are needed for each short - toRead = samplesReaden * 2; - inBuffSize = toRead; - inBuff = gf_malloc(inBuffSize * sizeof(u8)); - while (avr->is_running && !avr->audioCurrentTime) { - gf_sleep(16); - } - myTime = lastCurrentTime = avr->audioCurrentTime; - frameCountSinceReset = 0; - while (avr->is_running) { - u32 readen; - if (U32_ABS(avr->audioCurrentTime, myTime) > 25000) { - //GF_LOG( GF_LOG_ERROR, GF_LOG_MODULE, ("[AVRedirect] Drift in audio : audioCurrentTime = %u, myTime=%u, resync...\n", avr->audioCurrentTime, myTime)); - //myTime = lastCurrentTime = avr->audioCurrentTime; - //frameCountSinceReset = 0; - sendPts = 1; - } - while (toRead <= gf_ringbuffer_available_for_read(avr->pcmAudio) ) { - memset( inBuff, 0, inBuffSize); - memset( outBuff, 0, outBuffSize); - readen = gf_ringbuffer_read(avr->pcmAudio, inBuff, toRead); - assert( readen == toRead ); - if (avr->encode) - { - //u32 oldFrameSize = ctx->frame_size; - //ctx->frame_size = readable / (2 * ctx->channels); - //assert( oldFrameSize <= ctx->frame_size ); - /* buf_size * input_sample_size / output_sample_size */ - int encoded = avcodec_encode_audio(ctx, outBuff, outBuffSize, (const short *) inBuff); - if (encoded < 0) { - GF_LOG(GF_LOG_ERROR, GF_LOG_MODULE, ("[RedirectAV]: failed to encode audio, buffer size=%u, readen=%u, frame_size=%u\n", outBuffSize, readen, ctx->frame_size)); - } else if (encoded > 0) { - ts_encode_audio_frame(avr->ts_implementation, outBuff, encoded, sendPts ? myTime : AV_NOPTS_VALUE ); - frameCountSinceReset++; -#ifdef DUMP_MP3 - fwrite( outBuff, sizeof(char), encoded, mp3); -#endif /* DUMP_MP3 */ - //if (ctx->codec->id == CODEC_ID_MP3) { - /* It seems the MP3 codec only fetches 50% of data... */ - // myTime= lastCurrentTime + (frameCountSinceReset * ctx->frame_size * 500 / ctx->sample_rate); - //} else - //myTime = lastCurrentTime + (frameCountSinceReset * toRead * 1000 / ctx->sample_rate/ ctx->channels / 4); - /* Avoid overflow , multiply by 10 and divide sample rate by 100 instead of *1000 / sampleRate */ - myTime = lastCurrentTime + (frameCountSinceReset * toRead * 10 / (ctx->sample_rate / 100) / ctx->channels / 4); - //sendPts = 0; - sendPts = 1; - } else { - GF_LOG(GF_LOG_INFO, GF_LOG_MODULE, ("[RedirectAV]: no encoded frame.\n")); - //frameCountSinceReset++; - } - //ctx->frame_size = oldFrameSize; - } - } - } -exit: - GF_LOG(GF_LOG_INFO, GF_LOG_MODULE, ("[AVRedirect] Ending audio encoding thread...\n")); - if (inBuff) - gf_free( inBuff ); - if (outBuff) - gf_free( outBuff ); -#ifdef DUMP_MP3 - if (mp3) - fclose(mp3); -#endif /* DUMP_MP3 */ - if (avr->term) - gf_sc_remove_audio_listener ( avr->term->compositor, &avr->audio_listen ); - return GF_OK; -} - -/** - * This thread sends the frame to TS mux - * \param Parameter The GF_AVRedirect pointer - */ -static Bool video_encoding_thread_run(void *param) -{ - GF_AVRedirect * avr = (GF_AVRedirect*) param; - u64 currentFrameTimeProcessed = 0; - u32 lastEncodedFrameTime = 0; - AVCodecContext * ctx = NULL; - assert( avr ); - gf_sc_add_video_listener ( avr->term->compositor, &avr->video_listen ); - while (avr->is_running && (!ctx || !avr->swsContext)) { - ctx = ts_get_video_codec_context(avr->ts_implementation); - gf_sleep(16); - } - if (!ctx) { - goto exit; - } - printf("******* Video Codec Context = %d/%d, start="LLU"\n", ctx->time_base.num, ctx->time_base.den, ctx->timecode_frame_start); - while (avr->is_running) { - { - gf_mx_p(avr->frameMutex); - while (!avr->frameTime || currentFrameTimeProcessed == avr->frameTime) { - gf_mx_v(avr->frameMutex); - if (!avr->is_running) { - goto exit; - } - gf_mx_p(avr->frameMutex); - } - assert( currentFrameTimeProcessed != avr->frameTime); - currentFrameTimeProcessed = avr->frameTime; - { - avpicture_fill ( ( AVPicture * ) avr->RGBpicture, avr->frame, PIX_FMT_RGB24, avr->srcWidth, avr->srcHeight ); - assert( avr->swsContext ); - sws_scale ( avr->swsContext, -#ifdef USE_AVCODEC2 - ( const uint8_t * const * ) -#else - ( uint8_t ** ) -#endif /* USE_AVCODEC2 */ - avr->RGBpicture->data, avr->RGBpicture->linesize, - 0, avr->srcHeight, - avr->YUVpicture->data, avr->YUVpicture->linesize ); -#ifdef AVR_DUMP_RAW_AVI - if ( AVI_write_frame ( avr->avi_out, avr->frame, avr->size, 1 ) <0 ) - { - GF_LOG ( GF_LOG_ERROR, GF_LOG_MODULE, ( "[AVRedirect] Error writing video frame\n" ) ); - } -#endif /* AVR_DUMP_RAW_AVI */ - gf_mx_v(avr->frameMutex); - if (avr->encode) - { - int written; - //u32 sysclock = gf_sys_clock(); - avr->YUVpicture->pts = currentFrameTimeProcessed; - //printf("Encoding frame PTS="LLU", frameNum=%u, time=%u...", avr->YUVpicture->pts, avr->YUVpicture->coded_picture_number, currentFrameTimeProcessed); - written = avcodec_encode_video ( ctx, avr->videoOutbuf, avr->videoOutbufSize, avr->YUVpicture ); - //ctx->coded_frame->pts = currentFrameTimeProcessed; - if ( written < 0 ) - { - GF_LOG ( GF_LOG_ERROR, GF_LOG_MODULE, ( "[AVRedirect] Error while encoding video frame =%d\n", written ) ); - } else - if ( written > 0 ) - { - ts_encode_video_frame(avr->ts_implementation, avr->videoOutbuf, written); - } - lastEncodedFrameTime = currentFrameTimeProcessed; - } - } - } - avr->frameTimeEncoded = currentFrameTimeProcessed; - } /* End of main loop */ -exit: - GF_LOG(GF_LOG_INFO, GF_LOG_MODULE, ("[AVRedirect] Ending video encoding thread...\n")); - if (avr->term) - gf_sc_remove_video_listener ( avr->term->compositor, &avr->video_listen ); - return 0; -} - -#define VIDEO_RATE 400000 - -static Bool start_if_needed(GF_AVRedirect *avr) { - enum PixelFormat pxlFormatForCodec = PIX_FMT_YUV420P; - if (avr->is_open) - return 0; - gf_mx_p(avr->frameMutex); - if (avr->is_open) { - gf_mx_v(avr->frameMutex); - return 0; - } - if (!avr->srcWidth || !avr->srcHeight || !avr->audioSampleRate || !avr->audioChannels) { - gf_mx_v(avr->frameMutex); - return 3; - } -#ifdef AVR_DUMP_RAW_AVI - avr->avi_out = AVI_open_output_file ( "dump.avi" ); - if ( !avr->avi_out ) - { - gf_mx_v(avr->frameMutex); - GF_LOG ( GF_LOG_ERROR, GF_LOG_MODULE, ( "[AVRedirect] Error opening output AVI file\n" ) ); - return 4; - } -#endif /* AVR_DUMP_RAW_AVI */ - GF_LOG(GF_LOG_INFO, GF_LOG_MODULE, ("[AVRedirect] Initializing...\n")); - if (!avr->pcmAudio) - avr->pcmAudio = gf_ringbuffer_new(32768); - - /* Setting up the video encoding ... */ - { - avr->YUVpicture = avr->RGBpicture = NULL; - avr->videoOutbuf = NULL; - if ( !avr->audioCodec) - { - gf_mx_v(avr->frameMutex); - GF_LOG ( GF_LOG_ERROR, GF_LOG_MODULE, ( "[AVRedirect] Cannot find audio codec.\n" ) ); - return 1; - } - - if ( !avr->videoCodec ) - { - GF_LOG ( GF_LOG_ERROR, GF_LOG_MODULE, ( "[AVRedirect] Cannot find video codec.\n" ) ); - return 2; - } - - if (avr->videoCodec->id == CODEC_ID_MJPEG) { - pxlFormatForCodec = PIX_FMT_YUVJ420P; - } - - avr->RGBpicture = avcodec_alloc_frame(); - assert ( avr->RGBpicture ); - avr->RGBpicture->data[0] = NULL; - avr->YUVpicture = avcodec_alloc_frame(); - assert ( avr->YUVpicture ); - { - u32 sz = sizeof ( uint8_t ) * avpicture_get_size ( pxlFormatForCodec, avr->srcWidth, avr->srcHeight ); - avr->yuv_data = av_malloc ( sz ); /* size for YUV 420 */ - assert ( avr->yuv_data ); - memset ( avr->yuv_data, 0, sz ); - avpicture_fill ( ( AVPicture* ) avr->YUVpicture, avr->yuv_data, pxlFormatForCodec, avr->srcWidth, avr->srcHeight ); - avr->YUVpicture->coded_picture_number = 0; - } - avr->videoOutbufSize = avr->srcHeight * avr->srcWidth * 4; - avr->videoOutbuf = gf_malloc ( avr->videoOutbufSize ); - memset ( avr->videoOutbuf, 0, avr->videoOutbufSize ); - } -#ifdef AVR_DUMP_RAW_AVI - GF_LOG ( GF_LOG_INFO, GF_LOG_MODULE, ( "[AVRedirect] Open output AVI file %s\n", "dump.avi" ) ); -#endif /* AVR_DUMP_RAW_AVI */ - /* Setting up the TS mux */ - { - /* - GF_Socket * ts_output_udp_sk = gf_sk_new ( GF_SOCK_TYPE_UDP ); - if ( gf_sk_is_multicast_address ( avr->udp_address ) ) - { - e = gf_sk_setup_multicast ( ts_output_udp_sk, avr->udp_address, avr->udp_port, 0, 0, NULL ); - } - else - { - e = gf_sk_bind ( ts_output_udp_sk, NULL, avr->udp_port, avr->udp_address, avr->udp_port, GF_SOCK_REUSE_PORT ); - } - gf_sk_set_buffer_size(ts_output_udp_sk, 0, 188 * TS_PACKETS_PER_UDP_PACKET); - gf_sk_set_block_mode(ts_output_udp_sk, 0);*/ - assert( avr->destination ); - avr->ts_implementation = ts_amux_new(avr, VIDEO_RATE, avr->srcWidth, avr->srcHeight, audioCodecBitrate); - } - /* - if ( e ) - { - GF_LOG ( GF_LOG_ERROR, GF_LOG_MODULE, ( "[AVRedirect] Error while initializing UDP address %s\n", gf_error_to_string ( e ) ) ); - return e; - } - */ - avr->is_open = avr->ts_implementation != NULL; - gf_mx_v(avr->frameMutex); - return avr->is_open ? 1 : 0; -} - - -static GF_Err avr_open ( GF_AVRedirect *avr ) -{ - assert( avr ); - if ( avr->is_open) - return GF_OK; - if (!avr->is_running) { - avr->is_running = 1; - gf_th_run(avr->encodingThread, video_encoding_thread_run, avr); - gf_th_run(avr->audioEncodingThread, audio_encoding_thread_run, avr); - } - return GF_OK; -} - - - -static void avr_on_audio_frame ( void *udta, char *buffer, u32 buffer_size, u32 time, u32 delay_ms ) -{ - GF_AVRedirect *avr = ( GF_AVRedirect * ) udta; - if (start_if_needed(avr)) - return; -#ifdef AVR_DUMP_RAW_AVI - AVI_write_audio ( avr->avi_out, buffer, buffer_size ); -#endif /* AVR_DUMP_RAW_AVI */ - { - gf_ringbuffer_write(avr->pcmAudio, buffer, buffer_size); - avr->audioCurrentTime = time - delay_ms; - } -} - -static void avr_on_audio_reconfig ( void *udta, u32 samplerate, u32 bits_per_sample, u32 nb_channel, u32 channel_cfg ) -{ - GF_AVRedirect *avr = ( GF_AVRedirect * ) udta; - if (avr->audioSampleRate != samplerate || avr->audioChannels != nb_channel) { - GF_LOG(GF_LOG_INFO, GF_LOG_MODULE, ("[AVRedirect] Audio %u Hz, bitsPerSample=%u, nbchannels=%u\n", samplerate, bits_per_sample, nb_channel)); -#ifdef AVR_DUMP_RAW_AVI - AVI_set_audio ( avr->avi_out, nb_channel, samplerate, bits_per_sample, WAVE_FORMAT_PCM, 0 ); -#endif /* AVR_DUMP_RAW_AVI */ - avr->audioChannels = nb_channel; - avr->audioSampleRate = samplerate; - } -} - -static void avr_on_video_frame ( void *udta, u32 time ) -{ - u32 i, j; - GF_Err e; - GF_VideoSurface fb; - GF_AVRedirect *avr = ( GF_AVRedirect * ) udta; - if (start_if_needed(avr)) - return; - gf_mx_p(avr->frameMutex); - e = gf_sc_get_screen_buffer ( avr->term->compositor, &fb, 0 ); - if ( e ) - { - GF_LOG ( GF_LOG_ERROR, GF_LOG_MODULE, ( "[AVRedirect] Error grabing frame buffer %s\n", gf_error_to_string ( e ) ) ); - return; - } - /*convert frame*/ - for ( i=0; iframe + i * fb.width * 3; - char *src = fb.video_buffer + i * fb.pitch_y; - for ( j=0; jframeTime = time; - gf_mx_v(avr->frameMutex); - gf_sc_release_screen_buffer ( avr->term->compositor, &fb ); - GF_LOG ( GF_LOG_DEBUG, GF_LOG_MODULE, ( "[AVRedirect] Writing video frame\n" ) ); -} - -static void avr_on_video_reconfig ( void *udta, u32 width, u32 height ) -{ - - GF_AVRedirect *avr = ( GF_AVRedirect * ) udta; - - if ((avr->srcHeight != height || avr->srcWidth != width)) - { -#ifdef AVR_DUMP_RAW_AVI - char comp[5]; - comp[0] = comp[1] = comp[2] = comp[3] = comp[4] = 0; - AVI_set_video ( avr->avi_out, width, height, 30, comp ); -#endif /* AVR_DUMP_RAW_AVI */ - GF_LOG ( GF_LOG_INFO, GF_LOG_MODULE, ( "[AVRedirect] Video reconfig width %d height %d\n", width, height ) ); - gf_mx_p(avr->frameMutex); - if ( avr->frame ) gf_free ( avr->frame ); - avr->size = 3*width*height; - avr->frame = gf_malloc ( sizeof ( char ) *avr->size ); - avr->srcWidth = width; - avr->srcHeight = height; - avr->swsContext = sws_getCachedContext ( avr->swsContext, avr->srcWidth, avr->srcHeight, PIX_FMT_RGB24, avr->srcWidth, avr->srcHeight, PIX_FMT_YUV420P, SWS_BICUBIC, NULL, NULL, NULL ); - gf_mx_v(avr->frameMutex); - } -} - - -#ifdef MULTITHREAD_REDIRECT_AV -/** - * This thread sends the TS packets over the network - * \param Parameter The GF_AVRedirect pointer - */ -static Bool ts_thread_run(void *param) -{ - GF_Err e; - GF_AVRedirect * avr = (GF_AVRedirect*) param; - assert( avr ); - gf_mx_p(avr->tsMutex); - while (!avr->frameTimeEncoded && avr->is_running) { - gf_mx_v(avr->tsMutex); - gf_sleep(1); - gf_mx_p(avr->tsMutex); - } - printf("avr->frameTimeEncoded="LLU"\n", avr->frameTimeEncoded); - - while (avr->is_running) { - e = sendTSMux(avr); - gf_mx_v(avr->tsMutex); - gf_mx_p(avr->tsMutex); - } - gf_mx_v(avr->tsMutex); - return 0; -} -#endif /* MULTITHREAD_REDIRECT_AV */ - -static const char * possibleCodecs = "supported codecs : MPEG-1, MPEG-2, MPEG-4, MSMPEG-4, H263, H263I, H263P, RV10, MJPEG"; - -/*#define DEFAULT_UDP_OUT_ADDRESS "127.0.0.1" -#define DEFAULT_UDP_OUT_PORT 1234 -#define DEFAULT_UDP_OUT_PORT_STR "1234"*/ - -#define AVR_DEFAULT_DESTINATION "udp://224.0.0.1:1234" - -#include - - -static void avr_close ( GF_AVRedirect *avr ) -{ - if ( !avr->is_open ) return; - avr->is_open = 0; -#ifdef AVR_DUMP_RAW_AVI - GF_LOG ( GF_LOG_INFO, GF_LOG_MODULE, ( "[AVRedirect] Closing output AVI file\n" ) ); - AVI_close ( avr->avi_out ); - avr->avi_out = NULL; -#endif /* AVR_DUMP_RAW_AVI */ -} - -static Bool avr_on_event ( void *udta, GF_Event *evt, Bool consumed_by_compositor ) -{ - GF_AVRedirect *avr = udta; - switch ( evt->type ) - { - case GF_EVENT_CONNECT: - if ( evt->connect.is_connected ) - { - avr_open ( avr ); - } - else - { - avr_close ( avr ); - } - break; - } - return 0; -} - -static const char * AVR_ENABLED_OPTION = "Enabled"; - -//static const char * AVR_UDP_PORT_OPTION = "udp.port"; - -//static const char * AVR_UDP_ADDRESS_OPTION = "udp.address"; - -static const char * AVR_DESTINATION = "destination"; - -static Bool avr_process ( GF_TermExt *termext, u32 action, void *param ) -{ - const char *opt; - GF_AVRedirect *avr = termext->udta; - - switch ( action ) - { - case GF_TERM_EXT_START: - avr->term = ( GF_Terminal * ) param; - opt = gf_modules_get_option ( ( GF_BaseInterface* ) termext, moduleName, AVR_ENABLED_OPTION ); - if ( !opt ) - gf_modules_set_option ( ( GF_BaseInterface* ) termext, moduleName, AVR_ENABLED_OPTION, "no" ); - if ( !opt || strcmp ( opt, "yes" ) ) return 0; - opt = gf_modules_get_option ( ( GF_BaseInterface* ) termext, moduleName, AVR_VIDEO_CODEC_OPTION ); - avr->globalLock = gf_global_resource_lock("AVRedirect:output"); - if (!avr->globalLock) { - GF_LOG(GF_LOG_ERROR, GF_LOG_MODULE, ("Failed to lock global resource 'AVRedirect:output', another GPAC instance must be running, disabling AVRedirect\n")); - return 0; - } - /* must be called before using avcodec lib */ - avcodec_init(); - - /* register all the codecs */ - avcodec_register_all(); - if ( !opt ) - gf_modules_set_option ( ( GF_BaseInterface* ) termext, moduleName, AVR_VIDEO_CODEC_OPTION, possibleCodecs ); - { - if ( !opt ) - { - avr->videoCodec = avcodec_find_encoder ( CODEC_ID_MPEG2VIDEO ); - } - else if ( !strcmp ( "MPEG-1", opt ) ) - { - avr->videoCodec=avcodec_find_encoder ( CODEC_ID_MPEG1VIDEO ); - } - else if ( !strcmp ( "MPEG-2", opt ) ) - { - avr->videoCodec=avcodec_find_encoder ( CODEC_ID_MPEG2VIDEO ); - } - else if ( !strcmp ( "MPEG-4", opt ) ) - { - avr->videoCodec=avcodec_find_encoder ( CODEC_ID_MPEG4 ); - } - else if ( !strcmp ( "MSMPEG-4", opt ) ) - { - avr->videoCodec=avcodec_find_encoder ( CODEC_ID_MSMPEG4V3 ); - } - else if ( !strcmp ( "H263", opt ) ) - { - avr->videoCodec=avcodec_find_encoder ( CODEC_ID_H263 ); - } - else if ( !strcmp ( "RV10", opt ) ) - { - avr->videoCodec = avcodec_find_encoder ( CODEC_ID_RV10 ); - } - else if ( !strcmp ( "H263P", opt ) ) - { - avr->videoCodec=avcodec_find_encoder ( CODEC_ID_H263P ); - } - else if ( !strcmp ( "H263I", opt ) ) - { - avr->videoCodec=avcodec_find_encoder ( CODEC_ID_H263I ); - } - else if ( !strcmp( "MJPEG", opt)) - { - avr->videoCodec=avcodec_find_encoder( CODEC_ID_MJPEG); - } - else - { - GF_LOG ( GF_LOG_ERROR, GF_LOG_MODULE, ( "[AVRedirect] Not a known Video codec : %s, using MPEG-2 video instead, %s\n", opt, possibleCodecs ) ); - avr->videoCodec = avcodec_find_encoder ( CODEC_ID_MPEG2VIDEO ); - } - } - avr->audioCodec = avcodec_find_encoder( CODEC_ID_MP3); - /* - opt = gf_modules_get_option ( ( GF_BaseInterface* ) termext, moduleName, AVR_UDP_ADDRESS_OPTION); - if (!opt) { - gf_modules_set_option ( ( GF_BaseInterface* ) termext, moduleName, AVR_UDP_ADDRESS_OPTION, DEFAULT_UDP_OUT_ADDRESS); - avr->udp_address = DEFAULT_UDP_OUT_ADDRESS; - GF_LOG ( GF_LOG_ERROR, GF_LOG_MODULE, ( "[AVRedirect] %s not set, using %s\n", AVR_UDP_ADDRESS_OPTION, DEFAULT_UDP_OUT_ADDRESS ) ); - } else - avr->udp_address = opt; - opt = gf_modules_get_option ( ( GF_BaseInterface* ) termext, moduleName, AVR_UDP_PORT_OPTION); - if (opt) { - char *endPtr = NULL; - unsigned int x = strtoul(opt, &endPtr, 10); - if (endPtr == opt || x > 65536) { - printf("Failed to parse : %s\n", opt); - opt = NULL; - } else - avr->udp_port = (u16) x; - } - if (!opt) { - gf_modules_set_option ( ( GF_BaseInterface* ) termext, moduleName, AVR_UDP_PORT_OPTION, DEFAULT_UDP_OUT_PORT_STR); - GF_LOG ( GF_LOG_ERROR, GF_LOG_MODULE, ( "[AVRedirect] %s is not set or valid, using %s\n", AVR_UDP_PORT_OPTION, DEFAULT_UDP_OUT_PORT_STR ) ); - avr->udp_port = DEFAULT_UDP_OUT_PORT; - } - */ - opt = gf_modules_get_option ( ( GF_BaseInterface* ) termext, moduleName, AVR_DESTINATION); - if (!opt) { - gf_modules_set_option ( ( GF_BaseInterface* ) termext, moduleName, AVR_DESTINATION, AVR_DEFAULT_DESTINATION); - avr->destination = AVR_DEFAULT_DESTINATION; - GF_LOG ( GF_LOG_ERROR, GF_LOG_MODULE, ( "[AVRedirect] %s not set, using %s\n", AVR_DESTINATION, AVR_DEFAULT_DESTINATION ) ); - } else - avr->destination = opt; - avr->audio_listen.udta = avr; - avr->audio_listen.on_audio_frame = avr_on_audio_frame; - avr->audio_listen.on_audio_reconfig = avr_on_audio_reconfig; - avr->video_listen.udta = avr; - avr->video_listen.on_video_frame = avr_on_video_frame; - avr->video_listen.on_video_reconfig = avr_on_video_reconfig; - - avr->term_listen.udta = avr; - avr->term_listen.on_event = avr_on_event; - gf_term_add_event_filter ( avr->term, &avr->term_listen ); - return 1; - - case GF_TERM_EXT_STOP: - gf_term_remove_event_filter ( avr->term, &avr->term_listen ); - avr->term = NULL; - break; - - /*if not threaded, perform our tasks here*/ - case GF_TERM_EXT_PROCESS: - break; - } - return 0; -} - - -GF_TermExt *avr_new() -{ - GF_TermExt *dr; - GF_AVRedirect *uir; - dr = gf_malloc ( sizeof ( GF_TermExt ) ); - memset ( dr, 0, sizeof ( GF_TermExt ) ); - GF_REGISTER_MODULE_INTERFACE ( dr, GF_TERM_EXT_INTERFACE, "GPAC Output Recorder", "gpac distribution" ); - - GF_SAFEALLOC ( uir, GF_AVRedirect ); - dr->process = avr_process; - dr->udta = uir; - uir->encodingMutex = gf_mx_new("RedirectAV_encodingMutex"); - assert( uir->encodingMutex); - uir->frameMutex = gf_mx_new("RedirectAV_frameMutex"); - uir->encodingThread = gf_th_new("RedirectAV_EncodingThread"); - uir->audioEncodingThread = gf_th_new("RedirectAV_AudioEncodingThread"); - uir->encode = 1; - uir->is_open = 0; - uir->is_running = 0; - return dr; -} - - -void avr_delete ( GF_BaseInterface *ifce ) -{ - GF_TermExt *dr = ( GF_TermExt * ) ifce; - GF_AVRedirect *avr = dr->udta; - avr->is_running = 0; - /* Ensure encoding is finished */ - gf_mx_p(avr->frameMutex); - gf_mx_v(avr->frameMutex); - gf_sleep(200); - gf_th_stop(avr->encodingThread); - gf_mx_del(avr->frameMutex); - avr->frameMutex = NULL; - gf_th_del(avr->encodingThread); - avr->encodingThread = NULL; - gf_mx_del(avr->encodingMutex); - avr->encodingMutex = NULL; - if ( avr->ts_implementation ) - { - ts_amux_del(avr->ts_implementation); - avr->ts_implementation = NULL; - } - avr->videoCodec = NULL; - if ( avr->YUVpicture ) - { - av_free ( avr->YUVpicture ); - } - if ( avr->yuv_data ) - av_free ( avr->yuv_data ); - avr->yuv_data = NULL; - avr->YUVpicture = NULL; - if ( avr->RGBpicture ) - { - av_free ( avr->RGBpicture ); - } - avr->RGBpicture = NULL; - if ( avr->swsContext ) - sws_freeContext ( avr->swsContext ); - avr->swsContext = NULL; - if ( avr->videoOutbuf ) - gf_free ( avr->videoOutbuf ); - avr->videoOutbuf = NULL; - if ( avr->pcmAudio ) - gf_ringbuffer_del(avr->pcmAudio); - avr->pcmAudio = NULL; - gf_global_resource_unlock(avr->globalLock); - avr->globalLock = NULL; - if (avr->audioEncodingThread){ - gf_th_stop(avr->audioEncodingThread); - gf_th_del(avr->audioEncodingThread); - } - avr->audioEncodingThread = NULL; - gf_free ( avr ); - gf_free ( dr ); -} - -GF_EXPORT -const u32 *QueryInterfaces() -{ - static u32 si [] = - { - GF_TERM_EXT_INTERFACE, - 0 - }; - return si; -} - -GF_EXPORT -GF_BaseInterface *LoadInterface ( u32 InterfaceType ) -{ - if ( InterfaceType == GF_TERM_EXT_INTERFACE ) return ( GF_BaseInterface * ) avr_new(); - return NULL; -} - -GF_EXPORT -void ShutdownInterface ( GF_BaseInterface *ifce ) -{ - switch ( ifce->InterfaceType ) - { - case GF_TERM_EXT_INTERFACE: - avr_delete ( ifce ); - break; - } -} +/* + * GPAC - Multimedia Framework C SDK + * + * Authors: Jean le Feuvre + * Copyright (c) 2010-20XX Telecom ParisTech + * All rights reserved + * + * This file is part of GPAC / AVI Recorder demo module + * + * GPAC is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * GPAC 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; see the file COPYING. If not, write to + * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + * + */ +#include + +#if (defined(WIN32) || defined(_WIN32_WCE)) && !defined(__MINGW32__) + +#define EMULATE_INTTYPES +#define EMULATE_FAST_INT +#ifndef inline +#define inline __inline +#endif + +#if defined(__SYMBIAN32__) +#define EMULATE_INTTYPES +#endif + + +#ifndef __MINGW32__ +#define __attribute__(s) +#endif + + +/*include FFMPEG APIs*/ +#ifdef _WIN32_WCE +#define inline __inline +#endif + + +# define INT64_C(x) (x ## i64) +# define UINT64_C(x) (x ## Ui64) + + +#endif + + +#include "ts_muxer.h" + +#define USE_GPAC_MPEG2TS +#undef USE_GPAC_MPEG2TS + +#define REDIRECT_AV_AUDIO_ENABLED 1 + +#ifdef USE_GPAC_MPEG2TS +#include "gpac_ts_muxer.c" +#else +#include "ffmpeg_ts_muxer.c" +#endif /* USE_GPAC_MPEG2TS */ + +#include +#include +#include + + +#if (defined(WIN32) || defined(_WIN32_WCE)) && !defined(__GNUC__) + +#if defined(_WIN32_WCE) +#pragma comment(lib, "toolhelp") +#pragma comment(lib, "winsock") +#endif + +#define _TOSTR(_val) #_val +#define TOSTR(_val) _TOSTR(_val) + +#pragma comment(lib, "avcodec-"TOSTR(LIBAVCODEC_VERSION_MAJOR) ) +#pragma comment(lib, "avformat-"TOSTR(LIBAVFORMAT_VERSION_MAJOR) ) +#pragma comment(lib, "avutil-"TOSTR(LIBAVUTIL_VERSION_MAJOR) ) +#pragma comment(lib, "swscale-"TOSTR(LIBSWSCALE_VERSION_MAJOR) ) + +#endif + + +/* This number * 188 should be lower than the UDP packet size */ +#define TS_PACKETS_PER_UDP_PACKET 1 + +#define audioCodecBitrate 96000 + +#if !defined(WIN32) && !defined(_WIN32_WCE) +#include +#endif + +static const u32 maxFPS = 25; + +static const char * moduleName = "AVRedirect"; + +static const char * AVR_VIDEO_CODEC_OPTION = "VideoCodec"; + + +#define AVR_TIMERS_LENGHT 25 + +#define U32_ABS( a, b ) (a > b ? a - b : b - a) + +#define DUMP_MP3 +#undef DUMP_MP3 + +#if REDIRECT_AV_AUDIO_ENABLED +/** + * This thread sends the frame to TS mux + * \param Parameter The GF_AVRedirect pointer + */ +static Bool audio_encoding_thread_run(void *param) +{ + u8 * inBuff; + u8 * outBuff; + u32 inBuffSize, outBuffSize, samplesReaden, toRead; + u64 myTime = 0; + u32 frameCountSinceReset = 0; + u32 lastCurrentTime; + Bool sendPts = 1; + GF_AVRedirect * avr = (GF_AVRedirect*) param; + AVCodecContext * ctx = NULL; + assert( avr ); + + outBuffSize = FF_MIN_BUFFER_SIZE; + + outBuff = gf_malloc(outBuffSize* sizeof(u8)); + inBuff = NULL; +#ifdef DUMP_MP3 + FILE * mp3 = fopen("/tmp/dump.mp3", "w"); +#endif /* DUMP_MP3 */ + sendPts = 1; + gf_sc_add_audio_listener ( avr->term->compositor, &avr->audio_listen ); + while (avr->is_running && !ctx) { + ctx = ts_get_audio_codec_context(avr->ts_implementation); + gf_sleep(16); + } + if (!ctx) { + goto exit; + } + + printf("******* Audio Codec Context = %d/%d, start="LLU", frame_size=%u\n", ctx->time_base.num, ctx->time_base.den, ctx->timecode_frame_start, ctx->frame_size); + samplesReaden = ctx->frame_size * ctx->channels; + + //printf("SETUP input sample size=%u, output samplesize=%u, buffsize=%u, samplesReaden=%u\n", ctx->input_sample_size, ctx->frame_size, sizeof(outbuf), samplesReaden); + // 2 chars are needed for each short + toRead = samplesReaden * 2; + inBuffSize = toRead; + inBuff = gf_malloc(inBuffSize * sizeof(u8)); + while (avr->is_running && !avr->audioCurrentTime) { + gf_sleep(16); + } + myTime = lastCurrentTime = avr->audioCurrentTime; + frameCountSinceReset = 0; + while (avr->is_running) { + u32 readen; + if (U32_ABS(avr->audioCurrentTime, myTime) > 25000) { + //GF_LOG( GF_LOG_ERROR, GF_LOG_MODULE, ("[AVRedirect] Drift in audio : audioCurrentTime = %u, myTime=%u, resync...\n", avr->audioCurrentTime, myTime)); + //myTime = lastCurrentTime = avr->audioCurrentTime; + //frameCountSinceReset = 0; + sendPts = 1; + } + while (toRead <= gf_ringbuffer_available_for_read(avr->pcmAudio) ) { + memset( inBuff, 0, inBuffSize); + memset( outBuff, 0, outBuffSize); + readen = gf_ringbuffer_read(avr->pcmAudio, inBuff, toRead); + assert( readen == toRead ); + if (avr->encode) + { + //u32 oldFrameSize = ctx->frame_size; + //ctx->frame_size = readable / (2 * ctx->channels); + //assert( oldFrameSize <= ctx->frame_size ); + /* buf_size * input_sample_size / output_sample_size */ + int encoded = avcodec_encode_audio(ctx, outBuff, outBuffSize, (const short *) inBuff); + if (encoded < 0) { + GF_LOG(GF_LOG_ERROR, GF_LOG_MODULE, ("[RedirectAV]: failed to encode audio, buffer size=%u, readen=%u, frame_size=%u\n", outBuffSize, readen, ctx->frame_size)); + } else if (encoded > 0) { + ts_encode_audio_frame(avr->ts_implementation, outBuff, encoded, sendPts ? myTime : AV_NOPTS_VALUE ); + frameCountSinceReset++; +#ifdef DUMP_MP3 + fwrite( outBuff, sizeof(char), encoded, mp3); +#endif /* DUMP_MP3 */ + //if (ctx->codec->id == CODEC_ID_MP3) { + /* It seems the MP3 codec only fetches 50% of data... */ + // myTime= lastCurrentTime + (frameCountSinceReset * ctx->frame_size * 500 / ctx->sample_rate); + //} else + //myTime = lastCurrentTime + (frameCountSinceReset * toRead * 1000 / ctx->sample_rate/ ctx->channels / 4); + /* Avoid overflow , multiply by 10 and divide sample rate by 100 instead of *1000 / sampleRate */ + myTime = lastCurrentTime + (frameCountSinceReset * toRead * 10 / (ctx->sample_rate / 100) / ctx->channels / 4); + //sendPts = 0; + sendPts = 1; + } else { + GF_LOG(GF_LOG_INFO, GF_LOG_MODULE, ("[RedirectAV]: no encoded frame.\n")); + //frameCountSinceReset++; + } + //ctx->frame_size = oldFrameSize; + } + } + gf_sleep(1); + } +exit: + GF_LOG(GF_LOG_INFO, GF_LOG_MODULE, ("[AVRedirect] Ending audio encoding thread...\n")); + if (inBuff) + gf_free( inBuff ); + if (outBuff) + gf_free( outBuff ); +#ifdef DUMP_MP3 + if (mp3) + fclose(mp3); +#endif /* DUMP_MP3 */ + if (avr->term) + gf_sc_remove_audio_listener ( avr->term->compositor, &avr->audio_listen ); + return GF_OK; +} +#endif + +/** + * This thread sends the frame to TS mux + * \param Parameter The GF_AVRedirect pointer + */ +static Bool video_encoding_thread_run(void *param) +{ + GF_AVRedirect * avr = (GF_AVRedirect*) param; + u64 currentFrameTimeProcessed = 0, lastEncodedFrameTime = 0; + AVCodecContext * ctx = NULL; + assert( avr ); + gf_sc_add_video_listener ( avr->term->compositor, &avr->video_listen ); + while (avr->is_running && (!ctx || !avr->swsContext)) { + ctx = ts_get_video_codec_context(avr->ts_implementation); + gf_sleep(16); + } + if (!ctx) { + goto exit; + } + printf("******* Video Codec Context = %d/%d, start="LLU"\n", ctx->time_base.num, ctx->time_base.den, ctx->timecode_frame_start); + while (avr->is_running) { + { + gf_mx_p(avr->frameMutex); + while (!avr->frameTime || currentFrameTimeProcessed == avr->frameTime) { + gf_mx_v(avr->frameMutex); + if (!avr->is_running) { + goto exit; + } + gf_mx_p(avr->frameMutex); + gf_sleep(1); + } + assert( currentFrameTimeProcessed != avr->frameTime); + currentFrameTimeProcessed = avr->frameTime; + { + avpicture_fill ( ( AVPicture * ) avr->RGBpicture, avr->frame, PIX_FMT_RGB24, avr->srcWidth, avr->srcHeight ); + assert( avr->swsContext ); + sws_scale ( avr->swsContext, +#ifdef USE_AVCODEC2 + ( const uint8_t * const * ) +#else + ( uint8_t ** ) +#endif /* USE_AVCODEC2 */ + avr->RGBpicture->data, avr->RGBpicture->linesize, + 0, avr->srcHeight, + avr->YUVpicture->data, avr->YUVpicture->linesize ); +#ifdef AVR_DUMP_RAW_AVI + if ( AVI_write_frame ( avr->avi_out, avr->frame, avr->size, 1 ) <0 ) + { + GF_LOG ( GF_LOG_ERROR, GF_LOG_MODULE, ( "[AVRedirect] Error writing video frame\n" ) ); + } +#endif /* AVR_DUMP_RAW_AVI */ + gf_mx_v(avr->frameMutex); + if (avr->encode) + { + int written; + //u32 sysclock = gf_sys_clock(); + avr->YUVpicture->pts = currentFrameTimeProcessed; + //printf("Encoding frame PTS="LLU", frameNum=%u, time=%u...", avr->YUVpicture->pts, avr->YUVpicture->coded_picture_number, currentFrameTimeProcessed); + written = avcodec_encode_video ( ctx, avr->videoOutbuf, avr->videoOutbufSize, avr->YUVpicture ); + //ctx->coded_frame->pts = currentFrameTimeProcessed; + if ( written < 0 ) + { + GF_LOG ( GF_LOG_ERROR, GF_LOG_MODULE, ( "[AVRedirect] Error while encoding video frame =%d\n", written ) ); + } else + if ( written > 0 ) + { + ts_encode_video_frame(avr->ts_implementation, avr->videoOutbuf, written); + } + lastEncodedFrameTime = currentFrameTimeProcessed; + } + } + } + avr->frameTimeEncoded = currentFrameTimeProcessed; + gf_sleep(1); + } /* End of main loop */ +exit: + GF_LOG(GF_LOG_INFO, GF_LOG_MODULE, ("[AVRedirect] Ending video encoding thread...\n")); + if (avr->term) + gf_sc_remove_video_listener ( avr->term->compositor, &avr->video_listen ); + return 0; +} + +#define VIDEO_RATE 400000 + +static Bool start_if_needed(GF_AVRedirect *avr) { + enum PixelFormat pxlFormatForCodec = PIX_FMT_YUV420P; + if (avr->is_open) + return 0; + gf_mx_p(avr->frameMutex); + if (avr->is_open) { + gf_mx_v(avr->frameMutex); + return 0; + } + if (!avr->srcWidth || !avr->srcHeight +#if REDIRECT_AV_AUDIO_ENABLED + || !avr->audioSampleRate || !avr->audioChannels +#endif + ) { + gf_mx_v(avr->frameMutex); + return 3; + } +#ifdef AVR_DUMP_RAW_AVI + avr->avi_out = AVI_open_output_file ( "dump.avi" ); + if ( !avr->avi_out ) + { + gf_mx_v(avr->frameMutex); + GF_LOG ( GF_LOG_ERROR, GF_LOG_MODULE, ( "[AVRedirect] Error opening output AVI file\n" ) ); + return 4; + } +#endif /* AVR_DUMP_RAW_AVI */ + GF_LOG(GF_LOG_INFO, GF_LOG_MODULE, ("[AVRedirect] Initializing...\n")); + if (!avr->pcmAudio) + avr->pcmAudio = gf_ringbuffer_new(32768); + + /* Setting up the video encoding ... */ + { + avr->YUVpicture = avr->RGBpicture = NULL; + avr->videoOutbuf = NULL; +#if REDIRECT_AV_AUDIO_ENABLED + if ( !avr->audioCodec) + { + gf_mx_v(avr->frameMutex); + GF_LOG ( GF_LOG_ERROR, GF_LOG_MODULE, ( "[AVRedirect] Cannot find audio codec.\n" ) ); + return 1; + } +#endif + + if ( !avr->videoCodec ) + { + GF_LOG ( GF_LOG_ERROR, GF_LOG_MODULE, ( "[AVRedirect] Cannot find video codec.\n" ) ); + return 2; + } + + if (avr->videoCodec->id == CODEC_ID_MJPEG) { + pxlFormatForCodec = PIX_FMT_YUVJ420P; + } + + avr->RGBpicture = avcodec_alloc_frame(); + assert ( avr->RGBpicture ); + avr->RGBpicture->data[0] = NULL; + avr->YUVpicture = avcodec_alloc_frame(); + assert ( avr->YUVpicture ); + { + u32 sz = sizeof ( uint8_t ) * avpicture_get_size ( pxlFormatForCodec, avr->srcWidth, avr->srcHeight ); + avr->yuv_data = av_malloc ( sz ); /* size for YUV 420 */ + assert ( avr->yuv_data ); + memset ( avr->yuv_data, 0, sz ); + avpicture_fill ( ( AVPicture* ) avr->YUVpicture, avr->yuv_data, pxlFormatForCodec, avr->srcWidth, avr->srcHeight ); + avr->YUVpicture->coded_picture_number = 0; + } + avr->videoOutbufSize = avr->srcHeight * avr->srcWidth * 4; + avr->videoOutbuf = gf_malloc ( avr->videoOutbufSize ); + memset ( avr->videoOutbuf, 0, avr->videoOutbufSize ); + } +#ifdef AVR_DUMP_RAW_AVI + GF_LOG ( GF_LOG_INFO, GF_LOG_MODULE, ( "[AVRedirect] Open output AVI file %s\n", "dump.avi" ) ); +#endif /* AVR_DUMP_RAW_AVI */ + /* Setting up the TS mux */ + { + /* + GF_Socket * ts_output_udp_sk = gf_sk_new ( GF_SOCK_TYPE_UDP ); + if ( gf_sk_is_multicast_address ( avr->udp_address ) ) + { + e = gf_sk_setup_multicast ( ts_output_udp_sk, avr->udp_address, avr->udp_port, 0, 0, NULL ); + } + else + { + e = gf_sk_bind ( ts_output_udp_sk, NULL, avr->udp_port, avr->udp_address, avr->udp_port, GF_SOCK_REUSE_PORT ); + } + gf_sk_set_buffer_size(ts_output_udp_sk, 0, 188 * TS_PACKETS_PER_UDP_PACKET); + gf_sk_set_block_mode(ts_output_udp_sk, 0);*/ + assert( avr->destination ); + avr->ts_implementation = ts_amux_new(avr, VIDEO_RATE, avr->srcWidth, avr->srcHeight, audioCodecBitrate); + } + /* + if ( e ) + { + GF_LOG ( GF_LOG_ERROR, GF_LOG_MODULE, ( "[AVRedirect] Error while initializing UDP address %s\n", gf_error_to_string ( e ) ) ); + return e; + } + */ + avr->is_open = avr->ts_implementation != NULL; + gf_mx_v(avr->frameMutex); + return avr->is_open ? 1 : 0; +} + + +static GF_Err avr_open ( GF_AVRedirect *avr ) +{ + assert( avr ); + if ( avr->is_open) + return GF_OK; + if (!avr->is_running) { + avr->is_running = 1; + gf_th_run(avr->encodingThread, video_encoding_thread_run, avr); +#if REDIRECT_AV_AUDIO_ENABLED + gf_th_run(avr->audioEncodingThread, audio_encoding_thread_run, avr); +#endif + } + return GF_OK; +} + + + +static void avr_on_audio_frame ( void *udta, char *buffer, u32 buffer_size, u32 time, u32 delay_ms ) +{ + GF_AVRedirect *avr = ( GF_AVRedirect * ) udta; + if (start_if_needed(avr)) + return; +#ifdef AVR_DUMP_RAW_AVI + AVI_write_audio ( avr->avi_out, buffer, buffer_size ); +#endif /* AVR_DUMP_RAW_AVI */ + { + gf_ringbuffer_write(avr->pcmAudio, buffer, buffer_size); + avr->audioCurrentTime = time - delay_ms; + } +} + +static void avr_on_audio_reconfig ( void *udta, u32 samplerate, u32 bits_per_sample, u32 nb_channel, u32 channel_cfg ) +{ + GF_AVRedirect *avr = ( GF_AVRedirect * ) udta; + if (avr->audioSampleRate != samplerate || avr->audioChannels != nb_channel) { + GF_LOG(GF_LOG_INFO, GF_LOG_MODULE, ("[AVRedirect] Audio %u Hz, bitsPerSample=%u, nbchannels=%u\n", samplerate, bits_per_sample, nb_channel)); +#ifdef AVR_DUMP_RAW_AVI + AVI_set_audio ( avr->avi_out, nb_channel, samplerate, bits_per_sample, WAVE_FORMAT_PCM, 0 ); +#endif /* AVR_DUMP_RAW_AVI */ + avr->audioChannels = nb_channel; + avr->audioSampleRate = samplerate; + } +} + +static void avr_on_video_frame ( void *udta, u32 time ) +{ + u32 i, j; + GF_Err e; + GF_VideoSurface fb; + GF_AVRedirect *avr = ( GF_AVRedirect * ) udta; + if (start_if_needed(avr)) + return; + gf_mx_p(avr->frameMutex); + e = gf_sc_get_screen_buffer ( avr->term->compositor, &fb, 0 ); + if ( e ) + { + GF_LOG ( GF_LOG_ERROR, GF_LOG_MODULE, ( "[AVRedirect] Error grabing frame buffer %s\n", gf_error_to_string ( e ) ) ); + return; + } + /*convert frame*/ + for ( i=0; iframe + i * fb.width * 3; + char *src = fb.video_buffer + i * fb.pitch_y; + for ( j=0; jframeTime = time; + gf_mx_v(avr->frameMutex); + gf_sc_release_screen_buffer ( avr->term->compositor, &fb ); + GF_LOG ( GF_LOG_DEBUG, GF_LOG_MODULE, ( "[AVRedirect] Writing video frame\n" ) ); +} + +static void avr_on_video_reconfig ( void *udta, u32 width, u32 height ) +{ + + GF_AVRedirect *avr = ( GF_AVRedirect * ) udta; + + if ((avr->srcHeight != height || avr->srcWidth != width)) + { +#ifdef AVR_DUMP_RAW_AVI + char comp[5]; + comp[0] = comp[1] = comp[2] = comp[3] = comp[4] = 0; + AVI_set_video ( avr->avi_out, width, height, 30, comp ); +#endif /* AVR_DUMP_RAW_AVI */ + GF_LOG ( GF_LOG_INFO, GF_LOG_MODULE, ( "[AVRedirect] Video reconfig width %d height %d\n", width, height ) ); + gf_mx_p(avr->frameMutex); + if ( avr->frame ) gf_free ( avr->frame ); + avr->size = 3*width*height; + avr->frame = gf_malloc ( sizeof ( char ) *avr->size ); + avr->srcWidth = width; + avr->srcHeight = height; + avr->swsContext = sws_getCachedContext ( avr->swsContext, avr->srcWidth, avr->srcHeight, PIX_FMT_RGB24, avr->srcWidth, avr->srcHeight, PIX_FMT_YUV420P, SWS_BICUBIC, NULL, NULL, NULL ); + gf_mx_v(avr->frameMutex); + } +} + + +#ifdef MULTITHREAD_REDIRECT_AV +/** + * This thread sends the TS packets over the network + * \param Parameter The GF_AVRedirect pointer + */ +static Bool ts_thread_run(void *param) +{ + GF_Err e; + GF_AVRedirect * avr = (GF_AVRedirect*) param; + assert( avr ); + gf_mx_p(avr->tsMutex); + while (!avr->frameTimeEncoded && avr->is_running) { + gf_mx_v(avr->tsMutex); + gf_sleep(1); + gf_mx_p(avr->tsMutex); + } + printf("avr->frameTimeEncoded="LLU"\n", avr->frameTimeEncoded); + + while (avr->is_running) { + e = sendTSMux(avr); + gf_mx_v(avr->tsMutex); + gf_mx_p(avr->tsMutex); + } + gf_mx_v(avr->tsMutex); + return 0; +} +#endif /* MULTITHREAD_REDIRECT_AV */ + +static const char * possibleCodecs = "supported codecs : MPEG-1, MPEG-2, MPEG-4, MSMPEG-4, H263, H263I, H263P, RV10, MJPEG"; + +/*#define DEFAULT_UDP_OUT_ADDRESS "127.0.0.1" +#define DEFAULT_UDP_OUT_PORT 1234 +#define DEFAULT_UDP_OUT_PORT_STR "1234"*/ + +#define AVR_DEFAULT_DESTINATION "udp://224.0.0.1:1234" + +#include + + +static void avr_close ( GF_AVRedirect *avr ) +{ + if ( !avr->is_open ) return; + avr->is_open = 0; +#ifdef AVR_DUMP_RAW_AVI + GF_LOG ( GF_LOG_INFO, GF_LOG_MODULE, ( "[AVRedirect] Closing output AVI file\n" ) ); + AVI_close ( avr->avi_out ); + avr->avi_out = NULL; +#endif /* AVR_DUMP_RAW_AVI */ +} + +static Bool avr_on_event ( void *udta, GF_Event *evt, Bool consumed_by_compositor ) +{ + GF_AVRedirect *avr = udta; + switch ( evt->type ) + { + case GF_EVENT_CONNECT: + if ( evt->connect.is_connected ) + { + avr_open ( avr ); + } + else + { + avr_close ( avr ); + } + break; + } + return 0; +} + +static const char * AVR_ENABLED_OPTION = "Enabled"; + +//static const char * AVR_UDP_PORT_OPTION = "udp.port"; + +//static const char * AVR_UDP_ADDRESS_OPTION = "udp.address"; + +static const char * AVR_DESTINATION = "destination"; + +static Bool avr_process ( GF_TermExt *termext, u32 action, void *param ) +{ + const char *opt; + GF_AVRedirect *avr = termext->udta; + + switch ( action ) + { + case GF_TERM_EXT_START: + avr->term = ( GF_Terminal * ) param; + opt = gf_modules_get_option ( ( GF_BaseInterface* ) termext, moduleName, AVR_ENABLED_OPTION ); + if ( !opt ) + gf_modules_set_option ( ( GF_BaseInterface* ) termext, moduleName, AVR_ENABLED_OPTION, "no" ); + if ( !opt || strcmp ( opt, "yes" ) ) return 0; + opt = gf_modules_get_option ( ( GF_BaseInterface* ) termext, moduleName, AVR_VIDEO_CODEC_OPTION ); + avr->globalLock = gf_global_resource_lock("AVRedirect:output"); + if (!avr->globalLock) { + GF_LOG(GF_LOG_ERROR, GF_LOG_MODULE, ("Failed to lock global resource 'AVRedirect:output', another GPAC instance must be running, disabling AVRedirect\n")); + return 0; + } + /* must be called before using avcodec lib */ + avcodec_init(); + + /* register all the codecs */ + avcodec_register_all(); + if ( !opt ) + gf_modules_set_option ( ( GF_BaseInterface* ) termext, moduleName, AVR_VIDEO_CODEC_OPTION, possibleCodecs ); + { + if ( !opt ) + { + avr->videoCodec = avcodec_find_encoder ( CODEC_ID_MPEG2VIDEO ); + } + else if ( !strcmp ( "MPEG-1", opt ) ) + { + avr->videoCodec=avcodec_find_encoder ( CODEC_ID_MPEG1VIDEO ); + } + else if ( !strcmp ( "MPEG-2", opt ) ) + { + avr->videoCodec=avcodec_find_encoder ( CODEC_ID_MPEG2VIDEO ); + } + else if ( !strcmp ( "MPEG-4", opt ) ) + { + avr->videoCodec=avcodec_find_encoder ( CODEC_ID_MPEG4 ); + } + else if ( !strcmp ( "MSMPEG-4", opt ) ) + { + avr->videoCodec=avcodec_find_encoder ( CODEC_ID_MSMPEG4V3 ); + } + else if ( !strcmp ( "H263", opt ) ) + { + avr->videoCodec=avcodec_find_encoder ( CODEC_ID_H263 ); + } + else if ( !strcmp ( "RV10", opt ) ) + { + avr->videoCodec = avcodec_find_encoder ( CODEC_ID_RV10 ); + } + else if ( !strcmp ( "H263P", opt ) ) + { + avr->videoCodec=avcodec_find_encoder ( CODEC_ID_H263P ); + } + else if ( !strcmp ( "H263I", opt ) ) + { + avr->videoCodec=avcodec_find_encoder ( CODEC_ID_H263I ); + } + else if ( !strcmp( "MJPEG", opt)) + { + avr->videoCodec=avcodec_find_encoder( CODEC_ID_MJPEG); + } + else + { + GF_LOG ( GF_LOG_ERROR, GF_LOG_MODULE, ( "[AVRedirect] Not a known Video codec : %s, using MPEG-2 video instead, %s\n", opt, possibleCodecs ) ); + avr->videoCodec = avcodec_find_encoder ( CODEC_ID_MPEG2VIDEO ); + } + } +#if REDIRECT_AV_AUDIO_ENABLED + avr->audioCodec = avcodec_find_encoder(CODEC_ID_MP2); +#endif + /* + opt = gf_modules_get_option ( ( GF_BaseInterface* ) termext, moduleName, AVR_UDP_ADDRESS_OPTION); + if (!opt) { + gf_modules_set_option ( ( GF_BaseInterface* ) termext, moduleName, AVR_UDP_ADDRESS_OPTION, DEFAULT_UDP_OUT_ADDRESS); + avr->udp_address = DEFAULT_UDP_OUT_ADDRESS; + GF_LOG ( GF_LOG_ERROR, GF_LOG_MODULE, ( "[AVRedirect] %s not set, using %s\n", AVR_UDP_ADDRESS_OPTION, DEFAULT_UDP_OUT_ADDRESS ) ); + } else + avr->udp_address = opt; + opt = gf_modules_get_option ( ( GF_BaseInterface* ) termext, moduleName, AVR_UDP_PORT_OPTION); + if (opt) { + char *endPtr = NULL; + unsigned int x = strtoul(opt, &endPtr, 10); + if (endPtr == opt || x > 65536) { + printf("Failed to parse : %s\n", opt); + opt = NULL; + } else + avr->udp_port = (u16) x; + } + if (!opt) { + gf_modules_set_option ( ( GF_BaseInterface* ) termext, moduleName, AVR_UDP_PORT_OPTION, DEFAULT_UDP_OUT_PORT_STR); + GF_LOG ( GF_LOG_ERROR, GF_LOG_MODULE, ( "[AVRedirect] %s is not set or valid, using %s\n", AVR_UDP_PORT_OPTION, DEFAULT_UDP_OUT_PORT_STR ) ); + avr->udp_port = DEFAULT_UDP_OUT_PORT; + } + */ + opt = gf_modules_get_option ( ( GF_BaseInterface* ) termext, moduleName, AVR_DESTINATION); + if (!opt) { + gf_modules_set_option ( ( GF_BaseInterface* ) termext, moduleName, AVR_DESTINATION, AVR_DEFAULT_DESTINATION); + avr->destination = AVR_DEFAULT_DESTINATION; + GF_LOG ( GF_LOG_ERROR, GF_LOG_MODULE, ( "[AVRedirect] %s not set, using %s\n", AVR_DESTINATION, AVR_DEFAULT_DESTINATION ) ); + } else + avr->destination = opt; + avr->audio_listen.udta = avr; + avr->audio_listen.on_audio_frame = avr_on_audio_frame; + avr->audio_listen.on_audio_reconfig = avr_on_audio_reconfig; + avr->video_listen.udta = avr; + avr->video_listen.on_video_frame = avr_on_video_frame; + avr->video_listen.on_video_reconfig = avr_on_video_reconfig; + + avr->term_listen.udta = avr; + avr->term_listen.on_event = avr_on_event; + gf_term_add_event_filter ( avr->term, &avr->term_listen ); + return 1; + + case GF_TERM_EXT_STOP: + gf_term_remove_event_filter ( avr->term, &avr->term_listen ); + avr->term = NULL; + break; + + /*if not threaded, perform our tasks here*/ + case GF_TERM_EXT_PROCESS: + break; + } + return 0; +} + + +GF_TermExt *avr_new() +{ + GF_TermExt *dr; + GF_AVRedirect *uir; + GF_SAFEALLOC ( dr, GF_TermExt ); + GF_REGISTER_MODULE_INTERFACE ( dr, GF_TERM_EXT_INTERFACE, "GPAC Output Recorder", "gpac distribution" ); + + GF_SAFEALLOC ( uir, GF_AVRedirect ); + dr->process = avr_process; + dr->udta = uir; + uir->encodingMutex = gf_mx_new("RedirectAV_encodingMutex"); + assert( uir->encodingMutex); + uir->frameMutex = gf_mx_new("RedirectAV_frameMutex"); + uir->encodingThread = gf_th_new("RedirectAV_EncodingThread"); + uir->audioEncodingThread = gf_th_new("RedirectAV_AudioEncodingThread"); + uir->encode = 1; + uir->is_open = 0; + uir->is_running = 0; + return dr; +} + + +void avr_delete ( GF_BaseInterface *ifce ) +{ + GF_TermExt *dr = ( GF_TermExt * ) ifce; + GF_AVRedirect *avr = dr->udta; + avr->is_running = 0; + /* Ensure encoding is finished */ + gf_mx_p(avr->frameMutex); + gf_mx_v(avr->frameMutex); + gf_sleep(200); + gf_th_stop(avr->encodingThread); + gf_mx_del(avr->frameMutex); + avr->frameMutex = NULL; + gf_th_del(avr->encodingThread); + avr->encodingThread = NULL; + gf_mx_del(avr->encodingMutex); + avr->encodingMutex = NULL; + if ( avr->ts_implementation ) + { + ts_amux_del(avr->ts_implementation); + avr->ts_implementation = NULL; + } + avr->videoCodec = NULL; + if ( avr->YUVpicture ) + { + av_free ( avr->YUVpicture ); + } + if ( avr->yuv_data ) + av_free ( avr->yuv_data ); + avr->yuv_data = NULL; + avr->YUVpicture = NULL; + if ( avr->RGBpicture ) + { + av_free ( avr->RGBpicture ); + } + avr->RGBpicture = NULL; + if ( avr->swsContext ) + sws_freeContext ( avr->swsContext ); + avr->swsContext = NULL; + if ( avr->videoOutbuf ) + gf_free ( avr->videoOutbuf ); + avr->videoOutbuf = NULL; + if ( avr->pcmAudio ) + gf_ringbuffer_del(avr->pcmAudio); + avr->pcmAudio = NULL; + gf_global_resource_unlock(avr->globalLock); + avr->globalLock = NULL; + if (avr->audioEncodingThread){ + gf_th_stop(avr->audioEncodingThread); + gf_th_del(avr->audioEncodingThread); + } + avr->audioEncodingThread = NULL; + gf_free ( avr ); + gf_free ( dr ); +} + +GF_EXPORT +const u32 *QueryInterfaces() +{ + static u32 si [] = + { + GF_TERM_EXT_INTERFACE, + 0 + }; + return si; +} + +GF_EXPORT +GF_BaseInterface *LoadInterface ( u32 InterfaceType ) +{ + if ( InterfaceType == GF_TERM_EXT_INTERFACE ) return ( GF_BaseInterface * ) avr_new(); + return NULL; +} + +GF_EXPORT +void ShutdownInterface ( GF_BaseInterface *ifce ) +{ + switch ( ifce->InterfaceType ) + { + case GF_TERM_EXT_INTERFACE: + avr_delete ( ifce ); + break; + } +} diff --git a/modules/rtp_in/Makefile b/modules/rtp_in/Makefile index 194fc52..ed25165 100644 --- a/modules/rtp_in/Makefile +++ b/modules/rtp_in/Makefile @@ -32,7 +32,7 @@ all: $(LIB) $(LIB): $(OBJS) $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/$@ $(OBJS) -L../../bin/gcc -lgpac $(EXTRALIBS) ifeq ($(STATICBUILD),yes) - $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/gm_rtp_in-static.so $(OBJS) -L../../bin/gcc -lgpac_static $(EXTRALIBS) + $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/gm_rtp_in-static.$(DYN_LIB_SUFFIX) $(OBJS) -L../../bin/gcc -lgpac_static $(EXTRALIBS) endif diff --git a/modules/rtp_in/rtp_stream.c b/modules/rtp_in/rtp_stream.c index d42ecf0..e7bf1f0 100644 --- a/modules/rtp_in/rtp_stream.c +++ b/modules/rtp_in/rtp_stream.c @@ -135,6 +135,8 @@ RTPStream *RP_NewStream(RTPClient *rtp, GF_SDPMedia *media, GF_SDPInfo *sdp, RTP Bool force_bcast = 0; Double Start, End; Float CurrentTime; + u16 rvc_predef = 0; + char *rvc_config_att = NULL; u32 s_port_first, s_port_last; GF_X_Attribute *att; Bool is_migration = 0; @@ -166,6 +168,10 @@ RTPStream *RP_NewStream(RTPClient *rtp, GF_SDPMedia *media, GF_SDPInfo *sdp, RTP } else if (!stricmp(att->Name, "x-server-port") ) { sscanf(att->Value, "%u-%u", &s_port_first, &s_port_last); + } else if (!stricmp(att->Name, "rvc-config-predef")) { + rvc_predef = atoi(att->Value); + } else if (!stricmp(att->Name, "rvc-config")) { + rvc_config_att = att->Value; } } @@ -269,6 +275,40 @@ RTPStream *RP_NewStream(RTPClient *rtp, GF_SDPMedia *media, GF_SDPInfo *sdp, RTP gf_rtp_set_info_rtp(tmp->rtp_ch, rtp_seq, rtp_time, ssrc); tmp->status = RTP_SessionResume; } + + if (rvc_predef) { + tmp->depacketizer->sl_map.rvc_predef = rvc_predef ; + } else if (rvc_config_att) { + char *rvc_data=NULL; + u32 rvc_size; + Bool is_gz = 0; + if (!strncmp(rvc_config_att, "data:application/rvc-config+xml", 32) && strstr(rvc_config_att, "base64") ) { + char *data = strchr(rvc_config_att, ','); + if (data) { + rvc_size = strlen(data) * 3 / 4 + 1; + rvc_data = gf_malloc(sizeof(char) * rvc_size); + rvc_size = gf_base64_decode(data, strlen(data), rvc_data, rvc_size); + rvc_data[rvc_size] = 0; + } + if (!strncmp(rvc_config_att, "data:application/rvc-config+xml+gz", 35)) is_gz = 1; + } else if (!strnicmp(rvc_config_att, "http://", 7) || !strnicmp(rvc_config_att, "https://", 8) ) { + char *mime; + if (gf_dm_get_file_memory(rvc_config_att, &rvc_data, &rvc_size, &mime) == GF_OK) { + if (mime && strstr(mime, "+gz")) is_gz = 1; + if (mime) gf_free(mime); + } + } + if (rvc_data) { + if (is_gz) { + gf_gz_decompress_payload(rvc_data, rvc_size, &tmp->depacketizer->sl_map.rvc_config, &tmp->depacketizer->sl_map.rvc_config_size); + gf_free(rvc_data); + } else { + tmp->depacketizer->sl_map.rvc_config = rvc_data; + tmp->depacketizer->sl_map.rvc_config_size = rvc_size; + } + } + } + return tmp; } diff --git a/modules/rtp_in/sdp_fetch.c b/modules/rtp_in/sdp_fetch.c index 47f470a..6551d6f 100644 --- a/modules/rtp_in/sdp_fetch.c +++ b/modules/rtp_in/sdp_fetch.c @@ -101,25 +101,23 @@ void SDP_NetIO(void *cbk, GF_NETIO_Parameter *param) case GF_NETIO_DATA_TRANSFERED: if (sdp->original_url) { u32 sdp_size; - gf_dm_sess_get_stats(rtp->dnload, NULL, NULL, &sdp_size, NULL, NULL, NULL); - if (!sdp_size) - break; - } - - { - const char *szFile = gf_dm_sess_get_cache_name(rtp->dnload); - if (!szFile) { - e = GF_SERVICE_ERROR; - } else { - e = GF_OK; - RP_SDPFromFile(rtp, (char *) szFile, sdp->chan); - gf_free(sdp->remote_url); - if (sdp->original_url) gf_free(sdp->original_url); - gf_free(sdp); - rtp->sdp_temp = NULL; - return; + e = gf_dm_sess_get_stats(rtp->dnload, NULL, NULL, &sdp_size, NULL, NULL, NULL); + if (sdp_size) { + const char *szFile = gf_dm_sess_get_cache_name(rtp->dnload); + if (!szFile) { + e = GF_SERVICE_ERROR; + } else { + e = GF_OK; + RP_SDPFromFile(rtp, (char *) szFile, sdp->chan); + gf_free(sdp->remote_url); + if (sdp->original_url) gf_free(sdp->original_url); + gf_free(sdp); + rtp->sdp_temp = NULL; + return; + } } } + break; default: if (e == GF_OK) return; } diff --git a/modules/rtp_in/sdp_load.c b/modules/rtp_in/sdp_load.c index 6f7a3ae..7d691d4 100644 --- a/modules/rtp_in/sdp_load.c +++ b/modules/rtp_in/sdp_load.c @@ -186,6 +186,15 @@ static GF_ObjectDescriptor *RP_GetChannelOD(RTPStream *ch, u32 ch_idx) memcpy(esd->decoderConfig->decoderSpecificInfo->data, ch->depacketizer->sl_map.config, sizeof(char) * ch->depacketizer->sl_map.configSize); esd->decoderConfig->decoderSpecificInfo->dataLength = ch->depacketizer->sl_map.configSize; } + if (ch->depacketizer->sl_map.rvc_predef) { + esd->decoderConfig->predefined_rvc_config = ch->depacketizer->sl_map.rvc_predef; + } else if (ch->depacketizer->sl_map.rvc_config) { + esd->decoderConfig->rvc_config = (GF_DefaultDescriptor *) gf_odf_desc_new(GF_ODF_DSI_TAG); + esd->decoderConfig->rvc_config->data = ch->depacketizer->sl_map.rvc_config; + esd->decoderConfig->rvc_config->dataLength = ch->depacketizer->sl_map.rvc_config_size; + ch->depacketizer->sl_map.rvc_config = NULL; + ch->depacketizer->sl_map.rvc_config_size = 0; + } gf_list_add(od->ESDescriptors, esd); return od; } diff --git a/modules/rvc_dec/Makefile b/modules/rvc_dec/Makefile new file mode 100644 index 0000000..008d85f --- /dev/null +++ b/modules/rvc_dec/Makefile @@ -0,0 +1,56 @@ +include ../../config.mak + +vpath %.c $(SRC_PATH)/modules/rvc_dec + +CFLAGS= $(OPTFLAGS) -I$(SRC_PATH)/include + +ifeq ($(DEBUGBUILD), yes) +CFLAGS+=-g +LDFLAGS+=-g +endif + +ifeq ($(GPROFBUILD), yes) +CFLAGS+=-pg +LDFLAGS+=-pg +endif + +LDFLAGS+=-lRVCDecoder + +#common obj +OBJS= rvc_dec.o + +SRCS := $(OBJS:.o=.c) + +LIB=gm_rvc_dec.$(DYN_LIB_SUFFIX) + + +all: $(LIB) + + +$(LIB): $(OBJS) + $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/$@ $(OBJS) $(EXTRALIBS) -L../../bin/gcc -lgpac + + +%.o: %.c + $(CC) $(CFLAGS) -c -o $@ $< + + +clean: + rm -f $(OBJS) ../../bin/gcc/$(LIB) + +dep: depend + +depend: + rm -f .depend + $(CC) -MM $(CFLAGS) $(SRCS) 1>.depend + +distclean: clean + rm -f Makefile.bak .depend + + + +# include dependency files if they exist +# +ifneq ($(wildcard .depend),) +include .depend +endif diff --git a/modules/rvc_dec/rvc_dec.c b/modules/rvc_dec/rvc_dec.c new file mode 100644 index 0000000..cb7c8ce --- /dev/null +++ b/modules/rvc_dec/rvc_dec.c @@ -0,0 +1,447 @@ +/* + * GPAC - Multimedia Framework C SDK + * + * Copyright (c) Telecom ParisTech 2010- + * Author(s): Jean Le Feuvre + * All rights reserved + * + * This file is part of GPAC / OpenSVC Decoder module + * + * GPAC is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * GPAC 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; see the file COPYING. If not, write to + * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + * + */ + + +#include +#include +#include + +#ifdef WIN32 +#define DllImport __declspec( dllimport ) + + +#if !defined(__GNUC__) +# pragma comment(lib, "RVCDecoder") +#endif + +#else +#define DllImport +#endif + + + +typedef struct{ + int Width; + int Height; + unsigned char* pY[1]; + unsigned char* pU[1]; + unsigned char* pV[1]; +} RVCFRAME; + + +DllImport int rvc_init(char* XDF, char* VTLFolder, int isAVCFile); +DllImport int rvc_decode(unsigned char* nal, int nal_length, char *outBuffer, int newBuffer); +DllImport void rvc_close(); + + +typedef struct +{ + u16 ES_ID; + u32 width, stride, height, out_size, pixel_ar, layer; + Bool first_frame; + + u32 nalu_size_length; + + void *codec; +} RVCDec; + + +static GF_Err RVCD_AttachStream(GF_BaseDecoder *ifcg, GF_ESD *esd) +{ + u32 i, count; + s32 res; + char Picture; + RVCDec *ctx = (RVCDec*) ifcg->privateStack; + char* VTLFolder; + char *XDF_doc = NULL; + int isAVCFile; + + /*not supported in this version*/ + if (esd->dependsOnESID) return GF_NOT_SUPPORTED; + + ctx->ES_ID = esd->ESID; + ctx->width = ctx->height = ctx->out_size = 0; + + VTLFolder = (char *)gf_modules_get_option((GF_BaseInterface *)ifcg, "RVCDecoder", "VTLPath"); + if (!VTLFolder) { + GF_LOG(GF_LOG_ERROR, GF_LOG_CODEC, ("[RVC_Dec] Cannot locate VTL: path is unknown. Please indicate path in GPAC config file:\n[RVCDecoder]\nVTLPath=PATH\n")); + return GF_SERVICE_ERROR; + } else { + GF_LOG(GF_LOG_INFO, GF_LOG_CODEC, ("[RVC_Dec] Using VTL in %s\n", VTLFolder)); + } + + /*initialize RVC*/ + if (esd->decoderConfig->predefined_rvc_config) { + char opt[100], *path; + FILE *f; + u32 size; + sprintf(opt, "Predefined_%d", esd->decoderConfig->predefined_rvc_config); + path = gf_modules_get_option((GF_BaseInterface *)ifcg, "RVCDecoder", (const char *)opt); + if (!opt) return GF_NOT_SUPPORTED; + f = fopen(path, "rt"); + if (!f) return GF_NOT_SUPPORTED; + fseek(f, 0, SEEK_END); + size = ftell(f); + fseek(f, 0, SEEK_SET); + XDF_doc = gf_malloc(sizeof(char)*(size+1)); + if (!XDF_doc) { + fclose(f); + return GF_OUT_OF_MEM; + } + fread(XDF_doc, 1, size, f); + fclose(f); + XDF_doc[size]=0; + } else { + if (!esd->decoderConfig->rvc_config) + return GF_NOT_SUPPORTED; + XDF_doc = esd->decoderConfig->rvc_config->data; + } + + + if(esd->decoderConfig->objectTypeIndication==GPAC_OTI_VIDEO_AVC) isAVCFile = 1; + else isAVCFile = 0; + + rvc_init(XDF_doc, VTLFolder, isAVCFile); //->data contains the uncompressed XDF + + /*free data*/ + gf_free(XDF_doc); + if (esd->decoderConfig->rvc_config) { + esd->decoderConfig->rvc_config->data = NULL; + esd->decoderConfig->rvc_config->dataLength = 0; + } + + /*decoder config not known, output buffers will be reconfigured at run-time*/ + if (!esd->decoderConfig->decoderSpecificInfo || !esd->decoderConfig->decoderSpecificInfo->data) + return GF_OK; + + /*initialize the decoder */ + if (esd->decoderConfig->objectTypeIndication==GPAC_OTI_VIDEO_AVC) { + GF_AVCConfig *cfg = gf_odf_avc_cfg_read(esd->decoderConfig->decoderSpecificInfo->data, esd->decoderConfig->decoderSpecificInfo->dataLength); + if (!cfg) return GF_NON_COMPLIANT_BITSTREAM; + ctx->nalu_size_length = cfg->nal_unit_size; + + /*decode all NALUs*/ + count = gf_list_count(cfg->sequenceParameterSets); + for (i=0; isequenceParameterSets, i); + + gf_avc_get_sps_info(slc->data, slc->size, &slc->id, &w, &h, &par_n, &par_d); + /*by default use the base layer*/ + if (!i) { + if ((ctx->widthheightwidth = w; + ctx->height = h; + if ( ((s32)par_n>0) && ((s32)par_d>0) ) + ctx->pixel_ar = (par_n<<16) || par_d; + } + } + /* call decode - warning for AVC: the data blocks do not contain startcode prefixes (00000001), you may need to add them) */ + + res = rvc_decode(slc->data, slc->size, &Picture, 1); + if (res<0) { + GF_LOG(GF_LOG_ERROR, GF_LOG_CODEC, ("[SVC Decoder] Error decoding SPS %d\n", res)); + } + + } + + count = gf_list_count(cfg->pictureParameterSets); + for (i=0; ipictureParameterSets, i); + /*same remark as above*/ + + + res = rvc_decode(slc->data, slc->size, &Picture, 1); + if (res<0) { + GF_LOG(GF_LOG_ERROR, GF_LOG_CODEC, ("[SVC Decoder] Error decoding PPS %d\n", res)); + } + + } + + gf_odf_avc_cfg_del(cfg); + } else if (esd->decoderConfig->objectTypeIndication==GPAC_OTI_VIDEO_MPEG4_PART2) { + GF_M4VDecSpecInfo dsi; + GF_Err e; + /*decode DSI*/ + e = gf_m4v_get_config(esd->decoderConfig->decoderSpecificInfo->data, esd->decoderConfig->decoderSpecificInfo->dataLength, &dsi); + if (e) return e; + if (!dsi.width || !dsi.height) return GF_NON_COMPLIANT_BITSTREAM; + ctx->width = dsi.width; + ctx->height = dsi.height; + ctx->pixel_ar = (dsi.par_num<<16) | dsi.par_den; + + + res = rvc_decode(esd->decoderConfig->decoderSpecificInfo->data, esd->decoderConfig->decoderSpecificInfo->dataLength, &Picture, 1); + if (res<0) { + GF_LOG(GF_LOG_ERROR, GF_LOG_CODEC, ("[SVC Decoder] Error decoding PPS %d\n", res)); + } + + + } else { + /*unknown type, do what you want*/ + + res = rvc_decode(esd->decoderConfig->decoderSpecificInfo->data, esd->decoderConfig->decoderSpecificInfo->dataLength, &Picture, 1); + if (res<0) { + GF_LOG(GF_LOG_ERROR, GF_LOG_CODEC, ("[SVC Decoder] Error decoding PPS %d\n", res)); + } + + } + /*adjust stride to what you decoder uses*/ + ctx->stride = ctx->width; + /*precompute output buffer size*/ + ctx->out_size = ctx->stride * ctx->height * 3 / 2; + return GF_OK; +} +static GF_Err RVCD_DetachStream(GF_BaseDecoder *ifcg, u16 ES_ID) +{ + RVCDec *ctx = (RVCDec*) ifcg->privateStack; + + //close RVC decoder + rvc_close(); + ctx->codec = NULL; + ctx->width = ctx->height = ctx->out_size = 0; + return GF_OK; +} +static GF_Err RVCD_GetCapabilities(GF_BaseDecoder *ifcg, GF_CodecCapability *capability) +{ + RVCDec *ctx = (RVCDec*) ifcg->privateStack; + + switch (capability->CapCode) { + case GF_CODEC_RESILIENT: + capability->cap.valueInt = 1; + break; + case GF_CODEC_WIDTH: + capability->cap.valueInt = ctx->width; + break; + case GF_CODEC_HEIGHT: + capability->cap.valueInt = ctx->height; + break; + case GF_CODEC_STRIDE: + capability->cap.valueInt = ctx->stride; + break; + case GF_CODEC_PAR: + capability->cap.valueInt = ctx->pixel_ar; + break; + case GF_CODEC_OUTPUT_SIZE: + capability->cap.valueInt = ctx->out_size; + break; + case GF_CODEC_PIXEL_FORMAT: + capability->cap.valueInt = GF_PIXEL_YV12; + break; + case GF_CODEC_BUFFER_MIN: + capability->cap.valueInt = 1; + break; + case GF_CODEC_BUFFER_MAX: + capability->cap.valueInt = 2; + break; + case GF_CODEC_PADDING_BYTES: + capability->cap.valueInt = 32; + break; + case GF_CODEC_REORDER: + capability->cap.valueInt = 1; + break; + /*not known at our level...*/ + case GF_CODEC_CU_DURATION: + default: + capability->cap.valueInt = 0; + break; + } + return GF_OK; +} +static GF_Err RVCD_SetCapabilities(GF_BaseDecoder *ifcg, GF_CodecCapability capability) +{ + return GF_NOT_SUPPORTED; +} + + +int bookmark = 0; + +static GF_Err RVCD_ProcessData(GF_MediaDecoder *ifcg, + char *inBuffer, u32 inBufferLength, + u16 ES_ID, + char *outBuffer, u32 *outBufferLength, + u8 PaddingBits, u32 mmlevel) +{ + s32 got_pic; + RVCDec *ctx = (RVCDec*) ifcg->privateStack; + + if (!ES_ID || (ES_ID!=ctx->ES_ID) /*|| !ctx->codec*/) { + *outBufferLength = 0; + return GF_OK; + } + if (*outBufferLength < ctx->out_size) { + *outBufferLength = ctx->out_size; + return GF_BUFFER_TOO_SMALL; + } + + //if your decoder outputs directly in the memory passed, setup pointers for your decoder output picture + + got_pic = 0; + + if (ctx->nalu_size_length) { + u32 i, nalu_size = 0; + u8 *ptr = inBuffer; + int nalNumber = 1; + + while (inBufferLength) { + for (i=0; inalu_size_length; i++) { + nalu_size = (nalu_size<<8) + ptr[i]; + } + ptr += ctx->nalu_size_length; + + //same remark as above regardin start codes + + if(nalNumber > bookmark){ + got_pic = rvc_decode(ptr, nalu_size, outBuffer, !got_pic); + bookmark ++; + if(got_pic>1){ + return GF_PACKED_FRAMES; + } + }else if(nalNumber == bookmark){ + got_pic = rvc_decode(NULL, 0, outBuffer, !got_pic); + if(got_pic>1){ + return GF_PACKED_FRAMES; + } + } + nalNumber ++; + + ptr += nalu_size; + if (inBufferLength < nalu_size + ctx->nalu_size_length) + break; + + inBufferLength -= nalu_size + ctx->nalu_size_length; + } + bookmark = 0; + + } else { + u32 nalu_size = 0; + u8 *ptr = inBuffer; + + + got_pic = rvc_decode(ptr, inBufferLength, outBuffer, 1); + } + + //if (got_pic!=1) return GF_OK; + + /*if size changed during the decoding, resize the composition buffer*/ + /*if ((pic.Width != ctx->width) || (pic.Height!=ctx->height)) + { + ctx->width = pic.Width; + ctx->stride = pic.Width; + ctx->height = pic.Height; + ctx->out_size = ctx->stride * ctx->height * 3 / 2; + *outBufferLength = ctx->out_size; + return GF_BUFFER_TOO_SMALL; + } + + *outBufferLength = ctx->out_size;*/ + + /*if your decoder does not output directly in the memory passed, copy over the data*/ + + /*memcpy(outBuffer, pic.pY[0], ctx->stride*ctx->height); + memcpy(outBuffer + ctx->stride * ctx->height, pic.pU[0], ctx->stride*ctx->height/4); + memcpy(outBuffer + 5*ctx->stride * ctx->height/4, pic.pV[0], ctx->stride*ctx->height/4);*/ + + if(got_pic>1) return GF_PACKED_FRAMES; + return GF_OK; +} + +static u32 RVCD_CanHandleStream(GF_BaseDecoder *dec, u32 StreamType, GF_ESD *esd, u8 PL) +{ + if (StreamType != GF_STREAM_VISUAL) return GF_CODEC_NOT_SUPPORTED; + /*media type query*/ + if (!esd) return GF_CODEC_STREAM_TYPE_SUPPORTED; + switch (esd->decoderConfig->objectTypeIndication) { + case GPAC_OTI_VIDEO_AVC: + case GPAC_OTI_VIDEO_MPEG4_PART2: + if (!esd->decoderConfig->rvc_config && !esd->decoderConfig->predefined_rvc_config) return GF_CODEC_NOT_SUPPORTED; + return GF_CODEC_SUPPORTED+1; + } + return GF_CODEC_NOT_SUPPORTED; +} + +static const char *RVCD_GetCodecName(GF_BaseDecoder *dec) +{ + return "RVC Decoder"; +} + +GF_BaseDecoder *NewRVCDec() +{ + GF_MediaDecoder *ifcd; + RVCDec *dec; + + GF_SAFEALLOC(ifcd, GF_MediaDecoder); + GF_SAFEALLOC(dec, RVCDec); + GF_REGISTER_MODULE_INTERFACE(ifcd, GF_MEDIA_DECODER_INTERFACE, "RVC Decoder", "gpac distribution") + + ifcd->privateStack = dec; + + /*setup our own interface*/ + ifcd->AttachStream = RVCD_AttachStream; + ifcd->DetachStream = RVCD_DetachStream; + ifcd->GetCapabilities = RVCD_GetCapabilities; + ifcd->SetCapabilities = RVCD_SetCapabilities; + ifcd->GetName = RVCD_GetCodecName; + ifcd->CanHandleStream = RVCD_CanHandleStream; + ifcd->ProcessData = RVCD_ProcessData; + return (GF_BaseDecoder *) ifcd; +} + +void DeleteRVCDec(GF_BaseDecoder *ifcg) +{ + RVCDec *ctx = (RVCDec*) ifcg->privateStack; + gf_free(ctx); + gf_free(ifcg); +} + +const u32 *QueryInterfaces() +{ + static u32 si [] = { +#ifndef GPAC_DISABLE_AV_PARSERS + GF_MEDIA_DECODER_INTERFACE, +#endif + 0 + }; + return si; +} + +GF_BaseInterface *LoadInterface(u32 InterfaceType) +{ +#ifndef GPAC_DISABLE_AV_PARSERS + if (InterfaceType == GF_MEDIA_DECODER_INTERFACE) return (GF_BaseInterface *)NewRVCDec(); +#endif + return NULL; +} + +void ShutdownInterface(GF_BaseInterface *ifce) +{ + switch (ifce->InterfaceType) { +#ifndef GPAC_DISABLE_AV_PARSERS + case GF_MEDIA_DECODER_INTERFACE: + DeleteRVCDec((GF_BaseDecoder*)ifce); + break; +#endif + } +} diff --git a/modules/saf_in/Makefile b/modules/saf_in/Makefile index 30e2f75..a3ed689 100644 --- a/modules/saf_in/Makefile +++ b/modules/saf_in/Makefile @@ -32,7 +32,7 @@ all: $(LIB) $(LIB): $(OBJS) $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/$@ $(OBJS) $(EXTRALIBS) -L../../bin/gcc -lgpac ifeq ($(STATICBUILD),yes) - $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/gm_dummy_in-static.so $(OBJS) $(EXTRALIBS) -L../../bin/gcc -lgpac_static + $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/gm_dummy_in-static.$(DYN_LIB_SUFFIX) $(OBJS) $(EXTRALIBS) -L../../bin/gcc -lgpac_static endif diff --git a/modules/sdl_out/sdl_out.h b/modules/sdl_out/sdl_out.h index 85c687a..4fa2e94 100644 --- a/modules/sdl_out/sdl_out.h +++ b/modules/sdl_out/sdl_out.h @@ -42,11 +42,18 @@ void SDLOUT_CloseSDL(); #define SDL_WINDOW_THREAD #endif +typedef enum { + SDL_STATE_STOPPED = 0, + SDL_STATE_RUNNING, + SDL_STATE_STOP_REQ, + SDL_STATE_WAIT_FOR_THREAD_TERMINATION +} GF_SDL_STATE; + typedef struct { #ifdef SDL_WINDOW_THREAD GF_Thread *sdl_th; - u32 sdl_th_state; + GF_SDL_STATE sdl_th_state; #endif GF_Mutex *evt_mx; Bool is_init, fullscreen; diff --git a/modules/sdl_out/video.c b/modules/sdl_out/video.c index 0429009..0d4da20 100644 --- a/modules/sdl_out/video.c +++ b/modules/sdl_out/video.c @@ -604,13 +604,16 @@ Bool SDLVid_ProcessMessageQueue(SDLVidCtx *ctx, GF_VideoOutput *dr) sdl_translate_key(sdl_evt.key.keysym.sym, &gpac_evt.key); gpac_evt.type = (sdl_evt.key.type==SDL_KEYDOWN) ? GF_EVENT_KEYDOWN : GF_EVENT_KEYUP; dr->on_event(dr->evt_cbk_hdl, &gpac_evt); -#ifndef SDL_TEXTINPUTEVENT_TEXT_SIZE - if ((sdl_evt.key.type==SDL_KEYDOWN) && sdl_evt.key.keysym.unicode) { + if ((sdl_evt.key.type==SDL_KEYDOWN) + && sdl_evt.key.keysym.unicode +#ifdef SDL_TEXTINPUTEVENT_TEXT_SIZE + && ((sdl_evt.key.keysym.unicode=='\r') || (sdl_evt.key.keysym.unicode=='\n') || (sdl_evt.key.keysym.unicode=='\b') || (sdl_evt.key.keysym.unicode=='\t') ) +#endif + ) { gpac_evt.character.unicode_char = sdl_evt.key.keysym.unicode; gpac_evt.type = GF_EVENT_TEXTINPUT; dr->on_event(dr->evt_cbk_hdl, &gpac_evt); } -#endif /* SDL_TEXTINPUTEVENT_TEXT_SIZE */ break; /*mouse*/ @@ -668,11 +671,11 @@ u32 SDLVid_EventProc(void *par) SDLVID(); if (!SDLVid_InitializeWindow(ctx, dr)) { - ctx->sdl_th_state = 3; + ctx->sdl_th_state = SDL_STATE_STOP_REQ; } - ctx->sdl_th_state = 1; - while (ctx->sdl_th_state==1) { + ctx->sdl_th_state = SDL_STATE_RUNNING; + while (ctx->sdl_th_state==SDL_STATE_RUNNING) { /*after much testing: we must ensure nothing is using the event queue when resizing window. -- under X, it throws Xlib "unexpected async reply" under linux, therefore we don't wait events, we check for events and execute them if any @@ -700,13 +703,20 @@ u32 SDLVid_EventProc(void *par) #endif /*QUIT message has been processed*/ - if (!ret) break; + if (!ret) { + ctx->sdl_th_state = SDL_STATE_STOP_REQ; + break; + } - gf_sleep(0); + gf_sleep(2); } + while (ctx->sdl_th_state == SDL_STATE_STOP_REQ) + gf_sleep(10); + SDLVid_ShutdownWindow(ctx); - ctx->sdl_th_state = 3; + ctx->sdl_th_state = SDL_STATE_STOPPED; + return 0; } #endif /*SDL_WINDOW_THREAD*/ @@ -726,12 +736,15 @@ GF_Err SDLVid_Setup(struct _video_out *dr, void *os_handle, void *os_display, u3 if (!SDLOUT_InitSDL()) return GF_IO_ERR; #ifdef SDL_WINDOW_THREAD - ctx->sdl_th_state = 0; + ctx->sdl_th_state = SDL_STATE_STOPPED; gf_th_run(ctx->sdl_th, SDLVid_EventProc, dr); - while (!ctx->sdl_th_state) gf_sleep(10); - if (ctx->sdl_th_state==3) { + + while (!ctx->sdl_th_state) + gf_sleep(10); + + if (ctx->sdl_th_state==SDL_STATE_STOP_REQ) { SDLOUT_CloseSDL(); - ctx->sdl_th_state = 0; + ctx->sdl_th_state = SDL_STATE_STOPPED; return GF_IO_ERR; } #else @@ -752,13 +765,16 @@ static void SDLVid_Shutdown(GF_VideoOutput *dr) if (!ctx->is_init) return; #ifdef SDL_WINDOW_THREAD - if (ctx->sdl_th_state==1) { + if (ctx->sdl_th_state==SDL_STATE_RUNNING) { SDL_Event evt; - ctx->sdl_th_state = 2; evt.type = SDL_QUIT; SDL_PushEvent(&evt); - while (ctx->sdl_th_state != 3) gf_sleep(100); } + /*wait until thread say it is stopped*/ + ctx->sdl_th_state = SDL_STATE_WAIT_FOR_THREAD_TERMINATION; + while (ctx->sdl_th_state != SDL_STATE_STOPPED) + gf_sleep(10); + #else SDLVid_ShutdownWindow(ctx); #endif @@ -885,26 +901,6 @@ u32 SDLVid_MapPixelFormat(SDL_PixelFormat *format, Bool force_alpha) } } -#ifdef UNUSED_FUNC -static char szTYPE[5]; -static const char *my_gf_4cc_to_str(u32 type) -{ - u32 ch, i; - char *ptr, *name = (char *)szTYPE; - ptr = name; - for (i = 0; i < 4; i++, name++) { - ch = type >> (8 * (3-i) ) & 0xff; - if ( ch >= 0x20 && ch <= 0x7E ) { - *name = ch; - } else { - *name = '.'; - } - } - *name = 0; - return (const char *) ptr; -} -#endif /* UNUSED_FUNC */ - static GF_Err SDLVid_LockBackBuffer(GF_VideoOutput *dr, GF_VideoSurface *video_info, u32 do_lock) { SDLVID(); @@ -1017,6 +1013,13 @@ static GF_Err SDLVid_ProcessEvent(GF_VideoOutput *dr, GF_Event *evt) SDLVid_SetCursor(dr, evt->cursor.cursor_type); break; case GF_EVENT_SET_CAPTION: +#ifdef SDL_WINDOW_THREAD + { + SDLVID(); + if (ctx->sdl_th_state != SDL_STATE_RUNNING) + break; + } +#endif SDL_WM_SetCaption(evt->caption.caption, NULL); break; case GF_EVENT_SHOWHIDE: @@ -1026,6 +1029,8 @@ static GF_Err SDLVid_ProcessEvent(GF_VideoOutput *dr, GF_Event *evt) case GF_EVENT_SIZE: SDLVid_ResizeWindow(dr, evt->size.width, evt->size.height); break; + case GF_EVENT_MOVE: + break; case GF_EVENT_VIDEO_SETUP: { SDLVID(); diff --git a/modules/soft_raster/Makefile b/modules/soft_raster/Makefile index 34114d0..740dad0 100644 --- a/modules/soft_raster/Makefile +++ b/modules/soft_raster/Makefile @@ -37,7 +37,7 @@ all: $(LIB) $(LIB): $(OBJS) $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/$@ $(OBJS) $(EXTRALIBS) -L../../bin/gcc -lgpac ifeq ($(STATICBUILD),yes) - $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/gm_soft_raster-static.so $(OBJS) $(EXTRALIBS) -L../../bin/gcc -lgpac_static + $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/gm_soft_raster-static.$(DYN_LIB_SUFFIX) $(OBJS) $(EXTRALIBS) -L../../bin/gcc -lgpac_static endif diff --git a/modules/soft_raster/raster_argb.c b/modules/soft_raster/raster_argb.c index 0e260e3..a0b37e3 100644 --- a/modules/soft_raster/raster_argb.c +++ b/modules/soft_raster/raster_argb.c @@ -503,7 +503,7 @@ GF_Err evg_surface_clear_rgbx(GF_SURFACE surf, GF_IRect rc, GF_Color col) b = GF_COL_B(col); col = GF_COL_ARGB(0xFF, b, g, r); for (y = 0; y < h; y++) { - u32 *data = (u32 *) (_this ->pixels + (y + sy) * _this->pitch_y + st*sx); + u8 *data = _this ->pixels + (y + sy) * _this->pitch_y + st*sx; for (x = 0; x < w; x++) { data[0] = r; data[1] = g; @@ -696,7 +696,7 @@ GF_Err evg_surface_clear_rgba(GF_SURFACE surf, GF_IRect rc, GF_Color col) if (!use_memset) { for (y = 0; y < h; y++) { - data = (_this ->pixels + (sy+y)* st + _this->pitch_x * rc.x); + data = _this ->pixels + (sy+y)* st + _this->pitch_x * rc.x; for (x = 0; x < w; x++) { *(data) = r; *(data+1) = g; diff --git a/modules/svg_in/Makefile b/modules/svg_in/Makefile index 4181eb8..f5cccdd 100644 --- a/modules/svg_in/Makefile +++ b/modules/svg_in/Makefile @@ -36,7 +36,7 @@ all: $(LIB) $(LIB): $(OBJS) $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/$@ $(OBJS) $(EXTRALIBS) -L../../bin/gcc -lgpac -lz ifeq ($(STATICBUILD),yes) - $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/gm_svg_in-static.so $(OBJS) $(EXTRALIBS) -L../../bin/gcc -lgpac_static -lz + $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/gm_svg_in-static.$(DYN_LIB_SUFFIX) $(OBJS) $(EXTRALIBS) -L../../bin/gcc -lgpac_static -lz endif diff --git a/modules/svg_in/svg_in.c b/modules/svg_in/svg_in.c index 83518ee..cfa5c3b 100644 --- a/modules/svg_in/svg_in.c +++ b/modules/svg_in/svg_in.c @@ -337,25 +337,28 @@ const char *SVG_GetName(struct _basedecoder *plug) return "INTERNAL ERROR"; } -Bool SVG_CanHandleStream(GF_BaseDecoder *ifce, u32 StreamType, GF_ESD *esd, u8 PL) +static u32 SVG_CanHandleStream(GF_BaseDecoder *ifce, u32 StreamType, GF_ESD *esd, u8 PL) { - /*don't reply to media type query*/ - if (!esd) return 0; - if (StreamType==GF_STREAM_PRIVATE_SCENE) { - if (esd->decoderConfig->objectTypeIndication == GPAC_OTI_PRIVATE_SCENE_SVG) return 1; - return 0; + /*media type query*/ + if (!esd) return GF_CODEC_STREAM_TYPE_SUPPORTED; + + if (esd->decoderConfig->objectTypeIndication == GPAC_OTI_PRIVATE_SCENE_SVG) return GF_CODEC_SUPPORTED; + return GF_CODEC_NOT_SUPPORTED; } else if (StreamType==GF_STREAM_SCENE) { + /*media type query*/ + if (!esd) return GF_CODEC_STREAM_TYPE_SUPPORTED; + switch (esd->decoderConfig->objectTypeIndication) { case GPAC_OTI_SCENE_SVG: case GPAC_OTI_SCENE_SVG_GZ: case GPAC_OTI_SCENE_DIMS: - return 1; + return GF_CODEC_SUPPORTED; default: - return 0; + return GF_CODEC_NOT_SUPPORTED; } } - return 0; + return GF_CODEC_NOT_SUPPORTED; } static GF_Err SVG_GetCapabilities(GF_BaseDecoder *plug, GF_CodecCapability *cap) diff --git a/modules/timedtext/Makefile b/modules/timedtext/Makefile index 4af8310..67c30a2 100644 --- a/modules/timedtext/Makefile +++ b/modules/timedtext/Makefile @@ -31,7 +31,7 @@ all: $(LIB) $(LIB): $(OBJS) $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/$@ $(OBJS) $(EXTRALIBS) -L../../bin/gcc -lgpac ifeq ($(STATICBUILD),yes) - $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/gm_timedtext-static.so $(OBJS) $(EXTRALIBS) -L../../bin/gcc -lgpac_static + $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/gm_timedtext-static.$(DYN_LIB_SUFFIX) $(OBJS) $(EXTRALIBS) -L../../bin/gcc -lgpac_static endif diff --git a/modules/timedtext/timedtext_dec.c b/modules/timedtext/timedtext_dec.c index 90f87a4..26c0836 100644 --- a/modules/timedtext/timedtext_dec.c +++ b/modules/timedtext/timedtext_dec.c @@ -70,7 +70,7 @@ typedef struct { GF_Scene *inlineScene; GF_Terminal *app; - u32 PL, nb_streams; + u32 nb_streams; GF_TextConfig *cfg; @@ -1094,17 +1094,16 @@ static GF_Err TTD_ProcessData(GF_SceneDecoder*plug, const char *inBuffer, u32 in return e; } -Bool TTD_CanHandleStream(GF_BaseDecoder *ifce, u32 StreamType, GF_ESD *esd, u8 PL) +static u32 TTD_CanHandleStream(GF_BaseDecoder *ifce, u32 StreamType, GF_ESD *esd, u8 PL) { - TTDPriv *priv = (TTDPriv *)ifce->privateStack; - if (StreamType!=GF_STREAM_TEXT) return 0; + /*TTDPriv *priv = (TTDPriv *)ifce->privateStack;*/ + if (StreamType!=GF_STREAM_TEXT) return GF_CODEC_NOT_SUPPORTED; /*media type query*/ - if (!esd) return 1; - if (esd->decoderConfig->objectTypeIndication==0x08) { - priv->PL = PL; - return 1; - } - return 0; + if (!esd) return GF_CODEC_STREAM_TYPE_SUPPORTED; + + if (esd->decoderConfig->objectTypeIndication==0x08) return GF_CODEC_SUPPORTED; + + return GF_CODEC_NOT_SUPPORTED; } diff --git a/modules/widgetman/unzip.h b/modules/widgetman/unzip.h index 0dceeb0..a4c1b9b 100644 --- a/modules/widgetman/unzip.h +++ b/modules/widgetman/unzip.h @@ -114,10 +114,10 @@ typedef voidp unzFile; #endif #ifndef ALLOC -# define ALLOC(size) (malloc(size)) +# define ALLOC(size) (gf_malloc(size)) #endif #ifndef TRYFREE -# define TRYFREE(p) {if (p) free(p);} +# define TRYFREE(p) {if (p) gf_free(p);} #endif #define SIZECENTRALDIRITEM (0x2e) diff --git a/modules/widgetman/wgt_load.c b/modules/widgetman/wgt_load.c index 1d34134..bf2063c 100644 --- a/modules/widgetman/wgt_load.c +++ b/modules/widgetman/wgt_load.c @@ -228,16 +228,16 @@ const char *WGT_GetName(struct _basedecoder *plug) return "GPAC W3C Widget Loader"; } -Bool WGT_CanHandleStream(GF_BaseDecoder *ifce, u32 StreamType, GF_ESD *esd, u8 PL) +static u32 WGT_CanHandleStream(GF_BaseDecoder *ifce, u32 StreamType, GF_ESD *esd, u8 PL) { /*don't reply to media type query*/ - if (!esd) return 0; + if (!esd) return GF_CODEC_NOT_SUPPORTED; if (StreamType==GF_STREAM_PRIVATE_SCENE) { - if (esd->decoderConfig->objectTypeIndication==GPAC_OTI_PRIVATE_SCENE_WGT) return 1; - return 0; + if (esd->decoderConfig->objectTypeIndication==GPAC_OTI_PRIVATE_SCENE_WGT) return GF_CODEC_SUPPORTED; + return GF_CODEC_NOT_SUPPORTED; } - return 0; + return GF_CODEC_NOT_SUPPORTED; } static GF_Err WGT_GetCapabilities(GF_BaseDecoder *plug, GF_CodecCapability *cap) diff --git a/modules/widgetman/widgetman.c b/modules/widgetman/widgetman.c index 65ec3a7..434b6e6 100644 --- a/modules/widgetman/widgetman.c +++ b/modules/widgetman/widgetman.c @@ -247,7 +247,7 @@ static GF_WidgetPackage *widget_isom_new(GF_WidgetManager *wm, const char *path) dir = gf_cfg_get_key(wm->term->user->config, "General", "CacheDirectory"); /* create the extracted path for the package root using: the cache dir + a CRC of the file path and the instance*/ - sprintf(wzip->root_extracted_path, "%s%08X", path, (u32) wzip); + sprintf(wzip->root_extracted_path, "%s%08X", path, (unsigned int)((unsigned long) wzip)); i = gf_crc_32((char *)wzip->root_extracted_path, strlen(wzip->root_extracted_path)); sprintf(wzip->archive_id, "GWM_%08X_", i); sprintf(wzip->root_extracted_path, "%s/%s", dir, wzip->archive_id); @@ -326,7 +326,7 @@ static GF_WidgetPackage *widget_zip_new(GF_WidgetManager *wm, const char *path) dir = gf_cfg_get_key(wm->term->user->config, "General", "CacheDirectory"); /* create the extracted path for the package root using: the cache dir + a CRC of the file path and the instance*/ - sprintf(wzip->root_extracted_path, "%s%08X", path, (u32) wzip); + sprintf(wzip->root_extracted_path, "%s%08X", path, (unsigned int)((unsigned long) wzip)); i = gf_crc_32((char *)wzip->root_extracted_path, strlen(wzip->root_extracted_path)); sprintf(wzip->archive_id, "GWM_%08X_", i); sprintf(wzip->root_extracted_path, "%s/%s", dir, wzip->archive_id); diff --git a/modules/x11_out/Makefile b/modules/x11_out/Makefile index c263e37..7c111ce 100644 --- a/modules/x11_out/Makefile +++ b/modules/x11_out/Makefile @@ -66,11 +66,11 @@ all: $(LIB) $(LIB): $(OBJS) $(CC) $(SHFLAGS) $(LDFLAGS) -lX11 -L../../bin/gcc -lgpac -o ../../bin/gcc/$@ $(OBJS) ifeq ($(STATICBUILD),yes) - $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/gm_x11_out-static.so $(OBJS) -lX11 -L../../bin/gcc -lgpac_static + $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/gm_x11_out-static.$(DYN_LIB_SUFFIX) $(OBJS) -lX11 -L../../bin/gcc -lgpac_static endif #static-bin: -# $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/gm_x11_out-static.so $(OBJS) -lX11 -L../../bin/gcc -lgpac_static +# $(CC) $(SHFLAGS) $(LDFLAGS) -o ../../bin/gcc/gm_x11_out-static.$(DYN_LIB_SUFFIX) $(OBJS) -lX11 -L../../bin/gcc -lgpac_static %.o: %.c $(CC) $(CFLAGS) -c -o $@ $< diff --git a/modules/x11_out/x11_out.c b/modules/x11_out/x11_out.c index 7d0a6a2..a254662 100644 --- a/modules/x11_out/x11_out.c +++ b/modules/x11_out/x11_out.c @@ -25,6 +25,7 @@ #include "x11_out.h" #include +#include #include #include #include @@ -578,9 +579,10 @@ static void X11_HandleEvents(GF_VideoOutput *vout) vout->on_event (vout->evt_cbk_hdl, &evt); if (xevent.type ==KeyPress) { - XLookupString (&xevent.xkey, (char *) keybuf, sizeof(keybuf), NULL, &state); - if (keybuf[0]) { - evt.character.unicode_char = keybuf[0]; + s32 len; + len = XLookupString (&xevent.xkey, (char *) keybuf, sizeof(keybuf), NULL, &state); + if ((len>0) && (len<5)) { + utf8_to_ucs4 (& evt.character.unicode_char, len, keybuf); evt.type = GF_EVENT_TEXTINPUT; vout->on_event (vout->evt_cbk_hdl, &evt); } diff --git a/modules/xvid_dec/xvid_dec.c b/modules/xvid_dec/xvid_dec.c index 44048e5..d470670 100644 --- a/modules/xvid_dec/xvid_dec.c +++ b/modules/xvid_dec/xvid_dec.c @@ -366,14 +366,17 @@ static GF_Err XVID_ProcessData(GF_MediaDecoder *ifcg, return GF_OK; } -static Bool XVID_CanHandleStream(GF_BaseDecoder *dec, u32 StreamType, GF_ESD *esd, u8 PL) +static u32 XVID_CanHandleStream(GF_BaseDecoder *dec, u32 StreamType, GF_ESD *esd, u8 PL) { - if (StreamType != GF_STREAM_VISUAL) return 0; + if (StreamType != GF_STREAM_VISUAL) return GF_CODEC_NOT_SUPPORTED; /*media type query*/ - if (!esd) return 1; + if (!esd) return GF_CODEC_STREAM_TYPE_SUPPORTED; - if (esd->decoderConfig->objectTypeIndication==GPAC_OTI_VIDEO_MPEG4_PART2) return 1; - return 0; + if (esd->decoderConfig->objectTypeIndication==GPAC_OTI_VIDEO_MPEG4_PART2) { + if (esd->decoderConfig->rvc_config || esd->decoderConfig->predefined_rvc_config) return GF_CODEC_MAYBE_SUPPORTED; + return GF_CODEC_SUPPORTED; + } + return GF_CODEC_NOT_SUPPORTED; } static const char *XVID_GetCodecName(GF_BaseDecoder *dec) diff --git a/modules/xvid_dec/xvid_dec_wce.cpp b/modules/xvid_dec/xvid_dec_wce.cpp index 3fcdc0f..acc86e7 100644 --- a/modules/xvid_dec/xvid_dec_wce.cpp +++ b/modules/xvid_dec/xvid_dec_wce.cpp @@ -216,13 +216,13 @@ static const char *XVID_GetCodecName(GF_BaseDecoder *dec) return "XviD 1.0 for WinCE"; } -static Bool XVID_CanHandleStream(GF_BaseDecoder *dec, u32 StreamType, GF_ESD *esd, u8 PL) +static u32 XVID_CanHandleStream(GF_BaseDecoder *dec, u32 StreamType, GF_ESD *esd, u8 PL) { - if (StreamType != GF_STREAM_VISUAL) return 0; + if (StreamType != GF_STREAM_VISUAL) return GF_CODEC_NOT_SUPPORTED; /*media type query*/ - if (!esd) return 1; - if (esd->decoderConfig->objectTypeIndication==GPAC_OTI_VIDEO_MPEG4_PART2) return 1; - return 0; + if (!esd) return GF_CODEC_STREAM_TYPE_SUPPORTED; + if (esd->decoderConfig->objectTypeIndication==GPAC_OTI_VIDEO_MPEG4_PART2) return GF_CODEC_STREAM_TYPE_SUPPORTED; + return GF_CODEC_NOT_SUPPORTED; } diff --git a/regression_tests/bifs/bifs-cachetexture_nocache.bt b/regression_tests/bifs/bifs-cachetexture_nocache.bt index 590a4ee..37e0990 100644 --- a/regression_tests/bifs/bifs-cachetexture_nocache.bt +++ b/regression_tests/bifs/bifs-cachetexture_nocache.bt @@ -38,7 +38,7 @@ OrderedGroup { appearance Appearance { texture CacheTexture { objectTypeIndication 108 - image "sky.jpg" + image "../auxiliary_files/sky.jpg" } } geometry Rectangle { diff --git a/src/Makefile b/src/Makefile index 7fefc5d..248abcb 100644 --- a/src/Makefile +++ b/src/Makefile @@ -15,7 +15,7 @@ LDFLAGS+=-pg endif ## libgpac objects gathering: src/utils -LIBGPAC_UTILS=utils/os_divers.o utils/os_net.o utils/os_module.o utils/os_thread.o utils/list.o utils/base_encoding.o utils/bitstream.o utils/color.o utils/configfile.o utils/cache.o utils/downloader.o utils/error.o utils/math.o utils/path2d.o utils/path2d_stroker.o utils/module.o utils/token.o utils/uni_bidi.o utils/url.o utils/utf.o utils/xml_parser.o utils/alloc.o utils/ringbuffer.o utils/unicode.o +LIBGPAC_UTILS=utils/os_divers.o utils/os_net.o utils/os_module.o utils/os_thread.o utils/os_config_init.o utils/list.o utils/base_encoding.o utils/bitstream.o utils/color.o utils/configfile.o utils/cache.o utils/downloader.o utils/error.o utils/math.o utils/path2d.o utils/path2d_stroker.o utils/module.o utils/token.o utils/uni_bidi.o utils/url.o utils/utf.o utils/xml_parser.o utils/alloc.o utils/ringbuffer.o utils/unicode.o ## libgpac objects gathering: src/ietf LIBGPAC_IETF=ietf/rtcp.o ietf/rtp.o ietf/rtp_packetizer.o ietf/rtp_pck_3gpp.o ietf/rtp_pck_mpeg12.o ietf/rtp_pck_mpeg4.o ietf/rtsp_command.o ietf/rtsp_common.o ietf/rtsp_response.o ietf/rtsp_session.o ietf/sdp.o ietf/rtp_depacketizer.o ietf/rtp_streamer.o @@ -36,7 +36,7 @@ LIBGPAC_SCENE=scenegraph/base_scenegraph.o scenegraph/mpeg4_animators.o scenegra LIBGPAC_MCRYPT=mcrypt/cbc.o mcrypt/cfb.o mcrypt/ctr.o mcrypt/des.o mcrypt/ecb.o mcrypt/g_crypt.o mcrypt/ncfb.o mcrypt/nofb.o mcrypt/ofb.o mcrypt/rijndael-128.o mcrypt/rijndael-192.o mcrypt/rijndael-256.o mcrypt/stream.o mcrypt/tripledes.o mcrypt/sha1.o ## libgpac objects gathering: src/media tools -LIBGPAC_MEDIATOOLS=media_tools/av_parsers.o media_tools/avilib.o media_tools/filestreamer.o media_tools/gpac_ogg.o media_tools/img.o media_tools/ismacryp.o media_tools/isom_hinter.o media_tools/isom_tools.o media_tools/media_export.o media_tools/media_import.o media_tools/mpeg2_ps.o media_tools/text_import.o media_tools/saf.o media_tools/mpegts.o media_tools/dvb_mpe.o media_tools/reedsolomon.o media_tools/vobsub.o media_tools/m2ts_mux.o media_tools/m3u8.o media_tools/mpd.o +LIBGPAC_MEDIATOOLS=media_tools/av_parsers.o media_tools/avilib.o media_tools/dvb.o media_tools/filestreamer.o media_tools/gpac_ogg.o media_tools/img.o media_tools/ismacryp.o media_tools/isom_hinter.o media_tools/isom_tools.o media_tools/media_export.o media_tools/media_import.o media_tools/mpeg2_ps.o media_tools/text_import.o media_tools/saf.o media_tools/mpegts.o media_tools/dvb_mpe.o media_tools/reedsolomon.o media_tools/vobsub.o media_tools/m2ts_mux.o media_tools/m3u8.o media_tools/mpd.o media_tools/carousel.o ## libgpac objects gathering: src/scene_manager LIBGPAC_SCENEMANAGER=scene_manager/loader_bt.o scene_manager/loader_isom.o scene_manager/loader_qt.o scene_manager/loader_xmt.o scene_manager/scene_dump.o scene_manager/scene_manager.o scene_manager/scene_stats.o scene_manager/swf_parse.o scene_manager/swf_bifs.o scene_manager/text_to_bifs.o scene_manager/scene_engine.o scene_manager/encode_isom.o scene_manager/loader_svg.o @@ -157,7 +157,6 @@ MEDIATOOLS_CFLAGS+=-DGPAC_ENST_PRIVATE endif - ##libgpac library output LIB=libgpac.$(DYN_LIB_SUFFIX) ifeq ($(CONFIG_WIN32),yes) diff --git a/src/bifs/bifs_node_tables.c b/src/bifs/bifs_node_tables.c index 709f524..0c9829f 100644 --- a/src/bifs/bifs_node_tables.c +++ b/src/bifs/bifs_node_tables.c @@ -24,7 +24,7 @@ /* - DO NOT MOFIFY - File generated on GMT Mon Jan 18 12:27:12 2010 + DO NOT MOFIFY - File generated on GMT Wed Jul 20 05:50:21 2011 BY MPEG4Gen for GPAC Version 0.4.6-DEV */ diff --git a/src/bifs/com_dec.c b/src/bifs/com_dec.c index cdb8ca3..3a9044d 100644 --- a/src/bifs/com_dec.c +++ b/src/bifs/com_dec.c @@ -395,7 +395,7 @@ static GF_Err BD_DecNodeDeleteEx(GF_BifsDecoder * codec, GF_BitStream *bs) return gf_node_replace(node, NULL, 1); } -#ifdef UNUSED_FUNC +#ifdef GPAC_UNUSED_FUNC static GF_Err BD_DecOperandReplace(GF_BifsDecoder * codec, GF_BitStream *bs) { s32 pos; @@ -499,7 +499,7 @@ static GF_Err BD_DecOperandReplace(GF_BifsDecoder * codec, GF_BitStream *bs) gf_sg_vrml_field_copy(dst_ptr, src_ptr, src_type); return GF_OK; } -#endif /* UNUSED_FUNC */ +#endif /*GPAC_UNUSED_FUNC*/ static GF_Err BD_DecExtendedUpdate(GF_BifsDecoder * codec, GF_BitStream *bs) { diff --git a/src/bifs/field_decode.c b/src/bifs/field_decode.c index 87df73c..1653e99 100644 --- a/src/bifs/field_decode.c +++ b/src/bifs/field_decode.c @@ -25,7 +25,6 @@ #include -#include #include "quant.h" #include "script.h" @@ -124,65 +123,10 @@ GF_Err gf_bifs_dec_sf_field(GF_BifsDecoder * codec, GF_BitStream *bs, GF_Node *n if (gf_bs_available(bs) < length) return GF_NON_COMPLIANT_BITSTREAM; if (node && (node->sgprivate->tag==TAG_MPEG4_CacheTexture) && (field->fieldIndex<=2)) { - Bool skip_file_url_proto=0; - char *name; - FILE *f; M_CacheTexture *ct = (M_CacheTexture *) node; - char *buf = gf_malloc(sizeof(char)*length); - gf_bs_read_data(bs, buf, length); - if (ct->cacheURL.buffer) { - name = gf_strdup(ct->cacheURL.buffer); - } else { - char szImg[100], *ext; - switch (ct->objectTypeIndication) { - case GPAC_OTI_IMAGE_JPEG: ext = "jpg"; break; - case GPAC_OTI_IMAGE_PNG: ext = "png"; break; - case GPAC_OTI_IMAGE_JPEG_2000: ext = "jp2"; break; - default: ext = "img"; - } - sprintf(szImg, "%p%p.%s", codec, ct, ext); - name = gf_strdup(szImg); - } - - if (codec->extraction_path) { - char *path; - u32 len = strlen(name)+strlen(codec->extraction_path)+2; - if (strnicmp(codec->extraction_path, "file://", 7)) len+=7; - /*SHA1 of service in hexa*/ - if (codec->service_url) len += 41; - path = gf_malloc(sizeof(char)*len); - - path[0] = 0; - /*force using file:// URL prototype to avoid confusion with resources adressed from the root of the source server*/ - if (strnicmp(codec->extraction_path, "file://", 7)) strcpy(path, "file://"); - strcat(path, codec->extraction_path); - strcat(path, "/"); - - if (codec->service_url) { - u8 hash[20]; - u32 i; - gf_sha1_csum(codec->service_url, strlen(codec->service_url), hash); - for (i=0; i<20; i++) { - char t[3]; - t[2] = 0; - sprintf(t, "%02X", hash[i]); - strcat(path, t); - } - strcat(path, "_"); - } - strcat(path, name); - - gf_free(name); - name = path; - skip_file_url_proto = 1; - } - - ((SFString *)field->far_ptr)->buffer = name; - /*skip the initial file://*/ - f = gf_f64_open(name + (skip_file_url_proto ? 7 : 0), "wb"); - fwrite(buf, 1, length, f); - fclose(f); - gf_free(buf); + ct->data_len = length; + ct->data = gf_malloc(sizeof(char)*length); + gf_bs_read_data(bs, ct->data, length); } else { if ( ((SFString *)field->far_ptr)->buffer ) gf_free( ((SFString *)field->far_ptr)->buffer); ((SFString *)field->far_ptr)->buffer = (char *)gf_malloc(sizeof(char)*(length+1)); diff --git a/src/compositor/audio_input.c b/src/compositor/audio_input.c index 1692cae..3b01a78 100644 --- a/src/compositor/audio_input.c +++ b/src/compositor/audio_input.c @@ -29,8 +29,9 @@ /*diff time in ms to consider an audio frame too early and insert silence*/ #define MIN_RESYNC_TIME 500 -/*diff time in ms to consider an audio frame too late and drop it*/ -#define MAX_RESYNC_TIME 500 +/*diff time in ms to consider an audio frame too late and drop it - we should try to dynamically figure this out +since the drift may be high on TS for example, where PTS-PCR>500ms is quite common*/ +#define MAX_RESYNC_TIME 1000 struct __audiofilteritem { diff --git a/src/compositor/camera.c b/src/compositor/camera.c index 965d8d6..5a4a7ba 100644 --- a/src/compositor/camera.c +++ b/src/compositor/camera.c @@ -166,8 +166,8 @@ SFRotation camera_get_orientation(SFVec3f pos, SFVec3f target, SFVec3f up) return gf_quat_to_rotation(&rot); } -#define FAR_PLANE_2D -60000 -#define NEAR_PLANE_2D 6000 +#define FAR_PLANE_2D -10000 +#define NEAR_PLANE_2D 1000 void camera_set_2d(GF_Camera *cam) { @@ -275,24 +275,26 @@ void camera_update(GF_Camera *cam, GF_Matrix2D *user_transform, Bool center_coor gf_mx_ortho(&cam->projection, -hw, hw, -hh, hh, cam->z_near, cam->z_far); /*setup modelview*/ -#ifdef FORCE_CAMERA_3D - gf_mx_lookat(&cam->modelview, cam->position, cam->target, cam->up); -#else gf_mx_init(cam->modelview); +#ifdef FORCE_CAMERA_3D + if (! (cam->flags & CAM_NO_LOOKAT)) + gf_mx_lookat(&cam->modelview, cam->position, cam->target, cam->up); #endif + if (!center_coords) { gf_mx_add_scale(&post_model_view, 1, -1, 1); gf_mx_add_translation(&post_model_view, -hw, -hh, 0); } if (user_transform) { #ifdef FORCE_CAMERA_3D - GF_Matrix mx; - gf_mx_from_mx2d(&mx, user_transform); - mx.m[10] = mx.m[0]; - gf_mx_add_matrix(&post_model_view, &mx); -#else - gf_mx_add_matrix_2d(&post_model_view, user_transform); + if (! (cam->flags & CAM_NO_LOOKAT)) { + GF_Matrix mx; + gf_mx_from_mx2d(&mx, user_transform); + mx.m[10] = mx.m[0]; + gf_mx_add_matrix(&post_model_view, &mx); + } else #endif + gf_mx_add_matrix_2d(&post_model_view, user_transform); } if (cam->end_zoom != FIX_ONE) gf_mx_add_scale(&post_model_view, cam->end_zoom, cam->end_zoom, cam->end_zoom); if (cam->flags & CAM_HAS_VIEWPORT) gf_mx_add_matrix(&post_model_view, &cam->viewport); @@ -306,6 +308,9 @@ void camera_update(GF_Camera *cam, GF_Matrix2D *user_transform, Bool center_coor gf_bbox_refresh(&b); cam->center = b.center; cam->radius = b.radius; + + if (camera_layout==GF_3D_CAMERA_OFFAXIS) + camera_layout=GF_3D_CAMERA_LINEAR; } if (camera_layout == GF_3D_CAMERA_CIRCULAR) { diff --git a/src/compositor/compositor.c b/src/compositor/compositor.c index 57e037a..9bed866 100644 --- a/src/compositor/compositor.c +++ b/src/compositor/compositor.c @@ -78,7 +78,7 @@ static void gf_sc_set_fullscreen(GF_Compositor *compositor) GF_LOG(GF_LOG_INFO, GF_LOG_COMPOSE, ("[Compositor] recomputing aspect ratio\n")); compositor->recompute_ar = 1; /*force signaling graphics reset*/ - compositor->reset_graphics = 1; + if (!compositor->reset_graphics) compositor->reset_graphics = 1; } @@ -152,7 +152,7 @@ static void gf_sc_reconfig_task(GF_Compositor *compositor) compositor->recompute_ar = 1; gf_sc_next_frame_state(compositor, GF_SC_DRAW_FRAME); } - compositor->reset_graphics = 1; + if (!compositor->reset_graphics) compositor->reset_graphics = 1; notif_size=1; } @@ -443,7 +443,7 @@ static u32 gf_sc_proc(void *par) else gf_sc_simulation_tick(compositor); } - /*destroy video out here if w're using openGL, to avoid threading issues*/ + /*destroy video out here if we're using openGL, to avoid threading issues*/ compositor->video_out->Shutdown(compositor->video_out); gf_modules_close_interface((GF_BaseInterface *)compositor->video_out); compositor->video_out = NULL; @@ -501,7 +501,7 @@ GF_Compositor *gf_sc_new(GF_User *user, Bool self_threaded, GF_Terminal *term) } /*try to load GL extensions*/ #ifndef GPAC_DISABLE_3D - gf_sc_load_opengl_extensions(tmp); + gf_sc_load_opengl_extensions(tmp, 0); #endif GF_LOG(GF_LOG_DEBUG, GF_LOG_RTI, ("[RTI]\tCompositor Cycle Log\tNetworks\tDecoders\tFrame\tDirect Draw\tVisual Config\tEvent\tRoute\tSMIL Timing\tTime node\tTexture\tSMIL Anim\tTraverse setup\tTraverse (and direct Draw)\tTraverse (and direct Draw) without anim\tIndirect Draw\tTraverse And Draw (Indirect or Not)\tFlush\tCycle\n")); @@ -637,7 +637,7 @@ u32 gf_sc_get_clock(GF_Compositor *compositor) return gf_sc_ar_get_clock(compositor->audio_renderer); } -static GF_Err gf_sc_set_scene_size(GF_Compositor *compositor, u32 Width, u32 Height) +GF_Err gf_sc_set_scene_size(GF_Compositor *compositor, u32 Width, u32 Height, Bool force_size) { if (!Width || !Height) { if (compositor->override_size_flags) { @@ -653,6 +653,7 @@ static GF_Err gf_sc_set_scene_size(GF_Compositor *compositor, u32 Width, u32 Hei compositor->scene_height = Height; compositor->scene_width = Width; } + if (force_size) compositor->has_size_info = 1; return GF_OK; } @@ -899,7 +900,7 @@ GF_Err gf_sc_set_scene(GF_Compositor *compositor, GF_SceneGraph *scene_graph) /*set scene size only if different, otherwise keep scaling/FS*/ if ( !width || (compositor->scene_width!=width) || !height || (compositor->scene_height!=height)) { do_notif = do_notif || compositor->has_size_info || (!compositor->scene_width && !compositor->scene_height); - gf_sc_set_scene_size(compositor, width, height); + gf_sc_set_scene_size(compositor, width, height, 0); /*get actual size in pixels*/ width = compositor->scene_width; @@ -1170,20 +1171,21 @@ void gf_sc_reload_config(GF_Compositor *compositor) sOpt = "100"; gf_cfg_set_key(compositor->user->config, "Compositor", "DepthScale", sOpt); } - compositor->depth_gl_scale = (Float) atof(sOpt); + compositor->depth_gl_scale = FLT2FIX( (Float) atof(sOpt) ); sOpt = gf_cfg_get_key(compositor->user->config, "Compositor", "DepthType"); if (!sOpt) { - sOpt = "Strips"; + sOpt = "VertexArray"; gf_cfg_set_key(compositor->user->config, "Compositor", "DepthType", sOpt); } - if (sOpt && !strcmp(sOpt, "Points")) compositor->depth_gl_type = 1; + if (sOpt && !strcmp(sOpt, "Points")) compositor->depth_gl_type = GF_SC_DEPTH_GL_POINTS; else if (sOpt && !strnicmp(sOpt, "Strips", 6)) { - compositor->depth_gl_type = 2; + compositor->depth_gl_type = GF_SC_DEPTH_GL_STRIPS; compositor->depth_gl_strips_filter = 0; - if (strlen(sOpt)>7) compositor->depth_gl_strips_filter = (Float) atof(sOpt+7); + if (strlen(sOpt)>7) compositor->depth_gl_strips_filter = FLT2FIX( (Float) atof(sOpt+7) ); } - else compositor->depth_gl_type = 0; + else if (sOpt && !strcmp(sOpt, "VertexArray")) compositor->depth_gl_type = GF_SC_DEPTH_GL_VBO; + else compositor->depth_gl_type = GF_SC_DEPTH_GL_NONE; sOpt = gf_cfg_get_key(compositor->user->config, "Compositor", "NumViews"); if (!sOpt) { @@ -1200,14 +1202,19 @@ void gf_sc_reload_config(GF_Compositor *compositor) } if (!strcmp(sOpt, "SideBySide")) compositor->visual->autostereo_type = GF_3D_STEREO_SIDE; else if (!strcmp(sOpt, "TopToBottom")) compositor->visual->autostereo_type = GF_3D_STEREO_TOP; + else if (!strcmp(sOpt, "Custom")) compositor->visual->autostereo_type = GF_3D_STEREO_CUSTOM; + /*built-in interleavers*/ else if (!strcmp(sOpt, "Anaglyph")) compositor->visual->autostereo_type = GF_3D_STEREO_ANAGLYPH; else if (!strcmp(sOpt, "Columns")) compositor->visual->autostereo_type = GF_3D_STEREO_COLUMNS; else if (!strcmp(sOpt, "Rows")) compositor->visual->autostereo_type = GF_3D_STEREO_ROWS; - else if (!strcmp(sOpt, "Custom")) compositor->visual->autostereo_type = GF_3D_STEREO_CUSTOM; + else if (!strcmp(sOpt, "SPV19")) compositor->visual->autostereo_type = GF_3D_STEREO_5VSP19; + else { compositor->visual->autostereo_type = GF_3D_STEREO_NONE; compositor->visual->nb_views = 1; } + if (compositor->visual->autostereo_type) + compositor->force_opengl_2d = 1; switch (compositor->visual->autostereo_type) { case GF_3D_STEREO_ANAGLYPH: @@ -1232,15 +1239,23 @@ void gf_sc_reload_config(GF_Compositor *compositor) sOpt = gf_cfg_get_key(compositor->user->config, "Compositor", "ReverseViews"); if (sOpt && !strcmp(sOpt, "yes")) compositor->visual->reverse_views = 1; -#endif + +#endif //GPAC_DISABLE_3D #ifdef GF_SR_USE_DEPTH sOpt = gf_cfg_get_key(compositor->user->config, "Compositor", "AutoStereoCalibration"); - compositor->auto_calibration = (sOpt && !strcmp(sOpt, "yes")) ? 1 : 0; + compositor->auto_calibration = (!sOpt || !strcmp(sOpt, "yes")) ? 1 : 0; sOpt = gf_cfg_get_key(compositor->user->config, "Compositor", "DisplayDepth"); compositor->display_depth = sOpt ? (!strcmp(sOpt, "auto") ? -1 : atoi(sOpt)) : 0; +#ifndef GPAC_DISABLE_3D + /*if auto-stereo mode, turn on display depth by default*/ + if (compositor->visual->autostereo_type && !compositor->display_depth) { + compositor->display_depth = -1; + } +#endif + if (!compositor->video_out->view_distance) { sOpt = gf_cfg_get_key(compositor->user->config, "Compositor", "ViewDistance"); compositor->video_out->view_distance = FLT2FIX( sOpt ? (Float) atof(sOpt) : 50.0f ); @@ -1574,6 +1589,15 @@ u32 gf_sc_get_option(GF_Compositor *compositor, u32 type) return 0; #endif break; + case GF_OPT_NUM_STEREO_VIEWS: +#ifndef GPAC_DISABLE_3D + if (compositor->visual->type_3d) { + if (compositor->visual->nb_views && compositor->visual->autostereo_type>GF_3D_STEREO_SIDE) + return compositor->visual->nb_views; + } +#endif + return 1; + default: return 0; } } @@ -1606,6 +1630,22 @@ GF_Err gf_sc_get_screen_buffer(GF_Compositor *compositor, GF_VideoSurface *frame return e; } +GF_Err gf_sc_get_offscreen_buffer(GF_Compositor *compositor, GF_VideoSurface *framebuffer, u32 view_idx, u32 depth_dump_mode) +{ + GF_Err e; + if (!compositor || !framebuffer) return GF_BAD_PARAM; +#ifndef GPAC_DISABLE_3D + if (compositor->visual->type_3d && compositor->visual->nb_views && (compositor->visual->autostereo_type>GF_3D_STEREO_SIDE)) { + gf_mx_p(compositor->mx); + e = compositor_3d_get_offscreen_buffer(compositor, framebuffer, view_idx, depth_dump_mode); + if (e != GF_OK) gf_mx_v(compositor->mx); + return e; + } +#endif + return GF_BAD_PARAM; +} + + GF_Err gf_sc_release_screen_buffer(GF_Compositor *compositor, GF_VideoSurface *framebuffer) { GF_Err e; @@ -1805,7 +1845,7 @@ static void gf_sc_recompute_ar(GF_Compositor *compositor, GF_Node *top_node) #ifndef GPAC_DISABLE_3D if (compositor->visual->type_3d) { compositor_3d_set_aspect_ratio(compositor); - gf_sc_load_opengl_extensions(compositor); + gf_sc_load_opengl_extensions(compositor, compositor->visual->type_3d); } else #endif @@ -1847,6 +1887,11 @@ static void gf_sc_draw_scene(GF_Compositor *compositor) if (! visual_draw_frame(compositor->visual, top_node, compositor->traverse_state, 1)) compositor->skip_flush = 1; + + /*if using OpenGL, flush even if no changes as the display may be dirty (as seen on android, likely other devices)*/ +#ifdef GPAC_ANDROID + compositor->skip_flush = 0; +#endif compositor->traverse_state->immediate_draw = flags; @@ -2475,9 +2520,13 @@ static Bool gf_sc_on_event_ex(GF_Compositor *compositor , GF_Event *event, Bool { /*not assigned yet*/ if (!compositor || !compositor->visual) return 0; - /*we're reconfiguring the video output, cancel all messages*/ - if (compositor->msg_type & GF_SR_IN_RECONFIG) return 0; - + /*we're reconfiguring the video output, cancel all messages except GL reconfig (context lost)*/ + if (compositor->msg_type & GF_SR_IN_RECONFIG) { + if (event->type==GF_EVENT_VIDEO_SETUP) { + compositor->reset_graphics = 2; + } + return 0; + } switch (event->type) { case GF_EVENT_MOVE: case GF_EVENT_REFRESH: diff --git a/src/compositor/compositor_2d.c b/src/compositor/compositor_2d.c index 79a5eb5..154dd5c 100644 --- a/src/compositor/compositor_2d.c +++ b/src/compositor/compositor_2d.c @@ -498,6 +498,8 @@ static Bool compositor_2d_draw_bitmap_ex(GF_VisualManager *visual, GF_TextureHan case GF_PIXEL_YV12: case GF_PIXEL_IYUV: case GF_PIXEL_I420: + case GF_PIXEL_YVYU: + case GF_PIXEL_YUY2: case GF_PIXEL_YUVD: if (hw_caps & GF_VIDEO_HW_HAS_YUV) use_soft_stretch = 0; else if (hw_caps & GF_VIDEO_HW_HAS_YUV_OVERLAY) overlay_type = 1; @@ -702,6 +704,8 @@ Bool compositor_2d_draw_bitmap(GF_VisualManager *visual, GF_TraverseState *tr_st case GF_PIXEL_RGBA: case GF_PIXEL_YV12: case GF_PIXEL_IYUV: + case GF_PIXEL_YVYU: + case GF_PIXEL_YUY2: case GF_PIXEL_I420: case GF_PIXEL_YUVA: case GF_PIXEL_RGBS: diff --git a/src/compositor/compositor_3d.c b/src/compositor/compositor_3d.c index b93a7cf..d1c8f27 100644 --- a/src/compositor/compositor_3d.c +++ b/src/compositor/compositor_3d.c @@ -186,24 +186,30 @@ void compositor_3d_draw_bitmap(Drawable *stack, DrawAspect2D *asp, GF_TraverseSt #endif GF_TextureHandler *txh; GF_Compositor *compositor = tr_state->visual->compositor; + Bool use_texture = !compositor->bitmap_use_pixels; - - if (!asp->fill_texture) return; + if (!asp->fill_texture) + return; txh = asp->fill_texture; - if (!txh || !txh->tx_io || !txh->width || !txh->height) return; - - if ((txh->pixelformat==GF_PIXEL_RGBD) || (txh->pixelformat==GF_PIXEL_YUVD)) { - if (txh->data && gf_sc_texture_convert(txh) ) - visual_3d_point_sprite(tr_state->visual, stack, txh, tr_state); + if (!txh || !txh->tx_io || !txh->width || !txh->height) return; - } + + if (((txh->pixelformat==GF_PIXEL_RGBD) || (txh->pixelformat==GF_PIXEL_YUVD))) { + if (compositor->depth_gl_type) { + if (txh->data && gf_sc_texture_convert(txh) ) + visual_3d_point_sprite(tr_state->visual, stack, txh, tr_state); + return; + } else { + use_texture = 1; + } + } alpha = GF_COL_A(asp->fill_color); /*THIS IS A HACK, will not work when setting filled=0, transparency and XLineProps*/ if (!alpha) alpha = GF_COL_A(asp->line_color); /*texture is available in hw, use it - if blending, force using texture*/ - if (!gf_sc_texture_needs_reload(txh) || (alpha != 0xFF) || !compositor->bitmap_use_pixels + if (!gf_sc_texture_needs_reload(txh) || (alpha != 0xFF) || use_texture #ifdef GF_SR_USE_DEPTH || tr_state->depth_offset #endif diff --git a/src/compositor/events.c b/src/compositor/events.c index ab76d54..bb4c25c 100644 --- a/src/compositor/events.c +++ b/src/compositor/events.c @@ -714,8 +714,11 @@ static Bool exec_event_dom(GF_Compositor *compositor, GF_Event *event) evt.button = event->mouse.button; evt.detail = compositor->num_clicks; ret += gf_dom_event_fire_ex(compositor->grab_node, &evt, compositor->hit_use_stack); - -#if !defined(_WIN32_WCE) +/* +TODO quick- fix for iPhone as well +TODO clean: figure out whether we use a mouse or a touch device - if touch device, remove this test +*/ +#if !defined(_WIN32_WCE) || !defined(GPAC_ANDROID) if ((compositor->grab_x == X) && (compositor->grab_y == Y)) #endif { diff --git a/src/compositor/gl_inc.h b/src/compositor/gl_inc.h index 295ac66..d0aa84b 100644 --- a/src/compositor/gl_inc.h +++ b/src/compositor/gl_inc.h @@ -100,7 +100,7 @@ extern proc_ ## funname funname; \ //no extensions with TinyGL #elif defined (GPAC_USE_OGL_ES) //no extensions with OpenGL ES -#elif defined (GPAC_CONFIG_WIN32) +#elif defined(WIN32) || defined (GPAC_CONFIG_WIN32) #define LOAD_GL_FUNCS #define GET_GLFUN(funname) funname = (proc_ ## funname) wglGetProcAddress(#funname) #elif defined(CONFIG_DARWIN_GL) @@ -282,13 +282,15 @@ GLDECL(void, glActiveTexture, (GLenum texture) ) GLDECL(void, glClientActiveTexture, (GLenum texture) ) #define GL_ARRAY_BUFFER 0x8892 +#define GL_STREAM_DRAW 0x88E0 #define GL_STATIC_DRAW 0x88E4 +#define GL_DYNAMIC_DRAW 0x88E8 GLDECL(void, glGenBuffers, (GLsizei , GLuint *) ) GLDECL(void, glDeleteBuffers, (GLsizei , GLuint *) ) GLDECL(void, glBindBuffer, (GLenum, GLuint ) ) GLDECL(void, glBufferData, (GLenum, int, void *, GLenum) ) - +GLDECL(void, glBufferSubData, (GLenum, int, int, void *) ) #endif //GL_VERSION_1_3 diff --git a/src/compositor/hardcoded_protos.c b/src/compositor/hardcoded_protos.c index b188ec6..159b27a 100644 --- a/src/compositor/hardcoded_protos.c +++ b/src/compositor/hardcoded_protos.c @@ -663,7 +663,7 @@ static void TraverseDepthGroup(GF_Node *node, void *rs, Bool is_destroy) gf_mx_copy(mx_bckup, tr_state->model_matrix); gf_mx_init(mx); - mx.m[14] = stack->dg.depth_offset; + mx.m[14] = gf_mulfix(stack->dg.depth_offset, tr_state->visual->compositor->depth_gl_scale); gf_mx_add_matrix(&tr_state->model_matrix, &mx); if (tr_state->traversing_mode == TRAVERSE_SORT) { @@ -889,6 +889,8 @@ static void TraverseUntransform(GF_Node *node, void *rs, Bool is_destroy) GF_Matrix mx_model; GF_Camera backup_cam; + if (!tr_state->camera) return; + gf_mx_copy(mx_model, tr_state->model_matrix); gf_mx_init(tr_state->model_matrix); @@ -897,6 +899,8 @@ static void TraverseUntransform(GF_Node *node, void *rs, Bool is_destroy) camera_invalidate(tr_state->camera); tr_state->camera->is_3D=0; + tr_state->camera->flags |= CAM_NO_LOOKAT; + tr_state->camera->end_zoom = FIX_ONE; camera_update(tr_state->camera, NULL, 1, 0, 0, 0, GF_3D_CAMERA_STRAIGHT); diff --git a/src/compositor/mpeg4_background2d.c b/src/compositor/mpeg4_background2d.c index 2e84fd8..214330c 100644 --- a/src/compositor/mpeg4_background2d.c +++ b/src/compositor/mpeg4_background2d.c @@ -233,11 +233,16 @@ static void DrawBackground2D_3D(M_Background2D *bck, Background2DStack *st, GF_T tr_state->bbox.max_edge.y - tr_state->bbox.min_edge.y, FIX_ONE); /*when in layer2D, DON'T MOVE BACKGROUND TO ZFAR*/ + if (!tr_state->is_layer) { + Fixed tr; #ifdef GPAC_FIXED_POINT - if (!tr_state->is_layer) gf_mx_add_translation(&mx, 0, 0, -(tr_state->camera->z_far/100)*99); + tr = -(tr_state->camera->z_far/100)*99; #else - if (!tr_state->is_layer) gf_mx_add_translation(&mx, 0, 0, -0.999f*tr_state->camera->z_far); + tr = -0.999f*tr_state->camera->z_far; #endif + if (!tr_state->camera->is_3D) tr = -tr; + gf_mx_add_translation(&mx, 0, 0, tr); + } } visual_3d_matrix_add(tr_state->visual, mx.m); visual_3d_mesh_paint(tr_state, st->mesh); diff --git a/src/compositor/mpeg4_composite.c b/src/compositor/mpeg4_composite.c index 2a9af10..0f8b92a 100644 --- a/src/compositor/mpeg4_composite.c +++ b/src/compositor/mpeg4_composite.c @@ -421,6 +421,8 @@ static void composite_update(GF_TextureHandler *txh) st->unsupported = 1; return; } + /*reload openGL ext*/ + gf_sc_load_opengl_extensions(compositor, 1); #endif } } else { @@ -440,7 +442,7 @@ static void composite_update(GF_TextureHandler *txh) #ifdef GPAC_USE_TINYGL if (st->visual->type_3d && !compositor->visual->type_3d) { st->tgl_ctx = ostgl_create_context(txh->width, txh->height, txh->transparent ? 32 : 24, &txh->data, 1); - GF_LOG(GF_LOG_DEBUG, GF_LOG_COMPOSE, ("[CompositeTexture] Creating TinyGL Offscreen context 0x%08x (%d %d - pf %s)\n", st->tgl_ctx, txh->width, txh->width, gf_4cc_to_str(txh->pixelformat))); + GF_LOG(GF_LOG_DEBUG, GF_LOG_COMPOSE, ("[CompositeTexture] Creating TinyGL Offscreen context %p (%d %d - pf %s)\n", st->tgl_ctx, txh->width, txh->width, gf_4cc_to_str(txh->pixelformat))); } #endif diff --git a/src/compositor/mpeg4_grouping.c b/src/compositor/mpeg4_grouping.c index bf05282..88119bd 100644 --- a/src/compositor/mpeg4_grouping.c +++ b/src/compositor/mpeg4_grouping.c @@ -467,6 +467,7 @@ void group_3d_traverse(GF_Node *node, GroupingNode *group, GF_TraverseState *tr_ /*not parent (eg form, layout...) sub-tree not dirty and getting bounds, direct copy */ else if (tr_state->traversing_mode==TRAVERSE_GET_BOUNDS) { tr_state->bbox = group->bbox; + if (!tr_state->bbox.is_set) tr_state->bbox.radius=-FIX_ONE; gf_node_dirty_clear(node, 0); return; } diff --git a/src/compositor/mpeg4_grouping_2d.c b/src/compositor/mpeg4_grouping_2d.c index f67f0a7..dfd09e5 100644 --- a/src/compositor/mpeg4_grouping_2d.c +++ b/src/compositor/mpeg4_grouping_2d.c @@ -52,7 +52,6 @@ static void TraverseSwitch(GF_Node *node, void *rs, Bool is_destroy) gf_free(st); return; } - if (gf_node_get_name(node)) { node = node; @@ -97,7 +96,26 @@ static void TraverseSwitch(GF_Node *node, void *rs, Bool is_destroy) tr_state->switched_off = prev_switch; } - if (children && (whichChoice>=0)) { + if (!children) return; + if (whichChoice==-2) { +#ifndef GPAC_DISABLE_3D + if (tr_state->visual->autostereo_type) { + u32 idx; + u32 count = gf_node_list_get_count(children); + /*this should be a bit more subtle (reusing views if missing, ...)...*/ + idx = tr_state->visual->current_view % count; + + child = (GF_Node*)gf_node_list_get_child(children, idx); + gf_node_traverse(child, tr_state); + return; + } else +#endif //GPAC_DISABLE_3D + { + /*fallback to first view*/ + whichChoice=0; + } + } + if (whichChoice>=0) { child = (GF_Node*)gf_node_list_get_child(children, whichChoice); gf_node_traverse(child, tr_state); } @@ -379,6 +397,7 @@ static void TraverseOrderedGroup(GF_Node *node, void *rs, Bool is_destroy) } if (!og->order.count || (tr_state->traversing_mode==TRAVERSE_GET_BOUNDS) ) { + gf_node_dirty_clear(node, GF_SG_NODE_DIRTY); group_2d_traverse(node, (GroupingNode2D*)stack, tr_state); return; } diff --git a/src/compositor/mpeg4_layer_3d.c b/src/compositor/mpeg4_layer_3d.c index d4cba7d..23e0041 100644 --- a/src/compositor/mpeg4_layer_3d.c +++ b/src/compositor/mpeg4_layer_3d.c @@ -170,8 +170,8 @@ u32 layer3d_setup_offscreen(GF_Node *node, Layer3DStack *st, GF_TraverseState *t #endif /*FIXME - we assume RGB+Depth+bitshape, we should check with the video out module*/ -#ifdef GF_SR_USE_DEPTH - new_pixel_format = GF_PIXEL_RGBDS; +#if defined(GF_SR_USE_DEPTH) && !defined(GPAC_DISABLE_3D) + if (st->visual->type_3d && (compositor->video_out->hw_caps & GF_VIDEO_HW_HAS_DEPTH) ) new_pixel_format = GF_PIXEL_RGBDS; #endif w = (u32) FIX2INT(gf_ceil(width)); @@ -251,6 +251,8 @@ u32 layer3d_setup_offscreen(GF_Node *node, Layer3DStack *st, GF_TraverseState *t st->unsupported = 1; return 0; } + /*reload openGL ext*/ + gf_sc_load_opengl_extensions(compositor, 1); } #endif st->txh.data = (char*)gf_malloc(sizeof(unsigned char) * st->txh.stride * st->txh.height); @@ -605,7 +607,7 @@ layer3d_unchanged_2d: start.y = gf_muldiv(start.y, st->visual->camera.height, st->clip.height); } - visual_3d_setup_projection(tr_state); + visual_3d_setup_projection(tr_state, 1); in_x = 2 * gf_divfix(start.x, st->visual->camera.width); in_y = 2 * gf_divfix(start.y, st->visual->camera.height); diff --git a/src/compositor/mpeg4_layout.c b/src/compositor/mpeg4_layout.c index ee714a7..7b864e9 100644 --- a/src/compositor/mpeg4_layout.c +++ b/src/compositor/mpeg4_layout.c @@ -667,7 +667,8 @@ static void TraverseLayout(GF_Node *node, void *rs, Bool is_destroy) } recompute_layout = 0; - if (gf_node_dirty_get(node)) recompute_layout = 1; + if (gf_node_dirty_get(node)) + recompute_layout = 1; /*setup clipping*/ prev_clip = tr_state->visual->top_clipper; @@ -705,9 +706,11 @@ static void TraverseLayout(GF_Node *node, void *rs, Bool is_destroy) /*apply justification*/ layout_justify(st, l); - - /*prepare initial scroll bounds*/ -// layout_setup_scroll_bounds(st, l); + + /*if scrolling, update bounds*/ + if (l->scrollRate && st->is_scrolling) { + layout_setup_scroll_bounds(st, l); + } } diff --git a/src/compositor/mpeg4_textures.c b/src/compositor/mpeg4_textures.c index fbafe8a..62d6fe5 100644 --- a/src/compositor/mpeg4_textures.c +++ b/src/compositor/mpeg4_textures.c @@ -23,7 +23,6 @@ */ #include "texturing.h" -//#include "nodes_stacks.h" #include #include @@ -34,6 +33,12 @@ #ifdef __cplusplus extern "C" { #endif + +/*for cache texture decode and hash*/ +#include +#include + + typedef struct { GF_TextureHandler txh; @@ -237,6 +242,9 @@ static void imagetexture_destroy(GF_Node *node, void *rs, Bool is_destroy) gf_delete_file((char*)file); gf_cfg_del_section(txh->compositor->user->config, section); } + + if (txh->data) gf_free(txh->data); + txh->data = NULL; } gf_sc_texture_destroy(txh); gf_free(txh); @@ -245,31 +253,123 @@ static void imagetexture_destroy(GF_Node *node, void *rs, Bool is_destroy) static void imagetexture_update(GF_TextureHandler *txh) { - MFURL url; - SFURL sfurl; if (gf_node_get_tag(txh->owner)!=TAG_MPEG4_CacheTexture) { - url = ((M_ImageTexture *) txh->owner)->url; - } else { - url.count = 1; - sfurl.OD_ID=GF_MEDIA_EXTERNAL_ID; - sfurl.url = ((M_CacheTexture *) txh->owner)->image.buffer; - url.vals = &sfurl; - } + MFURL url = ((M_ImageTexture *) txh->owner)->url; - /*setup texture if needed*/ - if (!txh->is_open && url.count) { - gf_sc_texture_play(txh, &url); - } - gf_sc_texture_update_frame(txh, 0); - - if ( - /*URL is present but not opened - redraw till fetch*/ - /* (txh->stream && !txh->tx_io) && */ - /*image has been updated*/ - txh->needs_refresh) { - /*mark all subtrees using this image as dirty*/ - gf_node_dirty_parents(txh->owner); - gf_sc_invalidate(txh->compositor, NULL); + /*setup texture if needed*/ + if (!txh->is_open && url.count) { + gf_sc_texture_play(txh, &url); + } + gf_sc_texture_update_frame(txh, 0); + + if ( + /*URL is present but not opened - redraw till fetch*/ + /* (txh->stream && !txh->tx_io) && */ + /*image has been updated*/ + txh->needs_refresh) { + /*mark all subtrees using this image as dirty*/ + gf_node_dirty_parents(txh->owner); + gf_sc_invalidate(txh->compositor, NULL); + } + return; + } + /*cache texture case*/ + else { + M_CacheTexture *ct = (M_CacheTexture *) txh->owner; + + /*decode cacheTexture data */ + if (ct->data && !txh->data) { + u32 out_size; + GF_Err e; + switch (ct->objectTypeIndication) { + case GPAC_OTI_IMAGE_JPEG: + out_size = 0; + e = gf_img_jpeg_dec(ct->data, ct->data_len, &txh->width, &txh->height, &txh->pixelformat, NULL, &out_size, 3); + if (e==GF_BUFFER_TOO_SMALL) { + u32 BPP; + txh->data = gf_malloc(sizeof(char) * out_size); + if (txh->pixelformat==GF_PIXEL_GREYSCALE) BPP = 1; + else BPP = 3; + + e = gf_img_jpeg_dec(ct->data, ct->data_len, &txh->width, &txh->height, &txh->pixelformat, txh->data, &out_size, BPP); + if (e==GF_OK) { + txh->needs_refresh = 1; + txh->stride = out_size / txh->height; + } + } + break; + case GPAC_OTI_IMAGE_PNG: + out_size = 0; + e = gf_img_png_dec(ct->data, ct->data_len, &txh->width, &txh->height, &txh->pixelformat, NULL, &out_size); + if (e==GF_BUFFER_TOO_SMALL) { + txh->data = gf_malloc(sizeof(char) * out_size); + e = gf_img_png_dec(ct->data, ct->data_len, &txh->width, &txh->height, &txh->pixelformat, txh->data, &out_size); + if (e==GF_OK) { + txh->needs_refresh = 1; + txh->stride = out_size / txh->height; + } + } + break; + } + + /*cacheURL is specified, store the image*/ + if (ct->cacheURL.buffer) { + u32 i; + u8 hash[20]; + FILE *cached_texture; + char szExtractName[GF_MAX_PATH], section[16], *opt, *src_url; + opt = (char *) gf_cfg_get_key(txh->compositor->user->config, "General", "CacheDirectory"); + if (opt) { + strcpy(szExtractName, opt); + } else { + opt = gf_get_default_cache_directory(); + strcpy(szExtractName, opt); + gf_free(opt); + } + strcat(szExtractName, "/"); + src_url = (char *) gf_scene_get_service_url( gf_node_get_graph(txh->owner ) ); + + gf_sha1_csum(src_url, strlen(src_url), hash); + for (i=0; i<20; i++) { + char t[3]; + t[2] = 0; + sprintf(t, "%02X", hash[i]); + strcat(szExtractName, t); + } + strcat(szExtractName, "_"); + + strcat(szExtractName, ct->cacheURL.buffer); + cached_texture = gf_f64_open(szExtractName, "wb"); + if (cached_texture) { + fwrite(ct->data, 1, ct->data_len, cached_texture); + fclose(cached_texture); + } + + /*and write cache info*/ + if (ct->expirationDate!=0) { + sprintf(section, "@cache=%08X", (u32) (PTR_TO_U_CAST ct)); + gf_cfg_set_key(txh->compositor->user->config, section, "serviceURL", src_url); + gf_cfg_set_key(txh->compositor->user->config, section, "cacheFile", szExtractName); + gf_cfg_set_key(txh->compositor->user->config, section, "cacheName", ct->cacheURL.buffer); + + if (ct->expirationDate>0) { + char exp[50]; + u32 sec, frac; + gf_net_get_ntp(&sec, &frac); + sec += ct->expirationDate; + sprintf(exp, "%u", sec); + gf_cfg_set_key(txh->compositor->user->config, section, "expireAfterNTP", exp); + } else { + gf_cfg_set_key(txh->compositor->user->config, section, "expireAfterNTP", "0"); + } + } + } + + /*done with image, destroy buffer*/ + gf_free(ct->data); + ct->data =NULL; + ct->data_len = 0; + } } } @@ -287,7 +387,6 @@ void compositor_init_imagetexture(GF_Compositor *compositor, GF_Node *node) if (((M_ImageTexture*)node)->repeatS) txh->flags |= GF_SR_TEXTURE_REPEAT_S; if (((M_ImageTexture*)node)->repeatT) txh->flags |= GF_SR_TEXTURE_REPEAT_T; } else { - char section[16]; const char *url; u32 i, count; M_CacheTexture*ct = (M_CacheTexture*)node; @@ -314,25 +413,6 @@ void compositor_init_imagetexture(GF_Compositor *compositor, GF_Node *node) } } - sprintf(section, "@cache=%08X", (u32) (PTR_TO_U_CAST ct)); - gf_cfg_set_key(compositor->user->config, section, "serviceURL", url); - gf_cfg_set_key(compositor->user->config, section, "cacheFile", ct->image.buffer); - - /*setup cache if needed*/ - if (ct->cacheURL.buffer && (ct->expirationDate!=0) ) { - char exp[50]; - u32 sec, frac; - gf_cfg_set_key(compositor->user->config, section, "cacheName", ct->cacheURL.buffer); - - if (ct->expirationDate>0) { - gf_net_get_ntp(&sec, &frac); - sec += ct->expirationDate; - sprintf(exp, "%u", sec); - } else { - strcpy(exp, "0"); - } - gf_cfg_set_key(compositor->user->config, section, "expireAfterNTP", exp); - } } } diff --git a/src/compositor/navigate.c b/src/compositor/navigate.c index bd46767..d4cf4b1 100644 --- a/src/compositor/navigate.c +++ b/src/compositor/navigate.c @@ -218,6 +218,10 @@ Bool gf_sc_fit_world_to_screen(GF_Compositor *compositor) if (!tr_state.bbox.is_set) { gf_mx_v(compositor->mx); + /*empty world ...*/ + if (tr_state.bbox.radius==-1) return 1; + /*2D world with 3D camera forced*/ + if (tr_state.bounds.width&&tr_state.bounds.height) return 1; return 0; } diff --git a/src/compositor/svg_base.c b/src/compositor/svg_base.c index 54a8a77..c45be6d 100644 --- a/src/compositor/svg_base.c +++ b/src/compositor/svg_base.c @@ -114,7 +114,7 @@ void compositor_svg_restore_parent_transformation(GF_TraverseState *tr_state, GF gf_mx2d_copy(tr_state->transform, *backup_matrix_2d); } -#ifdef UNUSED_FUNC +#ifdef GPAC_UNUSED_FUNC static void gf_svg_apply_inheritance_no_inheritance(SVGAllAttributes *all_atts, SVGPropertiesPointers *render_svg_props) { #define CHECK_PROP(a, b) if (b) a = b; @@ -138,7 +138,7 @@ static void gf_svg_apply_inheritance_no_inheritance(SVGAllAttributes *all_atts, CHECK_PROP(render_svg_props->stroke_width, all_atts->stroke_width); CHECK_PROP(render_svg_props->visibility, all_atts->visibility); } -#endif /* UNUSED_FUNC */ +#endif /*GPAC_UNUSED_FUNC*/ static const struct svg_11_feature { const char *name; Bool supported; } svg11_features[] = { diff --git a/src/compositor/svg_filters.c b/src/compositor/svg_filters.c index da43f8c..b6070d8 100644 --- a/src/compositor/svg_filters.c +++ b/src/compositor/svg_filters.c @@ -1,429 +1,429 @@ -/* - * GPAC - Multimedia Framework C SDK - * - * Authors: Jean le Feuvre - * Copyright (c) 2010-200X ENST - * All rights reserved - * - * This file is part of GPAC / Scene Compositor sub-project - * - * GPAC is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * GPAC 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -#include "visual_manager.h" - -#ifndef GPAC_DISABLE_SVG -#include "nodes_stacks.h" -#include "texturing.h" - -typedef struct -{ - GF_TextureHandler txh; - Drawable *drawable; - u8 *data; - u32 alloc_size; -} GF_FilterStack; - - - -void apply_feComponentTransfer(GF_Node *node, GF_TextureHandler *source, GF_Rect *region) -{ - GF_ChildNodeItem *l = ((GF_ParentNode*)node)->children; - while (l) { - SVG_Filter_TransferType type = SVG_FILTER_TRANSFER_IDENTITY; - u32 i, j; - GF_List *table = NULL; - Fixed slope = FIX_ONE; - Fixed intercept = 0; - Fixed amplitude = 1; - Fixed exponent = 1; - Fixed offset = 0; - u8 *ptr = NULL; - /*FIXME: unused u32 tag = gf_node_get_tag(l->node);*/ - GF_DOMAttribute *att = ((SVG_Element *)l->node)->attributes; - - while (att) { - switch (att->tag) { - case TAG_SVG_ATT_filter_transfer_type: type = *(u8*)att->data; break; - case TAG_SVG_ATT_filter_table_values: table = *(GF_List **)att->data; break; - case TAG_SVG_ATT_slope: slope = ((SVG_Number *)att->data)->value; break; - case TAG_SVG_ATT_filter_intercept: intercept = ((SVG_Number *)att->data)->value; break; - case TAG_SVG_ATT_filter_amplitude: amplitude = ((SVG_Number *)att->data)->value; break; - case TAG_SVG_ATT_filter_exponent: exponent = ((SVG_Number *)att->data)->value; break; - case TAG_SVG_ATT_offset: offset = ((SVG_Number *)att->data)->value; break; - } - att = att->next; - } - if (type==SVG_FILTER_TRANSFER_IDENTITY) { - l = l->next; - continue; - } - switch (gf_node_get_tag(l->node)) { - case TAG_SVG_feFuncR: - if (source->pixelformat==GF_PIXEL_RGBA) ptr = source->data; - else ptr = source->data+2; - break; - case TAG_SVG_feFuncG: - if (source->pixelformat==GF_PIXEL_RGBA) ptr = source->data+1; - else ptr = source->data+1; - break; - case TAG_SVG_feFuncB: - if (source->pixelformat==GF_PIXEL_RGBA) ptr = source->data+2; - else ptr = source->data; - break; - case TAG_SVG_feFuncA: - if (source->pixelformat==GF_PIXEL_RGBA) ptr = source->data+3; - else ptr = source->data+3; - break; - } - - if ((type==SVG_FILTER_TRANSFER_LINEAR) && (intercept || (slope!=FIX_ONE)) ) { - intercept *= 255; - assert( ptr ); - for (i=0; iheight; i++) { - for (j=0; jwidth; j++) { - Fixed p = (*ptr) * slope + intercept; - ptr[0] = (u8) MIN(MAX(0, p), 255); - ptr += 4; - } - } - } else if (type==SVG_FILTER_TRANSFER_GAMMA) { - assert( ptr ); - for (i=0; iheight; i++) { - for (j=0; jwidth; j++) { - Fixed p = 255 * gf_mulfix(amplitude, FLT2FIX( pow( INT2FIX(*ptr)/255, FIX2FLT(exponent) ) ) ) + offset; - ptr[0] = (u8) MIN(MAX(0, p), 255); - ptr += 4; - } - } - } else if ((type==SVG_FILTER_TRANSFER_TABLE) && table && (gf_list_count(table)>=2) ) { - u32 count = gf_list_count(table); - u32 N = count-1; - assert( ptr ); - for (i=0; iheight; i++) { - for (j=0; jwidth; j++) { - SVG_Number *vk, *vk1; - Fixed p = INT2FIX(ptr[0]) / 255; - Fixed pN = p*N; - u32 k = FIX2INT(p*N); - if (k==N) k--; - vk = gf_list_get(table, k); - vk1 = gf_list_get(table, k+1); - p = 255 * ( vk->value + gf_mulfix( pN - INT2FIX(k), (vk1->value - vk->value)) ); - ptr[0] = (u8) MIN(MAX(0, p), 255); - ptr += 4; - } - } - } else if ((type==SVG_FILTER_TRANSFER_DISCRETE) && table && gf_list_count(table) ) { - u32 count = gf_list_count(table); - assert( ptr ); - for (i=0; iheight; i++) { - for (j=0; jwidth; j++) { - SVG_Number *vk; - Fixed p = INT2FIX(ptr[0]) / 255; - Fixed pN = p*count; - u32 k = 0; - while (kpN) break; - k++; - } - if (k) k--; - vk = gf_list_get(table, k); - p = 255 * vk->value; - ptr[0] = (u8) MIN(MAX(0, p), 255); - ptr += 4; - } - } - } - l = l->next; - } -} - -void svg_filter_apply(GF_Node *node, GF_TextureHandler *source, GF_Rect *region) -{ - GF_ChildNodeItem *l = ((GF_ParentNode*)node)->children; - - while (l) { - switch (gf_node_get_tag(l->node)) { - case TAG_SVG_feComponentTransfer: - apply_feComponentTransfer(l->node, source, region); - break; - } - l = l->next; - } -} - -/* - This is a crude draft implementation of filter. The main drawback is that we don't cache any data. - We should be able to check for changes in the sub-group or in the filter -*/ -void svg_draw_filter(GF_Node *filter, GF_Node *node, GF_TraverseState *tr_state) -{ - GF_IRect rc1, rc2; - -#ifndef GPAC_DISABLE_3D - u32 type_3d; -#endif - u32 prev_flags; - GF_IRect txrc; - Fixed scale_x, scale_y, temp_x, temp_y; - DrawableContext *ctx, *child_ctx; - GF_SURFACE offscreen_surface, old_surf; - GF_Rect bounds, local_bounds, rc; - GF_Matrix2D backup; - SVGAllAttributes all_atts; - GF_FilterStack *st = gf_node_get_private(filter); - assert(tr_state->traversing_mode==TRAVERSE_SORT); - - /*store the current transform matrix, create a new one for group_cache*/ - gf_mx2d_copy(backup, tr_state->transform); - gf_mx2d_init(tr_state->transform); - - gf_node_allow_cyclic_traverse(node); - tr_state->traversing_mode = TRAVERSE_GET_BOUNDS; - tr_state->bounds.width = tr_state->bounds.height = 0; - gf_node_traverse(node, tr_state); - - local_bounds = bounds = tr_state->bounds; - /*compute bounds in final coordinate system - this ensures that the cache has the correct anti aliasing*/ - gf_mx2d_apply_rect(&backup, &bounds); - txrc = gf_rect_pixelize(&bounds); - if (txrc.width%2) txrc.width++; - if (txrc.height%2) txrc.height++; - bounds = gf_rect_ft(&txrc); - - tr_state->traversing_mode = TRAVERSE_SORT; - - gf_mx2d_copy(tr_state->transform, backup); - - if (!bounds.width || !bounds.height) { - return; - } - - /*create a context */ - ctx = drawable_init_context_svg(st->drawable, tr_state); - if (!ctx) return; - - /*setup texture */ - st->txh.height = txrc.height; - st->txh.width = txrc.width; - - st->txh.stride = txrc.width * 4; - st->txh.pixelformat = GF_PIXEL_ARGB; -#ifndef GPAC_DISABLE_3D - if (tr_state->visual->type_3d) st->txh.pixelformat = GF_PIXEL_RGBA; -#endif - st->txh.transparent = 1; - - if (st->txh.stride * st->txh.height > st->alloc_size) { - st->alloc_size = st->txh.stride * st->txh.height; - st->data = (u8*)gf_realloc(st->data, sizeof(u8) * st->alloc_size); - } - memset(st->data, 0x0, sizeof(char) * st->txh.stride * st->txh.height); - st->txh.data = st->data; - /*setup geometry (rectangle matching the bounds of the object) - Warning, we want to center the cached bitmap at the center of the screen (main visual)*/ - gf_path_reset(st->drawable->path); - - gf_path_add_rect_center(st->drawable->path, - bounds.x + bounds.width/2, - bounds.y - bounds.height/2, - bounds.width, - bounds.height); - - - old_surf = tr_state->visual->raster_surface; - offscreen_surface = tr_state->visual->compositor->rasterizer->surface_new(tr_state->visual->compositor->rasterizer, tr_state->visual->center_coords); - tr_state->visual->raster_surface = offscreen_surface; - - gf_mx2d_copy(backup, tr_state->transform); - gf_mx2d_init(tr_state->transform); - - /*attach the buffer to visual*/ - tr_state->visual->compositor->rasterizer->surface_attach_to_buffer(offscreen_surface, st->txh.data, - st->txh.width, - st->txh.height, - 0, - st->txh.stride, - st->txh.pixelformat); - - prev_flags = tr_state->immediate_draw; - tr_state->immediate_draw = 1; - tr_state->traversing_mode = TRAVERSE_SORT; - tr_state->in_svg_filter = 1; - - /*recompute the bounds with the final scaling used*/ - scale_x = gf_divfix(bounds.width, local_bounds.width); - scale_y = gf_divfix(bounds.height, local_bounds.height); - gf_mx2d_init(tr_state->transform); - gf_mx2d_add_scale(&tr_state->transform, scale_x, scale_y); - - rc = local_bounds; - gf_mx2d_apply_rect(&tr_state->transform, &rc); - - /*centered the bitmap on the visual*/ - if (tr_state->visual->center_coords) { - temp_x = -rc.x - rc.width/2; - temp_y = rc.height/2 - rc.y; - } else { - temp_x = -rc.x; - temp_y = rc.height - rc.y; - } - gf_mx2d_add_translation(&tr_state->transform, temp_x, temp_y); - - - rc1 = tr_state->visual->surf_rect; - rc2 = tr_state->visual->top_clipper; - tr_state->visual->surf_rect.width = st->txh.width; - tr_state->visual->surf_rect.height = st->txh.height; - if (tr_state->visual->center_coords) { - tr_state->visual->surf_rect.y = st->txh.height/2; - tr_state->visual->surf_rect.x = -1 * (s32) st->txh.width/2; - } else { - tr_state->visual->surf_rect.y = st->txh.height; - tr_state->visual->surf_rect.x = 0; - } - tr_state->visual->top_clipper = tr_state->visual->surf_rect; - - -#ifndef GPAC_DISABLE_3D - type_3d = tr_state->visual->type_3d; - tr_state->visual->type_3d=0; -#endif - - if (prev_flags) gf_node_allow_cyclic_traverse(node); - gf_node_traverse(node, tr_state); - - child_ctx = ctx->next; - while (child_ctx && child_ctx->drawable) { - drawable_reset_bounds(child_ctx->drawable, tr_state->visual); - child_ctx->drawable = NULL; - child_ctx = child_ctx->next; - } - tr_state->visual->cur_context = ctx; - - - /*restore state and destroy whatever needs to be cleaned*/ - tr_state->in_svg_filter = 0; - tr_state->immediate_draw = prev_flags; - tr_state->visual->compositor->rasterizer->surface_delete(offscreen_surface); - tr_state->visual->raster_surface = old_surf; - tr_state->traversing_mode = TRAVERSE_SORT; - tr_state->visual->surf_rect = rc1; - tr_state->visual->top_clipper = rc2; -#ifndef GPAC_DISABLE_3D - tr_state->visual->type_3d = type_3d ; -#endif - - /*update texture*/ - st->txh.transparent = 1; - st->txh.flags |= GF_SR_TEXTURE_NO_GL_FLIP; - gf_sc_texture_set_data(&st->txh); -#ifndef GPAC_DISABLE_3D - if (tr_state->visual->type_3d) - gf_sc_texture_push_image(&st->txh, 0, 0); - else -#endif - gf_sc_texture_push_image(&st->txh, 0, 1); - - ctx->flags |= CTX_NO_ANTIALIAS; - ctx->aspect.fill_color = 0; - ctx->aspect.line_color = 0xFF000000; - ctx->aspect.fill_texture = &st->txh; - ctx->flags |= CTX_TEXTURE_DIRTY; - - /*get the filter region*/ - bounds = local_bounds; - gf_svg_flatten_attributes((SVG_Element *)filter, &all_atts); - if (!all_atts.filterUnits || (*all_atts.filterUnits==SVG_GRADIENTUNITS_OBJECT)) { - Fixed v; - v = all_atts.x ? all_atts.x->value : INT2FIX(-10); - bounds.x += gf_mulfix(v, bounds.width); - v = all_atts.y ? all_atts.y->value : INT2FIX(-10); - bounds.y += gf_mulfix(v, bounds.height); - v = all_atts.width ? all_atts.width->value : INT2FIX(120); - bounds.width = gf_mulfix(v, bounds.width); - v = all_atts.height ? all_atts.height->value : INT2FIX(120); - bounds.height = gf_mulfix(v, bounds.height); - } else { - bounds.x = all_atts.x ? all_atts.x->value : 0; - bounds.y = all_atts.y ? all_atts.y->value : 0; - bounds.width = all_atts.width ? all_atts.x->value : bounds.width; - bounds.height = all_atts.x ? all_atts.x->value : 120; - } - gf_mx2d_apply_rect(&backup, &bounds); - - svg_filter_apply(filter, &st->txh, &bounds); - - -#ifndef GPAC_DISABLE_3D - if (tr_state->visual->type_3d) { - if (!st->drawable->mesh) { - st->drawable->mesh = new_mesh(); - mesh_from_path(st->drawable->mesh, st->drawable->path); - } - visual_3d_draw_from_context(tr_state->ctx, tr_state); - ctx->drawable = NULL; - return; - } -#endif - - /*we computed the texture in final screen coordinate, so use the identity matrix for the context*/ - gf_mx2d_init(tr_state->transform); - drawable_finalize_sort(ctx, tr_state, NULL); - gf_mx2d_copy(tr_state->transform, backup); -} - -static void svg_traverse_filter(GF_Node *node, void *rs, Bool is_destroy) -{ - GF_TraverseState *tr_state = (GF_TraverseState *)rs; - GF_FilterStack *st = gf_node_get_private(node); - if (is_destroy) { - drawable_del(st->drawable); - if (st->data) gf_free(st->data); - st->txh.data = NULL; - gf_sc_texture_release(&st->txh); - gf_sc_texture_destroy(&st->txh); - gf_free(st); - return; - } - - if (tr_state->traversing_mode==TRAVERSE_DRAW_2D) { - if (! tr_state->visual->DrawBitmap(tr_state->visual, tr_state, tr_state->ctx, NULL)) { - visual_2d_texture_path(tr_state->visual, st->drawable->path, tr_state->ctx, tr_state); - } - } -} - -void compositor_init_svg_filter(GF_Compositor *compositor, GF_Node *node) -{ - GF_FilterStack *stack; - GF_SAFEALLOC(stack, GF_FilterStack); - gf_node_set_private(node, stack); - gf_node_set_callback_function(node, svg_traverse_filter); - - - gf_sc_texture_setup(&stack->txh, compositor, node); - stack->drawable = drawable_new(); - /*draw the cache through traverse callback*/ - stack->drawable->flags |= DRAWABLE_USE_TRAVERSE_DRAW; - stack->drawable->node = node; - gf_sc_texture_allocate(&stack->txh); -} - -#endif - - +/* + * GPAC - Multimedia Framework C SDK + * + * Authors: Jean le Feuvre + * Copyright (c) 2010-200X ENST + * All rights reserved + * + * This file is part of GPAC / Scene Compositor sub-project + * + * GPAC is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * GPAC 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; see the file COPYING. If not, write to + * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + * + */ + +#include "visual_manager.h" + +#ifndef GPAC_DISABLE_SVG +#include "nodes_stacks.h" +#include "texturing.h" + +typedef struct +{ + GF_TextureHandler txh; + Drawable *drawable; + u8 *data; + u32 alloc_size; +} GF_FilterStack; + + + +void apply_feComponentTransfer(GF_Node *node, GF_TextureHandler *source, GF_Rect *region) +{ + GF_ChildNodeItem *l = ((GF_ParentNode*)node)->children; + while (l) { + SVG_Filter_TransferType type = SVG_FILTER_TRANSFER_IDENTITY; + u32 i, j; + GF_List *table = NULL; + Fixed slope = FIX_ONE; + Fixed intercept = 0; + Fixed amplitude = 1; + Fixed exponent = 1; + Fixed offset = 0; + u8 *ptr = NULL; + /*FIXME: unused u32 tag = gf_node_get_tag(l->node);*/ + GF_DOMAttribute *att = ((SVG_Element *)l->node)->attributes; + + while (att) { + switch (att->tag) { + case TAG_SVG_ATT_filter_transfer_type: type = *(u8*)att->data; break; + case TAG_SVG_ATT_filter_table_values: table = *(GF_List **)att->data; break; + case TAG_SVG_ATT_slope: slope = ((SVG_Number *)att->data)->value; break; + case TAG_SVG_ATT_filter_intercept: intercept = ((SVG_Number *)att->data)->value; break; + case TAG_SVG_ATT_filter_amplitude: amplitude = ((SVG_Number *)att->data)->value; break; + case TAG_SVG_ATT_filter_exponent: exponent = ((SVG_Number *)att->data)->value; break; + case TAG_SVG_ATT_offset: offset = ((SVG_Number *)att->data)->value; break; + } + att = att->next; + } + if (type==SVG_FILTER_TRANSFER_IDENTITY) { + l = l->next; + continue; + } + switch (gf_node_get_tag(l->node)) { + case TAG_SVG_feFuncR: + if (source->pixelformat==GF_PIXEL_RGBA) ptr = source->data; + else ptr = source->data+2; + break; + case TAG_SVG_feFuncG: + if (source->pixelformat==GF_PIXEL_RGBA) ptr = source->data+1; + else ptr = source->data+1; + break; + case TAG_SVG_feFuncB: + if (source->pixelformat==GF_PIXEL_RGBA) ptr = source->data+2; + else ptr = source->data; + break; + case TAG_SVG_feFuncA: + if (source->pixelformat==GF_PIXEL_RGBA) ptr = source->data+3; + else ptr = source->data+3; + break; + } + + if ((type==SVG_FILTER_TRANSFER_LINEAR) && (intercept || (slope!=FIX_ONE)) ) { + intercept *= 255; + assert( ptr ); + for (i=0; iheight; i++) { + for (j=0; jwidth; j++) { + Fixed p = (*ptr) * slope + intercept; + ptr[0] = (u8) MIN(MAX(0, p), 255); + ptr += 4; + } + } + } else if (type==SVG_FILTER_TRANSFER_GAMMA) { + assert( ptr ); + for (i=0; iheight; i++) { + for (j=0; jwidth; j++) { + Fixed p = 255 * gf_mulfix(amplitude, FLT2FIX( pow( INT2FIX(*ptr)/255, FIX2FLT(exponent) ) ) ) + offset; + ptr[0] = (u8) MIN(MAX(0, p), 255); + ptr += 4; + } + } + } else if ((type==SVG_FILTER_TRANSFER_TABLE) && table && (gf_list_count(table)>=2) ) { + u32 count = gf_list_count(table); + u32 N = count-1; + assert( ptr ); + for (i=0; iheight; i++) { + for (j=0; jwidth; j++) { + SVG_Number *vk, *vk1; + Fixed p = INT2FIX(ptr[0]) / 255; + Fixed pN = p*N; + u32 k = FIX2INT(p*N); + if (k==N) k--; + vk = gf_list_get(table, k); + vk1 = gf_list_get(table, k+1); + p = 255 * ( vk->value + gf_mulfix( pN - INT2FIX(k), (vk1->value - vk->value)) ); + ptr[0] = (u8) MIN(MAX(0, p), 255); + ptr += 4; + } + } + } else if ((type==SVG_FILTER_TRANSFER_DISCRETE) && table && gf_list_count(table) ) { + u32 count = gf_list_count(table); + assert( ptr ); + for (i=0; iheight; i++) { + for (j=0; jwidth; j++) { + SVG_Number *vk; + Fixed p = INT2FIX(ptr[0]) / 255; + Fixed pN = p*count; + u32 k = 0; + while (kpN) break; + k++; + } + if (k) k--; + vk = gf_list_get(table, k); + p = 255 * vk->value; + ptr[0] = (u8) MIN(MAX(0, p), 255); + ptr += 4; + } + } + } + l = l->next; + } +} + +void svg_filter_apply(GF_Node *node, GF_TextureHandler *source, GF_Rect *region) +{ + GF_ChildNodeItem *l = ((GF_ParentNode*)node)->children; + + while (l) { + switch (gf_node_get_tag(l->node)) { + case TAG_SVG_feComponentTransfer: + apply_feComponentTransfer(l->node, source, region); + break; + } + l = l->next; + } +} + +/* + This is a crude draft implementation of filter. The main drawback is that we don't cache any data. + We should be able to check for changes in the sub-group or in the filter +*/ +void svg_draw_filter(GF_Node *filter, GF_Node *node, GF_TraverseState *tr_state) +{ + GF_IRect rc1, rc2; + +#ifndef GPAC_DISABLE_3D + u32 type_3d; +#endif + u32 prev_flags; + GF_IRect txrc; + Fixed scale_x, scale_y, temp_x, temp_y; + DrawableContext *ctx, *child_ctx; + GF_SURFACE offscreen_surface, old_surf; + GF_Rect bounds, local_bounds, rc; + GF_Matrix2D backup; + SVGAllAttributes all_atts; + GF_FilterStack *st = gf_node_get_private(filter); + assert(tr_state->traversing_mode==TRAVERSE_SORT); + + /*store the current transform matrix, create a new one for group_cache*/ + gf_mx2d_copy(backup, tr_state->transform); + gf_mx2d_init(tr_state->transform); + + gf_node_allow_cyclic_traverse(node); + tr_state->traversing_mode = TRAVERSE_GET_BOUNDS; + tr_state->bounds.width = tr_state->bounds.height = 0; + gf_node_traverse(node, tr_state); + + local_bounds = bounds = tr_state->bounds; + /*compute bounds in final coordinate system - this ensures that the cache has the correct anti aliasing*/ + gf_mx2d_apply_rect(&backup, &bounds); + txrc = gf_rect_pixelize(&bounds); + if (txrc.width%2) txrc.width++; + if (txrc.height%2) txrc.height++; + bounds = gf_rect_ft(&txrc); + + tr_state->traversing_mode = TRAVERSE_SORT; + + gf_mx2d_copy(tr_state->transform, backup); + + if (!bounds.width || !bounds.height) { + return; + } + + /*create a context */ + ctx = drawable_init_context_svg(st->drawable, tr_state); + if (!ctx) return; + + /*setup texture */ + st->txh.height = txrc.height; + st->txh.width = txrc.width; + + st->txh.stride = txrc.width * 4; + st->txh.pixelformat = GF_PIXEL_ARGB; +#ifndef GPAC_DISABLE_3D + if (tr_state->visual->type_3d) st->txh.pixelformat = GF_PIXEL_RGBA; +#endif + st->txh.transparent = 1; + + if (st->txh.stride * st->txh.height > st->alloc_size) { + st->alloc_size = st->txh.stride * st->txh.height; + st->data = (u8*)gf_realloc(st->data, sizeof(u8) * st->alloc_size); + } + memset(st->data, 0x0, sizeof(char) * st->txh.stride * st->txh.height); + st->txh.data = st->data; + /*setup geometry (rectangle matching the bounds of the object) + Warning, we want to center the cached bitmap at the center of the screen (main visual)*/ + gf_path_reset(st->drawable->path); + + gf_path_add_rect_center(st->drawable->path, + bounds.x + bounds.width/2, + bounds.y - bounds.height/2, + bounds.width, + bounds.height); + + + old_surf = tr_state->visual->raster_surface; + offscreen_surface = tr_state->visual->compositor->rasterizer->surface_new(tr_state->visual->compositor->rasterizer, tr_state->visual->center_coords); + tr_state->visual->raster_surface = offscreen_surface; + + gf_mx2d_copy(backup, tr_state->transform); + gf_mx2d_init(tr_state->transform); + + /*attach the buffer to visual*/ + tr_state->visual->compositor->rasterizer->surface_attach_to_buffer(offscreen_surface, st->txh.data, + st->txh.width, + st->txh.height, + 0, + st->txh.stride, + st->txh.pixelformat); + + prev_flags = tr_state->immediate_draw; + tr_state->immediate_draw = 1; + tr_state->traversing_mode = TRAVERSE_SORT; + tr_state->in_svg_filter = 1; + + /*recompute the bounds with the final scaling used*/ + scale_x = gf_divfix(bounds.width, local_bounds.width); + scale_y = gf_divfix(bounds.height, local_bounds.height); + gf_mx2d_init(tr_state->transform); + gf_mx2d_add_scale(&tr_state->transform, scale_x, scale_y); + + rc = local_bounds; + gf_mx2d_apply_rect(&tr_state->transform, &rc); + + /*centered the bitmap on the visual*/ + if (tr_state->visual->center_coords) { + temp_x = -rc.x - rc.width/2; + temp_y = rc.height/2 - rc.y; + } else { + temp_x = -rc.x; + temp_y = rc.height - rc.y; + } + gf_mx2d_add_translation(&tr_state->transform, temp_x, temp_y); + + + rc1 = tr_state->visual->surf_rect; + rc2 = tr_state->visual->top_clipper; + tr_state->visual->surf_rect.width = st->txh.width; + tr_state->visual->surf_rect.height = st->txh.height; + if (tr_state->visual->center_coords) { + tr_state->visual->surf_rect.y = st->txh.height/2; + tr_state->visual->surf_rect.x = -1 * (s32) st->txh.width/2; + } else { + tr_state->visual->surf_rect.y = st->txh.height; + tr_state->visual->surf_rect.x = 0; + } + tr_state->visual->top_clipper = tr_state->visual->surf_rect; + + +#ifndef GPAC_DISABLE_3D + type_3d = tr_state->visual->type_3d; + tr_state->visual->type_3d=0; +#endif + + if (prev_flags) gf_node_allow_cyclic_traverse(node); + gf_node_traverse(node, tr_state); + + child_ctx = ctx->next; + while (child_ctx && child_ctx->drawable) { + drawable_reset_bounds(child_ctx->drawable, tr_state->visual); + child_ctx->drawable = NULL; + child_ctx = child_ctx->next; + } + tr_state->visual->cur_context = ctx; + + + /*restore state and destroy whatever needs to be cleaned*/ + tr_state->in_svg_filter = 0; + tr_state->immediate_draw = prev_flags; + tr_state->visual->compositor->rasterizer->surface_delete(offscreen_surface); + tr_state->visual->raster_surface = old_surf; + tr_state->traversing_mode = TRAVERSE_SORT; + tr_state->visual->surf_rect = rc1; + tr_state->visual->top_clipper = rc2; +#ifndef GPAC_DISABLE_3D + tr_state->visual->type_3d = type_3d ; +#endif + + /*update texture*/ + st->txh.transparent = 1; + st->txh.flags |= GF_SR_TEXTURE_NO_GL_FLIP; + gf_sc_texture_set_data(&st->txh); +#ifndef GPAC_DISABLE_3D + if (tr_state->visual->type_3d) + gf_sc_texture_push_image(&st->txh, 0, 0); + else +#endif + gf_sc_texture_push_image(&st->txh, 0, 1); + + ctx->flags |= CTX_NO_ANTIALIAS; + ctx->aspect.fill_color = 0; + ctx->aspect.line_color = 0xFF000000; + ctx->aspect.fill_texture = &st->txh; + ctx->flags |= CTX_TEXTURE_DIRTY; + + /*get the filter region*/ + bounds = local_bounds; + gf_svg_flatten_attributes((SVG_Element *)filter, &all_atts); + if (!all_atts.filterUnits || (*all_atts.filterUnits==SVG_GRADIENTUNITS_OBJECT)) { + Fixed v; + v = all_atts.x ? all_atts.x->value : INT2FIX(-10); + bounds.x += gf_mulfix(v, bounds.width); + v = all_atts.y ? all_atts.y->value : INT2FIX(-10); + bounds.y += gf_mulfix(v, bounds.height); + v = all_atts.width ? all_atts.width->value : INT2FIX(120); + bounds.width = gf_mulfix(v, bounds.width); + v = all_atts.height ? all_atts.height->value : INT2FIX(120); + bounds.height = gf_mulfix(v, bounds.height); + } else { + bounds.x = all_atts.x ? all_atts.x->value : 0; + bounds.y = all_atts.y ? all_atts.y->value : 0; + bounds.width = all_atts.width ? all_atts.x->value : bounds.width; + bounds.height = all_atts.x ? all_atts.x->value : 120; + } + gf_mx2d_apply_rect(&backup, &bounds); + + svg_filter_apply(filter, &st->txh, &bounds); + + +#ifndef GPAC_DISABLE_3D + if (tr_state->visual->type_3d) { + if (!st->drawable->mesh) { + st->drawable->mesh = new_mesh(); + mesh_from_path(st->drawable->mesh, st->drawable->path); + } + visual_3d_draw_from_context(tr_state->ctx, tr_state); + ctx->drawable = NULL; + return; + } +#endif + + /*we computed the texture in final screen coordinate, so use the identity matrix for the context*/ + gf_mx2d_init(tr_state->transform); + drawable_finalize_sort(ctx, tr_state, NULL); + gf_mx2d_copy(tr_state->transform, backup); +} + +static void svg_traverse_filter(GF_Node *node, void *rs, Bool is_destroy) +{ + GF_TraverseState *tr_state = (GF_TraverseState *)rs; + GF_FilterStack *st = gf_node_get_private(node); + if (is_destroy) { + drawable_del(st->drawable); + if (st->data) gf_free(st->data); + st->txh.data = NULL; + gf_sc_texture_release(&st->txh); + gf_sc_texture_destroy(&st->txh); + gf_free(st); + return; + } + + if (tr_state->traversing_mode==TRAVERSE_DRAW_2D) { + if (! tr_state->visual->DrawBitmap(tr_state->visual, tr_state, tr_state->ctx, NULL)) { + visual_2d_texture_path(tr_state->visual, st->drawable->path, tr_state->ctx, tr_state); + } + } +} + +void compositor_init_svg_filter(GF_Compositor *compositor, GF_Node *node) +{ + GF_FilterStack *stack; + GF_SAFEALLOC(stack, GF_FilterStack); + gf_node_set_private(node, stack); + gf_node_set_callback_function(node, svg_traverse_filter); + + + gf_sc_texture_setup(&stack->txh, compositor, node); + stack->drawable = drawable_new(); + /*draw the cache through traverse callback*/ + stack->drawable->flags |= DRAWABLE_USE_TRAVERSE_DRAW; + stack->drawable->node = node; + gf_sc_texture_allocate(&stack->txh); +} + +#endif + + diff --git a/src/compositor/svg_media.c b/src/compositor/svg_media.c index e02bd7e..59f2732 100644 --- a/src/compositor/svg_media.c +++ b/src/compositor/svg_media.c @@ -208,6 +208,8 @@ static void SVG_Build_Bitmap_Graph(SVG_video_stack *stack, GF_TraverseState *tr_ gf_path_get_bounds(stack->graph->path, &new_rc); if (!gf_rect_equal(rc, new_rc)) drawable_mark_modified(stack->graph, tr_state); + else if (stack->txh.flags & GF_SR_TEXTURE_PRIVATE_MEDIA) + drawable_mark_modified(stack->graph, tr_state); gf_node_dirty_clear(stack->graph->node, GF_SG_SVG_GEOMETRY_DIRTY); } @@ -283,8 +285,8 @@ static void svg_traverse_bitmap(GF_Node *node, void *rs, Bool is_destroy) svg_audio_smil_evaluate_ex(NULL, 0, SMIL_TIMING_EVAL_REMOVE, stack->audio, stack->txh.owner); gf_node_unregister(stack->audio, NULL); stack->audio = NULL; - stack->audio_dirty = 1; } + stack->audio_dirty = 1; if (stack->txurl.count) svg_play_texture(stack, &all_atts); gf_node_dirty_clear(node, GF_SG_SVG_XLINK_HREF_DIRTY); @@ -470,17 +472,19 @@ static void SVG_Update_video(GF_TextureHandler *txh) } } - if (!stack->audio && (gf_mo_has_audio(stack->txh.stream) || stack->audio_dirty)) { - GF_FieldInfo att_vid, att_aud; - stack->audio = gf_node_new(gf_node_get_graph(stack->txh.owner), TAG_SVG_audio); - gf_node_register(stack->audio, NULL); - if (gf_node_get_attribute_by_tag(stack->txh.owner, TAG_XLINK_ATT_href, 0, 0, &att_vid)==GF_OK) { - gf_node_get_attribute_by_tag(stack->audio, TAG_XLINK_ATT_href, 1, 0, &att_aud); - gf_svg_attributes_copy(&att_aud, &att_vid, 0); - } - /*BYPASS SMIL TIMING MODULE!!*/ - compositor_init_svg_audio(stack->txh.compositor, stack->audio, 1); + if (!stack->audio && stack->audio_dirty) { stack->audio_dirty = 0; + if (gf_mo_has_audio(stack->txh.stream)) { + GF_FieldInfo att_vid, att_aud; + stack->audio = gf_node_new(gf_node_get_graph(stack->txh.owner), TAG_SVG_audio); + gf_node_register(stack->audio, NULL); + if (gf_node_get_attribute_by_tag(stack->txh.owner, TAG_XLINK_ATT_href, 0, 0, &att_vid)==GF_OK) { + gf_node_get_attribute_by_tag(stack->audio, TAG_XLINK_ATT_href, 1, 0, &att_aud); + gf_svg_attributes_copy(&att_aud, &att_vid, 0); + } + /*BYPASS SMIL TIMING MODULE!!*/ + compositor_init_svg_audio(stack->txh.compositor, stack->audio, 1); + } } /*we have no choice but retraversing the graph until we're inactive since the movie framerate and @@ -564,7 +568,7 @@ void svg_pause_video(GF_Node *n, Bool pause) typedef struct { GF_AudioInput input; - Bool is_active; + Bool is_active, is_error; MFURL aurl; } SVG_audio_stack; @@ -580,7 +584,7 @@ static void svg_audio_smil_evaluate_ex(SMIL_Timing_RTI *rti, Fixed normalized_sc switch (status) { case SMIL_TIMING_EVAL_UPDATE: - if (!stack->is_active) { + if (!stack->is_active && !stack->is_error) { if (stack->aurl.count) { SVGAllAttributes atts; gf_svg_flatten_attributes((SVG_Element*) (video ? video : audio), &atts); @@ -591,6 +595,8 @@ static void svg_audio_smil_evaluate_ex(SMIL_Timing_RTI *rti, Fixed normalized_sc { gf_mo_set_speed(stack->input.stream, FIX_ONE); stack->is_active = 1; + } else { + stack->is_error = 1; } } } @@ -663,6 +669,8 @@ static void svg_traverse_audio_ex(GF_Node *node, void *rs, Bool is_destroy, SVGP if (stack->is_active) gf_sc_audio_stop(&stack->input); + stack->is_error = 0; + gf_node_dirty_clear(node, GF_SG_SVG_XLINK_HREF_DIRTY); gf_term_get_mfurl_from_xlink(node, &(stack->aurl)); diff --git a/src/compositor/texturing_gl.c b/src/compositor/texturing_gl.c index cee6fa3..300bb44 100644 --- a/src/compositor/texturing_gl.c +++ b/src/compositor/texturing_gl.c @@ -248,7 +248,7 @@ Bool tx_can_use_rect_ext(GF_Compositor *compositor, GF_TextureHandler *txh) static Bool tx_setup_format(GF_TextureHandler *txh) { - Bool is_pow2, use_rect; + Bool is_pow2, use_rect, flip; GF_Compositor *compositor = (GF_Compositor *)txh->compositor; /*in case the ID has been lost, resetup*/ @@ -265,6 +265,7 @@ static Bool tx_setup_format(GF_TextureHandler *txh) txh->tx_io->rescale_width = gf_get_next_pow2(txh->width); txh->tx_io->rescale_height = gf_get_next_pow2(txh->height); + flip = (txh->tx_io->flags & TX_IS_FLIPPED); is_pow2 = ((txh->tx_io->rescale_width==txh->width) && (txh->tx_io->rescale_height==txh->height)) ? 1 : 0; txh->tx_io->flags = TX_IS_POW2; txh->tx_io->gl_type = GL_TEXTURE_2D; @@ -322,9 +323,29 @@ static Bool tx_setup_format(GF_TextureHandler *txh) txh->tx_io->nb_comp = 3; } break; + case GF_PIXEL_YUY2: + if (!use_rect && compositor->emul_pow2) txh->tx_io->flags = TX_EMULE_POW2; + txh->tx_io->gl_format = GL_RGB; + txh->tx_io->nb_comp = 3; + break; + + case GF_PIXEL_YUVD: + if (!use_rect && compositor->emul_pow2) txh->tx_io->flags = TX_EMULE_POW2; + txh->tx_io->gl_format = GL_RGB; + txh->tx_io->nb_comp = 3; + break; + case GF_PIXEL_RGBD: + case GF_PIXEL_RGB_24_DEPTH: + if (!use_rect && compositor->emul_pow2) txh->tx_io->flags = TX_EMULE_POW2; + txh->tx_io->gl_format = GL_RGB; + txh->tx_io->nb_comp = 3; + break; default: return 0; } + + if (flip) txh->tx_io->flags |= TX_IS_FLIPPED; + /*note we don't free the data if existing, since this only happen when re-setting up after context loss (same size)*/ if ((txh->tx_io->flags == TX_MUST_SCALE) & !txh->tx_io->scale_data) { txh->tx_io->scale_data = (char*)gf_malloc(sizeof(char) * txh->tx_io->nb_comp*txh->tx_io->rescale_width*txh->tx_io->rescale_height); @@ -423,18 +444,27 @@ hence is never flipped. Otherwise all textures attached to stream are flipped in Bool gf_sc_texture_convert(GF_TextureHandler *txh) { GF_VideoSurface src, dst; - u32 out_stride, i, bpp; - Bool flip; + u32 out_stride, i, j, bpp; GF_Compositor *compositor = (GF_Compositor *)txh->compositor; + if (!txh->needs_refresh) return 1; + switch (txh->pixelformat) { case GF_PIXEL_ARGB: if (!compositor->gl_caps.bgra_texture) return 0; + goto common; + + case GF_PIXEL_RGBD: + if ((txh->compositor->depth_gl_type==GF_SC_DEPTH_GL_NONE) || (txh->compositor->depth_gl_type==GF_SC_DEPTH_GL_VBO)) { + bpp = 4; + break; + } case GF_PIXEL_GREYSCALE: case GF_PIXEL_ALPHAGREY: case GF_PIXEL_RGB_24: case GF_PIXEL_RGB_32: case GF_PIXEL_RGBA: +common: txh->tx_io->conv_format = txh->pixelformat; txh->tx_io->flags |= TX_NEEDS_HW_LOAD; @@ -445,8 +475,9 @@ Bool gf_sc_texture_convert(GF_TextureHandler *txh) txh->tx_io->conv_data = gf_malloc(sizeof(char)*txh->stride*txh->height); txh->tx_io->conv_format = txh->pixelformat; } - - /*if texture is using RECT extension, flip image manually because +assert(txh->tx_io->conv_data ); +assert(txh->data ); +/*if texture is using RECT extension, flip image manually because texture transforms are not supported in this case ...*/ for (i=0; iheight; i++) { memcpy(txh->tx_io->conv_data + (txh->height - 1 - i) * txh->stride, txh->data + i*txh->stride, txh->stride); @@ -463,6 +494,9 @@ Bool gf_sc_texture_convert(GF_TextureHandler *txh) } bpp = 3; break; + case GF_PIXEL_YUY2: + bpp = 3; + break; case GF_PIXEL_YUVD: bpp = 4; break; @@ -481,6 +515,7 @@ Bool gf_sc_texture_convert(GF_TextureHandler *txh) txh->tx_io->conv_hscale = INT2FIX(txh->height) / txh->tx_io->conv_h; } else { txh->tx_io->conv_data = (char*)gf_malloc(sizeof(char) * bpp * txh->width * txh->height); + memset(txh->tx_io->conv_data, 0, sizeof(char) * bpp * txh->width * txh->height); } } out_stride = bpp * ((txh->tx_io->flags & TX_EMULE_POW2) ? txh->tx_io->conv_w : txh->width); @@ -497,23 +532,56 @@ Bool gf_sc_texture_convert(GF_TextureHandler *txh) dst.pitch_x = 0; dst.pitch_y = out_stride; - flip = 1; + dst.video_buffer = txh->tx_io->conv_data; switch (txh->pixelformat) { + case GF_PIXEL_YUY2: case GF_PIXEL_YV12: txh->tx_io->conv_format = dst.pixel_format = GF_PIXEL_RGB_24; + /*stretch and flip*/ + gf_stretch_bits(&dst, &src, NULL, NULL, 0xFF, 1, NULL, NULL); + txh->flags |= GF_SR_TEXTURE_NO_GL_FLIP; break; case GF_PIXEL_YUVD: - txh->tx_io->conv_format = GF_PIXEL_RGBD; - dst.pixel_format = GF_PIXEL_RGBD; - flip = 0; + if ((txh->compositor->depth_gl_type==GF_SC_DEPTH_GL_NONE) || (txh->compositor->depth_gl_type==GF_SC_DEPTH_GL_VBO)) { + src.pixel_format = GF_PIXEL_YV12; + txh->tx_io->conv_format = GF_PIXEL_RGB_24_DEPTH; + dst.pixel_format = GF_PIXEL_RGB_24; + dst.pitch_y = 3*txh->width; + /*stretch YUV->RGB*/ + gf_stretch_bits(&dst, &src, NULL, NULL, 0xFF, 1, NULL, NULL); + /*copy over Depth plane*/ + memcpy(dst.video_buffer + 3*txh->width*txh->height, txh->data + 3*txh->stride*txh->height/2, txh->width*txh->height); + } else { + txh->tx_io->conv_format = GF_PIXEL_RGBD; + dst.pixel_format = GF_PIXEL_RGBD; + /*stretch*/ + gf_stretch_bits(&dst, &src, NULL, NULL, 0xFF, 0, NULL, NULL); + } + txh->flags |= GF_SR_TEXTURE_NO_GL_FLIP; + break; + case GF_PIXEL_RGBD: + if ((txh->compositor->depth_gl_type==GF_SC_DEPTH_GL_NONE) || (txh->compositor->depth_gl_type==GF_SC_DEPTH_GL_VBO)) { + dst.pitch_y = 3*txh->width; + txh->tx_io->conv_format = GF_PIXEL_RGB_24_DEPTH; + dst.pixel_format = GF_PIXEL_RGB_24; + + for (j=0; jheight; j++) { + u8 *src = txh->data + (txh->height-j-1)*txh->stride; + u8 *dst_p = txh->tx_io->conv_data + j*3*txh->width; + u8 *dst_d = txh->tx_io->conv_data + txh->height*3*txh->width + j*txh->width; + + for (i=0; iwidth; i++) { + *dst_p++ = src[i*4]; + *dst_p++ = src[i*4 + 1]; + *dst_p++ = src[i*4 + 2]; + *dst_d++ = src[i*4 + 3]; + } + } + txh->flags |= GF_SR_TEXTURE_NO_GL_FLIP; + } break; } - dst.video_buffer = txh->tx_io->conv_data; - - /*stretch and flip*/ - gf_stretch_bits(&dst, &src, NULL, NULL, 0xFF, flip, NULL, NULL); txh->tx_io->flags |= TX_NEEDS_HW_LOAD; - txh->tx_io->flags |= TX_IS_FLIPPED; return 1; } @@ -555,19 +623,25 @@ Bool gf_sc_texture_push_image(GF_TextureHandler *txh, Bool generate_mipmaps, Boo /*in case the ID has been lost, resetup*/ if (!txh->tx_io->id) { glGenTextures(1, &txh->tx_io->id); + /*force setup of image*/ + txh->needs_refresh = 1; tx_setup_format(txh); first_load = 1; GF_LOG(GF_LOG_DEBUG, GF_LOG_COMPOSE, ("[Texturing] Allocating OpenGL texture %d\n", txh->tx_io->id)); } if (!txh->tx_io->gl_type) return 0; - if (txh->tx_io->flags & TX_EMULE_FIRST_LOAD) { - txh->tx_io->flags &= ~TX_EMULE_FIRST_LOAD; - first_load = 1; - } + /*if data not yet ready don't push the texture*/ + if (txh->data) { + + if (txh->tx_io->flags & TX_EMULE_FIRST_LOAD) { + txh->tx_io->flags &= ~TX_EMULE_FIRST_LOAD; + first_load = 1; + } - /*convert image*/ - gf_sc_texture_convert(txh); + /*convert image*/ + gf_sc_texture_convert(txh); + } tx_bind(txh); diff --git a/src/compositor/visual_manager.c b/src/compositor/visual_manager.c index c4d09d3..68509e6 100644 --- a/src/compositor/visual_manager.c +++ b/src/compositor/visual_manager.c @@ -144,7 +144,11 @@ void visual_clean_contexts(GF_VisualManager *visual) ctx->drawable->flags &= ~DRAWABLE_REGISTERED_WITH_VISUAL; if (is_root_visual && (ctx->flags & CTX_HAS_APPEARANCE)) gf_node_dirty_reset(ctx->appear, 0); - + +#ifndef GPAC_DISABLE_3D + /*this may happen when switching a visual from 2D to 3D - discard context*/ + if (visual->type_3d) ctx->drawable=NULL; +#endif ctx = ctx->next; } diff --git a/src/compositor/visual_manager.h b/src/compositor/visual_manager.h index b0bf32b..5cfd8a3 100644 --- a/src/compositor/visual_manager.h +++ b/src/compositor/visual_manager.h @@ -37,17 +37,20 @@ enum { GF_3D_STEREO_NONE = 0, - GF_3D_STEREO_TOP = 1, - GF_3D_STEREO_SIDE = 2, + GF_3D_STEREO_TOP, + GF_3D_STEREO_SIDE, /*all modes above GF_3D_STEREO_SIDE require shaders*/ + /*custom interleaving using GLSL shaders*/ + GF_3D_STEREO_CUSTOM, + /*some built-in interleaving modes*/ /*each pixel correspond to a different view*/ - GF_3D_STEREO_COLUMNS = 3, - GF_3D_STEREO_ROWS = 4, + GF_3D_STEREO_COLUMNS, + GF_3D_STEREO_ROWS, /*special case of sub-pixel interleaving for 2 views*/ - GF_3D_STEREO_ANAGLYPH = 5, - /*custom interleaving using GLSL shaders*/ - GF_3D_STEREO_CUSTOM = 6, + GF_3D_STEREO_ANAGLYPH, + /*SpatialView 19'' 5views interleaving*/ + GF_3D_STEREO_5VSP19, }; enum @@ -151,6 +154,12 @@ struct _visual_manager * Visual Manager part for 3D drawing */ +#if defined( _LP64 ) && defined(CONFIG_DARWIN_GL) +#define GF_SHADERID u64 +#else +#define GF_SHADERID u32 +#endif + #ifndef GPAC_DISABLE_VRML /*navigation stack*/ GF_List *navigation_stack; @@ -178,9 +187,9 @@ struct _visual_manager u32 *gl_textures; u32 auto_stereo_width, auto_stereo_height; GF_Mesh *autostereo_mesh; - u32 glsl_program; - u32 glsl_vertex; - u32 glsl_fragment; + GF_SHADERID glsl_program; + GF_SHADERID glsl_vertex; + GF_SHADERID glsl_fragment; #endif #ifdef GF_SR_USE_DEPTH diff --git a/src/compositor/visual_manager_2d.c b/src/compositor/visual_manager_2d.c index cf1395a..b1e0302 100644 --- a/src/compositor/visual_manager_2d.c +++ b/src/compositor/visual_manager_2d.c @@ -130,6 +130,7 @@ void visual_2d_remove_last_context(GF_VisualManager *visual) void visual_2d_drawable_delete(GF_VisualManager *visual, struct _drawable *drawable) { + DrawableContext *ctx; /*remove drawable from visual list*/ struct _drawable_store *it = visual->prev_nodes; struct _drawable_store *prev = NULL; @@ -145,6 +146,16 @@ void visual_2d_drawable_delete(GF_VisualManager *visual, struct _drawable *drawa gf_free(it); break; } + + ctx = visual->context; + while (ctx && ctx->drawable) { + /*remove visual registration flag*/ + if (ctx->drawable == drawable) { + ctx->flags = 0; + ctx->drawable = NULL; + } + ctx = ctx->next; + } if (drawable->flags & DRAWABLE_IS_OVERLAY) { visual->compositor->video_out->Blit(visual->compositor->video_out, NULL, NULL, NULL, 1); } diff --git a/src/compositor/visual_manager_2d_draw.c b/src/compositor/visual_manager_2d_draw.c index 2ec80b6..9bc86d3 100644 --- a/src/compositor/visual_manager_2d_draw.c +++ b/src/compositor/visual_manager_2d_draw.c @@ -358,22 +358,25 @@ void visual_2d_texture_path_extended(GF_VisualManager *visual, GF_Path *path, GF if (txh->flags & GF_SR_TEXTURE_PRIVATE_MEDIA) { GF_Window src, dst; - - - /*no aa*/ -// visual_2d_set_options(visual->compositor, visual->raster_surface, 0, 1); - - /*set matrix*/ -// raster->surface_set_matrix(visual->raster_surface, &ctx->transform); - - /*push path*/ -// raster->surface_set_path(visual->raster_surface, ctx->drawable->path); - /*using NULL will clear the clip rect with color 0x00000000*/ visual_2d_fill_path(visual, ctx, NULL, tr_state); -// raster->surface_set_path(visual->raster_surface, NULL); - if (compositor_texture_rectangles(visual, txh, &ctx->bi->clip, &ctx->bi->unclip, &src, &dst, NULL, NULL)) - gf_mo_set_position(txh->stream, &src, &dst); + /*if texture not ready, update the size before computing output rectangles */ + if (!txh->width || !txh->height) { + gf_mo_get_visual_info(txh->stream, &txh->width, &txh->height, &txh->stride, &txh->pixel_ar, &txh->pixelformat); + /*in case the node is an MPEG-4 bitmap, force stack rebuild at next frame */ + gf_node_dirty_set(ctx->drawable->node, GF_SG_NODE_DIRTY, 1); + } + + if (compositor_texture_rectangles(visual, txh, &ctx->bi->clip, &ctx->bi->unclip, &src, &dst, NULL, NULL)) { + if (txh->stream && gf_mo_set_position(txh->stream, &src, &dst)) { + gf_mo_get_visual_info(txh->stream, &txh->width, &txh->height, &txh->stride, &txh->pixel_ar, &txh->pixelformat); + /*force dirty flag to get called again*/ + gf_node_dirty_set(ctx->drawable->node, GF_SG_NODE_DIRTY, 1); + gf_sc_next_frame_state(visual->compositor, GF_SC_DRAW_FRAME); + } + } + + return; } diff --git a/src/compositor/visual_manager_3d.c b/src/compositor/visual_manager_3d.c index f54297b..9f537ef 100644 --- a/src/compositor/visual_manager_3d.c +++ b/src/compositor/visual_manager_3d.c @@ -295,7 +295,7 @@ void visual_3d_viewpoint_change(GF_TraverseState *tr_state, GF_Node *vp, Bool an gf_sc_invalidate(tr_state->visual->compositor, NULL); } -void visual_3d_setup_projection(GF_TraverseState *tr_state) +void visual_3d_setup_projection(GF_TraverseState *tr_state, Bool is_layer) { #ifndef GPAC_DISABLE_VRML GF_Node *bindable; @@ -340,7 +340,7 @@ void visual_3d_setup_projection(GF_TraverseState *tr_state) camera_stop_anim(tr_state->camera); camera_reset_viewpoint(tr_state->camera, 0); /*scene not yet ready, force a recompute of world bounds at next frame*/ - if (gf_sc_fit_world_to_screen(tr_state->visual->compositor) == 0) { + if (!is_layer && gf_sc_fit_world_to_screen(tr_state->visual->compositor) == 0) { tr_state->camera->had_viewpoint = 2; } } @@ -464,6 +464,7 @@ void visual_3d_init_draw(GF_TraverseState *tr_state, u32 layer_type) #ifndef GPAC_DISABLE_VRML GF_Node *bindable; #endif + Bool off_axis_background = (tr_state->camera->is_3D && (tr_state->visual->camera_layout==GF_3D_CAMERA_OFFAXIS)) ? 1 : 0; /*if not in layer, traverse navigation node FIXME: we should update the nav info according to the world transform at the current viewpoint (vrml)*/ @@ -495,8 +496,9 @@ void visual_3d_init_draw(GF_TraverseState *tr_state, u32 layer_type) } #ifdef GF_SR_USE_DEPTH - if (tr_state->visual->compositor->display_depth) +/* if (tr_state->visual->compositor->display_depth) tr_state->camera->navigate_mode = GF_NAVIGATE_NONE; +*/ #endif } else { tr_state->camera->navigate_mode = GF_NAVIGATE_NONE; @@ -535,12 +537,12 @@ void visual_3d_init_draw(GF_TraverseState *tr_state, u32 layer_type) visual_3d_set_viewport(tr_state->visual, tr_state->camera->vp); visual_3d_set_scissor(tr_state->visual, &tr_state->camera->vp); - if (tr_state->visual->camera_layout==GF_3D_CAMERA_OFFAXIS) { + if (off_axis_background) { visual_3d_draw_background_on_axis(tr_state, layer_type); } /*setup projection*/ - visual_3d_setup_projection(tr_state); + visual_3d_setup_projection(tr_state, layer_type); tr_state->camera->vp = orig_vp; } else if (tr_state->visual->autostereo_type==GF_3D_STEREO_TOP) { @@ -549,35 +551,39 @@ void visual_3d_init_draw(GF_TraverseState *tr_state, u32 layer_type) tr_state->camera->vp.height /= tr_state->visual->nb_views; tr_state->camera->vp.y += tr_state->visual->current_view * tr_state->camera->vp.height; - tr_state->camera->vp.y = orig_vp.height - tr_state->camera->vp.height - tr_state->camera->vp.y; +// tr_state->camera->vp.y = orig_vp.height - tr_state->camera->vp.height - tr_state->camera->vp.y; + if (tr_state->visual->compositor->visual==tr_state->visual) + tr_state->camera->vp.y = tr_state->visual->compositor->output_height - tr_state->camera->vp.y - tr_state->camera->vp.height; + else + tr_state->camera->vp.y = tr_state->visual->height - tr_state->camera->vp.y - tr_state->camera->vp.height; visual_3d_set_viewport(tr_state->visual, tr_state->camera->vp); visual_3d_set_scissor(tr_state->visual, &tr_state->camera->vp); - if (tr_state->visual->camera_layout==GF_3D_CAMERA_OFFAXIS) { + if (off_axis_background) { visual_3d_draw_background_on_axis(tr_state, layer_type); } /*setup projection*/ - visual_3d_setup_projection(tr_state); + visual_3d_setup_projection(tr_state, layer_type); tr_state->camera->vp = orig_vp; } else { visual_3d_set_viewport(tr_state->visual, tr_state->camera->vp); - if (tr_state->visual->camera_layout==GF_3D_CAMERA_OFFAXIS) { + if (off_axis_background) { visual_3d_draw_background_on_axis(tr_state, layer_type); } /*setup projection*/ - visual_3d_setup_projection(tr_state); + visual_3d_setup_projection(tr_state, layer_type); if (tr_state->visual->autostereo_type) { visual_3d_clear_depth(tr_state->visual); } } /*regular background draw*/ - if (tr_state->visual->camera_layout != GF_3D_CAMERA_OFFAXIS) { + if (!tr_state->camera->is_3D || tr_state->visual->camera_layout != GF_3D_CAMERA_OFFAXIS) { visual_3d_draw_background(tr_state, layer_type); } @@ -1011,7 +1017,7 @@ void visual_3d_check_collisions(GF_TraverseState *tr_state, GF_ChildNodeItem *no GF_LOG(GF_LOG_DEBUG, GF_LOG_COMPOSE, ("[Collision] no collision found\n")); } - if (tr_state->camera->flags & CAM_IS_DIRTY) visual_3d_setup_projection(tr_state); + if (tr_state->camera->flags & CAM_IS_DIRTY) visual_3d_setup_projection(tr_state, 0); } /*uncomment to disable frustum cull*/ @@ -1059,12 +1065,14 @@ Bool visual_3d_node_cull(GF_TraverseState *tr_state, GF_BBox *bbox, Bool skip_ne return 1; } /*first check: sphere vs frustum sphere intersection, this will discard far objects quite fast*/ - gf_vec_diff(cdiff, cam->center, b.center); - rad = b.radius + cam->radius; - if (gf_vec_len(cdiff) > rad) { - tr_state->cull_flag = CULL_OUTSIDE; - GF_LOG(GF_LOG_DEBUG, GF_LOG_COMPOSE, ("[Culling] Node out (sphere-sphere test)\n")); - return 0; + if (tr_state->camera->is_3D) { + gf_vec_diff(cdiff, cam->center, b.center); + rad = b.radius + cam->radius; + if (gf_vec_len(cdiff) > rad) { + tr_state->cull_flag = CULL_OUTSIDE; + GF_LOG(GF_LOG_DEBUG, GF_LOG_COMPOSE, ("[Culling] Node out (sphere-sphere test)\n")); + return 0; + } } /*second check: sphere vs frustum planes intersection, if any intersection is detected switch @@ -1129,7 +1137,7 @@ void visual_3d_pick_node(GF_VisualManager *visual, GF_TraverseState *tr_state, G SFVec4f res; visual_3d_setup_traversing_state(visual, tr_state); - visual_3d_setup_projection(tr_state); + visual_3d_setup_projection(tr_state, 0); x = INT2FIX(ev->mouse.x); y = INT2FIX(ev->mouse.y); diff --git a/src/compositor/visual_manager_3d.h b/src/compositor/visual_manager_3d.h index 0e5f60c..545a248 100644 --- a/src/compositor/visual_manager_3d.h +++ b/src/compositor/visual_manager_3d.h @@ -98,7 +98,7 @@ void visual_3d_check_collisions(GF_TraverseState *tr_state, GF_ChildNodeItem *no */ void visual_3d_init_draw(GF_TraverseState *tr_state, u32 layer_type); /*setup projection - exported for Layer3D */ -void visual_3d_setup_projection(GF_TraverseState *tr_state); +void visual_3d_setup_projection(GF_TraverseState *tr_state, Bool is_layer); /*base 3D drawable*/ diff --git a/src/compositor/visual_manager_3d_gl.c b/src/compositor/visual_manager_3d_gl.c index 88d6dd8..1269908 100644 --- a/src/compositor/visual_manager_3d_gl.c +++ b/src/compositor/visual_manager_3d_gl.c @@ -28,6 +28,7 @@ #ifndef GPAC_DISABLE_3D #include +#include #include "gl_inc.h" #if (defined(WIN32) || defined(_WIN32_WCE)) && !defined(__GNUC__) @@ -80,6 +81,7 @@ GLDECL_STATIC(glGenBuffers); GLDECL_STATIC(glDeleteBuffers); GLDECL_STATIC(glBindBuffer); GLDECL_STATIC(glBufferData); +GLDECL_STATIC(glBufferSubData); #endif //LOAD_GL_1_3 @@ -135,7 +137,7 @@ GLDECL_STATIC(glBlendEquation); #endif //LOAD_GL_2_0 -void gf_sc_load_opengl_extensions(GF_Compositor *compositor) +void gf_sc_load_opengl_extensions(GF_Compositor *compositor, Bool has_gl_context) { Bool has_shaders = 0; #ifdef GPAC_USE_TINYGL @@ -185,7 +187,7 @@ void gf_sc_load_opengl_extensions(GF_Compositor *compositor) } #endif - if (!compositor->visual->type_3d) return; + if (!has_gl_context) return; /*we have a GL context, get proc addresses*/ @@ -199,6 +201,7 @@ void gf_sc_load_opengl_extensions(GF_Compositor *compositor) GET_GLFUN(glDeleteBuffers); GET_GLFUN(glBindBuffer); GET_GLFUN(glBufferData); + GET_GLFUN(glBufferSubData); } #endif @@ -289,6 +292,7 @@ static char *default_glsl_vertex = "\ gl_TexCoord[0] = gl_MultiTexCoord0;\ }"; +#ifdef GPAC_UNUSED_FUNC static char *default_glsl_lighting = "\ varying vec3 gfNormal;\ varying vec3 gfView;\ @@ -304,6 +308,7 @@ static char *default_glsl_lighting = "\ Ispec = clamp(Ispec, 0.0, 1.0);\ gl_FragColor = gl_FrontLightModelProduct.sceneColor + Iamb + Idiff + Ispec;\ }"; +#endif /*GPAC_UNUSED_FUNC*/ static char *glsl_view_anaglyph = "\ uniform sampler2D gfView1;\ @@ -317,6 +322,7 @@ static char *glsl_view_anaglyph = "\ gl_FragColor.b = col2.b;\ }"; +#ifdef GPAC_UNUSED_FUNC static char *glsl_view_anaglyph_optimize = "\ uniform sampler2D gfView1;\ uniform sampler2D gfView2;\ @@ -329,6 +335,7 @@ static char *glsl_view_anaglyph_optimize = "\ gl_FragColor.g = col2.g;\ gl_FragColor.b = col2.b;\ }"; +#endif /*GPAC_UNUSED_FUNC*/ static char *glsl_view_columns = "\ uniform sampler2D gfView1;\ @@ -352,8 +359,33 @@ static char *glsl_view_rows = "\ gl_FragColor = texture2D(gfView2, gl_TexCoord[0].st); \ }"; +static char *glsl_view_5VSP19 = "\ + uniform sampler2D gfView1;\ + uniform sampler2D gfView2;\ + uniform sampler2D gfView3;\ + uniform sampler2D gfView4;\ + uniform sampler2D gfView5;\ + void main(void) {\ + vec4 color[5];\ + color[0] = texture2D(gfView5, gl_TexCoord[0].st);\ + color[1] = texture2D(gfView4, gl_TexCoord[0].st);\ + color[2] = texture2D(gfView3, gl_TexCoord[0].st);\ + color[3] = texture2D(gfView2, gl_TexCoord[0].st);\ + color[4] = texture2D(gfView1, gl_TexCoord[0].st);\ + float pitch = 5.0 + 1.0 - mod(gl_FragCoord.y , 5.0);\ + int col = int( mod(pitch + 3.0 * (gl_FragCoord.x), 5.0 ) );\ + int Vr = int(col);\ + int Vg = int(col) + 1;\ + int Vb = int(col) + 2;\ + if (Vg >= 5) Vg -= 5;\ + if (Vb >= 5) Vb -= 5;\ + gl_FragColor.r = color[Vr].r;\ + gl_FragColor.g = color[Vg].g;\ + gl_FragColor.b = color[Vb].b;\ + }"; -Bool visual_3d_compile_shader(u32 shader_id, const char *name, const char *source) + +Bool visual_3d_compile_shader(GF_SHADERID shader_id, const char *name, const char *source) { GLint blen = 0; GLsizei slen = 0; @@ -380,7 +412,11 @@ Bool visual_3d_compile_shader(u32 shader_id, const char *name, const char *sourc void visual_3d_init_shaders(GF_VisualManager *visual) { +/* This test creates a compilation warning under MacOS since always defined, should now compile with -Wall -Werror */ +#if (defined(GL_VERSION_2_0) && defined(GL_GLEXT_PROTOTYPES)) || defined(CONFIG_DARWIN_GL) +#else if (!glCreateProgram) return; +#endif /* for Linux w/ OpenGL 2 + CONFIG_DARWIN_GL ... */ if (visual->glsl_program) return; @@ -402,6 +438,10 @@ void visual_3d_init_shaders(GF_VisualManager *visual) visual->glsl_fragment = glCreateShader(GL_FRAGMENT_SHADER); visual_3d_compile_shader(visual->glsl_fragment, "fragment", glsl_view_anaglyph); break; + case GF_3D_STEREO_5VSP19: + visual->glsl_fragment = glCreateShader(GL_FRAGMENT_SHADER); + visual_3d_compile_shader(visual->glsl_fragment, "fragment", glsl_view_5VSP19); + break; case GF_3D_STEREO_CUSTOM: { const char *sOpt = gf_cfg_get_key(visual->compositor->user->config, "Compositor", "InterleaverShader"); @@ -496,7 +536,7 @@ GF_Err visual_3d_init_autostereo(GF_VisualManager *visual) mesh_new_rectangle(visual->autostereo_mesh, s, NULL, 0); // mesh_new_ellipse(visual->autostereo_mesh, s.x, s.y, 0); - fprintf(stdout, "AutoStereo initialized - width %d height %d\n",visual->auto_stereo_width, visual->auto_stereo_height); + GF_LOG(GF_LOG_DEBUG, GF_LOG_COMPOSE, ("[Visual3D] AutoStereo initialized - width %d height %d\n", visual->auto_stereo_width, visual->auto_stereo_height) ); visual_3d_init_shaders(visual); #endif // !defined(GPAC_USE_TINYGL) && !defined(GPAC_USE_OGL_ES) @@ -826,22 +866,25 @@ void VS3D_DrawMeshIntern(GF_TraverseState *tr_state, GF_Mesh *mesh) Float fix_scale = 1.0f; fix_scale /= FIX_ONE; #endif - + has_col = has_tx = has_norm = 0; - GF_LOG(GF_LOG_DEBUG, GF_LOG_COMPOSE, ("[V3D] Drawing mesh 0x%08x\n", mesh)); + GF_LOG(GF_LOG_DEBUG, GF_LOG_COMPOSE, ("[V3D] Drawing mesh %p\n", mesh)); if ((compositor->reset_graphics==2) && mesh->vbo) { /*we lost OpenGL context at previous frame, recreate VBO*/ mesh->vbo = 0; } - if (!mesh->vbo && compositor->gl_caps.vbo) { + /*rebuild VBO for large ojects only (we basically filter quads out)*/ + if ((mesh->v_count>4) && !mesh->vbo && compositor->gl_caps.vbo) { glGenBuffers(1, &mesh->vbo); if (mesh->vbo) { glBindBuffer(GL_ARRAY_BUFFER, mesh->vbo); - glBufferData(GL_ARRAY_BUFFER, mesh->v_count * sizeof(GF_Vertex) , mesh->vertices, GL_STATIC_DRAW); + glBufferData(GL_ARRAY_BUFFER, mesh->v_count * sizeof(GF_Vertex) , mesh->vertices, (mesh->vbo_dynamic) ? GL_DYNAMIC_DRAW : GL_STATIC_DRAW); + mesh->vbo_dirty = 0; } } + if (mesh->vbo) { base_address = NULL; glBindBuffer(GL_ARRAY_BUFFER, mesh->vbo); @@ -849,6 +892,11 @@ void VS3D_DrawMeshIntern(GF_TraverseState *tr_state, GF_Mesh *mesh) base_address = & mesh->vertices[0].pos; } + if (mesh->vbo_dirty) { + glBufferSubData(GL_ARRAY_BUFFER, 0, mesh->v_count * sizeof(GF_Vertex) , mesh->vertices); + mesh->vbo_dirty = 0; + } + glEnableClientState(GL_VERTEX_ARRAY); #if defined(GPAC_USE_OGL_ES) glVertexPointer(3, GL_FIXED, sizeof(GF_Vertex), base_address); @@ -2219,24 +2267,62 @@ GF_Err compositor_3d_release_screen_buffer(GF_Compositor *compositor, GF_VideoSu return GF_OK; } +GF_Err compositor_3d_get_offscreen_buffer(GF_Compositor *compositor, GF_VideoSurface *fb, u32 view_idx, u32 depth_dump_mode) +{ +#if !defined(GPAC_USE_OGL_ES) && !defined(GPAC_USE_TINYGL) + char *tmp; + u32 hy, i; + /*not implemented yet*/ + if (depth_dump_mode) return GF_NOT_SUPPORTED; + + if (view_idx>=compositor->visual->nb_views) return GF_BAD_PARAM; + fb->width = compositor->visual->auto_stereo_width; + fb->height = compositor->visual->auto_stereo_height; + fb->pixel_format = GF_PIXEL_RGB_24; + fb->pitch_y = 3*fb->width; + fb->video_buffer = gf_malloc(sizeof(char)*3*fb->width*fb->height); + if (!fb->video_buffer) return GF_OUT_OF_MEM; + + glEnable(GL_TEXTURE_2D); + glBindTexture(GL_TEXTURE_2D, compositor->visual->gl_textures[view_idx]); + glGetTexImage(GL_TEXTURE_2D, 0, GL_RGB, GL_UNSIGNED_BYTE, fb->video_buffer); + glDisable(GL_TEXTURE_2D); + + /*flip image (openGL always handle image data bottom to top) */ + tmp = (char*)gf_malloc(sizeof(char)*fb->pitch_y); + hy = fb->height/2; + for (i=0; ivideo_buffer+ i*fb->pitch_y, fb->pitch_y); + memcpy(fb->video_buffer + i*fb->pitch_y, fb->video_buffer + (fb->height - 1 - i) * fb->pitch_y, fb->pitch_y); + memcpy(fb->video_buffer + (fb->height - 1 - i) * fb->pitch_y, tmp, fb->pitch_y); + } + gf_free(tmp); + return GF_OK; +#else + return GF_NOT_SUPPORTED; +#endif +} + void visual_3d_point_sprite(GF_VisualManager *visual, Drawable *stack, GF_TextureHandler *txh, GF_TraverseState *tr_state) { #if !defined(GPAC_USE_OGL_ES) && !defined(GPAC_USE_TINYGL) u32 w, h; u32 pixel_format, stride; u8 *data; - Float r, g, b, x, y; + Float r, g, b; + Fixed x, y; Float inc, scale; Bool in_strip; Float delta = 0; Bool first_pass = 2; - if ((visual->compositor->depth_gl_type==1) && visual->compositor->gl_caps.point_sprite) { + if ((visual->compositor->depth_gl_type==GF_SC_DEPTH_GL_POINTS) && visual->compositor->gl_caps.point_sprite) { Float z; static GLfloat none[3] = { 1.0f, 0, 0 }; data = gf_sc_texture_get_data(txh, &pixel_format); if (!data) return; + if (pixel_format!=GF_PIXEL_RGBD) return; stride = txh->stride; if (txh->pixelformat==GF_PIXEL_YUVD) stride *= 4; @@ -2248,7 +2334,7 @@ void visual_3d_point_sprite(GF_VisualManager *visual, Drawable *stack, GF_Textur glEnable(GL_POINT_SMOOTH); glDisable(GL_LIGHTING); - scale = visual->compositor->depth_gl_scale; + scale = FIX2FLT(visual->compositor->depth_gl_scale); inc = 1; if (!tr_state->pixel_metrics) inc /= tr_state->min_hsize; x = 0; @@ -2278,104 +2364,166 @@ void visual_3d_point_sprite(GF_VisualManager *visual, Drawable *stack, GF_Textur return; } - delta = visual->compositor->depth_gl_strips_filter; - if (!delta) first_pass = 2; - else first_pass = 1; + if (visual->compositor->depth_gl_type==GF_SC_DEPTH_GL_STRIPS) { + delta = visual->compositor->depth_gl_strips_filter; + if (!delta) first_pass = 2; + else first_pass = 1; - data = gf_sc_texture_get_data(txh, &pixel_format); - if (!data) return; - stride = txh->stride; - if (txh->pixelformat==GF_PIXEL_YUVD) stride *= 4; + data = gf_sc_texture_get_data(txh, &pixel_format); + if (!data) return; + if (pixel_format!=GF_PIXEL_RGBD) return; + stride = txh->stride; + if (txh->pixelformat==GF_PIXEL_YUVD) stride *= 4; - glDepthMask(GL_FALSE); - glDisable(GL_TEXTURE_2D); - glDisable(GL_LIGHTING); - glDisable(GL_BLEND); - glDisable(GL_CULL_FACE); - glDisable(GL_POINT_SMOOTH); - glDisable(GL_FOG); + glDepthMask(GL_FALSE); + glDisable(GL_TEXTURE_2D); + glDisable(GL_LIGHTING); + glDisable(GL_BLEND); + glDisable(GL_CULL_FACE); + glDisable(GL_POINT_SMOOTH); + glDisable(GL_FOG); restart: - scale = 50; - inc = 1; - if (!tr_state->pixel_metrics) inc /= tr_state->min_hsize; - x = 0; - y = 1; y*=txh->height/2; - if (!tr_state->pixel_metrics) y /= tr_state->min_hsize; - - in_strip = 0; - for (h=0; hheight - 1; h++) { - char *src = data + h*stride; - x = -1; x *= txh->width/2; - if (!tr_state->pixel_metrics) x /= tr_state->min_hsize; - - for (w=0; wwidth; w++) { - u8 *p1 = src + w*4; - u8 *p2 = src + w*4 + stride; - Float z1 = p1[3]; - Float z2 = p2[3]; - if (first_pass==1) { - if ((z1>delta) || (z2>delta)) - { - if (0 && in_strip) { - glEnd(); - in_strip = 0; + scale = FIX2FLT(visual->compositor->depth_gl_scale); + inc = 1; + if (!tr_state->pixel_metrics) inc /= tr_state->min_hsize; + x = 0; + y = 1; y*=txh->height/2; + if (!tr_state->pixel_metrics) y /= tr_state->min_hsize; + + in_strip = 0; + for (h=0; hheight - 1; h++) { + char *src = data + h*stride; + x = -1; x *= txh->width/2; + if (!tr_state->pixel_metrics) x /= tr_state->min_hsize; + + for (w=0; wwidth; w++) { + u8 *p1 = src + w*4; + u8 *p2 = src + w*4 + stride; + Float z1 = p1[3]; + Float z2 = p2[3]; + if (first_pass==1) { + if ((z1>delta) || (z2>delta)) + { + if (0 && in_strip) { + glEnd(); + in_strip = 0; + } + x += inc; + continue; } - x += inc; - continue; - } - } else if (first_pass==0) { - if ((z1<=delta) || (z2<=delta)) - { - if (in_strip) { - glEnd(); - in_strip = 0; + } else if (first_pass==0) { + if ((z1<=delta) || (z2<=delta)) + { + if (in_strip) { + glEnd(); + in_strip = 0; + } + x += inc; + continue; } - x += inc; - continue; } + z1 = z1 / 255; + z2 = z2 / 255; + + r = p1[0]; + r /= 255; + g = p1[1]; + g /= 255; + b = p1[2]; + b /= 255; + + if (!in_strip) { + glBegin(GL_TRIANGLE_STRIP); + in_strip = 1; + } + + glColor3f(r, g, b); + glVertex3f(x, y, z1*scale); + + r = p2[0]; + r /= 255; + g = p2[1]; + g /= 255; + b = p2[2]; + b /= 255; + + glColor3f(r, g, b); + glVertex3f(x, y-inc, z2*scale); + + x += inc; } - z1 = z1 / 255; - z2 = z2 / 255; - - r = p1[0]; - r /= 255; - g = p1[1]; - g /= 255; - b = p1[2]; - b /= 255; - - if (!in_strip) { - glBegin(GL_TRIANGLE_STRIP); - in_strip = 1; + if (in_strip) { + glEnd(); + in_strip = 0; } + y -= inc; + } + + if (first_pass==1) { + first_pass = 0; + goto restart; + } + return; + } - glColor3f(r, g, b); - glVertex3f(x, y, z1*scale); + glColor3f(1.0, 0.0, 0.0); + /*render using vertex array*/ + if (!stack->mesh) { + stack->mesh = new_mesh(); + stack->mesh->vbo_dynamic = 1; + inc = 1; + if (!tr_state->pixel_metrics) inc /= tr_state->min_hsize; + x = 0; + y = 1; y*=txh->height/2; + if (!tr_state->pixel_metrics) y /= tr_state->min_hsize; - r = p2[0]; - r /= 255; - g = p2[1]; - g /= 255; - b = p2[2]; - b /= 255; + for (h=0; hheight; h++) { + u32 idx_offset = h ? ((h-1)*txh->width) : 0; + x = -1; x *= txh->width/2; + if (!tr_state->pixel_metrics) x /= tr_state->min_hsize; - glColor3f(r, g, b); - glVertex3f(x, y-inc, z2*scale); + for (w=0; wwidth; w++) { + mesh_set_vertex(stack->mesh, x, y, 0, 0, 0, -FIX_ONE, INT2FIX(w) / (txh->width-1), INT2FIX(txh->height - h -1) / (txh->height-1) ); + x += inc; - x += inc; - } - if (in_strip) { - glEnd(); - in_strip = 0; + /*set triangle*/ + if (h && w) { + u32 first_idx = idx_offset + w - 1; + mesh_set_triangle(stack->mesh, first_idx, first_idx+1, txh->width + first_idx +1); + mesh_set_triangle(stack->mesh, first_idx, txh->width + first_idx, txh->width + first_idx +1); + } + } + y -= inc; } - y -= inc; + /*force recompute of Z*/ + txh->needs_refresh = 1; } - if (first_pass==1) { - first_pass = 0; - goto restart; + /*texture has been updated, recompute Z*/ + if (txh->needs_refresh) { + Fixed f_scale = FLT2FIX(visual->compositor->depth_gl_scale); + txh->needs_refresh = 0; + + data = gf_sc_texture_get_data(txh, &pixel_format); + if (!data) return; + if (pixel_format!=GF_PIXEL_RGB_24_DEPTH) return; + data += txh->height*txh->width*3; + + for (h=0; hheight; h++) { + char *src = data + h * txh->width; + for (w=0; wwidth; w++) { + u8 d = src[w]; + Fixed z = INT2FIX(d); + z = gf_mulfix(z / 255, f_scale); + stack->mesh->vertices[w + h*txh->width].pos.z = z; + } + } + stack->mesh->vbo_dirty = 1; } + tr_state->mesh_num_textures = gf_sc_texture_enable(txh, ((M_Appearance *)tr_state->appear)->textureTransform); + VS3D_DrawMeshIntern(tr_state, stack->mesh); + visual_3d_disable_texture(tr_state); #endif //GPAC_USE_OGL_ES diff --git a/src/export.cpp b/src/export.cpp index 537e041..a6dd179 100644 --- a/src/export.cpp +++ b/src/export.cpp @@ -57,6 +57,7 @@ #pragma comment (linker, EXPORT_SYMBOL(gf_log_get_level) ) #pragma comment (linker, EXPORT_SYMBOL(gf_log_set_level) ) #pragma comment (linker, EXPORT_SYMBOL(gf_log_set_tools) ) +#pragma comment (linker, EXPORT_SYMBOL(gf_log_set_strict_error) ) #pragma comment (linker, EXPORT_SYMBOL(gf_log_set_callback) ) #pragma comment (linker, EXPORT_SYMBOL(gf_log_parse_level) ) #pragma comment (linker, EXPORT_SYMBOL(gf_log_parse_tools) ) @@ -105,7 +106,6 @@ #pragma comment (linker, EXPORT_SYMBOL(gf_ringbuffer_new) ) #pragma comment (linker, EXPORT_SYMBOL(gf_ringbuffer_read) ) #pragma comment (linker, EXPORT_SYMBOL(gf_ringbuffer_write) ) -#pragma comment (linker, EXPORT_SYMBOL(gf_global_resource_lock) ) #pragma comment (linker, EXPORT_SYMBOL(gf_ringbuffer_available_for_read ) ) #pragma comment (linker, EXPORT_SYMBOL(gf_ringbuffer_del) ) @@ -224,6 +224,7 @@ #pragma comment (linker, EXPORT_SYMBOL(gf_token_get_line) ) #pragma comment (linker, EXPORT_SYMBOL(gf_token_find) ) +#pragma comment (linker, EXPORT_SYMBOL(gf_cfg_init) ) #pragma comment (linker, EXPORT_SYMBOL(gf_cfg_new) ) #pragma comment (linker, EXPORT_SYMBOL(gf_cfg_del) ) #pragma comment (linker, EXPORT_SYMBOL(gf_cfg_remove) ) @@ -237,6 +238,7 @@ #pragma comment (linker, EXPORT_SYMBOL(gf_cfg_get_key_name) ) #pragma comment (linker, EXPORT_SYMBOL(gf_cfg_insert_key) ) #pragma comment (linker, EXPORT_SYMBOL(gf_cfg_del_section) ) +#pragma comment (linker, EXPORT_SYMBOL(gf_cfg_get_filename) ) #pragma comment (linker, EXPORT_SYMBOL(gf_modules_new) ) @@ -267,12 +269,13 @@ #pragma comment (linker, EXPORT_SYMBOL(gf_dm_sess_get_stats) ) #pragma comment (linker, EXPORT_SYMBOL(gf_dm_sess_fetch_data) ) #pragma comment (linker, EXPORT_SYMBOL(gf_dm_sess_last_error) ) -#pragma comment (linker, EXPORT_SYMBOL(gf_dm_setup_from_url) ) #pragma comment (linker, EXPORT_SYMBOL(gf_dm_sess_get_resource_name) ) #pragma comment (linker, EXPORT_SYMBOL(gf_dm_sess_reset) ) #pragma comment (linker, EXPORT_SYMBOL(gf_dm_sess_mime_type) ) #pragma comment (linker, EXPORT_SYMBOL(gf_dm_new) ) #pragma comment (linker, EXPORT_SYMBOL(gf_dm_del) ) +#pragma comment (linker, EXPORT_SYMBOL(gf_dm_set_data_rate) ) +#pragma comment (linker, EXPORT_SYMBOL(gf_dm_get_data_rate) ) #pragma comment (linker, EXPORT_SYMBOL(gf_cache_get_url) ) #pragma comment (linker, EXPORT_SYMBOL(gf_cache_get_cache_filename) ) #pragma comment (linker, EXPORT_SYMBOL(gf_cache_create_entry) ) @@ -290,6 +293,10 @@ #pragma comment (linker, EXPORT_SYMBOL(gf_dm_url_info_init) ) #pragma comment (linker, EXPORT_SYMBOL(gf_dm_is_thread_dead) ) #pragma comment (linker, EXPORT_SYMBOL(gf_dm_sess_abort) ) +#pragma comment (linker, EXPORT_SYMBOL(gf_dm_sess_set_range) ) +#pragma comment (linker, EXPORT_SYMBOL(gf_dm_sess_setup_from_url) ) +#pragma comment (linker, EXPORT_SYMBOL(gf_dm_get_file_memory) ) + #pragma comment (linker, EXPORT_SYMBOL(gf_dm_sess_can_be_cached_on_disk) ) #pragma comment (linker, EXPORT_SYMBOL(gf_dm_wget) ) @@ -540,7 +547,11 @@ #pragma comment (linker, EXPORT_SYMBOL(gf_isom_delete) ) #pragma comment (linker, EXPORT_SYMBOL(gf_isom_get_mode) ) #pragma comment (linker, EXPORT_SYMBOL(gf_isom_get_file_size) ) - +#pragma comment (linker, EXPORT_SYMBOL(gf_isom_get_timed_meta_data_info) ) +#pragma comment (linker, EXPORT_SYMBOL(gf_isom_box_new) ) +#pragma comment (linker, EXPORT_SYMBOL(gf_isom_box_del) ) +#pragma comment (linker, EXPORT_SYMBOL(gf_isom_box_write) ) +#pragma comment (linker, EXPORT_SYMBOL(gf_isom_box_size) ) #pragma comment (linker, EXPORT_SYMBOL(gf_isom_open_progressive) ) #pragma comment (linker, EXPORT_SYMBOL(gf_isom_get_missing_bytes) ) #pragma comment (linker, EXPORT_SYMBOL(gf_isom_is_fragmented) ) @@ -579,6 +590,8 @@ #pragma comment (linker, EXPORT_SYMBOL(gf_isom_get_sample_for_movie_time) ) #pragma comment (linker, EXPORT_SYMBOL(gf_isom_get_sample_dts) ) #pragma comment (linker, EXPORT_SYMBOL(gf_isom_get_sample_duration) ) +#pragma comment (linker, EXPORT_SYMBOL(gf_isom_get_sample_size) ) +#pragma comment (linker, EXPORT_SYMBOL(gf_isom_get_sample_sync) ) #pragma comment (linker, EXPORT_SYMBOL(gf_isom_get_edit_segment_count) ) #pragma comment (linker, EXPORT_SYMBOL(gf_isom_get_edit_segment) ) #pragma comment (linker, EXPORT_SYMBOL(gf_isom_get_copyright_count) ) @@ -594,6 +607,7 @@ #pragma comment (linker, EXPORT_SYMBOL(gf_isom_get_decoder_config) ) #pragma comment (linker, EXPORT_SYMBOL(gf_isom_get_reference_count) ) #pragma comment (linker, EXPORT_SYMBOL(gf_isom_get_reference) ) +#pragma comment (linker, EXPORT_SYMBOL(gf_isom_has_track_reference) ) #pragma comment (linker, EXPORT_SYMBOL(gf_isom_get_filename) ) #pragma comment (linker, EXPORT_SYMBOL(gf_isom_get_brand_info) ) #pragma comment (linker, EXPORT_SYMBOL(gf_isom_get_alternate_brand) ) @@ -646,6 +660,8 @@ #pragma comment (linker, EXPORT_SYMBOL(gf_isom_get_next_alternate_group_id) ) #pragma comment (linker, EXPORT_SYMBOL(gf_isom_get_meta_primary_item_id) ) #pragma comment (linker, EXPORT_SYMBOL(gf_isom_is_JPEG2000) ) +#pragma comment (linker, EXPORT_SYMBOL(gf_isom_get_rvc_config) ) + # ifndef GPAC_DISABLE_ISOM_DUMP #pragma comment (linker, EXPORT_SYMBOL(gf_isom_dump) ) @@ -781,6 +797,7 @@ #pragma comment (linker, EXPORT_SYMBOL(gf_isom_estimate_size) ) #pragma comment (linker, EXPORT_SYMBOL(gf_isom_set_meta_type) ) #pragma comment (linker, EXPORT_SYMBOL(gf_isom_add_meta_item) ) +#pragma comment (linker, EXPORT_SYMBOL(gf_isom_add_meta_item_memory) ) #pragma comment (linker, EXPORT_SYMBOL(gf_isom_remove_meta_item) ) #pragma comment (linker, EXPORT_SYMBOL(gf_isom_set_meta_primary_item) ) #pragma comment (linker, EXPORT_SYMBOL(gf_isom_set_meta_xml) ) @@ -797,6 +814,7 @@ #pragma comment (linker, EXPORT_SYMBOL(gf_isom_set_alternate_group_id) ) #pragma comment (linker, EXPORT_SYMBOL(gf_isom_new_dims_description) ) #pragma comment (linker, EXPORT_SYMBOL(gf_isom_update_dims_description) ) +#pragma comment (linker, EXPORT_SYMBOL(gf_isom_set_rvc_config) ) #ifndef GPAC_DISABLE_ISOM_HINTING #pragma comment (linker, EXPORT_SYMBOL(gf_isom_setup_hint_track) ) #pragma comment (linker, EXPORT_SYMBOL(gf_isom_new_hint_description) ) @@ -869,6 +887,7 @@ #pragma comment (linker, EXPORT_SYMBOL(gf_term_on_command) ) #pragma comment (linker, EXPORT_SYMBOL(gf_term_on_sl_packet) ) #pragma comment (linker, EXPORT_SYMBOL(gf_term_get_service_url) ) +#pragma comment (linker, EXPORT_SYMBOL(gf_term_on_service_event) ) #pragma comment (linker, EXPORT_SYMBOL(gf_term_add_media) ) #pragma comment (linker, EXPORT_SYMBOL(gf_term_get_service_interface) ) #pragma comment (linker, EXPORT_SYMBOL(gf_term_register_mime_type) ) @@ -880,12 +899,15 @@ #pragma comment (linker, EXPORT_SYMBOL(gf_term_process_step) ) #pragma comment (linker, EXPORT_SYMBOL(gf_term_get_screen_buffer) ) #pragma comment (linker, EXPORT_SYMBOL(gf_term_release_screen_buffer) ) +#pragma comment (linker, EXPORT_SYMBOL(gf_term_get_offscreen_buffer) ) #pragma comment (linker, EXPORT_SYMBOL(gf_term_process_shortcut) ) #pragma comment (linker, EXPORT_SYMBOL(gf_term_set_speed) ) #pragma comment (linker, EXPORT_SYMBOL(gf_term_relocate_url) ) #pragma comment (linker, EXPORT_SYMBOL(gf_term_add_event_filter) ) #pragma comment (linker, EXPORT_SYMBOL(gf_term_remove_event_filter) ) #pragma comment (linker, EXPORT_SYMBOL(gf_term_lock_media_queue) ) +#pragma comment (linker, EXPORT_SYMBOL(gf_term_get_current_service_id) ) + /*ietf.h exports*/ #ifndef GPAC_DISABLE_STREAMING @@ -1017,6 +1039,7 @@ #pragma comment (linker, EXPORT_SYMBOL(gf_media_change_par) ) #pragma comment (linker, EXPORT_SYMBOL(gf_media_change_pl) ) #pragma comment (linker, EXPORT_SYMBOL(gf_media_fragment_file) ) +#pragma comment (linker, EXPORT_SYMBOL(gf_media_avc_rewrite_samples) ) #endif /*GPAC_DISABLE_MEDIA_IMPORT*/ @@ -1213,6 +1236,7 @@ #pragma comment (linker, EXPORT_SYMBOL(gf_node_get_graph) ) #pragma comment (linker, EXPORT_SYMBOL(gf_node_init) ) #pragma comment (linker, EXPORT_SYMBOL(gf_node_get_scene_time) ) +#pragma comment (linker, EXPORT_SYMBOL(gf_node_in_table_by_tag) ) #pragma comment (linker, EXPORT_SYMBOL(gf_sg_new) ) #pragma comment (linker, EXPORT_SYMBOL(gf_sg_new_subscene) ) #pragma comment (linker, EXPORT_SYMBOL(gf_sg_set_scene_time_callback) ) @@ -1527,19 +1551,24 @@ #pragma comment (linker, EXPORT_SYMBOL(gf_m2ts_mux_program_add) ) #pragma comment (linker, EXPORT_SYMBOL(gf_m2ts_program_stream_add) ) #pragma comment (linker, EXPORT_SYMBOL(gf_m2ts_program_stream_update_ts_scale) ) -#pragma comment (linker, EXPORT_SYMBOL(gf_m2ts_program_stream_update_sl_config) ) #pragma comment (linker, EXPORT_SYMBOL(gf_m2ts_mux_update_config) ) #pragma comment (linker, EXPORT_SYMBOL(gf_m2ts_mux_process) ) #pragma comment (linker, EXPORT_SYMBOL(gf_m2ts_get_sys_clock) ) #pragma comment (linker, EXPORT_SYMBOL(gf_m2ts_get_ts_clock) ) -#endif /*GPAC_DISABLE_MPEG2TS_MUX*/ +#pragma comment (linker, EXPORT_SYMBOL(gf_m2ts_mux_use_single_au_pes_mode) ) +#pragma comment (linker, EXPORT_SYMBOL(gf_m2ts_mux_set_initial_pcr) ) +#endif /*GPAC_DISABLE_MPEG2TS_MUX*/ /* M3U8 & MPD related functions */ #pragma comment (linker, EXPORT_SYMBOL(gf_mpd_new) ) #pragma comment (linker, EXPORT_SYMBOL(gf_mpd_init_from_dom) ) #pragma comment (linker, EXPORT_SYMBOL(gf_mpd_del) ) #pragma comment (linker, EXPORT_SYMBOL(gf_m3u8_to_mpd) ) +#pragma comment (linker, EXPORT_SYMBOL(TSDemux_Demux_Setup)) +#pragma comment (linker, EXPORT_SYMBOL(TSDemux_DemuxPlay) ) +#pragma comment (linker, EXPORT_SYMBOL(TSDemux_CloseDemux) ) + #endif /*GPAC_DISABLE_MPEG2TS*/ /*laser.h exports*/ @@ -1564,6 +1593,10 @@ #pragma comment (linker, EXPORT_SYMBOL(gf_font_manager_create_span) ) #pragma comment (linker, EXPORT_SYMBOL(gf_font_manager_refresh_span_bounds) ) +/*download.h exports*/ + #pragma comment (linker, EXPORT_SYMBOL(gf_dm_wget) ) + #pragma comment (linker, EXPORT_SYMBOL(gf_dm_wget_with_cache) ) + /* dvb_mpe.h */ #ifdef GPAC_ENST_PRIVATE #pragma comment (linker, EXPORT_SYMBOL(gf_dvb_mpe_section_del) ) @@ -1572,3 +1605,10 @@ #pragma comment (linker, EXPORT_SYMBOL(gf_dvb_mpe_shutdown) ) #pragma comment (linker, EXPORT_SYMBOL(gf_m2ts_print_mpe_info) ) #endif + +/* carousel.h */ +#pragma comment (linker, EXPORT_SYMBOL(on_ait_section) ) +#pragma comment (linker, EXPORT_SYMBOL(gf_m2ts_process_ait) ) + + + diff --git a/src/ietf/rtcp.c b/src/ietf/rtcp.c index d52bdab..fa6044a 100644 --- a/src/ietf/rtcp.c +++ b/src/ietf/rtcp.c @@ -83,13 +83,13 @@ GF_Err gf_rtp_decode_rtcp(GF_RTPChannel *ch, char *pck, u32 pck_size, Bool *has_ } //substract this RTCP pck size pck_size -= (rtcp_hdr.Length + 1) * 4; - //all RTCP are Compounds (>1 pck), the first SHALL be SR or RR without padding + //in all RTCP Compounds (>1 pck), the first RTCP report SHALL be SR or RR without padding if (first) { if ( ( (rtcp_hdr.PayloadType!=200) && (rtcp_hdr.PayloadType!=201) ) || rtcp_hdr.Padding - || !pck_size - ) { + ) { gf_bs_del(bs); + GF_LOG(GF_LOG_ERROR, GF_LOG_RTP, ("[RTCP] Corrupted RTCP packet: payload type %d (200 or 2001 expected) - Padding %d (0 expected)\n", rtcp_hdr.PayloadType, rtcp_hdr.Padding)); return GF_CORRUPTED_DATA; } first = 0; diff --git a/src/ietf/rtp_depacketizer.c b/src/ietf/rtp_depacketizer.c index f544eba..1d952f5 100644 --- a/src/ietf/rtp_depacketizer.c +++ b/src/ietf/rtp_depacketizer.c @@ -1009,10 +1009,9 @@ static GF_Err payt_set_param(GF_RTPDepacketizer *rtp, char *param_name, char *pa rtp->flags |= GF_RTP_ISMA_HAS_KEY_IDX; else rtp->flags &= ~GF_RTP_ISMA_HAS_KEY_IDX; - } - else if (!stricmp(param_name, "ISMACrypKey")) + } else if (!stricmp(param_name, "ISMACrypKey")) { rtp->key = gf_strdup(param_val); - + } return GF_OK; } @@ -1026,6 +1025,7 @@ static GF_Err gf_rtp_payt_setup(GF_RTPDepacketizer *rtp, GF_RTPMap *map, GF_SDPM if (!stricmp(map->payload_name, "enc-mpeg4-generic")) rtp->flags |= GF_RTP_HAS_ISMACRYP; + /*then process all FMTPs*/ i=0; while ((fmtp = (GF_SDP_FMTP*)gf_list_enum(media->FMTP, &i))) { @@ -1207,7 +1207,7 @@ static GF_Err gf_rtp_payt_setup(GF_RTPDepacketizer *rtp, GF_RTPMap *map, GF_SDPM while ((att = (GF_X_Attribute *)gf_list_enum(media->Attributes, &j))) { if (stricmp(att->Name, "cliprect")) continue; /*only get the display area*/ - sscanf(att->Value, "%ud,%ud,%ud,%ud", &y, &x, &h, &w); + sscanf(att->Value, "%u,%u,%u,%u", &y, &x, &h, &w); } rtp->sl_map.StreamType = GF_STREAM_VISUAL; diff --git a/src/ietf/rtp_streamer.c b/src/ietf/rtp_streamer.c index 2de89cb..c111b30 100644 --- a/src/ietf/rtp_streamer.c +++ b/src/ietf/rtp_streamer.c @@ -714,9 +714,9 @@ GF_Err gf_rtp_streamer_send_au(GF_RTPStreamer *rtp, char *data, u32 size, u64 ct return gf_rtp_streamer_send_data(rtp, data, size, size, cts, dts, is_rap, 1, 1, 0, 0, 0); } -GF_Err gf_rtp_streamer_send_au_with_sn(GF_RTPStreamer *rtp, char *data, u32 size, u64 cts, u64 dts, Bool is_rap, Bool inc_au_sn) +GF_Err gf_rtp_streamer_send_au_with_sn(GF_RTPStreamer *rtp, char *data, u32 size, u64 cts, u64 dts, Bool is_rap, u32 inc_au_sn) { - if (inc_au_sn) rtp->packetizer->sl_header.AU_sequenceNumber++; + if (inc_au_sn) rtp->packetizer->sl_header.AU_sequenceNumber += inc_au_sn; return gf_rtp_streamer_send_data(rtp, data, size, size, cts, dts, is_rap, 1, 1, rtp->packetizer->sl_header.AU_sequenceNumber, 0, 0); } diff --git a/src/ietf/rtsp_command.c b/src/ietf/rtsp_command.c index e9af5a0..ef1c9d7 100644 --- a/src/ietf/rtsp_command.c +++ b/src/ietf/rtsp_command.c @@ -403,13 +403,13 @@ void gf_rtsp_set_command_value(GF_RTSPCommand *com, char *Header, char *Value) else if (!stricmp(Header, "Accept-Encoding")) com->Accept_Encoding = gf_strdup(Value); else if (!stricmp(Header, "Accept-Language")) com->Accept_Language = gf_strdup(Value); else if (!stricmp(Header, "Authorization")) com->Authorization = gf_strdup(Value); - else if (!stricmp(Header, "Bandwidth")) sscanf(Value, "%ud", &com->Bandwidth); - else if (!stricmp(Header, "Blocksize")) sscanf(Value, "%ud", &com->Blocksize); + else if (!stricmp(Header, "Bandwidth")) sscanf(Value, "%u", &com->Bandwidth); + else if (!stricmp(Header, "Blocksize")) sscanf(Value, "%u", &com->Blocksize); else if (!stricmp(Header, "Cache-Control")) com->Cache_Control = gf_strdup(Value); else if (!stricmp(Header, "Conference")) com->Conference = gf_strdup(Value); else if (!stricmp(Header, "Connection")) com->Connection = gf_strdup(Value); - else if (!stricmp(Header, "Content-Length")) sscanf(Value, "%ud", &com->Content_Length); - else if (!stricmp(Header, "CSeq")) sscanf(Value, "%ud", &com->CSeq); + else if (!stricmp(Header, "Content-Length")) sscanf(Value, "%u", &com->Content_Length); + else if (!stricmp(Header, "CSeq")) sscanf(Value, "%u", &com->CSeq); else if (!stricmp(Header, "From")) com->From = gf_strdup(Value); else if (!stricmp(Header, "Proxy_Authorization")) com->Proxy_Authorization = gf_strdup(Value); else if (!stricmp(Header, "Proxy_Require")) com->Proxy_Require = gf_strdup(Value); diff --git a/src/ietf/rtsp_common.c b/src/ietf/rtsp_common.c index dc96c70..61628f1 100644 --- a/src/ietf/rtsp_common.c +++ b/src/ietf/rtsp_common.c @@ -185,20 +185,18 @@ GF_RTSPTransport *gf_rtsp_transport_parse(char *buffer) else if (!stricmp(param_name, "interleaved")) { u32 rID, rcID; tmp->IsInterleaved = 1; - /*do not use %ud here, broken on Win32 (sscanf returns 1)*/ - if (sscanf(param_val, "%d-%d", &rID, &rcID) == 1) { - sscanf(param_val, "%ud", &rID); + if (sscanf(param_val, "%u-%u", &rID, &rcID) == 1) { + sscanf(param_val, "%u", &rID); tmp->rtcpID = tmp->rtpID = (u8) rID; } else { tmp->rtpID = (u8) rID; tmp->rtcpID = (u8) rcID; } } - else if (!stricmp(param_name, "layers")) sscanf(param_val, "%ud", &tmp->MulticastLayers); + else if (!stricmp(param_name, "layers")) sscanf(param_val, "%u", &tmp->MulticastLayers); else if (!stricmp(param_name, "ttl")) sscanf(param_val, "%c ", &tmp->TTL); - /*do not use %hud here, broken on Win32 (sscanf returns 1)*/ else if (!stricmp(param_name, "port")) { - sscanf(param_val, "%d-%d", &v1, &v2); + sscanf(param_val, "%u-%u", &v1, &v2); tmp->port_first = (u16) v1; tmp->port_last = (u16) v2; } diff --git a/src/ietf/rtsp_response.c b/src/ietf/rtsp_response.c index 2629a63..c4d0136 100644 --- a/src/ietf/rtsp_response.c +++ b/src/ietf/rtsp_response.c @@ -204,18 +204,18 @@ void gf_rtsp_set_response_value(GF_RTSPResponse *rsp, char *Header, char *Value) else if (!stricmp(Header, "Accept-Language")) rsp->Accept_Language = gf_strdup(Value); else if (!stricmp(Header, "Allow")) rsp->Allow = gf_strdup(Value); else if (!stricmp(Header, "Authorization")) rsp->Authorization = gf_strdup(Value); - else if (!stricmp(Header, "Bandwidth")) sscanf(Value, "%ud", &rsp->Bandwidth); - else if (!stricmp(Header, "Blocksize")) sscanf(Value, "%ud", &rsp->Blocksize); + else if (!stricmp(Header, "Bandwidth")) sscanf(Value, "%u", &rsp->Bandwidth); + else if (!stricmp(Header, "Blocksize")) sscanf(Value, "%u", &rsp->Blocksize); else if (!stricmp(Header, "Cache-Control")) rsp->Cache_Control = gf_strdup(Value); else if (!stricmp(Header, "Conference")) rsp->Conference = gf_strdup(Value); else if (!stricmp(Header, "Connection")) rsp->Connection = gf_strdup(Value); else if (!stricmp(Header, "Content-Base")) rsp->Content_Base = gf_strdup(Value); else if (!stricmp(Header, "Content-Encoding")) rsp->Content_Encoding = gf_strdup(Value); - else if (!stricmp(Header, "Content-Length")) sscanf(Value, "%ud", &rsp->Content_Length); + else if (!stricmp(Header, "Content-Length")) sscanf(Value, "%u", &rsp->Content_Length); else if (!stricmp(Header, "Content-Language")) rsp->Content_Language = gf_strdup(Value); else if (!stricmp(Header, "Content-Location")) rsp->Content_Location = gf_strdup(Value); else if (!stricmp(Header, "Content-Type")) rsp->Content_Type = gf_strdup(Value); - else if (!stricmp(Header, "CSeq")) sscanf(Value, "%ud", &rsp->CSeq); + else if (!stricmp(Header, "CSeq")) sscanf(Value, "%u", &rsp->CSeq); else if (!stricmp(Header, "Date")) rsp->Date = gf_strdup(Value); else if (!stricmp(Header, "Expires")) rsp->Expires = gf_strdup(Value); else if (!stricmp(Header, "From")) rsp->From = gf_strdup(Value); @@ -258,7 +258,7 @@ void gf_rtsp_set_response_value(GF_RTSPResponse *rsp, char *Header, char *Value) LinePos = gf_token_get(Value, LinePos, ";\r\n", LineBuffer, 400); //default rsp->SessionTimeOut = 60; - sscanf(LineBuffer, "timeout=%ud", &rsp->SessionTimeOut); + sscanf(LineBuffer, "timeout=%u", &rsp->SessionTimeOut); } } @@ -284,7 +284,7 @@ void gf_rtsp_set_response_value(GF_RTSPResponse *rsp, char *Header, char *Value) strcpy(param_name, buf); } if (!stricmp(param_name, "url")) info->url = gf_strdup(param_val); - else if (!stricmp(param_name, "seq")) sscanf(param_val, "%ud", &info->seq); + else if (!stricmp(param_name, "seq")) sscanf(param_val, "%u", &info->seq); else if (!stricmp(param_name, "rtptime")) { sscanf(param_val, "%i", &s_val); info->rtp_time = (s_val>0) ? s_val : 0; diff --git a/src/ietf/sdp.c b/src/ietf/sdp.c index b9c573f..c0eb06d 100644 --- a/src/ietf/sdp.c +++ b/src/ietf/sdp.c @@ -825,7 +825,7 @@ GF_Err gf_sdp_info_check(GF_SDPInfo *sdp) if (sig < 0) { \ sprintf(temp, "%d", d); \ } else { \ - sprintf(temp, "%ud", d); \ + sprintf(temp, "%u", d); \ } \ SDP_WRITE_ALLOC_STR_WITHOUT_CHECK(temp, spa); diff --git a/src/isomedia/box_code_base.c b/src/isomedia/box_code_base.c index 90e4a32..89fb162 100644 --- a/src/isomedia/box_code_base.c +++ b/src/isomedia/box_code_base.c @@ -704,7 +704,6 @@ void dinf_del(GF_Box *s) } - GF_Err dinf_AddBox(GF_Box *s, GF_Box *a) { GF_DataInformationBox *ptr = (GF_DataInformationBox *)s; @@ -714,6 +713,7 @@ GF_Err dinf_AddBox(GF_Box *s, GF_Box *a) ptr->dref = (GF_DataReferenceBox *)a; return GF_OK; } + GF_LOG(GF_LOG_DEBUG, GF_LOG_CONTAINER, ("[iso file] Warning box %s unknown type - discarding\n", gf_4cc_to_str(a->type))); gf_isom_box_del(a); return GF_OK; } @@ -865,8 +865,9 @@ GF_Err edts_AddBox(GF_Box *s, GF_Box *a) ptr->editList = (GF_EditListBox *)a; return GF_OK; } + GF_LOG(GF_LOG_DEBUG, GF_LOG_CONTAINER, ("[iso file] Warning box %s unknown type - discarding\n", gf_4cc_to_str(a->type))); gf_isom_box_del(a); - return GF_OK; + return GF_OK; } @@ -2896,8 +2897,9 @@ GF_Err mdia_AddBox(GF_Box *s, GF_Box *a) ptr->information = (GF_MediaInformationBox *)a; return GF_OK; } + GF_LOG(GF_LOG_DEBUG, GF_LOG_CONTAINER, ("[iso file] Warning box %s unknown type - discarding\n", gf_4cc_to_str(a->type))); gf_isom_box_del(a); - return GF_OK; + return GF_OK; } @@ -3170,7 +3172,9 @@ GF_Err moof_AddBox(GF_Box *s, GF_Box *a) case GF_ISOM_BOX_TYPE_TRAF: return gf_list_add(ptr->TrackList, a); default: - return GF_ISOM_INVALID_FILE; + GF_LOG(GF_LOG_DEBUG, GF_LOG_CONTAINER, ("[iso file] Warning box %s unknown type - discarding\n", gf_4cc_to_str(a->type))); + gf_isom_box_del(a); + return GF_OK; } } @@ -3451,6 +3455,7 @@ GF_Err mp4a_AddBox(GF_Box *s, GF_Box *a) } break; default: + GF_LOG(GF_LOG_DEBUG, GF_LOG_CONTAINER, ("[iso file] Warning box %s unknown type - discarding\n", gf_4cc_to_str(a->type))); gf_isom_box_del(a); break; } @@ -3571,6 +3576,7 @@ GF_Err mp4s_AddBox(GF_Box *s, GF_Box *a) ptr->protection_info = (GF_ProtectionInfoBox*)a; break; default: + GF_LOG(GF_LOG_DEBUG, GF_LOG_CONTAINER, ("[iso file] Warning box %s unknown type - discarding\n", gf_4cc_to_str(a->type))); gf_isom_box_del(a); break; } @@ -3659,6 +3665,7 @@ void mp4v_del(GF_Box *s) if (ptr->emul_esd) gf_odf_desc_del((GF_Descriptor *)ptr->emul_esd); if (ptr->pasp) gf_isom_box_del((GF_Box *)ptr->pasp); + if (ptr->rvcc) gf_isom_box_del((GF_Box *)ptr->rvcc); if (ptr->protection_info) gf_isom_box_del((GF_Box *)ptr->protection_info); gf_free(ptr); @@ -3700,7 +3707,12 @@ GF_Err mp4v_AddBox(GF_Box *s, GF_Box *a) if (ptr->pasp) return GF_ISOM_INVALID_FILE; ptr->pasp = (GF_PixelAspectRatioBox *)a; break; + case GF_ISOM_BOX_TYPE_RVCC: + if (ptr->rvcc) return GF_ISOM_INVALID_FILE; + ptr->rvcc = (GF_RVCConfigurationBox *)a; + break; default: + GF_LOG(GF_LOG_DEBUG, GF_LOG_CONTAINER, ("[iso file] Warning box %s unknown type - discarding\n", gf_4cc_to_str(a->type))); gf_isom_box_del(a); break; } @@ -3803,6 +3815,10 @@ GF_Err mp4v_Write(GF_Box *s, GF_BitStream *bs) e = gf_isom_box_write((GF_Box *)ptr->protection_info, bs); if (e) return e; } + if (ptr->rvcc) { + e = gf_isom_box_write((GF_Box *)ptr->rvcc, bs); + if (e) return e; + } return e; } @@ -3854,6 +3870,11 @@ GF_Err mp4v_Size(GF_Box *s) if (e) return e; ptr->size += ptr->pasp->size; } + if (ptr->rvcc) { + e = gf_isom_box_size((GF_Box *)ptr->rvcc); + if (e) return e; + ptr->size += ptr->rvcc->size; + } if (ptr->protection_info && (ptr->type == GF_ISOM_BOX_TYPE_ENCV)) { e = gf_isom_box_size((GF_Box *)ptr->protection_info); if (e) return e; @@ -3890,8 +3911,9 @@ GF_Err mvex_AddBox(GF_Box *s, GF_Box *a) ptr->mehd = (GF_MovieExtendsHeaderBox*)a; return GF_OK; } + GF_LOG(GF_LOG_DEBUG, GF_LOG_CONTAINER, ("[iso file] Warning box %s unknown type - discarding\n", gf_4cc_to_str(a->type))); gf_isom_box_del(a); - return GF_OK; + return GF_OK; } @@ -4542,9 +4564,10 @@ GF_Err stbl_AddBox(GF_SampleTableBox *ptr, GF_Box *a) ptr->SubSamples = (GF_SubSampleInformationBox *)a; break; - //what's this box ??? delete it default: + GF_LOG(GF_LOG_DEBUG, GF_LOG_CONTAINER, ("[iso file] Warning box %s unknown type - discarding\n", gf_4cc_to_str(a->type))); gf_isom_box_del(a); + break; } return GF_OK; } @@ -5979,6 +6002,7 @@ void traf_del(GF_Box *s) if (ptr->tfhd) gf_isom_box_del((GF_Box *) ptr->tfhd); if (ptr->sdtp) gf_isom_box_del((GF_Box *) ptr->sdtp); if (ptr->subs) gf_isom_box_del((GF_Box *) ptr->subs); + if (ptr->tfdt) gf_isom_box_del((GF_Box *) ptr->tfdt); gf_isom_box_array_del(ptr->TrackRuns); gf_free(ptr); } @@ -5998,16 +6022,18 @@ GF_Err traf_AddBox(GF_Box *s, GF_Box *a) if (ptr->sdtp) return GF_ISOM_INVALID_FILE; ptr->sdtp = (GF_SampleDependencyTypeBox *)a; return GF_OK; - case GF_ISOM_BOX_TYPE_TFAD: - if (ptr->tfad) return GF_ISOM_INVALID_FILE; - ptr->tfad = a; + case GF_ISOM_BOX_TYPE_TFDT: + if (ptr->tfdt) return GF_ISOM_INVALID_FILE; + ptr->tfdt = (GF_TFBaseMediaDecodeTimeBox*) a; return GF_OK; case GF_ISOM_BOX_TYPE_SUBS: if (ptr->subs) return GF_ISOM_INVALID_FILE; ptr->subs = (GF_SubSampleInformationBox *)a; return GF_OK; default: - return GF_ISOM_INVALID_FILE; + GF_LOG(GF_LOG_DEBUG, GF_LOG_CONTAINER, ("[iso file] Warning box %s unknown type - discarding\n", gf_4cc_to_str(a->type))); + gf_isom_box_del(a); + return GF_OK; } } @@ -6051,6 +6077,10 @@ GF_Err traf_Write(GF_Box *s, GF_BitStream *bs) e = gf_isom_box_write((GF_Box *) ptr->subs, bs); if (e) return e; } + if (ptr->tfdt) { + e = gf_isom_box_write((GF_Box *) ptr->tfdt, bs); + if (e) return e; + } e = gf_isom_box_array_write(s, ptr->TrackRuns, bs); if (e) return e; if (ptr->sdtp) { @@ -6081,6 +6111,11 @@ GF_Err traf_Size(GF_Box *s) if (e) return e; ptr->size += ptr->sdtp->size; } + if (ptr->tfdt) { + e = gf_isom_box_size((GF_Box *) ptr->tfdt); + if (e) return e; + ptr->size += ptr->tfdt->size; + } return gf_isom_box_array_size(s, ptr->TrackRuns); } @@ -6245,7 +6280,8 @@ GF_Err trak_AddBox(GF_Box *s, GF_Box *a) ((GF_MediaBox *)a)->mediaTrack = ptr; return GF_OK; default: - gf_list_add(ptr->boxes, a); + GF_LOG(GF_LOG_DEBUG, GF_LOG_CONTAINER, ("[iso file] Warning box %s unknown type - discarding\n", gf_4cc_to_str(a->type))); + gf_isom_box_del(a); return GF_OK; } return GF_OK; @@ -6814,6 +6850,7 @@ GF_UserDataMap *udta_getEntry(GF_UserDataBox *ptr, u32 box_type, bin128 *uuid) { u32 i; GF_UserDataMap *map; + if (ptr == NULL) return NULL; i=0; while ((map = (GF_UserDataMap *)gf_list_enum(ptr->recordList, &i))) { if (map->boxType == box_type) { @@ -7253,6 +7290,7 @@ GF_Err metx_AddBox(GF_Box *s, GF_Box *a) ptr->bitrate = (GF_MPEG4BitRateBox *)a; break; default: + GF_LOG(GF_LOG_DEBUG, GF_LOG_CONTAINER, ("[iso file] Warning box %s unknown type - discarding\n", gf_4cc_to_str(a->type))); gf_isom_box_del(a); break; } @@ -7582,6 +7620,7 @@ GF_Err lsr1_AddBox(GF_Box *s, GF_Box *a) ptr->descr = (GF_MPEG4ExtensionDescriptorsBox *)a; break; default: + GF_LOG(GF_LOG_DEBUG, GF_LOG_CONTAINER, ("[iso file] Warning box %s unknown type - discarding\n", gf_4cc_to_str(a->type))); gf_isom_box_del(a); break; } @@ -7696,7 +7735,7 @@ GF_Err sidx_Read(GF_Box *s,GF_BitStream *bs) ptr->refs = gf_malloc(sizeof(GF_SIDXReference)*ptr->nb_refs); for (i=0; inb_refs; i++) { ptr->refs[i].reference_type = gf_bs_read_int(bs, 1); - ptr->refs[i].reference_offset = gf_bs_read_int(bs, 31); + ptr->refs[i].reference_size = gf_bs_read_int(bs, 31); ptr->refs[i].subsegment_duration = gf_bs_read_u32(bs); ptr->refs[i].contains_RAP = gf_bs_read_int(bs, 1); ptr->refs[i].RAP_delta_time = gf_bs_read_int(bs, 31); @@ -7741,7 +7780,7 @@ GF_Err sidx_Write(GF_Box *s, GF_BitStream *bs) gf_bs_write_u16(bs, ptr->nb_refs); for (i=0; inb_refs; i++ ) { gf_bs_write_int(bs, ptr->refs[i].reference_type, 1); - gf_bs_write_int(bs, ptr->refs[i].reference_offset, 31); + gf_bs_write_int(bs, ptr->refs[i].reference_size, 31); gf_bs_write_u32(bs, ptr->refs[i].subsegment_duration); gf_bs_write_int(bs, ptr->refs[i].contains_RAP, 1); gf_bs_write_int(bs, ptr->refs[i].RAP_delta_time, 31); @@ -7908,4 +7947,135 @@ GF_Err subs_Read(GF_Box *s, GF_BitStream *bs) return GF_OK; } + +GF_Box *tfdt_New() +{ + GF_TFBaseMediaDecodeTimeBox *tmp; + GF_SAFEALLOC(tmp, GF_TFBaseMediaDecodeTimeBox); + tmp->type = GF_ISOM_BOX_TYPE_TFDT; + tmp->version = 0; + return (GF_Box *)tmp; +} + +void tfdt_del(GF_Box *s) +{ + gf_free(s); +} + +/*this is using chpl format according to some NeroRecode samples*/ +GF_Err tfdt_Read(GF_Box *s,GF_BitStream *bs) +{ + GF_Err e; + GF_TFBaseMediaDecodeTimeBox *ptr = (GF_TFBaseMediaDecodeTimeBox *)s; + e = gf_isom_full_box_read(s, bs); + if (e) return e; + + if (ptr->version==1) { + ptr->baseMediaDecodeTime = gf_bs_read_u64(bs); + ptr->size -= 8; + } else { + ptr->baseMediaDecodeTime = (u32) gf_bs_read_u32(bs); + ptr->size -= 4; + } + return GF_OK; +} + +#ifndef GPAC_DISABLE_ISOM_WRITE + +GF_Err tfdt_Write(GF_Box *s, GF_BitStream *bs) +{ + GF_Err e; + GF_TFBaseMediaDecodeTimeBox *ptr = (GF_TFBaseMediaDecodeTimeBox *) s; + e = gf_isom_full_box_write(s, bs); + if (e) return e; + + if (ptr->version==1) { + gf_bs_write_u64(bs, ptr->baseMediaDecodeTime); + } else { + gf_bs_write_u32(bs, (u32) ptr->baseMediaDecodeTime); + } + return GF_OK; +} + +GF_Err tfdt_Size(GF_Box *s) +{ + GF_Err e; + GF_TFBaseMediaDecodeTimeBox *ptr = (GF_TFBaseMediaDecodeTimeBox *)s; + e = gf_isom_full_box_get_size(s); + if (e) return e; + if (ptr->baseMediaDecodeTime<=0xFFFFFFFF) { + ptr->version = 0; + ptr->size += 4; + } else { + ptr->version = 1; + ptr->size += 8; + } + return GF_OK; +} + +#endif /*GPAC_DISABLE_ISOM_WRITE*/ + + + + +GF_Box *rvcc_New() +{ + GF_RVCConfigurationBox *tmp; + GF_SAFEALLOC(tmp, GF_RVCConfigurationBox); + tmp->type = GF_ISOM_BOX_TYPE_RVCC; + return (GF_Box *)tmp; +} + +void rvcc_del(GF_Box *s) +{ + gf_free(s); +} + +/*this is using chpl format according to some NeroRecode samples*/ +GF_Err rvcc_Read(GF_Box *s,GF_BitStream *bs) +{ + GF_RVCConfigurationBox *ptr = (GF_RVCConfigurationBox*)s; + ptr->predefined_rvc_config = gf_bs_read_u16(bs); + ptr->size -= 2; + if (!ptr->predefined_rvc_config) { + ptr->rvc_meta_idx = gf_bs_read_u16(bs); + ptr->size -= 2; + } + return GF_OK; +} + +#ifndef GPAC_DISABLE_ISOM_WRITE + +GF_Err rvcc_Write(GF_Box *s, GF_BitStream *bs) +{ + GF_Err e; + GF_RVCConfigurationBox *ptr = (GF_RVCConfigurationBox*) s; + + e = gf_isom_box_write_header(s, bs); + if (e) return e; + + gf_bs_write_u16(bs, ptr->predefined_rvc_config); + if (!ptr->predefined_rvc_config) { + gf_bs_write_u16(bs, ptr->rvc_meta_idx); + } + return GF_OK; +} + +GF_Err rvcc_Size(GF_Box *s) +{ + GF_Err e; + GF_RVCConfigurationBox *ptr = (GF_RVCConfigurationBox *)s; + e = gf_isom_box_get_size(s); + if (e) return e; + ptr->size += 2; + if (! ptr->predefined_rvc_config) ptr->size += 2; + return GF_OK; +} + +#endif /*GPAC_DISABLE_ISOM_WRITE*/ + + + + + #endif /*GPAC_DISABLE_ISOM*/ diff --git a/src/isomedia/box_dump.c b/src/isomedia/box_dump.c index 3e84a51..6e4cf18 100644 --- a/src/isomedia/box_dump.c +++ b/src/isomedia/box_dump.c @@ -254,10 +254,14 @@ GF_Err gf_box_dump(void *ptr, FILE * trace) return tfhd_dump(a, trace); case GF_ISOM_BOX_TYPE_TRUN: return trun_dump(a, trace); + case GF_ISOM_BOX_TYPE_TFDT: + return tfdt_dump(a, trace); #endif case GF_ISOM_BOX_TYPE_SUBS: return subs_dump(a, trace); + case GF_ISOM_BOX_TYPE_RVCC: + return rvcc_dump(a, trace); case GF_ISOM_BOX_TYPE_VOID: return void_dump(a, trace); @@ -902,6 +906,7 @@ GF_Err mp4v_dump(GF_Box *a, FILE * trace) gf_box_dump(p->protection_info, trace); } if (p->pasp) gf_box_dump(p->pasp, trace); + if (p->rvcc) gf_box_dump(p->rvcc, trace); DumpBox(a, trace); @@ -2241,8 +2246,9 @@ GF_Err traf_dump(GF_Box *a, FILE * trace) DumpBox(a, trace); if (p->tfhd) gf_box_dump(p->tfhd, trace); if (p->subs) gf_box_dump(p->subs, trace); - gf_box_array_dump(p->TrackRuns, trace); if (p->sdtp) gf_box_dump(p->sdtp, trace); + if (p->tfdt) gf_box_dump(p->tfdt, trace); + gf_box_array_dump(p->TrackRuns, trace); fprintf(trace, "\n"); return GF_OK; } @@ -3500,7 +3506,7 @@ GF_Err sidx_dump(GF_Box *a, FILE * trace) gf_full_box_dump(a, trace); for (i=0; inb_refs; i++) { - fprintf(trace, "\n", p->refs[i].reference_type, p->refs[i].reference_offset, p->refs[i].subsegment_duration, p->refs[i].contains_RAP, p->refs[i].RAP_delta_time); + fprintf(trace, "\n", p->refs[i].reference_type, p->refs[i].reference_size, p->refs[i].subsegment_duration, p->refs[i].contains_RAP, p->refs[i].RAP_delta_time); } fprintf(trace, "\n"); return GF_OK; @@ -3538,4 +3544,30 @@ GF_Err subs_dump(GF_Box *a, FILE * trace) return GF_OK; } + +GF_Err tfdt_dump(GF_Box *a, FILE * trace) +{ + GF_TFBaseMediaDecodeTimeBox *ptr = (GF_TFBaseMediaDecodeTimeBox*) a; + if (!a) return GF_BAD_PARAM; + + fprintf(trace, "\n", ptr->baseMediaDecodeTime); + DumpBox(a, trace); + gf_full_box_dump(a, trace); + fprintf(trace, "\n"); + return GF_OK; +} + +GF_Err rvcc_dump(GF_Box *a, FILE * trace) +{ + GF_RVCConfigurationBox *ptr = (GF_RVCConfigurationBox*) a; + if (!a) return GF_BAD_PARAM; + + fprintf(trace, "predefined_rvc_config); + if (! ptr->predefined_rvc_config) fprintf(trace, " rvc_meta_idx=\"%d\"", ptr->rvc_meta_idx); + fprintf(trace, ">\n"); + DumpBox(a, trace); + fprintf(trace, "\n"); + return GF_OK; +} + #endif /*GPAC_DISABLE_ISOM_DUMP*/ diff --git a/src/isomedia/box_funcs.c b/src/isomedia/box_funcs.c index ff1c600..1ffd065 100644 --- a/src/isomedia/box_funcs.c +++ b/src/isomedia/box_funcs.c @@ -530,7 +530,8 @@ GF_Box *gf_isom_box_new(u32 boxType) case GF_ISOM_BOX_TYPE_TMPO: case GF_ISOM_BOX_TYPE_CPIL: case GF_ISOM_BOX_TYPE_PGAP: - case GF_ISOM_BOX_TYPE_COVR: return ListItem_New(boxType); + case GF_ISOM_BOX_TYPE_COVR: + return ListItem_New(boxType); case GF_ISOM_BOX_TYPE_DATA: return data_New(); @@ -564,6 +565,8 @@ GF_Box *gf_isom_box_new(u32 boxType) case GF_ISOM_BOX_TYPE_SIDX: return sidx_New(); case GF_ISOM_BOX_TYPE_SUBS: return subs_New(); + case GF_ISOM_BOX_TYPE_TFDT: return tfdt_New(); + case GF_ISOM_BOX_TYPE_RVCC: return rvcc_New(); default: a = defa_New(); @@ -778,7 +781,9 @@ void gf_isom_box_del(GF_Box *a) case GF_ISOM_BOX_TYPE_TMPO: case GF_ISOM_BOX_TYPE_CPIL: case GF_ISOM_BOX_TYPE_PGAP: - case GF_ISOM_BOX_TYPE_COVR: ListItem_del(a); return; + case GF_ISOM_BOX_TYPE_COVR: + ListItem_del(a); + return; case GF_ISOM_BOX_TYPE_DATA: data_del(a); return; @@ -810,6 +815,8 @@ void gf_isom_box_del(GF_Box *a) case GF_ISOM_BOX_TYPE_SIDX: sidx_del(a); return; case GF_ISOM_BOX_TYPE_SUBS: subs_del(a); return; + case GF_ISOM_BOX_TYPE_TFDT: tfdt_del(a); return; + case GF_ISOM_BOX_TYPE_RVCC: rvcc_del(a); return; default: defa_del(a); @@ -1007,7 +1014,8 @@ GF_Err gf_isom_box_read(GF_Box *a, GF_BitStream *bs) case GF_ISOM_BOX_TYPE_TMPO: case GF_ISOM_BOX_TYPE_CPIL: case GF_ISOM_BOX_TYPE_PGAP: - case GF_ISOM_BOX_TYPE_COVR: return ListItem_Read(a, bs); + case GF_ISOM_BOX_TYPE_COVR: + return ListItem_Read(a, bs); case GF_ISOM_BOX_TYPE_DATA: return data_Read(a, bs); @@ -1038,6 +1046,8 @@ GF_Err gf_isom_box_read(GF_Box *a, GF_BitStream *bs) case GF_ISOM_BOX_TYPE_SIDX: return sidx_Read(a, bs); case GF_ISOM_BOX_TYPE_SUBS: return subs_Read(a, bs); + case GF_ISOM_BOX_TYPE_TFDT: return tfdt_Read(a, bs); + case GF_ISOM_BOX_TYPE_RVCC: return rvcc_Read(a, bs); default: return defa_Read(a, bs); @@ -1236,7 +1246,8 @@ GF_Err gf_isom_box_write(GF_Box *a, GF_BitStream *bs) case GF_ISOM_BOX_TYPE_TMPO: case GF_ISOM_BOX_TYPE_CPIL: case GF_ISOM_BOX_TYPE_PGAP: - case GF_ISOM_BOX_TYPE_COVR: return ListItem_Write(a, bs); + case GF_ISOM_BOX_TYPE_COVR: + return ListItem_Write(a, bs); case GF_ISOM_BOX_TYPE_DATA: return data_Write(a, bs); @@ -1267,6 +1278,8 @@ GF_Err gf_isom_box_write(GF_Box *a, GF_BitStream *bs) case GF_ISOM_BOX_TYPE_SIDX: return sidx_Write(a, bs); case GF_ISOM_BOX_TYPE_SUBS: return subs_Write(a, bs); + case GF_ISOM_BOX_TYPE_TFDT: return tfdt_Write(a, bs); + case GF_ISOM_BOX_TYPE_RVCC: return rvcc_Write(a, bs); default: return defa_Write(a, bs); @@ -1463,7 +1476,8 @@ GF_Err gf_isom_box_size(GF_Box *a) case GF_ISOM_BOX_TYPE_TMPO: case GF_ISOM_BOX_TYPE_CPIL: case GF_ISOM_BOX_TYPE_PGAP: - case GF_ISOM_BOX_TYPE_COVR: return ListItem_Size(a); + case GF_ISOM_BOX_TYPE_COVR: + return ListItem_Size(a); case GF_ISOM_BOX_TYPE_DATA: return data_Size(a); @@ -1494,6 +1508,8 @@ GF_Err gf_isom_box_size(GF_Box *a) case GF_ISOM_BOX_TYPE_SIDX: return sidx_Size(a); case GF_ISOM_BOX_TYPE_SUBS: return subs_Size(a); + case GF_ISOM_BOX_TYPE_TFDT: return tfdt_Size(a); + case GF_ISOM_BOX_TYPE_RVCC: return rvcc_Size(a); default: return defa_Size(a); } diff --git a/src/isomedia/data_map.c b/src/isomedia/data_map.c index 582d174..ed3e29b 100644 --- a/src/isomedia/data_map.c +++ b/src/isomedia/data_map.c @@ -290,7 +290,7 @@ GF_DataMap *gf_isom_fdm_new_temp(const char *sPath) gf_free(tmp); return NULL; } - tmp->bs = gf_bs_from_file(tmp->stream, GF_BITSTREAM_READ); + tmp->bs = gf_bs_from_file(tmp->stream, GF_BITSTREAM_WRITE); if (!tmp->bs) { fclose(tmp->stream); gf_free(tmp); @@ -331,6 +331,12 @@ GF_DataMap *gf_isom_fdm_new(const char *sPath, u8 mode) if (!tmp->stream) tmp->stream = gf_f64_open(sPath, "wb"); bs_mode = GF_BITSTREAM_WRITE; break; + ///we open the file in CAT mode, in case + case GF_ISOM_DATA_MAP_CAT: + if (!tmp->stream) tmp->stream = gf_f64_open(sPath, "a+b"); + if (tmp->stream) gf_f64_seek(tmp->stream, 0, SEEK_END); + bs_mode = GF_BITSTREAM_WRITE; + break; default: gf_free(tmp); return NULL; diff --git a/src/isomedia/hinting.c b/src/isomedia/hinting.c index 6106f53..942f3af 100644 --- a/src/isomedia/hinting.c +++ b/src/isomedia/hinting.c @@ -28,9 +28,9 @@ GF_Box *ghnt_New() { - GF_HintSampleEntryBox *tmp = (GF_HintSampleEntryBox *) gf_malloc(sizeof(GF_HintSampleEntryBox)); + GF_HintSampleEntryBox *tmp; + GF_SAFEALLOC(tmp, GF_HintSampleEntryBox); if (tmp == NULL) return NULL; - memset(tmp, 0, sizeof(GF_HintSampleEntryBox)); tmp->HintDataTable = gf_list_new(); if (!tmp->HintDataTable) { gf_free(tmp); @@ -336,10 +336,12 @@ GF_GenericDTE *New_EmptyDTE() GF_GenericDTE *New_ImmediateDTE() { - GF_ImmediateDTE *dte = (GF_ImmediateDTE *)gf_malloc(sizeof(GF_ImmediateDTE)); - dte->source = 1; - memset(dte->data, 0, 14); - dte->dataLength = 0; + GF_ImmediateDTE *dte; + GF_SAFEALLOC(dte, GF_ImmediateDTE); + if (dte) { + dte->source = 1; + dte->dataLength = 0; + } return (GF_GenericDTE *)dte; } @@ -570,12 +572,11 @@ GF_Err OffsetDTE(GF_GenericDTE *dte, u32 offset, u32 HintSampleNumber) GF_RTPPacket *gf_isom_hint_rtp_new() { - GF_RTPPacket *tmp = (GF_RTPPacket *)gf_malloc(sizeof(GF_RTPPacket)); + GF_RTPPacket *tmp; + GF_SAFEALLOC(tmp, GF_RTPPacket); + if (!tmp) return NULL; tmp->TLV = gf_list_new(); tmp->DataTable = gf_list_new(); - tmp->B_bit = tmp->M_bit = tmp->P_bit = tmp->payloadType = tmp->payloadType = tmp->R_bit = tmp->X_bit = 0; - tmp->relativeTransTime = 0; - tmp->SequenceNumber = 0; return tmp; } diff --git a/src/isomedia/isom_intern.c b/src/isomedia/isom_intern.c index b297410..ed99b23 100644 --- a/src/isomedia/isom_intern.c +++ b/src/isomedia/isom_intern.c @@ -33,6 +33,7 @@ GF_Err gf_isom_parse_root_box(GF_Box **outBox, GF_BitStream *bs, u64 *bytesExpected); #ifndef GPAC_DISABLE_ISOM_FRAGMENTS +GF_Err MergeTrack(GF_TrackBox *trak, GF_TrackFragmentBox *traf, u64 moof_offset, Bool is_first_merge); GF_Err MergeFragment(GF_MovieFragmentBox *moof, GF_ISOFile *mov) { @@ -40,8 +41,6 @@ GF_Err MergeFragment(GF_MovieFragmentBox *moof, GF_ISOFile *mov) u64 MaxDur; GF_TrackFragmentBox *traf; GF_TrackBox *trak; - - GF_Err MergeTrack(GF_TrackBox *trak, GF_TrackFragmentBox *traf, u64 moof_offset); MaxDur = 0; @@ -65,7 +64,7 @@ GF_Err MergeFragment(GF_MovieFragmentBox *moof, GF_ISOFile *mov) } if (!trak || !traf->trex) return GF_ISOM_INVALID_FILE; - MergeTrack(trak, traf, mov->current_top_box_start); + MergeTrack(trak, traf, mov->current_top_box_start, !mov->first_moof_merged); //update trak duration SetTrackDuration(trak); @@ -73,6 +72,7 @@ GF_Err MergeFragment(GF_MovieFragmentBox *moof, GF_ISOFile *mov) MaxDur = trak->Header->duration; } + mov->first_moof_merged = 1; mov->NextMoofNumber = moof->mfhd->sequence_number; //update movie duration if (mov->moov->mvhd->duration < MaxDur) mov->moov->mvhd->duration = MaxDur; @@ -160,7 +160,7 @@ GF_Err gf_isom_parse_movie_boxes(GF_ISOFile *mov, u64 *bytesMissing) /*if we don't have any MDAT yet, create one (edit-write mode) We only work with one mdat, but we're puting it at the place of the first mdat found when opening a file for editing*/ - else if (!mov->mdat && (mov->openMode != GF_ISOM_OPEN_READ)) { + else if (!mov->mdat && (mov->openMode != GF_ISOM_OPEN_READ) && (mov->openMode != GF_ISOM_OPEN_CAT_FRAGMENTS)) { gf_isom_box_del(a); mov->mdat = (GF_MediaDataBox *) gf_isom_box_new(GF_ISOM_BOX_TYPE_MDAT); e = gf_list_add(mov->TopBoxes, mov->mdat); @@ -214,10 +214,17 @@ GF_Err gf_isom_parse_movie_boxes(GF_ISOFile *mov, u64 *bytesMissing) /*read & debug: store at root level*/ if (mov->FragmentsFlags & GF_ISOM_FRAG_READ_DEBUG) { gf_list_add(mov->TopBoxes, a); + } else if (mov->openMode==GF_ISOM_OPEN_CAT_FRAGMENTS) { + mov->NextMoofNumber = mov->moof->mfhd->sequence_number+1; + mov->moof = NULL; + gf_isom_box_del(a); } else { /*merge all info*/ e = MergeFragment((GF_MovieFragmentBox *)a, mov); gf_isom_box_del(a); + if (e) { + GF_LOG(GF_LOG_ERROR, GF_LOG_CONTAINER, ("[iso file] Error merging fragment: %s\n", gf_error_to_string(e) )); + } } break; #endif @@ -264,7 +271,7 @@ GF_Err gf_isom_parse_movie_boxes(GF_ISOFile *mov, u64 *bytesMissing) #ifndef GPAC_DISABLE_ISOM_FRAGMENTS /*in edit mode with successfully loaded fragments, delete all fragment signaling since file is no longer fragmented*/ - if ((mov->openMode > GF_ISOM_OPEN_READ) && mov->moov->mvex) { + if ((mov->openMode > GF_ISOM_OPEN_READ) && (mov->openMode != GF_ISOM_OPEN_CAT_FRAGMENTS) && mov->moov->mvex) { gf_isom_box_del((GF_Box *)mov->moov->mvex); mov->moov->mvex = NULL; } @@ -366,6 +373,7 @@ GF_ISOFile *gf_isom_open_file(const char *fileName, u32 OpenMode, const char *tm gf_isom_delete_movie(mov); return NULL; } + mov->es_id_default_sync = -1; #endif @@ -378,6 +386,12 @@ GF_ISOFile *gf_isom_open_file(const char *fileName, u32 OpenMode, const char *tm gf_isom_delete_movie(mov); return NULL; } + + if (OpenMode == GF_ISOM_OPEN_CAT_FRAGMENTS) { + gf_isom_datamap_del(mov->movieFileMap); + /*reopen the movie file map in cat mode*/ + e = gf_isom_datamap_new(fileName, tmp_dir, GF_ISOM_DATA_MAP_CAT, & mov->movieFileMap); + } return mov; } @@ -730,7 +744,7 @@ GF_EdtsEntry *CreateEditEntry(u64 EditDuration, u64 MediaTime, u8 EditMode) return ent; } -GF_Err gf_isom_add_subsample_info(GF_SubSampleInformationBox *sub_samples, u32 sampleNumber, u32 subSampleSize, u32 priority, Bool discardable) +GF_Err gf_isom_add_subsample_info(GF_SubSampleInformationBox *sub_samples, u32 sampleNumber, u32 subSampleSize, u8 priority, u32 reserved, Bool discardable) { u32 i, count, last_sample; GF_SampleEntry *pSamp; @@ -780,6 +794,7 @@ GF_Err gf_isom_add_subsample_info(GF_SubSampleInformationBox *sub_samples, u32 s if (!pSubSamp) return GF_OUT_OF_MEM; pSubSamp->subsample_size = subSampleSize; pSubSamp->subsample_priority = priority; + pSubSamp->reserved = reserved; pSubSamp->discardable = discardable; return gf_list_add(pSamp->SubSamples, pSubSamp); } diff --git a/src/isomedia/isom_read.c b/src/isomedia/isom_read.c index 1c96930..0eaac68 100644 --- a/src/isomedia/isom_read.c +++ b/src/isomedia/isom_read.c @@ -192,6 +192,7 @@ GF_ISOFile *gf_isom_open(const char *fileName, u32 OpenMode, const char *tmp_dir movie = gf_isom_create_movie(fileName, OpenMode, tmp_dir); break; case GF_ISOM_OPEN_EDIT: + case GF_ISOM_OPEN_CAT_FRAGMENTS: movie = gf_isom_open_file(fileName, OpenMode, tmp_dir); break; case GF_ISOM_WRITE_EDIT: @@ -606,6 +607,28 @@ GF_Err gf_isom_get_reference(GF_ISOFile *movie, u32 trackNumber, u32 referenceTy return GF_OK; } +//Return the number of track references of a track for a given ReferenceType +//return -1 if error +GF_EXPORT +Bool gf_isom_has_track_reference(GF_ISOFile *movie, u32 trackNumber, u32 referenceType, u32 refTrackID) +{ + u32 i; + GF_TrackBox *trak; + GF_TrackReferenceTypeBox *dpnd; + trak = gf_isom_get_track_from_file(movie, trackNumber); + if (!trak) return 0; + if (!trak->References) return 0; + + dpnd = NULL; + if ( (movie->LastError = Track_FindRef(trak, referenceType, &dpnd)) ) return 0; + if (!dpnd) return 0; + for (i=0; itrackIDCount; i++) { + if (dpnd->trackIDs[i]==refTrackID) return 1; + } + return 0; +} + + //Return the media time given the absolute time in the Movie GF_EXPORT @@ -662,27 +685,7 @@ GF_ESD *gf_isom_get_esd(GF_ISOFile *movie, u32 trackNumber, u32 StreamDescriptio movie->LastError = e; return NULL; } - if (esd) { - GF_TrackBox *trak = gf_isom_get_track_from_file(movie, trackNumber); - if (trak->meta) { - u32 brand = gf_isom_get_meta_type(movie, 0, trackNumber); - if (brand==GF_4CC('r','v','c','z')) { - Bool compressed=0; - GF_XMLBox *xml = gf_isom_get_meta_xml(movie, 0, trackNumber, &compressed); - if (xml) { - esd->decoderConfig->rvc_config = (GF_DefaultDescriptor *) gf_odf_desc_new(GF_ODF_DSI_TAG); - if (compressed) { - gf_gz_decompress_payload(xml->xml, xml->xml_length, &esd->decoderConfig->rvc_config->data, &esd->decoderConfig->rvc_config->dataLength); - } else { - esd->decoderConfig->rvc_config->data = gf_malloc(sizeof(char)*(xml->xml_length+1)); - memcpy(esd->decoderConfig->rvc_config->data, xml->xml, sizeof(char)*xml->xml_length); - esd->decoderConfig->rvc_config->data[xml->xml_length] = 0; - esd->decoderConfig->rvc_config->dataLength = xml->xml_length; - } - } - } - } - } + return esd; } @@ -1015,7 +1018,7 @@ u32 gf_isom_get_sample_count(GF_ISOFile *the_file, u32 trackNumber) GF_TrackBox *trak; trak = gf_isom_get_track_from_file(the_file, trackNumber); if (!trak) return 0; - return trak->Media->information->sampleTable->SampleSize->sampleCount; + return trak->Media->information->sampleTable->SampleSize->sampleCount + trak->sample_count_at_seg_start; } u32 gf_isom_get_constant_sample_size(GF_ISOFile *the_file, u32 trackNumber) @@ -1115,6 +1118,32 @@ u32 gf_isom_get_sample_duration(GF_ISOFile *the_file, u32 trackNumber, u32 sampl return (u32) (dts - dur); } + +GF_EXPORT +u32 gf_isom_get_sample_size(GF_ISOFile *the_file, u32 trackNumber, u32 sampleNumber) +{ + u32 size = 0; + GF_TrackBox *trak = gf_isom_get_track_from_file(the_file, trackNumber); + if (!trak || !sampleNumber) return 0; + + stbl_GetSampleSize(trak->Media->information->sampleTable->SampleSize, sampleNumber, &size); + return size; +} + +GF_EXPORT +u8 gf_isom_get_sample_sync(GF_ISOFile *the_file, u32 trackNumber, u32 sampleNumber) +{ + u8 is_rap; + GF_Err e; + GF_TrackBox *trak = gf_isom_get_track_from_file(the_file, trackNumber); + if (!trak || !sampleNumber) return 0; + + if (! trak->Media->information->sampleTable->SyncSample) return 1; + e = stbl_GetSampleRAP(trak->Media->information->sampleTable->SyncSample, sampleNumber, &is_rap, NULL, NULL); + if (e) return 0; + return is_rap; +} + //same as gf_isom_get_sample but doesn't fetch media data GF_EXPORT GF_ISOSample *gf_isom_get_sample_info(GF_ISOFile *the_file, u32 trackNumber, u32 sampleNumber, u32 *sampleDescriptionIndex, u64 *data_offset) @@ -1733,10 +1762,30 @@ GF_Err gf_isom_get_fragment_defaults(GF_ISOFile *the_file, u32 trackNumber, GF_TrackBox *trak; GF_StscEntry *sc_ent; u32 i, j, maxValue, value; +#ifndef GPAC_DISABLE_ISOM_FRAGMENTS + GF_TrackExtendsBox *trex; +#endif GF_SampleTableBox *stbl; trak = gf_isom_get_track_from_file(the_file, trackNumber); if (!trak) return GF_BAD_PARAM; + /*if trex is already set, restore flags*/ +#ifndef GPAC_DISABLE_ISOM_FRAGMENTS + trex = the_file->moov->mvex ? GetTrex(the_file->moov, gf_isom_get_track_id(the_file,trackNumber) ) : NULL; + if (trex) { + trex->track = trak; + + if (defaultDuration) *defaultDuration = trex->def_sample_duration; + if (defaultSize) *defaultSize = trex->def_sample_size; + if (defaultDescriptionIndex) *defaultDescriptionIndex = trex->def_sample_desc_index; + if (defaultRandomAccess) *defaultRandomAccess = GF_ISOM_GET_FRAG_SYNC(trex->def_sample_flags); + if (defaultPadding) *defaultPadding = GF_ISOM_GET_FRAG_PAD(trex->def_sample_flags); + if (defaultDegradationPriority) *defaultDegradationPriority = GF_ISOM_GET_FRAG_DEG(trex->def_sample_flags); + return GF_OK; + } +#endif + + stbl = trak->Media->information->sampleTable; //duration if (defaultDuration) { @@ -1850,13 +1899,14 @@ GF_Err gf_isom_release_segment(GF_ISOFile *movie, Bool reset_tables) trak->Media->information->dataHandler = NULL; } if (reset_tables) { - u32 type; + u32 type, dur; u64 dts; GF_SampleTableBox *stbl = trak->Media->information->sampleTable; trak->sample_count_at_seg_start += stbl->SampleSize->sampleCount; - stbl_GetSampleDTS(stbl->TimeToSample, stbl->SampleSize->sampleCount, &dts); - trak->dts_at_seg_start += dts; - + if (trak->sample_count_at_seg_start) { + stbl_GetSampleDTS_and_Duration(stbl->TimeToSample, stbl->SampleSize->sampleCount, &dts, &dur); + trak->dts_at_seg_start += dts + dur; + } #define RECREATE_BOX(_a, __cast) \ if (_a) { \ type = _a->type;\ @@ -1877,6 +1927,7 @@ GF_Err gf_isom_release_segment(GF_ISOFile *movie, Bool reset_tables) } } + movie->first_moof_merged = 0; gf_isom_datamap_del(movie->movieFileMap); movie->movieFileMap = NULL; #endif @@ -2517,7 +2568,7 @@ u32 gf_isom_sample_has_subsamples(GF_ISOFile *movie, u32 track, u32 sampleNumber return gf_isom_sample_get_subsample_entry(movie, track, sampleNumber, NULL); } -GF_Err gf_isom_sample_get_subsample(GF_ISOFile *movie, u32 track, u32 sampleNumber, u32 subSampleNumber, u32 *size, u8 *priority, Bool *discardable) +GF_Err gf_isom_sample_get_subsample(GF_ISOFile *movie, u32 track, u32 sampleNumber, u32 subSampleNumber, u32 *size, u8 *priority, u32 *reserved, Bool *discardable) { GF_SubSampleEntry *entry; GF_SampleEntry *sub_sample; @@ -2528,9 +2579,44 @@ GF_Err gf_isom_sample_get_subsample(GF_ISOFile *movie, u32 track, u32 sampleNumb entry = gf_list_get(sub_sample->SubSamples, subSampleNumber-1); *size = entry->subsample_size; *priority = entry->subsample_priority; + *reserved = entry->reserved; *discardable = entry->discardable ? 1 : 0; return GF_OK; } +GF_Err gf_isom_get_rvc_config(GF_ISOFile *movie, u32 track, u32 sampleDescriptionIndex, u16 *rvc_predefined, char **data, u32 *size, const char **mime) +{ + GF_MPEGVisualSampleEntryBox *entry; + GF_TrackBox *trak; + + if (!rvc_predefined || !data || !size) return GF_BAD_PARAM; + *rvc_predefined = 0; + + trak = gf_isom_get_track_from_file(movie, track); + if (!trak) return GF_BAD_PARAM; + + + entry = (GF_MPEGVisualSampleEntryBox *) gf_list_get(trak->Media->information->sampleTable->SampleDescription->boxList, sampleDescriptionIndex-1); + if (!entry ) return GF_BAD_PARAM; + switch (entry->type) { + case GF_ISOM_BOX_TYPE_MP4V: + case GF_ISOM_BOX_TYPE_AVC1: + case GF_ISOM_BOX_TYPE_AVC2: + case GF_ISOM_BOX_TYPE_SVC1: + case GF_ISOM_BOX_TYPE_ENCV: + break; + default: + return GF_BAD_PARAM; + } + if (!entry->rvcc) return GF_BAD_PARAM; + + *rvc_predefined = entry->rvcc->predefined_rvc_config; + if (entry->rvcc->rvc_meta_idx) { + if (!data || !size) return GF_OK; + return gf_isom_extract_meta_item_mem(movie, 0, track, entry->rvcc->rvc_meta_idx, data, size, mime); + } + return GF_OK; +} + #endif /*GPAC_DISABLE_ISOM*/ diff --git a/src/isomedia/isom_store.c b/src/isomedia/isom_store.c index a7e1763..6a954e6 100644 --- a/src/isomedia/isom_store.c +++ b/src/isomedia/isom_store.c @@ -410,12 +410,17 @@ GF_Err DoWriteMeta(GF_ISOFile *file, GF_MetaBox *meta, GF_BitStream *bs, Bool Em /*new resource*/ if (iinf->full_path) { - FILE *src = gf_f64_open(iinf->full_path, "rb"); - - if (!src) continue; - gf_f64_seek(src, 0, SEEK_END); - it_size = gf_f64_tell(src); - gf_f64_seek(src, 0, SEEK_SET); + FILE *src=NULL; + + if (!iinf->data_len) { + src = gf_f64_open(iinf->full_path, "rb"); + if (!src) continue; + gf_f64_seek(src, 0, SEEK_END); + it_size = gf_f64_tell(src); + gf_f64_seek(src, 0, SEEK_SET); + } else { + it_size = iinf->data_len; + } if (maxExtendSizeextent_entries)) { @@ -428,16 +433,20 @@ GF_Err DoWriteMeta(GF_ISOFile *file, GF_MetaBox *meta, GF_BitStream *bs, Bool Em /*OK write to mdat*/ if (!Emulation) { - char cache_data[4096]; - u64 remain = entry->extent_length; - while (remain) { - u32 size_cache = (remain>4096) ? 4096 : (u32) remain; - size_cache = fread(cache_data, sizeof(char), size_cache, src); - gf_bs_write_data(bs, cache_data, size_cache); - remain -= size_cache; + if (src) { + char cache_data[4096]; + u64 remain = entry->extent_length; + while (remain) { + u32 size_cache = (remain>4096) ? 4096 : (u32) remain; + size_cache = fread(cache_data, sizeof(char), size_cache, src); + gf_bs_write_data(bs, cache_data, size_cache); + remain -= size_cache; + } + } else { + gf_bs_write_data(bs, iinf->full_path, iinf->data_len); } } - fclose(src); + if (src) fclose(src); } else if (gf_list_count(iloc->extent_entries)) { u32 j; @@ -1180,6 +1189,7 @@ static GF_Err WriteInterleaved(MovieWriter *mw, GF_BitStream *bs, Bool drift_int //so just shift the offset e = ShiftOffset(movie, writers, finalOffset - offset); if (e) goto exit; + firstSize = GetMoovAndMetaSize(movie, writers); } //now write our stuff e = WriteMoovAndMeta(movie, writers, bs); diff --git a/src/isomedia/isom_write.c b/src/isomedia/isom_write.c index 88b8102..048ffcb 100644 --- a/src/isomedia/isom_write.c +++ b/src/isomedia/isom_write.c @@ -718,6 +718,22 @@ GF_Err gf_isom_add_sample_shadow(GF_ISOFile *movie, u32 trackNumber, GF_ISOSampl return SetTrackDuration(trak); } +GF_Err gf_isom_set_sample_rap(GF_ISOFile *movie, u32 trackNumber) +{ + GF_SampleTableBox *stbl; + GF_Err e; + GF_TrackBox *trak; + e = CanAccessMovie(movie, GF_ISOM_OPEN_WRITE); + if (e) return e; + + trak = gf_isom_get_track_from_file(movie, trackNumber); + if (!trak) return GF_BAD_PARAM; + stbl = trak->Media->information->sampleTable; + if (!stbl->SyncSample) stbl->SyncSample = (GF_SyncSampleBox *) gf_isom_box_new(GF_ISOM_BOX_TYPE_STSS); + return stbl_AddRAP(stbl->SyncSample, stbl->SampleSize->sampleCount); + +} + GF_Err gf_isom_append_sample_data(GF_ISOFile *movie, u32 trackNumber, char *data, u32 data_size) { GF_Err e; @@ -1944,12 +1960,13 @@ GF_Err gf_isom_set_brand_info(GF_ISOFile *movie, u32 MajorBrand, u32 MinorVersio if (!MajorBrand) return GF_BAD_PARAM; - e = CanAccessMovie(movie, GF_ISOM_OPEN_WRITE); - if (e) return e; - - e = CheckNoData(movie); - if (e) return e; + if (! (movie->FragmentsFlags & GF_ISOM_FRAG_WRITE_READY)) { + e = CanAccessMovie(movie, GF_ISOM_OPEN_WRITE); + if (e) return e; + e = CheckNoData(movie); + if (e) return e; + } if (!movie->brand) { movie->brand = (GF_FileTypeBox *) gf_isom_box_new(GF_ISOM_BOX_TYPE_FTYP); @@ -1985,13 +2002,15 @@ GF_Err gf_isom_modify_alternate_brand(GF_ISOFile *movie, u32 Brand, u8 AddIt) u32 i, k, *p; GF_Err e; - e = CanAccessMovie(movie, GF_ISOM_OPEN_WRITE); - if (e) return e; - if (!Brand) return GF_BAD_PARAM; - e = CheckNoData(movie); - if (e) return e; + if (! (movie->FragmentsFlags & GF_ISOM_FRAG_WRITE_READY)) { + e = CanAccessMovie(movie, GF_ISOM_OPEN_WRITE); + if (e) return e; + + e = CheckNoData(movie); + if (e) return e; + } if (!movie->brand && AddIt) { movie->brand = (GF_FileTypeBox *) gf_isom_box_new(GF_ISOM_BOX_TYPE_FTYP); @@ -2051,11 +2070,13 @@ GF_Err gf_isom_reset_alt_brands(GF_ISOFile *movie) u32 *p; GF_Err e; - e = CanAccessMovie(movie, GF_ISOM_OPEN_WRITE); - if (e) return e; - - e = CheckNoData(movie); - if (e) return e; + if (! (movie->FragmentsFlags & GF_ISOM_FRAG_WRITE_READY)) { + e = CanAccessMovie(movie, GF_ISOM_OPEN_WRITE); + if (e) return e; + + e = CheckNoData(movie); + if (e) return e; + } if (!movie->brand) { movie->brand = (GF_FileTypeBox *) gf_isom_box_new(GF_ISOM_BOX_TYPE_FTYP); @@ -2212,10 +2233,11 @@ GF_Err gf_isom_add_user_data(GF_ISOFile *movie, u32 trackNumber, u32 UserDataTyp memcpy( ((GF_UUIDBox*)a)->uuid, UUID, 16); } - a->data = (char*)gf_malloc(sizeof(char)*DataLength); - memcpy(a->data, data, DataLength); - a->dataSize = DataLength; - + if (DataLength) { + a->data = (char*)gf_malloc(sizeof(char)*DataLength); + memcpy(a->data, data, DataLength); + a->dataSize = DataLength; + } return udta_AddBox(udta, (GF_Box *) a); } @@ -2323,12 +2345,21 @@ GF_Err gf_isom_clone_movie(GF_ISOFile *orig_file, GF_ISOFile *dest_file, Bool cl e = CanAccessMovie(dest_file, GF_ISOM_OPEN_WRITE); if (e) return e; - if (orig_file->brand) + if (orig_file->brand) { + gf_list_del_item(dest_file->TopBoxes, dest_file->brand); + gf_isom_box_del((GF_Box *)dest_file->brand); + dest_file->brand = NULL; clone_box((GF_Box *)orig_file->brand, (GF_Box **)&dest_file->brand); + if (dest_file->brand) gf_list_add(dest_file->TopBoxes, dest_file->brand); + } if (orig_file->meta) { + gf_list_del_item(dest_file->TopBoxes, dest_file->meta); + gf_isom_box_del((GF_Box *)dest_file->meta); + dest_file->meta = NULL; /*fixme - check imports*/ clone_box((GF_Box *)orig_file->meta, (GF_Box **)dest_file->meta); + if (dest_file->meta) gf_list_add(dest_file->TopBoxes, dest_file->meta); } if (orig_file->moov) { u32 i, dstTrack; @@ -2357,6 +2388,7 @@ GF_Err gf_isom_clone_movie(GF_ISOFile *orig_file, GF_ISOFile *dest_file, Bool cl dest_file->moov->mvhd->nextTrackID = 1; gf_isom_clone_pl_indications(orig_file, dest_file); } + dest_file->moov->mov = dest_file; } return GF_OK; } @@ -3905,7 +3937,7 @@ GF_Err gf_isom_timed_meta_data_config_new(GF_ISOFile *movie, u32 trackNumber, Bo } -GF_Err gf_isom_add_subsample(GF_ISOFile *movie, u32 track, u32 sampleNumber, u32 subSampleSize, u32 priority, Bool discardable) +GF_Err gf_isom_add_subsample(GF_ISOFile *movie, u32 track, u32 sampleNumber, u32 subSampleSize, u8 priority, u32 reserved, Bool discardable) { GF_SubSampleInformationBox *sub_samples; GF_TrackBox *trak; @@ -3925,9 +3957,57 @@ GF_Err gf_isom_add_subsample(GF_ISOFile *movie, u32 track, u32 sampleNumber, u32 } else { sub_samples = trak->Media->information->sampleTable->SubSamples; } - return gf_isom_add_subsample_info(sub_samples, sampleNumber, subSampleSize, priority, discardable); + return gf_isom_add_subsample_info(sub_samples, sampleNumber, subSampleSize, priority, reserved, discardable); } + +GF_Err gf_isom_set_rvc_config(GF_ISOFile *movie, u32 track, u32 sampleDescriptionIndex, u16 rvc_predefined, char *mime, char *data, u32 size) +{ + GF_MPEGVisualSampleEntryBox *entry; + GF_Err e; + GF_TrackBox *trak; + + e = CanAccessMovie(movie, GF_ISOM_OPEN_WRITE); + if (e) return e; + + trak = gf_isom_get_track_from_file(movie, track); + if (!trak) return GF_BAD_PARAM; + + + entry = (GF_MPEGVisualSampleEntryBox *) gf_list_get(trak->Media->information->sampleTable->SampleDescription->boxList, sampleDescriptionIndex-1); + if (!entry ) return GF_BAD_PARAM; + switch (entry->type) { + case GF_ISOM_BOX_TYPE_MP4V: + case GF_ISOM_BOX_TYPE_AVC1: + case GF_ISOM_BOX_TYPE_AVC2: + case GF_ISOM_BOX_TYPE_SVC1: + case GF_ISOM_BOX_TYPE_ENCV: + break; + default: + return GF_BAD_PARAM; + } + + if (entry->rvcc && entry->rvcc->rvc_meta_idx) { + gf_isom_remove_meta_item(movie, 0, track, entry->rvcc->rvc_meta_idx); + entry->rvcc->rvc_meta_idx = 0; + } + + if (!entry->rvcc) { + entry->rvcc = (GF_RVCConfigurationBox *) gf_isom_box_new(GF_ISOM_BOX_TYPE_RVCC); + } + entry->rvcc->predefined_rvc_config = rvc_predefined; + if (!rvc_predefined) { + e = gf_isom_set_meta_type(movie, 0, track, GF_4CC('r','v','c','i')); + if (e) return e; + gf_isom_modify_alternate_brand(movie, GF_ISOM_BRAND_ISO2, 1); + e = gf_isom_add_meta_item_memory(movie, 0, track, "rvcconfig.xml", mime, NULL, data, size); + if (e) return e; + entry->rvcc->rvc_meta_idx = gf_isom_get_meta_item_count(movie, 0, track); + } + return GF_OK; +} + + #endif /*!defined(GPAC_DISABLE_ISOM) && !defined(GPAC_DISABLE_ISOM_WRITE)*/ diff --git a/src/isomedia/media.c b/src/isomedia/media.c index 39f7f53..87977f0 100644 --- a/src/isomedia/media.c +++ b/src/isomedia/media.c @@ -220,7 +220,7 @@ GF_Err Media_GetESD(GF_MediaBox *mdia, u32 sampleDescIndex, GF_ESD **out_esd, Bo gf_bs_write_u16(bs, ((GF_MPEGVisualSampleEntryBox*)entry)->Height); gf_bs_get_content(bs, & esd->decoderConfig->decoderSpecificInfo->data, & esd->decoderConfig->decoderSpecificInfo->dataLength); gf_bs_del(bs); - return GF_OK; + break; } case GF_ISOM_SUBTYPE_LSR1: @@ -235,7 +235,7 @@ GF_Err Media_GetESD(GF_MediaBox *mdia, u32 sampleDescIndex, GF_ESD **out_esd, Bo esd->decoderConfig->decoderSpecificInfo->dataLength = ptr->lsr_config->hdr_size; esd->decoderConfig->decoderSpecificInfo->data = gf_malloc(sizeof(char)*ptr->lsr_config->hdr_size); memcpy(esd->decoderConfig->decoderSpecificInfo->data, ptr->lsr_config->hdr, sizeof(char)*ptr->lsr_config->hdr_size); - return GF_OK; + break; } default: return GF_ISOM_INVALID_MEDIA; diff --git a/src/isomedia/meta.c b/src/isomedia/meta.c index 7477f76..89ab536 100644 --- a/src/isomedia/meta.c +++ b/src/isomedia/meta.c @@ -95,7 +95,6 @@ GF_Err gf_isom_extract_meta_xml(GF_ISOFile *file, Bool root_meta, u32 track_num, GF_XMLBox *gf_isom_get_meta_xml(GF_ISOFile *file, Bool root_meta, u32 track_num, Bool *is_binary) { u32 i, count; - GF_XMLBox *xml = NULL; GF_MetaBox *meta = gf_isom_get_meta(file, root_meta, track_num); if (!meta) return NULL; @@ -190,8 +189,9 @@ u32 gf_isom_get_meta_item_by_id(GF_ISOFile *file, Bool root_meta, u32 track_num, return 0; } -GF_Err gf_isom_extract_meta_item(GF_ISOFile *file, Bool root_meta, u32 track_num, u32 item_id, const char *dump_file_name) +GF_Err gf_isom_extract_meta_item_extended(GF_ISOFile *file, Bool root_meta, u32 track_num, u32 item_id, const char *dump_file_name, char **out_data, u32 *out_size, const char **out_mime ) { + GF_BitStream *item_bs; char szPath[1024]; GF_ItemExtentEntry *extent_entry; FILE *resource = NULL; @@ -202,11 +202,14 @@ GF_Err gf_isom_extract_meta_item(GF_ISOFile *file, Bool root_meta, u32 track_num GF_MetaBox *meta = gf_isom_get_meta(file, root_meta, track_num); if (!meta || !meta->item_infos || !meta->item_locations) return GF_BAD_PARAM; + + if (out_mime) *out_mime = NULL; item_num = gf_isom_get_meta_item_by_id(file, root_meta, track_num, item_id); if (item_num) { GF_ItemInfoEntryBox *item_entry = (GF_ItemInfoEntryBox *)gf_list_get(meta->item_infos->item_infos, item_num-1); item_name = item_entry->item_name; + if (out_mime) *out_mime = item_entry->content_type; } location_entry = NULL; @@ -243,13 +246,20 @@ GF_Err gf_isom_extract_meta_item(GF_ISOFile *file, Bool root_meta, u32 track_num ) return GF_BAD_PARAM; } - if (dump_file_name) { + item_bs = NULL; + + if (out_data) { + item_bs = gf_bs_new(NULL, 0, GF_BITSTREAM_WRITE); + } else if (dump_file_name) { strcpy(szPath, dump_file_name); + resource = gf_f64_open(szPath, "wb"); + item_bs = gf_bs_from_file(resource, GF_BITSTREAM_WRITE); } else { if (item_name) strcpy(szPath, item_name); else sprintf(szPath, "item_id%02d", item_id); + resource = gf_f64_open(szPath, "wb"); + item_bs = gf_bs_from_file(resource, GF_BITSTREAM_WRITE); } - resource = gf_f64_open(szPath, "wb"); for (i=0; i4096) ? 4096 : (u32) remain; gf_bs_read_data(file->movieFileMap->bs, buf_cache, cache_size); - fwrite(buf_cache, 1, cache_size, resource); + gf_bs_write_data(item_bs, buf_cache, cache_size); remain -= cache_size; } } - fclose(resource); + if (out_data) { + gf_bs_get_content(item_bs, out_data, out_size); + } + if (resource) { + fclose(resource); + } + gf_bs_del(item_bs); return GF_OK; } +GF_Err gf_isom_extract_meta_item(GF_ISOFile *file, Bool root_meta, u32 track_num, u32 item_id, const char *dump_file_name) +{ + return gf_isom_extract_meta_item_extended(file, root_meta, track_num, item_id, dump_file_name, NULL, NULL, NULL); +} + +GF_Err gf_isom_extract_meta_item_mem(GF_ISOFile *file, Bool root_meta, u32 track_num, u32 item_id, char **out_data, u32 *out_size, const char **out_mime) +{ + return gf_isom_extract_meta_item_extended(file, root_meta, track_num, item_id, NULL, out_data, out_size, out_mime); +} + u32 gf_isom_get_meta_primary_item_id(GF_ISOFile *file, Bool root_meta, u32 track_num) { GF_MetaBox *meta = gf_isom_get_meta(file, root_meta, track_num); @@ -424,7 +450,7 @@ GF_Err gf_isom_set_meta_xml_memory(GF_ISOFile *file, Bool root_meta, u32 track_n return GF_OK; } -GF_Err gf_isom_add_meta_item(GF_ISOFile *file, Bool root_meta, u32 track_num, Bool self_reference, char *resource_path, const char *item_name, const char *mime_type, const char *content_encoding, const char *URL, const char *URN) +GF_Err gf_isom_add_meta_item_extended(GF_ISOFile *file, Bool root_meta, u32 track_num, Bool self_reference, char *resource_path, const char *item_name, const char *mime_type, const char *content_encoding, const char *URL, const char *URN, char *data, u32 data_len) { GF_Err e; GF_ItemLocationEntry *location_entry; @@ -445,7 +471,7 @@ GF_Err gf_isom_add_meta_item(GF_ISOFile *file, Bool root_meta, u32 track_num, Bo if (e) return e; /*check file exists */ - if (!URN && !URL && !self_reference) { + if (!URN && !URL && !self_reference && !data) { FILE *src = gf_f64_open(resource_path, "rb"); if (!src) return GF_URL_ERROR; fclose(src); @@ -545,35 +571,58 @@ GF_Err gf_isom_add_meta_item(GF_ISOFile *file, Bool root_meta, u32 track_num, Bo entry->extent_offset = 0; gf_list_add(location_entry->extent_entries, entry); - src = gf_f64_open(resource_path, "rb"); - if (src) { - char cache_data[4096]; - u64 remain; - gf_f64_seek(src, 0, SEEK_END); - entry->extent_length = gf_f64_tell(src); - gf_f64_seek(src, 0, SEEK_SET); - - remain = entry->extent_length; - while (remain) { - u32 size_cache = (remain>4096) ? 4096 : (u32) remain; - size_cache = fread(cache_data, 1, size_cache, src); - gf_bs_write_data(file->editFileMap->bs, cache_data, size_cache); - remain -= size_cache; - } - fclose(src); - + if (data) { + gf_bs_write_data(file->editFileMap->bs, data, data_len); /*update length size*/ if (entry->extent_length>0xFFFFFFFF) meta->item_locations->length_size = 8; else if (entry->extent_length && !meta->item_locations->length_size) meta->item_locations->length_size = 4; + } else if (resource_path) { + src = gf_f64_open(resource_path, "rb"); + if (src) { + char cache_data[4096]; + u64 remain; + gf_f64_seek(src, 0, SEEK_END); + entry->extent_length = gf_f64_tell(src); + gf_f64_seek(src, 0, SEEK_SET); + + remain = entry->extent_length; + while (remain) { + u32 size_cache = (remain>4096) ? 4096 : (u32) remain; + size_cache = fread(cache_data, 1, size_cache, src); + gf_bs_write_data(file->editFileMap->bs, cache_data, size_cache); + remain -= size_cache; + } + fclose(src); + + /*update length size*/ + if (entry->extent_length>0xFFFFFFFF) meta->item_locations->length_size = 8; + else if (entry->extent_length && !meta->item_locations->length_size) meta->item_locations->length_size = 4; + } } } /*store full path for info*/ else if (!location_entry->data_reference_index) { - infe->full_path = gf_strdup(resource_path); + if (data) { + infe->full_path = gf_malloc(sizeof(char) * data_len); + memcpy(infe->full_path, data, sizeof(char) * data_len); + infe->data_len = data_len; + } else { + infe->full_path = gf_strdup(resource_path); + infe->data_len = 0; + } } return GF_OK; } +GF_Err gf_isom_add_meta_item(GF_ISOFile *file, Bool root_meta, u32 track_num, Bool self_reference, char *resource_path, const char *item_name, const char *mime_type, const char *content_encoding, const char *URL, const char *URN) +{ + return gf_isom_add_meta_item_extended(file, root_meta, track_num, self_reference, resource_path, item_name, mime_type, content_encoding, URL, URN, NULL, 0); +} + +GF_Err gf_isom_add_meta_item_memory(GF_ISOFile *file, Bool root_meta, u32 track_num, const char *item_name, const char *mime_type, const char *content_encoding, char *data, u32 data_len) +{ + return gf_isom_add_meta_item_extended(file, root_meta, track_num, 0, NULL, item_name, mime_type, content_encoding, NULL, NULL, data, data_len); +} GF_Err gf_isom_remove_meta_item(GF_ISOFile *file, Bool root_meta, u32 track_num, u32 item_id) { diff --git a/src/isomedia/movie_fragments.c b/src/isomedia/movie_fragments.c index 7a4ee10..096bb86 100644 --- a/src/isomedia/movie_fragments.c +++ b/src/isomedia/movie_fragments.c @@ -60,20 +60,35 @@ GF_Err gf_isom_finalize_for_fragment(GF_ISOFile *movie, Bool use_segments) { GF_Err e; u32 i; + Bool store_file = 1; GF_TrackExtendsBox *trex; if (!movie || !movie->moov) return GF_BAD_PARAM; + + if (movie->openMode==GF_ISOM_OPEN_CAT_FRAGMENTS) { + /*from now on we are in write mode*/ + movie->openMode = GF_ISOM_OPEN_WRITE; + store_file = 0; + movie->append_segment = 1; + } else { + movie->NextMoofNumber = 1; + } + //this is only allowed in write mode if (movie->openMode != GF_ISOM_OPEN_WRITE) return GF_ISOM_INVALID_MODE; if (movie->FragmentsFlags & GF_ISOM_FRAG_WRITE_READY) return GF_OK; movie->FragmentsFlags = 0; - //update durations - gf_isom_get_duration(movie); + if (store_file) { + /*"dash" brand: this is a DASH Initialization Segment*/ + gf_isom_modify_alternate_brand(movie, GF_4CC('d','a','s','h'), 1); + //update durations + gf_isom_get_duration(movie); - //write movie - e = WriteToFile(movie); - if (e) return e; + //write movie + e = WriteToFile(movie); + if (e) return e; + } //make sure we do have all we need. If not this is not an error, just consider //the file closed @@ -92,12 +107,25 @@ GF_Err gf_isom_finalize_for_fragment(GF_ISOFile *movie, Bool use_segments) //ok we are fine - note the data map is created at the begining if (i) movie->FragmentsFlags |= GF_ISOM_FRAG_WRITE_READY; - movie->NextMoofNumber = 1; if (use_segments) { movie->use_segments = 1; movie->moof_list = gf_list_new(); } + + /*set brands for segment*/ + + /*"msdh": it's a media segment */ + gf_isom_set_brand_info(movie, GF_4CC('m','s','d','h'), 0); + /*remove all brands */ + gf_isom_reset_alt_brands(movie); + /* + msdh: it's a media segment + sims: it's a media segment with an SSIX + msix: it's a media segment with an index + lmsg: it's the last media segment + */ + return GF_OK; } @@ -510,6 +538,33 @@ u32 moof_get_duration(GF_MovieFragmentBox *moof, u32 refTrackID) return duration; } +u32 moof_get_earliest_cts(GF_MovieFragmentBox *moof, u32 refTrackID) +{ + u32 i, j, cts, duration; + GF_TrunEntry *ent; + GF_TrackFragmentBox *traf; + GF_TrackFragmentRunBox *trun; + for (i=0; iTrackList); i++) { + traf = gf_list_get(moof->TrackList, i); + if (traf->tfhd->trackID==refTrackID) break; + traf=NULL; + } + if (!traf) return 0; + + duration = 0; + cts = 0xFFFFFFFF; + i=0; + while ((trun = gf_list_enum(traf->TrackRuns, &i))) { + j=0; + while ((ent = gf_list_enum(trun->entries, &j))) { + if (duration + ent->CTS_Offset < cts) + cts = duration + ent->CTS_Offset; + duration += ent->Duration; + } + } + return cts; +} + GF_Err StoreFragment(GF_ISOFile *movie, Bool load_mdat_only, s32 data_offset_diff, u32 *moof_size) { GF_Err e; @@ -661,13 +716,29 @@ GF_Err StoreFragment(GF_ISOFile *movie, Bool load_mdat_only, s32 data_offset_dif return GF_OK; } +static GF_Err sidx_rewrite(GF_SegmentIndexBox *sidx, GF_BitStream *bs, u64 start_pos) +{ + GF_Err e; + u64 pos = gf_bs_get_position(bs); + /*write sidx*/ + gf_bs_seek(bs, start_pos); + e = gf_isom_box_write((GF_Box *) sidx, bs); + gf_bs_seek(bs, pos); + return e; +} -GF_Err gf_isom_close_segment(GF_ISOFile *movie, u32 frags_per_sidx, u32 referenceTrackID, GF_SIDXTrackTimes *tracks_times, u32 nb_times, Bool daisy_chain_sidx) +GF_Err gf_isom_close_segment(GF_ISOFile *movie, s32 frags_per_sidx, u32 referenceTrackID, u64 ref_track_decode_time, Bool daisy_chain_sidx, Bool last_segment) { GF_SegmentIndexBox *sidx=NULL; + GF_SegmentIndexBox *prev_sidx=NULL; + GF_SegmentIndexBox *root_sidx=NULL; u64 sidx_start, sidx_end; - u32 count, nb_subsegs, idx; + Bool first_sidx = 0; + Bool no_sidx = 0; + u32 count, nb_subsegs=0, idx, cur_dur, sidx_dur, sidx_idx; + u64 last_top_box_pos, root_prev_offset, local_sidx_start, local_sidx_end; + GF_TrackBox *trak = NULL; GF_Err e; sidx_start = sidx_end = 0; //and only at setup @@ -687,7 +758,18 @@ GF_Err gf_isom_close_segment(GF_ISOFile *movie, u32 frags_per_sidx, u32 referenc gf_bs_seek(movie->editFileMap->bs, movie->segment_start); gf_bs_truncate(movie->editFileMap->bs); + if (referenceTrackID) { + trak = gf_isom_get_track_from_id(movie->moov, referenceTrackID); + + /*modify brands STYP*/ + /*"msix" brand: this is a DASH Initialization Segment*/ + gf_isom_modify_alternate_brand(movie, GF_4CC('m','s','i','x'), 1); + if (last_segment) { + /*"lmsg" brand: this is the last DASH Segment*/ + gf_isom_modify_alternate_brand(movie, GF_4CC('l','m','s','g'), 1); + } + } /*write STYP*/ movie->brand->type = GF_ISOM_BOX_TYPE_STYP; e = gf_isom_box_size((GF_Box *) movie->brand); @@ -695,22 +777,49 @@ GF_Err gf_isom_close_segment(GF_ISOFile *movie, u32 frags_per_sidx, u32 referenc e = gf_isom_box_write((GF_Box *) movie->brand, movie->editFileMap->bs); if (e) return e; - /* TODO: change code for SIDX new version */ - /*prepare SIDX*/ + if (frags_per_sidx < 0) { + referenceTrackID = 0; + frags_per_sidx = 0; + no_sidx = 1; + } + + /*prepare SIDX: we write a blank SIDX box with the right number of entries, and will rewrite it later on*/ if (referenceTrackID) { + Bool is_root_sidx=0; sidx = (GF_SegmentIndexBox *)gf_isom_box_new(GF_ISOM_BOX_TYPE_SIDX); sidx->reference_ID = referenceTrackID; - //sidx->nb_track_times = nb_times; - //sidx->tracks_times = tracks_times; - - if (!frags_per_sidx) nb_subsegs = 1; - else { + sidx->timescale = trak->Media->mediaHeader->timeScale; + /*we don't write anything between sidx and following moov*/ + sidx->first_offset = 0; + sidx->earliest_presentation_time = ref_track_decode_time; + + /*we consider that each fragment is a subsegment - this could be controled by another parameter*/ + if (!frags_per_sidx) { + nb_subsegs = 1; + frags_per_sidx = count; + } else { nb_subsegs = count/frags_per_sidx; if (nb_subsegs*frags_per_sidxnb_refs = nb_subsegs; - sidx->refs = gf_malloc(sizeof(GF_SIDXReference)*nb_subsegs); - memset(sidx->refs, 0, sizeof(GF_SIDXReference)*nb_subsegs); + + /*single SIDX, reference all fragments*/ + if (nb_subsegs==1) { + sidx->nb_refs = frags_per_sidx; + daisy_chain_sidx = 0; + } + /*daisy-chain SIDX, reference all fragments plus next */ + else if (daisy_chain_sidx) { + sidx->nb_refs = frags_per_sidx + 1; + /*we will have to adjust earliest cpresentation time*/ + first_sidx = 1; + } + /*root SIDX referencing all subsegments*/ + else { + sidx->nb_refs = nb_subsegs; + is_root_sidx = 1; + } + sidx->refs = gf_malloc(sizeof(GF_SIDXReference)*sidx->nb_refs); + memset(sidx->refs, 0, sizeof(GF_SIDXReference)*sidx->nb_refs); /*remember start of sidx*/ sidx_start = gf_bs_get_position(movie->editFileMap->bs); @@ -723,34 +832,139 @@ GF_Err gf_isom_close_segment(GF_ISOFile *movie, u32 frags_per_sidx, u32 referenc sidx_end = gf_bs_get_position(movie->editFileMap->bs); count = idx = 0; + + if (is_root_sidx) { + root_sidx = sidx; + sidx = NULL; + } } - /*write all moofs*/ + sidx_idx = 0; + sidx_dur = 0; + last_top_box_pos = root_prev_offset = sidx_end; + local_sidx_start = local_sidx_end = 0; + + /*cumulated segments duration since start of the sidx */ + cur_dur = 0; e = GF_OK; while (gf_list_count(movie->moof_list)) { s32 offset_diff; u32 moof_size; + u32 dur; + movie->moof = gf_list_get(movie->moof_list, 0); gf_list_rem(movie->moof_list, 0); + + if (!root_sidx && sidx && first_sidx) { + first_sidx = 0; + sidx->earliest_presentation_time = ref_track_decode_time + moof_get_earliest_cts(movie->moof, referenceTrackID); + } + + /*hierarchical or daisy-chain SIDXs*/ + if (!no_sidx && !sidx && (root_sidx || daisy_chain_sidx) ) { + sidx = (GF_SegmentIndexBox *)gf_isom_box_new(GF_ISOM_BOX_TYPE_SIDX); + sidx->reference_ID = referenceTrackID; + sidx->timescale = trak->Media->mediaHeader->timeScale; + sidx->earliest_presentation_time = ref_track_decode_time + sidx_dur + moof_get_earliest_cts(movie->moof, referenceTrackID); + + /*we don't write anything between sidx and following moov*/ + sidx->first_offset = 0; + sidx->nb_refs = frags_per_sidx; + if (daisy_chain_sidx && (nb_subsegs>1)) { + sidx->nb_refs += 1; + } + sidx->refs = gf_malloc(sizeof(GF_SIDXReference)*sidx->nb_refs); + memset(sidx->refs, 0, sizeof(GF_SIDXReference)*sidx->nb_refs); + + if (root_sidx) + root_sidx->refs[sidx_idx].reference_type = 1; + + /*remember start of sidx*/ + local_sidx_start = gf_bs_get_position(movie->editFileMap->bs); + + /*write it*/ + e = gf_isom_box_size((GF_Box *) sidx); + if (e) return e; + e = gf_isom_box_write((GF_Box *) sidx, movie->editFileMap->bs); + if (e) return e; + + local_sidx_end = gf_bs_get_position(movie->editFileMap->bs); + + /*adjust prev offset*/ + last_top_box_pos = local_sidx_end; + } + offset_diff = (s32) (gf_bs_get_position(movie->editFileMap->bs) - movie->moof->fragment_offset); movie->moof->fragment_offset = gf_bs_get_position(movie->editFileMap->bs); + if (!e) { - if (sidx && !count) { + e = StoreFragment(movie, 0, offset_diff, &moof_size); + + if (sidx) { /*we refer to next moof*/ sidx->refs[idx].reference_type = 0; sidx->refs[idx].contains_RAP = moof_get_rap_time_offset(movie->moof, referenceTrackID, & sidx->refs[idx].RAP_delta_time); - sidx->refs[idx].subsegment_duration += moof_get_duration(movie->moof, referenceTrackID); - /*reference offset is startof the moof we're about to write*/ - sidx->refs[idx].reference_offset = (u32) ( gf_bs_get_position(movie->editFileMap->bs) - sidx_end) ; - } - e = StoreFragment(movie, 0, offset_diff, &moof_size); - - if (sidx) { + if (sidx->refs[idx].contains_RAP) { + sidx->refs[idx].RAP_delta_time += cur_dur; + + if (root_sidx && !root_sidx->refs[sidx_idx].contains_RAP) { + root_sidx->refs[sidx_idx].contains_RAP = 1; + root_sidx->refs[sidx_idx].RAP_delta_time = sidx->refs[idx].RAP_delta_time + sidx_dur; + } + else if (prev_sidx && !prev_sidx->refs[prev_sidx->nb_refs - 1].contains_RAP) { + prev_sidx->refs[prev_sidx->nb_refs - 1].contains_RAP = 1; + prev_sidx->refs[prev_sidx->nb_refs - 1].RAP_delta_time = sidx->refs[idx].RAP_delta_time; + } + + } + + dur = moof_get_duration(movie->moof, referenceTrackID); + sidx->refs[idx].subsegment_duration += dur; + cur_dur += dur; + /*reference size is end of the moof we just wrote minus last_box_pos*/ + sidx->refs[idx].reference_size = (u32) ( gf_bs_get_position(movie->editFileMap->bs) - last_top_box_pos) ; + last_top_box_pos = gf_bs_get_position(movie->editFileMap->bs); + idx++; + count++; + /*switching to next SIDX*/ if (count==frags_per_sidx) { + + if (root_sidx) { + root_sidx->refs[sidx_idx].reference_size = (u32) (gf_bs_get_position(movie->editFileMap->bs) - local_sidx_start); + root_sidx->refs[sidx_idx].subsegment_duration = cur_dur; + if (!sidx_idx) { + root_sidx->earliest_presentation_time = sidx->earliest_presentation_time; + } + + sidx_rewrite(sidx, movie->editFileMap->bs, local_sidx_start); + gf_isom_box_del((GF_Box*)sidx); + sidx = NULL; + } else if (daisy_chain_sidx) { + if (prev_sidx) { + if (prev_sidx->refs[prev_sidx->nb_refs - 1].contains_RAP) { + prev_sidx->refs[prev_sidx->nb_refs - 1].contains_RAP = 1; + prev_sidx->refs[prev_sidx->nb_refs - 1].RAP_delta_time += sidx_dur; + } + prev_sidx->refs[prev_sidx->nb_refs - 1].subsegment_duration = sidx_dur; + prev_sidx->refs[prev_sidx->nb_refs - 1].reference_size = (u32) (gf_bs_get_position(movie->editFileMap->bs) - local_sidx_start); + prev_sidx->refs[prev_sidx->nb_refs - 1].reference_type = 1; + sidx_rewrite(prev_sidx, movie->editFileMap->bs, sidx_start); + gf_isom_box_del((GF_Box*)prev_sidx); + + sidx_start = local_sidx_start; + sidx_end = local_sidx_end; + } + nb_subsegs--; + prev_sidx = sidx; + sidx = NULL; + } + sidx_dur += cur_dur; + cur_dur = 0; count = 0; - idx++; + idx=0; + sidx_idx++; } } } @@ -759,23 +973,38 @@ GF_Err gf_isom_close_segment(GF_ISOFile *movie, u32 frags_per_sidx, u32 referenc } if (sidx) { - u64 pos = gf_bs_get_position(movie->editFileMap->bs); - /*write sidx*/ - gf_bs_seek(movie->editFileMap->bs, sidx_start); - e = gf_isom_box_write((GF_Box *) sidx, movie->editFileMap->bs); - gf_bs_seek(movie->editFileMap->bs, pos); - - //sidx->tracks_times=NULL; - //sidx->nb_track_times=0; + sidx_rewrite(sidx, movie->editFileMap->bs, sidx_start); gf_isom_box_del((GF_Box*)sidx); } + if (prev_sidx) { + sidx_rewrite(prev_sidx, movie->editFileMap->bs, sidx_start); + gf_isom_box_del((GF_Box*)prev_sidx); + } + if (root_sidx) { + sidx_rewrite(root_sidx, movie->editFileMap->bs, sidx_start); + gf_isom_box_del((GF_Box*)root_sidx); + } + + if (movie->append_segment) { + char bloc[1024]; + u32 seg_size = (u32) gf_bs_get_size(movie->editFileMap->bs); + gf_bs_seek(movie->editFileMap->bs, 0); + while (seg_size) { + u32 size = gf_bs_read_data(movie->editFileMap->bs, bloc, (seg_size>1024) ? 1024 : seg_size); + gf_bs_write_data(movie->movieFileMap->bs, bloc, size); + seg_size -= size; + } + gf_isom_datamap_del(movie->editFileMap); + movie->editFileMap = gf_isom_fdm_new_temp(NULL); + } + return e; } GF_Err gf_isom_close_fragments(GF_ISOFile *movie) { if (movie->use_segments) { - return gf_isom_close_segment(movie, 0, 0, NULL, 0, 0); + return gf_isom_close_segment(movie, 0, 0, 0, 0, 1); } else { return StoreFragment(movie, 0, 0, NULL); } @@ -791,6 +1020,7 @@ GF_Err gf_isom_start_segment(GF_ISOFile *movie, char *SegName) if (gf_list_count(movie->moof_list)) return GF_BAD_PARAM; + movie->append_segment = 0; /*update segment file*/ if (SegName) { gf_isom_datamap_del(movie->editFileMap); @@ -800,6 +1030,9 @@ GF_Err gf_isom_start_segment(GF_ISOFile *movie, char *SegName) } assert(gf_list_count(movie->moof_list) == 0); movie->segment_start = gf_bs_get_position(movie->editFileMap->bs); + /*if movieFileMap is not null, we are concatenating segments to the original move, force a copy*/ + if (movie->movieFileMap) + movie->append_segment = 1; return GF_OK; } @@ -1048,7 +1281,7 @@ GF_Err gf_isom_fragment_append_data(GF_ISOFile *movie, u32 TrackID, char *data, return GF_OK; } -GF_Err gf_isom_fragment_add_subsample(GF_ISOFile *movie, u32 TrackID, u32 subSampleSize, u32 priority, Bool discardable) +GF_Err gf_isom_fragment_add_subsample(GF_ISOFile *movie, u32 TrackID, u32 subSampleSize, u8 priority, u32 reserved, Bool discardable) { u32 i, count, last_sample; GF_TrackFragmentBox *traf; @@ -1069,7 +1302,7 @@ GF_Err gf_isom_fragment_add_subsample(GF_ISOFile *movie, u32 TrackID, u32 subSam traf->subs = (GF_SubSampleInformationBox *) gf_isom_box_new(GF_ISOM_BOX_TYPE_SUBS); traf->subs->version = (subSampleSize>0xFFFF) ? 1 : 0; } - return gf_isom_add_subsample_info(traf->subs, last_sample, subSampleSize, priority, discardable); + return gf_isom_add_subsample_info(traf->subs, last_sample, subSampleSize, priority, reserved, discardable); } GF_Err gf_isom_fragment_copy_subsample(GF_ISOFile *dest, u32 TrackID, GF_ISOFile *orig, u32 track, u32 sampleNumber) @@ -1103,7 +1336,7 @@ GF_Err gf_isom_fragment_copy_subsample(GF_ISOFile *dest, u32 TrackID, GF_ISOFile count = gf_list_count(sub_sample->SubSamples); for (i=0; iSubSamples, i); - e = gf_isom_add_subsample_info(traf->subs, last_sample, entry->subsample_size, entry->subsample_priority, entry->discardable); + e = gf_isom_add_subsample_info(traf->subs, last_sample, entry->subsample_size, entry->subsample_priority, entry->reserved, entry->discardable); if (e) return e; } return GF_OK; @@ -1131,6 +1364,23 @@ u32 gf_isom_is_fragmented(GF_ISOFile *movie) return 0; } + +GF_Err gf_isom_set_traf_base_media_decode_time(GF_ISOFile *movie, u32 TrackID, u64 decode_time) +{ + GF_TrackFragmentBox *traf; + if (!movie || !movie->moof || !(movie->FragmentsFlags & GF_ISOM_FRAG_WRITE_READY) ) return GF_BAD_PARAM; + + traf = GetTraf(movie, TrackID); + if (!traf) return GF_BAD_PARAM; + + if (!traf->tfdt) { + traf->tfdt = (GF_TFBaseMediaDecodeTimeBox *) gf_isom_box_new(GF_ISOM_BOX_TYPE_TFDT); + if (!traf->tfdt) return GF_OUT_OF_MEM; + } + traf->tfdt->baseMediaDecodeTime = decode_time; + return GF_OK; +} + #else GF_Err gf_isom_finalize_for_fragment(GF_ISOFile *the_file) @@ -1179,7 +1429,7 @@ u32 gf_isom_is_fragmented(GF_ISOFile *the_file) return 0; } -GF_Err gf_isom_fragment_add_subsample(GF_ISOFile *movie, u32 TrackID, u32 subSampleSize, u32 priority, Bool discardable) +GF_Err gf_isom_fragment_add_subsample(GF_ISOFile *movie, u32 TrackID, u32 subSampleSize, u8 priority, u32 reserved, Bool discardable) { return GF_NOT_SUPPORTED; } @@ -1189,7 +1439,27 @@ GF_Err gf_isom_fragment_copy_subsample(GF_ISOFile *dest, u32 TrackID, GF_ISOFile return GF_NOT_SUPPORTED; } +GF_Err gf_isom_set_traf_base_media_decode_time(GF_ISOFile *movie, u32 TrackID, u64 decode_time) +{ + return GF_NOT_SUPPORTED; +} #endif /*GPAC_DISABLE_ISOM_FRAGMENTS)*/ + +void gf_isom_set_next_moof_number(GF_ISOFile *movie, u32 value) +{ +#ifndef GPAC_DISABLE_ISOM_FRAGMENTS + if (movie) movie->NextMoofNumber = value; +#endif +} + +u32 gf_isom_get_next_moof_number(GF_ISOFile *movie) +{ +#ifndef GPAC_DISABLE_ISOM_FRAGMENTS + if (movie) return movie->NextMoofNumber; +#endif + return 0; +} + #endif /*GPAC_DISABLE_ISOM*/ diff --git a/src/isomedia/stbl_read.c b/src/isomedia/stbl_read.c index 7902612..51f8e25 100644 --- a/src/isomedia/stbl_read.c +++ b/src/isomedia/stbl_read.c @@ -167,7 +167,7 @@ GF_Err stbl_GetSampleCTS(GF_CompositionOffsetBox *ctts, u32 SampleNumber, u32 *C } //Get the DTS of a sample -GF_Err stbl_GetSampleDTS(GF_TimeToSampleBox *stts, u32 SampleNumber, u64 *DTS) +GF_Err stbl_GetSampleDTS_and_Duration(GF_TimeToSampleBox *stts, u32 SampleNumber, u64 *DTS, u32 *duration) { u32 i, j, count; GF_SttsEntry *ent; @@ -212,15 +212,17 @@ GF_Err stbl_GetSampleDTS(GF_TimeToSampleBox *stts, u32 SampleNumber, u64 *DTS) found: (*DTS) = stts->r_CurrentDTS + j * (u64) ent->sampleDelta; - + if (duration) *duration = ent->sampleDelta; if (stts->r_FirstSampleInEntry == 1) stts->r_FirstSampleInEntry = 1; - - return GF_OK; } +GF_Err stbl_GetSampleDTS(GF_TimeToSampleBox *stts, u32 SampleNumber, u64 *DTS) +{ + return stbl_GetSampleDTS_and_Duration(stts, SampleNumber, DTS, NULL); +} //Set the RAP flag of a sample GF_Err stbl_GetSampleRAP(GF_SyncSampleBox *stss, u32 SampleNumber, u8 *IsRAP, u32 *prevRAP, u32 *nextRAP) { diff --git a/src/isomedia/stbl_write.c b/src/isomedia/stbl_write.c index d66d66f..c4b6e1b 100644 --- a/src/isomedia/stbl_write.c +++ b/src/isomedia/stbl_write.c @@ -90,6 +90,7 @@ GF_Err stbl_AddDTS(GF_SampleTableBox *stbl, u64 DTS, u32 *sampleNumber, u32 Last ALLOC_INC(stts->alloc_size); stts->entries = gf_realloc(stts->entries, sizeof(GF_SttsEntry)*stts->alloc_size); if (!stts->entries) return GF_OUT_OF_MEM; + memset(&stts->entries[stts->nb_entries], 0, sizeof(GF_SttsEntry)*(stts->alloc_size-stts->nb_entries) ); } ent = &stts->entries[stts->nb_entries]; stts->nb_entries++; @@ -134,6 +135,7 @@ GF_Err stbl_AddDTS(GF_SampleTableBox *stbl, u64 DTS, u32 *sampleNumber, u32 Last stts->alloc_size += 2; stts->entries = gf_realloc(stts->entries, sizeof(GF_SttsEntry)*stts->alloc_size); if (!stts->entries) return GF_OUT_OF_MEM; + memset(&stts->entries[stts->nb_entries], 0, sizeof(GF_SttsEntry)*(stts->alloc_size - stts->nb_entries) ); } /*repack the DTSs*/ @@ -172,6 +174,7 @@ GF_Err AddCompositionOffset(GF_CompositionOffsetBox *ctts, u32 offset) ALLOC_INC(ctts->alloc_size); ctts->entries = gf_realloc(ctts->entries, sizeof(GF_DttsEntry)*ctts->alloc_size); if (!ctts->entries) return GF_OUT_OF_MEM; + memset(&ctts->entries[ctts->nb_entries], 0, sizeof(GF_DttsEntry)*(ctts->alloc_size-ctts->nb_entries) ); } ctts->entries[ctts->nb_entries].decodingOffset = offset; ctts->entries[ctts->nb_entries].sampleCount = 1; @@ -194,6 +197,7 @@ GF_Err stbl_AddCTS(GF_SampleTableBox *stbl, u32 sampleNumber, u32 CTSoffset) ALLOC_INC(ctts->alloc_size); ctts->entries = gf_realloc(ctts->entries, sizeof(GF_DttsEntry)*ctts->alloc_size); if (!ctts->entries) return GF_OUT_OF_MEM; + memset(&ctts->entries[ctts->nb_entries], 0, sizeof(GF_DttsEntry)*(ctts->alloc_size - ctts->nb_entries) ); } ctts->entries[ctts->nb_entries].decodingOffset = CTSoffset; ctts->entries[ctts->nb_entries].sampleCount = 1; @@ -228,6 +232,7 @@ GF_Err stbl_AddCTS(GF_SampleTableBox *stbl, u32 sampleNumber, u32 CTSoffset) if (ctts->nb_entries+2>=ctts->alloc_size) { ctts->alloc_size += 2; ctts->entries = gf_realloc(ctts->entries, sizeof(GF_DttsEntry)*ctts->alloc_size); + memset(&ctts->entries[ctts->nb_entries], 0, sizeof(GF_DttsEntry)*(ctts->alloc_size-ctts->nb_entries) ); } ctts->entries[0].sampleCount = 1; @@ -271,7 +276,7 @@ GF_Err stbl_repackCTS(GF_CompositionOffsetBox *ctts) } } ctts->nb_entries=j+1; - /*note we don't gf_realloc*/ + /*note we don't realloc*/ return GF_OK; } @@ -294,6 +299,7 @@ GF_Err stbl_unpackCTS(GF_SampleTableBox *stbl) if (ctts->nb_entries == ctts->alloc_size) { ALLOC_INC(ctts->alloc_size); ctts->entries = gf_realloc(ctts->entries, sizeof(GF_DttsEntry)*ctts->alloc_size); + memset(&ctts->entries[ctts->nb_entries], 0, sizeof(GF_DttsEntry)*(ctts->alloc_size-ctts->nb_entries) ); } ctts->entries[ctts->nb_entries].decodingOffset = packed[i].decodingOffset; ctts->entries[ctts->nb_entries].sampleCount = 1; @@ -307,6 +313,7 @@ GF_Err stbl_unpackCTS(GF_SampleTableBox *stbl) if (ctts->nb_entries == ctts->alloc_size) { ALLOC_INC(ctts->alloc_size); ctts->entries = gf_realloc(ctts->entries, sizeof(GF_DttsEntry)*ctts->alloc_size); + memset(&ctts->entries[ctts->nb_entries], 0, sizeof(GF_DttsEntry)*(ctts->alloc_size-ctts->nb_entries) ); } ctts->entries[ctts->nb_entries].decodingOffset = 0; ctts->entries[ctts->nb_entries].sampleCount = 1; @@ -368,6 +375,7 @@ GF_Err stbl_AddSize(GF_SampleSizeBox *stsz, u32 sampleNumber, u32 size) ALLOC_INC(stsz->alloc_size); stsz->sizes = gf_realloc(stsz->sizes, sizeof(u32)*(stsz->alloc_size) ); if (!stsz->sizes) return GF_OUT_OF_MEM; + memset(&stsz->sizes[stsz->sampleCount], 0, sizeof(u32)*(stsz->alloc_size - stsz->sampleCount) ); } stsz->sizes[stsz->sampleCount] = size; } else { @@ -406,11 +414,14 @@ GF_Err stbl_AddRAP(GF_SyncSampleBox *stss, u32 sampleNumber) return GF_OK; } + if (stss->sampleNumbers[stss->nb_entries-1] == sampleNumber) return GF_OK; + if (stss->sampleNumbers[stss->nb_entries-1] < sampleNumber) { if (stss->nb_entries==stss->alloc_size) { ALLOC_INC(stss->alloc_size); stss->sampleNumbers = gf_realloc(stss->sampleNumbers, sizeof(u32) * stss->alloc_size); if (!stss->sampleNumbers) return GF_OUT_OF_MEM; + memset(&stss->sampleNumbers[stss->nb_entries], 0, sizeof(u32) * (stss->alloc_size-stss->nb_entries) ); } stss->sampleNumbers[stss->nb_entries] = sampleNumber; } else { @@ -446,6 +457,7 @@ GF_Err stbl_AddRedundant(GF_SampleTableBox *stbl, u32 sampleNumber) if (sdtp->sampleCount + 1 < sampleNumber) { u32 missed = sampleNumber-1 - sdtp->sampleCount; sdtp->sample_info = (u8*) gf_realloc(sdtp->sample_info, sizeof(u8) * (sdtp->sampleCount+missed) ); + memset(&sdtp->sample_info[sdtp->sampleCount], 0, sizeof(u8) * missed ); while (missed) { u8 isRAP; if (stbl->SyncSample) stbl_GetSampleRAP(stbl->SyncSample, sdtp->sampleCount+1, &isRAP, NULL, NULL); @@ -540,6 +552,7 @@ GF_Err stbl_AddChunkOffset(GF_MediaBox *mdia, u32 sampleNumber, u32 StreamDescIn ALLOC_INC(stco->alloc_size); stco->offsets = (u32*)gf_realloc(stco->offsets, sizeof(u32) * stco->alloc_size); if (!stco->offsets) return GF_OUT_OF_MEM; + memset(&stco->offsets[stco->nb_entries], 0, sizeof(u32) * (stco->alloc_size-stco->nb_entries) ); } stco->offsets[stco->nb_entries] = (u32) offset; stco->nb_entries += 1; @@ -570,6 +583,7 @@ GF_Err stbl_AddChunkOffset(GF_MediaBox *mdia, u32 sampleNumber, u32 StreamDescIn ALLOC_INC(co64->alloc_size); co64->offsets = (u64*)gf_realloc(co64->offsets, sizeof(u64) * co64->alloc_size); if (!co64->offsets) return GF_OUT_OF_MEM; + memset(&co64->offsets[co64->nb_entries], 0, sizeof(u64) * (co64->alloc_size - co64->nb_entries) ); } co64->offsets[co64->nb_entries] = offset; co64->nb_entries += 1; @@ -596,6 +610,7 @@ GF_Err stbl_AddChunkOffset(GF_MediaBox *mdia, u32 sampleNumber, u32 StreamDescIn ALLOC_INC(stsc->alloc_size); stsc->entries = gf_realloc(stsc->entries, sizeof(GF_StscEntry)*stsc->alloc_size); if (!stsc->entries) return GF_OUT_OF_MEM; + memset(&stsc->entries[stsc->nb_entries], 0, sizeof(GF_StscEntry)*(stsc->alloc_size-stsc->nb_entries) ); } if (sampleNumber == stsc->nb_entries + 1) { ent = &stsc->entries[stsc->nb_entries]; @@ -739,6 +754,7 @@ GF_Err stbl_SetSampleRAP(GF_SyncSampleBox *stss, u32 SampleNumber, u8 isRAP) ALLOC_INC(stss->alloc_size); stss->sampleNumbers = gf_realloc(stss->sampleNumbers, sizeof(u32)*stss->alloc_size); if (!stss->sampleNumbers) return GF_OUT_OF_MEM; + memset(&stss->sampleNumbers[stss->nb_entries], 0, sizeof(u32)*(stss->alloc_size - stss->nb_entries) ); } if (i+1 < stss->nb_entries) @@ -935,7 +951,7 @@ GF_Err stbl_RemoveChunk(GF_SampleTableBox *stbl, u32 sampleNumber) stbl->SampleToChunk->currentChunk = 1; stbl->SampleToChunk->ghostNumber = 1; - //gf_realloc the chunk offset + //realloc the chunk offset if (stbl->ChunkOffset->type == GF_ISOM_BOX_TYPE_STCO) { if (!stbl->SampleSize->sampleCount) { gf_free(((GF_ChunkOffsetBox *)stbl->ChunkOffset)->offsets); @@ -1069,7 +1085,7 @@ GF_Err stbl_SetPaddingBits(GF_SampleTableBox *stbl, u32 SampleNumber, u8 bits) if (!stbl->PaddingBits->padbits) return GF_OUT_OF_MEM; memset(stbl->PaddingBits->padbits, 0, sizeof(u8)*stbl->PaddingBits->SampleCount); } - //gf_realloc (this is needed in case n out of k samples get padding added) + //realloc (this is needed in case n out of k samples get padding added) if (stbl->PaddingBits->SampleCount < stbl->SampleSize->sampleCount) { p = (u8*)gf_malloc(sizeof(u8) * stbl->SampleSize->sampleCount); if (!p) return GF_OUT_OF_MEM; @@ -1213,7 +1229,7 @@ GF_Err stbl_SampleSizeAppend(GF_SampleSizeBox *stsz, u32 data_size) u32 i; if (!stsz || !stsz->sampleCount) return GF_BAD_PARAM; - //we must gf_realloc our table + //we must realloc our table if (stsz->sampleSize) { stsz->sizes = (u32*)gf_malloc(sizeof(u32)*stsz->sampleCount); if (!stsz->sizes) return GF_OUT_OF_MEM; @@ -1242,6 +1258,7 @@ void stbl_AppendTime(GF_SampleTableBox *stbl, u32 duration) ALLOC_INC(stts->alloc_size); stts->entries = gf_realloc(stts->entries, sizeof(GF_SttsEntry)*stts->alloc_size); if (!stts->entries) return; + memset(&stts->entries[stts->nb_entries], 0, sizeof(GF_SttsEntry)*(stts->alloc_size-stts->nb_entries) ); } stts->entries[stts->nb_entries].sampleCount = 1; stts->entries[stts->nb_entries].sampleDelta = duration; @@ -1269,6 +1286,7 @@ void stbl_AppendSize(GF_SampleTableBox *stbl, u32 size) stbl->SampleSize->sizes = (u32 *)gf_realloc(stbl->SampleSize->sizes, sizeof(u32)*stbl->SampleSize->alloc_size); if (!stbl->SampleSize->sizes) return; + memset(&stbl->SampleSize->sizes[stbl->SampleSize->sampleCount], 0, sizeof(u32) * (stbl->SampleSize->alloc_size - stbl->SampleSize->sampleCount) ); if (init_table) { for (i=0; iSampleSize->sampleCount;i++) @@ -1348,6 +1366,7 @@ void stbl_AppendSampleToChunk(GF_SampleTableBox *stbl, u32 DescIndex, u32 sample ALLOC_INC(stsc->alloc_size); stsc->entries = gf_realloc(stsc->entries, sizeof(GF_StscEntry)*stsc->alloc_size); if (!stsc->entries) return; + memset(&stsc->entries[stsc->nb_entries], 0, sizeof(GF_StscEntry)*(stsc->alloc_size - stsc->nb_entries) ); } //ok we need a new entry - this assumes this function is called AFTER AppendChunk ent = &stsc->entries[stsc->nb_entries]; @@ -1387,6 +1406,7 @@ void stbl_AppendRAP(GF_SampleTableBox *stbl, u8 isRap) ALLOC_INC(stbl->SyncSample->alloc_size); stbl->SyncSample->sampleNumbers = (u32*) gf_realloc(stbl->SyncSample->sampleNumbers, sizeof(u32) * stbl->SyncSample->alloc_size); if (!stbl->SyncSample->sampleNumbers) return; + memset(&stbl->SyncSample->sampleNumbers[stbl->SyncSample->nb_entries], 0, sizeof(u32) * (stbl->SyncSample->alloc_size-stbl->SyncSample->nb_entries) ); } stbl->SyncSample->sampleNumbers[stbl->SyncSample->nb_entries] = stbl->SampleSize->sampleCount; stbl->SyncSample->nb_entries += 1; @@ -1424,6 +1444,7 @@ void stbl_AppendCTSOffset(GF_SampleTableBox *stbl, u32 CTSOffset) if (ctts->nb_entries==ctts->alloc_size) { ALLOC_INC(ctts->alloc_size); ctts->entries = gf_realloc(ctts->entries, sizeof(GF_DttsEntry)*ctts->alloc_size); + memset(&ctts->entries[ctts->nb_entries], 0, sizeof(GF_DttsEntry)*(ctts->alloc_size-ctts->nb_entries) ); } ctts->entries[ctts->nb_entries].decodingOffset = CTSOffset; ctts->entries[ctts->nb_entries].sampleCount = 1; @@ -1592,6 +1613,7 @@ static GFINLINE GF_Err stbl_AddOffset(GF_Box **a, u64 offset) ALLOC_INC(stco->alloc_size); stco->offsets = (u32*)gf_realloc(stco->offsets, stco->alloc_size * sizeof(u32)); if (!stco->offsets) return GF_OUT_OF_MEM; + memset(&stco->offsets[stco->nb_entries], 0, (stco->alloc_size - stco->nb_entries) * sizeof(u32)); } stco->offsets[stco->nb_entries] = (u32) offset; @@ -1603,6 +1625,7 @@ static GFINLINE GF_Err stbl_AddOffset(GF_Box **a, u64 offset) ALLOC_INC(co64->alloc_size); co64->offsets = (u64*)gf_realloc(co64->offsets, co64->alloc_size * sizeof(u64)); if (!co64->offsets) return GF_OUT_OF_MEM; + memset(&co64->offsets[co64->nb_entries], 0, (co64->alloc_size - co64->nb_entries) * sizeof(u64) ); } co64->offsets[co64->nb_entries] = offset; co64->nb_entries += 1; @@ -1671,6 +1694,7 @@ GF_Err stbl_SetChunkAndOffset(GF_SampleTableBox *stbl, u32 sampleNumber, u32 Str ALLOC_INC(the_stsc->alloc_size); the_stsc->entries = gf_realloc(the_stsc->entries, sizeof(GF_StscEntry)*the_stsc->alloc_size); if (!the_stsc->entries) return GF_OUT_OF_MEM; + memset(&the_stsc->entries[the_stsc->nb_entries], 0, sizeof(GF_StscEntry)*(the_stsc->alloc_size-the_stsc->nb_entries)); } //create a new entry (could be the first one, BTW) newEnt = &the_stsc->entries[the_stsc->nb_entries]; diff --git a/src/isomedia/track.c b/src/isomedia/track.c index 1a36272..ef03064 100644 --- a/src/isomedia/track.c +++ b/src/isomedia/track.c @@ -66,16 +66,18 @@ GF_Err GetESD(GF_MovieBox *moov, u32 trackID, u32 StreamDescIndex, GF_ESD **outE { GF_Err e; GF_ESD *esd; + u32 track_num = 0; GF_SampleTableBox *stbl; GF_TrackBox *trak, *OCRTrack; GF_TrackReferenceTypeBox *dpnd; GF_SLConfig *slc; GF_MPEGSampleEntryBox *entry; + track_num = gf_isom_get_tracknum_from_id(moov, trackID); dpnd = NULL; *outESD = NULL; - trak = gf_isom_get_track(moov, gf_isom_get_tracknum_from_id(moov, trackID)); + trak = gf_isom_get_track(moov, track_num); if (!trak) return GF_ISOM_INVALID_FILE; e = Media_GetESD(trak->Media, StreamDescIndex, &esd, 0); @@ -98,6 +100,18 @@ GF_Err GetESD(GF_MovieBox *moov, u32 trackID, u32 StreamDescIndex, GF_ESD **outE esd->dependsOnESID = 0; } + if (trak->udta) { + GF_UserDataMap *map; + u32 i = 0; + while ((map = (GF_UserDataMap*)gf_list_enum(trak->udta->recordList, &i))) { + if (map->boxType == GF_4CC('A','U','X','V')) { + GF_Descriptor *d = gf_odf_desc_new(GF_ODF_AUX_VIDEO_DATA); + gf_list_add(esd->extensionDescriptors, d); + break; + } + } + } + //OK, get the OCR (in a REAL MP4File, OCR is 0 in ESD and is specified through track reference dpnd = NULL; OCRTrack = NULL; @@ -169,6 +183,30 @@ default_sync: esd->langDesc->langCode |= trak->Media->mediaHeader->packedLanguage[2]; } + + { + u16 rvc_predefined; + char *rvc_cfg_data; + const char *mime_type; + u32 rvc_cfg_size; + e = gf_isom_get_rvc_config(moov->mov, track_num, 1, &rvc_predefined, &rvc_cfg_data, &rvc_cfg_size, &mime_type); + if (e==GF_OK) { + if (rvc_predefined) { + esd->decoderConfig->predefined_rvc_config = rvc_predefined; + } else { + esd->decoderConfig->rvc_config = (GF_DefaultDescriptor *) gf_odf_desc_new(GF_ODF_DSI_TAG); + if (mime_type && !strcmp(mime_type, "application/rvc-config+xml+gz") ) { + gf_gz_decompress_payload(rvc_cfg_data, rvc_cfg_size, &esd->decoderConfig->rvc_config->data, &esd->decoderConfig->rvc_config->dataLength); + gf_free(rvc_cfg_data); + } else { + esd->decoderConfig->rvc_config->data = rvc_cfg_data; + esd->decoderConfig->rvc_config->dataLength = rvc_cfg_size; + } + } + } + } + + /*normally all files shall be stored with predefined=SLPredef_MP4, but of course some are broken (philips) so we just check the ESD_URL. If set, use the given cfg, otherwise always rewrite it*/ if (esd->URLString != NULL) { @@ -241,7 +279,8 @@ default_sync: //this new SL will be OUT OF THE FILE. Let's set its predefined to 0 esd->slConfig->predefined = 0; - + + *outESD = esd; return GF_OK; } @@ -341,7 +380,7 @@ GF_Err SetTrackDuration(GF_TrackBox *trak) #ifndef GPAC_DISABLE_ISOM_FRAGMENTS -GF_Err MergeTrack(GF_TrackBox *trak, GF_TrackFragmentBox *traf, u64 moof_offset) +GF_Err MergeTrack(GF_TrackBox *trak, GF_TrackFragmentBox *traf, u64 moof_offset, Bool is_first_merge) { u32 i, j, chunk_size; u64 base_offset, data_offset; @@ -375,6 +414,16 @@ GF_Err MergeTrack(GF_TrackBox *trak, GF_TrackFragmentBox *traf, u64 moof_offset) chunk_size = 0; prev_trun_data_offset = 0; + /*in playback mode*/ + if (traf->tfdt && is_first_merge) { +#ifndef GPAC_DISABLE_LOG + if (trak->sample_count_at_seg_start && (trak->dts_at_seg_start != traf->tfdt->baseMediaDecodeTime)) { + GF_LOG(GF_LOG_ERROR, GF_LOG_CONTAINER, ("[iso file] Error: TFDT timing "LLD" different from track cumulated timing "LLD" - using tfdt\n", traf->tfdt->baseMediaDecodeTime, trak->dts_at_seg_start )); + } +#endif + trak->dts_at_seg_start = traf->tfdt->baseMediaDecodeTime; + } + i=0; while ((trun = (GF_TrackFragmentRunBox *)gf_list_enum(traf->TrackRuns, &i))) { //merge the run diff --git a/src/laser/lsr_dec.c b/src/laser/lsr_dec.c index 2399c01..86bc803 100644 --- a/src/laser/lsr_dec.c +++ b/src/laser/lsr_dec.c @@ -3803,7 +3803,7 @@ static GF_Node *lsr_read_listener(GF_LASeRCodec *lsr, SVG_Element *parent) if (!target->target) post_pone = 1; else par = target->target; } - if (!handler->target) { + if (!handler->target && !handler->string) { handler->type = XMLRI_ELEMENTID; handler->target = parent; } @@ -3983,7 +3983,8 @@ static void lsr_read_group_content(GF_LASeRCodec *lsr, GF_Node *elt, Bool skip_o /*node attributes are all parsed*/ - gf_node_init(elt); + if (elt->sgprivate->tag!=TAG_SVG_script) + gf_node_init(elt); GF_LSR_READ_INT(lsr, count, 1, "opt_group"); if (count) { @@ -4002,6 +4003,9 @@ static void lsr_read_group_content(GF_LASeRCodec *lsr, GF_Node *elt, Bool skip_o } } } + + if (elt->sgprivate->tag==TAG_SVG_script) + gf_node_init(elt); } static void lsr_read_group_content_post_init(GF_LASeRCodec *lsr, SVG_Element *elt, Bool skip_init) diff --git a/src/laser/lsr_enc.c b/src/laser/lsr_enc.c index 0d1bf84..dc17e94 100644 --- a/src/laser/lsr_enc.c +++ b/src/laser/lsr_enc.c @@ -483,8 +483,7 @@ static void lsr_write_paint(GF_LASeRCodec *lsr, SVG_Paint *paint, const char *na } } -#ifdef UNUSED_FUNC - +#ifdef GPAC_UNUSED_FUNC static void lsr_write_private_element_container(GF_LASeRCodec *lsr) { /*NO PRIVATE DATA ON ENCODING YET*/ @@ -524,7 +523,7 @@ static Bool lsr_float_list_equal(GF_List *l1, GF_List *l2) } return 1; } -#endif /* UNUSED_FUNC */ +#endif /*GPAC_UNUSED_FUNC*/ @@ -550,9 +549,9 @@ static void lsr_write_private_attributes(GF_LASeRCodec *lsr, SVG_Element *elt) GF_LSR_WRITE_INT(lsr, 0, 1, "has_private_attr"); } else { GF_LSR_WRITE_INT(lsr, 1, 1, "has_private_attr"); -#ifdef UNUSED_FUNC +#ifdef GPAC_UNUSED_FUNC lsr_write_private_att_class(lsr); -#endif /* UNUSED_FUNC */ +#endif /*GPAC_UNUSED_FUNC*/ } } static void lsr_write_string_attribute(GF_LASeRCodec *lsr, char *class_attr, char *name) diff --git a/src/media_tools/av_parsers.c b/src/media_tools/av_parsers.c index a391acb..154563d 100644 --- a/src/media_tools/av_parsers.c +++ b/src/media_tools/av_parsers.c @@ -1553,9 +1553,9 @@ static u8 avc_golomb_bits[256] = { static u32 avc_get_ue(GF_BitStream *bs) { u8 coded; - u32 bits, read; - bits = 0; + u32 bits = 0, read = 0; while (1) { + if (!gf_bs_available(bs)) break; read = gf_bs_peek_bits(bs, 8, 0); if (read) break; gf_bs_read_int(bs, 8); @@ -1737,7 +1737,7 @@ static u32 avc_add_emulation_bytes(const unsigned char *buffer_src, unsigned cha } return nal_size+emulation_bytes_count; } -#ifdef UNUSED_FUNC +#ifdef GPAC_UNUSED_FUNC /*returns the nal_size without emulation prevention bytes*/ static u32 avc_emulation_bytes_remove_count(unsigned char *buffer, u32 nal_size) { @@ -1774,7 +1774,7 @@ static u32 avc_emulation_bytes_remove_count(unsigned char *buffer, u32 nal_size) return emulation_bytes_count; } -#endif /* UNUSED_FUNC */ +#endif /*GPAC_UNUSED_FUNC*/ /*nal_size is updated to allow better error detection*/ static u32 avc_remove_emulation_bytes(const unsigned char *buffer_src, unsigned char *buffer_dst, u32 nal_size) @@ -1819,8 +1819,8 @@ s32 AVC_ReadSeqInfo(char *sps_data, u32 sps_size, AVCState *avc, u32 subseq_sps, { AVC_SPS *sps; u32 ChromaArrayType = 0; - s32 mb_width, mb_height; - u32 sps_id, profile_idc, level_idc, pcomp, i, chroma_format_idc, cl, cr, ct, cb; + s32 mb_width, mb_height, sps_id = -1; + u32 profile_idc, level_idc, pcomp, i, chroma_format_idc, cl, cr, ct, cb; GF_BitStream *bs; char *sps_data_without_emulation_bytes = NULL; u32 sps_data_without_emulation_bytes_size = 0; @@ -1833,8 +1833,14 @@ s32 AVC_ReadSeqInfo(char *sps_data, u32 sps_size, AVCState *avc, u32 subseq_sps, if (vui_flag_pos) *vui_flag_pos = 0; profile_idc = gf_bs_read_int(bs, 8); + pcomp = gf_bs_read_int(bs, 8); + /*sanity checks*/ + if (pcomp & 0x3) + goto exit; + level_idc = gf_bs_read_int(bs, 8); + /*SubsetSps is used to be sure that AVC SPS are not going to be scratched by subset SPS. According to the SVC standard, subset SPS can have the same sps_id than its base layer, but it does not refer to the same SPS. */ @@ -1850,8 +1856,13 @@ s32 AVC_ReadSeqInfo(char *sps_data, u32 sps_size, AVCState *avc, u32 subseq_sps, case 122: case 244: case 44: + /*sanity checks: note1 from 7.4.2.1.1 of iso/iec 14496-10-N11084*/ + if (pcomp & 0xE0) + goto exit; case 83: case 86: + case 118: + case 128: chroma_format_idc = avc_get_ue(bs); ChromaArrayType = chroma_format_idc; if (chroma_format_idc == 3) { @@ -1902,8 +1913,8 @@ s32 AVC_ReadSeqInfo(char *sps_data, u32 sps_size, AVCState *avc, u32 subseq_sps, for(i=0; ipoc_cycle_length; i++) sps->offset_for_ref_frame[i] = avc_get_se(bs); } if (sps->poc_type > 2) { - gf_free(sps_data_without_emulation_bytes); - return -1; + sps_id = -1; + goto exit; } avc_get_ue(bs); /*ref_frame_count*/ gf_bs_read_int(bs, 1); /*gaps_in_frame_num_allowed_flag*/ @@ -2019,15 +2030,15 @@ s32 AVC_ReadSeqInfo(char *sps_data, u32 sps_size, AVCState *avc, u32 subseq_sps, vui_ext_num_entries_minus1 = avc_get_ue(bs); for (i=0; i <= vui_ext_num_entries_minus1; i++) { - u8 vui_ext_nal_hrd_parameters_present_flag, vui_ext_vcl_hrd_parameters_present_flag; - u8 vui_ext_dependency_id = gf_bs_read_int(bs, 3); - u8 vui_ext_quality_id = gf_bs_read_int(bs, 4); - u8 vui_ext_temporal_id = gf_bs_read_int(bs, 3); - u8 vui_ext_timing_info_present_flag = gf_bs_read_int(bs, 1); + u8 vui_ext_nal_hrd_parameters_present_flag, vui_ext_vcl_hrd_parameters_present_flag, vui_ext_timing_info_present_flag; + /*u8 vui_ext_dependency_id = */gf_bs_read_int(bs, 3); + /*u8 vui_ext_quality_id = */gf_bs_read_int(bs, 4); + /*u8 vui_ext_temporal_id = */gf_bs_read_int(bs, 3); + vui_ext_timing_info_present_flag = gf_bs_read_int(bs, 1); if (vui_ext_timing_info_present_flag) { - u32 vui_ext_num_units_in_tick = gf_bs_read_int(bs, 32); - u32 vui_ext_time_scale = gf_bs_read_int(bs, 32); - u8 vui_ext_fixed_frame_rate_flag = gf_bs_read_int(bs, 1); + /*u32 vui_ext_num_units_in_tick = */gf_bs_read_int(bs, 32); + /*u32 vui_ext_time_scale = */gf_bs_read_int(bs, 32); + /*u8 vui_ext_fixed_frame_rate_flag = */gf_bs_read_int(bs, 1); } vui_ext_nal_hrd_parameters_present_flag = gf_bs_read_int(bs, 1); if (vui_ext_nal_hrd_parameters_present_flag) { @@ -2045,7 +2056,7 @@ s32 AVC_ReadSeqInfo(char *sps_data, u32 sps_size, AVCState *avc, u32 subseq_sps, } } else if ((profile_idc==118) || (profile_idc==128)) { - GF_LOG(GF_LOG_WARNING, GF_LOG_CODING, ("[avc-h264] MVC not spported - skipping parsing end of Subset SPS\n")); + GF_LOG(GF_LOG_WARNING, GF_LOG_CODING, ("[avc-h264] MVC not supported - skipping parsing end of Subset SPS\n")); goto exit; } diff --git a/src/media_tools/carousel.c b/src/media_tools/carousel.c new file mode 100644 index 0000000..99cc818 --- /dev/null +++ b/src/media_tools/carousel.c @@ -0,0 +1,409 @@ +/* +* GPAC - Multimedia Framework C SDK +* +* Authors: Telecom Paristech +* Copyright (c)2006-200X ENST - All rights reserved +* +* This file is part of GPAC / MPEG2-TS sub-project +* +* GPAC is gf_free software; you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the gf_free Software Foundation; either version 2, or (at your option) +* any later version. +* +* GPAC 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 Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with this library; see the file COPYING. If not, write to +* the gf_free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +* +*/ + +#include + + +GF_M2TS_ES *gf_ait_section_new(u32 service_id) +{ + GF_M2TS_ES *es; + + GF_M2TS_AIT *ses; + GF_SAFEALLOC(ses, GF_M2TS_AIT); + es = (GF_M2TS_ES *)ses; + es->flags = GF_M2TS_ES_IS_SECTION; + ses->service_id = service_id; + return es; +} + + +void on_ait_section(GF_M2TS_Demuxer *ts, u32 evt_type, void *par) +{ + GF_M2TS_SL_PCK *pck = (GF_M2TS_SL_PCK *)par; + char *data; + u32 u32_data_size; + u32 u32_table_id; + + if (evt_type == GF_M2TS_EVT_AIT_FOUND) { + data = pck->data; + u32_data_size = pck->data_len; + u32_table_id = data[0]; + + gf_m2ts_process_ait((GF_M2TS_AIT*)pck->stream, data, u32_data_size, u32_table_id); + + } +} + +GF_Err gf_m2ts_process_ait(GF_M2TS_AIT *ait, char *data, u32 data_size, u32 table_id) +{ + + GF_BitStream *bs; + u8 temp_descriptor_tag; + u32 data_shift, app_desc_data_shift, ait_app_data_shift; + u32 nb_of_ait; + + data_shift = 0; + temp_descriptor_tag = 0; + nb_of_ait = 0; + ait_app_data_shift = 0; + bs = gf_bs_new(data,data_size,GF_BITSTREAM_READ); + + ait->common_descriptors = gf_list_new(); + ait->application = gf_list_new(); + + ait->table_id = gf_bs_read_int(bs,8); + ait->section_syntax_indicator = gf_bs_read_int(bs,1); + gf_bs_read_int(bs,3); + ait->section_length = gf_bs_read_int(bs,12); + if( (data[1] & 0x0C) != 0){ + GF_LOG(GF_LOG_INFO, GF_LOG_CONTAINER, ("[Process AIT] section length is not correct abroding \n")); + }else if( ait->section_length > AIT_SECTION_LENGTH_MAX){ + GF_LOG(GF_LOG_INFO, GF_LOG_CONTAINER, ("[Process AIT] section length should not exceed 1021. Wrong section, abording processing \n")); + } + ait->test_application_flag = gf_bs_read_int(bs,1); + ait->application_type = gf_bs_read_int(bs,15); + if(ait->application_type != APPLICATION_TYPE_HTTP_APPLICATION){ + GF_LOG(GF_LOG_INFO, GF_LOG_CONTAINER, ("[Process AIT] application type should 0x10. Wrong section, abording processing \n")); + } + gf_bs_read_int(bs,2); + ait->version_number = gf_bs_read_int(bs,5); + + ait->current_next_indicator = gf_bs_read_int(bs,1); + if(!ait->current_next_indicator){ + GF_LOG(GF_LOG_INFO, GF_LOG_CONTAINER, ("[Process AIT] current next indicator should be at 1 \n")); + } + ait->section_number = gf_bs_read_int(bs,8); + ait->last_section_number = gf_bs_read_int(bs,8); + gf_bs_read_int(bs,4);/* bit shifting */ + ait->common_descriptors_length = gf_bs_read_int(bs,12); + gf_bs_read_int(bs,(unsigned int)ait->common_descriptors_length/8); + gf_bs_read_int(bs,4);/* bit shifting */ + ait->application_loop_length = gf_bs_read_int(bs,12); + + data_shift = (u32)(gf_bs_get_position(bs)) + ait->common_descriptors_length/8; + + while(ait_app_data_shiftapplication_loop_length){ + + GF_M2TS_AIT_APPLICATION* application; + GF_SAFEALLOC(application,GF_M2TS_AIT_APPLICATION); + application->application_descriptors = gf_list_new(); + application->index_app_desc_id = 0; + + /* application loop */ + application->organisation_id = gf_bs_read_int(bs,32); + application->application_id= gf_bs_read_int(bs,16); + application->application_control_code= gf_bs_read_int(bs,8); + gf_bs_read_int(bs,4);/* bit shifting */ + application->application_descriptors_loop_length= gf_bs_read_int(bs,12); + + ait_app_data_shift += 9; + app_desc_data_shift = 0; + + while(app_desc_data_shift< application->application_descriptors_loop_length){ + temp_descriptor_tag = gf_bs_read_int(bs,8); + switch(temp_descriptor_tag){ + case APPLICATION_DESCRIPTOR: + { + u64 pre_processing_pos; + GF_M2TS_APPLICATION_DESCRIPTOR* application_descriptor; + GF_SAFEALLOC(application_descriptor, GF_M2TS_APPLICATION_DESCRIPTOR); + application_descriptor->descriptor_tag = temp_descriptor_tag; + application->application_descriptors_id[application->index_app_desc_id] = temp_descriptor_tag; + application->index_app_desc_id++; + application_descriptor->descriptor_length = gf_bs_read_int(bs,8); + pre_processing_pos = gf_bs_get_position(bs); + application_descriptor->application_profiles_length = gf_bs_read_int(bs,8); + application_descriptor->application_profile = gf_bs_read_int(bs,16); + application_descriptor->version_major = gf_bs_read_int(bs,8); + application_descriptor->version_minor = gf_bs_read_int(bs,8); + application_descriptor->version_micro = gf_bs_read_int(bs,8); + application_descriptor->service_bound_flag = gf_bs_read_int(bs,1); + application_descriptor->visibility = gf_bs_read_int(bs,2); + gf_bs_read_int(bs,5); /*bit shift*/ + application_descriptor->application_priority = gf_bs_read_int(bs,8); + application_descriptor->transport_protocol_label = gf_bs_read_int(bs,8); + if(pre_processing_pos+application_descriptor->descriptor_length != gf_bs_get_position(bs)){ + GF_LOG(GF_LOG_INFO, GF_LOG_CONTAINER, ("[Process AIT] Descriptor data processed length error. Difference between byte shifting %d and descriptor length %d \n",(gf_bs_get_position(bs) - pre_processing_pos),application_descriptor->descriptor_length)); + } + gf_list_add(application->application_descriptors,application_descriptor); + app_desc_data_shift += (2+ application_descriptor->descriptor_length); + break; + } + case APPLICATION_NAME_DESCRIPTOR: + { + u64 pre_processing_pos; + GF_M2TS_APPLICATION_NAME_DESCRIPTOR* name_descriptor; + GF_SAFEALLOC(name_descriptor, GF_M2TS_APPLICATION_NAME_DESCRIPTOR); + application->application_descriptors_id[application->index_app_desc_id] = temp_descriptor_tag; + application->index_app_desc_id++; + name_descriptor->descriptor_tag = temp_descriptor_tag; + name_descriptor->descriptor_length = gf_bs_read_int(bs,8); + pre_processing_pos = gf_bs_get_position(bs); + name_descriptor->ISO_639_language_code = gf_bs_read_int(bs,24); + name_descriptor->application_name_length = gf_bs_read_int(bs,8); + name_descriptor->application_name_char = (char*) gf_calloc(name_descriptor->application_name_length+1,sizeof(char)); + gf_bs_read_data(bs,name_descriptor->application_name_char,name_descriptor->application_name_length); + name_descriptor->application_name_char[name_descriptor->application_name_length] = 0 ; + if(pre_processing_pos+name_descriptor->descriptor_length != gf_bs_get_position(bs)){ + GF_LOG(GF_LOG_INFO, GF_LOG_CONTAINER, ("[Process AIT] Descriptor data processed length error. Difference between byte shifting %d and descriptor length %d \n",(gf_bs_get_position(bs) - pre_processing_pos),name_descriptor->descriptor_length)); + } + gf_list_add(application->application_descriptors,name_descriptor); + app_desc_data_shift += (2+ name_descriptor->descriptor_length); + break; + } + case TRANSPORT_PROTOCOL_DESCRIPTOR: + { + u64 pre_processing_pos; + GF_M2TS_TRANSPORT_PROTOCOL_DESCRIPTOR* protocol_descriptor; + GF_SAFEALLOC(protocol_descriptor, GF_M2TS_TRANSPORT_PROTOCOL_DESCRIPTOR); + application->application_descriptors_id[application->index_app_desc_id] = temp_descriptor_tag; + application->index_app_desc_id++; + protocol_descriptor->descriptor_tag = temp_descriptor_tag; + protocol_descriptor->descriptor_length = gf_bs_read_int(bs,8); + pre_processing_pos = gf_bs_get_position(bs); + protocol_descriptor->protocol_id = gf_bs_read_int(bs,16); + protocol_descriptor->transport_protocol_label = gf_bs_read_int(bs,8); + switch(protocol_descriptor->protocol_id){ + case CAROUSEL: + { + GF_M2TS_OBJECT_CAROUSEL_SELECTOR_BYTE* Carousel_selector_byte; + GF_SAFEALLOC(Carousel_selector_byte, GF_M2TS_OBJECT_CAROUSEL_SELECTOR_BYTE); + Carousel_selector_byte->remote_connection = gf_bs_read_int(bs,1); + gf_bs_read_int(bs,7); /* bit shifting */ + if(Carousel_selector_byte->remote_connection){ + Carousel_selector_byte->original_network_id = gf_bs_read_int(bs,16); + Carousel_selector_byte->transport_stream_id = gf_bs_read_int(bs,16); + Carousel_selector_byte->service_id = gf_bs_read_int(bs,16); + } + Carousel_selector_byte->component_tag = gf_bs_read_int(bs,8); + protocol_descriptor->selector_byte = Carousel_selector_byte; + break; + } + case TRANSPORT_HTTP: + { + u32 i; + GF_M2TS_TRANSPORT_HTTP_SELECTOR_BYTE* Transport_http_selector_byte; + GF_SAFEALLOC(Transport_http_selector_byte, GF_M2TS_TRANSPORT_HTTP_SELECTOR_BYTE); + Transport_http_selector_byte->URL_base_length = gf_bs_read_int(bs,8); + //printf("Transport_http_selector_byte->URL_base_length %d \n",Transport_http_selector_byte->URL_base_length); + Transport_http_selector_byte->URL_base_byte = (char*)gf_calloc(Transport_http_selector_byte->URL_base_length,sizeof(char)); + gf_bs_read_data(bs,Transport_http_selector_byte->URL_base_byte ,(u32)(Transport_http_selector_byte->URL_base_length)); + Transport_http_selector_byte->URL_base_byte[Transport_http_selector_byte->URL_base_length] = 0; + Transport_http_selector_byte->URL_extension_count = gf_bs_read_int(bs,8); + if(Transport_http_selector_byte->URL_extension_count){ + Transport_http_selector_byte->URL_extentions = (GF_M2TS_TRANSPORT_HTTP_URL_EXTENTION*) gf_calloc(Transport_http_selector_byte->URL_extension_count,sizeof(GF_M2TS_TRANSPORT_HTTP_URL_EXTENTION)); + for(i = 0; i < Transport_http_selector_byte->URL_extension_count;i++){ + Transport_http_selector_byte->URL_extentions[i].URL_extension_length = gf_bs_read_int(bs,8); + Transport_http_selector_byte->URL_extentions[i].URL_extension_byte = (char*)gf_calloc(Transport_http_selector_byte->URL_extentions[i].URL_extension_length,sizeof(char)); + gf_bs_read_data(bs,Transport_http_selector_byte->URL_extentions[i].URL_extension_byte,(u32)(Transport_http_selector_byte->URL_extentions[i].URL_extension_length)); + Transport_http_selector_byte->URL_extentions[i].URL_extension_byte[Transport_http_selector_byte->URL_extentions[i].URL_extension_length] = 0; + } + } + protocol_descriptor->selector_byte = Transport_http_selector_byte; + break; + } + default: + { + GF_LOG(GF_LOG_INFO, GF_LOG_CONTAINER, ("[Process AIT] Protocol ID %d unsupported, ignoring the selector byte \n",protocol_descriptor->protocol_id)); + } + } + if(pre_processing_pos+protocol_descriptor->descriptor_length != gf_bs_get_position(bs)){ + GF_LOG(GF_LOG_INFO, GF_LOG_CONTAINER, ("[Process AIT] Descriptor data processed length error. Difference between byte shifting %d and descriptor length %d \n",(gf_bs_get_position(bs) - pre_processing_pos),protocol_descriptor->descriptor_length)); + } + gf_list_add(application->application_descriptors,protocol_descriptor); + app_desc_data_shift += (2+ protocol_descriptor->descriptor_length); + break; + } + case SIMPLE_APPLICATION_LOCATION_DESCRIPTOR: + { + u64 pre_processing_pos; + GF_M2TS_SIMPLE_APPLICATION_LOCATION* Simple_application_location; + GF_SAFEALLOC(Simple_application_location, GF_M2TS_SIMPLE_APPLICATION_LOCATION); + application->application_descriptors_id[application->index_app_desc_id] = temp_descriptor_tag; + application->index_app_desc_id++; + Simple_application_location->descriptor_tag = temp_descriptor_tag; + Simple_application_location->descriptor_length = gf_bs_read_int(bs,8); + pre_processing_pos = gf_bs_get_position(bs); + Simple_application_location->initial_path_bytes = (char*)gf_calloc(Simple_application_location->descriptor_length,sizeof(char)); + gf_bs_read_data(bs,Simple_application_location->initial_path_bytes ,(u32)(Simple_application_location->descriptor_length)); + Simple_application_location->initial_path_bytes[Simple_application_location->descriptor_length] = 0; + if(pre_processing_pos+Simple_application_location->descriptor_length != gf_bs_get_position(bs)){ + GF_LOG(GF_LOG_INFO, GF_LOG_CONTAINER, ("[Process AIT] Descriptor data processed length error. Difference between byte shifting %d and descriptor length %d \n",(gf_bs_get_position(bs) - pre_processing_pos),Simple_application_location->descriptor_length)); + } + gf_list_add(application->application_descriptors,Simple_application_location); + app_desc_data_shift += (2+ Simple_application_location->descriptor_length); + break; + } + case APPLICATION_USAGE_DESCRIPTOR: + { + u64 pre_processing_pos; + GF_M2TS_APPLICATION_USAGE* Application_usage; + GF_SAFEALLOC(Application_usage, GF_M2TS_APPLICATION_USAGE); + application->application_descriptors_id[application->index_app_desc_id] = temp_descriptor_tag; + application->index_app_desc_id++; + Application_usage->descriptor_tag = temp_descriptor_tag; + Application_usage->descriptor_length = gf_bs_read_int(bs,8); + pre_processing_pos = gf_bs_get_position(bs); + Application_usage->usage_type = gf_bs_read_int(bs,8); + if(pre_processing_pos+Application_usage->descriptor_length != gf_bs_get_position(bs)){ + GF_LOG(GF_LOG_INFO, GF_LOG_CONTAINER, ("[Process AIT] Descriptor data processed length error. Difference between byte shifting %d and descriptor length %d \n",(gf_bs_get_position(bs) - pre_processing_pos),Application_usage->descriptor_length)); + } + gf_list_add(application->application_descriptors,Application_usage); + app_desc_data_shift += (2+ Application_usage->descriptor_length); + break; + } + default: + { + GF_LOG(GF_LOG_INFO, GF_LOG_CONTAINER, ("[Process AIT] Descriptor tag %d unknown, ignoring the descriptor \n",temp_descriptor_tag)); + } + + } + + } + ait_app_data_shift += application->application_descriptors_loop_length; + gf_list_add(ait->application,application); + } + + data_shift +=ait->application_loop_length; + ait->CRC_32 = gf_bs_read_int(bs,32); + data_shift += 4; + + if(data_shift != data_size){ + GF_LOG(GF_LOG_INFO, GF_LOG_CONTAINER, ("[Process AIT] AIT processed length error. Difference between byte shifting %d and data size %d \n",data_shift,data_size)); + } + + return GF_OK; +} + +void gf_ait_destroy(GF_M2TS_AIT* ait) +{ +// u32 common_descr_numb, app_numb; +// GF_M2TS_ES *es = (GF_M2TS_ES *)ait; +// +// /* delete de Elementary Stream part of the AIT structure */ +// gf_m2ts_es_del(es); +// +// common_descr_numb = 0; +// app_numb = 0; +// +// /* delete the common descriptors */ +// common_descr_numb = gf_list_count(ait->common_descriptors); +// // while(common_app_numb != 0){ +// // +// // }; +// +// /* delete the applications and their descriptors */ +// app_numb = gf_list_count(ait->application); +// while(app_numb != 0){ +// u32 app_desc_num; +// u32 app_descr_index; +// +// app_desc_num = 0; +// app_descr_index = 0; +// app_desc_num = gf_list_count(ait->application->application_descriptors); +// while(app_desc_num != 0){ +// u32 descr_tag; +// ait->application->index_app_desc_id--; +// descr_tag = ait->application->application_descriptors_id[ait->application->index_app_desc_id]; +// +// switch(descr_tag){ +// case APPLICATION_DESCRIPTOR: +// { +// GF_M2TS_APPLICATION_DESCRIPTOR* application_descriptor = (GF_M2TS_APPLICATION_DESCRIPTOR*)gf_list_get(ait->application->application_descriptors,ait->application->index_app_desc_id); +// gf_free(application_descriptor); +// break; +// } +// case APPLICATION_NAME_DESCRIPTOR: +// { +// u64 pre_processing_pos; +// GF_M2TS_APPLICATION_NAME_DESCRIPTOR* name_descriptor = (GF_M2TS_APPLICATION_NAME_DESCRIPTOR*)gf_list_get(ait->application->application_descriptors,ait->application->index_app_desc_id); +// gf_free(name_descriptor->application_name_char); +// gf_free(name_descriptor); +// break; +// } +// case TRANSPORT_PROTOCOL_DESCRIPTOR: +// { +// u64 pre_processing_pos; +// GF_M2TS_TRANSPORT_PROTOCOL_DESCRIPTOR* protocol_descriptor = (GF_M2TS_TRANSPORT_PROTOCOL_DESCRIPTOR*)gf_list_get(ait->application->application_descriptors,ait->application->index_app_desc_id); +// +// +// switch(protocol_descriptor->protocol_id){ +// case CAROUSEL: +// { +// GF_M2TS_OBJECT_CAROUSEL_SELECTOR_BYTE* Carousel_selector_byte = (GF_M2TS_OBJECT_CAROUSEL_SELECTOR_BYTE*)protocol_descriptor->selector_byte; +// gf_free(Carousel_selector_byte); +// break; +// } +// case TRANSPORT_HTTP: +// { +// u32 i; +// GF_M2TS_TRANSPORT_HTTP_SELECTOR_BYTE* Transport_http_selector_byte = (GF_M2TS_TRANSPORT_HTTP_SELECTOR_BYTE*)protocol_descriptor->selector_byte; +// gf_free(Transport_http_selector_byte->URL_base_byte); +// if(Transport_http_selector_byte->URL_extension_count){ +// for(i = 0; i < Transport_http_selector_byte->URL_extension_count;i++){ +// Transport_http_selector_byte->URL_extentions[i].URL_extension_length = gf_bs_read_int(bs,8); +// gf_free(Transport_http_selector_byte->URL_extentions[i].URL_extension_byte) +// } +// gf_free(Transport_http_selector_byte->URL_extentions); +// } +// gf_free(Transport_http_selector_byte); +// break; +// } +// default: +// { +// GF_LOG(GF_LOG_INFO, GF_LOG_CONTAINER, ("[Process AIT] Protocol ID %d unsupported, ignoring the selector byte \n",protocol_descriptor->protocol_id)); +// } +// } +// gf_free(protocol_descriptor); +// break; +// } +// case SIMPLE_APPLICATION_LOCATION_DESCRIPTOR: +// { +// GF_M2TS_SIMPLE_APPLICATION_LOCATION* Simple_application_location = (GF_M2TS_SIMPLE_APPLICATION_LOCATION*)gf_list_get(ait->application->application_descriptors,ait->application->index_app_desc_id); +// gf_free(Simple_application_location->initial_path_bytes); +// gf_free(Simple_application_location); +// break; +// } +// case APPLICATION_USAGE_DESCRIPTOR: +// { +// GF_M2TS_APPLICATION_USAGE* Application_usage = (GF_M2TS_SIMPLE_APPLICATION_LOCATION*)gf_list_get(ait->application->application_descriptors,ait->application->index_app_desc_id); +// gf_free(Application_usage); +// break; +// } +// default: +// { +// GF_LOG(GF_LOG_INFO, GF_LOG_CONTAINER, ("[Process AIT] Descriptor tag %d unknown, ignoring the descriptor \n",temp_descriptor_tag)); +// } +// +// } +// gf_list_rem(ait->application->application_descriptors,ait->application->index_app_desc_id); +// +// } +// gf_list_del(ait->application->application_descriptors); +// } +// gf_list_del(ait->application); +// +// }; + +} \ No newline at end of file diff --git a/src/media_tools/dvb.c b/src/media_tools/dvb.c new file mode 100644 index 0000000..0ce6368 --- /dev/null +++ b/src/media_tools/dvb.c @@ -0,0 +1,68 @@ +/* + * GPAC - Multimedia Framework C SDK + * + * Copyright (c)2006-201X ENST - All rights reserved + * + * This file is part of GPAC / MPEG2-TS sub-project + * + * GPAC is gf_free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the gf_free Software Foundation; either version 2, or (at your option) + * any later version. + * + * GPAC 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; see the file COPYING. If not, write to + * the gf_free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + * + */ + + +#include +#include + + +/* decodes an Modified Julian Date (MJD) into a Co-ordinated Universal Time (UTC) +See annex C of DVB-SI ETSI EN 300468 */ +void dvb_decode_mjd_date(u32 date, u16 *year, u8 *month, u8 *day) +{ + u32 yp, mp, k; + yp = (u32)((date - 15078.2)/365.25); + mp = (u32)((date - 14956.1 - (u32)(yp * 365.25))/30.6001); + *day = (u32)(date - 14956 - (u32)(yp * 365.25) - (u32)(mp * 30.6001)); + if (mp == 14 || mp == 15) k = 1; + else k = 0; + *year = yp + k + 1900; + *month = mp - 1 - k*12; + assert(*year>=1900 && *year<=2100 && *month && *month<12 && *day && *day<=31); +} + +#if 0 /*disabled since mktime doesn't exist on Windows Mobile*/ +/* decodes an Modified Julian Date (MJD) into a unix time (i.e. seconds since Jan 1st 1970) */ +void dvb_decode_mjd_to_unix_time(u8 *data, time_t *unix_time) { + struct tm time; + char tmp_time[10]; + u16 year = (u16)time.tm_year; + u8 month = (u8) time.tm_mon; + u8 day = (u8) time.tm_mday; + + memset(&time, 0, sizeof(struct tm)); + dvb_decode_mjd_date((data[0] << 8) | data[1], &year, &month, &day); + time.tm_year = year - 1900; + time.tm_mon = month-1; /* months are 0-based in time_t */ + time.tm_mday = day; + time.tm_isdst = -1; /* we don't want to apply Daylight Saving Time */ + + sprintf(tmp_time, "%02x", data[2]); + time.tm_hour = atoi(tmp_time); + sprintf(tmp_time, "%02x", data[3]); + time.tm_min = atoi(tmp_time); + sprintf(tmp_time, "%02x", data[4]); + time.tm_sec = atoi(tmp_time); + *unix_time = mktime(&time); +} +#endif diff --git a/src/media_tools/dvb_mpe.c b/src/media_tools/dvb_mpe.c index d77a13b..9562f81 100644 --- a/src/media_tools/dvb_mpe.c +++ b/src/media_tools/dvb_mpe.c @@ -1200,7 +1200,7 @@ void addPadding(MPE_FEC_FRAME *mff , u32 offset) for ( i = offset ; i capacity_total; i ++ ) mff -> p_adt [i] = 0xff ; } -#ifdef UNUSED_FUNC +#ifdef GPAC_UNUSED_FUNC static void print_bytes2(u8 * data, u32 length ) /*print_bytes2 */ { u32 i = 0; @@ -1220,7 +1220,7 @@ static void print_bytes2(u8 * data, u32 length ) /*print_bytes2 */ } } } -#endif /* UNUSED_FUNC */ +#endif /*GPAC_UNUSED_FUNC*/ /*add a ip datagram into mpe fec frame, and indicate error positions*/ void setIpDatagram(MPE_FEC_FRAME * mff, u32 offset, u8* dgram, u32 length ) diff --git a/src/media_tools/img.c b/src/media_tools/img.c index 2e2d3bf..0f5d39c 100644 --- a/src/media_tools/img.c +++ b/src/media_tools/img.c @@ -201,7 +201,7 @@ exit: #ifdef GPAC_HAS_JPEG -void _nonfatal_error2(j_common_ptr cinfo, int lev) {} +void gf_jpeg_nonfatal_error2(j_common_ptr cinfo, int lev) {} /*JPG context while decoding*/ typedef struct @@ -219,26 +219,26 @@ typedef struct struct jpeg_decompress_struct cinfo; } JPGCtx; -void _output_message (j_common_ptr cinfo){ +static void gf_jpeg_output_message (j_common_ptr cinfo){ char buffer[JMSG_LENGTH_MAX]; /* Create the message */ (*cinfo->err->format_message) (cinfo, buffer); - GF_LOG(GF_LOG_WARNING, GF_LOG_MEDIA, ("[JPEG OUTPUT MESSAGE]: %s\n", buffer)); + GF_LOG(GF_LOG_ERROR, GF_LOG_CODEC, ("[JPEG OUTPUT MESSAGE]: %s\n", buffer)); } -void _fatal_error(j_common_ptr cinfo) +static void gf_jpeg_fatal_error(j_common_ptr cinfo) { JPGErr *err = (JPGErr *) cinfo->err; - _output_message(cinfo); + gf_jpeg_output_message(cinfo); longjmp(err->jmpbuf, 1); } -void stub(j_decompress_ptr cinfo) {} +void gf_jpeg_stub(j_decompress_ptr cinfo) {} /*a JPEG is always carried in a complete, single MPEG4 AU so no refill*/ -boolean fill_input_buffer(j_decompress_ptr cinfo) { return 0; } +static boolean gf_jpeg_fill_input_buffer(j_decompress_ptr cinfo) { return 0; } -void skip_input_data(j_decompress_ptr cinfo, long num_bytes) +static void gf_jpeg_skip_input_data(j_decompress_ptr cinfo, long num_bytes) { JPGCtx *jpx = (JPGCtx *) cinfo->src; if (num_bytes > (long) jpx->src.bytes_in_buffer) { @@ -266,11 +266,11 @@ GF_Err gf_img_jpeg_dec(char *jpg, u32 jpg_size, u32 *width, u32 *height, u32 *pi JPGCtx jpx; jpx.cinfo.err = jpeg_std_error(&(jper.pub)); - jper.pub.error_exit = _fatal_error; - jper.pub.output_message = _output_message; - jper.pub.emit_message = _nonfatal_error2; + jper.pub.error_exit = gf_jpeg_fatal_error; + jper.pub.output_message = gf_jpeg_output_message; + jper.pub.emit_message = gf_jpeg_nonfatal_error2; if (setjmp(jper.jmpbuf)) { - GF_LOG(GF_LOG_WARNING, GF_LOG_MEDIA, ("[gf_img_jpeg_dec] : Failed to call cannot setjmp(jper.jmpbuf)\n")); + GF_LOG(GF_LOG_ERROR, GF_LOG_CODEC, ("[JPEGDecode] : Failed to decode\n")); jpeg_destroy_decompress(&jpx.cinfo); return GF_IO_ERR; } @@ -279,11 +279,11 @@ GF_Err gf_img_jpeg_dec(char *jpg, u32 jpg_size, u32 *width, u32 *height, u32 *pi jpeg_create_decompress(&jpx.cinfo); /*prepare IO*/ - jpx.src.init_source = stub; - jpx.src.fill_input_buffer = fill_input_buffer; - jpx.src.skip_input_data = skip_input_data; + jpx.src.init_source = gf_jpeg_stub; + jpx.src.fill_input_buffer = gf_jpeg_fill_input_buffer; + jpx.src.skip_input_data = gf_jpeg_skip_input_data; jpx.src.resync_to_restart = jpeg_resync_to_restart; - jpx.src.term_source = stub; + jpx.src.term_source = gf_jpeg_stub; jpx.skip = 0; jpx.src.next_input_byte = jpg; jpx.src.bytes_in_buffer = jpg_size; @@ -395,7 +395,7 @@ typedef struct u32 size; } GFpng; -static void user_read_data(png_structp png_ptr, png_bytep data, png_size_t length) +static void gf_png_user_read_data(png_structp png_ptr, png_bytep data, png_size_t length) { GFpng *ctx = (GFpng*)png_get_io_ptr(png_ptr); @@ -406,7 +406,7 @@ static void user_read_data(png_structp png_ptr, png_bytep data, png_size_t lengt ctx->pos += length; } } -static void user_error_fn(png_structp png_ptr,png_const_charp error_msg) +static void gf_png_user_error_fn(png_structp png_ptr,png_const_charp error_msg) { longjmp(png_jmpbuf(png_ptr), 1); } @@ -471,8 +471,8 @@ GF_Err gf_img_png_dec(char *png, u32 png_size, u32 *width, u32 *height, u32 *pix png_destroy_read_struct(&png_ptr, (png_infopp)NULL, (png_infopp)NULL); return GF_IO_ERR; } - png_set_read_fn(png_ptr, &udta, (png_rw_ptr) user_read_data); - png_set_error_fn(png_ptr, &udta, (png_error_ptr) user_error_fn, NULL); + png_set_read_fn(png_ptr, &udta, (png_rw_ptr) gf_png_user_read_data); + png_set_error_fn(png_ptr, &udta, (png_error_ptr) gf_png_user_error_fn, NULL); png_read_info(png_ptr, info_ptr); @@ -536,13 +536,13 @@ GF_Err gf_img_png_dec(char *png, u32 png_size, u32 *width, u32 *height, u32 *pix } -void my_png_write(png_structp png, png_bytep data, png_size_t size) +void gf_png_write(png_structp png, png_bytep data, png_size_t size) { GFpng *p = (GFpng *)png_get_io_ptr(png); memcpy(p->buffer+p->pos, data, sizeof(char)*size); p->pos += size; } -void my_png_flush(png_structp png) +void gf_png_flush(png_structp png) { } @@ -608,7 +608,7 @@ GF_Err gf_img_png_enc(char *data, u32 width, u32 height, s32 stride, u32 pixel_f udta.buffer = dst; udta.pos = 0; - png_set_write_fn(png_ptr, &udta, my_png_write, my_png_flush); + png_set_write_fn(png_ptr, &udta, gf_png_write, gf_png_flush); png_set_IHDR(png_ptr, info_ptr, width, height, 8, type, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE); diff --git a/src/media_tools/isom_hinter.c b/src/media_tools/isom_hinter.c index 81ffe11..ccdc84d 100644 --- a/src/media_tools/isom_hinter.c +++ b/src/media_tools/isom_hinter.c @@ -760,7 +760,7 @@ GF_EXPORT GF_Err gf_hinter_track_finalize(GF_RTPHinter *tkHint, Bool AddSystemInfo) { u32 Width, Height; - GF_DecoderConfig *dcd; + GF_ESD *esd; char sdpLine[20000]; char mediaName[30], payloadName[30]; @@ -844,14 +844,14 @@ GF_Err gf_hinter_track_finalize(GF_RTPHinter *tkHint, Bool AddSystemInfo) } /*MPEG-4 decoder config*/ else if (tkHint->rtp_p->rtp_payt==GF_RTP_PAYT_MPEG4) { - dcd = gf_isom_get_decoder_config(tkHint->file, tkHint->TrackNum, 1); + esd = gf_isom_get_esd(tkHint->file, tkHint->TrackNum, 1); - if (dcd && dcd->decoderSpecificInfo && dcd->decoderSpecificInfo->data) { - gf_rtp_builder_format_sdp(tkHint->rtp_p, payloadName, sdpLine, dcd->decoderSpecificInfo->data, dcd->decoderSpecificInfo->dataLength); + if (esd && esd->decoderConfig && esd->decoderConfig->decoderSpecificInfo && esd->decoderConfig->decoderSpecificInfo->data) { + gf_rtp_builder_format_sdp(tkHint->rtp_p, payloadName, sdpLine, esd->decoderConfig->decoderSpecificInfo->data, esd->decoderConfig->decoderSpecificInfo->dataLength); } else { gf_rtp_builder_format_sdp(tkHint->rtp_p, payloadName, sdpLine, NULL, 0); } - if (dcd) gf_odf_desc_del((GF_Descriptor *)dcd); + if (esd) gf_odf_desc_del((GF_Descriptor *)esd); if (tkHint->rtp_p->slMap.IV_length) { const char *kms; @@ -881,12 +881,12 @@ GF_Err gf_hinter_track_finalize(GF_RTPHinter *tkHint, Bool AddSystemInfo) gf_bs_write_int(bs, 0, 3); /* numLayer */ /* audio-specific config */ - dcd = gf_isom_get_decoder_config(tkHint->file, tkHint->TrackNum, 1); - if (dcd) { + esd = gf_isom_get_esd(tkHint->file, tkHint->TrackNum, 1); + if (esd && esd->decoderConfig && esd->decoderConfig->decoderSpecificInfo) { /*PacketVideo patch: don't signal SBR and PS stuff, not allowed in LATM with audioMuxVersion=0*/ - gf_bs_write_data(bs, dcd->decoderSpecificInfo->data, MIN(dcd->decoderSpecificInfo->dataLength, 2) ); - gf_odf_desc_del((GF_Descriptor *)dcd); + gf_bs_write_data(bs, esd->decoderConfig->decoderSpecificInfo->data, MIN(esd->decoderConfig->decoderSpecificInfo->dataLength, 2) ); } + if (esd) gf_odf_desc_del((GF_Descriptor *)esd); /* other data */ gf_bs_write_int(bs, 0, 3); /* frameLengthType */ @@ -937,6 +937,22 @@ GF_Err gf_hinter_track_finalize(GF_RTPHinter *tkHint, Bool AddSystemInfo) gf_isom_sdp_add_track_line(tkHint->file, tkHint->HintTrack, sdpLine); } + esd = gf_isom_get_esd(tkHint->file, tkHint->TrackNum, 1); + if (esd && esd->decoderConfig && (esd->decoderConfig->rvc_config || esd->decoderConfig->predefined_rvc_config)) { + if (esd->decoderConfig->predefined_rvc_config) { + sprintf(sdpLine, "a=rvc-config-predef:%d", esd->decoderConfig->predefined_rvc_config); + } else { + /*temporary ...*/ + if (esd->decoderConfig->objectTypeIndication==GPAC_OTI_VIDEO_AVC) { + sprintf(sdpLine, "a=rvc-config:%s", "http://download.tsi.telecom-paristech.fr/gpac/RVC/rvc_config_avc.xml"); + } else { + sprintf(sdpLine, "a=rvc-config:%s", "http://download.tsi.telecom-paristech.fr/gpac/RVC/rvc_config_sp.xml"); + } + } + gf_isom_sdp_add_track_line(tkHint->file, tkHint->HintTrack, sdpLine); + } + if (esd) gf_odf_desc_del((GF_Descriptor *)esd); + gf_isom_set_track_enabled(tkHint->file, tkHint->HintTrack, 1); return GF_OK; } diff --git a/src/media_tools/isom_tools.c b/src/media_tools/isom_tools.c index 48b5f41..0b22a36 100644 --- a/src/media_tools/isom_tools.c +++ b/src/media_tools/isom_tools.c @@ -26,6 +26,7 @@ #include #include +#include #ifndef GPAC_DISABLE_ISOM @@ -609,30 +610,32 @@ GF_Err gf_media_make_psp(GF_ISOFile *mp4) typedef struct { + Bool done; u32 TrackID; u32 SampleNum, SampleCount; u32 FragmentLength; u32 OriginalTrack; - u32 TimeScale, MediaType, DefaultDuration; - u64 last_sample_cts; + u32 TimeScale, MediaType, DefaultDuration, InitialTSOffset; + u64 last_sample_cts, next_sample_dts; } TrackFragmenter; GF_EXPORT -GF_Err gf_media_fragment_file(GF_ISOFile *input, char *output_file, Double max_duration_sec, u32 dash_mode, Double dash_duration_sec, char *seg_rad_name, char *seg_ext, u32 fragments_per_sidx, Bool daisy_chain_sidx, Bool use_url_template) +GF_Err gf_media_fragment_file(GF_ISOFile *input, char *output_file, Double max_duration_sec, u32 dash_mode, Double dash_duration_sec, char *seg_rad_name, char *seg_ext, s32 fragments_per_sidx, Bool daisy_chain_sidx, Bool use_url_template, const char *dash_ctx_file) { u8 NbBits; - u32 i, TrackNum, descIndex, j, count, nb_sync, ref_track_id; + u32 i, TrackNum, descIndex, j, count, nb_sync, ref_track_id, nb_tracks_done; u32 defaultDuration, defaultSize, defaultDescriptionIndex, defaultRandomAccess, nb_samp, nb_done; u8 defaultPadding; u16 defaultDegradationPriority; GF_Err e; - u32 cur_seg; + char sOpt[100], sKey[100]; + u32 cur_seg, fragment_index; GF_ISOFile *output; GF_ISOSample *sample, *next; GF_List *fragmenters; u32 MaxFragmentDuration, MaxSegmentDuration, SegmentDuration, maxFragDurationOverSegment; - Double average_duration, file_duration; + Double average_duration, file_duration, period_duration, max_segment_duration; u32 nb_segments, width, height, sample_rate, nb_channels; char langCode[5]; Bool switch_segment = 0; @@ -642,13 +645,19 @@ GF_Err gf_media_fragment_file(GF_ISOFile *input, char *output_file, Double max_d Bool next_sample_rap = 0; Bool flush_all_samples = 0; u64 last_ref_cts = 0; - u64 start_range, end_range, file_size, init_seg_size; + u64 start_range, end_range, file_size, init_seg_size, ref_track_cur_dur; u32 tfref_timescale = 0; u32 bandwidth = 0; TrackFragmenter *tf, *tfref; FILE *mpd = NULL; FILE *mpd_segs = NULL; char *SegName = NULL; + const char *opt; + GF_Config *dash_ctx = NULL; + Bool store_dash_params = 0; + Bool dash_moov_setup = 0; + Bool segments_start_with_rap = 1; + Bool first_sample_in_segment = 0; SegmentDuration = 0; nb_samp = 0; fragmenters = NULL; @@ -656,17 +665,42 @@ GF_Err gf_media_fragment_file(GF_ISOFile *input, char *output_file, Double max_d //create output file if (dash_mode) { - u32 len = strlen(output_file); + u32 len; + + if (dash_ctx_file) { + dash_ctx = gf_cfg_new(NULL, dash_ctx_file); + if (!dash_ctx) { + FILE *t = fopen(dash_ctx_file, "wt"); + if (t) fclose(t); + dash_ctx = gf_cfg_new(NULL, dash_ctx_file); + + if (dash_ctx) store_dash_params=1; + } + } + len = strlen(output_file); len += 100; SegName = gf_malloc(sizeof(char)*len); if (!SegName) return GF_OUT_OF_MEM; - strcpy(SegName, output_file); - strcat(SegName, ".mp4"); - output = gf_isom_open(SegName, GF_ISOM_OPEN_WRITE, NULL); + + opt = dash_ctx ? gf_cfg_get_key(dash_ctx, "DASH", "InitializationSegment") : NULL; + if (opt) { + output = gf_isom_open(opt, GF_ISOM_OPEN_CAT_FRAGMENTS, NULL); + dash_moov_setup = 1; + } else { + strcpy(SegName, output_file); + strcat(SegName, ".mp4"); + output = gf_isom_open(SegName, GF_ISOM_OPEN_WRITE, NULL); + } if (!output) { e = gf_isom_last_error(NULL); goto err_exit; } + + if (store_dash_params) { + gf_cfg_set_key(dash_ctx, "DASH", "InitializationSegment", SegName); + } + + strcpy(SegName, output_file); strcat(SegName, ".mpd"); mpd = gf_f64_open(SegName, "wt"); @@ -680,8 +714,10 @@ GF_Err gf_media_fragment_file(GF_ISOFile *input, char *output_file, Double max_d nb_samp = 0; fragmenters = gf_list_new(); - e = gf_isom_clone_movie(input, output, 0, 0); - if (e) goto err_exit; + if (! dash_moov_setup) { + e = gf_isom_clone_movie(input, output, 0, 0); + if (e) goto err_exit; + } MaxFragmentDuration = (u32) (max_duration_sec * 1000); MaxSegmentDuration = (u32) (dash_duration_sec * 1000); @@ -693,78 +729,114 @@ GF_Err gf_media_fragment_file(GF_ISOFile *input, char *output_file, Double max_d //duplicates all tracks for (i=0; iTrackID = gf_isom_get_track_id(output, TrackNum); - tf->SampleCount = gf_isom_get_sample_count(input, i+1); - tf->OriginalTrack = i+1; - tf->TimeScale = gf_isom_get_media_timescale(input, i+1); - tf->MediaType = gf_isom_get_media_type(input, i+1); - tf->DefaultDuration = defaultDuration; + } else { + gf_isom_get_fragment_defaults(output, TrackNum, + &defaultDuration, &defaultSize, &defaultDescriptionIndex, &defaultRandomAccess, &defaultPadding, &defaultDegradationPriority); + } - if (gf_isom_get_sync_point_count(input, i+1)>nb_sync) { - tfref = tf; - tfref_timescale = tf->TimeScale; - nb_sync = gf_isom_get_sync_point_count(input, i+1); - } + GF_SAFEALLOC(tf, TrackFragmenter); + tf->TrackID = gf_isom_get_track_id(output, TrackNum); + tf->SampleCount = gf_isom_get_sample_count(input, i+1); + tf->OriginalTrack = i+1; + tf->TimeScale = gf_isom_get_media_timescale(input, i+1); + tf->MediaType = gf_isom_get_media_type(input, i+1); + tf->DefaultDuration = defaultDuration; + + if (gf_isom_get_sync_point_count(input, i+1)>nb_sync) { + tfref = tf; + nb_sync = gf_isom_get_sync_point_count(input, i+1); + } - switch (mtype) { - case GF_ISOM_MEDIA_TEXT: - gf_isom_get_media_language(input, i+1, langCode); - case GF_ISOM_MEDIA_VISUAL: - case GF_ISOM_MEDIA_SCENE: - case GF_ISOM_MEDIA_DIMS: - gf_isom_get_track_layout_info(input, i+1, &_w, &_h, NULL, NULL, NULL); - if (_w>width) width = _w; - if (_h>height) height = _h; - break; - case GF_ISOM_MEDIA_AUDIO: - gf_isom_get_audio_info(input, i+1, 1, &_sr, &_nb_ch, NULL); - if (_sr>sample_rate) sample_rate=_sr; - if (_nb_ch>nb_channels) nb_channels = _nb_ch; - gf_isom_get_media_language(input, i+1, langCode); - break; + /*figure out if we have an initial TS*/ + if (!dash_moov_setup) { + if (gf_isom_get_edit_segment_count(input, i+1)) { + u64 EditTime, SegmentDuration, MediaTime; + u8 EditMode; + gf_isom_get_edit_segment(input, i+1, 1, &EditTime, &SegmentDuration, &MediaTime, &EditMode); + if (EditMode==GF_ISOM_EDIT_EMPTY) { + tf->InitialTSOffset = (u32) (SegmentDuration * tf->TimeScale / gf_isom_get_timescale(input)); + } + /*and remove edit segments*/ + gf_isom_remove_edit_segments(output, TrackNum); } + } + /*restore track decode times*/ + else { + char *opt, sKey[100]; + sprintf(sKey, "TrackID_%d", tf->TrackID); + opt = (char *)gf_cfg_get_key(dash_ctx, sKey, "NextDecodingTime"); + if (opt) tf->InitialTSOffset = atoi(opt); + } - if (file_duration < ((Double) gf_isom_get_media_duration(input, i+1)) / tf->TimeScale ) { - file_duration = ((Double) gf_isom_get_media_duration(input, i+1)) / tf->TimeScale; + switch (mtype) { + case GF_ISOM_MEDIA_TEXT: + gf_isom_get_media_language(input, i+1, langCode); + case GF_ISOM_MEDIA_VISUAL: + if (!tfref && (count >=10)) { + tfref = tf; } - gf_list_add(fragmenters, tf); - nb_samp += count; + case GF_ISOM_MEDIA_SCENE: + case GF_ISOM_MEDIA_DIMS: + gf_isom_get_track_layout_info(input, i+1, &_w, &_h, NULL, NULL, NULL); + if (_w>width) width = _w; + if (_h>height) height = _h; + break; + case GF_ISOM_MEDIA_AUDIO: + gf_isom_get_audio_info(input, i+1, 1, &_sr, &_nb_ch, NULL); + if (_sr>sample_rate) sample_rate=_sr; + if (_nb_ch>nb_channels) nb_channels = _nb_ch; + gf_isom_get_media_language(input, i+1, langCode); + break; } - if (gf_isom_is_track_in_root_od(input, i+1)) gf_isom_add_track_to_root_od(output, TrackNum); + if (file_duration < ((Double) gf_isom_get_media_duration(input, i+1)) / tf->TimeScale ) { + file_duration = ((Double) gf_isom_get_media_duration(input, i+1)) / tf->TimeScale; + } + gf_list_add(fragmenters, tf); + nb_samp += count; } if (!tfref) tfref = gf_list_get(fragmenters, 0); + tfref_timescale = tfref->TimeScale; ref_track_id = tfref->TrackID; //flush movie @@ -776,29 +848,71 @@ GF_Err gf_media_fragment_file(GF_ISOFile *input, char *output_file, Double max_d file_size = end_range; init_seg_size = end_range; + if (dash_ctx) { + if (store_dash_params) { + char szVal[1024]; + sprintf(szVal, LLU, init_seg_size); + gf_cfg_set_key(dash_ctx, "DASH", "InitializationSegmentSize", szVal); + } else { + const char *opt = gf_cfg_get_key(dash_ctx, "DASH", "InitializationSegmentSize"); + if (opt) init_seg_size = atoi(opt); + } + } + average_duration = 0; nb_segments = 0; + nb_tracks_done = 0; + ref_track_cur_dur = tfref ? tfref->InitialTSOffset : 0; nb_done = 0; - cur_seg=1; + maxFragDurationOverSegment=0; if (dash_mode) switch_segment=1; if (!seg_rad_name) use_url_template = 0; + cur_seg=1; + fragment_index=1; + period_duration = 0; + /*setup previous URL list*/ + if (dash_ctx) { + const char *opt; + count = gf_cfg_get_key_count(dash_ctx, "URLs"); + for (i=0; i\n", SegName); + if (dash_ctx) { + char szKey[100], szVal[4046]; + sprintf(szKey, "UrlInfo%d", gf_cfg_get_key_count(dash_ctx, "URLs") + 1 ); + sprintf(szVal, "", SegName); + gf_cfg_set_key(dash_ctx, "URLs", szKey, szVal); + } } } else { e = gf_isom_start_segment(output, NULL); @@ -812,6 +926,12 @@ GF_Err gf_media_fragment_file(GF_ISOFile *input, char *output_file, Double max_d if (e) goto err_exit; sample = NULL; + for (i=0; idone) continue; + gf_isom_set_traf_base_media_decode_time(output, tf->TrackID, tf->InitialTSOffset + tf->next_sample_dts); + } + //process track by track for (i=0; idone) continue; //ok write samples while (1) { @@ -846,6 +967,12 @@ GF_Err gf_media_fragment_file(GF_ISOFile *input, char *output_file, Double max_d defaultDuration = tf->DefaultDuration; } + if (segments_start_with_rap && first_sample_in_segment && (tf==tfref)) { + first_sample_in_segment = 0; + if (!sample->IsRAP) segments_start_with_rap = 0; + } + + e = gf_isom_fragment_add_sample(output, tf->TrackID, sample, descIndex, defaultDuration, NbBits, 0); if (e) @@ -860,6 +987,7 @@ GF_Err gf_media_fragment_file(GF_ISOFile *input, char *output_file, Double max_d nb_done++; tf->last_sample_cts = sample->DTS + sample->CTS_Offset; + tf->next_sample_dts = sample->DTS + defaultDuration; gf_isom_sample_del(&sample); sample = next; @@ -919,10 +1047,8 @@ GF_Err gf_media_fragment_file(GF_ISOFile *input, char *output_file, Double max_d } if (tf->SampleNum==tf->SampleCount) { - gf_free(tf); - gf_list_rem(fragmenters, i); - i--; - count --; + tf->done = 1; + nb_tracks_done++; if (tf == tfref) { tfref = NULL; flush_all_samples = 1; @@ -938,6 +1064,11 @@ GF_Err gf_media_fragment_file(GF_ISOFile *input, char *output_file, Double max_d if ((SegmentDuration >= MaxSegmentDuration) && (!split_seg_at_rap || next_sample_rap)) { average_duration += SegmentDuration; nb_segments++; + if (max_segment_duration * 1000 <= SegmentDuration) { + max_segment_duration = SegmentDuration; + max_segment_duration /= 1000; + } + #if 0 if (split_seg_at_rap) has_rap = 0; @@ -955,12 +1086,19 @@ GF_Err gf_media_fragment_file(GF_ISOFile *input, char *output_file, Double max_d /*restore fragment duration*/ MaxFragmentDuration = (u32) (max_duration_sec * 1000); - gf_isom_close_segment(output, fragments_per_sidx, ref_track_id, NULL, 0, daisy_chain_sidx); - + gf_isom_close_segment(output, fragments_per_sidx, ref_track_id, ref_track_cur_dur, daisy_chain_sidx, flush_all_samples ? 1 : 0); + if (tfref) ref_track_cur_dur = tfref->InitialTSOffset + tfref->next_sample_dts; if (!seg_rad_name) { file_size = end_range = gf_isom_get_file_size(output); fprintf(mpd_segs, " \n", start_range, end_range); + if (dash_ctx) { + char szKey[100], szVal[4046]; + sprintf(szKey, "UrlInfo%d", gf_cfg_get_key_count(dash_ctx, "URLs") + 1 ); + sprintf(szVal, "", start_range, end_range); + gf_cfg_set_key(dash_ctx, "URLs", szKey, szVal); + + } } else { file_size += gf_isom_get_file_size(output); } @@ -971,6 +1109,8 @@ GF_Err gf_media_fragment_file(GF_ISOFile *input, char *output_file, Double max_d split_at_rap = 1; } } + + if (nb_tracks_done==count) break; } @@ -982,22 +1122,39 @@ GF_Err gf_media_fragment_file(GF_ISOFile *input, char *output_file, Double max_d /*flush last segment*/ if (!switch_segment) { - gf_isom_close_segment(output, fragments_per_sidx, ref_track_id, NULL, 0, daisy_chain_sidx); + if (max_segment_duration * 1000 <= SegmentDuration) { + max_segment_duration = SegmentDuration; + max_segment_duration /= 1000; + } + if (!split_at_rap) { + assert(max_segment_duration <= dash_duration_sec); + } + + gf_isom_close_segment(output, fragments_per_sidx, ref_track_id, ref_track_cur_dur, daisy_chain_sidx, 1); nb_segments++; if (!seg_rad_name) { file_size = end_range = gf_isom_get_file_size(output); fprintf(mpd_segs, " \n", start_range, end_range); - } else { - if (use_url_template) { - sprintf(SegName, "%s_seg$Index$.%s", seg_rad_name, seg_ext); - fprintf(mpd_segs, " \n", SegName, nb_segments); + + if (dash_ctx) { + char szKey[100], szVal[4046]; + sprintf(szKey, "UrlInfo%d", gf_cfg_get_key_count(dash_ctx, "URLs") + 1 ); + sprintf(szVal, "", start_range, end_range); + gf_cfg_set_key(dash_ctx, "URLs", szKey, szVal); } + } else { file_size += gf_isom_get_file_size(output); } } - h = (u32) (file_duration/3600); - m = (u32) (file_duration-h*60)/60; - s = file_duration - h*3600 - m*60; + + if (use_url_template) { + sprintf(SegName, "%s_seg$Index$.%s", seg_rad_name, seg_ext); + fprintf(mpd_segs, " \n", SegName, cur_seg-1); + } + period_duration += file_duration; + h = (u32) (period_duration/3600); + m = (u32) (period_duration-h*60)/60; + s = period_duration - h*3600 - m*60; bandwidth = (u32) (file_size * 8 / file_duration); fprintf(mpd, "\n"); @@ -1009,14 +1166,34 @@ GF_Err gf_media_fragment_file(GF_ISOFile *input, char *output_file, Double max_d if (width && height) fprintf(mpd, " width=\"%d\" height=\"%d\"", width, height); if (sample_rate && nb_channels) fprintf(mpd, " sampleRate=\"%d\" numChannels=\"%d\"", sample_rate, nb_channels); if (langCode[0]) fprintf(mpd, " lang=\"%s\"", langCode); - fprintf(mpd, " startWithRAP=\"%s\"", split_seg_at_rap ? "true" : "false"); + fprintf(mpd, " startWithRAP=\"%s\"", (segments_start_with_rap || split_seg_at_rap) ? "true" : "false"); fprintf(mpd, " bandwidth=\"%d\"", bandwidth); + /*what should we put here ?? */ + fprintf(mpd, " minBufferTime=\"%d\"", MaxFragmentDuration); fprintf(mpd, ">\n"); - h = (u32) (dash_duration_sec/3600); - m = (u32) (dash_duration_sec-h*60)/60; - s = dash_duration_sec - h*3600 - m*60; + if (dash_ctx) { + Double seg_dur; + opt = gf_cfg_get_key(dash_ctx, "DASH", "MaxSegmentDuration"); + if (opt) { + seg_dur = atof(opt); + if (seg_dur < max_segment_duration) { + sprintf(sOpt, "%f", max_segment_duration); + gf_cfg_set_key(dash_ctx, "DASH", "MaxSegmentDuration", sOpt); + seg_dur = max_segment_duration; + } else { + max_segment_duration = seg_dur; + } + } else { + sprintf(sOpt, "%f", max_segment_duration); + gf_cfg_set_key(dash_ctx, "DASH", "MaxSegmentDuration", sOpt); + } + } + + h = (u32) (max_segment_duration / 3600); + m = (u32) (max_segment_duration - h*60)/60; + s = max_segment_duration - h*3600 - m*60; if (m) { fprintf(mpd, " "); } + /*store context*/ + if (dash_ctx) { + for (i=0; iTrackID); + sprintf(sOpt, LLU, tf->InitialTSOffset + tf->next_sample_dts); + gf_cfg_set_key(dash_ctx, sKey, "NextDecodingTime", sOpt); + } + sprintf(sOpt, "%d", cur_seg); + gf_cfg_set_key(dash_ctx, "DASH", "NextSegmentIndex", sOpt); + + fragment_index = gf_isom_get_next_moof_number(output); + sprintf(sOpt, "%d", fragment_index); + gf_cfg_set_key(dash_ctx, "DASH", "NextFragmentIndex", sOpt); + sprintf(sOpt, "%f", period_duration); + gf_cfg_set_key(dash_ctx, "DASH", "PeriodDuration", sOpt); + } + err_exit: if (fragmenters){ while (gf_list_count(fragmenters)) { @@ -1059,6 +1255,7 @@ err_exit: if (SegName) gf_free(SegName); if (mpd) fclose(mpd); if (mpd_segs) fclose(mpd_segs); + if (dash_ctx) gf_cfg_del(dash_ctx); return e; } diff --git a/src/media_tools/m2ts_mux.c b/src/media_tools/m2ts_mux.c index 3ebefdb..f60671e 100644 --- a/src/media_tools/m2ts_mux.c +++ b/src/media_tools/m2ts_mux.c @@ -28,6 +28,17 @@ #ifndef GPAC_DISABLE_MPEG2TS_MUX +/*num ms between PCR*/ +#define PCR_UPDATE_MS 200 +/*90khz internal delay between two updates for instant bitrate compute per stream*/ +#define BITRATE_UPDATE_WINDOW 90000 +/* length of adaptation_field_length; */ +#define ADAPTATION_LENGTH_LENGTH 1 +/* discontinuty flag, random access flag ... */ +#define ADAPTATION_FLAGS_LENGTH 1 +/* length of encoded pcr */ +#define PCR_LENGTH 6 + static GFINLINE Bool gf_m2ts_time_less(GF_M2TS_Time *a, GF_M2TS_Time *b) { if (a->sec>b->sec) return 0; @@ -117,6 +128,8 @@ void gf_m2ts_mux_table_update(GF_M2TS_Mux_Stream *stream, u8 table_id, u16 table case GF_M2TS_TABLE_ID_PAT: case GF_M2TS_TABLE_ID_SDT_ACTUAL: case GF_M2TS_TABLE_ID_SDT_OTHER: + case GF_M2TS_TABLE_ID_TDT: + case GF_M2TS_TABLE_ID_TOT: case GF_M2TS_TABLE_ID_BAT: maxSectionLength = 1024; break; @@ -222,15 +235,23 @@ void gf_m2ts_mux_table_update_bitrate(GF_M2TS_Mux *mux, GF_M2TS_Mux_Stream *stre while (table) { GF_M2TS_Mux_Section *section = table->section; while (section) { - stream->bit_rate += section->length; + u32 nb_bytes = 0; + while (nb_byteslength) nb_bytes += 188; + stream->bit_rate += nb_bytes; section = section->next; } table = table->next; } stream->bit_rate *= 8; - if (!stream->refresh_rate_ms) stream->refresh_rate_ms = 500; stream->bit_rate *= 1000; - stream->bit_rate /= stream->refresh_rate_ms; + if (stream->refresh_rate_ms) { + stream->bit_rate /= stream->refresh_rate_ms; + } else if (stream->table_needs_send) { + /*no clue ... */ + stream->bit_rate /= 100; + } else { + stream->bit_rate = 0; + } } void gf_m2ts_mux_table_update_mpeg4(GF_M2TS_Mux_Stream *stream, u8 table_id, u16 table_id_extension, @@ -285,14 +306,14 @@ void gf_m2ts_mux_table_update_mpeg4(GF_M2TS_Mux_Stream *stream, u8 table_id, u16 section_number = 0; nb_sections = 1; hdr = stream->sl_header; - sl_size = gf_sl_get_header_size(&stream->sl_config, &hdr); + sl_size = gf_sl_get_header_size(stream->ifce->sl_config, &hdr); /*SL-packetized data doesn't fit in one section, we must repacketize*/ if (sl_size + table_payload_length > maxSectionLength - overhead_size) { nb_sections = 0; offset = 0; hdr.accessUnitEndFlag = 0; while (offsetsl_config, &hdr); + sl_size = gf_sl_get_header_size(stream->ifce->sl_config, &hdr); /*remove start flag*/ hdr.accessUnitStartFlag = 0; /*fill each section but beware of last packet*/ @@ -310,7 +331,7 @@ void gf_m2ts_mux_table_update_mpeg4(GF_M2TS_Mux_Stream *stream, u8 table_id, u16 GF_SAFEALLOC(section, GF_M2TS_Mux_Section); hdr.accessUnitEndFlag = (section_number+1==nb_sections) ? stream->sl_header.accessUnitEndFlag : 0; - gf_sl_packetize(&stream->sl_config, &hdr, NULL, 0, &slhdr, &slhdr_size); + gf_sl_packetize(stream->ifce->sl_config, &hdr, NULL, 0, &slhdr, &slhdr_size); hdr.accessUnitStartFlag = 0; remain = table_payload_length - offset; @@ -372,25 +393,13 @@ void gf_m2ts_mux_table_update_mpeg4(GF_M2TS_Mux_Stream *stream, u8 table_id, u16 stream->current_table = stream->tables; stream->current_section = stream->current_table->section; stream->current_section_offset = 0; + stream->table_needs_send = 1; GF_LOG(GF_LOG_DEBUG, GF_LOG_CONTAINER, ("[MPEG-2 TS Muxer] PID %d: Generating %d sections for MPEG-4 SL packet - version number %d - extension ID %d\n", stream->pid, nb_sections, table->version_number, table_id_extension)); - if (stream->ifce->repeat_rate) { - stream->refresh_rate_ms = stream->ifce->repeat_rate; - gf_m2ts_mux_table_update_bitrate(stream->program->mux, stream); - } else { - gf_m2ts_mux_table_update_bitrate(stream->program->mux, stream); - stream->refresh_rate_ms=0; - } + /*MPEG-4 tables are input streams for the mux, the bitrate is updated when fetching AUs*/ } -/* length of adaptation_field_length; */ -#define ADAPTATION_LENGTH_LENGTH 1 -/* discontinuty flag, random access flag ... */ -#define ADAPTATION_FLAGS_LENGTH 1 -/* length of encoded pcr */ -#define PCR_LENGTH 6 - static u32 gf_m2ts_add_adaptation(GF_BitStream *bs, u16 pid, Bool has_pcr, u64 pcr_time, Bool is_rap, @@ -426,11 +435,8 @@ static u32 gf_m2ts_add_adaptation(GF_BitStream *bs, u16 pid, } - while (padding_length) { - gf_bs_write_u8(bs, 0xff); // stuffing byte - padding_length--; - } - + gf_bs_write_byte(bs, 0xFF, padding_length); // stuffing byte + return adaptation_length + ADAPTATION_LENGTH_LENGTH; } @@ -442,6 +448,7 @@ void gf_m2ts_mux_table_get_next_packet(GF_M2TS_Mux_Stream *stream, u8 *packet) u32 payload_length, padding_length; u8 adaptation_field_control; + stream->table_needs_send = 0; table = stream->current_table; assert(table); @@ -517,7 +524,8 @@ void gf_m2ts_mux_table_get_next_packet(GF_M2TS_Mux_Stream *stream, u8 *packet) if (stream->current_table) stream->current_section = stream->current_table->section; } } - + /*updates number of bytes sent for bitrate compute (MPEG4 sections)*/ + stream->bytes_since_last_time += 188; } @@ -542,9 +550,14 @@ Bool gf_m2ts_stream_process_pat(GF_M2TS_Mux *muxer, GF_M2TS_Mux_Stream *stream) gf_bs_del(bs); gf_m2ts_mux_table_update(stream, GF_M2TS_TABLE_ID_PAT, muxer->ts_id, payload, size, 1, 0, 0); stream->table_needs_update = 0; + stream->table_needs_send = 1; gf_free(payload); } - return 1; + if (stream->table_needs_send) + return 1; + if (stream->refresh_rate_ms) + return 1; + return 0; } Bool gf_m2ts_stream_process_pmt(GF_M2TS_Mux *muxer, GF_M2TS_Mux_Stream *stream) @@ -552,16 +565,27 @@ Bool gf_m2ts_stream_process_pmt(GF_M2TS_Mux *muxer, GF_M2TS_Mux_Stream *stream) if (stream->table_needs_update) { /* generate table payload */ GF_M2TS_Mux_Stream *es; u8 *payload; + u32 i; u32 length, nb_streams=0; + u32 info_length = 0; GF_BitStream *bs; + bs = gf_bs_new(NULL,0,GF_BITSTREAM_WRITE); gf_bs_write_int(bs, 0x7, 3); // reserved gf_bs_write_int(bs, stream->program->pcr->pid, 13); gf_bs_write_int(bs, 0xF, 4); // reserved + + if (stream->program->loop_descriptors) { + for (i=0; iprogram->loop_descriptors); i++) { + GF_M2TSDescriptor *desc = gf_list_get(stream->program->loop_descriptors, i); + info_length += 2 + desc->data_len; + } + } + if (!stream->program->iod) { - gf_bs_write_int(bs, 0, 12); // program info length =0 + gf_bs_write_int(bs, info_length, 12); // program info length =0 } else { u32 len, i; GF_ESD *esd; @@ -575,7 +599,8 @@ Bool gf_m2ts_stream_process_pmt(GF_M2TS_Mux *muxer, GF_M2TS_Mux_Stream *stream) GF_M2TS_Mux_Stream *es_stream = stream->program->streams; while (es_stream) { if (es_stream->ifce && (es_stream->ifce->stream_id==esd->ESID)) { - memcpy(esd->slConfig, &es_stream->sl_config, sizeof(GF_SLConfig)); + /*thay should be the same ...*/ + memcpy(esd->slConfig, es_stream->ifce->sl_config, sizeof(GF_SLConfig)); break; } es_stream = es_stream->next; @@ -588,7 +613,7 @@ Bool gf_m2ts_stream_process_pmt(GF_M2TS_Mux *muxer, GF_M2TS_Mux_Stream *stream) gf_bs_del(bs_iod); len = iod_data_len + 4; - gf_bs_write_int(bs, len, 12); // program info length + gf_bs_write_int(bs, len + info_length, 12); // program info length gf_bs_write_int(bs, GF_M2TS_MPEG4_IOD_DESCRIPTOR, 8); len = iod_data_len + 2; @@ -604,6 +629,17 @@ Bool gf_m2ts_stream_process_pmt(GF_M2TS_Mux *muxer, GF_M2TS_Mux_Stream *stream) gf_bs_write_data(bs, iod_data, iod_data_len); gf_free(iod_data); } + + /*write all other descriptors*/ + if (stream->program->loop_descriptors) { + for (i=0; iprogram->loop_descriptors); i++) { + GF_M2TSDescriptor *desc = gf_list_get(stream->program->loop_descriptors, i); + gf_bs_write_int(bs, desc->tag, 8); + gf_bs_write_int(bs, desc->data_len, 8); + gf_bs_write_data(bs, desc->data, desc->data_len); + } + } + es = stream->program->streams; while (es) { nb_streams++; @@ -613,7 +649,7 @@ Bool gf_m2ts_stream_process_pmt(GF_M2TS_Mux *muxer, GF_M2TS_Mux_Stream *stream) gf_bs_write_int(bs, 0xF, 4); // reserved /* Second Loop Descriptor */ - if (stream->program->iod) { + if (stream->program->iod && !(es->ifce->caps & GF_ESI_STREAM_WITHOUT_MPEG4_SYSTEMS)) { gf_bs_write_int(bs, 4, 12); // ES info length = 4 :only SL Descriptor gf_bs_write_int(bs, GF_M2TS_MPEG4_SL_DESCRIPTOR, 8); gf_bs_write_int(bs, 2, 8); @@ -629,42 +665,74 @@ Bool gf_m2ts_stream_process_pmt(GF_M2TS_Mux *muxer, GF_M2TS_Mux_Stream *stream) gf_m2ts_mux_table_update(stream, GF_M2TS_TABLE_ID_PMT, stream->program->number, payload, length, 1, 0, 0); stream->table_needs_update = 0; + stream->table_needs_send = 1; gf_free(payload); GF_LOG(GF_LOG_DEBUG, GF_LOG_CONTAINER, ("[MPEG-2 TS Muxer] PID %d: Updating PMT - Program Number %d - %d streams - size %d%s\n", stream->pid, stream->program->number, nb_streams, length, stream->program->iod ? " - MPEG-4 Systems detected":"")); } - return 1; + if (stream->table_needs_send) + return 1; + if (stream->refresh_rate_ms) + return 1; + return 0; } -static u32 gf_m2ts_stream_get_pes_header_length(GF_M2TS_Mux_Stream *stream) +static void gf_m2ts_remap_timestamps_for_pes(GF_M2TS_Mux_Stream *stream, u32 pck_flags, u64 *dts, u64 *cts) { - u32 hdr_len; - /*not the AU start*/ - if (stream->pck_offset || !(stream->curr_pck.flags & GF_ESI_DATA_AU_START) ) return 0; - hdr_len = 9; - if (stream->curr_pck.flags & GF_ESI_DATA_HAS_CTS) hdr_len += 5; - if (stream->curr_pck.flags & GF_ESI_DATA_HAS_DTS) hdr_len += 5; - return hdr_len; + u64 pcr_offset; + + /*Rescale our timestamps and express them in PCR*/ + if (stream->ts_scale) { + *cts = (u64) (stream->ts_scale * (s64) *cts); + *dts = (u64) (stream->ts_scale * (s64) *dts); + } + if (!stream->program->initial_ts_set) { + u32 nb_bits = (u32) (stream->program->mux->tot_pck_sent - stream->program->num_pck_at_pcr_init) * 1504; + u32 nb_ticks = 90000*nb_bits / stream->program->mux->bit_rate; + stream->program->initial_ts = *dts; + + if (stream->program->initial_ts > nb_ticks) + stream->program->initial_ts -= nb_ticks; + else + stream->program->initial_ts = 0; + + stream->program->initial_ts_set = 1; + } + else if (*dts < stream->program->initial_ts) { + GF_LOG(GF_LOG_WARNING, GF_LOG_CONTAINER, ("[MPEG-2 TS Muxer] PID %d: DTS "LLD" is less than initial DTS "LLD" - adjusting\n", stream->pid, *dts, stream->program->initial_ts)); + stream->program->initial_ts = *dts; + } + + /*offset our timestamps*/ + *cts += stream->program->pcr_offset; + *dts += stream->program->pcr_offset; + + /*PCR offset, in 90000 hz not in 270000000*/ + pcr_offset = stream->program->pcr_init_time/300; + *cts = *cts - stream->program->initial_ts + pcr_offset; + *dts = *dts - stream->program->initial_ts + pcr_offset; } -Bool gf_m2ts_stream_process_stream(GF_M2TS_Mux *muxer, GF_M2TS_Mux_Stream *stream) +u32 gf_m2ts_stream_process_stream(GF_M2TS_Mux *muxer, GF_M2TS_Mux_Stream *stream) { - u64 pcr_offset; - u32 next_time; Bool ret = 0; if (stream->mpeg2_stream_type==GF_M2TS_SYSTEMS_MPEG4_SECTIONS) { + /*section has just been updated */ + if (stream->table_needs_send) + return stream->scheduling_priority; /*section is not completely sent yet or this is not the first section of the table*/ if (stream->current_section && (stream->current_section_offset || stream->current_section!=stream->current_table->section)) - return 1; + return stream->scheduling_priority; if (stream->ifce->repeat_rate && stream->tables) - ret = 1; + ret = stream->program->pcr_init_time ? stream->scheduling_priority : 0; } else if (stream->curr_pck.data_len && stream->pck_offset < stream->curr_pck.data_len) { /*PES packet not completely sent yet*/ - return 1; + return stream->scheduling_priority + stream->pcr_priority; } + stream->pcr_priority = 0; /*PULL mode*/ if (stream->ifce->caps & GF_ESI_AU_PULL_CAP) { if (stream->curr_pck.data_len) { @@ -678,12 +746,15 @@ Bool gf_m2ts_stream_process_stream(GF_M2TS_Mux *muxer, GF_M2TS_Mux_Stream *strea stream->discard_data = 0; /*EOS*/ - if (stream->ifce->caps & GF_ESI_STREAM_IS_OVER) return 0; + if (stream->ifce->caps & GF_ESI_STREAM_IS_OVER) return ret; assert( stream->ifce->input_ctrl); stream->ifce->input_ctrl(stream->ifce, GF_ESI_INPUT_DATA_PULL, &stream->curr_pck); } else { GF_M2TS_Packet *curr_pck; + if (!stream->pck_first && (stream->ifce->caps & GF_ESI_STREAM_IS_OVER)) + return ret; + /*flush input pipe*/ if (stream->ifce->input_ctrl) stream->ifce->input_ctrl(stream->ifce, GF_ESI_INPUT_DATA_FLUSH, NULL); @@ -711,22 +782,20 @@ Bool gf_m2ts_stream_process_stream(GF_M2TS_Mux *muxer, GF_M2TS_Mux_Stream *strea gf_mx_v(stream->mx); } + if (!(stream->curr_pck.flags & GF_ESI_DATA_HAS_DTS)) stream->curr_pck.dts = stream->curr_pck.cts; - /*Rescale our timestamps and express them in PCR*/ - if (stream->ts_scale) { - stream->curr_pck.cts = (u64) (stream->ts_scale * (s64) stream->curr_pck.cts); - stream->curr_pck.dts = (u64) (stream->ts_scale * (s64) stream->curr_pck.dts); - } /*initializing the PCR*/ if (!stream->program->pcr_init_time) { if (stream==stream->program->pcr) { - while (!stream->program->pcr_init_time) - stream->program->pcr_init_time = gf_rand(); - - stream->program->pcr_init_time = 1; + if (stream->program->mux->init_pcr_value) { + stream->program->pcr_init_time = stream->program->mux->init_pcr_value; + } else { + while (!stream->program->pcr_init_time) + stream->program->pcr_init_time = gf_rand(); + } stream->program->ts_time_at_pcr_init = muxer->time; stream->program->num_pck_at_pcr_init = muxer->tot_pck_sent; @@ -737,15 +806,6 @@ Bool gf_m2ts_stream_process_stream(GF_M2TS_Mux *muxer, GF_M2TS_Mux_Stream *strea return 0; } } - if (!stream->initial_ts) { - u32 nb_bits = (u32) (muxer->tot_pck_sent - stream->program->num_pck_at_pcr_init) * 1504; - u32 nb_ticks = 90000*nb_bits / muxer->bit_rate; - stream->initial_ts = stream->curr_pck.dts; - if (stream->initial_ts > nb_ticks) - stream->initial_ts -= nb_ticks; - else - stream->initial_ts = 0; - } /*SL-encapsultaion*/ switch (stream->mpeg2_stream_type) { @@ -795,7 +855,7 @@ Bool gf_m2ts_stream_process_stream(GF_M2TS_Mux *muxer, GF_M2TS_Mux_Stream *strea stream->curr_pck.data_len = 0; stream->curr_pck.data = NULL; - gf_sl_packetize(&stream->sl_config, &stream->sl_header, src_data, src_data_len, &stream->curr_pck.data, &stream->curr_pck.data_len); + gf_sl_packetize(stream->ifce->sl_config, &stream->sl_header, src_data, src_data_len, &stream->curr_pck.data, &stream->curr_pck.data_len); /*discard src data*/ if (!(stream->ifce->caps & GF_ESI_AU_PULL_CAP)) { @@ -810,7 +870,7 @@ Bool gf_m2ts_stream_process_stream(GF_M2TS_Mux *muxer, GF_M2TS_Mux_Stream *strea /*perform LATM encapsulation*/ case GF_M2TS_AUDIO_LATM_AAC: { - u32 size; + u32 size, next_time; GF_BitStream *bs = gf_bs_new(NULL, 0, GF_BITSTREAM_WRITE); gf_bs_write_int(bs, 0x2B7, 11); gf_bs_write_int(bs, 0, 13); @@ -850,11 +910,13 @@ Bool gf_m2ts_stream_process_stream(GF_M2TS_Mux *muxer, GF_M2TS_Mux_Stream *strea break; } } + stream->reframe_overhead = stream->curr_pck.data_len; gf_bs_write_data(bs, stream->curr_pck.data, stream->curr_pck.data_len); gf_bs_align(bs); gf_free(stream->curr_pck.data); gf_bs_get_content(bs, &stream->curr_pck.data, &stream->curr_pck.data_len); gf_bs_del(bs); + stream->reframe_overhead = stream->curr_pck.data_len - stream->reframe_overhead; /*rewrite LATM frame header*/ size = stream->curr_pck.data_len - 2; @@ -889,90 +951,204 @@ Bool gf_m2ts_stream_process_stream(GF_M2TS_Mux *muxer, GF_M2TS_Mux_Stream *strea gf_free(stream->curr_pck.data); gf_bs_get_content(bs, &stream->curr_pck.data, &stream->curr_pck.data_len); gf_bs_del(bs); + /*constant reframe overhead*/ + stream->reframe_overhead = 7; } /*since we reallocated the packet data buffer, force a discard in pull mode*/ stream->discard_data = 1; break; } + /*rewrite timestamps for PES header*/ + gf_m2ts_remap_timestamps_for_pes(stream, stream->curr_pck.flags, &stream->curr_pck.dts, &stream->curr_pck.cts); + /*compute next interesting time in TS unit: this will be DTS of next packet*/ - next_time = (u32) (stream->curr_pck.dts - stream->initial_ts); - /*we need to take into account transmission time, eg nb packets to send the data*/ - if (next_time) { - u32 nb_pck, bytes, nb_bits, nb_ticks; - bytes = 184 - ADAPTATION_LENGTH_LENGTH - ADAPTATION_FLAGS_LENGTH - PCR_LENGTH; - bytes -= gf_m2ts_stream_get_pes_header_length(stream); - nb_pck=1; - while (bytescurr_pck.data_len) { - bytes+=184; - nb_pck++; + stream->time = stream->program->ts_time_at_pcr_init; + gf_m2ts_time_inc(&stream->time, (u32) stream->curr_pck.dts, 90000); + + /*do we need to send a PCR*/ + if (stream == stream->program->pcr) { + if (muxer->real_time) { + if (gf_sys_clock() > stream->program->last_sys_clock + PCR_UPDATE_MS) + stream->pcr_priority = 1; + } else { + if (!stream->program->last_dts || (stream->curr_pck.dts > stream->program->last_dts + PCR_UPDATE_MS*90)) + stream->pcr_priority = 1; } - nb_bits = nb_pck * 1504; - nb_ticks = 90000*nb_bits / muxer->bit_rate; - if (next_time>nb_ticks) - next_time -= nb_ticks; - else - next_time = 0; } + GF_LOG(GF_LOG_DEBUG, GF_LOG_CONTAINER, ("[MPEG-2 TS Muxer] PID %d: Next data schedule for %d:%09d - mux time %d:%09d\n", stream->pid, stream->time.sec, stream->time.nanosec, muxer->time.sec, muxer->time.nanosec)); - stream->time = stream->program->ts_time_at_pcr_init; - gf_m2ts_time_inc(&stream->time, next_time, 90000); + /*compute instant bitrate*/ + if (!stream->last_br_time) { + stream->last_br_time = stream->curr_pck.dts + 1; + stream->bytes_since_last_time = 0; + stream->pes_since_last_time = 0; + } else { + u32 time_diff = (u32) (stream->curr_pck.dts - stream->last_br_time - 1 ); + if ((stream->pes_since_last_time > 4) && (time_diff >= BITRATE_UPDATE_WINDOW)) { + u32 bitrate; + u64 r = 8*stream->bytes_since_last_time; + r*=90000; + bitrate = (u32) (r / time_diff); + stream->bit_rate = bitrate; + stream->last_br_time = 0; + stream->bytes_since_last_time = 0; + stream->pes_since_last_time = 0; + stream->program->mux->needs_reconfig = 1; + } + } + stream->pes_since_last_time ++; + return stream->scheduling_priority + stream->pcr_priority; +} - /*PCR offset, in 90000 hz not in 270000000*/ - pcr_offset = stream->program->pcr_init_time/300; - stream->curr_pck.cts = stream->curr_pck.cts - stream->initial_ts + pcr_offset; - stream->curr_pck.dts = stream->curr_pck.dts - stream->initial_ts + pcr_offset; +static GFINLINE u64 gf_m2ts_get_pcr(GF_M2TS_Mux_Program *program) +{ + u32 nb_pck = (u32) (program->mux->tot_pck_sent - program->num_pck_at_pcr_init); + u64 pcr = 27000000; + pcr *= nb_pck*1504; + pcr /= program->mux->bit_rate; + pcr += program->pcr_init_time; + return pcr; +} - GF_LOG(GF_LOG_DEBUG, GF_LOG_CONTAINER, ("[MPEG-2 TS Muxer] PID %d: Next data schedule for %d:%09d - mux time %d:%09d\n", stream->pid, stream->time.sec, stream->time.nanosec, muxer->time.sec, muxer->time.nanosec)); +void gf_m2ts_stream_update_data_following(GF_M2TS_Mux_Stream *stream) +{ + stream->next_payload_size = 0; + stream->copy_from_next_packets = 0; + + if (stream->program->mux->one_au_per_pes) return; + switch (stream->mpeg2_stream_type) { + /*the following stream types do not allow PES boundaries at any place on their payload*/ + case GF_M2TS_SYSTEMS_MPEG4_PES: + /*one and only one SL per PES: we cannot concatenate*/ + return; + default: + break; + } + if (stream->ifce->caps & GF_ESI_AU_PULL_CAP) { + GF_ESIPacket test_pck; + test_pck.data_len = 0; + /*pull next data but do not release it since it might be needed later on*/ + stream->ifce->input_ctrl(stream->ifce, GF_ESI_INPUT_DATA_PULL, &test_pck); + if (test_pck.data_len) { + stream->next_payload_size = test_pck.data_len; + stream->next_pck_flags = test_pck.flags; + stream->next_pck_cts = test_pck.cts; + stream->next_pck_dts = test_pck.dts; + } + } else { + /*flush input*/ + if (!stream->pck_first && stream->ifce->input_ctrl) stream->ifce->input_ctrl(stream->ifce, GF_ESI_INPUT_DATA_FLUSH, NULL); + if (stream->pck_first) { + stream->next_payload_size = stream->pck_first->data_len; + stream->next_pck_cts = stream->pck_first->cts; + stream->next_pck_dts = stream->pck_first->dts; + stream->next_pck_flags = stream->pck_first->flags; + } + } + if (stream->next_payload_size) { + stream->next_payload_size += stream->reframe_overhead; - /*compute bitrate if needed*/ - if (!stream->bit_rate) { - if (!stream->last_br_time) { - stream->last_br_time = stream->curr_pck.dts + 1; - stream->bytes_since_last_time = stream->curr_pck.data_len; - } else { - if (stream->curr_pck.dts - stream->last_br_time - 1 >= 90000) { - u64 r = 8*stream->bytes_since_last_time; - r*=90000; - stream->bit_rate = (u32) (r / (stream->curr_pck.dts - stream->last_br_time - 1)); - stream->program->mux->needs_reconfig = 1; - } else { - stream->bytes_since_last_time += stream->curr_pck.data_len; + gf_m2ts_remap_timestamps_for_pes(stream, stream->next_pck_flags, &stream->next_pck_dts, &stream->next_pck_cts); + } +} + + +Bool gf_m2ts_stream_compute_pes_length(GF_M2TS_Mux_Stream *stream, u32 payload_length) +{ + stream->copy_from_next_packets = 0; + stream->next_payload_size = 0; + + gf_m2ts_stream_update_data_following(stream); + + assert(stream->pes_data_remain==0); + stream->pes_data_len = stream->curr_pck.data_len - stream->pck_offset; + +// stream->next_payload_size = 0; + /*if we have next payload ready, compute transmitted size*/ + if (stream->next_payload_size) { + u32 pck_size = stream->curr_pck.data_len - stream->pck_offset; + u32 ts_bytes = payload_length; + + /*flushing end of previous PES, let's put the entire next AU in it*/ + if (pck_size<=ts_bytes) { + while (ts_bytes < pck_size + stream->next_payload_size) { + ts_bytes += 184; + } + } + /*needs several TS packets to send the PES, don't attempt to stick in the entire next AU*/ + else { + while (ts_bytes < pck_size) { + ts_bytes += 184; + } + } + /*that's how much bytes we copy from the following AUs*/ + stream->copy_from_next_packets = ts_bytes - pck_size; + + if (stream->ifce->caps & GF_ESI_STREAM_IS_OVER) { + while (stream->copy_from_next_packets > stream->next_payload_size) { + if (stream->copy_from_next_packets < 184) { + stream->copy_from_next_packets = 0; + break; + } + stream->copy_from_next_packets -= 184; } } + stream->pes_data_len += stream->copy_from_next_packets; } + stream->pes_data_remain = stream->pes_data_len; return 1; } -static GFINLINE u64 gf_m2ts_get_pcr(GF_M2TS_Mux_Program *program) + +static u32 gf_m2ts_stream_get_pes_header_length(GF_M2TS_Mux_Stream *stream) { - u32 nb_pck = (u32) (program->mux->tot_pck_sent - program->num_pck_at_pcr_init); - u64 pcr = 27000000; - pcr *= nb_pck*1504; - pcr /= program->mux->bit_rate; - pcr += program->pcr_init_time; - return pcr; + u32 hdr_len, flags; + flags = stream->pck_offset ? stream->next_pck_flags : stream->curr_pck.flags; + + if (stream->pes_data_remain) return 0; + /*not the AU start*/ + if ( !(flags & GF_ESI_DATA_AU_START) ) + return 0; + + hdr_len = 9; + if (flags & GF_ESI_DATA_HAS_CTS) hdr_len += 5; + if (flags & GF_ESI_DATA_HAS_DTS) hdr_len += 5; + return hdr_len; } -u32 gf_m2ts_stream_add_pes_header(GF_BitStream *bs, GF_M2TS_Mux_Stream *stream) +u32 gf_m2ts_stream_add_pes_header(GF_BitStream *bs, GF_M2TS_Mux_Stream *stream, u32 payload_length) { - u64 t; + u64 t, dts, cts; u32 pes_len; Bool use_pts, use_dts; gf_bs_write_int(bs, 0x1, 24);//packet start code gf_bs_write_u8(bs, stream->mpeg2_stream_id);// stream id - use_pts = (stream->curr_pck.flags & GF_ESI_DATA_HAS_CTS) ? 1 : 0; - use_dts = (stream->curr_pck.flags & GF_ESI_DATA_HAS_DTS) ? 1 : 0; + /*next AU start in current PES and current AU began in previous PES, use next AU timing*/ + if (stream->pck_offset && stream->copy_from_next_packets) { + use_pts = (stream->next_pck_flags & GF_ESI_DATA_HAS_CTS) ? 1 : 0; + use_dts = (stream->next_pck_flags & GF_ESI_DATA_HAS_DTS) ? 1 : 0; + dts = stream->next_pck_dts; + cts = stream->next_pck_cts; + } else { + use_pts = (stream->curr_pck.flags & GF_ESI_DATA_HAS_CTS) ? 1 : 0; + use_dts = (stream->curr_pck.flags & GF_ESI_DATA_HAS_DTS) ? 1 : 0; + dts = stream->curr_pck.dts; + cts = stream->curr_pck.cts; + } - pes_len = stream->curr_pck.data_len + 3; // 3 = header size + assert(stream->pes_data_len); + pes_len = stream->pes_data_len + 3; // 3 = header size if (use_pts) pes_len += 5; if (use_dts) pes_len += 5; + + if (pes_len>0xFFFF) pes_len = 0; gf_bs_write_int(bs, pes_len, 16); // pes packet length gf_bs_write_int(bs, 0x2, 2); // reserved @@ -990,73 +1166,97 @@ u32 gf_m2ts_stream_add_pes_header(GF_BitStream *bs, GF_M2TS_Mux_Stream *stream) if (use_pts) { gf_bs_write_int(bs, use_dts ? 0x3 : 0x2, 4); // reserved '0011' || '0010' - t = ((stream->curr_pck.cts >> 30) & 0x7); + t = ((cts >> 30) & 0x7); gf_bs_write_long_int(bs, t, 3); gf_bs_write_int(bs, 1, 1); // marker bit - t = ((stream->curr_pck.cts >> 15) & 0x7fff); + t = ((cts >> 15) & 0x7fff); gf_bs_write_long_int(bs, t, 15); gf_bs_write_int(bs, 1, 1); // marker bit - t = stream->curr_pck.cts & 0x7fff; + t = cts & 0x7fff; gf_bs_write_long_int(bs, t, 15); gf_bs_write_int(bs, 1, 1); // marker bit } if (use_dts) { gf_bs_write_int(bs, 0x1, 4); // reserved '0001' - t = ((stream->curr_pck.dts >> 30) & 0x7); + t = ((dts >> 30) & 0x7); gf_bs_write_long_int(bs, t, 3); gf_bs_write_int(bs, 1, 1); // marker bit - t = ((stream->curr_pck.dts >> 15) & 0x7fff); + t = ((dts >> 15) & 0x7fff); gf_bs_write_long_int(bs, t, 15); gf_bs_write_int(bs, 1, 1); // marker bit - t = stream->curr_pck.dts & 0x7fff; + t = dts & 0x7fff; gf_bs_write_long_int(bs, t, 15); gf_bs_write_int(bs, 1, 1); // marker bit } - GF_LOG(GF_LOG_DEBUG, GF_LOG_CONTAINER, ("[MPEG-2 TS Muxer] PID %d: Adding PES header at PCR "LLD" - has PTS %d (%d) - has DTS %d (%d)\n", stream->pid, gf_m2ts_get_pcr(stream->program)/300, use_pts, stream->curr_pck.cts, use_dts, stream->curr_pck.dts)); + GF_LOG(GF_LOG_DEBUG, GF_LOG_CONTAINER, ("[MPEG-2 TS Muxer] PID %d: Adding PES header at PCR "LLD" - has PTS %d (%d) - has DTS %d (%d)\n", stream->pid, gf_m2ts_get_pcr(stream->program)/300, use_pts, cts, use_dts, dts)); return pes_len+4; // 4 = start code + stream_id } -#define PCR_UPDATE_MS 200 - void gf_m2ts_mux_pes_get_next_packet(GF_M2TS_Mux_Stream *stream, u8 *packet) { GF_BitStream *bs; - Bool is_rap, needs_pcr; - u32 remain, adaptation_field_control, payload_length, padding_length, hdr_len; - u32 now = gf_sys_clock(); + Bool needs_pcr; + u32 adaptation_field_control, payload_length, payload_to_copy, padding_length, hdr_len, pos, copy_next; assert(stream->pid); bs = gf_bs_new(packet, 188, GF_BITSTREAM_WRITE); hdr_len = gf_m2ts_stream_get_pes_header_length(stream); - remain = stream->curr_pck.data_len - stream->pck_offset; - - needs_pcr = 0; - if (hdr_len && (stream==stream->program->pcr) ) { - if (now > stream->program->last_sys_clock + PCR_UPDATE_MS) - needs_pcr = 1; - } + adaptation_field_control = GF_M2TS_ADAPTATION_NONE; payload_length = 184 - hdr_len; - padding_length = 0; + payload_to_copy = padding_length = 0; + needs_pcr = (hdr_len && stream->pcr_priority ) ? 1 : 0; if (needs_pcr) { - adaptation_field_control = GF_M2TS_ADAPTATION_AND_PAYLOAD; /*AF headers + PCR*/ payload_length -= 8; - } else if (remain<184) { - /*AF headers*/ - payload_length -= 2; adaptation_field_control = GF_M2TS_ADAPTATION_AND_PAYLOAD; } - if (remain>=payload_length) { + + if (hdr_len) { + assert(!stream->pes_data_remain); + gf_m2ts_stream_compute_pes_length(stream, payload_length); + assert(stream->pes_data_remain==stream->pes_data_len); + } + + copy_next = stream->copy_from_next_packets; + payload_to_copy = stream->curr_pck.data_len - stream->pck_offset; + /*end of PES packet*/ + if (payload_to_copy > stream->pes_data_remain) { + payload_to_copy = stream->pes_data_remain; + copy_next = 0; + } + + + /*packet exceed payload length*/ + if (payload_to_copy >= payload_length) { + padding_length = 0; + payload_to_copy = payload_length; + } + /*packet + next packet exceed payload length*/ + else if (payload_to_copy + copy_next >= payload_length) { padding_length = 0; - } else { - padding_length = payload_length - remain; - payload_length -= padding_length; + } + /*packet + next packet less than payload length - pad */ + else { + /*AF headers*/ + if (!needs_pcr) { + payload_length -= 2; + adaptation_field_control = GF_M2TS_ADAPTATION_AND_PAYLOAD; + } + /*cannot add adaptation field for this TS packet with this payload, we need to split in 2 TS packets*/ + if (payload_length < payload_to_copy + copy_next) { + padding_length = 10; + payload_length -= padding_length; + payload_to_copy = payload_length; + } else { + padding_length = payload_length - payload_to_copy - copy_next; + payload_length -= padding_length; + } } gf_bs_write_int(bs, 0x47, 8); // sync byte @@ -1070,38 +1270,108 @@ void gf_m2ts_mux_pes_get_next_packet(GF_M2TS_Mux_Stream *stream, u8 *packet) if (stream->continuity_counter < 15) stream->continuity_counter++; else stream->continuity_counter=0; - is_rap = (hdr_len && (stream->curr_pck.flags & GF_ESI_DATA_AU_RAP) ) ? 1 : 0; - if (adaptation_field_control != GF_M2TS_ADAPTATION_NONE) { + Bool is_rap; u64 pcr = 0; if (needs_pcr) { - /*compute PCR*/ u32 now = gf_sys_clock(); - pcr = gf_m2ts_get_pcr(stream->program); + /*compute PCR*/ + if (stream->program->mux->real_time) { + pcr = gf_m2ts_get_pcr(stream->program); + } else { + pcr = (stream->curr_pck.dts - stream->program->pcr_offset) * 300; + if (pcr>stream->program->pcr_init_time) pcr -= stream->program->pcr_init_time; + else pcr = 0; + } -// fprintf(stdout, "PCR Diff in ms %d - sys clock diff in ms %d\n", (u32) (pcr - stream->program->last_pcr) / 27000, now - stream->program->last_sys_clock); + //fprintf(stdout, "PCR Diff in ms %d - sys clock diff in ms %d - DTS diff %d\n", (u32) (pcr - stream->program->last_pcr) / 27000, now - stream->program->last_sys_clock, (stream->curr_pck.dts - stream->program->last_dts)/90); - stream->program->last_pcr = pcr; stream->program->last_sys_clock = now; + stream->program->last_dts = stream->curr_pck.dts; + stream->program->last_pcr = pcr; + stream->pcr_priority = 0; } + is_rap = (hdr_len && (stream->curr_pck.flags & GF_ESI_DATA_AU_RAP) ) ? 1 : 0; gf_m2ts_add_adaptation(bs, stream->pid, needs_pcr, pcr, is_rap, padding_length); } - if (hdr_len) gf_m2ts_stream_add_pes_header(bs, stream); + if (hdr_len) gf_m2ts_stream_add_pes_header(bs, stream, payload_length); + pos = (u32) gf_bs_get_position(bs); gf_bs_del(bs); - memcpy(packet+188-payload_length, stream->curr_pck.data + stream->pck_offset, payload_length); - stream->pck_offset += payload_length; + memcpy(packet+pos, stream->curr_pck.data + stream->pck_offset, payload_to_copy); + stream->pck_offset += payload_to_copy; + assert(stream->pes_data_remain >= payload_to_copy); + stream->pes_data_remain -= payload_to_copy; + + /*update stream time, including headers*/ +// gf_m2ts_time_inc(&stream->time, payload_to_copy + pos - 4, stream->bit_rate); if (stream->pck_offset == stream->curr_pck.data_len) { /*PES has been sent, discard internal buffer*/ - gf_free(stream->curr_pck.data); + if (stream->discard_data) gf_free(stream->curr_pck.data); stream->curr_pck.data = NULL; stream->curr_pck.data_len = 0; - + GF_LOG(GF_LOG_INFO, GF_LOG_CONTAINER, ("[MPEG2-TS Muxer] Done sending PES (%d bytes) from PID %d at stream time %d:%d (DTS "LLD" - PCR "LLD")\n", stream->curr_pck.data_len, stream->pid, stream->time.sec, stream->time.nanosec, stream->curr_pck.dts, gf_m2ts_get_pcr(stream->program)/300)); + +#ifndef GPAC_DISABLE_LOG + if ((gf_log_get_level() >= GF_LOG_INFO) + && (gf_log_get_tools() & GF_LOG_CONTAINER) + && gf_m2ts_time_less(&stream->program->mux->time, &stream->time) + ) { + s32 drift; + GF_M2TS_Time muxtime = stream->program->mux->time; + drift= stream->time.nanosec; + drift-=muxtime.nanosec; + drift/=1000; + if (muxtime.sec!=stream->time.sec) { + drift += (stream->time.sec - muxtime.sec)*1000000; + } + GF_LOG(GF_LOG_INFO, GF_LOG_CONTAINER, ("[MPEG2-TS Muxer] PES PID %d sent %d us too late\n", stream->pid, drift) ); + } +#endif + + /*copy over from next PES to fill this TS packet*/ + if (stream->copy_from_next_packets) { + u32 copy_next; + pos += payload_to_copy; + copy_next = payload_length - payload_to_copy; + /*we might need a more than one*/ + while (1) { + u32 remain = 0; + Bool res = stream->process(stream->program->mux, stream); + assert(res); + if (copy_next > stream->curr_pck.data_len) { + remain = copy_next - stream->curr_pck.data_len; + copy_next = stream->curr_pck.data_len; + } + + memcpy(packet+pos, stream->curr_pck.data + stream->pck_offset, copy_next); + stream->pck_offset += copy_next; + assert(stream->pes_data_remain >= copy_next); + stream->pes_data_remain -= copy_next; + + if (stream->copy_from_next_packets > copy_next) { + stream->copy_from_next_packets -= copy_next; + } else { + stream->copy_from_next_packets = 0; + } + + if (stream->pck_offset == stream->curr_pck.data_len) { + /*PES has been sent, discard internal buffer*/ + if (stream->discard_data) gf_free(stream->curr_pck.data); + stream->curr_pck.data = NULL; + stream->curr_pck.data_len = 0; + } + if (!remain) break; + pos += copy_next; + copy_next = remain; + } + } } + stream->bytes_since_last_time += 188; } @@ -1166,16 +1436,18 @@ GF_Err gf_m2ts_output_ctrl(GF_ESInterface *_self, u32 ctrl_type, void *param) return GF_OK; } -static void gf_m2ts_stream_setup_slconfig(GF_M2TS_Mux_Stream *stream) +static void gf_m2ts_stream_set_default_slconfig(GF_M2TS_Mux_Stream *stream) { - stream->sl_config.tag = GF_ODF_SLC_TAG; - stream->sl_config.useAccessUnitStartFlag = 1; - stream->sl_config.useAccessUnitEndFlag = 1; - stream->sl_config.useRandomAccessPointFlag = 1; - stream->sl_config.useTimestampsFlag = 1; + if (!stream->ifce->sl_config) { + stream->ifce->sl_config = (GF_SLConfig *)gf_odf_desc_new(GF_ODF_SLC_TAG); + stream->ifce->sl_config->useAccessUnitStartFlag = 1; + stream->ifce->sl_config->useAccessUnitEndFlag = 1; + stream->ifce->sl_config->useRandomAccessPointFlag = 1; + stream->ifce->sl_config->useTimestampsFlag = 1; + } } -GF_M2TS_Mux_Stream *gf_m2ts_program_stream_add(GF_M2TS_Mux_Program *program, struct __elementary_stream_ifce *ifce, u32 pid, Bool is_pcr) +GF_M2TS_Mux_Stream *gf_m2ts_program_stream_add(GF_M2TS_Mux_Program *program, struct __elementary_stream_ifce *ifce, u32 pid, Bool is_pcr, Bool force_pes) { GF_M2TS_Mux_Stream *stream, *st; @@ -1184,15 +1456,23 @@ GF_M2TS_Mux_Stream *gf_m2ts_program_stream_add(GF_M2TS_Mux_Program *program, str stream->pid = pid; stream->program = program; if (is_pcr) program->pcr = stream; + if (program->streams) { - st = program->streams; - while (st->next) st = st->next; - st->next = stream; + /*if PCR keep stream at the begining*/ + if (is_pcr) { + stream->next = program->streams; + program->streams = stream; + } else { + st = program->streams; + while (st->next) st = st->next; + st->next = stream; + } } else { program->streams = stream; } if (program->pmt) program->pmt->table_needs_update = 1; stream->bit_rate = ifce->bit_rate; + stream->scheduling_priority = 1; switch (ifce->stream_type) { case GF_STREAM_VISUAL: @@ -1221,7 +1501,7 @@ GF_M2TS_Mux_Stream *gf_m2ts_program_stream_add(GF_M2TS_Mux_Program *program, str case GPAC_OTI_IMAGE_PNG: stream->mpeg2_stream_type = GF_M2TS_SYSTEMS_MPEG4_PES; stream->mpeg2_stream_id = 0xFA; - gf_m2ts_stream_setup_slconfig(stream); + gf_m2ts_stream_set_default_slconfig(stream); break; default: break; @@ -1244,21 +1524,40 @@ GF_M2TS_Mux_Stream *gf_m2ts_program_stream_add(GF_M2TS_Mux_Program *program, str /*just pick first valid stream_id in audio range*/ stream->mpeg2_stream_id = 0xC0; break; - case GF_STREAM_SCENE: case GF_STREAM_OD: - stream->mpeg2_stream_type = GF_M2TS_SYSTEMS_MPEG4_SECTIONS; + /*highest priority for OD streams as they are needed to process other streams*/ + stream->scheduling_priority = 20; + stream->mpeg2_stream_id = 0xFA; + stream->table_id = GF_M2TS_TABLE_ID_MPEG4_OD; + gf_m2ts_stream_set_default_slconfig(stream); + if (force_pes) { + stream->mpeg2_stream_type = GF_M2TS_SYSTEMS_MPEG4_PES; + } else { + stream->mpeg2_stream_type = GF_M2TS_SYSTEMS_MPEG4_SECTIONS; + } + break; + case GF_STREAM_SCENE: stream->mpeg2_stream_id = 0xFA; - stream->table_id = (ifce->stream_type==GF_STREAM_OD) ? GF_M2TS_TABLE_ID_MPEG4_OD : GF_M2TS_TABLE_ID_MPEG4_BIFS; - gf_m2ts_stream_setup_slconfig(stream); + stream->table_id = GF_M2TS_TABLE_ID_MPEG4_BIFS; + gf_m2ts_stream_set_default_slconfig(stream); + + if (force_pes) { + stream->mpeg2_stream_type = GF_M2TS_SYSTEMS_MPEG4_PES; + } else { + stream->mpeg2_stream_type = GF_M2TS_SYSTEMS_MPEG4_SECTIONS; + } break; } - /*override signaling for all streams except BIFS/OD, to use MPEG-4 PES*/ - if (program->mpeg4_signaling==GF_M2TS_MPEG4_SIGNALING_FULL) { - if (stream->mpeg2_stream_type != GF_M2TS_SYSTEMS_MPEG4_SECTIONS) { - stream->mpeg2_stream_type = GF_M2TS_SYSTEMS_MPEG4_PES; - stream->mpeg2_stream_id = 0xFA;/*ISO/IEC14496-1_SL-packetized_stream*/ - gf_m2ts_stream_setup_slconfig(stream); + + if (! (ifce->caps & GF_ESI_STREAM_WITHOUT_MPEG4_SYSTEMS)) { + /*override signaling for all streams except BIFS/OD, to use MPEG-4 PES*/ + if (program->mpeg4_signaling==GF_M2TS_MPEG4_SIGNALING_FULL) { + if (stream->mpeg2_stream_type != GF_M2TS_SYSTEMS_MPEG4_SECTIONS) { + stream->mpeg2_stream_type = GF_M2TS_SYSTEMS_MPEG4_PES; + stream->mpeg2_stream_id = 0xFA;/*ISO/IEC14496-1_SL-packetized_stream*/ + gf_m2ts_stream_set_default_slconfig(stream); + } } } @@ -1279,23 +1578,15 @@ GF_Err gf_m2ts_program_stream_update_ts_scale(GF_ESInterface *_self, u32 time_sc return GF_OK; } -void gf_m2ts_program_stream_update_sl_config(GF_ESInterface *_self, GF_SLConfig *slc) -{ - GF_M2TS_Mux_Stream *stream = (GF_M2TS_Mux_Stream *)_self->output_udta; - if (stream->program->iod && slc) { - memcpy(&stream->sl_config, slc, sizeof(GF_SLConfig)); - } -} - -#define GF_M2TS_PSI_DEFAULT_REFRESH_RATE 200 -GF_M2TS_Mux_Program *gf_m2ts_mux_program_add(GF_M2TS_Mux *muxer, u32 program_number, u32 pmt_pid, u32 pmt_refresh_rate, Bool mpeg4_signaling) +GF_M2TS_Mux_Program *gf_m2ts_mux_program_add(GF_M2TS_Mux *muxer, u32 program_number, u32 pmt_pid, u32 pmt_refresh_rate, u32 pcr_offset, Bool mpeg4_signaling) { GF_M2TS_Mux_Program *program; GF_SAFEALLOC(program, GF_M2TS_Mux_Program); program->mux = muxer; program->mpeg4_signaling = mpeg4_signaling; + program->pcr_offset = pcr_offset; program->number = program_number; if (muxer->programs) { @@ -1309,7 +1600,7 @@ GF_M2TS_Mux_Program *gf_m2ts_mux_program_add(GF_M2TS_Mux *muxer, u32 program_num program->pmt->program = program; muxer->pat->table_needs_update = 1; program->pmt->process = gf_m2ts_stream_process_pmt; - program->pmt->refresh_rate_ms = pmt_refresh_rate ? pmt_refresh_rate : GF_M2TS_PSI_DEFAULT_REFRESH_RATE; + program->pmt->refresh_rate_ms = pmt_refresh_rate; return program; } @@ -1320,9 +1611,10 @@ GF_M2TS_Mux *gf_m2ts_mux_new(u32 mux_rate, u32 pat_refresh_rate, Bool real_time) GF_SAFEALLOC(muxer, GF_M2TS_Mux); muxer->pat = gf_m2ts_stream_new(GF_M2TS_PID_PAT); muxer->pat->process = gf_m2ts_stream_process_pat; - muxer->pat->refresh_rate_ms = pat_refresh_rate ? pat_refresh_rate : GF_M2TS_PSI_DEFAULT_REFRESH_RATE; + muxer->pat->refresh_rate_ms = pat_refresh_rate; muxer->real_time = real_time; muxer->bit_rate = mux_rate; + muxer->init_pcr_value = 0; if (mux_rate) muxer->fixed_rate = 1; /*format NULL packet*/ @@ -1371,6 +1663,15 @@ void gf_m2ts_mux_program_del(GF_M2TS_Mux_Program *prog) gf_m2ts_mux_stream_del(prog->streams); prog->streams = st; } + if (prog->loop_descriptors) { + while (gf_list_count(prog->loop_descriptors) ) { + GF_M2TSDescriptor *desc = gf_list_last(prog->loop_descriptors); + gf_list_rem_last(prog->loop_descriptors); + if (desc->data) gf_free(desc->data); + gf_free(desc); + } + gf_list_del(prog->loop_descriptors); + } gf_m2ts_mux_stream_del(prog->pmt); gf_free(prog); } @@ -1386,6 +1687,29 @@ void gf_m2ts_mux_del(GF_M2TS_Mux *mux) gf_free(mux); } +void gf_m2ts_mux_update_bitrate(GF_M2TS_Mux *mux) +{ + GF_M2TS_Mux_Program *prog; + if (!mux || mux->fixed_rate) return; + + mux->bit_rate = 0; + gf_m2ts_mux_table_update_bitrate(mux, mux->pat); + mux->bit_rate += mux->pat->bit_rate; + + + prog = mux->programs; + while (prog) { + GF_M2TS_Mux_Stream *stream = prog->streams; + gf_m2ts_mux_table_update_bitrate(mux, prog->pmt); + mux->bit_rate += prog->pmt->bit_rate; + while (stream) { + mux->bit_rate += stream->bit_rate; + stream = stream->next; + } + prog = prog->next; + } +} + void gf_m2ts_mux_update_config(GF_M2TS_Mux *mux, Bool reset_time) { GF_M2TS_Mux_Program *prog; @@ -1402,13 +1726,9 @@ void gf_m2ts_mux_update_config(GF_M2TS_Mux *mux, Bool reset_time) while (prog) { GF_M2TS_Mux_Stream *stream = prog->streams; while (stream) { - /*!! WATCHOUT - this is raw bitrate without PES header overhead !!*/ if (!mux->fixed_rate) { mux->bit_rate += stream->bit_rate; - /*update PCR every 100ms - we need at least 8 bytes without padding*/ - if (stream == prog->pcr) mux->bit_rate += 8*8*10; } - /*reset mux time*/ if (reset_time) stream->time.sec = stream->time.nanosec = 0; stream = stream->next; @@ -1440,6 +1760,19 @@ u32 gf_m2ts_get_ts_clock(GF_M2TS_Mux *muxer) return now-init; } +GF_Err gf_m2ts_mux_use_single_au_pes_mode(GF_M2TS_Mux *muxer, Bool strict_au_pes_mode) +{ + if (!muxer) return GF_BAD_PARAM; + muxer->one_au_per_pes = strict_au_pes_mode ? 1 : 0; + return GF_OK; +} + +GF_Err gf_m2ts_mux_set_initial_pcr(GF_M2TS_Mux *muxer, u64 init_pcr_value) +{ + if (!muxer) return GF_BAD_PARAM; + muxer->init_pcr_value = init_pcr_value; + return GF_OK; +} const char *gf_m2ts_mux_process(GF_M2TS_Mux *muxer, u32 *status) { @@ -1448,7 +1781,7 @@ const char *gf_m2ts_mux_process(GF_M2TS_Mux *muxer, u32 *status) GF_M2TS_Time time; u32 now, nb_streams, nb_streams_done; char *ret; - Bool res; + u32 res, highest_priority; nb_streams = nb_streams_done = 0; *status = GF_M2TS_STATE_IDLE; @@ -1471,11 +1804,16 @@ const char *gf_m2ts_mux_process(GF_M2TS_Mux *muxer, u32 *status) stream_to_process = NULL; time = muxer->time; + /*bitrate have changed*/ if (muxer->needs_reconfig) { gf_m2ts_mux_update_config(muxer, 0); muxer->needs_reconfig = 0; } + /*compare PAT and PMT with current mux time + if non-fixed rate, current mux time is the time of the last packet sent, time test is still valid - it will however not work + if min access unit duration from all streams is greater than the PSI refresh rate*/ + /*PAT*/ res = muxer->pat->process(muxer, muxer->pat); if (res && gf_m2ts_time_less_or_equal(&muxer->pat->time, &time) ) { @@ -1489,7 +1827,7 @@ const char *gf_m2ts_mux_process(GF_M2TS_Mux *muxer, u32 *status) program = muxer->programs; while (program) { res = program->pmt->process(muxer, program->pmt); - if (res && gf_m2ts_time_less(&program->pmt->time, &time) ) { + if (res && gf_m2ts_time_less_or_equal(&program->pmt->time, &time) ) { time = program->pmt->time; stream_to_process = program->pmt; /*force sending the PMT regardless of other streams*/ @@ -1498,49 +1836,56 @@ const char *gf_m2ts_mux_process(GF_M2TS_Mux *muxer, u32 *status) program = program->next; } + /*if non-fixed rate, just pick the earliest data on all streams*/ + if (!muxer->fixed_rate) { + time.sec = 0xFFFFFFFF; + } + +#define FORCE_PCR_FIRST 0 + +#if FORCE_PCR_FIRST + /*PCR stream, for each program (send them first to avoid PCR to never be sent)*/ program = muxer->programs; while (program) { - stream = program->streams; - while (stream) { - if (stream == program->pcr) { - nb_streams++; - res = stream->process(muxer, stream); - if (res) { - if (gf_m2ts_time_less(&stream->time, &time)) { - time = stream->time; - stream_to_process = stream; - goto send_pck; - } - } else { - if (stream->ifce->caps & GF_ESI_STREAM_IS_OVER) nb_streams_done ++; - } - - break; - } - stream = stream->next; + stream = program->pcr; + res = stream->process(muxer, stream); + if (res && gf_m2ts_time_less_or_equal(&stream->time, &time)) { + time = stream->time; + stream_to_process = stream; + goto send_pck; } program = program->next; } +#endif - /*all streams except PCR, for each program*/ + /*all streams for each program*/ + highest_priority = 0; program = muxer->programs; while (program) { stream = program->streams; while (stream) { - if (stream != program->pcr) { - nb_streams++; +#if FORCE_PCR_FIRST + if (stream != program->pcr) +#endif + { res = stream->process(muxer, stream); - if (res) { - if (gf_m2ts_time_less(&stream->time, &time)) { + if (res && gf_m2ts_time_less_or_equal(&stream->time, &time)) { + /*if same priority schedule the earliest data*/ + if (res>=highest_priority) { + highest_priority = res; time = stream->time; stream_to_process = stream; +#if FORCE_PCR_FIRST goto send_pck; +#endif } - } else { - if (stream->ifce->caps & GF_ESI_STREAM_IS_OVER) nb_streams_done ++; } } + nb_streams++; + if ((stream->ifce->caps & GF_ESI_STREAM_IS_OVER) && (!res || stream->refresh_rate_ms) ) + nb_streams_done ++; + stream = stream->next; } program = program->next; @@ -1561,34 +1906,56 @@ send_pck: ret = muxer->null_pck; muxer->tot_pad_sent++; } - /*we still need to increase the mux time, even though we're not fixed-rate*/ - else { - gf_m2ts_time_inc(&muxer->time, 1504/*188*8*/, muxer->bit_rate); - } } else { + if (stream_to_process->tables) { gf_m2ts_mux_table_get_next_packet(stream_to_process, muxer->dst_pck); - GF_LOG(GF_LOG_DEBUG, GF_LOG_CONTAINER, ("[MPEG2-TS Muxer] Send table from PID %d at %d:%09d - mux time %d:%09d\n", stream_to_process->pid, time.sec, time.nanosec, muxer->time.sec, muxer->time.nanosec)); } else { gf_m2ts_mux_pes_get_next_packet(stream_to_process, muxer->dst_pck); - GF_LOG(GF_LOG_DEBUG, GF_LOG_CONTAINER, ("[MPEG2-TS Muxer] Send PES from PID %d at %d:%09d - mux time %d:%09d\n", stream_to_process->pid, time.sec, time.nanosec, muxer->time.sec, muxer->time.nanosec)); } + ret = muxer->dst_pck; *status = GF_M2TS_STATE_DATA; + +#ifndef GPAC_DISABLE_LOG + if ((gf_log_get_level() >= GF_LOG_DEBUG) + && (gf_log_get_tools() & GF_LOG_CONTAINER) + && muxer->fixed_rate + ) { + s32 drift; + drift= muxer->time.nanosec; + drift-=time.nanosec; + drift/=1000000; + if (muxer->time.sec!=time.sec) { + drift += (muxer->time.sec - time.sec)*1000; + assert(muxer->time.sec > time.sec); + } +// fprintf(stdout, "\nMux time - Packet PID %d time: %d ms\n", stream_to_process->pid, drift); + } + GF_LOG(GF_LOG_DEBUG, GF_LOG_CONTAINER, ("[MPEG2-TS Muxer] Send %s from PID %d at %d:%09d - mux time %d:%09d\n", stream_to_process->tables ? "table" : "PES", stream_to_process->pid, time.sec, time.nanosec, muxer->time.sec, muxer->time.nanosec)); +#endif + + + if (nb_streams && (nb_streams==nb_streams_done)) + *status = GF_M2TS_STATE_EOS; } if (ret) { muxer->tot_pck_sent++; /*increment time*/ - gf_m2ts_time_inc(&muxer->time, 1504/*188*8*/, muxer->bit_rate); + if (muxer->fixed_rate) { + gf_m2ts_time_inc(&muxer->time, 1504/*188*8*/, muxer->bit_rate); + } + /*if a stream was found, use it*/ + else if (stream_to_process) { + muxer->time = time; + } - if (muxer->real_time) { - muxer->pck_sent_over_br_window++; - if (now - muxer->last_br_time > 500) { - u64 size = 8*188*muxer->pck_sent_over_br_window*1000; - muxer->avg_br = (u32) (size/(now - muxer->last_br_time)); - muxer->last_br_time = now; - muxer->pck_sent_over_br_window=0; - } + muxer->pck_sent_over_br_window++; + if (now - muxer->last_br_time > 500) { + u64 size = 8*188*muxer->pck_sent_over_br_window*1000; + muxer->avg_br = (u32) (size/(now - muxer->last_br_time)); + muxer->last_br_time = now; + muxer->pck_sent_over_br_window=0; } } return ret; diff --git a/src/media_tools/m3u8.c b/src/media_tools/m3u8.c index 8095ebf..3916a46 100644 --- a/src/media_tools/m3u8.c +++ b/src/media_tools/m3u8.c @@ -1,727 +1,727 @@ -/** - * GPAC - Multimedia Framework C SDK - * - * Copyright (c) Jean Le Feuvre 2000-2005 - * All rights reserved - * - * This file is part of GPAC - * - * GPAC is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * GPAC 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * Written by Pierre Souchay for VizionR SAS - * - */ - -#define _GNU_SOURCE - -#include -#include -#include -#include - -/*#define MYLOG(xx) GF_LOG( GF_LOG_INFO, GF_LOG_CONTAINER, xx )*/ -//#define MYLOG(xx) printf xx -#define MYLOG(xx) - - -#if defined(WIN32) || defined(_WIN32_WCE) -#define bzero(a, b) memset(a, 0x0, b) -#endif - -GF_Err cleanup_list_of_elements(GF_List * list) { - GF_Err result = GF_OK; - if (list == NULL) - return result; - while (gf_list_count(list)) { - PlaylistElement * pl = (PlaylistElement *) gf_list_get(list, 0); - if (pl) - result |= playlist_element_del(pl); - gf_list_rem(list, 0); - } - gf_list_del(list); - return result; -} - -GF_Err playlist_element_del(PlaylistElement * e) { - GF_Err result = GF_OK; - if (e == NULL) - return result; - if (e->title) { - gf_free(e->title); - e->title = NULL; - } - if (e->codecs) { - gf_free(e->codecs); - e->codecs = NULL; - } - assert( e->url); - gf_free(e->url); - e->url = NULL; - - switch (e->elementType) { - case TYPE_UNKNOWN: - case TYPE_STREAM: - break; - case TYPE_PLAYLIST: - assert( e->element.playlist.elements); - result |= cleanup_list_of_elements(e->element.playlist.elements); - e->element.playlist.elements = NULL; - default: - break; - } - gf_free(e); - return result; -} - -Program * program_new(int programId) { - Program * program = (Program*)gf_malloc(sizeof(Program)); - if (program == NULL) { - return NULL; - } - program->programId = programId; - program->bitrates = gf_list_new(); - if (program->bitrates == NULL) { - gf_free(program); - return NULL; - } - return program; -} - -GF_Err program_del(Program * program) { - GF_Err e = GF_OK; - if (program == NULL) - return e; - if ( program->bitrates) { - while (gf_list_count(program->bitrates)) { - GF_List * l = gf_list_get(program->bitrates, 0); - cleanup_list_of_elements(l); - gf_list_rem(program->bitrates, 0); - } - gf_list_del(program->bitrates); - } - program->bitrates = NULL; - gf_free(program); - return e; -} - -/* -GF_Err playlist_del(Playlist * pl){ - GF_Err result = GF_OK; - if (pl == NULL) - return result; - if (pl->elements){ - result|= cleanup_list_of_elements(pl->elements); - pl->elements = NULL; - } - gf_free(pl); - return result; -}*/ - -PlaylistElement * playlist_element_new(PlaylistElementType elementType, const char * url, const char * title, const char *codecs, int durationInfo) { - PlaylistElement * e = gf_malloc(sizeof(PlaylistElement)); - bzero(e, sizeof(PlaylistElement)); - assert( url ); - if (e == NULL) - return NULL; - e->durationInfo = durationInfo; - e->title = (title ? gf_strdup(title) : NULL); - e->codecs = (codecs ? gf_strdup(codecs) : NULL); - assert( url); - e->url = gf_strdup(url); - e->bandwidth = 0; - e->elementType = elementType; - if (elementType == TYPE_PLAYLIST) { - e->element.playlist.is_ended = 0; - e->element.playlist.target_duration = durationInfo; - e->element.playlist.currentMediaSequence = 0; - e->element.playlist.mediaSequenceMin = 0; - e->element.playlist.mediaSequenceMax = 0; - e->element.playlist.elements = gf_list_new(); - if (NULL == (e->element.playlist.elements)) { - if (e->title) - gf_free(e->title); - if (e->codecs) - gf_free(e->codecs); - if (e->url) - gf_free(e->url); - e->url = NULL; - e->title = NULL; - e->codecs = NULL; - gf_free(e); - return NULL; - } - } else { - /* Nothing to do, stream is an empty structure */ - } - assert(e->bandwidth == 0); - assert(e->url); - return e; -} -/* -Playlist * playlist_new(){ - Playlist * pl = gf_malloc(sizeof(Playlist)); - if (pl == NULL) - return NULL; - pl->currentMediaSequence = 1; - pl->target_duration = 0; - pl->mediaSequenceMin = 0; - pl->mediaSequenceMax = 0; - pl->is_ended = 0; - pl->elements = gf_list_new(); - if (pl->elements == NULL){ - gf_free(pl); - return NULL; - } - return pl; -} - */ - -VariantPlaylist * variant_playlist_new () -{ - VariantPlaylist * pl = (VariantPlaylist*)gf_malloc( sizeof(VariantPlaylist) ); - if (pl == NULL) - return NULL; - pl->programs = gf_list_new(); - if (! pl->programs) { - gf_free( pl ); - return NULL; - } - pl->currentProgram = -1; - pl->playlistNeedsRefresh = 1; - return pl; -} - -GF_Err variant_playlist_del (VariantPlaylist * playlist) { - if (playlist == NULL) - return GF_OK; - assert( playlist->programs); - while (gf_list_count(playlist->programs)) { - Program * p = gf_list_get(playlist->programs, 0); - assert(p); - while (gf_list_count( p->bitrates )) { - PlaylistElement * pl = gf_list_get(p->bitrates, 0); - assert( pl ); - playlist_element_del(pl); - gf_list_rem(p->bitrates, 0); - } - gf_list_del(p->bitrates); - p->bitrates = NULL; - program_del(p); - gf_list_rem(playlist->programs, 0); - } - gf_list_del(playlist->programs); - playlist->programs = NULL; - gf_free(playlist); - return GF_OK; -} - -GF_Err playlist_element_dump(const PlaylistElement * e, int indent) { - int i; - GF_Err r = GF_OK; - for (i = 0 ; i < indent; i++) - printf(" "); - if (e == NULL) { - printf("NULL PlaylistElement\n"); - return r; - } - printf("PlayListElement[%p, title=%s, codecs=%s, duration=%d, bandwidth=%d, url=%s, type=%s]\n", - (void*)e, - e->title, - e->codecs, - e->durationInfo, - e->bandwidth, - e->url, - e->elementType == TYPE_STREAM ? "stream" : "playlist"); - if (TYPE_PLAYLIST == e->elementType) { - int sz; - assert( e->element.playlist.elements); - sz = gf_list_count(e->element.playlist.elements); - indent+=2; - for (i = 0 ; i < sz ; i++) { - PlaylistElement * el = gf_list_get(e->element.playlist.elements, i); - assert( el); - r|= playlist_element_dump( el, indent); - } - } - return r; -} - -GF_Err variant_playlist_dump(const VariantPlaylist * pl) { - int i, count; - GF_Err e = GF_OK; - if (pl == NULL) { - printf("VariantPlaylist = NULL\n"); - return e; - } - printf("VariantPlaylist = {\n"); - assert( pl->programs); - count = gf_list_count( pl->programs); - for (i = 0 ; i < count ; i++) { - int j, countj; - Program * p = gf_list_get(pl->programs, i); - assert( p ); - printf(" program[programId=%d]{\n", p->programId); - assert( p->bitrates ); - countj = gf_list_count(p->bitrates); - for (j = 0; j < countj; j++) { - PlaylistElement * el = gf_list_get(p->bitrates, j); - assert(el); - e |= playlist_element_dump( el, 4); - } - printf(" }\n"); - } - printf("}\n"); - return e; -} - -Program * variant_playlist_find_matching_program(const VariantPlaylist * pl, const u32 programId) { - u32 count, i; - assert( pl); - assert( pl->programs); - assert(programId >= 0); - count = gf_list_count(pl->programs); - for (i = 0 ; i < count ; i++) { - Program * cur = gf_list_get(pl->programs, i); - assert( cur ); - if (programId == cur->programId) { - /* We found the program */ - return cur; - } - } - return NULL; -} - -Program * variant_playlist_get_current_program(const VariantPlaylist * pl) { - assert( pl ); - return variant_playlist_find_matching_program(pl, pl->currentProgram); -} - - - -typedef struct _s_accumulated_attributes { - char * title; - int durationInSeconds; - int bandwidth; - int programId; - char * codecs; - int targetDurationInSeconds; - int minMediaSequence; - int currentMediaSequence; - Bool isVariantPlaylist; - Bool isPlaylistEnded; -} s_accumulated_attributes; - -static Bool safe_start_equals(const char * attribute, const char * line) { - size_t len, atlen; - if (line == NULL) - return 0; - len = strlen(line); - atlen = strlen(attribute); - if (len < atlen) - return 0; - return 0 == strncmp(attribute, line, atlen); -} - -static char ** extractAttributes(const char * name, const char * line, const int numberOfAttributes) { - int sz, i, currentAttribute, start; - char ** ret; - int len = strlen(line); - start = strlen(name); - if (len <= start) - return NULL; - if (!safe_start_equals(name, line)) - return NULL; - ret = gf_calloc((numberOfAttributes + 1 ), sizeof(char*)); - currentAttribute = 0; - for (i = start ; i <= len ; i++) { - if (line[i] == '\0' || line[i] == ',') { - u32 spaces = 0; - sz = 1 + i - start; - while (line[start+spaces] == ' ') spaces++; - ret[currentAttribute] = gf_calloc( (1+sz-spaces), sizeof(char)); - strncpy(ret[currentAttribute], &(line[start+spaces]), sz-spaces); - currentAttribute++; - start = i+1; - if (start == len) { - return ret; - } - } - } - if (currentAttribute == 0) { - gf_free(ret); - return NULL; - } - return ret; -} - -/** - * Parses the attributes and accumulate into the attributes structure - */ -static char ** parseAttributes(const char * line, s_accumulated_attributes * attributes) { - int intValue, i; - char ** ret; - char * endPtr; - char * utility; - if (line == NULL) - return NULL; - if (!safe_start_equals("#EXT", line)) - return NULL; - if (safe_start_equals("#EXT-X-ENDLIST", line)) { - attributes->isPlaylistEnded = 1; - return NULL; - } - ret = extractAttributes("#EXT-X-TARGETDURATION:", line, 1); - if (ret) { - /* #EXT-X-TARGETDURATION: */ - if (ret[0]) { - intValue = strtol(ret[0], &endPtr, 10); - if (endPtr != ret[0]) { - attributes->targetDurationInSeconds = intValue; - } - } - return ret; - } - ret = extractAttributes("#EXT-X-MEDIA-SEQUENCE:", line, 1); - if (ret) { - /* #EXT-X-MEDIA-SEQUENCE: */ - if (ret[0]) { - intValue = strtol(ret[0], &endPtr, 10); - if (endPtr != ret[0]) { - attributes->minMediaSequence = intValue; - attributes->currentMediaSequence = intValue; - } - } - return ret; - } - ret = extractAttributes("#EXTINF:", line, 2); - if (ret) { - /* #EXTINF:, */ - if (ret[0]) { - intValue = strtol(ret[0], &endPtr, 10); - if (endPtr != ret[0]) { - attributes->durationInSeconds = intValue; - } - } - if (ret[1]) { - attributes->title = gf_strdup(ret[1]); - } - return ret; - } - ret = extractAttributes("#EXT-X-KEY:", line, 2); - if (ret) { - /* #EXT-X-KEY:METHOD=<method>[,URI="<URI>"] */ - /* Not Supported for now */ - return ret; - } - ret = extractAttributes("#EXT-X-STREAM-INF:", line, 3); - if (ret) { - /* #EXT-X-STREAM-INF:[attribute=value][,attribute=value]* */ - i = 0; - attributes->isVariantPlaylist = 1; - while (ret[i] != NULL) { - if (safe_start_equals("BANDWIDTH=", ret[i])) { - utility = &(ret[i][10]); - intValue = strtol(utility, &endPtr, 10); - if (endPtr != utility) - attributes->bandwidth = intValue; - } else if (safe_start_equals("PROGRAM-ID=", ret[i])) { - utility = &(ret[i][11]); - intValue = strtol(utility, &endPtr, 10); - if (endPtr != utility) - attributes->programId = intValue; - } else if (safe_start_equals("CODECS=\"", ret[i])) { - intValue = strlen(ret[i]); - if (ret[i][intValue-1] == '"') { - attributes->codecs = gf_strdup(&(ret[i][7])); - } - } - i++; - } - return ret; - } - return NULL; -} - -#define M3U8_BUF_SIZE 2048 - -GF_Err parse_root_playlist(const char * file, VariantPlaylist ** playlist, const char * baseURL) -{ - return parse_sub_playlist(file, playlist, baseURL, NULL, NULL); -} - -GF_Err parse_sub_playlist(const char * file, VariantPlaylist ** playlist, const char * baseURL, Program * in_program, PlaylistElement *sub_playlist) -{ - int readen, readPointer, len, i, currentLineNumber; - FILE * f; - VariantPlaylist * pl; - char currentLine[M3U8_BUF_SIZE]; - char ** attributes = NULL; - s_accumulated_attributes attribs; - f = gf_f64_open(file, "rt"); - if (!f) { - GF_LOG( GF_LOG_ERROR, GF_LOG_CONTAINER,("[M3U8] Cannot Open m3u8 file %s for reading\n", file)); - return GF_SERVICE_ERROR; - } - if (*playlist == NULL) { - *playlist = variant_playlist_new(); - if (!(*playlist)) { - fclose(f); - return GF_OUT_OF_MEM; - } - } - pl = *playlist; - readen=0; - readPointer = 0; - currentLineNumber = 0; - bzero(&attribs, sizeof(s_accumulated_attributes)); - attribs.bandwidth = 0; - attribs.durationInSeconds = 0; - attribs.targetDurationInSeconds = 0; - attribs.isVariantPlaylist = 0; - attribs.isPlaylistEnded = 0; - attribs.minMediaSequence = 0; - attribs.currentMediaSequence = 0; - while (fgets(currentLine, sizeof(currentLine), f)) { - char * eof; - currentLineNumber++; - eof = strchr(currentLine, '\r'); - if (eof) - eof[0] = '\0'; - eof = strchr(currentLine, '\n'); - if (eof) - eof[0] = '\0'; - len = strlen( currentLine); - if (len < 1) - continue; - if (currentLineNumber == 1) { - /* Playlist MUST start with #EXTM3U */ - if (len < 7 || strncmp("#EXTM3U", currentLine, 7)!=0) { - fclose(f); - variant_playlist_del(pl); - GF_LOG( GF_LOG_ERROR, GF_LOG_CONTAINER, ("Failed to parse M3U8 File, it should start with #EXTM3U, but was : %s\n", currentLine)); - return GF_STREAM_NOT_FOUND; - } - continue; - } - if (currentLine[0] == '#') { - /* A comment or a directive */ - if (strncmp("#EXT", currentLine, 4)==0) { - attributes = parseAttributes(currentLine, &attribs); - if (attributes == NULL) { - MYLOG(("Comment at line %d : %s\n", currentLineNumber, currentLine)); - } else { - MYLOG(("Directive at line %d: \"%s\", attributes=", currentLineNumber, currentLine)); - i = 0; - while (attributes[i] != NULL) { - MYLOG((" [%d]='%s'", i, attributes[i])); - gf_free(attributes[i]); - attributes[i] = NULL; - i++; - } - MYLOG(("\n")); - gf_free(attributes); - attributes = NULL; - } - if (attribs.isPlaylistEnded) { - pl->playlistNeedsRefresh = 0; - } - } - } else { - char * fullURL = currentLine; - //printf("Line %d: '%s'\n", currentLineNumber, currentLine); - - if (gf_url_is_local(currentLine)) { - /* - if (gf_url_is_local(baseURL)){ - int num_chars = -1; - if (baseURL[strlen(baseURL)-1] == '/'){ - num_chars = asprintf(&fullURL, "%s%s", baseURL, currentLine); - } else { - num_chars = asprintf(&fullURL, "%s/%s", baseURL, currentLine); - } - if (num_chars < 0 || fullURL == NULL){ - variant_playlist_del(*playlist); - playlist = NULL; - return GF_OUT_OF_MEM; - } - } else */ { - fullURL = gf_url_concatenate(baseURL, currentLine); - } - assert( fullURL ); - /*printf("*** calculated full path = %s from %s and %s\n", fullURL, currentLine, baseURL);*/ - } - { - u32 count; - PlaylistElement * currentPlayList = sub_playlist; - /* First, we have to find the matching program */ - Program * program = in_program; - if (!in_program) program = variant_playlist_find_matching_program(pl, attribs.programId); - /* We did not found the program, we create it */ - if (program == NULL) { - program = program_new(attribs.programId); - if (program == NULL) { - /* OUT of memory */ - variant_playlist_del(*playlist); - fclose(f); - playlist = NULL; - return GF_OUT_OF_MEM; - } - gf_list_add(pl->programs, program); - if (pl->currentProgram < 0) - pl->currentProgram = program->programId; - } - - /* OK, we have a program, we have to choose the elements with same bandwidth */ - assert( program ); - assert( program->bitrates); - count = gf_list_count( program->bitrates); - - if (!currentPlayList) { - for (i = 0; i < (s32) count; i++) { - PlaylistElement * itPlayListElement = gf_list_get(program->bitrates, i); - assert( itPlayListElement ); - if (itPlayListElement->bandwidth == attribs.bandwidth) { - currentPlayList = itPlayListElement; - break; - } - } - } - - if (attribs.isVariantPlaylist) { - /* We are the Variant Playlist */ - if (currentPlayList != NULL) { - /* should not happen, it means we redefine something previsouly added */ - //assert( 0 ); - } - currentPlayList = playlist_element_new( - TYPE_UNKNOWN, - fullURL, - attribs.title, - attribs.codecs, - attribs.durationInSeconds); - if (currentPlayList == NULL) { - /* OUT of memory */ - variant_playlist_del(*playlist); - playlist = NULL; - fclose(f); - return GF_OUT_OF_MEM; - } - assert( fullURL); - currentPlayList->url = gf_strdup(fullURL); - currentPlayList->title = attribs.title ? gf_strdup(attribs.title):NULL; - currentPlayList->codecs = attribs.codecs ? gf_strdup(attribs.codecs):NULL; - gf_list_add(program->bitrates, currentPlayList); - } else { - /* Normal Playlist */ - assert( pl->programs); - if (currentPlayList == NULL) { - /* This is in facts a "normal" playlist without any element in it */ - PlaylistElement * subElement; - assert(baseURL); - currentPlayList = playlist_element_new( - TYPE_PLAYLIST, - baseURL, - attribs.title, - attribs.codecs, - attribs.durationInSeconds); - if (currentPlayList == NULL) { - /* OUT of memory */ - variant_playlist_del(*playlist); - playlist = NULL; - fclose(f); - return GF_OUT_OF_MEM; - } - assert(currentPlayList->element.playlist.elements); - assert( fullURL); - assert( currentPlayList->url); - currentPlayList->title = NULL; - currentPlayList->codecs = NULL; - subElement = playlist_element_new( - TYPE_UNKNOWN, - fullURL, - attribs.title, - attribs.codecs, - attribs.durationInSeconds); - if (subElement == NULL) { - variant_playlist_del(*playlist); - playlist_element_del(currentPlayList); - playlist = NULL; - fclose(f); - return GF_OUT_OF_MEM; - } - gf_list_add(currentPlayList->element.playlist.elements, subElement); - gf_list_add(program->bitrates, currentPlayList); - assert( program ); - assert( program->bitrates); - assert( currentPlayList); - - } else { - PlaylistElement * subElement = playlist_element_new( - TYPE_UNKNOWN, - fullURL, - attribs.title, - attribs.codecs, - attribs.durationInSeconds); - if (currentPlayList->elementType != TYPE_PLAYLIST) { - currentPlayList->elementType = TYPE_PLAYLIST; - if (!currentPlayList->element.playlist.elements) - currentPlayList->element.playlist.elements = gf_list_new(); - } - if (subElement == NULL) { - variant_playlist_del(*playlist); - playlist_element_del(currentPlayList); - playlist = NULL; - fclose(f); - return GF_OUT_OF_MEM; - } - gf_list_add(currentPlayList->element.playlist.elements, subElement); - } - } - - currentPlayList->element.playlist.currentMediaSequence = attribs.currentMediaSequence ; - /* We first set the default duration for element, aka targetDuration */ - if (attribs.targetDurationInSeconds > 0) { - currentPlayList->element.playlist.target_duration = attribs.targetDurationInSeconds; - currentPlayList->durationInfo = attribs.targetDurationInSeconds; - } - if (attribs.durationInSeconds) { - currentPlayList->durationInfo = attribs.durationInSeconds; - } - currentPlayList->element.playlist.mediaSequenceMin = attribs.minMediaSequence; - currentPlayList->element.playlist.mediaSequenceMax = attribs.currentMediaSequence++; - if (attribs.bandwidth > 1) - currentPlayList->bandwidth = attribs.bandwidth; - if (attribs.isPlaylistEnded) - currentPlayList->element.playlist.is_ended = 1; - } - /* Cleanup all line-specific fields */ - if (attribs.title) { - gf_free(attribs.title); - attribs.title = NULL; - } - attribs.durationInSeconds = 0; - attribs.bandwidth = 0; - attribs.programId = 0; - if (attribs.codecs != NULL) { - gf_free(attribs.codecs); - attribs.codecs = NULL; - } - if (fullURL != currentLine) { - gf_free(fullURL); - } - } - } - fclose(f); - return GF_OK; -} +/** +* GPAC - Multimedia Framework C SDK +* +* Copyright (c) Jean Le Feuvre 2000-2005 +* All rights reserved +* +* This file is part of GPAC +* +* GPAC is free software; you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation; either version 2, or (at your option) +* any later version. +* +* GPAC 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 Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with this library; see the file COPYING. If not, write to +* the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +* Written by Pierre Souchay for VizionR SAS +* +*/ + +#define _GNU_SOURCE + +#include <gpac/internal/m3u8.h> +#include <string.h> +#include <stdio.h> +#include <gpac/network.h> + +/*#define MYLOG(xx) GF_LOG( GF_LOG_INFO, GF_LOG_CONTAINER, xx )*/ +//#define MYLOG(xx) printf xx +#define MYLOG(xx) + + +#if defined(WIN32) || defined(_WIN32_WCE) +#define bzero(a, b) memset(a, 0x0, b) +#endif + +GF_Err cleanup_list_of_elements(GF_List * list) { + GF_Err result = GF_OK; + if (list == NULL) + return result; + while (gf_list_count(list)) { + PlaylistElement * pl = (PlaylistElement *) gf_list_get(list, 0); + if (pl) + result |= playlist_element_del(pl); + gf_list_rem(list, 0); + } + gf_list_del(list); + return result; +} + +GF_Err playlist_element_del(PlaylistElement * e) { + GF_Err result = GF_OK; + if (e == NULL) + return result; + if (e->title) { + gf_free(e->title); + e->title = NULL; + } + if (e->codecs) { + gf_free(e->codecs); + e->codecs = NULL; + } + assert( e->url); + gf_free(e->url); + e->url = NULL; + + switch (e->elementType) { + case TYPE_UNKNOWN: + case TYPE_STREAM: + break; + case TYPE_PLAYLIST: + assert( e->element.playlist.elements); + result |= cleanup_list_of_elements(e->element.playlist.elements); + e->element.playlist.elements = NULL; + default: + break; + } + gf_free(e); + return result; +} + +Program * program_new(int programId) { + Program * program = (Program*)gf_malloc(sizeof(Program)); + if (program == NULL) { + return NULL; + } + program->programId = programId; + program->bitrates = gf_list_new(); + if (program->bitrates == NULL) { + gf_free(program); + return NULL; + } + return program; +} + +GF_Err program_del(Program * program) { + GF_Err e = GF_OK; + if (program == NULL) + return e; + if ( program->bitrates) { + while (gf_list_count(program->bitrates)) { + GF_List * l = gf_list_get(program->bitrates, 0); + cleanup_list_of_elements(l); + gf_list_rem(program->bitrates, 0); + } + gf_list_del(program->bitrates); + } + program->bitrates = NULL; + gf_free(program); + return e; +} + +/* +GF_Err playlist_del(Playlist * pl){ +GF_Err result = GF_OK; +if (pl == NULL) +return result; +if (pl->elements){ +result|= cleanup_list_of_elements(pl->elements); +pl->elements = NULL; +} +gf_free(pl); +return result; +}*/ + +PlaylistElement * playlist_element_new(PlaylistElementType elementType, const char * url, const char * title, const char *codecs, int durationInfo) { + PlaylistElement * e = gf_malloc(sizeof(PlaylistElement)); + bzero(e, sizeof(PlaylistElement)); + assert( url ); + if (e == NULL) + return NULL; + e->durationInfo = durationInfo; + e->title = (title ? gf_strdup(title) : NULL); + e->codecs = (codecs ? gf_strdup(codecs) : NULL); + assert( url); + e->url = gf_strdup(url); + e->bandwidth = 0; + e->elementType = elementType; + if (elementType == TYPE_PLAYLIST) { + e->element.playlist.is_ended = 0; + e->element.playlist.target_duration = durationInfo; + e->element.playlist.currentMediaSequence = 0; + e->element.playlist.mediaSequenceMin = 0; + e->element.playlist.mediaSequenceMax = 0; + e->element.playlist.elements = gf_list_new(); + if (NULL == (e->element.playlist.elements)) { + if (e->title) + gf_free(e->title); + if (e->codecs) + gf_free(e->codecs); + if (e->url) + gf_free(e->url); + e->url = NULL; + e->title = NULL; + e->codecs = NULL; + gf_free(e); + return NULL; + } + } else { + /* Nothing to do, stream is an empty structure */ + } + assert(e->bandwidth == 0); + assert(e->url); + return e; +} +/* +Playlist * playlist_new(){ +Playlist * pl = gf_malloc(sizeof(Playlist)); +if (pl == NULL) +return NULL; +pl->currentMediaSequence = 1; +pl->target_duration = 0; +pl->mediaSequenceMin = 0; +pl->mediaSequenceMax = 0; +pl->is_ended = 0; +pl->elements = gf_list_new(); +if (pl->elements == NULL){ +gf_free(pl); +return NULL; +} +return pl; +} +*/ + +VariantPlaylist * variant_playlist_new () +{ + VariantPlaylist * pl = (VariantPlaylist*)gf_malloc( sizeof(VariantPlaylist) ); + if (pl == NULL) + return NULL; + pl->programs = gf_list_new(); + if (! pl->programs) { + gf_free( pl ); + return NULL; + } + pl->currentProgram = -1; + pl->playlistNeedsRefresh = 1; + return pl; +} + +GF_Err variant_playlist_del (VariantPlaylist * playlist) { + if (playlist == NULL) + return GF_OK; + assert( playlist->programs); + while (gf_list_count(playlist->programs)) { + Program * p = gf_list_get(playlist->programs, 0); + assert(p); + while (gf_list_count( p->bitrates )) { + PlaylistElement * pl = gf_list_get(p->bitrates, 0); + assert( pl ); + playlist_element_del(pl); + gf_list_rem(p->bitrates, 0); + } + gf_list_del(p->bitrates); + p->bitrates = NULL; + program_del(p); + gf_list_rem(playlist->programs, 0); + } + gf_list_del(playlist->programs); + playlist->programs = NULL; + gf_free(playlist); + return GF_OK; +} + +GF_Err playlist_element_dump(const PlaylistElement * e, int indent) { + int i; + GF_Err r = GF_OK; + for (i = 0 ; i < indent; i++) + printf(" "); + if (e == NULL) { + printf("NULL PlaylistElement\n"); + return r; + } + printf("PlayListElement[%p, title=%s, codecs=%s, duration=%d, bandwidth=%d, url=%s, type=%s]\n", + (void*)e, + e->title, + e->codecs, + e->durationInfo, + e->bandwidth, + e->url, + e->elementType == TYPE_STREAM ? "stream" : "playlist"); + if (TYPE_PLAYLIST == e->elementType) { + int sz; + assert( e->element.playlist.elements); + sz = gf_list_count(e->element.playlist.elements); + indent+=2; + for (i = 0 ; i < sz ; i++) { + PlaylistElement * el = gf_list_get(e->element.playlist.elements, i); + assert( el); + r|= playlist_element_dump( el, indent); + } + } + return r; +} + +GF_Err variant_playlist_dump(const VariantPlaylist * pl) { + int i, count; + GF_Err e = GF_OK; + if (pl == NULL) { + printf("VariantPlaylist = NULL\n"); + return e; + } + printf("VariantPlaylist = {\n"); + assert( pl->programs); + count = gf_list_count( pl->programs); + for (i = 0 ; i < count ; i++) { + int j, countj; + Program * p = gf_list_get(pl->programs, i); + assert( p ); + printf(" program[programId=%d]{\n", p->programId); + assert( p->bitrates ); + countj = gf_list_count(p->bitrates); + for (j = 0; j < countj; j++) { + PlaylistElement * el = gf_list_get(p->bitrates, j); + assert(el); + e |= playlist_element_dump( el, 4); + } + printf(" }\n"); + } + printf("}\n"); + return e; +} + +Program * variant_playlist_find_matching_program(const VariantPlaylist * pl, const u32 programId) { + u32 count, i; + assert( pl); + assert( pl->programs); + assert(programId >= 0); + count = gf_list_count(pl->programs); + for (i = 0 ; i < count ; i++) { + Program * cur = gf_list_get(pl->programs, i); + assert( cur ); + if (programId == cur->programId) { + /* We found the program */ + return cur; + } + } + return NULL; +} + +Program * variant_playlist_get_current_program(const VariantPlaylist * pl) { + assert( pl ); + return variant_playlist_find_matching_program(pl, pl->currentProgram); +} + + + +typedef struct _s_accumulated_attributes { + char * title; + int durationInSeconds; + int bandwidth; + int programId; + char * codecs; + int targetDurationInSeconds; + int minMediaSequence; + int currentMediaSequence; + Bool isVariantPlaylist; + Bool isPlaylistEnded; +} s_accumulated_attributes; + +static Bool safe_start_equals(const char * attribute, const char * line) { + size_t len, atlen; + if (line == NULL) + return 0; + len = strlen(line); + atlen = strlen(attribute); + if (len < atlen) + return 0; + return 0 == strncmp(attribute, line, atlen); +} + +static char ** extractAttributes(const char * name, const char * line, const int numberOfAttributes) { + int sz, i, currentAttribute, start; + char ** ret; + int len = strlen(line); + start = strlen(name); + if (len <= start) + return NULL; + if (!safe_start_equals(name, line)) + return NULL; + ret = gf_calloc((numberOfAttributes + 1 ), sizeof(char*)); + currentAttribute = 0; + for (i = start ; i <= len ; i++) { + if (line[i] == '\0' || line[i] == ',') { + u32 spaces = 0; + sz = 1 + i - start; + while (line[start+spaces] == ' ') spaces++; + ret[currentAttribute] = gf_calloc( (1+sz-spaces), sizeof(char)); + strncpy(ret[currentAttribute], &(line[start+spaces]), sz-spaces); + currentAttribute++; + start = i+1; + if (start == len) { + return ret; + } + } + } + if (currentAttribute == 0) { + gf_free(ret); + return NULL; + } + return ret; +} + +/** +* Parses the attributes and accumulate into the attributes structure +*/ +static char ** parseAttributes(const char * line, s_accumulated_attributes * attributes) { + int intValue, i; + char ** ret; + char * endPtr; + char * utility; + if (line == NULL) + return NULL; + if (!safe_start_equals("#EXT", line)) + return NULL; + if (safe_start_equals("#EXT-X-ENDLIST", line)) { + attributes->isPlaylistEnded = 1; + return NULL; + } + ret = extractAttributes("#EXT-X-TARGETDURATION:", line, 1); + if (ret) { + /* #EXT-X-TARGETDURATION:<seconds> */ + if (ret[0]) { + intValue = strtol(ret[0], &endPtr, 10); + if (endPtr != ret[0]) { + attributes->targetDurationInSeconds = intValue; + } + } + return ret; + } + ret = extractAttributes("#EXT-X-MEDIA-SEQUENCE:", line, 1); + if (ret) { + /* #EXT-X-MEDIA-SEQUENCE:<number> */ + if (ret[0]) { + intValue = strtol(ret[0], &endPtr, 10); + if (endPtr != ret[0]) { + attributes->minMediaSequence = intValue; + attributes->currentMediaSequence = intValue; + } + } + return ret; + } + ret = extractAttributes("#EXTINF:", line, 2); + if (ret) { + /* #EXTINF:<duration>,<title> */ + if (ret[0]) { + intValue = strtol(ret[0], &endPtr, 10); + if (endPtr != ret[0]) { + attributes->durationInSeconds = intValue; + } + } + if (ret[1]) { + attributes->title = gf_strdup(ret[1]); + } + return ret; + } + ret = extractAttributes("#EXT-X-KEY:", line, 2); + if (ret) { + /* #EXT-X-KEY:METHOD=<method>[,URI="<URI>"] */ + /* Not Supported for now */ + return ret; + } + ret = extractAttributes("#EXT-X-STREAM-INF:", line, 3); + if (ret) { + /* #EXT-X-STREAM-INF:[attribute=value][,attribute=value]* */ + i = 0; + attributes->isVariantPlaylist = 1; + while (ret[i] != NULL) { + if (safe_start_equals("BANDWIDTH=", ret[i])) { + utility = &(ret[i][10]); + intValue = strtol(utility, &endPtr, 10); + if (endPtr != utility) + attributes->bandwidth = intValue; + } else if (safe_start_equals("PROGRAM-ID=", ret[i])) { + utility = &(ret[i][11]); + intValue = strtol(utility, &endPtr, 10); + if (endPtr != utility) + attributes->programId = intValue; + } else if (safe_start_equals("CODECS=\"", ret[i])) { + intValue = strlen(ret[i]); + if (ret[i][intValue-1] == '"') { + attributes->codecs = gf_strdup(&(ret[i][7])); + } + } + i++; + } + return ret; + } + return NULL; +} + +#define M3U8_BUF_SIZE 2048 + +GF_Err parse_root_playlist(const char * file, VariantPlaylist ** playlist, const char * baseURL) +{ + return parse_sub_playlist(file, playlist, baseURL, NULL, NULL); +} + +GF_Err parse_sub_playlist(const char * file, VariantPlaylist ** playlist, const char * baseURL, Program * in_program, PlaylistElement *sub_playlist) +{ + int readen, readPointer, len, i, currentLineNumber; + FILE * f; + VariantPlaylist * pl; + char currentLine[M3U8_BUF_SIZE]; + char ** attributes = NULL; + s_accumulated_attributes attribs; + f = gf_f64_open(file, "rt"); + if (!f) { + GF_LOG( GF_LOG_ERROR, GF_LOG_CONTAINER,("[M3U8] Cannot Open m3u8 file %s for reading\n", file)); + return GF_SERVICE_ERROR; + } + if (*playlist == NULL) { + *playlist = variant_playlist_new(); + if (!(*playlist)) { + fclose(f); + return GF_OUT_OF_MEM; + } + } + pl = *playlist; + readen=0; + readPointer = 0; + currentLineNumber = 0; + bzero(&attribs, sizeof(s_accumulated_attributes)); + attribs.bandwidth = 0; + attribs.durationInSeconds = 0; + attribs.targetDurationInSeconds = 0; + attribs.isVariantPlaylist = 0; + attribs.isPlaylistEnded = 0; + attribs.minMediaSequence = 0; + attribs.currentMediaSequence = 0; + while (fgets(currentLine, sizeof(currentLine), f)) { + char * eof; + currentLineNumber++; + eof = strchr(currentLine, '\r'); + if (eof) + eof[0] = '\0'; + eof = strchr(currentLine, '\n'); + if (eof) + eof[0] = '\0'; + len = strlen( currentLine); + if (len < 1) + continue; + if (currentLineNumber == 1) { + /* Playlist MUST start with #EXTM3U */ + if (len < 7 || strncmp("#EXTM3U", currentLine, 7)!=0) { + fclose(f); + variant_playlist_del(pl); + GF_LOG( GF_LOG_ERROR, GF_LOG_CONTAINER, ("Failed to parse M3U8 File, it should start with #EXTM3U, but was : %s\n", currentLine)); + return GF_STREAM_NOT_FOUND; + } + continue; + } + if (currentLine[0] == '#') { + /* A comment or a directive */ + if (strncmp("#EXT", currentLine, 4)==0) { + attributes = parseAttributes(currentLine, &attribs); + if (attributes == NULL) { + MYLOG(("Comment at line %d : %s\n", currentLineNumber, currentLine)); + } else { + MYLOG(("Directive at line %d: \"%s\", attributes=", currentLineNumber, currentLine)); + i = 0; + while (attributes[i] != NULL) { + MYLOG((" [%d]='%s'", i, attributes[i])); + gf_free(attributes[i]); + attributes[i] = NULL; + i++; + } + MYLOG(("\n")); + gf_free(attributes); + attributes = NULL; + } + if (attribs.isPlaylistEnded) { + pl->playlistNeedsRefresh = 0; + } + } + } else { + char * fullURL = currentLine; + //printf("Line %d: '%s'\n", currentLineNumber, currentLine); + + if (gf_url_is_local(currentLine)) { + /* + if (gf_url_is_local(baseURL)){ + int num_chars = -1; + if (baseURL[strlen(baseURL)-1] == '/'){ + num_chars = asprintf(&fullURL, "%s%s", baseURL, currentLine); + } else { + num_chars = asprintf(&fullURL, "%s/%s", baseURL, currentLine); + } + if (num_chars < 0 || fullURL == NULL){ + variant_playlist_del(*playlist); + playlist = NULL; + return GF_OUT_OF_MEM; + } + } else */ { + fullURL = gf_url_concatenate(baseURL, currentLine); + } + assert( fullURL ); + /*printf("*** calculated full path = %s from %s and %s\n", fullURL, currentLine, baseURL);*/ + } + { + u32 count; + PlaylistElement * currentPlayList = sub_playlist; + /* First, we have to find the matching program */ + Program * program = in_program; + if (!in_program) program = variant_playlist_find_matching_program(pl, attribs.programId); + /* We did not found the program, we create it */ + if (program == NULL) { + program = program_new(attribs.programId); + if (program == NULL) { + /* OUT of memory */ + variant_playlist_del(*playlist); + fclose(f); + playlist = NULL; + return GF_OUT_OF_MEM; + } + gf_list_add(pl->programs, program); + if (pl->currentProgram < 0) + pl->currentProgram = program->programId; + } + + /* OK, we have a program, we have to choose the elements with same bandwidth */ + assert( program ); + assert( program->bitrates); + count = gf_list_count( program->bitrates); + + if (!currentPlayList) { + for (i = 0; i < (s32) count; i++) { + PlaylistElement * itPlayListElement = gf_list_get(program->bitrates, i); + assert( itPlayListElement ); + if (itPlayListElement->bandwidth == attribs.bandwidth) { + currentPlayList = itPlayListElement; + break; + } + } + } + + if (attribs.isVariantPlaylist) { + /* We are the Variant Playlist */ + if (currentPlayList != NULL) { + /* should not happen, it means we redefine something previsouly added */ + //assert( 0 ); + } + currentPlayList = playlist_element_new( + TYPE_UNKNOWN, + fullURL, + attribs.title, + attribs.codecs, + attribs.durationInSeconds); + if (currentPlayList == NULL) { + /* OUT of memory */ + variant_playlist_del(*playlist); + playlist = NULL; + fclose(f); + return GF_OUT_OF_MEM; + } + assert( fullURL); + currentPlayList->url = gf_strdup(fullURL); + currentPlayList->title = attribs.title ? gf_strdup(attribs.title):NULL; + currentPlayList->codecs = attribs.codecs ? gf_strdup(attribs.codecs):NULL; + gf_list_add(program->bitrates, currentPlayList); + } else { + /* Normal Playlist */ + assert( pl->programs); + if (currentPlayList == NULL) { + /* This is in facts a "normal" playlist without any element in it */ + PlaylistElement * subElement; + assert(baseURL); + currentPlayList = playlist_element_new( + TYPE_PLAYLIST, + baseURL, + attribs.title, + attribs.codecs, + attribs.durationInSeconds); + if (currentPlayList == NULL) { + /* OUT of memory */ + variant_playlist_del(*playlist); + playlist = NULL; + fclose(f); + return GF_OUT_OF_MEM; + } + assert(currentPlayList->element.playlist.elements); + assert( fullURL); + assert( currentPlayList->url); + currentPlayList->title = NULL; + currentPlayList->codecs = NULL; + subElement = playlist_element_new( + TYPE_UNKNOWN, + fullURL, + attribs.title, + attribs.codecs, + attribs.durationInSeconds); + if (subElement == NULL) { + variant_playlist_del(*playlist); + playlist_element_del(currentPlayList); + playlist = NULL; + fclose(f); + return GF_OUT_OF_MEM; + } + gf_list_add(currentPlayList->element.playlist.elements, subElement); + gf_list_add(program->bitrates, currentPlayList); + assert( program ); + assert( program->bitrates); + assert( currentPlayList); + + } else { + PlaylistElement * subElement = playlist_element_new( + TYPE_UNKNOWN, + fullURL, + attribs.title, + attribs.codecs, + attribs.durationInSeconds); + if (currentPlayList->elementType != TYPE_PLAYLIST) { + currentPlayList->elementType = TYPE_PLAYLIST; + if (!currentPlayList->element.playlist.elements) + currentPlayList->element.playlist.elements = gf_list_new(); + } + if (subElement == NULL) { + variant_playlist_del(*playlist); + playlist_element_del(currentPlayList); + playlist = NULL; + fclose(f); + return GF_OUT_OF_MEM; + } + gf_list_add(currentPlayList->element.playlist.elements, subElement); + } + } + + currentPlayList->element.playlist.currentMediaSequence = attribs.currentMediaSequence ; + /* We first set the default duration for element, aka targetDuration */ + if (attribs.targetDurationInSeconds > 0) { + currentPlayList->element.playlist.target_duration = attribs.targetDurationInSeconds; + currentPlayList->durationInfo = attribs.targetDurationInSeconds; + } + if (attribs.durationInSeconds) { + currentPlayList->durationInfo = attribs.durationInSeconds; + } + currentPlayList->element.playlist.mediaSequenceMin = attribs.minMediaSequence; + currentPlayList->element.playlist.mediaSequenceMax = attribs.currentMediaSequence++; + if (attribs.bandwidth > 1) + currentPlayList->bandwidth = attribs.bandwidth; + if (attribs.isPlaylistEnded) + currentPlayList->element.playlist.is_ended = 1; + } + /* Cleanup all line-specific fields */ + if (attribs.title) { + gf_free(attribs.title); + attribs.title = NULL; + } + attribs.durationInSeconds = 0; + attribs.bandwidth = 0; + attribs.programId = 0; + if (attribs.codecs != NULL) { + gf_free(attribs.codecs); + attribs.codecs = NULL; + } + if (fullURL != currentLine) { + gf_free(fullURL); + } + } + } + fclose(f); + return GF_OK; +} diff --git a/src/media_tools/media_export.c b/src/media_tools/media_export.c index f60ba62..c907da8 100644 --- a/src/media_tools/media_export.c +++ b/src/media_tools/media_export.c @@ -1717,7 +1717,7 @@ GF_Err gf_media_export_nhml(GF_MediaExporter *dumper, Bool dims_doc) samp->data[pos+2+size] = 0; - fprintf(nhml, "<DIMSUnit time=\""LLD"\"", LLD_CAST samp->DTS); + fprintf(nhml, "<DIMSUnit time=\""LLU"\"", LLU_CAST samp->DTS); /*DIMS flags*/ if (flags & GF_DIMS_UNIT_S) fprintf(nhml, " is-Scene=\"yes\""); if (flags & GF_DIMS_UNIT_M) fprintf(nhml, " is-RAP=\"yes\""); @@ -1764,8 +1764,8 @@ GF_Err gf_media_export_nhml(GF_MediaExporter *dumper, Bool dims_doc) gf_bs_del(bs); } else { - fprintf(nhml, "<NHNTSample DTS=\""LLD"\" dataLength=\"%d\" ", LLD_CAST samp->DTS, samp->dataLength); - if (full_dump || samp->CTS_Offset) fprintf(nhml, "CTSOffset=\"%d\" ", samp->CTS_Offset); + fprintf(nhml, "<NHNTSample DTS=\""LLU"\" dataLength=\"%d\" ", LLU_CAST samp->DTS, samp->dataLength); + if (full_dump || samp->CTS_Offset) fprintf(nhml, "CTSOffset=\"%u\" ", samp->CTS_Offset); if (samp->IsRAP==1) fprintf(nhml, "isRAP=\"yes\" "); else if (samp->IsRAP==2) fprintf(nhml, "isSyncShadow=\"yes\" "); else if (full_dump) fprintf(nhml, "isRAP=\"no\" "); diff --git a/src/media_tools/media_import.c b/src/media_tools/media_import.c index 7b0cd80..b76406e 100644 --- a/src/media_tools/media_import.c +++ b/src/media_tools/media_import.c @@ -34,9 +34,8 @@ /*since 0.2.2, we use zlib for xmt/x3d reading to handle gz files*/ #include <zlib.h> -#ifndef GPAC_DISABLE_MEDIA_IMPORT -#define GF_IMPORT_DEFAULT_FPS 25.0 +#ifndef GPAC_DISABLE_MEDIA_IMPORT GF_Err gf_import_message(GF_MediaImporter *import, GF_Err e, char *format, ...) @@ -793,7 +792,8 @@ static GF_Err gf_import_cmp(GF_MediaImporter *import, Bool mpeg12) max_size = 4096; samp->data = (char*)gf_malloc(sizeof(char)*max_size); /*no auto frame-rate detection*/ - if (import->video_fps == 10000.0) import->video_fps = 25.0; + if (import->video_fps == GF_IMPORT_AUTO_FPS) + import->video_fps = GF_IMPORT_DEFAULT_FPS; PL = dsi.VideoPL; if (!PL) { @@ -1104,7 +1104,8 @@ static GF_Err gf_import_avi_video(GF_MediaImporter *import) goto exit; } /*no auto frame-rate detection*/ - if (import->video_fps == 10000.0) import->video_fps = 25.0; + if (import->video_fps == GF_IMPORT_AUTO_FPS) + import->video_fps = GF_IMPORT_DEFAULT_FPS; FPS = AVI_frame_rate(in); if (import->video_fps) FPS = (Double) import->video_fps; @@ -1703,6 +1704,9 @@ GF_Err gf_import_isomedia(GF_MediaImporter *import) } if (e) goto exit; import->final_trackID = gf_isom_get_track_id(import->dest, track); + if (import->esd && import->esd->dependsOnESID) { + gf_isom_set_track_reference(import->dest, track, GF_ISOM_REF_DECODE, import->esd->dependsOnESID); + } switch (mtype) { case GF_ISOM_MEDIA_VISUAL: @@ -1810,7 +1814,8 @@ GF_Err gf_import_mpeg_ps_video(GF_MediaImporter *import) return gf_import_message(import, GF_NOT_SUPPORTED, "Cannot use data referencing with MPEG-1/2 files"); /*no auto frame-rate detection*/ - if (import->video_fps == 10000.0) import->video_fps = 25.0; + if (import->video_fps == GF_IMPORT_AUTO_FPS) + import->video_fps = GF_IMPORT_DEFAULT_FPS; ps = mpeg2ps_init(import->in_name); if (!ps) return gf_import_message(import, GF_NON_COMPLIANT_BITSTREAM, "Failed to open MPEG file %s", import->in_name); @@ -2835,10 +2840,11 @@ GF_Err gf_import_nhml_dims(GF_MediaImporter *import, Bool dims_doc) while ( (att = (GF_XMLAttribute *)gf_list_enum(node->attributes, &j))) { if (!stricmp(att->name, "DTS") || !stricmp(att->name, "time")) { u32 h, m, s, ms; - if (sscanf(att->value, "%u:%u:%u.%u", &h, &m, &s, &ms) == 4) { - samp->DTS = (u64) ( (Double) ( ((h*3600 + m*60 + s)*1000 + ms) / 1000.0) * timescale ); - } else { - samp->DTS = atoi(att->value); + u64 dst_val; + if (strchr(att->value, ':') && sscanf(att->value, "%u:%u:%u.%u", &h, &m, &s, &ms) == 4) { + samp->DTS = (u64) ( (Double) ( ((h*3600.0 + m*60.0 + s)*1000 + ms) / 1000.0) * timescale ); + } else if (sscanf(att->value, ""LLU, &dst_val)==1) { + samp->DTS = dst_val; } } else if (!stricmp(att->name, "CTSOffset")) samp->CTS_Offset = atoi(att->value); @@ -3584,7 +3590,8 @@ GF_Err gf_import_h263(GF_MediaImporter *import) goto exit; } /*no auto frame-rate detection*/ - if (import->video_fps == 10000.0) import->video_fps = 25.0; + if (import->video_fps == GF_IMPORT_AUTO_FPS) + import->video_fps = GF_IMPORT_DEFAULT_FPS; FPS = (Double) import->video_fps; /*for H263 we use 15 fps by default!!*/ @@ -3688,11 +3695,12 @@ exit: fclose(mdia); return e; } -static void avc_rewrite_samples(GF_ISOFile *file, u32 track, u32 prev_size, u32 new_size) + +GF_Err gf_media_avc_rewrite_samples(GF_ISOFile *file, u32 track, u32 prev_size, u32 new_size) { u32 i, count, di, remain, msize; char *buffer; - + msize = 4096; buffer = (char*)gf_malloc(sizeof(char)*msize); count = gf_isom_get_sample_count(file, track); @@ -3723,6 +3731,7 @@ static void avc_rewrite_samples(GF_ISOFile *file, u32 track, u32 prev_size, u32 gf_isom_sample_del(&samp); } gf_free(buffer); + return GF_OK; } #ifndef GPAC_DISABLE_AV_PARSERS @@ -3740,12 +3749,13 @@ GF_Err gf_import_h264(GF_MediaImporter *import) GF_AVCConfig *avccfg, *svccfg, *dstcfg; GF_BitStream *bs; GF_BitStream *sample_data; - Bool flush_sample, sample_is_rap, first_nal, slice_is_ref, has_cts_offset, detect_fps, is_paff; + Bool flush_sample, sample_is_rap, first_nal, slice_is_ref, has_cts_offset, detect_fps, is_paff, set_subsamples; u32 ref_frame, pred_frame, timescale, copy_size, size_length, dts_inc; s32 last_poc, max_last_poc, max_last_b_poc, poc_diff, prev_last_poc, min_poc, poc_shift; Bool first_avc; u32 last_svc_sps; - u32 prev_nalu_prefix_size; + u32 prev_nalu_prefix_size, res_prev_nalu_prefix; + u8 priority_prev_nalu_prefix; Double FPS; char *buffer; u32 max_size = 4096; @@ -3758,16 +3768,21 @@ GF_Err gf_import_h264(GF_MediaImporter *import) return GF_OK; } + set_subsamples = (import->flags & GF_IMPORT_SET_SUBSAMPLES) ? 1 : 0; + mdia = gf_f64_open(import->in_name, "rb"); if (!mdia) return gf_import_message(import, GF_URL_ERROR, "Cannot find file %s", import->in_name); detect_fps = 1; - if (import->video_fps == 10000.0) { - import->video_fps = 25.0; - } - FPS = (Double) import->video_fps; - if (!FPS) FPS = GF_IMPORT_DEFAULT_FPS; + if (!FPS) { + FPS = GF_IMPORT_DEFAULT_FPS; + } else { + if (import->video_fps == GF_IMPORT_AUTO_FPS) + import->video_fps = GF_IMPORT_DEFAULT_FPS; /*fps=auto is handled as auto-detection is h264*/ + else + detect_fps = 0; /*fps is forced by the caller*/ + } get_video_timing(FPS, ×cale, &dts_inc); poc_diff = 0; @@ -3809,6 +3824,9 @@ restart_import: gf_isom_set_track_enabled(import->dest, track, 1); if (import->esd && !import->esd->ESID) import->esd->ESID = gf_isom_get_track_id(import->dest, track); import->final_trackID = gf_isom_get_track_id(import->dest, track); + if (import->esd && import->esd->dependsOnESID) { + gf_isom_set_track_reference(import->dest, track, GF_ISOM_REF_DECODE, import->esd->dependsOnESID); + } e = gf_isom_avc_config_new(import->dest, track, avccfg, NULL, NULL, &di); if (e) goto exit; @@ -3833,6 +3851,8 @@ restart_import: min_poc = 0; poc_shift = 0; prev_nalu_prefix_size = 0; + res_prev_nalu_prefix = 0; + priority_prev_nalu_prefix = 0; while (gf_bs_available(bs)) { u8 nal_hdr, skip_nal, is_subseq, add_sps; @@ -3963,6 +3983,8 @@ restart_import: } last_svc_sps = idx; } + /* prevent from adding the subseq PS to the samples */ + copy_size = 0; } else { if (first_avc) { first_avc = 0; @@ -4011,10 +4033,8 @@ restart_import: case GF_AVC_NALU_SEI: if (avc.sps_active_idx != -1) { copy_size = AVC_ReformatSEI_NALU(buffer, nal_size, &avc); - if (copy_size) { - nal_size = copy_size; /*nal_size has been modified in memory*/ + if (copy_size) nb_sei++; - } } break; @@ -4091,17 +4111,32 @@ restart_import: sample_data = NULL; if (prev_nalu_prefix_size) { + u32 size, reserved, nb_subs; + u8 priority; + Bool discardable; + samp->dataLength -= size_length/8 + prev_nalu_prefix_size; - /*remove last subsample entry!*/ - gf_isom_add_subsample(import->dest, track, cur_samp+1, 0, 0, 0); + if (set_subsamples) { + /* determine the number of subsamples */ + nb_subs = gf_isom_sample_has_subsamples(import->dest, track, cur_samp+1); + if (nb_subs) { + /* fetch size, priority, reserved and discardable info for last subsample */ + gf_isom_sample_get_subsample(import->dest, track, cur_samp+1, nb_subs, &size, &priority, &reserved, &discardable); + + /*remove last subsample entry!*/ + gf_isom_add_subsample(import->dest, track, cur_samp+1, 0, 0, 0, 0); + } + } /*rewrite last NALU prefix at the beginning of next sample*/ sample_data = gf_bs_new(NULL, 0, GF_BITSTREAM_WRITE); gf_bs_write_data(sample_data, samp->data + samp->dataLength, size_length/8 + prev_nalu_prefix_size); - - /*add subsample entry to next sample*/ - gf_isom_add_subsample(import->dest, track, cur_samp+2, size_length/8 + prev_nalu_prefix_size, 1, 1); + + if (set_subsamples) { + /*add subsample entry to next sample*/ + gf_isom_add_subsample(import->dest, track, cur_samp+2, size_length/8 + prev_nalu_prefix_size, priority, reserved, discardable); + } prev_nalu_prefix_size = 0; } @@ -4129,7 +4164,7 @@ restart_import: if (size_length+diff_size == 24) diff_size+=8; gf_import_message(import, GF_OK, "Adjusting AVC SizeLength to %d bits", size_length+diff_size); - avc_rewrite_samples(import->dest, track, size_length, size_length+diff_size); + gf_media_avc_rewrite_samples(import->dest, track, size_length, size_length+diff_size); /*rewrite current sample*/ if (sample_data) { @@ -4161,11 +4196,37 @@ restart_import: /*fixme - we need finer grain for priority*/ if ((nal_type==GF_AVC_NALU_SVC_PREFIX_NALU) || (nal_type==GF_AVC_NALU_SVC_SLICE)) { - gf_isom_add_subsample(import->dest, track, cur_samp+1, copy_size+size_length, 1, 1); - } else { - gf_isom_add_subsample(import->dest, track, cur_samp+1, copy_size+size_length, 0, 0); - } + u32 res = 0; + u8 prio; + unsigned char *p = buffer; + res |= (p[0] & 0x60) ? 0x80000000 : 0; // RefPicFlag + res |= 0 ? 0x40000000 : 0; // RedPicFlag TODO: not supported, would require to parse NAL unit payload + res |= (1<=nal_type && nal_type<=5) || (nal_type==GF_AVC_NALU_SVC_PREFIX_NALU) || (nal_type==GF_AVC_NALU_SVC_SLICE) ? 0x20000000 : 0; // VclNALUnitFlag + res |= p[1] << 16; // use values of IdrFlag and PriorityId directly from SVC extension header + res |= p[2] << 8; // use values of DependencyId and QualityId directly from SVC extension header + res |= p[3] & 0xFC; // use values of TemporalId and UseRefBasePicFlag directly from SVC extension header + res |= 0 ? 0x00000002 : 0; // StoreBaseRepFlag TODO: SVC FF mentions a store_base_rep_flag which cannot be found in SVC spec + + // priority_id (6 bits) in SVC has inverse meaning -> lower value means higher priority - invert it and scale it to 8 bits + prio = (63 - (p[1] & 0x3F)) << 2; + + if (set_subsamples) { + gf_isom_add_subsample(import->dest, track, cur_samp+1, copy_size+size_length/8, prio, res, 1); + } + if (nal_type==GF_AVC_NALU_SVC_PREFIX_NALU) { + /* remember reserved and priority value */ + res_prev_nalu_prefix = res; + priority_prev_nalu_prefix = prio; + } + } else if (set_subsamples) { + /* use the res and priority value of last prefix NALU */ + gf_isom_add_subsample(import->dest, track, cur_samp+1, copy_size+size_length/8, priority_prev_nalu_prefix, res_prev_nalu_prefix, 0); + } + if (nal_type!=GF_AVC_NALU_SVC_PREFIX_NALU) { + res_prev_nalu_prefix = 0; + priority_prev_nalu_prefix = 0; + } if (nal_type != GF_AVC_NALU_SVC_PREFIX_NALU) { prev_nalu_prefix_size = 0; @@ -4175,7 +4236,6 @@ restart_import: switch (nal_type) { case GF_AVC_NALU_SVC_SLICE: - nal_size = nal_size; case GF_AVC_NALU_NON_IDR_SLICE: case GF_AVC_NALU_DP_A_SLICE: case GF_AVC_NALU_DP_B_SLICE: @@ -4273,7 +4333,7 @@ restart_import: /*consume next start code*/ nal_start = AVC_NextStartCode(bs); if (nal_start) { - GF_LOG(GF_LOG_ERROR, GF_LOG_CODING, ("[avc-h264] invalid nal_size? Skipping "LLU" bytes to reach next start code\n", nal_start)); + GF_LOG(GF_LOG_ERROR, GF_LOG_CODING, ("[avc-h264] invalid nal_size (%u)? Skipping "LLU" bytes to reach next start code\n", nal_size, nal_start)); gf_bs_skip_bytes(bs, nal_start); } nal_start = AVC_IsStartCode(bs); @@ -5598,6 +5658,7 @@ void on_m2ts_import_data(GF_M2TS_Demuxer *ts, u32 evt_type, void *par) esd->decoderConfig->decoderSpecificInfo->data = NULL; gf_odf_desc_del((GF_Descriptor *)esd); tsimp->stream_setup = 1; + gf_isom_set_audio_info(import->dest, tsimp->track, 1, ((GF_M2TS_PES_PCK*)par)->stream->aud_sr, ((GF_M2TS_PES_PCK*)par)->stream->aud_nb_ch, 8); } } break; @@ -5731,6 +5792,10 @@ void on_m2ts_import_data(GF_M2TS_Demuxer *ts, u32 evt_type, void *par) if (pck->flags & GF_M2TS_PES_PCK_I_FRAME) tsimp->nb_i++; if (pck->flags & GF_M2TS_PES_PCK_P_FRAME) tsimp->nb_p++; if (pck->flags & GF_M2TS_PES_PCK_B_FRAME) tsimp->nb_b++; + + if (pck->flags & GF_M2TS_PES_PCK_RAP) { + e = gf_isom_set_sample_rap(import->dest, tsimp->track); + } return; } @@ -5748,8 +5813,8 @@ void on_m2ts_import_data(GF_M2TS_Demuxer *ts, u32 evt_type, void *par) case GF_M2TS_AUDIO_MPEG2: gf_import_message(import, GF_OK, "MPEG-2 Audio import - SampleRate %d Channels %d Language %s (TS PID %d)", pck->stream->aud_sr, pck->stream->aud_nb_ch, gf_4cc_to_str(pck->stream->lang), pck->stream->pid); break; case GF_M2TS_AUDIO_AAC: gf_import_message(import, GF_OK, "MPEG-4 AAC Audio import - SampleRate %d Channels %d Language %s (TS PID %d)", pck->stream->aud_sr, pck->stream->aud_nb_ch, gf_4cc_to_str(pck->stream->lang), pck->stream->pid); break; } - - gf_isom_set_media_language(import->dest, tsimp->track, (char *) gf_4cc_to_str(pck->stream->lang)+1); + if (pck->stream->lang) + gf_isom_set_media_language(import->dest, tsimp->track, (char *) gf_4cc_to_str(pck->stream->lang)+1); } if (!tsimp->stream_setup) { if (pck->stream->aud_sr) { @@ -6056,7 +6121,8 @@ GF_Err gf_import_vobsub(GF_MediaImporter *import) GF_Err err = GF_OK; GF_ISOSample *samp = NULL; GF_List *subpic; - u32 total, last_samp_dur = 0; + u64 last_dts = 0; + u32 total, last_samp_dur = 0; unsigned char buf[0x800]; strcpy(filename, import->in_name); @@ -6178,6 +6244,7 @@ GF_Err gf_import_vobsub(GF_MediaImporter *import) subpic = vobsub->langs[trackID].subpos; total = gf_list_count(subpic); + last_dts = 0; for (c = 0; c < total; c++) { u32 i, left, size, psize, dsize, hsize, duration; @@ -6252,12 +6319,18 @@ GF_Err gf_import_vobsub(GF_MediaImporter *import) samp->data = packet; samp->dataLength = psize; samp->DTS = pos->start * 90; + + if (last_dts && (last_dts >= samp->DTS)) { + err = gf_import_message(import, GF_CORRUPTED_DATA, "Out of order timestamps in vobsub file"); + goto error; + } err = gf_isom_add_sample(import->dest, track, di, samp); if (err) goto error; gf_free(packet); gf_set_progress("Importing VobSub", c, total); + last_dts = samp->DTS; if (import->flags & GF_IMPORT_DO_ABORT) { break; diff --git a/src/media_tools/mpd.c b/src/media_tools/mpd.c index 1af5912..5722f9d 100644 --- a/src/media_tools/mpd.c +++ b/src/media_tools/mpd.c @@ -1,719 +1,742 @@ -/* - * GPAC - Multimedia Framework C SDK - * - * Authors: Cyril Concolato - * Copyright (c) Telecom ParisTech 2010- - * All rights reserved - * - * This file is part of GPAC / 3GPP/MPEG Media Presentation Description input module - * - * GPAC is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * GPAC 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -#include <gpac/internal/mpd.h> -#include <gpac/download.h> -#include <gpac/internal/m3u8.h> -#include <gpac/network.h> - -static u32 gf_mpd_parse_duration(char *duration) { - u32 i; - if (!duration) return 0; - i = 0; - while (1) { - if (duration[i] == ' ') i++; - else if (duration[i] == 0) return 0; - else { - break; - } - } - if (duration[i] == 'P') { - if (duration[i+1] == 0) return 0; - else if (duration[i+1] != 'T') return 0; - else { - char *sep1, *sep2; - u32 h, m; - double s; - h = m = 0; - s = 0; - if (NULL != (sep1 = strchr(duration+i+2, 'H'))) { - *sep1 = 0; - h = atoi(duration+i+2); - *sep1 = 'H'; - sep1++; - } else { - sep1 = duration+i+2; - } - if (NULL != (sep2 = strchr(sep1, 'M'))) { - *sep2 = 0; - m = atoi(sep1); - *sep2 = 'M'; - sep2++; - } else { - sep2 = sep1; - } - if (NULL != (sep1 = strchr(sep2, 'S'))) { - *sep1 = 0; - s = atof(sep2); - *sep1 = 'S'; - } - return (u32)((h*3600+m*60+s)*1000); - } - } else { - return 0; - } -} - -static GF_Err gf_mpd_parse_rep_cp(GF_XMLNode *root, GF_MPD_Representation *rep) -{ - u32 att_index; - GF_XMLAttribute *att; - att_index = 0; - while (1) { - att = gf_list_get(root->attributes, att_index); - if (!att) { - break; - } else if (!strcmp(att->name, "SchemeInformation")) { - rep->content_protection_type = gf_strdup(att->value); - } else if (!strcmp(att->name, "schemeIdUri")) { - rep->content_protection_uri = gf_strdup(att->value); - } - att_index++; - } - - return GF_OK; -} - -static GF_Err gf_mpd_parse_rep_trickmode(GF_XMLNode *root, GF_MPD_Representation *rep) -{ - u32 att_index; - GF_XMLAttribute *att; - att_index = 0; - while (1) { - att = gf_list_get(root->attributes, att_index); - if (!att) { - break; - } else if (!strcmp(att->name, "alternatePlayoutRate")) { - rep->alternatePlayoutRate = atof(att->value); - } - att_index++; - } - - return GF_OK; -} - -static GF_Err gf_mpd_parse_rep_initseg(GF_XMLNode *root, GF_MPD_Representation *rep, const char * baseURL) -{ - u32 att_index; - GF_XMLAttribute *att; - - att_index = 0; - while (1) { - att = gf_list_get(root->attributes, att_index); - if (!att) { - break; - } else if (!strcmp(att->name, "sourceURL")) { - GF_URL_Info info; - GF_Err e; - gf_dm_url_info_init(&info); - e = gf_dm_get_url_info(att->value, &info, baseURL); - assert( e == GF_OK ); - assert( info.canonicalRepresentation); - rep->init_url = gf_strdup(info.canonicalRepresentation); - gf_dm_url_info_del(&info); - } else if (!strcmp(att->name, "range")) { - rep->init_use_range = 1; - sscanf(att->value, "%d-%d", &rep->init_byterange_start, &rep->init_byterange_end); - } - att_index++; - } - return GF_OK; -} - -static GF_Err gf_mpd_parse_rep_urltemplate(GF_XMLNode *root, GF_MPD_Representation *rep) -{ - u32 att_index; - GF_XMLAttribute *att; - - att_index = 0; - while (1) { - att = gf_list_get(root->attributes, att_index); - if (!att) { - break; - } else if (!strcmp(att->name, "sourceURL")) { - rep->url_template = gf_strdup(att->value); - } else if (!strcmp(att->name, "id")) { - rep->id = gf_strdup(att->value); - } else if (!strcmp(att->name, "startIndex")) { - rep->startIndex = atoi(att->value)-1; - } else if (!strcmp(att->name, "endIndex")) { - rep->endIndex = atoi(att->value)-1; - } - att_index++; - } - return GF_OK; -} - -static GF_Err gf_mpd_parse_rep_urlelt(GF_XMLNode *root, GF_MPD_SegmentInfo *seg, const char * baseURL) -{ - u32 att_index; - GF_XMLAttribute *att; - - att_index = 0; - while (1) { - att = gf_list_get(root->attributes, att_index); - if (!att) { - break; - } else if (!strcmp(att->name, "sourceURL")) { - GF_URL_Info info; - GF_Err e; - gf_dm_url_info_init(&info); - e = gf_dm_get_url_info(att->value, &info, baseURL); - assert( e == GF_OK ); - assert( info.canonicalRepresentation); - seg->url = gf_strdup(info.canonicalRepresentation); - gf_dm_url_info_del(&info); - } else if (!strcmp(att->name, "range")) { - seg->use_byterange = 1; - sscanf(att->value, "%d-%d", &seg->byterange_start, &seg->byterange_end); - } - att_index++; - } - return GF_OK; -} - -static GF_Err gf_mpd_parse_rep_segmentinfo(GF_XMLNode *root, GF_MPD_Representation *rep) -{ - u32 att_index, child_index; - u32 nb_urlelements; - GF_XMLAttribute *att; - GF_XMLNode *child; - - att_index = 0; - while (1) { - att = gf_list_get(root->attributes, att_index); - if (!att) { - break; - } else if (!strcmp(att->name, "duration")) { - rep->default_segment_duration = gf_mpd_parse_duration(att->value); - } else if (!strcmp(att->name, "baseURL")) { - rep->default_base_url = gf_strdup(att->value); - } - att_index++; - } - - child_index = 0; - nb_urlelements = 0; - while (1) { - child = gf_list_get(root->content, child_index); - if (!child) { - break; - } else if (child->type == GF_XML_NODE_TYPE) { - if (!strcmp(child->name, "InitialisationSegmentURL")) { - gf_mpd_parse_rep_initseg(child, rep, rep->default_base_url); - } else if (!strcmp(child->name, "UrlTemplate")) { - gf_mpd_parse_rep_urltemplate(child, rep); - } else if (!strcmp(child->name, "Url")) { - nb_urlelements++; - } - } - child_index++; - } - - /* We assume that URL Template has precedence over URL elements */ - if (rep->url_template) { - /* TODO: expand the template to create segment urls*/ - } else if (nb_urlelements) { - u32 urlelt_index = 0; - assert( !rep->segments ); - rep->segments = gf_list_new(); - - child_index = 0; - while (1) { - child = gf_list_get(root->content, child_index); - if (!child) { - break; - } else if (child->type == GF_XML_NODE_TYPE) { - if (!strcmp(child->name, "Url")) { - GF_MPD_SegmentInfo *seg_info; - GF_SAFEALLOC(seg_info, GF_MPD_SegmentInfo); - if (!seg_info) - return GF_OUT_OF_MEM; - memset(seg_info, 0, sizeof(GF_MPD_SegmentInfo)); - seg_info->byterange_end = 0; - seg_info->byterange_start = 0; - seg_info->use_byterange = 0; - seg_info->url = NULL; - gf_mpd_parse_rep_urlelt(child, seg_info, rep->default_base_url); - gf_list_add(rep->segments, seg_info); - urlelt_index++; - } - } - child_index++; - } - } - return GF_OK; -} - -static GF_Err gf_mpd_parse_representation(GF_XMLNode *root, GF_MPD_Representation *rep) -{ - u32 att_index, child_index; - GF_XMLAttribute *att; - GF_XMLNode *child; - - att_index = 0; - while (1) { - att = gf_list_get(root->attributes, att_index); - if (!att) { - break; - } else if (!strcmp(att->name, "bandwidth")) { - rep->bandwidth = atoi(att->value); - } else if (!strcmp(att->name, "width")) { - rep->width = atoi(att->value); - } else if (!strcmp(att->name, "height")) { - rep->height = atoi(att->value); - } else if (!strcmp(att->name, "lang")) { - rep->lang = gf_strdup(att->value); - } else if (!strcmp(att->name, "mimeType")) { - rep->mime = gf_strdup(att->value); - } else if (!strcmp(att->name, "group")) { - rep->groupID = atoi(att->value); - } else if (!strcmp(att->name, "startWithRAP")) { - if (!strcmp(att->value, "true")) rep->startWithRap = 1; - } else if (!strcmp(att->name, "qualityRanking")) { - rep->qualityRanking = atoi(att->value); - } - att_index++; - } - - child_index = 0; - while (1) { - child = gf_list_get(root->content, child_index); - if (!child) { - break; - } else if (child->type == GF_XML_NODE_TYPE) { - if (!strcmp(child->name, "ContentProtection")) { - gf_mpd_parse_rep_cp(child, rep); - } else if (!strcmp(child->name, "TrickMode")) { - gf_mpd_parse_rep_trickmode(child, rep); - } else if (!strcmp(child->name, "SegmentInfo")) { - gf_mpd_parse_rep_segmentinfo(child, rep); - } - } - child_index++; - } - return GF_OK; -} - -static GF_Err gf_mpd_parse_segment_info_default(GF_XMLNode *root, GF_MPD_Period *period) -{ - u32 att_index; - GF_XMLAttribute *att; - - att_index = 0; - while (1) { - att = gf_list_get(root->attributes, att_index); - if (!att) { - break; - } else if (!strcmp(att->name, "duration")) { - period->default_segment_duration = gf_mpd_parse_duration(att->value); - } else if (!strcmp(att->name, "baseURL")) { - period->default_base_url = gf_strdup(att->value); - } else if (!strcmp(att->name, "sourceUrlTemplatePeriod")) { - period->url_template = gf_strdup(att->value); - } - att_index++; - } - - return GF_OK; -} - -static GF_Err gf_mpd_parse_period(GF_XMLNode *root, GF_MPD_Period *period) -{ - u32 att_index, child_index; - GF_XMLAttribute *att; - GF_XMLNode *child; - - att_index = 0; - while (1) { - att = gf_list_get(root->attributes, att_index); - if (!att) { - break; - } else if (!strcmp(att->name, "start")) { - } else if (!strcmp(att->name, "segmentAlignmentFlag")) { - if (!strcmp(att->value, "true")) { - period->segment_alignment_flag = 1; - } - } else if (!strcmp(att->name, "bitstreamSwitchingFlag")) { - if (!strcmp(att->value, "true")) { - period->segment_alignment_flag = 1; - } - } - att_index++; - } - - child_index = 0; - while (1) { - child = gf_list_get(root->content, child_index); - if (!child) { - break; - } else if (child->type == GF_XML_NODE_TYPE) { - if (!strcmp(child->name, "SegmentInfoDefault")) { - gf_mpd_parse_segment_info_default(child, period); - } else if (!strcmp(child->name, "Representation")) { - GF_MPD_Representation *rep; - GF_SAFEALLOC(rep, GF_MPD_Representation); - if (!rep) - return GF_OUT_OF_MEM; - memset( rep, 0, sizeof(GF_MPD_Representation)); - gf_mpd_parse_representation(child, rep); - gf_list_add(period->representations, rep); - } - } - child_index++; - } - - return GF_OK; -} - -static GF_Err gf_mpd_parse_program_info(GF_XMLNode *root, GF_MPD *mpd) -{ - u32 att_index, child_index; - GF_XMLAttribute *att; - GF_XMLNode *child; - - att_index = 0; - while (1) { - att = gf_list_get(root->attributes, att_index); - if (!att) { - break; - } else if (!strcmp(att->name, "moreInformationURL")) { - mpd->more_info_url = gf_strdup(att->value); - } - att_index++; - } - - child_index = 0; - while (1) { - child = gf_list_get(root->content, child_index); - if (!child) { - break; - } else if (child->type == GF_XML_NODE_TYPE) { - if (!strcmp(child->name, "Title")) { - GF_XMLNode *data_node = gf_list_get(child->content, 0); - if (data_node && data_node->type == GF_XML_TEXT_TYPE) { - mpd->title = gf_strdup(data_node->name); - } - } else if (!strcmp(child->name, "Source")) { - GF_XMLNode *data_node = gf_list_get(child->content, 0); - if (data_node && data_node->type == GF_XML_TEXT_TYPE) { - mpd->source = gf_strdup(data_node->name); - } - } else if (!strcmp(child->name, "Copyright")) { - GF_XMLNode *data_node = gf_list_get(child->content, 0); - if (data_node && data_node->type == GF_XML_TEXT_TYPE) { - mpd->copyright = gf_strdup(data_node->name); - } - } - } - child_index++; - } - return GF_OK; -} - -GF_MPD *gf_mpd_new() -{ - GF_MPD *mpd; - GF_SAFEALLOC(mpd, GF_MPD); - if (mpd){ - memset(mpd, 0, sizeof(GF_MPD)); - } - return mpd; -} - -void gf_mpd_del(GF_MPD *mpd) -{ - while (gf_list_count(mpd->periods)) { - GF_MPD_Period *period = gf_list_get(mpd->periods, 0); - gf_list_rem(mpd->periods, 0); - while (gf_list_count(period->representations)) { - GF_MPD_Representation *rep = gf_list_get(period->representations, 0); - gf_list_rem(period->representations, 0); - - while (gf_list_count(rep->segments)) { - GF_MPD_SegmentInfo *seg = gf_list_get(rep->segments, 0); - gf_list_rem(rep->segments, 0); - if (seg->url) gf_free(seg->url); - gf_free(seg); - } - if (rep->content_protection_type) gf_free(rep->content_protection_type); - rep->content_protection_type = NULL; - if (rep->content_protection_uri) gf_free(rep->content_protection_uri); - rep->content_protection_uri = NULL; - if (rep->default_base_url) gf_free(rep->default_base_url); - rep->default_base_url = NULL; - if (rep->id) gf_free(rep->id); - rep->id = NULL; - if (rep->init_url) gf_free(rep->init_url); - rep->init_url = NULL; - if (rep->lang) gf_free(rep->lang); - rep->lang = NULL; - if (rep->mime) gf_free(rep->mime); - rep->mime = NULL; - if (rep->url_template) gf_free(rep->url_template); - rep->url_template = NULL; - if (rep->segments) gf_list_del(rep->segments); - rep->segments = NULL; - gf_free(rep); - } - gf_list_del(period->representations); - period->representations = NULL; - if (period->default_base_url) gf_free(period->default_base_url); - if (period->url_template) gf_free(period->url_template); - - gf_free(period); - } - gf_list_del(mpd->periods); - mpd->periods = NULL; - if (mpd->base_url) gf_free(mpd->base_url); - mpd->base_url = NULL; - if (mpd->title) gf_free(mpd->title); - mpd->title = NULL; - if (mpd->source) gf_free(mpd->source); - mpd->source = NULL; - if (mpd->copyright) gf_free(mpd->copyright); - mpd->copyright = NULL; - if (mpd->more_info_url) gf_free(mpd->more_info_url); - mpd->more_info_url = NULL; - gf_free(mpd); -} - -GF_Err gf_mpd_init_from_dom(GF_XMLNode *root, GF_MPD *mpd) -{ - u32 att_index, child_index; - GF_XMLAttribute *att; - GF_XMLNode *child; - - if (!root || !mpd) return GF_BAD_PARAM; - - assert( !mpd->periods ); - mpd->periods = gf_list_new(); - - att_index = 0; - child_index = gf_list_count(root->attributes); - for (att_index = 0 ; att_index < child_index; att_index++) { - att = gf_list_get(root->attributes, att_index); - if (!att) { - continue; - } else if (!strcmp(att->name, "type")) { - if (!strcmp(att->value, "OnDemand")) mpd->type = GF_MPD_TYPE_ON_DEMAND; - else if (!strcmp(att->value, "Live")) mpd->type = GF_MPD_TYPE_LIVE; - } else if (!strcmp(att->name, "availabilityStartTime")) { - } else if (!strcmp(att->name, "availabilityEndTime")) { - } else if (!strcmp(att->name, "mediaPresentationDuration")) { - mpd->duration = gf_mpd_parse_duration(att->value); - } else if (!strcmp(att->name, "minimumUpdatePeriodMPD")) { - mpd->min_update_time = gf_mpd_parse_duration(att->value); - } else if (!strcmp(att->name, "minBufferTime")) { - mpd->min_buffer_time = gf_mpd_parse_duration(att->value); - } else if (!strcmp(att->name, "timeShiftBufferDepth")) { - mpd->time_shift_buffer_depth = gf_mpd_parse_duration(att->value); - } else if (!strcmp(att->name, "baseURL")) { - } - } - - child_index = 0; - while (1) { - child = gf_list_get(root->content, child_index); - if (!child) { - break; - } else if (child->type == GF_XML_NODE_TYPE) { - if (!strcmp(child->name, "ProgramInformation")) { - gf_mpd_parse_program_info(child, mpd); - } else if (!strcmp(child->name, "Period")) { - GF_MPD_Period *period; - GF_SAFEALLOC(period, GF_MPD_Period); - if (!period) - return GF_OUT_OF_MEM; - period->representations = gf_list_new(); - gf_mpd_parse_period(child, period); - gf_list_add(mpd->periods, period); - } - } - child_index++; - } - return GF_OK; -} - -GF_Err gf_m3u8_to_mpd(GF_ClientService *service, const char *m3u8_file, const char *base_url, - const char *mpd_file, - u32 reload_count, char *mimeTypeForM3U8Segments) -{ - GF_Err e; - u32 i, count; - Double update_interval; - VariantPlaylist * pl = NULL; - Program *prog; - PlaylistElement *pe; - FILE *fmpd; - Bool is_end; - - e = parse_root_playlist(m3u8_file, &pl, base_url); - if (e) { - GF_LOG(GF_LOG_ERROR, GF_LOG_CONTAINER, ("[M3U8] Failed to parse root playlist '%s', error = %s\n", m3u8_file, gf_error_to_string(e))); - if (pl) variant_playlist_del(pl); - pl = NULL; - return e; - } - if (mpd_file == NULL){ - gf_delete_file(m3u8_file); - mpd_file = m3u8_file; - } - is_end = !pl->playlistNeedsRefresh; - i=0; - assert( pl ); - assert( pl->programs ); - while ((prog = gf_list_enum(pl->programs, &i))) { - u32 j=0; - while (NULL != (pe = gf_list_enum(prog->bitrates, &j))) { - if (pe->url && strstr(pe->url, ".m3u8")) { - char *suburl = gf_url_concatenate(base_url, pe->url); - if (!strcmp(base_url, suburl)) { - gf_free(suburl); - GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD Generator] Not downloading, programs are identical for %s...\n", pe->url)); - continue; - } - if (service) { - GF_DownloadSession *sess = gf_term_download_new(service, suburl, GF_NETIO_SESSION_NOT_THREADED, NULL, NULL); - if (!sess) { - gf_free(suburl); - break; - } - e = gf_dm_sess_process(sess); - if (e==GF_OK) { - e = parse_sub_playlist(gf_dm_sess_get_cache_name(sess), &pl, suburl, prog, pe); - } - gf_term_download_del(sess); - gf_free(suburl); - } else { /* for use in MP4Box */ - extern GF_Err gf_dm_wget(const char *url, const char *filename); - e = gf_dm_wget(suburl, "tmp.m3u8"); - if (e==GF_OK) { - e = parse_sub_playlist("tmp.m3u8", &pl, suburl, prog, pe); - } - gf_delete_file("tmp.m3u8"); - } - } - } - } - - update_interval = 0; - prog = gf_list_get(pl->programs, 0); - assert( prog ); - pe = gf_list_last(prog->bitrates); - assert( pe ); - /*update interval is set to the duration of the last media file with rules defined in http live streaming RFC section 6.3.4*/ - switch (reload_count) { - case 0: - update_interval = pe->durationInfo; - break; - case 1: - update_interval = pe->durationInfo/2; - break; - case 2: - update_interval = 3*(pe->durationInfo/2); - break; - default: - update_interval = 3*(pe->durationInfo); - break; - } - if (is_end || ((pe->elementType == TYPE_PLAYLIST) && pe->element.playlist.is_ended)) { - update_interval = 0; - GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD Generator] NO NEED to refresh playlist !\n")); - } else { - GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD Generator] Playlist will be refreshed every %g seconds, len=%d\n", update_interval, pe->durationInfo)); - } - - assert( mpd_file ); - fmpd = gf_f64_open(mpd_file, "wt"); - if (!fmpd){ - GF_LOG(GF_LOG_ERROR, GF_LOG_MODULE, ("[MPD Generator] Cannot write to temp file %s!\n", mpd_file)); - variant_playlist_del(pl); - return GF_IO_ERR; - } - fprintf(fmpd, "<MPD type=\"Live\" xmlns=\"urn:mpeg:mpegB:schema:DASH:MPD:DIS2011\" profiles=\"urn:mpeg:mpegB:profile:dash:full:2011\""); - if (update_interval) fprintf(fmpd, " minimumUpdatePeriodMPD=\"PT%02.2gS\"", update_interval); - fprintf(fmpd, ">\n"); - - fprintf(fmpd, " <ProgramInformation moreInformationURL=\"http://gpac.sourceforge.net\">\n"); - { - char * title = pe->title; - if (!title || strlen(title) < 2) - title = pe->url; - fprintf(fmpd, " <Title>%s\n", title ); - } - fprintf(fmpd, " Generated from URL %s\n", base_url ); - fprintf(fmpd, " Generated by GPAC %s from %s\n", GPAC_FULL_VERSION, base_url); - - fprintf(fmpd, " \n"); - fprintf(fmpd, " \n"); - - count = gf_list_count(pl->programs); - for (i=0; iprograms, i); - count2 = gf_list_count(prog->bitrates); - for (j = 0; jbitrates, j); - if (pe->elementType == TYPE_PLAYLIST) { - u32 k, count3; - char *base_url = gf_strdup(pe->url); - char *sep = strrchr(base_url, '/'); - if (sep) *(sep+1) = 0; - if (pe->codecs && (pe->codecs[0] = '\"')) { - u32 len = strlen(pe->codecs); - strncpy(pe->codecs, pe->codecs+1, len-1); - pe->codecs[len-2] = 0; - } - /* SOUCHAY : if mime-type is still unknown, do not try to add codec information since it would be wrong */ - if (!strcmp(M3U8_UNKOWN_MIME_TYPE, mimeTypeForM3U8Segments)){ - fprintf(fmpd, " \n", mimeTypeForM3U8Segments, pe->bandwidth); - } else { - fprintf(fmpd, " \n", mimeTypeForM3U8Segments, (pe->codecs ? ";codecs=":""), (pe->codecs ? pe->codecs:""), pe->bandwidth); - } - fprintf(fmpd, "\n \n", pe->durationInfo, base_url); - count3 = gf_list_count(pe->element.playlist.elements); - update_interval = (count3 - 1) * pe->durationInfo * 1000; - for (k=0; kelement.playlist.elements, k); - while (base_url[cmp] == elt->url[cmp]) cmp++; - fprintf(fmpd, " \n", elt->url+cmp); - } - fprintf(fmpd, " \n"); - fprintf(fmpd, " \n"); - gf_free(base_url); - } else if (pe->elementType == TYPE_STREAM) { - fprintf(stdout, "NOT SUPPORTED: M3U8 Stream\n"); - } - } - } - fprintf(fmpd, " \n"); - fprintf(fmpd, ""); - fclose(fmpd); - variant_playlist_del(pl); - return GF_OK; -} - +/* +* GPAC - Multimedia Framework C SDK +* +* Authors: Cyril Concolato +* Copyright (c) Telecom ParisTech 2010- +* All rights reserved +* +* This file is part of GPAC / 3GPP/MPEG Media Presentation Description input module +* +* GPAC is free software; you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation; either version 2, or (at your option) +* any later version. +* +* GPAC 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 Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with this library; see the file COPYING. If not, write to +* the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +* +*/ + +#include +#include +#include +#include + +static u32 gf_mpd_parse_duration(char *duration) { + u32 i; + if (!duration) return 0; + i = 0; + while (1) { + if (duration[i] == ' ') i++; + else if (duration[i] == 0) return 0; + else { + break; + } + } + if (duration[i] == 'P') { + if (duration[i+1] == 0) return 0; + else if (duration[i+1] != 'T') return 0; + else { + char *sep1, *sep2; + u32 h, m; + double s; + h = m = 0; + s = 0; + if (NULL != (sep1 = strchr(duration+i+2, 'H'))) { + *sep1 = 0; + h = atoi(duration+i+2); + *sep1 = 'H'; + sep1++; + } else { + sep1 = duration+i+2; + } + if (NULL != (sep2 = strchr(sep1, 'M'))) { + *sep2 = 0; + m = atoi(sep1); + *sep2 = 'M'; + sep2++; + } else { + sep2 = sep1; + } + if (NULL != (sep1 = strchr(sep2, 'S'))) { + *sep1 = 0; + s = atof(sep2); + *sep1 = 'S'; + } + return (u32)((h*3600+m*60+s)*1000); + } + } else { + return 0; + } +} + +static GF_Err gf_mpd_parse_rep_cp(GF_XMLNode *root, GF_MPD_Representation *rep) +{ + u32 att_index; + GF_XMLAttribute *att; + att_index = 0; + while (1) { + att = gf_list_get(root->attributes, att_index); + if (!att) { + break; + } else if (!strcmp(att->name, "SchemeInformation")) { + rep->content_protection_type = gf_strdup(att->value); + } else if (!strcmp(att->name, "schemeIdUri")) { + rep->content_protection_uri = gf_strdup(att->value); + } + att_index++; + } + + return GF_OK; +} + +static GF_Err gf_mpd_parse_rep_trickmode(GF_XMLNode *root, GF_MPD_Representation *rep) +{ + u32 att_index; + GF_XMLAttribute *att; + att_index = 0; + while (1) { + att = gf_list_get(root->attributes, att_index); + if (!att) { + break; + } else if (!strcmp(att->name, "alternatePlayoutRate")) { + rep->alternatePlayoutRate = atof(att->value); + } + att_index++; + } + + return GF_OK; +} + +static GF_Err gf_mpd_parse_rep_initseg(GF_XMLNode *root, GF_MPD_Representation *rep, const char * baseURL) +{ + u32 att_index; + GF_XMLAttribute *att; + + att_index = 0; + while (1) { + att = gf_list_get(root->attributes, att_index); + if (!att) { + break; + } else if (!strcmp(att->name, "sourceURL")) { + GF_URL_Info info; + GF_Err e; + gf_dm_url_info_init(&info); + e = gf_dm_get_url_info(att->value, &info, baseURL); + assert( e == GF_OK ); + assert( info.canonicalRepresentation); + rep->init_url = gf_strdup(info.canonicalRepresentation); + gf_dm_url_info_del(&info); + } else if (!strcmp(att->name, "range")) { + rep->init_use_range = 1; + sscanf(att->value, "%d-%d", &rep->init_byterange_start, &rep->init_byterange_end); + } + att_index++; + } + return GF_OK; +} + +static GF_Err gf_mpd_parse_rep_urltemplate(GF_XMLNode *root, GF_MPD_Representation *rep) +{ + u32 att_index; + GF_XMLAttribute *att; + + att_index = 0; + while (1) { + att = gf_list_get(root->attributes, att_index); + if (!att) { + break; + } else if (!strcmp(att->name, "sourceURL")) { + rep->url_template = gf_strdup(att->value); + } else if (!strcmp(att->name, "id")) { + rep->id = gf_strdup(att->value); + } else if (!strcmp(att->name, "startIndex")) { + rep->startIndex = atoi(att->value)-1; + } else if (!strcmp(att->name, "endIndex")) { + rep->endIndex = atoi(att->value)-1; + } + att_index++; + } + return GF_OK; +} + +static GF_Err gf_mpd_parse_rep_urlelt(GF_XMLNode *root, GF_MPD_SegmentInfo *seg, const char * baseURL) +{ + u32 att_index; + GF_XMLAttribute *att; + + att_index = 0; + while (1) { + att = gf_list_get(root->attributes, att_index); + if (!att) { + break; + } else if (!strcmp(att->name, "sourceURL")) { + GF_URL_Info info; + GF_Err e; + gf_dm_url_info_init(&info); + e = gf_dm_get_url_info(att->value, &info, baseURL); + assert( e == GF_OK ); + assert( info.canonicalRepresentation); + seg->url = gf_strdup(info.canonicalRepresentation); + gf_dm_url_info_del(&info); + } else if (!strcmp(att->name, "range")) { + seg->use_byterange = 1; + sscanf(att->value, "%d-%d", &seg->byterange_start, &seg->byterange_end); + } + att_index++; + } + return GF_OK; +} + +static GF_Err gf_mpd_parse_rep_segmentinfo(GF_XMLNode *root, GF_MPD_Representation *rep) +{ + u32 att_index, child_index; + u32 nb_urlelements; + GF_XMLAttribute *att; + GF_XMLNode *child; + + att_index = 0; + while (1) { + att = gf_list_get(root->attributes, att_index); + if (!att) { + break; + } else if (!strcmp(att->name, "duration")) { + rep->default_segment_duration = gf_mpd_parse_duration(att->value); + } else if (!strcmp(att->name, "baseURL")) { + rep->default_base_url = gf_strdup(att->value); + } + att_index++; + } + + child_index = 0; + nb_urlelements = 0; + while (1) { + child = gf_list_get(root->content, child_index); + if (!child) { + break; + } else if (child->type == GF_XML_NODE_TYPE) { + if (!strcmp(child->name, "InitialisationSegmentURL")) { + gf_mpd_parse_rep_initseg(child, rep, rep->default_base_url); + } else if (!strcmp(child->name, "UrlTemplate")) { + gf_mpd_parse_rep_urltemplate(child, rep); + } else if (!strcmp(child->name, "Url")) { + nb_urlelements++; + } + } + child_index++; + } + + /* We assume that URL Template has precedence over URL elements */ + if (rep->url_template) { + /* TODO: expand the template to create segment urls*/ + } else if (nb_urlelements) { + u32 urlelt_index = 0; + assert( !rep->segments ); + rep->segments = gf_list_new(); + + child_index = 0; + while (1) { + child = gf_list_get(root->content, child_index); + if (!child) { + break; + } else if (child->type == GF_XML_NODE_TYPE) { + if (!strcmp(child->name, "Url")) { + GF_MPD_SegmentInfo *seg_info; + GF_SAFEALLOC(seg_info, GF_MPD_SegmentInfo); + if (!seg_info) return GF_OUT_OF_MEM; + seg_info->byterange_end = 0; + seg_info->byterange_start = 0; + seg_info->use_byterange = 0; + seg_info->url = NULL; + gf_mpd_parse_rep_urlelt(child, seg_info, rep->default_base_url); + gf_list_add(rep->segments, seg_info); + urlelt_index++; + } + } + child_index++; + } + } + return GF_OK; +} + +static GF_Err gf_mpd_parse_representation(GF_XMLNode *root, GF_MPD_Representation *rep) +{ + u32 att_index, child_index; + GF_XMLAttribute *att; + GF_XMLNode *child; + + att_index = 0; + while (1) { + att = gf_list_get(root->attributes, att_index); + if (!att) { + break; + } else if (!strcmp(att->name, "bandwidth")) { + rep->bandwidth = atoi(att->value); + } else if (!strcmp(att->name, "width")) { + rep->width = atoi(att->value); + } else if (!strcmp(att->name, "height")) { + rep->height = atoi(att->value); + } else if (!strcmp(att->name, "lang")) { + rep->lang = gf_strdup(att->value); + } else if (!strcmp(att->name, "mimeType")) { + rep->mime = gf_strdup(att->value); + } else if (!strcmp(att->name, "group")) { + rep->groupID = atoi(att->value); + } else if (!strcmp(att->name, "startWithRAP")) { + if (!strcmp(att->value, "true")) rep->startWithRap = 1; + } else if (!strcmp(att->name, "qualityRanking")) { + rep->qualityRanking = atoi(att->value); + } + att_index++; + } + + child_index = 0; + while (1) { + child = gf_list_get(root->content, child_index); + if (!child) { + break; + } else if (child->type == GF_XML_NODE_TYPE) { + if (!strcmp(child->name, "ContentProtection")) { + gf_mpd_parse_rep_cp(child, rep); + } else if (!strcmp(child->name, "TrickMode")) { + gf_mpd_parse_rep_trickmode(child, rep); + } else if (!strcmp(child->name, "SegmentInfo")) { + gf_mpd_parse_rep_segmentinfo(child, rep); + } + } + child_index++; + } + return GF_OK; +} + +static GF_Err gf_mpd_parse_segment_info_default(GF_XMLNode *root, GF_MPD_Period *period) +{ + u32 att_index; + GF_XMLAttribute *att; + + att_index = 0; + while (1) { + att = gf_list_get(root->attributes, att_index); + if (!att) { + break; + } else if (!strcmp(att->name, "duration")) { + period->default_segment_duration = gf_mpd_parse_duration(att->value); + } else if (!strcmp(att->name, "baseURL")) { + period->default_base_url = gf_strdup(att->value); + } else if (!strcmp(att->name, "sourceUrlTemplatePeriod")) { + period->url_template = gf_strdup(att->value); + } + att_index++; + } + + return GF_OK; +} + +static GF_Err gf_mpd_parse_period(GF_XMLNode *root, GF_MPD_Period *period, const char *default_base_url) +{ + u32 att_index, child_index; + GF_XMLAttribute *att; + GF_XMLNode *child; + + att_index = 0; + while (1) { + att = gf_list_get(root->attributes, att_index); + if (!att) { + break; + } else if (!strcmp(att->name, "start")) { + } else if (!strcmp(att->name, "segmentAlignmentFlag")) { + if (!strcmp(att->value, "true")) { + period->segment_alignment_flag = 1; + } + } else if (!strcmp(att->name, "bitstreamSwitchingFlag")) { + if (!strcmp(att->value, "true")) { + period->segment_alignment_flag = 1; + } + } + att_index++; + } + + child_index = 0; + while (1) { + child = gf_list_get(root->content, child_index); + if (!child) { + break; + } else if (child->type == GF_XML_NODE_TYPE) { + if (!strcmp(child->name, "SegmentInfoDefault")) { + gf_mpd_parse_segment_info_default(child, period); + } else if (!strcmp(child->name, "Representation")) { + GF_MPD_Representation *rep; + GF_SAFEALLOC(rep, GF_MPD_Representation); + if (!rep) + return GF_OUT_OF_MEM; + if (default_base_url) { + rep->default_base_url = gf_strdup(default_base_url); + } + gf_mpd_parse_representation(child, rep); + gf_list_add(period->representations, rep); + } + } + child_index++; + } + + return GF_OK; +} + +static GF_Err gf_mpd_parse_program_info(GF_XMLNode *root, GF_MPD *mpd) +{ + u32 att_index, child_index; + GF_XMLAttribute *att; + GF_XMLNode *child; + + att_index = 0; + while (1) { + att = gf_list_get(root->attributes, att_index); + if (!att) { + break; + } else if (!strcmp(att->name, "moreInformationURL")) { + mpd->more_info_url = gf_strdup(att->value); + } + att_index++; + } + + child_index = 0; + while (1) { + child = gf_list_get(root->content, child_index); + if (!child) { + break; + } else if (child->type == GF_XML_NODE_TYPE) { + if (!strcmp(child->name, "Title")) { + GF_XMLNode *data_node = gf_list_get(child->content, 0); + if (data_node && data_node->type == GF_XML_TEXT_TYPE) { + mpd->title = gf_strdup(data_node->name); + } + } else if (!strcmp(child->name, "Source")) { + GF_XMLNode *data_node = gf_list_get(child->content, 0); + if (data_node && data_node->type == GF_XML_TEXT_TYPE) { + mpd->source = gf_strdup(data_node->name); + } + } else if (!strcmp(child->name, "Copyright")) { + GF_XMLNode *data_node = gf_list_get(child->content, 0); + if (data_node && data_node->type == GF_XML_TEXT_TYPE) { + mpd->copyright = gf_strdup(data_node->name); + } + } + } + child_index++; + } + return GF_OK; +} + +GF_MPD *gf_mpd_new() +{ + GF_MPD *mpd; + GF_SAFEALLOC(mpd, GF_MPD); + return mpd; +} + +void gf_mpd_del(GF_MPD *mpd) +{ + while (gf_list_count(mpd->periods)) { + GF_MPD_Period *period = gf_list_get(mpd->periods, 0); + gf_list_rem(mpd->periods, 0); + while (gf_list_count(period->representations)) { + GF_MPD_Representation *rep = gf_list_get(period->representations, 0); + gf_list_rem(period->representations, 0); + + while (gf_list_count(rep->segments)) { + GF_MPD_SegmentInfo *seg = gf_list_get(rep->segments, 0); + gf_list_rem(rep->segments, 0); + if (seg->url) gf_free(seg->url); + gf_free(seg); + } + if (rep->content_protection_type) gf_free(rep->content_protection_type); + rep->content_protection_type = NULL; + if (rep->content_protection_uri) gf_free(rep->content_protection_uri); + rep->content_protection_uri = NULL; + if (rep->default_base_url) gf_free(rep->default_base_url); + rep->default_base_url = NULL; + if (rep->id) gf_free(rep->id); + rep->id = NULL; + if (rep->init_url) gf_free(rep->init_url); + rep->init_url = NULL; + if (rep->lang) gf_free(rep->lang); + rep->lang = NULL; + if (rep->mime) gf_free(rep->mime); + rep->mime = NULL; + if (rep->url_template) gf_free(rep->url_template); + rep->url_template = NULL; + if (rep->segments) gf_list_del(rep->segments); + rep->segments = NULL; + gf_free(rep); + } + gf_list_del(period->representations); + period->representations = NULL; + if (period->default_base_url) gf_free(period->default_base_url); + if (period->url_template) gf_free(period->url_template); + + gf_free(period); + } + gf_list_del(mpd->periods); + mpd->periods = NULL; + if (mpd->base_url) gf_free(mpd->base_url); + mpd->base_url = NULL; + if (mpd->title) gf_free(mpd->title); + mpd->title = NULL; + if (mpd->source) gf_free(mpd->source); + mpd->source = NULL; + if (mpd->copyright) gf_free(mpd->copyright); + mpd->copyright = NULL; + if (mpd->more_info_url) gf_free(mpd->more_info_url); + mpd->more_info_url = NULL; + gf_free(mpd); +} + +GF_Err gf_mpd_init_from_dom(GF_XMLNode *root, GF_MPD *mpd, const char *default_base_url) +{ + u32 att_index, child_index; + GF_XMLAttribute *att; + GF_XMLNode *child; + + if (!root || !mpd) return GF_BAD_PARAM; + + assert( !mpd->periods ); + mpd->periods = gf_list_new(); + + att_index = 0; + child_index = gf_list_count(root->attributes); + for (att_index = 0 ; att_index < child_index; att_index++) { + att = gf_list_get(root->attributes, att_index); + if (!att) { + continue; + } else if (!strcmp(att->name, "type")) { + if (!strcmp(att->value, "OnDemand")) mpd->type = GF_MPD_TYPE_ON_DEMAND; + else if (!strcmp(att->value, "Live")) mpd->type = GF_MPD_TYPE_LIVE; + } else if (!strcmp(att->name, "availabilityStartTime")) { + } else if (!strcmp(att->name, "availabilityEndTime")) { + } else if (!strcmp(att->name, "mediaPresentationDuration")) { + mpd->duration = gf_mpd_parse_duration(att->value); + } else if (!strcmp(att->name, "minimumUpdatePeriodMPD")) { + mpd->min_update_time = gf_mpd_parse_duration(att->value); + } else if (!strcmp(att->name, "minBufferTime")) { + mpd->min_buffer_time = gf_mpd_parse_duration(att->value); + } else if (!strcmp(att->name, "timeShiftBufferDepth")) { + mpd->time_shift_buffer_depth = gf_mpd_parse_duration(att->value); + } else if (!strcmp(att->name, "baseURL")) { + } + } + + child_index = 0; + while (1) { + child = gf_list_get(root->content, child_index); + if (!child) { + break; + } else if (child->type == GF_XML_NODE_TYPE) { + if (!strcmp(child->name, "ProgramInformation")) { + gf_mpd_parse_program_info(child, mpd); + } else if (!strcmp(child->name, "Period")) { + GF_MPD_Period *period; + GF_SAFEALLOC(period, GF_MPD_Period); + if (!period) + return GF_OUT_OF_MEM; + period->representations = gf_list_new(); + gf_mpd_parse_period(child, period, default_base_url); + gf_list_add(mpd->periods, period); + } + } + child_index++; + } + return GF_OK; +} + +GF_Err gf_m3u8_to_mpd(GF_ClientService *service, const char *m3u8_file, const char *base_url, + const char *mpd_file, + u32 reload_count, char *mimeTypeForM3U8Segments) +{ + GF_Err e; + u32 i, count; + Double update_interval; + VariantPlaylist * pl = NULL; + Program *prog; + PlaylistElement *pe, *the_pe; + FILE *fmpd; + Bool is_end; + + e = parse_root_playlist(m3u8_file, &pl, base_url); + if (e) { + GF_LOG(GF_LOG_ERROR, GF_LOG_CONTAINER, ("[M3U8] Failed to parse root playlist '%s', error = %s\n", m3u8_file, gf_error_to_string(e))); + if (pl) variant_playlist_del(pl); + pl = NULL; + return e; + } + if (mpd_file == NULL){ + gf_delete_file(m3u8_file); + mpd_file = m3u8_file; + } + the_pe = NULL; + is_end = !pl->playlistNeedsRefresh; + i=0; + assert( pl ); + assert( pl->programs ); + while ((prog = gf_list_enum(pl->programs, &i))) { + u32 j=0; + while (NULL != (pe = gf_list_enum(prog->bitrates, &j))) { + Bool found = 0; + u32 k; + char *suburl; + + if (!pe->url || !strstr(pe->url, ".m3u8")) + continue; + + /*filter out duplicated entries (seen on M6 m3u8)*/ + for (k=0; kbitrates, k); + if (a_pe->url && pe->url && !strcmp(a_pe->url, pe->url)) { + found = 1; + break; + } + } + if (found) continue; + + the_pe = pe; + suburl = gf_url_concatenate(base_url, pe->url); + if (!strcmp(base_url, suburl)) { + gf_free(suburl); + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD Generator] Not downloading, programs are identical for %s...\n", pe->url)); + continue; + } + if (service) { + GF_DownloadSession *sess = gf_term_download_new(service, suburl, GF_NETIO_SESSION_NOT_THREADED, NULL, NULL); + if (!sess) { + gf_free(suburl); + break; + } + e = gf_dm_sess_process(sess); + if (e==GF_OK) { + e = parse_sub_playlist(gf_dm_sess_get_cache_name(sess), &pl, suburl, prog, pe); + } + gf_term_download_del(sess); + gf_free(suburl); + } else { /* for use in MP4Box */ + extern GF_Err gf_dm_wget(const char *url, const char *filename); + e = gf_dm_wget(suburl, "tmp.m3u8"); + if (e==GF_OK) { + e = parse_sub_playlist("tmp.m3u8", &pl, suburl, prog, pe); + } + gf_delete_file("tmp.m3u8"); + } + } + } + + assert(the_pe); + + update_interval = 0; + /*update interval is set to the duration of the last media file with rules defined in http live streaming RFC section 6.3.4*/ + switch (reload_count) { + case 0: + update_interval = the_pe->durationInfo; + break; + case 1: + update_interval = the_pe->durationInfo/2; + break; + case 2: + update_interval = 3*(the_pe->durationInfo/2); + break; + default: + update_interval = 3*(the_pe->durationInfo); + break; + } + if (is_end || ((the_pe->elementType == TYPE_PLAYLIST) && the_pe->element.playlist.is_ended)) { + update_interval = 0; + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD Generator] NO NEED to refresh playlist !\n")); + } else { + GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[MPD Generator] Playlist will be refreshed every %g seconds, len=%d\n", update_interval, the_pe->durationInfo)); + } + + assert( mpd_file ); + fmpd = gf_f64_open(mpd_file, "wt"); + if (!fmpd){ + GF_LOG(GF_LOG_ERROR, GF_LOG_MODULE, ("[MPD Generator] Cannot write to temp file %s!\n", mpd_file)); + variant_playlist_del(pl); + return GF_IO_ERR; + } + fprintf(fmpd, "\n"); + + fprintf(fmpd, " \n"); + { + char * title = the_pe->title; + if (!title || strlen(title) < 2) + title = the_pe->url; + fprintf(fmpd, " %s\n", title ); + } + fprintf(fmpd, " Generated from URL %s\n", base_url ); + fprintf(fmpd, " Generated by GPAC %s from %s\n", GPAC_FULL_VERSION, base_url); + + fprintf(fmpd, " \n"); + fprintf(fmpd, " \n"); + + count = gf_list_count(pl->programs); + for (i=0; iprograms, i); + count2 = gf_list_count(prog->bitrates); + for (j = 0; jbitrates, j); + if (pe->elementType == TYPE_PLAYLIST) { + u32 k, count3; + char *base_url = gf_strdup(pe->url); + char *sep = strrchr(base_url, '/'); + if (sep) *(sep+1) = 0; + if (pe->codecs && (pe->codecs[0] = '\"')) { + u32 len = strlen(pe->codecs); + strncpy(pe->codecs, pe->codecs+1, len-1); + pe->codecs[len-2] = 0; + } + /* SOUCHAY : if mime-type is still unknown, do not try to add codec information since it would be wrong */ + if (!strcmp(M3U8_UNKOWN_MIME_TYPE, mimeTypeForM3U8Segments)){ + fprintf(fmpd, " \n", mimeTypeForM3U8Segments, pe->bandwidth); + } else { + fprintf(fmpd, " \n", mimeTypeForM3U8Segments, (pe->codecs ? ";codecs=":""), (pe->codecs ? pe->codecs:""), pe->bandwidth); + } + fprintf(fmpd, "\n \n", pe->durationInfo, base_url); + count3 = gf_list_count(pe->element.playlist.elements); + update_interval = (count3 - 1) * pe->durationInfo * 1000; + for (k=0; kelement.playlist.elements, k); + + /*remove protocol scheme and try to find the common part in baseURL and segment URL - this avoids copying the entire url*/ + src_url = strstr(base_url, "://"); + if (src_url) src_url += 3; + else src_url = base_url; + + seg_url = strstr(elt->url, "://"); + if (seg_url) seg_url += 3; + else seg_url = elt->url; + + while (src_url[cmp] == seg_url[cmp]) cmp++; + fprintf(fmpd, " \n", cmp ? (seg_url + cmp) : elt->url); + } + fprintf(fmpd, " \n"); + fprintf(fmpd, " \n"); + gf_free(base_url); + } else if (pe->elementType == TYPE_STREAM) { + fprintf(stdout, "NOT SUPPORTED: M3U8 Stream\n"); + } + } + } + fprintf(fmpd, " \n"); + fprintf(fmpd, ""); + fclose(fmpd); + variant_playlist_del(pl); + return GF_OK; +} + diff --git a/src/media_tools/mpegts.c b/src/media_tools/mpegts.c index 8557eff..eb052cd 100644 --- a/src/media_tools/mpegts.c +++ b/src/media_tools/mpegts.c @@ -24,12 +24,17 @@ #include +#include + + #ifndef GPAC_DISABLE_MPEG2TS #include #include #include #include +#include +#include #define DUMP_MPE_IP_DATAGRAMS //#define FORCE_DISABLE_MPEG4SL_OVER_MPEG2TS @@ -64,7 +69,7 @@ const char *gf_m2ts_get_stream_name(u32 streamType) } } -static void gf_m2ts_reframe_default(GF_M2TS_Demuxer *ts, GF_M2TS_PES *pes, u64 DTS, u64 PTS, unsigned char *data, u32 data_len) +static u32 gf_m2ts_reframe_default(GF_M2TS_Demuxer *ts, GF_M2TS_PES *pes, u64 DTS, u64 PTS, unsigned char *data, u32 data_len) { GF_M2TS_PES_PCK pck; pck.flags = 0; @@ -84,9 +89,11 @@ static void gf_m2ts_reframe_default(GF_M2TS_Demuxer *ts, GF_M2TS_PES *pes, u64 D pck.data_len = data_len; pck.stream = pes; ts->on_event(ts, GF_M2TS_EVT_PES_PCK, &pck); + /*we consumed all data*/ + return 0; } -static void gf_m2ts_reframe_avc_h264(GF_M2TS_Demuxer *ts, GF_M2TS_PES *pes, u64 DTS, u64 PTS, unsigned char *data, u32 data_len) +static u32 gf_m2ts_reframe_avc_h264(GF_M2TS_Demuxer *ts, GF_M2TS_PES *pes, u64 DTS, u64 PTS, unsigned char *data, u32 data_len) { Bool force_new_au=0; Bool start_code_found = 0; @@ -114,6 +121,9 @@ static void gf_m2ts_reframe_avc_h264(GF_M2TS_Demuxer *ts, GF_M2TS_PES *pes, u64 unsigned char *start = (unsigned char *)memchr(data+sc_pos, 0, data_len-sc_pos); if (!start) break; sc_pos = start - data; + /*not enough space to test for start code, don't check it*/ + if (data_len - sc_pos < 5) + break; /*0x00000001 start code*/ if (!start[1] && !start[2] && (start[3]==1)) { @@ -201,7 +211,14 @@ static void gf_m2ts_reframe_avc_h264(GF_M2TS_Demuxer *ts, GF_M2TS_PES *pes, u64 } } } - if (data_len && start_code_found) { + /*we did not consume all data*/ + if (!start_code_found) { + /*if not enough data to locate start code, store it*/ + if (data_len<5) return data_len; + /*otherwise this is the middle of a frame, let's dispatch it*/ + } + + if (data_len) { pck.flags = 0; pck.data = data; pck.data_len = data_len; @@ -222,12 +239,13 @@ static void gf_m2ts_reframe_avc_h264(GF_M2TS_Demuxer *ts, GF_M2TS_PES *pes, u64 pck.flags |= GF_M2TS_PES_PCK_AU_START; force_new_au = 0; } - ts->on_event(ts, GF_M2TS_EVT_PES_PCK, &pck); } + /*we consumed all data*/ + return 0; } -void gf_m2ts_reframe_mpeg_video(GF_M2TS_Demuxer *ts, GF_M2TS_PES *pes, u64 DTS, u64 PTS, unsigned char *data, u32 data_len) +static u32 gf_m2ts_reframe_mpeg_video(GF_M2TS_Demuxer *ts, GF_M2TS_PES *pes, u64 DTS, u64 PTS, unsigned char *data, u32 data_len) { u32 sc_pos = 0; u32 to_send = data_len; @@ -308,6 +326,8 @@ void gf_m2ts_reframe_mpeg_video(GF_M2TS_Demuxer *ts, GF_M2TS_PES *pes, u64 DTS, pck.data = data; pck.data_len = data_len; ts->on_event(ts, GF_M2TS_EVT_PES_PCK, &pck); + /*we consumed all data*/ + return 0; } #ifndef GPAC_DISABLE_AV_PARSERS @@ -330,12 +350,14 @@ typedef struct u32 profile, sr_idx, nb_ch, frame_size; } ADTSHeader; -static void gf_m2ts_reframe_aac_adts(GF_M2TS_Demuxer *ts, GF_M2TS_PES *pes, u64 DTS, u64 PTS, unsigned char *data, u32 data_len) +static u32 gf_m2ts_reframe_aac_adts(GF_M2TS_Demuxer *ts, GF_M2TS_PES *pes, u64 DTS, u64 PTS, unsigned char *data, u32 data_len) { ADTSHeader hdr; u32 sc_pos = 0; u32 start = 0; u32 hdr_size = 0; + Bool first = 1; + u32 remain; GF_M2TS_PES_PCK pck; if (PTS) { @@ -348,7 +370,10 @@ static void gf_m2ts_reframe_aac_adts(GF_M2TS_Demuxer *ts, GF_M2TS_PES *pes, u64 pck.DTS = pes->DTS; pck.PTS = pes->PTS; pck.flags = 0; + remain = pes->frame_state; + pes->frame_state = 0; + /*fixme - we need to test this with more ADTS sources were PES framing is on any boundaries*/ while (sc_pos+2on_event(ts, GF_M2TS_EVT_PES_PCK, &pck); + remain = 0; } bs = gf_bs_new(data + sc_pos + 1, 9, GF_BITSTREAM_READ); @@ -388,13 +415,24 @@ static void gf_m2ts_reframe_aac_adts(GF_M2TS_Demuxer *ts, GF_M2TS_PES *pes, u64 gf_bs_del(bs); + /*make sure we are sync if we have more data following*/ + if (sc_pos + hdr.frame_size < data_len) { + if ((data[sc_pos + hdr.frame_size]!=0xFF) || ((data[sc_pos+hdr.frame_size+1] & 0xF0) != 0xF0)) { + sc_pos++; + continue; + } + } else if (first && (hdr.frame_size + sc_pos > data_len)) { + sc_pos++; + continue; + } + if (pes->aud_sr != GF_M4ASampleRates[hdr.sr_idx]) { GF_M4ADecSpecInfo cfg; pck.stream = pes; memset(&cfg, 0, sizeof(GF_M4ADecSpecInfo)); cfg.base_object_type = hdr.profile; - cfg.base_sr = GF_M4ASampleRates[hdr.sr_idx]; - cfg.nb_chan = hdr.nb_ch; + pes->aud_sr = cfg.base_sr = GF_M4ASampleRates[hdr.sr_idx]; + pes->aud_nb_ch = cfg.nb_chan = hdr.nb_ch; cfg.sbr_object_type = 0; gf_m4a_write_config(&cfg, &pck.data, &pck.data_len); ts->on_event(ts, GF_M2TS_EVT_AAC_CFG, &pck); @@ -411,18 +449,28 @@ static void gf_m2ts_reframe_aac_adts(GF_M2TS_Demuxer *ts, GF_M2TS_PES *pes, u64 pck.data = data + sc_pos + hdr_size; pck.data_len = hdr.frame_size - hdr_size; + if (pck.data_len > data_len - sc_pos - hdr_size) { + /*remember how much we have to send*/ + pes->frame_state = pck.data_len - (data_len - sc_pos - hdr_size); + pck.data_len = data_len - sc_pos - hdr_size; + } + ts->on_event(ts, GF_M2TS_EVT_PES_PCK, &pck); - sc_pos += hdr.frame_size; + sc_pos += pck.data_len + hdr_size; start = sc_pos; + /*update PTS in case we don't get any update*/ if (pes->aud_sr) { size = 1024*90000/pes->aud_sr; pes->PTS += size; } + first = 0; } + /*we consumed all data*/ + return 0; } -static void gf_m2ts_reframe_aac_latm(GF_M2TS_Demuxer *ts, GF_M2TS_PES *pes, u64 DTS, u64 PTS, unsigned char *data, u32 data_len) +static u32 gf_m2ts_reframe_aac_latm(GF_M2TS_Demuxer *ts, GF_M2TS_PES *pes, u64 DTS, u64 PTS, unsigned char *data, u32 data_len) { u32 sc_pos = 0; u32 start = 0; @@ -439,6 +487,7 @@ static void gf_m2ts_reframe_aac_latm(GF_M2TS_Demuxer *ts, GF_M2TS_PES *pes, u64 pck.PTS = pes->PTS; pck.flags = 0; + /*fixme - we need to test this with more LATM sources were PES framing is on any boundaries*/ while (sc_pos+2aud_sr) { pck.stream = pes; + pes->aud_sr = cfg.base_sr; + pes->aud_nb_ch = cfg.nb_chan; gf_m4a_write_config(&cfg, &pck.data, &pck.data_len); ts->on_event(ts, GF_M2TS_EVT_AAC_CFG, &pck); gf_free(pck.data); - pes->aud_sr = cfg.base_sr; - pes->aud_nb_ch = cfg.nb_chan; } } frameLengthType = gf_bs_read_int(bs, 3); @@ -556,12 +605,14 @@ static void gf_m2ts_reframe_aac_latm(GF_M2TS_Demuxer *ts, GF_M2TS_PES *pes, u64 start = sc_pos; } + /*we consumed all data*/ + return 0; } #endif #ifndef GPAC_DISABLE_AV_PARSERS -static void gf_m2ts_reframe_mpeg_audio(GF_M2TS_Demuxer *ts, GF_M2TS_PES *pes, u64 DTS, u64 PTS, unsigned char *data, u32 data_len) +static u32 gf_m2ts_reframe_mpeg_audio(GF_M2TS_Demuxer *ts, GF_M2TS_PES *pes, u64 DTS, u64 PTS, unsigned char *data, u32 data_len) { GF_M2TS_PES_PCK pck; u32 pos, frame_size, remain; @@ -570,41 +621,34 @@ static void gf_m2ts_reframe_mpeg_audio(GF_M2TS_Demuxer *ts, GF_M2TS_PES *pes, u6 pck.stream = pes; remain = pes->frame_state; + if (remain) { + /*dispatch end of prev frame*/ + pck.DTS = pck.PTS = pes->PTS; + pck.data = data; + pck.data_len = (remain>data_len) ? data_len : remain; + ts->on_event(ts, GF_M2TS_EVT_PES_PCK, &pck); + if (remain>data_len) { + pes->frame_state = remain - data_len; + /*we consumed all data*/ + return 0; + } + data += remain; + data_len -= remain; + remain=0; + } + pes->frame_state = gf_mp3_get_next_header_mem(data, data_len, &pos); if (!pes->frame_state) { - if (remain) { - /*dispatch end of prev frame*/ - pck.DTS = pck.PTS = pes->PTS; - pck.data = data; - pck.data_len = (remain>data_len) ? data_len : remain; - ts->on_event(ts, GF_M2TS_EVT_PES_PCK, &pck); - if (remain>data_len) pes->frame_state = remain - data_len; - } - return; + /*we did not consumed all data*/ + return data_len; } assert((pes->frame_state & 0xffe00000) == 0xffe00000); - /*resync*/ - if (pos) { - if (remain) { - /*sync error!!*/ - if (remain>pos) { - GF_LOG(GF_LOG_DEBUG, GF_LOG_CONTAINER, ("[MPEG-2 TS] sync error - start code @ %d - remaining from last frame %d\n", pos, remain) ); - remain = pos; - } - /*dispatch end of prev frame*/ - pck.DTS = pck.PTS = pes->PTS; - pck.data = data; - pck.data_len = remain; - ts->on_event(ts, GF_M2TS_EVT_PES_PCK, &pck); - } - data += pos; - data_len -= pos; - } + if (!pes->PTS) { pes->aud_sr = gf_mp3_sampling_rate(pes->frame_state); pes->aud_nb_ch = gf_mp3_num_channels(pes->frame_state); } - /*we may get a PTS for aither the previous or the current frame*/ + /*we may get a PTS for either the previous or the current frame*/ if (PTS>=pes->PTS) pes->PTS = PTS; pck.flags = GF_M2TS_PES_PCK_RAP | GF_M2TS_PES_PCK_AU_START; @@ -624,8 +668,8 @@ static void gf_m2ts_reframe_mpeg_audio(GF_M2TS_Demuxer *ts, GF_M2TS_PES *pes, u6 pes->frame_state = gf_mp3_get_next_header_mem(data, data_len, &pos); /*resync (ID3 or error)*/ if (!pes->frame_state) { - data_len = 0; - break; + /*we did not consumed all data*/ + return data_len; } /*resync (ID3 or error)*/ if (pos) { @@ -645,6 +689,8 @@ static void gf_m2ts_reframe_mpeg_audio(GF_M2TS_Demuxer *ts, GF_M2TS_PES *pes, u6 } else { pes->frame_state = 0; } + /*we consumed all data*/ + return 0; } #endif /*GPAC_DISABLE_AV_PARSERS*/ @@ -732,6 +778,7 @@ void gf_m2ts_es_del(GF_M2TS_ES *es) } else if (es->pid!=es->program->pmt_pid) { GF_M2TS_PES *pes = (GF_M2TS_PES *)es; if (pes->data) gf_free(pes->data); + if (pes->prev_data) gf_free(pes->prev_data); if (pes->buf) gf_free(pes->buf); } if (es->slcfg) gf_free(es->slcfg); @@ -752,14 +799,19 @@ static void gf_m2ts_reset_sdt(GF_M2TS_Demuxer *ts) static void gf_m2ts_section_complete(GF_M2TS_Demuxer *ts, GF_M2TS_SectionFilter *sec, GF_M2TS_SECTION_ES *ses) { if (!sec->process_section) { - if (ts->on_mpe_event && ((ses && (ses->flags & GF_M2TS_EVT_DVB_MPE)) || (sec->section[0]==GF_M2TS_TABLE_ID_INT)) ) { + if ((ts->on_event && (sec->section[0]==GF_M2TS_TABLE_ID_AIT)) ) { + GF_M2TS_SL_PCK pck; + pck.data_len = sec->length; + pck.data = sec->section; + pck.stream = (GF_M2TS_ES *)ses; + ts->on_event(ts, GF_M2TS_EVT_AIT_FOUND, &pck); + } else if (ts->on_mpe_event && ((ses && (ses->flags & GF_M2TS_EVT_DVB_MPE)) || (sec->section[0]==GF_M2TS_TABLE_ID_INT)) ) { GF_M2TS_SL_PCK pck; pck.data_len = sec->length; pck.data = sec->section; pck.stream = (GF_M2TS_ES *)ses; ts->on_mpe_event(ts, GF_M2TS_EVT_DVB_MPE, &pck); - } - else if (ts->on_event) { + } else if (ts->on_event) { GF_M2TS_SL_PCK pck; pck.data_len = sec->length; pck.data = sec->section; @@ -782,12 +834,22 @@ static void gf_m2ts_section_complete(GF_M2TS_Demuxer *ts, GF_M2TS_SectionFilter /*look for proper table*/ table_id = data[0]; - if ((table_id == GF_M2TS_TABLE_ID_PAT || table_id == GF_M2TS_TABLE_ID_SDT_ACTUAL || table_id == GF_M2TS_TABLE_ID_PMT || table_id == GF_M2TS_TABLE_ID_NIT_ACTUAL) && ts->on_event) { - GF_M2TS_SL_PCK pck; - pck.data_len = sec->length; - pck.data = sec->section; - pck.stream = (GF_M2TS_ES *)ses; - ts->on_event(ts, GF_M2TS_EVT_DVB_GENERAL, &pck); + if (ts->on_event) { + switch (table_id) { + case GF_M2TS_TABLE_ID_PAT: + case GF_M2TS_TABLE_ID_SDT_ACTUAL: + case GF_M2TS_TABLE_ID_PMT: + case GF_M2TS_TABLE_ID_NIT_ACTUAL: + case GF_M2TS_TABLE_ID_TDT: + case GF_M2TS_TABLE_ID_TOT: + { + GF_M2TS_SL_PCK pck; + pck.data_len = sec->length; + pck.data = sec->section; + pck.stream = (GF_M2TS_ES *)ses; + ts->on_event(ts, GF_M2TS_EVT_DVB_GENERAL, &pck); + } + } } has_syntax_indicator = (data[1] & 0x80) ? 1 : 0; @@ -919,6 +981,7 @@ static Bool gf_m2ts_is_long_section(u8 table_id) switch (table_id) { case GF_M2TS_TABLE_ID_MPEG4_BIFS: case GF_M2TS_TABLE_ID_MPEG4_OD: + case GF_M2TS_TABLE_ID_INT: case GF_M2TS_TABLE_ID_EIT_ACTUAL_PF: case GF_M2TS_TABLE_ID_EIT_OTHER_PF: case GF_M2TS_TABLE_ID_ST: @@ -1064,7 +1127,7 @@ static void gf_m2ts_process_sdt(GF_M2TS_Demuxer *ts, GF_M2TS_SECTION_ES *ses, GF nb_sections = gf_list_count(sections); if (nb_sections > 1) { - GF_LOG(GF_LOG_WARNING, GF_LOG_CONTAINER, ("SDT on multiple sections not supported\n")); + GF_LOG(GF_LOG_WARNING, GF_LOG_CONTAINER, ("[MPEG-2 TS] SDT on multiple sections not supported\n")); } section = (GF_M2TS_Section *)gf_list_get(sections, 0); @@ -1156,13 +1219,125 @@ static void gf_m2ts_process_mpeg4section(GF_M2TS_Demuxer *ts, GF_M2TS_SECTION_ES static void gf_m2ts_process_nit(GF_M2TS_Demuxer *ts, GF_M2TS_SECTION_ES *nit_es, GF_List *sections, u8 table_id, u16 ex_table_id, u8 version_number, u8 last_section_number, u32 status) { + GF_LOG(GF_LOG_DEBUG, GF_LOG_CONTAINER, ("[MPEG-2 TS] NIT table processing (not yet implemented)")); +} + +extern void dvb_decode_mjd_date(u32 date, u16 *year, u8 *month, u8 *day); +static void gf_m2ts_process_tdt_tot(GF_M2TS_Demuxer *ts, GF_M2TS_SECTION_ES *tdt_tot_es, GF_List *sections, u8 table_id, u16 ex_table_id, u8 version_number, u8 last_section_number, u32 status) +{ + unsigned char *data; + u32 data_size, nb_sections; + GF_M2TS_Section *section; + GF_M2TS_TDT_TOT *time_table; + const char *table_name; + + /*wait for the last section */ + if ( !(status & GF_M2TS_TABLE_END) ) + return; + + switch (table_id) { + case GF_M2TS_TABLE_ID_TDT: + table_name = "TDT"; + break; + case GF_M2TS_TABLE_ID_TOT: + table_name = "TOT"; + break; + default: + GF_LOG(GF_LOG_DEBUG, GF_LOG_CONTAINER, ("[MPEG-2 TS] Unimplemented table_id %u for PID %u\n", table_id, GF_M2TS_PID_TDT_TOT_ST)); + return; + } + + nb_sections = gf_list_count(sections); + if (nb_sections > 1) { + GF_LOG(GF_LOG_WARNING, GF_LOG_CONTAINER, ("[MPEG-2 TS] %s on multiple sections not supported\n", table_name)); + } + + section = (GF_M2TS_Section *)gf_list_get(sections, 0); + data = section->data; + data_size = section->data_size; + /*TOT only contains 40 bits of UTC_time; TDT add descriptors and a CRC*/ + assert(table_id!=GF_M2TS_TABLE_ID_TDT || data_size == 5); /**/ + GF_SAFEALLOC(time_table, GF_M2TS_TDT_TOT); + /*UTC_time - see annex C of DVB-SI ETSI EN 300468*/ + dvb_decode_mjd_date(data[0]*256 + data[1], &(time_table->year), &(time_table->month), &(time_table->day)); + time_table->hour = 10*((data[2]&0xf0)>>4) + (data[2]&0x0f); + time_table->minute = 10*((data[3]&0xf0)>>4) + (data[3]&0x0f); + time_table->second = 10*((data[4]&0xf0)>>4) + (data[4]&0x0f); + assert(time_table->hour<24 && time_table->minute<60 && time_table->second<60); + GF_LOG(GF_LOG_DEBUG, GF_LOG_CONTAINER, ("[MPEG-2 TS] Stream UTC time is %u/%02u/%02u %02u:%02u:%02u\n", time_table->year, time_table->month, time_table->day, time_table->hour, time_table->minute, time_table->second)); + + switch (table_id) { + case GF_M2TS_TABLE_ID_TDT: + if (ts->TDT_time) gf_free(ts->TDT_time); + ts->TDT_time = time_table; + if (ts->on_event) ts->on_event(ts, GF_M2TS_EVT_TDT, time_table); + break; + case GF_M2TS_TABLE_ID_TOT: +#if 0 + { + u32 pos, loop_len; + loop_len = ((data[5]&0x0f) << 8) | (data[6] & 0xff); + data += 7; + pos = 0; + while (pos < loop_len) { + u8 tag = data[pos]; + pos += 2; + if (tag == GF_M2TS_DVB_LOCAL_TIME_OFFSET_DESCRIPTOR) { + char tmp_time[10]; + u16 offset_hours, offset_minutes; + now->country_code[0] = data[pos]; + now->country_code[1] = data[pos+1]; + now->country_code[2] = data[pos+2]; + now->country_region_id = data[pos+3]>>2; + + sprintf(tmp_time, "%02x", data[pos+4]); + offset_hours = atoi(tmp_time); + sprintf(tmp_time, "%02x", data[pos+5]); + offset_minutes = atoi(tmp_time); + now->local_time_offset_seconds = (offset_hours * 60 + offset_minutes) * 60; + if (data[pos+3] & 1) now->local_time_offset_seconds *= -1; + + dvb_decode_mjd_to_unix_time(data+pos+6, &now->unix_next_toc); + + sprintf(tmp_time, "%02x", data[pos+11]); + offset_hours = atoi(tmp_time); + sprintf(tmp_time, "%02x", data[pos+12]); + offset_minutes = atoi(tmp_time); + now->next_time_offset_seconds = (offset_hours * 60 + offset_minutes) * 60; + if (data[pos+3] & 1) now->next_time_offset_seconds *= -1; + pos+= 13; + } + } + /*TODO: check lengths are ok*/ + if (ts->on_event) ts->on_event(ts, GF_M2TS_EVT_TOT, time_table); + } +#endif + /*check CRC32*/ + if (!gf_m2ts_crc32_check(ts->tdt_tot->section, ts->tdt_tot->length-4)) { + GF_LOG(GF_LOG_ERROR, GF_LOG_CONTAINER, ("[MPEG-2 TS] corrupted %s table (CRC32 failed)\n", table_name)); + goto error_exit; + } + if (ts->TDT_time) gf_free(ts->TDT_time); + ts->TDT_time = time_table; + if (ts->on_event) ts->on_event(ts, GF_M2TS_EVT_TOT, time_table); + break; + default: + assert(0); + goto error_exit; + } + + return; /*success*/ + +error_exit: + gf_free(time_table); + return; } static void gf_m2ts_process_pmt(GF_M2TS_Demuxer *ts, GF_M2TS_SECTION_ES *pmt, GF_List *sections, u8 table_id, u16 ex_table_id, u8 version_number, u8 last_section_number, u32 status) { - u32 info_length, pos, desc_len, evt_type, nb_es; + u32 info_length, pos, desc_len, evt_type, nb_es,i; u32 nb_sections; u32 data_size; unsigned char *data; @@ -1210,6 +1385,8 @@ static void gf_m2ts_process_pmt(GF_M2TS_Demuxer *ts, GF_M2TS_SECTION_ES *pmt, GF iod_bs = gf_bs_new(data+8, len-2, GF_BITSTREAM_READ); if (pmt->program->pmt_iod) gf_odf_desc_del((GF_Descriptor *)pmt->program->pmt_iod); gf_odf_parse_descriptor(iod_bs , (GF_Descriptor **) &pmt->program->pmt_iod, &size); + /*remember program number for service/program selection*/ + if (pmt->program->pmt_iod) pmt->program->pmt_iod->ServiceID = pmt->program->number; gf_bs_del(iod_bs ); } else { #else @@ -1224,6 +1401,16 @@ static void gf_m2ts_process_pmt(GF_M2TS_Demuxer *ts, GF_M2TS_SECTION_ES *pmt, GF data += 4 + info_length; data_size -= 4 + info_length; pos = 0; + + /* count de number of program related PMT received */ + for(i=0;iprograms);i++){ + GF_M2TS_Program *prog = (GF_M2TS_Program *)gf_list_get(ts->programs,i); + if(prog->pmt_pid == pmt->pid){ + ts->nb_prog_pmt_received++; + break; + } + } + while (posprogram->number); + ses = (GF_M2TS_SECTION_ES *)es; + ses->sec = gf_m2ts_section_filter_new(NULL, 0); + break; + case GF_M2TS_13818_6_ANNEX_D: GF_SAFEALLOC(ses, GF_M2TS_SECTION_ES); es = (GF_M2TS_ES *)ses; - es->flags |= GF_M2TS_ES_IS_SECTION; - if (stream_type == GF_M2TS_13818_6_ANNEX_D) - printf("stream type DSM CC user private section: pid = %d \n", pid); - else - printf("unknown private section: pid = %d \n", pid); + es->flags |= GF_M2TS_ES_IS_SECTION; + printf("stream type DSM CC user private section: pid = %d \n", pid); /* NULL means: trigger the call to on_event with DVB_GENERAL type and the raw section as payload */ ses->sec = gf_m2ts_section_filter_new(NULL, 1); break; @@ -1351,7 +1543,7 @@ static void gf_m2ts_process_pmt(GF_M2TS_Demuxer *ts, GF_M2TS_SECTION_ES *pmt, GF case GF_M2TS_DVB_DATA_BROADCAST_ID_DESCRIPTOR: { u32 id = data[2]<<8 | data[3]; - if (id == 0xB) { + if ((id == 0xB) && ses && !ses->sec) { ses->sec = gf_m2ts_section_filter_new(NULL, 1); } } @@ -1428,7 +1620,11 @@ static void gf_m2ts_process_pmt(GF_M2TS_Demuxer *ts, GF_M2TS_SECTION_ES *pmt, GF nb_es++; } } + if (nb_es) { + if(ts->nb_prog_pmt_received == gf_list_count(ts->programs)){ + ts->all_prog_pmt_received = 1; + } evt_type = (status&GF_M2TS_TABLE_FOUND) ? GF_M2TS_EVT_PMT_FOUND : GF_M2TS_EVT_PMT_UPDATE; if (ts->on_event) ts->on_event(ts, evt_type, pmt->program); } else { @@ -1461,19 +1657,19 @@ static void gf_m2ts_process_pat(GF_M2TS_Demuxer *ts, GF_M2TS_SECTION_ES *ses, GF if (nb_sections > 1) { GF_LOG(GF_LOG_WARNING, GF_LOG_CONTAINER, ("PAT on multiple sections not supported\n")); } - + section = (GF_M2TS_Section *)gf_list_get(sections, 0); data = section->data; data_size = section->data_size; - nb_progs = data_size / 4; + nb_progs = data_size / 4; for (i=0; init) { ts->nit = gf_m2ts_section_filter_new(gf_m2ts_process_nit, 0); } @@ -1494,7 +1690,7 @@ static void gf_m2ts_process_pat(GF_M2TS_Demuxer *ts, GF_M2TS_SECTION_ES *ses, GF } evt_type = (status&GF_M2TS_TABLE_UPDATE) ? GF_M2TS_EVT_PAT_UPDATE : GF_M2TS_EVT_PAT_FOUND; - if (ts->on_event) ts->on_event(ts, evt_type, NULL); + if (ts->on_event) ts->on_event(ts, evt_type, NULL); } static void gf_m2ts_process_cat(GF_M2TS_Demuxer *ts, GF_M2TS_SECTION_ES *ses, GF_List *sections, u8 table_id, u16 ex_table_id, u8 version_number, u8 last_section_number, u32 status) @@ -1624,26 +1820,110 @@ static void gf_m2ts_pes_header(GF_M2TS_PES *pes, unsigned char *data, u32 data_s } } +static void gf_m2ts_flush_pes(GF_M2TS_Demuxer *ts, GF_M2TS_PES *pes, GF_M2TS_Header *hdr) +{ + GF_M2TS_PESHeader pesh; + + /*we need at least a full, valid start code !!*/ + if ((pes->data_len >= 4) && !pes->data[0] && !pes->data[1] && (pes->data[2]==0x1)) { + u32 len; + u32 stream_id = pes->data[3] | 0x100; + if ((stream_id >= 0x1c0 && stream_id <= 0x1df) || + (stream_id >= 0x1e0 && stream_id <= 0x1ef) || + (stream_id == 0x1bd)) { + + /*OK read header*/ + gf_m2ts_pes_header(pes, pes->data+3, pes->data_len-3, &pesh); + { + GF_M2TS_PES_PCK pck; + memset(&pck, 0, sizeof(GF_M2TS_PES_PCK)); + pck.PTS = pesh.PTS; + pck.DTS = pesh.DTS; + pck.stream = pes; + if (pes->rap) pck.flags |= GF_M2TS_PES_PCK_RAP; + pes->pes_end_packet_number = ts->pck_number; + if (ts->on_event) ts->on_event(ts, GF_M2TS_EVT_PES_TIMING, &pck); + } + + GF_LOG(GF_LOG_DEBUG, GF_LOG_CONTAINER, ("[MPEG-2 TS] PID %d Got PES header PTS %d\n", pes->pid, pesh.PTS)); + /*3-byte start-code + 6 bytes header + hdr extensions*/ + len = 9 + pesh.hdr_data_len; + if (pes->reframe) { + u32 remain; + u32 offset = len; + + if (pes->prev_data_len) { + assert(pes->prev_data_len < len); + offset = len - pes->prev_data_len; + memcpy(pes->data + offset, pes->prev_data, pes->prev_data_len); + } + remain = pes->reframe(ts, pes, pesh.DTS, pesh.PTS, pes->data+offset, pes->data_len-offset); + + if (pes->prev_data) gf_free(pes->prev_data); + pes->prev_data = NULL; + pes->prev_data_len = 0; + if (remain) { + pes->prev_data = gf_malloc(sizeof(char)*remain); + memcpy(pes->prev_data, pes->data + pes->data_len - remain, remain); + pes->prev_data_len = remain; + } + } + } + /*SL-packetized stream*/ + else if ((u8) pes->data[3]==0xfa) { + GF_M2TS_SL_PCK sl_pck; + /*read header*/ + gf_m2ts_pes_header(pes, pes->data+3, pes->data_len-3, &pesh); + + /*3-byte start-code + 6 bytes header + hdr extensions*/ + len = 9 + pesh.hdr_data_len; + + GF_LOG(GF_LOG_DEBUG, GF_LOG_CONTAINER, ("[MPEG-2 TS] SL Packet in PES for %d - ES ID %d\n", pes->pid, pes->mpeg4_es_id)); + if (pes->data_len > len) { + sl_pck.data = pes->data + len; + sl_pck.data_len = pes->data_len - len; + sl_pck.stream = (GF_M2TS_ES *)pes; + if (ts->on_event) ts->on_event(ts, GF_M2TS_EVT_SL_PCK, &sl_pck); + } else { + GF_LOG(GF_LOG_ERROR, GF_LOG_CONTAINER, ("[MPEG-2 TS] Bad SL Packet size: (%d indicated < %d header)\n", pes->pid, pes->data_len, len)); + } + } else { + GF_LOG(GF_LOG_WARNING, GF_LOG_CONTAINER, ("[MPEG-2 TS] PES %d: unknown stream ID %08X\n", pes->pid, stream_id)); + } + } else { + GF_LOG(GF_LOG_WARNING, GF_LOG_CONTAINER, ("[MPEG-2 TS] PES %d: Bad PES Header, discarding packet (maybe stream is encrypted ?)\n", hdr->pid)); + } + if (pes->data) gf_free(pes->data); + pes->data = NULL; + pes->data_len = 0; + pes->pes_len = 0; + pes->rap = 0; +} static void gf_m2ts_process_pes(GF_M2TS_Demuxer *ts, GF_M2TS_PES *pes, GF_M2TS_Header *hdr, unsigned char *data, u32 data_size, GF_M2TS_AdaptationField *paf) { + u8 expect_cc; + Bool disc; Bool flush_pes = 0; -#if 0 - u8 expect_cc = (pes->cc<0) ? hdr->continuity_counter : (pes->cc + 1) & 0xf; - Bool disc = (expect_cc == hdr->continuity_counter) ? 0 : 1; - pes->cc = expect_cc; + /*duplicated packet, NOT A DISCONTINUITY, discard the packet*/ + if (hdr->continuity_counter==pes->cc) return; + + expect_cc = (pes->cc<0) ? hdr->continuity_counter : (pes->cc + 1) & 0xf; + disc = (expect_cc == hdr->continuity_counter) ? 0 : 1; + pes->cc = hdr->continuity_counter; if (disc) { + GF_LOG(GF_LOG_ERROR, GF_LOG_CONTAINER, ("[MPEG-2 TS] PES %d: Packet discontinuity (%d expected - got %d- - trashing PES packet\n", pes->pid, expect_cc, hdr->continuity_counter)); if (pes->data) { gf_free(pes->data); pes->data = NULL; } pes->data_len = 0; pes->pes_len = 0; + pes->cc = -1; return; } -#endif if (!pes->reframe) return; @@ -1668,66 +1948,7 @@ static void gf_m2ts_process_pes(GF_M2TS_Demuxer *ts, GF_M2TS_PES *pes, GF_M2TS_H /*PES first fragment: flush previous packet*/ if (flush_pes && pes->data) { - GF_M2TS_PESHeader pesh; - - /*we need at least a full, valid start code !!*/ - if ((pes->data_len >= 4) && !pes->data[0] && !pes->data[1] && (pes->data[2]==0x1)) { - u32 len; - u32 stream_id = pes->data[3] | 0x100; - if ((stream_id >= 0x1c0 && stream_id <= 0x1df) || - (stream_id >= 0x1e0 && stream_id <= 0x1ef) || - (stream_id == 0x1bd)) { - - /*OK read header*/ - gf_m2ts_pes_header(pes, pes->data+3, pes->data_len-3, &pesh); - { - GF_M2TS_PES_PCK pck; - memset(&pck, 0, sizeof(GF_M2TS_PES_PCK)); - pck.PTS = pesh.PTS; - pck.DTS = pesh.DTS; - pck.stream = pes; - if (pes->rap) pck.flags |= GF_M2TS_PES_PCK_RAP; - pes->pes_end_packet_number = ts->pck_number; - if (ts->on_event) ts->on_event(ts, GF_M2TS_EVT_PES_TIMING, &pck); - } - - GF_LOG(GF_LOG_DEBUG, GF_LOG_CONTAINER, ("[MPEG-2 TS] PID %d Got PES header PTS %d\n", pes->pid, pesh.PTS)); - /*3-byte start-code + 6 bytes header + hdr extensions*/ - len = 9 + pesh.hdr_data_len; - if (pes->reframe) - pes->reframe(ts, pes, pesh.DTS, pesh.PTS, pes->data+len, pes->data_len-len); - } - /*SL-packetized stream*/ - else if ((u8) pes->data[3]==0xfa) { - GF_M2TS_SL_PCK sl_pck; - /*read header*/ - gf_m2ts_pes_header(pes, pes->data+3, pes->data_len-3, &pesh); - - /*3-byte start-code + 6 bytes header + hdr extensions*/ - len = 9 + pesh.hdr_data_len; - - GF_LOG(GF_LOG_DEBUG, GF_LOG_CONTAINER, ("[MPEG-2 TS] SL Packet in PES for %d - ES ID %d\n", pes->pid, pes->mpeg4_es_id)); - if (pes->data_len > len) { - sl_pck.data = pes->data + len; - sl_pck.data_len = pes->data_len - len; - sl_pck.stream = (GF_M2TS_ES *)pes; - if (ts->on_event) ts->on_event(ts, GF_M2TS_EVT_SL_PCK, &sl_pck); - } else { - GF_LOG(GF_LOG_ERROR, GF_LOG_CONTAINER, ("[MPEG-2 TS] Bad SL Packet size: (%d indicated < %d header)\n", pes->pid, pes->data_len, len)); - } - } else { - GF_LOG(GF_LOG_WARNING, GF_LOG_CONTAINER, ("[MPEG-2 TS] PES %d: unknown stream ID %08X\n", pes->pid, stream_id)); - } - } else { - GF_LOG(GF_LOG_WARNING, GF_LOG_CONTAINER, ("[MPEG-2 TS] PES %d: Bad PES Header, discarding packet (maybe stream is encrypted ?)\n", hdr->pid)); - } - if (pes->data) { - gf_free(pes->data); - pes->data = NULL; - pes->data_len = 0; - pes->pes_len = 0; - } - pes->rap = 0; + gf_m2ts_flush_pes(ts, pes, hdr); if (!data_size) return; } /*we need to wait for first packet of PES*/ @@ -1749,6 +1970,10 @@ static void gf_m2ts_process_pes(GF_M2TS_Demuxer *ts, GF_M2TS_PES *pes, GF_M2TS_H if (hdr->payload_start && !pes->pes_len && (pes->data_len>=6)) { pes->pes_len = (pes->data[4]<<8) | pes->data[5]; GF_LOG(GF_LOG_DEBUG, GF_LOG_CONTAINER, ("[MPEG-2 TS] PID %d: Got PES packet len %d\n", pes->pid, pes->pes_len)); + + if (pes->pes_len + 6 == pes->data_len) { + gf_m2ts_flush_pes(ts, pes, hdr); + } } } @@ -1810,7 +2035,7 @@ static void gf_m2ts_process_packet(GF_M2TS_Demuxer *ts, unsigned char *data) //#if DEBUG_TS_PACKET GF_LOG(GF_LOG_DEBUG, GF_LOG_CONTAINER, ("[MPEG-2 TS] Packet PID %d\n", hdr.pid)); //#endif - + //printf("[MPEG-2 TS] Packet PID %d\n", hdr.pid); paf = NULL; payload_size = 184; pos = 4; @@ -1839,6 +2064,8 @@ static void gf_m2ts_process_packet(GF_M2TS_Demuxer *ts, unsigned char *data) memset(paf, 0, sizeof(GF_M2TS_AdaptationField)); gf_m2ts_get_adaptation_field(ts, paf, data+5, af_size, hdr.pid); payload_size = 0; + /*no payload and no PCR, return*/ + if (! paf->PCR_flag) return; break; /*reserved*/ case 0: @@ -1872,19 +2099,17 @@ static void gf_m2ts_process_packet(GF_M2TS_Demuxer *ts, unsigned char *data) gf_m2ts_gather_section(ts, ts->eit, NULL, &hdr, data, payload_size); return; } else if (hdr.pid == GF_M2TS_PID_TDT_TOT_ST) { - gf_m2ts_gather_section(ts, ts->tdt_tot_st, NULL, &hdr, data, payload_size); + gf_m2ts_gather_section(ts, ts->tdt_tot, NULL, &hdr, data, payload_size); } else { /* ignore packet */ } } else if (es->flags & GF_M2TS_ES_IS_SECTION) { /* The stream uses sections to carry its payload */ GF_M2TS_SECTION_ES *ses = (GF_M2TS_SECTION_ES *)es; - //fprintf(stderr, "000000000000000000000000000000000000000000000\n\n\n\n\n\n\n\n"); if (ses->sec) gf_m2ts_gather_section(ts, ses->sec, ses, &hdr, data, payload_size); - //fprintf(stderr, "callback: %x %x\n", ses->sec->process_section, gf_m2ts_process_pmt); } else { GF_M2TS_PES *pes = (GF_M2TS_PES *)es; /* regular stream using PES packets */ - if (pes->reframe) gf_m2ts_process_pes(ts, pes, &hdr, data, payload_size, paf); + if (pes->reframe && payload_size) gf_m2ts_process_pes(ts, pes, &hdr, data, payload_size, paf); } } if (paf && paf->PCR_flag && es) { @@ -1948,7 +2173,7 @@ GF_Err gf_m2ts_process_data(GF_M2TS_Demuxer *ts, char *data, u32 data_size) } return GF_OK; } - /*process*/ + /*process*/ gf_m2ts_process_packet(ts, ts->buffer+pos); pos += 188; } @@ -2014,11 +2239,19 @@ void gf_m2ts_reset_parsers(GF_M2TS_Demuxer *ts) } else { GF_M2TS_PES *pes = (GF_M2TS_PES *)es; if (!pes || (pes->pid==pes->program->pmt_pid)) continue; + pes->cc = -1; pes->frame_state = 0; if (pes->data) gf_free(pes->data); pes->data = NULL; pes->data_len = 0; + if (pes->prev_data) gf_free(pes->prev_data); + pes->prev_data = NULL; + pes->prev_data_len = 0; pes->PTS = pes->DTS = 0; + pes->pes_len = pes->pes_end_packet_number = pes->pes_start_packet_number = 0; + if (pes->buf) gf_free(pes->buf); + pes->buf = NULL; + pes->buf_len = 0; } // gf_free(es); // ts->ess[i] = NULL; @@ -2072,6 +2305,11 @@ GF_Err gf_m2ts_set_pes_framing(GF_M2TS_PES *pes, u32 mode) pes->data = NULL; } pes->data_len = 0; + if (pes->prev_data) { + gf_free(pes->prev_data); + pes->prev_data = NULL; + } + pes->prev_data_len = 0; pes->pes_len = 0; pes->reframe = NULL; break; @@ -2124,12 +2362,17 @@ GF_M2TS_Demuxer *gf_m2ts_demux_new() ts->sdt = gf_m2ts_section_filter_new(gf_m2ts_process_sdt, 1); ts->nit = gf_m2ts_section_filter_new(gf_m2ts_process_nit, 0); ts->eit = gf_m2ts_section_filter_new(NULL/*gf_m2ts_process_eit*/, 1); - ts->tdt_tot_st = gf_m2ts_section_filter_new(NULL/*gf_m2ts_process_tdt_tot_st*/, 1); + ts->tdt_tot = gf_m2ts_section_filter_new(gf_m2ts_process_tdt_tot, 1); #ifdef DUMP_MPE_IP_DATAGRAMS gf_dvb_mpe_init(ts); #endif + ts->requested_progs = gf_list_new(); + ts->requested_pids = gf_list_new(); + ts->demux_and_play = 0; + ts->nb_prog_pmt_received = 0; + return ts; } @@ -2141,9 +2384,9 @@ void gf_m2ts_demux_del(GF_M2TS_Demuxer *ts) if (ts->sdt) gf_m2ts_section_filter_del(ts->sdt); if (ts->nit) gf_m2ts_section_filter_del(ts->nit); if (ts->eit) gf_m2ts_section_filter_del(ts->eit); - if (ts->tdt_tot_st) gf_m2ts_section_filter_del(ts->tdt_tot_st); + if (ts->tdt_tot) gf_m2ts_section_filter_del(ts->tdt_tot); - for (i=0; i<8192; i++) { + for (i=0; iess[i]) gf_m2ts_es_del(ts->ess[i]); } if (ts->buffer) gf_free(ts->buffer); @@ -2161,7 +2404,9 @@ void gf_m2ts_demux_del(GF_M2TS_Demuxer *ts) } gf_list_del(ts->programs); + if (ts->TDT_time) gf_free(ts->TDT_time); gf_m2ts_reset_sdt(ts); + if (ts->tdt_tot) gf_list_del(ts->SDTs); #ifdef DUMP_MPE_IP_DATAGRAMS @@ -2178,4 +2423,493 @@ void gf_m2ts_print_info(GF_M2TS_Demuxer *ts) #endif } + +/* DVB fonction */ + +static u32 TSDemux_DemuxRun(void *_p) +{ + GF_Err e; + char data[UDP_BUFFER_SIZE]; +#ifdef GPAC_HAS_LINUX_DVB + char dvbts[DVB_BUFFER_SIZE]; +#endif + u32 size; + //u32 i; + GF_M2TS_Demuxer *ts = _p; + + ts->run_state = 1; + + gf_m2ts_reset_parsers(ts); + +#ifdef GPAC_HAS_LINUX_DVB + if (ts->tuner) { + // in case of DVB + while (ts->run_state) { + s32 ts_size = read(ts->tuner->ts_fd, dvbts, DVB_BUFFER_SIZE); + if (ts_size>0) gf_m2ts_process_data(ts, dvbts, (u32) ts_size); + } + } else +#endif + if (ts->sock) { + Bool first_run, is_rtp; + first_run = 1; + is_rtp = 0; + while (ts->run_state) { + size = 0; + /*m2ts chunks by chunks*/ + e = gf_sk_receive(ts->sock, data, UDP_BUFFER_SIZE, 0, &size); + if (!size || e) { + gf_sleep(1); + continue; + } + if (first_run) { + first_run = 0; + /*FIXME: we assume only simple RTP packaging (no CSRC nor extensions)*/ + if ((data[0] != 0x47) && ((data[1] & 0x7F) == 33) ) { + is_rtp = 1; + } + } + /*process chunk*/ + if (is_rtp) { + gf_m2ts_process_data(ts, data+12, size-12); + } else { + gf_m2ts_process_data(ts, data, size); + } + } + } else if (ts->dnload) { + while (ts->run_state) { + gf_dm_sess_process(ts->dnload); + gf_sleep(1); + } + } else if (ts->file) { + u32 pos = 0; + if (ts->start_range && ts->duration) { + Double perc = ts->start_range / (1000 * ts->duration); + pos = (u32) (s64) (perc * ts->file_size); + /*align to TS packet size*/ + while (pos%188) pos++; + if (pos>=ts->file_size) { + ts->start_range = 0; + pos = 0; + } + } + gf_f64_seek(ts->file, pos, SEEK_SET); + +restart_file: + + while (ts->run_state && !feof(ts->file)) { + /*m2ts chunks by chunks*/ + size = fread(data, 1, 188, ts->file); + if (!size && (ts->loop_demux == 1)) { + gf_f64_seek(ts->file, pos, SEEK_SET); + GF_LOG(GF_LOG_INFO, GF_LOG_CONTAINER, ("[M2TSDemux] Loop \n")); + gf_sleep(500); + size = fread(data, 1, 188, ts->file); + } + if (!size) break; + if (size != 188) { + GF_LOG(GF_LOG_WARNING, GF_LOG_CONTAINER, ("[M2TS In] %u bytes read from file instead of 188.\n", size)); + } + /*process chunk*/ + gf_m2ts_process_data(ts, data, size); + + ts->nb_pck++; + //fprintf(stderr, "TS packet #%d\r", ts->nb_pck); + + //gf_sleep(0); + /*if asked to regulate, wait until we get a play request*/ + while (ts->run_state && !ts->nb_playing && ts->file_regulate) { + gf_sleep(50); + continue; + } + + if(feof(ts->file) && ts->loop_demux == 1){ + gf_f64_seek(ts->file, pos, SEEK_SET); + GF_LOG(GF_LOG_INFO, GF_LOG_CONTAINER, ("[M2TSDemux] Loop \n")); + gf_sleep(3000); + } + } + if (feof(ts->file)) GF_LOG(GF_LOG_INFO, GF_LOG_CONTAINER, ("[M2TSDemux] EOS reached\n")); + + if (ts->run_state && ts->query_next) { + const char *next_url = ts->query_next(ts->udta_query); + if (next_url) { + fclose(ts->file); + ts->file = gf_f64_open(next_url, "rb"); + if (ts->file) goto restart_file; + GF_LOG(GF_LOG_ERROR, GF_LOG_CONTAINER, ("[M2TSDemux] Cannot open next file %s\n", next_url)); + } + } + } + ts->run_state = 2; + return 0; +} + + +static GF_Err TSDemux_SetupLive(GF_M2TS_Demuxer *ts, char *url) +{ + GF_Err e = GF_OK; + char *str; + u16 port; + u32 sock_type = 0; + + if (!strnicmp(url, "udp://", 6) || !strnicmp(url, "mpegts-udp://", 13)) { + sock_type = GF_SOCK_TYPE_UDP; + } else if (!strnicmp(url, "mpegts-tcp://", 13) ) { + sock_type = GF_SOCK_TYPE_TCP; + } else { + e = GF_NOT_SUPPORTED; + return e; + } + + url = strchr(url, ':'); + url += 3; + + ts->sock = gf_sk_new(sock_type); + if (!ts->sock) { + return e = GF_IO_ERR; + } + + /*setup port and src*/ + port = 1234; + str = strrchr(url, ':'); + /*take care of IPv6 address*/ + if (str && strchr(str, ']')) str = strchr(url, ':'); + if (str) { + port = atoi(str+1); + str[0] = 0; + } + + /*do we have a source ?*/ + if (strlen(url) && strcmp(url, "localhost") ) { + const char *mob_ip = NULL; + if (ts->MobileIPEnabled){ + mob_ip = ts->network_type; + } + + if (gf_sk_is_multicast_address(url)) { + mob_ip = ts->network_type; + gf_sk_setup_multicast(ts->sock, url, port, 0, 0, (char*)mob_ip); + } else { + gf_sk_bind(ts->sock, (char*)mob_ip, port, url, 0, GF_SOCK_REUSE_PORT); + } + } + if (str) str[0] = ':'; + + gf_sk_set_buffer_size(ts->sock, 0, UDP_BUFFER_SIZE); + gf_sk_set_block_mode(ts->sock, 0); + + //gf_th_set_priority(ts->th, GF_THREAD_PRIORITY_HIGHEST); + return TSDemux_DemuxPlay(ts); + +} + +#ifdef GPAC_HAS_LINUX_DVB + +static GF_Err gf_dvb_tune(GF_Tuner *tuner, const char *url, const char *chan_path) { + struct dmx_pes_filter_params pesFilterParams; + struct dvb_frontend_parameters frp; + int demux1, front1; + FILE *chanfile; + char line[255], chan_name_t[255]; + char freq_str[255], inv[255], bw[255], lcr[255], hier[255], cr[255], + mod[255], transm[255], gi[255], apid_str[255], vpid_str[255]; + const char *chan_conf = ":%255[^:]:%255[^:]:%255[^:]:%255[^:]:%255[^:]:%255[^:]:%255[^:]:%255[^:]:%255[^:]:%255[^:]:%255[^:]:"; + char *chan_name; + char *tmp; + char frontend_name[100], demux_name[100], dvr_name[100]; + u32 adapter_num; + + chanfile = gf_f64_open(chan_path, "r"); + if (!chanfile) return GF_BAD_PARAM; + + chan_name = (char *) url+6; // 6 = strlen("dvb://") + + // support for multiple frontends + tmp = strchr(chan_name, '@'); + if (tmp) { + adapter_num = atoi(tmp+1); + tmp[0] = 0; + } else { + adapter_num = 0; + } + GF_LOG(GF_LOG_DEBUG, GF_LOG_CONTAINER, ("Channel name %s\n", chan_name)); + + while(!feof(chanfile)) { + if ( fgets(line, 255, chanfile) != NULL) { + if (line[0]=='#') continue; + if (line[0]=='\r') continue; + if (line[0]=='\n') continue; + + strncpy(chan_name_t, line, index(line, ':')-line); + if (strncmp(chan_name,chan_name_t,strlen(chan_name))==0) { + sscanf(strstr(line,":"), chan_conf, freq_str, inv, bw, lcr, cr, mod, transm, gi, hier, apid_str, vpid_str); + tuner->freq = (uint32_t) atoi(freq_str); + tuner->apid = (uint16_t) atoi(apid_str); + tuner->vpid = (uint16_t) atoi(vpid_str); + //Inversion + if(! strcmp(inv, "INVERSION_ON")) tuner->specInv = INVERSION_ON; + else if(! strcmp(inv, "INVERSION_OFF")) tuner->specInv = INVERSION_OFF; + else tuner->specInv = INVERSION_AUTO; + //LP Code Rate + if(! strcmp(lcr, "FEC_1_2")) tuner->LP_CodeRate =FEC_1_2; + else if(! strcmp(lcr, "FEC_2_3")) tuner->LP_CodeRate =FEC_2_3; + else if(! strcmp(lcr, "FEC_3_4")) tuner->LP_CodeRate =FEC_3_4; + else if(! strcmp(lcr, "FEC_4_5")) tuner->LP_CodeRate =FEC_4_5; + else if(! strcmp(lcr, "FEC_6_7")) tuner->LP_CodeRate =FEC_6_7; + else if(! strcmp(lcr, "FEC_8_9")) tuner->LP_CodeRate =FEC_8_9; + else if(! strcmp(lcr, "FEC_5_6")) tuner->LP_CodeRate =FEC_5_6; + else if(! strcmp(lcr, "FEC_7_8")) tuner->LP_CodeRate =FEC_7_8; + else if(! strcmp(lcr, "FEC_NONE")) tuner->LP_CodeRate =FEC_NONE; + else tuner->LP_CodeRate =FEC_AUTO; + //HP Code Rate + if(! strcmp(cr, "FEC_1_2")) tuner->HP_CodeRate =FEC_1_2; + else if(! strcmp(cr, "FEC_2_3")) tuner->HP_CodeRate =FEC_2_3; + else if(! strcmp(cr, "FEC_3_4")) tuner->HP_CodeRate =FEC_3_4; + else if(! strcmp(cr, "FEC_4_5")) tuner->HP_CodeRate =FEC_4_5; + else if(! strcmp(cr, "FEC_6_7")) tuner->HP_CodeRate =FEC_6_7; + else if(! strcmp(cr, "FEC_8_9")) tuner->HP_CodeRate =FEC_8_9; + else if(! strcmp(cr, "FEC_5_6")) tuner->HP_CodeRate =FEC_5_6; + else if(! strcmp(cr, "FEC_7_8")) tuner->HP_CodeRate =FEC_7_8; + else if(! strcmp(cr, "FEC_NONE")) tuner->HP_CodeRate =FEC_NONE; + else tuner->HP_CodeRate =FEC_AUTO; + //Modulation + if(! strcmp(mod, "QAM_128")) tuner->modulation = QAM_128; + else if(! strcmp(mod, "QAM_256")) tuner->modulation = QAM_256; + else if(! strcmp(mod, "QAM_64")) tuner->modulation = QAM_64; + else if(! strcmp(mod, "QAM_32")) tuner->modulation = QAM_32; + else if(! strcmp(mod, "QAM_16")) tuner->modulation = QAM_16; + //Bandwidth + if(! strcmp(bw, "BANDWIDTH_6_MHZ")) tuner->bandwidth = BANDWIDTH_6_MHZ; + else if(! strcmp(bw, "BANDWIDTH_7_MHZ")) tuner->bandwidth = BANDWIDTH_7_MHZ; + else if(! strcmp(bw, "BANDWIDTH_8_MHZ")) tuner->bandwidth = BANDWIDTH_8_MHZ; + //Transmission Mode + if(! strcmp(transm, "TRANSMISSION_MODE_2K")) tuner->TransmissionMode = TRANSMISSION_MODE_2K; + else if(! strcmp(transm, "TRANSMISSION_MODE_8K")) tuner->TransmissionMode = TRANSMISSION_MODE_8K; + //Guard Interval + if(! strcmp(gi, "GUARD_INTERVAL_1_32")) tuner->guardInterval = GUARD_INTERVAL_1_32; + else if(! strcmp(gi, "GUARD_INTERVAL_1_16")) tuner->guardInterval = GUARD_INTERVAL_1_16; + else if(! strcmp(gi, "GUARD_INTERVAL_1_8")) tuner->guardInterval = GUARD_INTERVAL_1_8; + else tuner->guardInterval = GUARD_INTERVAL_1_4; + //Hierarchy + if(! strcmp(hier, "HIERARCHY_1")) tuner->hierarchy = HIERARCHY_1; + else if(! strcmp(hier, "HIERARCHY_2")) tuner->hierarchy = HIERARCHY_2; + else if(! strcmp(hier, "HIERARCHY_4")) tuner->hierarchy = HIERARCHY_4; + else if(! strcmp(hier, "HIERARCHY_AUTO")) tuner->hierarchy = HIERARCHY_AUTO; + else tuner->hierarchy = HIERARCHY_NONE; + + break; + } + } + } + fclose(chanfile); + + sprintf(frontend_name, "/dev/dvb/adapter%d/frontend0", adapter_num); + sprintf(demux_name, "/dev/dvb/adapter%d/demux0", adapter_num); + sprintf(dvr_name, "/dev/dvb/adapter%d/dvr0", adapter_num); + + // Open frontend + if((front1 = open(frontend_name,O_RDWR|O_NONBLOCK)) < 0){ + GF_LOG(GF_LOG_ERROR, GF_LOG_CONTAINER, ("Cannot open frontend %s.\n", frontend_name)); + return GF_IO_ERR; + } else { + GF_LOG(GF_LOG_DEBUG, GF_LOG_CONTAINER, ("Frontend %s opened.\n", frontend_name)); + } + // Open demuxes + if ((demux1=open(demux_name, O_RDWR|O_NONBLOCK)) < 0){ + GF_LOG(GF_LOG_ERROR, GF_LOG_CONTAINER, ("Cannot open demux %s\n", demux_name)); + return GF_IO_ERR; + } else { + GF_LOG(GF_LOG_ERROR, GF_LOG_CONTAINER, ("Demux %s opened.\n", demux_name)); + } + // Set FrontendParameters - DVB-T + frp.frequency = tuner->freq; + frp.inversion = tuner->specInv; + frp.u.ofdm.bandwidth = tuner->bandwidth; + frp.u.ofdm.code_rate_HP = tuner->HP_CodeRate; + frp.u.ofdm.code_rate_LP = tuner->LP_CodeRate; + frp.u.ofdm.constellation = tuner->modulation; + frp.u.ofdm.transmission_mode = tuner->TransmissionMode; + frp.u.ofdm.guard_interval = tuner->guardInterval; + frp.u.ofdm.hierarchy_information = tuner->hierarchy; + // Set frontend + if (ioctl(front1, FE_SET_FRONTEND, &frp) < 0){ + return GF_IO_ERR; + } + // Set dumex + pesFilterParams.pid = 0x2000; // Linux-DVB API take PID=2000 for FULL/RAW TS flag + pesFilterParams.input = DMX_IN_FRONTEND; + pesFilterParams.output = DMX_OUT_TS_TAP; + pesFilterParams.pes_type = DMX_PES_OTHER; + pesFilterParams.flags = DMX_IMMEDIATE_START; + if (ioctl(demux1, DMX_SET_PES_FILTER, &pesFilterParams) < 0){ + return GF_IO_ERR; + } + /* The following code differs from mplayer and alike because the device is opened in blocking mode */ + if ((tuner->ts_fd = open(dvr_name, O_RDONLY/*|O_NONBLOCK*/)) < 0){ + return GF_IO_ERR; + } + return GF_OK; +} + +u32 gf_dvb_get_freq_from_url(const char *channels_config_path, const char *url) +{ + FILE *channels_config_file; + char line[255], *tmp, *channel_name; + + u32 freq; + + /* get rid of trailing @ */ + tmp = strchr(url, '@'); + if (tmp) tmp[0] = 0; + + channel_name = (char *)url+6; + + channels_config_file = gf_f64_open(channels_config_path, "r"); + if (!channels_config_file) return GF_BAD_PARAM; + + freq = 0; + while(!feof(channels_config_file)) { + if ( fgets(line, 255, channels_config_file) != NULL) { + if (line[0]=='#') continue; + if (line[0]=='\r') continue; + if (line[0]=='\n') continue; + + tmp = strchr(line, ':'); + tmp[0] = 0; + if (!strcmp(line, channel_name)) { + char *tmp2; + tmp++; + tmp2 = strchr(tmp, ':'); + if (tmp2) tmp2[0] = 0; + freq = (u32)atoi(tmp); + break; + } + } + } + return freq; +} + +GF_Err TSDemux_SetupDVB(GF_M2TS_Demuxer *ts, const char *url) +{ + GF_Err e = GF_OK; + + if (! ts->dvb_channels_conf_path) return GF_BAD_PARAM; + + if (strnicmp(url, "dvb://", 6)) return GF_NOT_SUPPORTED; + + if (!ts->tuner) GF_SAFEALLOC(ts->tuner, GF_Tuner); + + if (ts->tuner->freq != 0 && ts->tuner->freq == gf_dvb_get_freq_from_url(ts->dvb_channels_conf_path, url)) { + GF_LOG(GF_LOG_ERROR, GF_LOG_CONTAINER, ("[M2TSDemux] Tuner already tuned to that frequency\n")); + return GF_OK; + } + + e = gf_dvb_tune(ts->tuner, url, ts->dvb_channels_conf_path); + if (e) { + GF_LOG(GF_LOG_ERROR, GF_LOG_CONTAINER, ("[M2TSDemux] Unable to tune to frequency\n")); + return GF_SERVICE_ERROR; + } + + return TSDemux_DemuxPlay(ts); +} + +#endif + +static GF_Err TSDemux_SetupFile(GF_M2TS_Demuxer *ts, char *url) +{ + if (ts->file && !strcmp(ts->filename, url)) { + GF_LOG(GF_LOG_ERROR, GF_LOG_CONTAINER, ("[TSDemux] TS file already being processed: %s\n", url)); + return GF_IO_ERR; + } + + ts->file = gf_f64_open(url, "rb"); + if (!ts->file) { + GF_LOG(GF_LOG_ERROR, GF_LOG_CONTAINER, ("[TSDemux] Could not open TS file: %s\n", url)); + return GF_IO_ERR; + } + strcpy(ts->filename, url); + + gf_f64_seek(ts->file, 0, SEEK_END); + ts->file_size = gf_f64_tell(ts->file); + + /* reinitialization for seek */ + ts->end_range = ts->start_range = 0; + ts->nb_playing = 0; + + return TSDemux_DemuxPlay(ts); + +} + +GF_Err TSDemux_Demux_Setup(GF_M2TS_Demuxer *ts, const char *url, Bool loop) +{ + char szURL[2048]; + char *frag; + + if(!url){ + return GF_IO_ERR; + } + strcpy(szURL, url); + frag = strrchr(szURL, '#'); + if (frag) frag[0] = 0; + + ts->file_regulate = 0; + ts->duration = 0; + + if(loop == 1){ + ts->loop_demux = 1; + printf("Loop Mode activated \n"); + } + + if (!strnicmp(url, "udp://", 6) + || !strnicmp(url, "mpegts-udp://", 13) + || !strnicmp(url, "mpegts-tcp://", 13) + ) { + return TSDemux_SetupLive(ts, (char *) szURL); + } +#ifdef GPAC_HAS_LINUX_DVB + else if (!strnicmp(url, "dvb://", 6)) { + return TSDemux_SetupDVB(ts, (char *) szURL); + } +#endif + else { + return TSDemux_SetupFile(ts, (char *) szURL); + } + + return GF_NOT_SUPPORTED; +} + +GF_Err TSDemux_CloseDemux(GF_M2TS_Demuxer *ts) +{ + GF_LOG(GF_LOG_DEBUG, GF_LOG_CONTAINER, ("[TSDemux] Destroying demuxer\n")); + if (ts->th) { + if (ts->run_state == 1) { + ts->run_state = 0; + while (ts->run_state!=2) gf_sleep(0); + } + gf_th_del(ts->th); + ts->th = NULL; + } + + if (ts->file) fclose(ts->file); + ts->file = NULL; + + return GF_OK; +} + + +GF_Err TSDemux_DemuxPlay(GF_M2TS_Demuxer *ts){ + + if(ts->th){ + /*start playing for tune-in*/ + return gf_th_run(ts->th, TSDemux_DemuxRun, ts); + }else{ + return TSDemux_DemuxRun(ts); + } + +} + + + #endif /*GPAC_DISABLE_MPEG2TS*/ + diff --git a/src/media_tools/text_import.c b/src/media_tools/text_import.c index b58cadd..00d4ce3 100644 --- a/src/media_tools/text_import.c +++ b/src/media_tools/text_import.c @@ -569,18 +569,11 @@ static GF_Err gf_text_import_srt(GF_MediaImporter *import) if (duration && (start >= duration)) break; } - /*final flush*/ - if (end && !(import->flags & GF_IMPORT_NO_TEXT_FLUSH ) ) { - gf_isom_text_reset(samp); - s = gf_isom_text_to_sample(samp); - s->DTS = (u64) ((timescale*end)/1000); - s->IsRAP = 1; - gf_isom_add_sample(import->dest, track, 1, s); - gf_isom_sample_del(&s); - nb_samp++; - } gf_isom_delete_text_sample(samp); - gf_isom_set_last_sample_duration(import->dest, track, 0); + /*do not add any empty sample at the end since it modifies track duration and is not needed - it is the player job + to figure out when to stop displaying the last text sample + However update the last sample duration*/ + gf_isom_set_last_sample_duration(import->dest, track, (u32) (end-start) ); gf_set_progress("Importing SRT", nb_samp, nb_samp); exit: @@ -615,7 +608,7 @@ static GF_Err gf_text_import_sub(GF_MediaImporter *import) return gf_import_message(import, GF_NOT_SUPPORTED, "Unsupported SUB UTF encoding"); } - FPS = 25.0; + FPS = GF_IMPORT_DEFAULT_FPS; if (import->video_fps) FPS = import->video_fps; cfg = NULL; @@ -805,18 +798,12 @@ static GF_Err gf_text_import_sub(GF_MediaImporter *import) gf_set_progress("Importing SUB", gf_f64_tell(sub_in), file_size); if (duration && (end >= duration)) break; } - /*final flush*/ - if (end && !(import->flags & GF_IMPORT_NO_TEXT_FLUSH ) ) { - gf_isom_text_reset(samp); - s = gf_isom_text_to_sample(samp); - s->DTS = (u64)(FPS*(s64)end); - gf_isom_add_sample(import->dest, track, 1, s); - gf_isom_sample_del(&s); - nb_samp++; - } - gf_isom_delete_text_sample(samp); - - gf_isom_set_last_sample_duration(import->dest, track, 0); + gf_isom_delete_text_sample(samp); + /*do not add any empty sample at the end since it modifies track duration and is not needed - it is the player job + to figure out when to stop displaying the last text sample + However update the last sample duration*/ + + gf_isom_set_last_sample_duration(import->dest, track, (u32) (end-start) ); gf_set_progress("Importing SUB", nb_samp, nb_samp); exit: diff --git a/src/odf/ipmpx_parse.c b/src/odf/ipmpx_parse.c index c83a001..9e8e6ce 100644 --- a/src/odf/ipmpx_parse.c +++ b/src/odf/ipmpx_parse.c @@ -251,7 +251,7 @@ GF_Err GF_IPMPX_ParseEventType(char *val, u8 *eventType, u8 *eventTypeCount) if (j) { szVal[j] = 0; if (!strnicmp(szVal, "0x", 2)) { sscanf(szVal, "%x", &v); eventType[*eventTypeCount] = v; } - else { sscanf(szVal, "%ud", &v); eventType[*eventTypeCount] = v; } + else { sscanf(szVal, "%u", &v); eventType[*eventTypeCount] = v; } j=0; (*eventTypeCount) += 1; if (*eventTypeCount == 9) return GF_OK; @@ -282,7 +282,7 @@ GF_Err gf_ipmpx_data_parse_16(char *val, u16 **outData, u16 *outDataSize) if (j) { szVal[j] = 0; if (!strnicmp(szVal, "0x", 2)) { sscanf(szVal, "%x", &v); data[count] = v; } - else { sscanf(szVal, "%ud", &v); data[count] = v; } + else { sscanf(szVal, "%u", &v); data[count] = v; } j=0; count += 1; if (count == alloc) { diff --git a/src/odf/odf_code.c b/src/odf/odf_code.c index b2f9ee6..9ffd547 100644 --- a/src/odf/odf_code.c +++ b/src/odf/odf_code.c @@ -583,7 +583,8 @@ GF_Err gf_odf_write_iod(GF_BitStream *bs, GF_InitialObjectDescriptor *iod) GF_Descriptor *gf_odf_new_od() { - GF_ObjectDescriptor *newDesc = (GF_ObjectDescriptor *) gf_malloc(sizeof(GF_ObjectDescriptor)); + GF_ObjectDescriptor *newDesc; + GF_SAFEALLOC(newDesc, GF_ObjectDescriptor); if (!newDesc) return NULL; newDesc->URLString = NULL; diff --git a/src/scene_manager/encode_isom.c b/src/scene_manager/encode_isom.c index c40b73a..ab80aad 100644 --- a/src/scene_manager/encode_isom.c +++ b/src/scene_manager/encode_isom.c @@ -111,11 +111,12 @@ static GF_Err gf_sm_import_ui_stream(GF_ISOFile *mp4, GF_ESD *src, Bool rewrite_ static GF_Err gf_sm_import_stream(GF_SceneManager *ctx, GF_ISOFile *mp4, GF_ESD *src, Double imp_time, char *mediaSource, Bool od_sample_rap) { - u32 track, di; + u32 track, di, i; GF_Err e; Bool isAudio, isVideo; char szName[1024]; char *ext; + GF_Descriptor *d; GF_MediaImporter import; GF_MuxInfo *mux = NULL; @@ -261,6 +262,14 @@ static GF_Err gf_sm_import_stream(GF_SceneManager *ctx, GF_ISOFile *mp4, GF_ESD e = gf_media_import(&import); if (e) return e; + i=0; + while ((d = gf_list_enum(src->extensionDescriptors, &i))) { + if (d->tag == GF_ODF_AUX_VIDEO_DATA) { + gf_isom_add_user_data(mp4, gf_isom_get_track_by_id(mp4, import.final_trackID), GF_4CC('A','U','X','V'), 0, NULL, 0); + gf_list_rem(src->extensionDescriptors, i-1); + gf_odf_desc_del(d); + } + } /*if desired delete input*/ if (mux->delete_file) gf_delete_file(mux->file_name); return e; diff --git a/src/scene_manager/loader_bt.c b/src/scene_manager/loader_bt.c index c945e54..70e9f20 100644 --- a/src/scene_manager/loader_bt.c +++ b/src/scene_manager/loader_bt.c @@ -884,9 +884,9 @@ void gf_bt_sffield(GF_BTParser *parser, GF_FieldInfo *info, GF_Node *n) if (!strnicmp(str, "od://", 5)) odstr += 5; else if (!strnicmp(str, "od:", 3)) odstr += 3; /*be carefull, an url like "11-regression-test.mp4" will return 1 on sscanf :)*/ - if (sscanf(odstr, "%ud", &id) == 1) { + if (sscanf(odstr, "%u", &id) == 1) { char szURL[20]; - sprintf(szURL, "%ud", id); + sprintf(szURL, "%u", id); if (strcmp(szURL, odstr)) id=0; } if (id) { @@ -1077,7 +1077,7 @@ u32 gf_bt_get_def_id(GF_BTParser *parser, char *defName) { GF_Node *n; u32 ID; - if (sscanf(defName, "N%ud", &ID) == 1) { + if (sscanf(defName, "N%u", &ID) == 1) { ID ++; n = gf_sg_find_node(parser->load->scene_graph, ID); /*if an existing node use*/ @@ -1778,9 +1778,9 @@ next_field: str = gf_bt_get_next(parser, 0); gf_sg_vrml_mf_append(&proto->ExternProto, GF_SG_VRML_MFURL, (void **) &url); if (!strnicmp(str, "od:", 3)) { - sscanf(str, "od:%ud", &url->OD_ID); + sscanf(str, "od:%u", &url->OD_ID); } else { - if (!sscanf(str, "%ud", &url->OD_ID)) { + if (!sscanf(str, "%u", &url->OD_ID)) { url->url = gf_strdup(str); } else { char szURL[20]; @@ -3239,7 +3239,7 @@ GF_Err gf_bt_loader_run_intern(GF_BTParser *parser, GF_Command *init_com, Bool i if (str[0] == 'D') { parser->au_time += atoi(&str[1]); } else { - if (sscanf(str, "%ud", &parser->au_time) != 1) { + if (sscanf(str, "%u", &parser->au_time) != 1) { gf_bt_report(parser, GF_BAD_PARAM, "Number expected got %s", str); break; } diff --git a/src/scene_manager/loader_xmt.c b/src/scene_manager/loader_xmt.c index 9c4f00d..4275e01 100644 --- a/src/scene_manager/loader_xmt.c +++ b/src/scene_manager/loader_xmt.c @@ -184,9 +184,9 @@ static void xmt_new_od_link(GF_XMTParser *parser, GF_ObjectDescriptor *od, char if (!strnicmp(name, "od", 2)) ID = atoi(name + 2); else if (!strnicmp(name, "iod", 3)) ID = atoi(name+ 3); /*be carefull, an url like "11-regression-test.mp4" will return 1 on sscanf :)*/ - else if (sscanf(name, "%ud", &ID) == 1) { + else if (sscanf(name, "%u", &ID) == 1) { char szURL[20]; - sprintf(szURL, "%ud", ID); + sprintf(szURL, "%u", ID); if (strcmp(szURL, name)) { ID = 0; } else { @@ -242,9 +242,9 @@ static void xmt_new_od_link_from_node(GF_XMTParser *parser, char *name, MFURL *u if (!strnicmp(name, "od", 2)) ID = atoi(name + 2); else if (!strnicmp(name, "iod", 3)) ID = atoi(name + 3); /*be carefull, an url like "11-regression-test.mp4" will return 1 on sscanf :)*/ - else if (sscanf(name, "%ud", &ID) == 1) { + else if (sscanf(name, "%u", &ID) == 1) { char szURL[20]; - sprintf(szURL, "%ud", ID); + sprintf(szURL, "%u", ID); if (strcmp(szURL, name)) { ID = 0; } else { @@ -346,7 +346,7 @@ static u32 xmt_get_od_id(GF_XMTParser *parser, char *od_name) { u32 i, ID; XMT_ODLink *l; - if (sscanf(od_name, "%ud", &ID)==1) return ID; + if (sscanf(od_name, "%u", &ID)==1) return ID; i=0; while ((l = (XMT_ODLink*)gf_list_enum(parser->od_links, &i))) { @@ -360,7 +360,7 @@ static u32 xmt_get_esd_id(GF_XMTParser *parser, char *esd_name) { u32 i, ID; XMT_ESDLink *l; - if (sscanf(esd_name, "%ud", &ID)==1) return ID; + if (sscanf(esd_name, "%u", &ID)==1) return ID; i=0; while ((l = (XMT_ESDLink *)gf_list_enum(parser->esd_links, &i))) { @@ -607,7 +607,7 @@ static u32 xmt_get_node_id(GF_XMTParser *parser, char *name) { GF_Node *n; u32 ID; - if (sscanf(name, "N%ud", &ID) == 1) { + if (sscanf(name, "N%u", &ID) == 1) { ID ++; n = gf_sg_find_node(parser->load->scene_graph, ID); if (n) { @@ -940,7 +940,7 @@ static u32 xmt_parse_sf_field(GF_XMTParser *parser, GF_FieldInfo *info, GF_Node char *name = "pixels"; XMT_GET_ONE_VAL if (strstr(value, "0x")) sscanf(value, "%x", &v); - else sscanf(value, "%ud", &v); + else sscanf(value, "%u", &v); switch (img->numComponents) { case 1: img->pixels[k] = (char) v; diff --git a/src/scene_manager/scene_dump.c b/src/scene_manager/scene_dump.c index 4dd5dd1..37a41d7 100644 --- a/src/scene_manager/scene_dump.c +++ b/src/scene_manager/scene_dump.c @@ -2608,7 +2608,7 @@ static GF_Err DumpLSRDelete(GF_SceneDumper *sdump, GF_Command *com) fprintf(sdump->trace, "/>\n"); return GF_OK; } -#ifdef UNUSED_FUNC +#ifdef GPAC_UNUSED_FUNC static GF_Err DumpLSRInsert(GF_SceneDumper *sdump, GF_Command *com) { return GF_OK; @@ -2619,7 +2619,7 @@ static GF_Err SD_SetSceneGraph(GF_SceneDumper *sdump, GF_SceneGraph *sg) if (sdump) sdump->sg = sg; return GF_OK; } -#endif /* UNUSED_FUNC */ +#endif /*GPAC_UNUSED_FUNC*/ static GF_Err DumpLSRRestore(GF_SceneDumper *sdump, GF_Command *com) { @@ -3213,11 +3213,11 @@ static void ReorderAUContext(GF_List *sample_list, GF_AUContext *au, Bool lsr_du au->timing = (u64) (au->timing_sec * au->owner->timeScale); } - autime = au->timing + au->owner->dump_time_offset; + autime = au->timing + au->owner->imp_exp_time; has_base = 0; i=0; while ((ptr = (GF_AUContext*)gf_list_enum(sample_list, &i))) { - time = ptr->timing + ptr->owner->dump_time_offset; + time = ptr->timing + ptr->owner->imp_exp_time; if ( /*time ordered*/ (time > autime) diff --git a/src/scene_manager/scene_manager.c b/src/scene_manager/scene_manager.c index da45b53..2f041e0 100644 --- a/src/scene_manager/scene_manager.c +++ b/src/scene_manager/scene_manager.c @@ -175,7 +175,7 @@ GF_AUContext *gf_sm_stream_au_new(GF_StreamContext *stream, u64 timing, Double t u64 tmp_timing; tmp_timing = timing ? timing : (u64) (time_sec*1000); - if (stream->last_au_time >= tmp_timing) { + if (stream->imp_exp_time >= tmp_timing) { /*look for existing AU*/ i=0; while ((tmp = (GF_AUContext *)gf_list_enum(stream->AUs, &i))) { @@ -203,7 +203,7 @@ GF_AUContext *gf_sm_stream_au_new(GF_StreamContext *stream, u64 timing, Double t tmp->owner = stream; if (stream->disable_aggregation) tmp->flags |= GF_SM_AU_NOT_AGGREGATED; gf_list_add(stream->AUs, tmp); - stream->last_au_time = tmp_timing; + stream->imp_exp_time = tmp_timing; return tmp; } diff --git a/src/scene_manager/swf_bifs.c b/src/scene_manager/swf_bifs.c index 1e5a063..a939f42 100644 --- a/src/scene_manager/swf_bifs.c +++ b/src/scene_manager/swf_bifs.c @@ -1310,7 +1310,7 @@ static GF_Err swf_bifs_define_sprite(SWFReader *read, u32 nb_frames) /*create new BIFS stream*/ read->bifs_es = gf_sm_stream_new(read->load->ctx, esd->ESID, GF_STREAM_SCENE, 1); read->bifs_es->timeScale = prev_sc->timeScale; - read->bifs_es->dump_time_offset = prev_sc->dump_time_offset + prev_au->timing; + read->bifs_es->imp_exp_time = prev_sc->imp_exp_time + prev_au->timing; /*create first AU*/ read->bifs_au = gf_sm_stream_au_new(read->bifs_es, 0, 0, 1); diff --git a/src/scene_manager/text_to_bifs.c b/src/scene_manager/text_to_bifs.c index 340643b..365ef1d 100644 --- a/src/scene_manager/text_to_bifs.c +++ b/src/scene_manager/text_to_bifs.c @@ -416,7 +416,7 @@ static GF_Err gf_text_import_sub_bifs(GF_SceneManager *ctx, GF_ESD *src, GF_MuxI com = NULL; inf = NULL; - fps = 25.0; + fps = GF_IMPORT_DEFAULT_FPS; if (mux->frame_rate) fps = mux->frame_rate; line = 0; diff --git a/src/scenegraph/base_scenegraph.c b/src/scenegraph/base_scenegraph.c index 82a8e75..a2d1806 100644 --- a/src/scenegraph/base_scenegraph.c +++ b/src/scenegraph/base_scenegraph.c @@ -2006,13 +2006,14 @@ GF_Err gf_node_get_field_by_name(GF_Node *node, char *name, GF_FieldInfo *field) return gf_node_get_field(node, (u32) res, field); } -static char log_node_name[10]; + +static char log_node_name[2+16+1]; const char *gf_node_get_log_name(GF_Node *anim) { const char *name = gf_node_get_name(anim); if (name) return name; else { - sprintf(log_node_name, "0x%p", anim); + sprintf(log_node_name, "%p", anim); return log_node_name; } } diff --git a/src/scenegraph/dom_events.c b/src/scenegraph/dom_events.c index 276c257..6205318 100644 --- a/src/scenegraph/dom_events.c +++ b/src/scenegraph/dom_events.c @@ -219,7 +219,7 @@ void gf_sg_handle_dom_event(GF_Node *hdl, GF_DOM_Event *event, GF_Node *observer { #ifdef GPAC_HAS_SPIDERMONKEY if (hdl->sgprivate->scenegraph->svg_js) - if (hdl->sgprivate->scenegraph->svg_js->handler_execute(hdl, event, observer)) return; + if (hdl->sgprivate->scenegraph->svg_js->handler_execute(hdl, event, observer, NULL)) return; #endif /*no clue what this is*/ GF_LOG(GF_LOG_WARNING, GF_LOG_INTERACT, ("[DOM Events ] Unknown event handler\n")); @@ -252,6 +252,14 @@ static void dom_event_process(GF_Node *listen, GF_DOM_Event *event, GF_Node *obs GF_FieldInfo info; if (gf_node_get_attribute_by_tag(listen, TAG_XMLEV_ATT_handler, 0, 0, &info) == GF_OK) { XMLRI *iri = (XMLRI *)info.far_ptr; + + if ((iri->type==XMLRI_STRING) && iri->string && !strnicmp(iri->string, "javascript:", 11)) { +#ifdef GPAC_HAS_SPIDERMONKEY + if (listen->sgprivate->scenegraph->svg_js) + listen->sgprivate->scenegraph->svg_js->handler_execute(listen, event, observer, iri->string + 11); +#endif + return; + } if (!iri->target && iri->string) { iri->target = gf_sg_find_node_by_name(listen->sgprivate->scenegraph, iri->string+1); } @@ -440,7 +448,7 @@ Bool gf_dom_event_fire_ex(GF_Node *node, GF_DOM_Event *event, GF_List *use_stack GF_DOMEventTarget cur_target; u32 cur_par_idx; if (!node || !event) return 0; - GF_LOG(GF_LOG_DEBUG, GF_LOG_INTERACT, ("[DOM Events ] Graph 0x%x Time %f - Firing event %s.%s\n", gf_node_get_graph(node), gf_node_get_scene_time(node), gf_node_get_log_name(node), gf_dom_event_get_name(event->type))); + GF_LOG(GF_LOG_DEBUG, GF_LOG_INTERACT, ("[DOM Events ] Graph %p Time %f - Firing event %s.%s\n", gf_node_get_graph(node), gf_node_get_scene_time(node), gf_node_get_log_name(node), gf_dom_event_get_name(event->type))); /*flush any pending add_listener see "determine the current target's candidate event listeners" in http://www.w3.org/TR/DOM-Level-3-Events/events.html*/ diff --git a/src/scenegraph/dom_smjs.c b/src/scenegraph/dom_smjs.c index 8778eb5..7204ff2 100644 --- a/src/scenegraph/dom_smjs.c +++ b/src/scenegraph/dom_smjs.c @@ -1077,7 +1077,7 @@ static const char *node_lookup_namespace_by_tag(GF_Node *node, u32 tag) return node_lookup_namespace_by_tag(gf_node_get_parent(node, 0), tag); } -#ifdef UNUSED_FUNC +#ifdef GPAC_UNUSED_FUNC /** * FIXME : function is not used by anybody */ @@ -1101,7 +1101,7 @@ static u32 get_namespace_code_by_prefix(GF_Node *node, char *prefix) /*browse for parent*/ return get_namespace_code_by_prefix(gf_node_get_parent(node, 0), prefix); } -#endif +#endif /*GPAC_UNUSED_FUNC*/ static JSBool dom_node_getProperty(JSContext *c, JSObject *obj, SMJS_PROP_GETTER, jsval *vp) { @@ -1955,8 +1955,22 @@ static JSBool SMJS_FUNCTION(xml_element_set_attribute) } } - if (gf_node_get_attribute_by_name(n, name, ns_code, 1, 1, &info)==GF_OK) { + if (!strcmp(name, "from") || !strcmp(name, "to") || !strcmp(name, "values") ) { + GF_FieldInfo attType; + SMIL_AttributeName *attname; + if (gf_node_get_attribute_by_tag((GF_Node *)n, TAG_SVG_ATT_attributeName, 0, 0, &attType) != GF_OK) + goto exit; + + attname = (SMIL_AttributeName *)attType.far_ptr; + if (!attname->type && attname->name) { + GF_Node *anim_target = gf_smil_anim_get_target(n); + gf_node_get_attribute_by_name((GF_Node *)anim_target, attname->name, attname->type, 0, 0, &attType); + attname->type = attType.fieldType; + } + + anim_value_type = attname->type; + } gf_svg_parse_attribute(n, &info, val, anim_value_type); if (info.fieldType==SVG_ID_datatype) { @@ -2887,7 +2901,9 @@ static JSBool SMJS_FUNCTION(xml_http_send) /*just wait for destruction*/ if (!ctx->async) { while (ctx->sess) { + gf_sg_lock_javascript(ctx->c, 0); gf_sleep(20); + gf_sg_lock_javascript(ctx->c, 1); } } } else { @@ -2903,11 +2919,15 @@ static JSBool SMJS_FUNCTION(xml_http_send) gf_free(ctx->statusText); ctx->statusText = NULL; } + /*opera-style local host*/ + if (!strnicmp(ctx->url, "file://localhost", 16)) xmlf = gf_f64_open(ctx->url+16, "rt"); + /*regular-style local host*/ + else if (!strnicmp(ctx->url, "file://", 7)) xmlf = gf_f64_open(ctx->url+7, "rt"); + else xmlf = gf_f64_open(ctx->url, "rt"); - xmlf = gf_f64_open(ctx->url, "rt"); if (!xmlf) { ctx->html_status = 404; - GF_LOG(GF_LOG_ERROR, GF_LOG_SCRIPT, ("[XmlHttpRequest] cannot parse %s\n", ctx->url)); + GF_LOG(GF_LOG_ERROR, GF_LOG_SCRIPT, ("[XmlHttpRequest] cannot open %s\n", ctx->url)); return JS_TRUE; } ctx->readyState = 2; diff --git a/src/scenegraph/mpeg4_nodes.c b/src/scenegraph/mpeg4_nodes.c index a1005dd..621cafb 100644 --- a/src/scenegraph/mpeg4_nodes.c +++ b/src/scenegraph/mpeg4_nodes.c @@ -24,7 +24,7 @@ /* - DO NOT MOFIFY - File generated on GMT Mon Jan 18 12:27:12 2010 + DO NOT MOFIFY - File generated on GMT Wed Jul 20 05:50:21 2011 BY MPEG4Gen for GPAC Version 0.4.6-DEV */ @@ -32126,14 +32126,14 @@ static Bool AdvancedAudioBuffer_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QTyp *AType = 0; *QType = 13; *QT13_bits = 17; - *b_min = FLT2FIX(-65536.0f); + *b_min = FLT2FIX(-65536); *b_max = FLT2FIX( 0); return 1; case 12: *AType = 0; *QType = 13; *QT13_bits = 17; - *b_min = FLT2FIX(-65536.0f); + *b_min = FLT2FIX(-65536); *b_max = FLT2FIX( 0); return 1; case 13: @@ -35257,6 +35257,7 @@ static void CacheTexture_Del(GF_Node *node) gf_sg_sfstring_del(p->image); gf_sg_sfstring_del(p->cacheURL); gf_sg_mfurl_del(p->cacheOD); + if (p->data) gf_free(p->data); gf_node_free((GF_Node *) p); } diff --git a/src/scenegraph/smil_anim.c b/src/scenegraph/smil_anim.c index 967a22c..4b8568f 100644 --- a/src/scenegraph/smil_anim.c +++ b/src/scenegraph/smil_anim.c @@ -1,1513 +1,1520 @@ -/* - * GPAC - Multimedia Framework C SDK - * - * Authors: Cyril Concolato - Jean Le Feuvre - * Copyright (c)2004-200X ENST - All rights reserved - * - * This file is part of GPAC / SVG Scene Graph sub-project - * - * GPAC is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * GPAC 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -#include -#include - -#ifndef GPAC_DISABLE_LOG -u32 time_spent_in_anim = 0; -#endif - -#ifndef GPAC_DISABLE_SVG - - -/************************************************************************************** - * Each GF_Node holds the (SVG/SMIL) animation elements which target itself in a list * - * The following are the generic functions to manipulate this list: * - * - add a new animation to the list, * - * - get an animation from the list, * - * - remove an animation from the list, * - * - count the animations in the list, * - * - delete the list * - **************************************************************************************/ -GF_Err gf_node_animation_add(GF_Node *node, void *animation) -{ - if (!node || !animation) return GF_BAD_PARAM; - if (!node->sgprivate->interact) GF_SAFEALLOC(node->sgprivate->interact, struct _node_interactive_ext); - if (!node->sgprivate->interact->animations) node->sgprivate->interact->animations = gf_list_new(); - return gf_list_add(node->sgprivate->interact->animations, animation); -} - -GF_Err gf_node_animation_del(GF_Node *node) -{ - if (!node || !node->sgprivate->interact || !node->sgprivate->interact->animations) return GF_BAD_PARAM; - gf_list_del(node->sgprivate->interact->animations); - node->sgprivate->interact->animations = NULL; - return GF_OK; -} - -u32 gf_node_animation_count(GF_Node *node) -{ - if (!node || !node->sgprivate->interact|| !node->sgprivate->interact->animations) return 0; - return gf_list_count(node->sgprivate->interact->animations); -} - -void *gf_node_animation_get(GF_Node *node, u32 i) -{ - if (!node || !node->sgprivate->interact || !node->sgprivate->interact->animations) return 0; - return gf_list_get(node->sgprivate->interact->animations, i); -} - -GF_Err gf_node_animation_rem(GF_Node *node, u32 i) -{ - if (!node || !node->sgprivate->interact || !node->sgprivate->interact->animations) return GF_OK; - return gf_list_rem(node->sgprivate->interact->animations, i); -} -/************************************************************************************** - * End of Generic GF_Node animations list * - **************************************************************************************/ - - -/************************************************************************************** - * Helping functions for animation * - **************************************************************************************/ -/* Sets the pointer to the attribute value with the pointer - to the value which passed (if unspecified) */ -void gf_svg_attributes_resolve_unspecified(GF_FieldInfo *in, GF_FieldInfo *p, GF_FieldInfo *t) -{ - if (in->fieldType == 0) { - if (p->fieldType == SVG_Transform_datatype) { - /* if the input value is not specified, and the presentation value is of type Transform, - then we should use the default identity transform instead of the presentation value */ - *in = *t; - } else { - *in = *p; - } - } -} - -/* Replaces the pointer to the attribute value with the pointer - to the value which is inherited (if inherited) */ -void gf_svg_attributes_resolve_inherit(GF_FieldInfo *in, GF_FieldInfo *prop) -{ - if (gf_svg_is_inherit(in)) *in = *prop; -} - -/* Replaces the pointer to the attribute value with the pointer - to the value of the color attribute (if the current value is set to currentColor) */ -void gf_svg_attributes_resolve_currentColor(GF_FieldInfo *in, GF_FieldInfo *current_color) -{ - if ((in->fieldType == SVG_Paint_datatype) && gf_svg_is_current_color(in)) { - *in = *current_color; - } -} - -/************************************************************************************** - * The main function doing evaluation of the animation is: gf_smil_anim_evaluate * - * Depending on the timing status of the animation it calls: * - * - gf_smil_anim_animate * - * - gf_smil_anim_animate_with_fraction * - * - gf_smil_anim_freeze * - * - gf_smil_anim_remove * - * * - * The gf_smil_anim_animate consists in * - * - interpolating using gf_smil_anim_compute_interpolation_value * - * - accumulating using gf_smil_anim_apply_accumulate * - * - applying additive behavior * - * * - * Depending on the animation attributes, one of the following functions is called * - * by the function gf_smil_anim_compute_interpolation_value * - * - gf_smil_anim_set * - * - gf_smil_anim_animate_using_values * - * - gf_smil_anim_animate_from_to * - * - gf_smil_anim_animate_from_by * - * - gf_smil_anim_animate_using_path * - * * - * In most animation methods, the important step in the animation is to resolve * - * the inherit and currentColor values to perform further interpolation, i.e. calls: * - * gf_svg_attributes_resolve_currentColor(&info, &rai->owner->current_color_value); * - * gf_svg_attributes_resolve_inherit(&info, &rai->owner->parent_presentation_value); * - * * - **************************************************************************************/ -static void gf_smil_anim_set(SMIL_Anim_RTI *rai) -{ - GF_FieldInfo to_info; - SMILAnimationAttributesPointers *animp = rai->animp; - - if (!animp->to || !animp->to->type) { - GF_LOG(GF_LOG_ERROR, GF_LOG_SMIL, - ("[SMIL Animation] Animation %s - set element without to attribute\n", - gf_node_get_log_name((GF_Node *)rai->anim_elt))); - return; - } - - if (rai->change_detection_mode) { - /* if the set has been applied, unless next animations are additive we don't need - to apply it again */ - if (rai->previous_coef > 0) rai->interpolated_value_changed = 0; - else rai->interpolated_value_changed = 1; - return; - } else { - GF_LOG(GF_LOG_DEBUG, GF_LOG_SMIL, - ("[SMIL Animation] Time %f - Animation %s - applying set animation\n", - gf_node_get_scene_time((GF_Node*)rai->anim_elt), - gf_node_get_log_name((GF_Node *)rai->anim_elt))); - - to_info.fieldType = animp->to->type; - to_info.far_ptr = animp->to->value; - /* we do not need to resolve currentColor values or inherit values here, - because no further interpolation is required for the animation and - because inheritance is applied after animations in the compositor. */ - - gf_svg_attributes_copy(&rai->interpolated_value, &to_info, 0); - rai->previous_coef = FIX_ONE; - } -} - -static void gf_smil_anim_use_keypoints_keytimes(SMIL_Anim_RTI *rai, Fixed normalized_simple_time, - Fixed *interpolation_coefficient, u32 *keyValueIndex) -{ - SMILAnimationAttributesPointers *animp = rai->animp; - u32 keyTimeIndex = 0; - Fixed interval_duration; - - *interpolation_coefficient = normalized_simple_time; - - /* Computing new interpolation coefficient */ - if (rai->key_times_count) { - Fixed keyTimeBefore = 0, keyTimeAfter=0; - for (keyTimeIndex = rai->previous_keytime_index; keyTimeIndex< rai->key_times_count; keyTimeIndex++) { - Fixed *tm1, *t = (Fixed *)gf_list_get(*animp->keyTimes, keyTimeIndex); - if (normalized_simple_time < *t) { - rai->previous_keytime_index = keyTimeIndex; - tm1 = (Fixed *) gf_list_get(*animp->keyTimes, keyTimeIndex-1); - if (tm1) keyTimeBefore = *tm1; - else keyTimeBefore = 0; - keyTimeAfter = *t; - break; - } - } - keyTimeIndex--; - interval_duration = keyTimeAfter - keyTimeBefore; - if (keyValueIndex) *keyValueIndex = keyTimeIndex; - if (interval_duration) - *interpolation_coefficient = gf_divfix(normalized_simple_time - keyTimeBefore, interval_duration); - else - *interpolation_coefficient = FIX_ONE; - if (!rai->change_detection_mode) - GF_LOG(GF_LOG_DEBUG, GF_LOG_SMIL, - ("[SMIL Animation] Time %f - Animation %s - Using Key Times: index %d, interval duration %.2f, coeff: %.2f\n", - gf_node_get_scene_time((GF_Node*)rai->anim_elt), - gf_node_get_log_name((GF_Node *)rai->anim_elt), - keyTimeIndex, - interval_duration, - interpolation_coefficient)); - } - - if (rai->anim_elt->sgprivate->tag == TAG_SVG_animateMotion && rai->key_points_count) { - Fixed *p1, *p2; - p1 = (Fixed *)gf_list_get(*animp->keyPoints, keyTimeIndex); - if (animp->calcMode && *animp->calcMode == SMIL_CALCMODE_DISCRETE) { - *interpolation_coefficient = *p1; - } else { - p2 = (Fixed *)gf_list_get(*animp->keyPoints, keyTimeIndex+1); - *interpolation_coefficient = gf_mulfix(FIX_ONE - *interpolation_coefficient, *p1) - + gf_mulfix(*interpolation_coefficient, (p2 ? *p2 : *p1)); - } - if (keyValueIndex) *keyValueIndex = 0; - if (!rai->change_detection_mode) - GF_LOG(GF_LOG_DEBUG, GF_LOG_SMIL, - ("[SMIL Animation] Time %f - Animation %s - Using Key Points: key Point Index %d, coeff: %.2f\n", - gf_node_get_scene_time((GF_Node*)rai->anim_elt), gf_node_get_log_name((GF_Node *)rai->anim_elt), keyTimeIndex, *interpolation_coefficient)); - } -} - -static void gf_smil_anim_animate_using_values(SMIL_Anim_RTI *rai, Fixed normalized_simple_time) -{ - SMILAnimationAttributesPointers *animp = rai->animp; - GF_List *values = NULL; - GF_FieldInfo value_info, value_info_next; - u32 keyValueIndex; - Fixed interpolation_coefficient; - u32 real_calcMode; - - values = animp->values->values; - - memset(&value_info, 0, sizeof(GF_FieldInfo)); - value_info.fieldType = animp->values->type; - value_info_next = value_info; - - real_calcMode = (gf_svg_attribute_is_interpolatable(animp->values->type)? - (animp->calcMode ? *animp->calcMode : SMIL_CALCMODE_LINEAR): - SMIL_CALCMODE_DISCRETE - ); - - if (rai->values_count == 1) { - if (rai->change_detection_mode) { - /* Since we have only 1 value, the previous key index should always be 0, - unless the animation has not started or is reset (-1) */ - if (rai->previous_key_index == 0) rai->interpolated_value_changed = 0; - else rai->interpolated_value_changed = 1; - return; - } else { - value_info.far_ptr = gf_list_get(values, 0); - /* no further interpolation needed - therefore no need to resolve inherit and currentColor */ - gf_svg_attributes_copy(&rai->interpolated_value, &value_info, 0); - rai->previous_key_index = 0; - GF_LOG(GF_LOG_DEBUG, GF_LOG_SMIL, - ("[SMIL Animation] Time %f - Animation %s - Using values[0] as interpolation value\n", - gf_node_get_scene_time((GF_Node*)rai->anim_elt), gf_node_get_log_name((GF_Node *)rai->anim_elt))); - return; - } - } - - /* Computing new key value index and interpolation coefficient */ - if (!rai->key_times_count) { - if (real_calcMode == SMIL_CALCMODE_DISCRETE) { - if (normalized_simple_time == FIX_ONE) { - keyValueIndex = rai->values_count-1; - interpolation_coefficient = FIX_ONE; - } else { - Fixed tmp = normalized_simple_time*rai->values_count; - Fixed tmp_floor = gf_floor(tmp); - if ((tmp - tmp_floor) == 0 && tmp) { - keyValueIndex = FIX2INT(tmp_floor) - 1; - } else { - keyValueIndex = FIX2INT(tmp_floor); - } - interpolation_coefficient = tmp - INT2FIX(keyValueIndex); - } - } else { - Fixed tmp = normalized_simple_time*(rai->values_count-1); - if (normalized_simple_time == FIX_ONE) { - keyValueIndex = rai->values_count-2; - } else { - keyValueIndex = FIX2INT(gf_floor(tmp)); - } - interpolation_coefficient = tmp - INT2FIX(keyValueIndex); - } - //GF_LOG(GF_LOG_DEBUG, GF_LOG_SMIL, ("[SMIL Animation] Time %f - Animation %s - No KeyTimes: key index %d, coeff: %.2f\n", gf_node_get_scene_time((GF_Node*)rai->anim_elt), gf_node_get_log_name((GF_Node *)rai->anim_elt), keyValueIndex, FIX2FLT(interpolation_coefficient))); - } else { - gf_smil_anim_use_keypoints_keytimes(rai, normalized_simple_time, &interpolation_coefficient, &keyValueIndex); - } - - if (rai->change_detection_mode) { - if (real_calcMode == SMIL_CALCMODE_DISCRETE && rai->previous_key_index == (s32)keyValueIndex && rai->previous_coef != -FIX_ONE) { - rai->interpolated_value_changed = 0; - } else if (rai->previous_key_index == (s32)keyValueIndex && rai->previous_coef == interpolation_coefficient) - rai->interpolated_value_changed = 0; - else - rai->interpolated_value_changed = 1; - } else { - rai->previous_key_index = keyValueIndex; - rai->previous_coef = interpolation_coefficient; - - switch (real_calcMode) { - case SMIL_CALCMODE_DISCRETE: - GF_LOG(GF_LOG_DEBUG, GF_LOG_SMIL, - ("[SMIL Animation] Time %f - Animation %s - applying discrete animation using values (key value index: %d)\n", - gf_node_get_scene_time((GF_Node*)rai->anim_elt), gf_node_get_log_name((GF_Node *)rai->anim_elt), keyValueIndex)); - value_info.far_ptr = gf_list_get(values, keyValueIndex); - /* no further interpolation needed - therefore no need to resolve inherit and currentColor */ - gf_svg_attributes_copy(&rai->interpolated_value, &value_info, 0); - break; - case SMIL_CALCMODE_PACED: - /* TODO: at the moment assume it is linear */ - case SMIL_CALCMODE_SPLINE: - /* TODO: at the moment assume it is linear */ - case SMIL_CALCMODE_LINEAR: - if (keyValueIndex == rai->values_count - 1) { - GF_LOG(GF_LOG_DEBUG, GF_LOG_SMIL, - ("[SMIL Animation] Time %f - Animation %s - applying linear animation using values (setting last key value: %d)\n", - gf_node_get_scene_time((GF_Node*)rai->anim_elt), gf_node_get_log_name((GF_Node *)rai->anim_elt), keyValueIndex)); - value_info.far_ptr = gf_list_get(values, rai->values_count - 1); - /* no further interpolation needed - therefore no need to resolve inherit and currentColor */ - gf_svg_attributes_copy(&rai->interpolated_value, &value_info, 0); - } else { - - GF_LOG(GF_LOG_DEBUG, GF_LOG_SMIL, - ("[SMIL Animation] Time %f - Animation %s - applying linear animation using values (key value indices: %d, %d / coeff: %f)\n", - gf_node_get_scene_time((GF_Node*)rai->anim_elt), gf_node_get_log_name((GF_Node *)rai->anim_elt), keyValueIndex, keyValueIndex+1, interpolation_coefficient)); - value_info.far_ptr = gf_list_get(values, keyValueIndex); - if (rai->owner->is_property && gf_svg_attribute_is_interpolatable(animp->values->type)) { - gf_svg_attributes_resolve_currentColor(&value_info, &rai->owner->current_color_value); - gf_svg_attributes_resolve_inherit(&value_info, &rai->owner->parent_presentation_value); - } - - value_info_next.far_ptr = gf_list_get(values, keyValueIndex+1); - if (rai->owner->is_property && gf_svg_attribute_is_interpolatable(animp->values->type)) { - gf_svg_attributes_resolve_currentColor(&value_info_next, &rai->owner->current_color_value); - gf_svg_attributes_resolve_inherit(&value_info_next, &rai->owner->parent_presentation_value); - } - - gf_svg_attributes_interpolate(&value_info, - &value_info_next, - &rai->interpolated_value, - interpolation_coefficient, 1); - } - break; - } - } -} - -static void gf_smil_anim_animate_from_to(SMIL_Anim_RTI *rai, Fixed normalized_simple_time) -{ - GF_FieldInfo from_info, to_info; - SMILAnimationAttributesPointers *animp = rai->animp; - Fixed interpolation_coefficient; - s32 useFrom = (normalized_simple_time<=FIX_ONE/2); - u32 real_calcMode; - - real_calcMode = (animp->to && gf_svg_attribute_is_interpolatable(animp->to->type)? - (animp->calcMode ? *animp->calcMode : SMIL_CALCMODE_LINEAR): - SMIL_CALCMODE_DISCRETE - ); - - if (rai->change_detection_mode) { - if (rai->previous_coef == normalized_simple_time) - rai->interpolated_value_changed = 0; - else { - if (real_calcMode == SMIL_CALCMODE_DISCRETE && - useFrom == rai->previous_key_index) { - rai->interpolated_value_changed = 0; - } else { - rai->interpolated_value_changed = 1; - } - } - } else { - - if (animp->from) { - from_info.fieldType = animp->from->type; - from_info.far_ptr = animp->from->value; - } else { - from_info.fieldType = 0; - from_info.far_ptr = NULL; - } - - if (rai->is_first_anim) - gf_svg_attributes_resolve_unspecified(&from_info, - &rai->owner->specified_value, - &rai->default_transform_value); - else - gf_svg_attributes_resolve_unspecified(&from_info, - &rai->owner->presentation_value, - &rai->default_transform_value); - - if (rai->owner->is_property && gf_svg_attribute_is_interpolatable(from_info.fieldType)) { - gf_svg_attributes_resolve_currentColor(&from_info, &rai->owner->current_color_value); - gf_svg_attributes_resolve_inherit(&from_info, &rai->owner->parent_presentation_value); - } - if (animp->to) { - to_info.fieldType = animp->to->type; - to_info.far_ptr = animp->to->value; - } else { - to_info.fieldType = 0; - to_info.far_ptr = NULL; - } - - if (rai->is_first_anim) - gf_svg_attributes_resolve_unspecified(&to_info, - &rai->owner->specified_value, - &rai->default_transform_value); - else - gf_svg_attributes_resolve_unspecified(&to_info, - &rai->owner->presentation_value, - &rai->default_transform_value); - - if (rai->owner->is_property && gf_svg_attribute_is_interpolatable(to_info.fieldType)) { - gf_svg_attributes_resolve_currentColor(&to_info, &rai->owner->current_color_value); - gf_svg_attributes_resolve_inherit(&to_info, &rai->owner->parent_presentation_value); - } - - gf_smil_anim_use_keypoints_keytimes(rai, normalized_simple_time, &interpolation_coefficient, NULL); - - rai->previous_coef = interpolation_coefficient; - - switch (real_calcMode) { - case SMIL_CALCMODE_DISCRETE: - { - /* before half of the duration stay at 'from' and then switch to 'to' */ - GF_LOG(GF_LOG_DEBUG, GF_LOG_SMIL, - ("[SMIL Animation] Time %f - Animation %s - applying from-to animation (using %s value)\n", - gf_node_get_scene_time((GF_Node*)rai->anim_elt), gf_node_get_log_name((GF_Node *)rai->anim_elt), (useFrom?"from":"to"))); - gf_svg_attributes_copy(&rai->interpolated_value, (useFrom?&from_info:&to_info), 0); - rai->previous_key_index = useFrom; - } - break; - case SMIL_CALCMODE_SPLINE: - case SMIL_CALCMODE_PACED: - case SMIL_CALCMODE_LINEAR: - default: - GF_LOG(GF_LOG_DEBUG, GF_LOG_SMIL, - ("[SMIL Animation] Time %f - Animation %s - applying from-to animation (linear interpolation, using coefficient %f)\n", - gf_node_get_scene_time((GF_Node*)rai->anim_elt), gf_node_get_log_name((GF_Node *)rai->anim_elt), interpolation_coefficient)); - gf_svg_attributes_interpolate(&from_info, &to_info, &rai->interpolated_value, interpolation_coefficient, 1); - break; - } - } -} - -static void gf_smil_anim_animate_from_by(SMIL_Anim_RTI *rai, Fixed normalized_simple_time) -{ - Fixed from_coef; - GF_FieldInfo from_info, by_info; - SMILAnimationAttributesPointers *animp = rai->animp; - s32 useFrom = (normalized_simple_time<=FIX_ONE/2); - - if (rai->change_detection_mode) { - if (rai->previous_coef == normalized_simple_time) - rai->interpolated_value_changed = 0; - else { - if (animp->calcMode && - *animp->calcMode == SMIL_CALCMODE_DISCRETE && - useFrom == rai->previous_key_index) { - rai->interpolated_value_changed = 0; - } else { - rai->interpolated_value_changed = 1; - } - } - } else { - rai->previous_coef = normalized_simple_time; - - if (animp->from) { - from_info.fieldType = animp->from->type; - from_info.far_ptr = animp->from->value; - from_coef = FIX_ONE; - } else { - from_info.fieldType = 0; - from_info.far_ptr = NULL; - /* this is a by animation only, then, it is always additive, - we don't need the from value*/ - from_coef = 0; - } - - if (rai->is_first_anim) - gf_svg_attributes_resolve_unspecified(&from_info, - &rai->owner->specified_value, - &rai->default_transform_value); - else - gf_svg_attributes_resolve_unspecified(&from_info, - &rai->owner->presentation_value, - &rai->default_transform_value); - - if (rai->owner->is_property && gf_svg_attribute_is_interpolatable(from_info.fieldType)) { - gf_svg_attributes_resolve_currentColor(&from_info, &rai->owner->current_color_value); - gf_svg_attributes_resolve_inherit(&from_info, &rai->owner->parent_presentation_value); - } - - if (animp->by) { - by_info.fieldType = animp->by->type; - by_info.far_ptr = animp->by->value; - } else { - by_info.fieldType = 0; - by_info.far_ptr = NULL; - } - - if (rai->owner->is_property && gf_svg_attribute_is_interpolatable(from_info.fieldType)) { - gf_svg_attributes_resolve_currentColor(&by_info, &rai->owner->current_color_value); - gf_svg_attributes_resolve_inherit(&by_info, &rai->owner->parent_presentation_value); - } - - switch ((animp->calcMode ? *animp->calcMode : SMIL_CALCMODE_LINEAR)) { - case SMIL_CALCMODE_DISCRETE: - { - /* before half of the duration stay at 'from' and then switch to 'to' */ - if (useFrom) { - GF_LOG(GF_LOG_DEBUG, GF_LOG_SMIL, - ("[SMIL Animation] Time %f - Animation %s - applying from-by animation (setting from)", - gf_node_get_scene_time((GF_Node*)rai->anim_elt), gf_node_get_log_name((GF_Node *)rai->anim_elt))); - gf_svg_attributes_muladd(from_coef, &from_info, 0, &by_info, &rai->interpolated_value, 0); - } else { - GF_LOG(GF_LOG_DEBUG, GF_LOG_SMIL, - ("[SMIL Animation] Time %f - Animation %s - applying from-by animation (setting from+by)", - gf_node_get_scene_time((GF_Node*)rai->anim_elt), gf_node_get_log_name((GF_Node *)rai->anim_elt))); - gf_svg_attributes_muladd(from_coef, &from_info, FIX_ONE, &by_info, &rai->interpolated_value, 0); - } - rai->previous_key_index = useFrom; - } - break; - case SMIL_CALCMODE_SPLINE: - case SMIL_CALCMODE_PACED: - case SMIL_CALCMODE_LINEAR: - default: - GF_LOG(GF_LOG_DEBUG, GF_LOG_SMIL, - ("[SMIL Animation] Time %f - Animation %s - applying from-by animation (linear interpolation between from and from+by, coef: %f)\n", - gf_node_get_scene_time((GF_Node*)rai->anim_elt), gf_node_get_log_name((GF_Node *)rai->anim_elt), normalized_simple_time)); - gf_svg_attributes_muladd(from_coef, &from_info, normalized_simple_time, &by_info, &rai->interpolated_value, 0); - break; - } - } -} - -static void gf_svg_compute_path_anim(SMIL_Anim_RTI *rai, GF_Matrix2D *m, Fixed normalized_simple_time) -{ - Fixed offset; - offset = gf_mulfix(normalized_simple_time, rai->length); - gf_mx2d_init(*m); - - gf_path_iterator_get_transform(rai->path_iterator, offset, 1, m, 1, 0); - //GF_LOG(GF_LOG_DEBUG, GF_LOG_SMIL, ("offset: %f, position: (%f, %f)", offset, ((GF_Matrix2D *)rai->interpolated_value.far_ptr)->m[2], ((GF_Matrix2D *)rai->interpolated_value.far_ptr)->m[5])); - switch (rai->rotate) { - case SVG_NUMBER_AUTO: - break; - case SVG_NUMBER_AUTO_REVERSE: - gf_mx2d_add_rotation(m, m->m[2], m->m[5], GF_PI); - break; - default: - m->m[0] = FIX_ONE; - m->m[1] = 0; - m->m[3] = 0; - m->m[4] = FIX_ONE; - } -} - -static void gf_smil_anim_animate_using_path(SMIL_Anim_RTI *rai, Fixed normalized_simple_time) -{ - Fixed interpolation_coefficient; - - gf_smil_anim_use_keypoints_keytimes(rai, normalized_simple_time, &interpolation_coefficient, NULL); - - if (rai->change_detection_mode) { - if (rai->previous_coef == interpolation_coefficient) - rai->interpolated_value_changed = 0; - else { - rai->interpolated_value_changed = 1; - } - } else { - rai->previous_coef = interpolation_coefficient; - - GF_LOG(GF_LOG_DEBUG, GF_LOG_SMIL, - ("[SMIL Animation] Time %f - Animation %s - applying path animation (coef: %f)\n", - gf_node_get_scene_time((GF_Node*)rai->anim_elt), gf_node_get_log_name((GF_Node *)rai->anim_elt), normalized_simple_time)); - - gf_svg_compute_path_anim(rai, (GF_Matrix2D*)rai->interpolated_value.far_ptr, interpolation_coefficient); - } -} - -static void gf_smil_anim_compute_interpolation_value(SMIL_Anim_RTI *rai, Fixed normalized_simple_time) -{ - SMILAnimationAttributesPointers *animp = rai->animp; - - if (rai->path) { - gf_smil_anim_animate_using_path(rai, normalized_simple_time); - } else if (rai->anim_elt->sgprivate->tag == TAG_SVG_set) { - gf_smil_anim_set(rai); - } else if (rai->values_count) { - /* Ignore 'from'/'to'/'by'*/ - gf_smil_anim_animate_using_values(rai, normalized_simple_time); - } else if ((animp->by && animp->by->type) && (!animp->to || animp->to->type == 0)) { - /* 'to' is not specified but 'by' is, so this is a 'by' animation or a 'from'-'by' animation */ - gf_smil_anim_animate_from_by(rai, normalized_simple_time); - } else { - /* Ignore 'by' if specified */ - gf_smil_anim_animate_from_to(rai, normalized_simple_time); - } - -#ifndef GPAC_DISABLE_LOG - if (0 && (gf_log_get_level() >= GF_LOG_DEBUG) && (gf_log_get_tools() & GF_LOG_SMIL)) { - char *str; - gf_log_lt(GF_LOG_DEBUG, GF_LOG_SMIL); - str = gf_svg_dump_attribute(rai->anim_elt, &rai->interpolated_value); - - gf_log("[SMIL Animation] Time %f - Animation %s - Interpolation value changed for attribute %s, new value: %s \n", - gf_node_get_scene_time(rai->anim_elt), gf_node_get_log_name(rai->anim_elt), - gf_svg_get_attribute_name(rai->anim_elt, rai->owner->presentation_value.fieldIndex), str); - - if (str) gf_free(str); - } -#endif -} - -void gf_smil_anim_set_anim_runtime_in_timing(GF_Node *n) -{ - u32 i, j; - SVGTimedAnimBaseElement *timed_elt = NULL; - SMIL_Timing_RTI *rti = NULL; - GF_Node *target = NULL; - - if (!n) return; - timed_elt = (SVGTimedAnimBaseElement *)n; - - if (!gf_svg_is_animation_tag(n->sgprivate->tag)) return; - - target = timed_elt->xlinkp->href->target; - if (!target) return; - - if (timed_elt->timingp) rti = timed_elt->timingp->runtime; - if (!rti) return; - - rti->rai = NULL; - - for (i = 0; i < gf_node_animation_count(target); i++) { - SMIL_Anim_RTI *rai_tmp; - SMIL_AttributeAnimations *aa = (SMIL_AttributeAnimations *)gf_node_animation_get(target, i); - j=0; - while ((rai_tmp = (SMIL_Anim_RTI *)gf_list_enum(aa->anims, &j))) { - if (rai_tmp->timingp->runtime == rti) { - rti->rai = rai_tmp; - return; - } - } - } -} - -static void gf_smil_anim_get_last_specified_value(SMIL_Anim_RTI *rai) -{ - SMILAnimationAttributesPointers *animp = rai->animp; - - if (!animp) return; - - if (rai->path) { - if (!rai->last_specified_value.far_ptr) rai->last_specified_value.far_ptr = gf_malloc(sizeof(GF_Matrix2D)); - gf_svg_compute_path_anim(rai, rai->last_specified_value.far_ptr, FIX_ONE); - return; - } else if (rai->anim_elt->sgprivate->tag == TAG_SVG_set) { - if (animp->to) { - rai->last_specified_value.fieldType = animp->to->type; - rai->last_specified_value.far_ptr = animp->to->value; - } else { - /* TODO ??? */ - GF_LOG(GF_LOG_ERROR, GF_LOG_SMIL, - ("[SMIL Animation] Animation %s - set element without to attribute\n", - gf_node_get_log_name((GF_Node *)rai->anim_elt))); - } - return; - } - - if (rai->values_count) { - /* Ignore from/to/by*/ - rai->last_specified_value.fieldType = animp->values->type; - rai->last_specified_value.far_ptr = gf_list_last(animp->values->values); - } else if ((animp->by && animp->by->type) && (!animp->to || animp->to->type == 0)) { - rai->last_specified_value.fieldType = animp->by->type; - rai->last_specified_value.far_ptr = animp->by->value; - } else if (animp->to) { - rai->last_specified_value.fieldType = animp->to->type; - rai->last_specified_value.far_ptr = animp->to->value; - } - if (gf_svg_is_inherit(&rai->last_specified_value)) { - rai->last_specified_value.fieldType = rai->owner->presentation_value.fieldType; - rai->last_specified_value.far_ptr = rai->owner->presentation_value.far_ptr; - } - if (rai->owner->is_property && gf_svg_attribute_is_interpolatable(rai->last_specified_value.fieldType)) { - gf_svg_attributes_resolve_currentColor(&rai->last_specified_value, &rai->owner->current_color_value); - gf_svg_attributes_resolve_inherit(&rai->last_specified_value, &rai->owner->parent_presentation_value); - } -} - -/* if the animation behavior is accumulative and this is not the first iteration, - then we modify the interpolation value as follows: - interpolation value += last specified value * number of iterations completed */ -static void gf_smil_anim_apply_accumulate(SMIL_Anim_RTI *rai) -{ - u32 nb_iterations; - - SMILAnimationAttributesPointers *animp = rai->animp; - SMILTimingAttributesPointers *timingp = rai->timingp; - - nb_iterations = (timingp->runtime->current_interval ? timingp->runtime->current_interval->nb_iterations : 1); - - if (rai->change_detection_mode) { - if ((animp->accumulate && *animp->accumulate == SMIL_ACCUMULATE_SUM) - && nb_iterations > 0 - && rai->previous_iteration != (s32) nb_iterations) { - /* if we actually do accumulation and the number of iteration is different, - then we force the result as changed regardless of the result of the interpolation - (TODO: check if this need to be improved)*/ - rai->interpolated_value_changed = 1; - } else { - /* if we don't accumulate we leave the value of interpolated_value_changed unchanged */ - } - } else { - if (nb_iterations > 0 && rai->previous_iteration != (s32) nb_iterations) { - rai->previous_iteration = nb_iterations; - } - - if ((animp->accumulate && *animp->accumulate == SMIL_ACCUMULATE_SUM) && nb_iterations > 0) { - GF_LOG(GF_LOG_DEBUG, GF_LOG_SMIL, - ("[SMIL Animation] Time %f - Animation %s - applying accumulation (iteration #%d)\n", - gf_node_get_scene_time((GF_Node*)rai->anim_elt), gf_node_get_log_name((GF_Node *)rai->anim_elt), nb_iterations)); - - gf_svg_attributes_muladd(FIX_ONE, &rai->interpolated_value, - INT2FIX(nb_iterations), &rai->last_specified_value, - &rai->interpolated_value, 1); - - if ((animp->from) && animp->by && (rai->last_specified_value.far_ptr == animp->by->value)) { - /* this is a from-by animation, the last specified value is not the 'by' value but actually 'from'+'by', - we need to add nb_iterations times from to the interpolated_value - see (animate-elem-210-t.svg (upper two circles in the mid column, after 9s/14s */ - GF_FieldInfo from_info; - from_info.fieldType = rai->animp->from->type; - from_info.far_ptr = rai->animp->from->value; - gf_svg_attributes_muladd(FIX_ONE, &rai->interpolated_value, - INT2FIX(nb_iterations), &from_info, - &rai->interpolated_value, 1); - } - } - } -} - -static void gf_smil_apply_additive(SMIL_Anim_RTI *rai) -{ - SMILAnimationAttributesPointers *animp = rai->animp; - if (rai->change_detection_mode) return; - else { - /* Apply additive behavior if required - PV = (additive == sum ? PV + animp->IV : animp->IV); */ - if (animp->additive && *animp->additive == SMIL_ADDITIVE_SUM) { - GF_LOG(GF_LOG_DEBUG, GF_LOG_SMIL, - ("[SMIL Animation] Time %f - Animation %s - applying additive behavior\n", - gf_node_get_scene_time((GF_Node*)rai->anim_elt), gf_node_get_log_name((GF_Node *)rai->anim_elt))); - - gf_svg_attributes_add((rai->is_first_anim ? &rai->owner->specified_value : &rai->owner->presentation_value), - &rai->interpolated_value, - &rai->owner->presentation_value, - 1); - -#ifndef GPAC_DISABLE_LOG - if ((gf_log_get_level() >= GF_LOG_DEBUG) && (gf_log_get_tools() & GF_LOG_SMIL)) { - char *str; - gf_log_lt(GF_LOG_DEBUG, GF_LOG_SMIL); - str = gf_svg_dump_attribute((GF_Node*)rai->anim_elt, &rai->owner->presentation_value); - gf_log("[SMIL Animation] Time %f - Animation %s - Presentation value changed for attribute %s, new value: %s\n", - gf_node_get_scene_time((GF_Node*)rai->anim_elt), gf_node_get_log_name((GF_Node*)rai->anim_elt), - gf_svg_get_attribute_name((GF_Node*)rai->anim_elt, rai->owner->presentation_value.fieldIndex), str); - - if (str) gf_free(str); - } -#endif - - } else { - GF_LOG(GF_LOG_DEBUG, GF_LOG_SMIL, - ("[SMIL Animation] Time %f - Animation %s - applying non-additive behavior\n", - gf_node_get_scene_time((GF_Node*)rai->anim_elt), gf_node_get_log_name((GF_Node *)rai->anim_elt))); - - /* FIXME: if we switch pointers to avoid copying values, - we need to modify the address in the DOM node as well, - we also need to take care about change detections. Not easy!! - - void *tmp = rai->owner->presentation_value.far_ptr; - rai->owner->presentation_value.far_ptr = rai->interpolated_value.far_ptr; - rai->interpolated_value.far_ptr = tmp; - */ - - gf_svg_attributes_copy(&rai->owner->presentation_value, &rai->interpolated_value, 1); -#ifndef GPAC_DISABLE_LOG - if ((gf_log_get_level() >= GF_LOG_DEBUG) && (gf_log_get_tools() & GF_LOG_SMIL)) { - char *str; - gf_log_lt(GF_LOG_DEBUG, GF_LOG_SMIL); - str = gf_svg_dump_attribute((GF_Node*)rai->anim_elt, &rai->owner->presentation_value); - - gf_log("[SMIL Animation] Time %f - Animation %s - Presentation value changed for attribute %s, new value: %s\n", - gf_node_get_scene_time((GF_Node*)rai->anim_elt), gf_node_get_log_name((GF_Node*)rai->anim_elt), - gf_svg_get_attribute_name((GF_Node*)rai->anim_elt, rai->owner->presentation_value.fieldIndex), str); - - if (str) gf_free(str); - } -#endif - } - } -} - -static void gf_smil_anim_animate(SMIL_Timing_RTI *rti, Fixed normalized_simple_time) -{ - SMIL_Anim_RTI *rai = rti->rai; - SMILAnimationAttributesPointers *animp = rai->animp; - - if (!rai || !animp) return; - - gf_smil_anim_compute_interpolation_value(rai, normalized_simple_time); - gf_smil_anim_apply_accumulate(rai); - gf_smil_apply_additive(rai); -} - -static void gf_smil_anim_animate_with_fraction(SMIL_Timing_RTI *rti, Fixed normalized_simple_time) -{ - gf_smil_anim_animate(rti, rti->fraction); - rti->evaluate_status = SMIL_TIMING_EVAL_NONE; -} - -void gf_smil_anim_reset_variables(SMIL_Anim_RTI *rai) -{ - if (!rai) return; - /* we reset all the animation parameters to force computation of next interpolation value - when the animation restarts */ - rai->interpolated_value_changed = 0; - rai->previous_key_index = -1; - rai->previous_coef = -FIX_ONE; - rai->previous_iteration = -1; - rai->previous_keytime_index = 0; - rai->anim_done = 0; -} - -/* copy/paste of the animate function - TODO: check if computations of interpolation value can be avoided. -*/ -static void gf_smil_anim_freeze(SMIL_Timing_RTI *rti, Fixed normalized_simple_time) -{ - SMIL_Anim_RTI *rai = rti->rai; - SMILAnimationAttributesPointers *animp = rai->animp; - - if (!rai || !animp) return; - - if (rai->change_detection_mode) { - if (rai->anim_done == 0) - rai->interpolated_value_changed = 1; - else - rai->interpolated_value_changed = 0; - } else { - GF_LOG(GF_LOG_DEBUG, GF_LOG_SMIL, - ("[SMIL Animation] Time %f - Animation %s - applying freeze behavior\n", - gf_node_get_scene_time((GF_Node*)rai->anim_elt), gf_node_get_log_name((GF_Node *)rai->anim_elt))); - - gf_smil_anim_compute_interpolation_value(rai, normalized_simple_time); - gf_smil_anim_apply_accumulate(rai); - gf_smil_apply_additive(rai); - rai->anim_done = 1; - } -} - -static void gf_smil_anim_remove(SMIL_Timing_RTI *rti, Fixed normalized_simple_time) -{ - SMIL_Anim_RTI *rai = rti->rai; - if (!rai) return; - - if (rai->change_detection_mode) { - if (rai->anim_done == 0) - rai->interpolated_value_changed = 1; - else - rai->interpolated_value_changed = 0; - } else { - GF_LOG(GF_LOG_DEBUG, GF_LOG_SMIL, - ("[SMIL Animation] Time %f - Animation %s - applying remove behavior\n", - gf_node_get_scene_time((GF_Node*)rai->anim_elt), gf_node_get_log_name((GF_Node *)rai->anim_elt))); - - /* TODO: see if we can avoid this copy by switching pointers */ - gf_svg_attributes_copy(&rai->owner->presentation_value, &rai->owner->specified_value, 0); - /* TODO: check if we need to apply additive behavior even in fill='remove' - maybe (see animate-elem-211-t.svg) */ - - rai->anim_done = 1; - -#ifndef GPAC_DISABLE_LOG - if ((gf_log_get_level() >= GF_LOG_DEBUG) && (gf_log_get_tools() & GF_LOG_SMIL)) { - char *str; - gf_log_lt(GF_LOG_DEBUG, GF_LOG_SMIL); - str = gf_svg_dump_attribute((GF_Node*)rai->anim_elt, &rai->owner->presentation_value); - - gf_log("[SMIL Animation] Time %f - Animation %s - Presentation value changed for attribute %s, new value: %s\n", - gf_node_get_scene_time((GF_Node*)rai->anim_elt), gf_node_get_log_name((GF_Node*)rai->anim_elt), - gf_svg_get_attribute_name((GF_Node*)rai->anim_elt, rai->owner->presentation_value.fieldIndex), str); - if (str) gf_free(str); - } -#endif - - } -} - -static void gf_smil_anim_evaluate(SMIL_Timing_RTI *rti, Fixed normalized_simple_time, u32 state) -{ - SMIL_Anim_RTI *rai = rti->rai; - switch (state) { - case SMIL_TIMING_EVAL_REPEAT: - /* we are starting a new cycle of animation, therefore we need to reset the previous state variables - like previous_keytime_index ... */ - gf_smil_anim_reset_variables(rai); - case SMIL_TIMING_EVAL_UPDATE: - gf_smil_anim_animate(rti, normalized_simple_time); - break; - case SMIL_TIMING_EVAL_FREEZE: - gf_smil_anim_freeze(rti, normalized_simple_time); - break; - case SMIL_TIMING_EVAL_REMOVE: - gf_smil_anim_remove(rti, normalized_simple_time); - break; - case SMIL_TIMING_EVAL_FRACTION: - gf_smil_anim_animate_with_fraction(rti, normalized_simple_time); - break; -/* - discard should be done before in smil_notify_time - case SMIL_TIMING_EVAL_DISCARD: - break; -*/ - } -} -/************************************************************************************** - **************************************************************************************/ - -GF_EXPORT -void gf_svg_apply_animations(GF_Node *node, SVGPropertiesPointers *render_svg_props) -{ - u32 count_all, i; -#ifndef GPAC_DISABLE_LOG - u32 time=0; - u32 active_anim; - - if ((gf_log_get_level() >= GF_LOG_DEBUG) && (gf_log_get_tools() & GF_LOG_RTI)) { - time = gf_sys_clock(); - } -#endif - - /* Perform all the animations on this node */ - count_all = gf_node_animation_count(node); - for (i = 0; i < count_all; i++) { - GF_FieldInfo info; - s32 j; - u32 count; - SMIL_AttributeAnimations *aa; - - - aa = (SMIL_AttributeAnimations *)gf_node_animation_get(node, i); - count = gf_list_count(aa->anims); - if (!count) continue; - - aa->presentation_value_changed = 0; - - if (aa->is_property) { - /* Storing the pointer to the parent presentation value, - i.e. the presentation value produced at the parent level in the tree */ - aa->parent_presentation_value = aa->presentation_value; - aa->parent_presentation_value.far_ptr = - gf_svg_get_property_pointer((SVG_Element *)node, aa->orig_dom_ptr, render_svg_props); - - /* Storing also the pointer to the presentation value of the color property - (special handling of the keyword 'currentColor' if used in animation values) */ - gf_node_get_attribute_by_tag(node, TAG_SVG_ATT_color, 1, 1, &info); - aa->current_color_value.far_ptr = info.far_ptr; - } - - /* We start with the last animation (TODO in the execution order), then scan in the reverse order - up to the first animation which is not additive, to determine if the presentation value will change - We evaluate each animation, but only in the 'change_detection_mode' */ - for (j = count-1; j >= 0; j--) { - SMIL_Anim_RTI *rai = (SMIL_Anim_RTI *)gf_list_get(aa->anims, j); - SMIL_Timing_RTI *rti = rai->timingp->runtime; - - rai->interpolated_value_changed = 0; - - /* The evaluate_status has been updated when notifying the new scene time to this animation, - i.e. before the scene tree traversal */ - if (rti->evaluate_status) { - rai->change_detection_mode = 1; - rti->evaluate(rti, rti->normalized_simple_time, rti->evaluate_status); - aa->presentation_value_changed += rai->interpolated_value_changed; - if (!rai->animp->additive || *rai->animp->additive == SMIL_ADDITIVE_REPLACE) { - /* we don't need to check previous animations since this one will overwrite it */ - j--; - break; - } - } - } - - active_anim = 0; - if (aa->presentation_value_changed) { - /* If the result of all the combined animations will produce a different result compared to the previous frame, - we start in the forward order from the j were the previous step stopped (i.e. the first anim in replace mode) - and evaluate each animation, in the computation mode (change_detection_mode = 0)*/ - for (j++; j<(s32)count; j++) { - SMIL_Anim_RTI *rai = (SMIL_Anim_RTI *)gf_list_get(aa->anims, j); - SMIL_Timing_RTI *rti = rai->timingp->runtime; - - if (j == 0) rai->is_first_anim = 1; - else rai->is_first_anim = 0; - - if (rti->evaluate_status) { - rai->change_detection_mode = 0; - rti->evaluate(rti, rti->normalized_simple_time, rti->evaluate_status); - active_anim++; - } - } - } - -/* DEBUG: uncomment this line to remove animation effect, and keep animation computation */ -// gf_svg_attributes_copy(&aa->presentation_value, &aa->specified_value, 0); - -#ifndef GPAC_DISABLE_LOG - if (aa->presentation_value_changed) { - if ((gf_log_get_level() >= GF_LOG_DEBUG) && (gf_log_get_tools() & GF_LOG_SMIL)) { - char *str; - gf_log_lt(GF_LOG_DEBUG, GF_LOG_SMIL); - str = gf_svg_dump_attribute(node, &aa->presentation_value); - - gf_log("[SMIL Animation] Time %f - Element %s - Presentation value changed for attribute %s, new value: %s - dirty flags %x\n", - gf_node_get_scene_time(node), gf_node_get_log_name(node), - gf_svg_get_attribute_name(node, aa->presentation_value.fieldIndex), str, aa->dirty_flags); - - if (str) gf_free(str); - } - } -#endif - - /* we only set dirty flags when a real flag is set to avoid unnecessary computation - for example, it is not necessary to set it when the anim is an animateTransform - since there is no associated flag */ - if (aa->dirty_flags) { - if (aa->presentation_value_changed) { - gf_node_dirty_set(node, aa->dirty_flags, aa->dirty_parents); - } else { - /* WARNING - This does not work for use elements because apply_animations may be called several times */ - if (active_anim) gf_node_dirty_clear(node, aa->dirty_flags); - } - } - } - -#ifndef GPAC_DISABLE_LOG - if ((gf_log_get_level() >= GF_LOG_DEBUG) && (gf_log_get_tools() & GF_LOG_RTI)) { - time_spent_in_anim += gf_sys_clock() - time; - } -#endif -} - - - -void gf_smil_anim_init_runtime_info(GF_Node *e) -{ - u32 i; - GF_FieldInfo target_attribute; - SMIL_AttributeAnimations *aa = NULL; - SMIL_Anim_RTI *rai; - XLinkAttributesPointers *xlinkp = NULL; - SMILAnimationAttributesPointers *animp = NULL; - SMILTimingAttributesPointers *timingp = NULL; - GF_Node *target = NULL; - - if (!e) return; - - /* Filling animation structures to be independent of the SVG Element structure */ - animp = ((SVGTimedAnimBaseElement *)e)->animp; - timingp = ((SVGTimedAnimBaseElement *)e)->timingp; - xlinkp = ((SVGTimedAnimBaseElement *)e)->xlinkp; - - target = xlinkp->href->target; - - memset(&target_attribute, 0, sizeof(GF_FieldInfo)); - if (animp->attributeName && (animp->attributeName->name || animp->attributeName->tag)) { - /* Filling the target_attribute structure with info on the animated attribute (type, pointer to data, ...) - NOTE: in the mode Dynamic Allocation of Attributes, this means that the animated - attribute is created with a default value, if it was not specified on the target element */ - if (animp->attributeName->tag) { - gf_node_get_attribute_by_tag(target, animp->attributeName->tag, 1, 1, &target_attribute); - } else { - gf_node_get_field_by_name(target, animp->attributeName->name, &target_attribute); - } - } else { - /* All animation elements should have a target attribute except for animateMotion - cf http://www.w3.org/mid/u403c21ajf1sjqtk58g0g38eaep9f9g2ss@hive.bjoern.hoehrmann.de - "For animateMotion, the attributeName is implied and cannot be specified; - animateTransform requires specification of the attribute name and any attribute that is - a transform-like attribute can be a target, e.g. gradientTransform."*/ - - switch (e->sgprivate->tag) { - case TAG_SVG_animateMotion: - /* Explicit creation of the pseudo 'motionTransform' attribute since it cannot be specified */ - gf_node_get_attribute_by_tag(target, TAG_SVG_ATT_motionTransform, 1, 0, &target_attribute); - gf_mx2d_init(*(GF_Matrix2D *)target_attribute.far_ptr); - break; - default: - GF_LOG(GF_LOG_WARNING, GF_LOG_SMIL, - ("[SMIL Animation] Missing attributeName attribute on element %s\n", - gf_node_get_log_name((GF_Node*)e) )); - return; - } - } - - if (animp->attributeType && *animp->attributeType == SMIL_ATTRIBUTETYPE_CSS) { - /* see example animate-elem-219-t.svg from the SVG test suite, upper row */ - if (!gf_svg_is_property(target, &target_attribute)) { - GF_LOG(GF_LOG_WARNING, GF_LOG_SMIL, - ("[SMIL Animation] Using CSS attributeType for an animation on an attribute which is not a property %s\n", - gf_node_get_log_name((GF_Node*)e) )); - return; - } - } - - /* Creation and setup of the runtime structure for animation */ - GF_SAFEALLOC(rai, SMIL_Anim_RTI) - - rai->anim_elt = e; - rai->animp = animp; - rai->timingp = timingp; - rai->xlinkp = xlinkp; - - gf_mx2d_init(rai->identity); - rai->default_transform_value.far_ptr = &rai->identity; - rai->default_transform_value.fieldType = SVG_Transform_datatype; - - /* the interpolated value has the same type as the target attribute, - but we need to create a new pointer to hold its value */ - rai->interpolated_value = target_attribute; - rai->interpolated_value.far_ptr = gf_svg_create_attribute_value(target_attribute.fieldType); - - /* there has not been any interpolation yet, so the previous key index and interpolation coefficient - shall not be set*/ - gf_smil_anim_reset_variables(rai); - - rai->values_count = (animp->values ? gf_list_count(animp->values->values) : 0); - rai->key_times_count = (animp->keyTimes ? gf_list_count(*animp->keyTimes) : 0); - rai->key_points_count = (animp->keyPoints ? gf_list_count(*animp->keyPoints) : 0); - rai->key_splines_count = (animp->keySplines ? gf_list_count(*animp->keySplines) : 0); - - - if (!rai->values_count && /* 'values' attribute not specified */ - (!animp->to || animp->to->type == 0) && /* 'to' attribute not specified */ - (!animp->from || animp->from->type == 0) && /* 'from' attribute not specified */ - (animp->by && animp->by->type != 0)) { /* 'by' attribute specified */ - /* if this is a 'by' animation without from the animation is defined to be additive - see http://www.w3.org/TR/2005/REC-SMIL2-20051213/animation.html#AnimationNS-FromToBy - we override the additive attribute */ - if (!animp->additive) { - /* this case can only happen with dynamic allocation of attributes */ - GF_FieldInfo info; - gf_node_get_attribute_by_tag(e, TAG_SVG_ATT_additive, 1, 0, &info); - animp->additive = info.far_ptr; - } - if (*animp->additive == SMIL_ADDITIVE_REPLACE) { - GF_LOG(GF_LOG_WARNING, GF_LOG_SMIL, ("[SMIL Animation] Warning: by-animations cannot use additive=\"replace\"\n")); - } - *animp->additive = SMIL_ADDITIVE_SUM; - } - - /*TODO - http://www.w3.org/TR/2005/REC-SMIL2-20051213/animation.html#animationNS-ToAnimation - To animation defines its own kind of additive semantics, so the additive attribute is ignored. - */ - - /*TODO - http://www.w3.org/TR/2005/REC-SMIL2-20051213/animation.html#animationNS-ToAnimation - Because to animation is defined in terms of absolute values of the target attribute, - cumulative animation is not defined: - */ - - /* TODO - http://www.w3.org/TR/2005/REC-SMIL2-20051213/animation.html#animationNS-setElement - The set element is non-additive. The additive and accumulate attributes are not allowed, - and will be ignored if specified. - */ - - /* For animateMotion, we need to retrieve the value of the rotate attribute, retrieve the path either - from the 'path' attribute or from the 'mpath' element, and then initialize the path iterator*/ - if (e->sgprivate->tag == TAG_SVG_animateMotion) { - GF_Path *the_path = NULL; - GF_ChildNodeItem *child = NULL; - - GF_FieldInfo info; - if (gf_node_get_attribute_by_tag(e, TAG_SVG_ATT_rotate, 0, 0, &info) == GF_OK) { - rai->rotate = ((SVG_Rotate *)info.far_ptr)->type; - } else { - rai->rotate = SVG_NUMBER_VALUE; - } - if (gf_node_get_attribute_by_tag(e, TAG_SVG_ATT_path, 0, 0, &info) == GF_OK) { - the_path = ((SVG_PathData *)info.far_ptr); - } - child = ((SVG_Element *)e)->children; - - if ((!animp->to || animp->to->type == 0) && - (!animp->by || animp->by->type == 0) && - (!animp->values || animp->values->type == 0)) { -#if USE_GF_PATH - if (!gf_path_is_empty(the_path)) { - rai->path = the_path; - rai->path_iterator = gf_path_iterator_new(rai->path); - rai->length = gf_path_iterator_get_length(rai->path_iterator); - } -#else - rai->path = gf_path_new(); - if (gf_list_count(the_path->points)) { - gf_svg_path_build(rai->path, the_path->commands, the_path->points); - rai->path_iterator = gf_path_iterator_new(rai->path); - rai->length = gf_path_iterator_get_length(rai->path_iterator); - } -#endif - else { - while (child) { - GF_Node *used_path = NULL; - u32 child_tag = gf_node_get_tag(child->node); - if (child_tag == TAG_SVG_mpath) { - GF_FieldInfo info; - if (gf_node_get_attribute_by_tag(child->node, TAG_XLINK_ATT_href, 0, 0, &info) == GF_OK) { - XMLRI *iri = (XMLRI *)info.far_ptr; - if (iri->target) used_path = iri->target; - else if (iri->string) used_path = - (GF_Node *)gf_sg_find_node_by_name(gf_node_get_graph(child->node), iri->string); - if (used_path && gf_node_get_tag(used_path) == TAG_SVG_path) { - gf_node_get_attribute_by_tag(used_path, TAG_SVG_ATT_d, 1, 0, &info); -#if USE_GF_PATH - rai->path = (SVG_PathData *)info.far_ptr; -#else - gf_svg_path_build(rai->path, - ((SVG_PathData *)info.far_ptr)->commands, - ((SVG_PathData *)info.far_ptr)->points); -#endif - rai->path_iterator = gf_path_iterator_new(rai->path); - rai->length = gf_path_iterator_get_length(rai->path_iterator); - } - } - break; - } - child = child->next; - } - } - } - } - - /* for all animations, check if there is already one animation on this attribute, - if yes, get the list and append the new animation runtime info - if no, create a list and add the new animation runtime info. */ - for (i = 0; i < gf_node_animation_count(target); i++) { - aa = (SMIL_AttributeAnimations *)gf_node_animation_get(target, i); - if (aa->presentation_value.fieldIndex == target_attribute.fieldIndex) { - gf_list_add(aa->anims, rai); - break; - } - aa = NULL; - } - if (!aa) { - GF_SAFEALLOC(aa, SMIL_AttributeAnimations) - - /* We determine if the animated attribute is a property since this changes quite a lot the animation model */ - aa->is_property = gf_svg_is_property(target, &target_attribute); - aa->current_color_value.fieldType = SVG_Paint_datatype; - - /* We copy (one copy for all animations on the same attribute) the DOM specified - value before any animation starts (because the animation will override it), - we also save the initial memory address of the specified value (orig_dom_ptr) - for inheritance hack */ - aa->specified_value = target_attribute; - aa->orig_dom_ptr = aa->specified_value.far_ptr; - aa->specified_value.far_ptr = gf_svg_create_attribute_value(target_attribute.fieldType); - gf_svg_attributes_copy(&aa->specified_value, &target_attribute, 0); - - /* Now, the initial memory address of the specified value holds the presentation value, - and the presentation value is initialized */ - aa->presentation_value = target_attribute; - - aa->anims = gf_list_new(); - gf_list_add(aa->anims, rai); - gf_node_animation_add(target, aa); - - /* determine what the rendering will need to do when the animation runs */ - aa->dirty_flags = gf_svg_get_modification_flags((SVG_Element *)target, &target_attribute); - - /* If the animation will result in a change of geometry or of the display property, - this animation will require traversing the tree, we need to inform the parents of the target node */ - aa->dirty_parents = 0; - if (aa->dirty_flags & (GF_SG_SVG_GEOMETRY_DIRTY | GF_SG_SVG_DISPLAY_DIRTY)) aa->dirty_parents = 1; - } - - rai->owner = aa; - gf_smil_anim_get_last_specified_value(rai); - - /* for animation (unlike other timed elements like video), the evaluation (i.e. interpolation) cannot be done - during timing evaluation, because due to inheritance, interpolation can only be computed - during scene tree traversal, therefore we need to postpone evaluation of the timed element */ - timingp->runtime->postpone = 1; - - timingp->runtime->evaluate = gf_smil_anim_evaluate; -} - -void gf_smil_anim_delete_runtime_info(SMIL_Anim_RTI *rai) -{ - gf_svg_delete_attribute_value(rai->interpolated_value.fieldType, - rai->interpolated_value.far_ptr, - rai->anim_elt->sgprivate->scenegraph); - if (rai->path) { - gf_svg_delete_attribute_value(rai->last_specified_value.fieldType, - rai->last_specified_value.far_ptr, - rai->anim_elt->sgprivate->scenegraph); - } -#if USE_GF_PATH -#else - if (rai->path) gf_path_del(rai->path); -#endif - if (rai->path_iterator) gf_path_iterator_del(rai->path_iterator); - gf_free(rai); -} - -void gf_smil_anim_remove_from_target(GF_Node *anim, GF_Node *target) -{ - u32 i, j; - if (!target) return; - for (i = 0; i < gf_node_animation_count((GF_Node *)target); i ++) { - SMIL_Anim_RTI *rai; - SMIL_AttributeAnimations *aa = (SMIL_AttributeAnimations *)gf_node_animation_get((GF_Node *)target, i); - j=0; - while ((rai = (SMIL_Anim_RTI *)gf_list_enum(aa->anims, &j))) { - if ((GF_Node *)rai->anim_elt == anim) { - gf_list_rem(aa->anims, j-1); - gf_smil_anim_delete_runtime_info(rai); - break; - } - } - if (gf_list_count(aa->anims) == 0) { - gf_list_del(aa->anims); - gf_svg_delete_attribute_value(aa->specified_value.fieldType, - aa->specified_value.far_ptr, - target->sgprivate->scenegraph); - aa->presentation_value.far_ptr = aa->orig_dom_ptr; - gf_node_animation_rem((GF_Node *)target, i); - gf_free(aa); - } - } -} - -void gf_smil_anim_delete_animations(GF_Node *e) -{ - u32 i, j; - - for (i = 0; i < gf_node_animation_count(e); i ++) { - SMIL_Anim_RTI *rai; - SMIL_AttributeAnimations *aa = (SMIL_AttributeAnimations *)gf_node_animation_get(e, i); - gf_svg_delete_attribute_value(aa->specified_value.fieldType, - aa->specified_value.far_ptr, - e->sgprivate->scenegraph); - j=0; - while ((rai = (SMIL_Anim_RTI *)gf_list_enum(aa->anims, &j))) { - rai->xlinkp->href->target = NULL; - gf_smil_anim_delete_runtime_info(rai); - } - gf_list_del(aa->anims); - gf_free(aa); - } - gf_node_animation_del(e); -} - -void gf_smil_anim_init_discard(GF_Node *node) -{ - SVGAllAttributes all_atts; - XLinkAttributesPointers *xlinkp = NULL; - SVGTimedAnimBaseElement *e = (SVGTimedAnimBaseElement *)node; - gf_smil_timing_init_runtime_info(node); - - gf_svg_flatten_attributes((SVG_Element *)e, &all_atts); - GF_SAFEALLOC(e->xlinkp, XLinkAttributesPointers); - xlinkp = e->xlinkp; - xlinkp->href = all_atts.xlink_href; - xlinkp->type = all_atts.xlink_type; - - e->timingp->runtime->evaluate_status = SMIL_TIMING_EVAL_DISCARD; -} - -void gf_smil_anim_init_node(GF_Node *node) -{ - XLinkAttributesPointers *xlinkp = NULL; - SMILAnimationAttributesPointers *animp = NULL; - SVGAllAttributes all_atts; - SVGTimedAnimBaseElement *e = (SVGTimedAnimBaseElement *)node; - - gf_svg_flatten_attributes((SVG_Element *)e, &all_atts); - e->xlinkp = gf_malloc(sizeof(XLinkAttributesPointers)); - xlinkp = e->xlinkp; - xlinkp->href = all_atts.xlink_href; - xlinkp->type = all_atts.xlink_type; - - /*perform init of default values*/ - if (!xlinkp->href) { - GF_FieldInfo info; - gf_node_get_attribute_by_tag((GF_Node *)node, TAG_XLINK_ATT_href, 1, 0, &info); - xlinkp->href = info.far_ptr; - xlinkp->href->type = XMLRI_ELEMENTID; - xlinkp->href->target = gf_node_get_parent(node, 0); - } - if (xlinkp->href->type == XMLRI_STRING) { - if (!xlinkp->href->string) { - fprintf(stderr, "Error: IRI not initialized\n"); - return; - } else { - GF_Node *n; - - n = (GF_Node*)gf_sg_find_node_by_name(gf_node_get_graph(node), xlinkp->href->string); - if (n) { - xlinkp->href->type = XMLRI_ELEMENTID; - xlinkp->href->target = n; - gf_node_register_iri(node->sgprivate->scenegraph, xlinkp->href); - } else { - return; - } - } - } - if (!xlinkp->href->target) return; - - // We may not have an attribute name, when using an animateMotion element - if (node->sgprivate->tag != TAG_SVG_animateMotion && !all_atts.attributeName) return; - - if ( (all_atts.to && (all_atts.to->type==0)) - || (all_atts.from && (all_atts.from->type==0)) - || (all_atts.from && (all_atts.from->type==0)) - ) { - GF_FieldInfo info; - if (gf_node_get_attribute_by_name((GF_Node *)xlinkp->href->target, all_atts.attributeName->name, 0, 1, 1, &info)==GF_OK) { - u32 anim_value_type = info.fieldType; - u32 i; - for (i=0; i<3; i++) { - u32 tag = 0; - switch (i) { - case 0: tag=TAG_SVG_ATT_to; break; - case 1: tag=TAG_SVG_ATT_from; break; - case 2: tag=TAG_SVG_ATT_by; break; - } - if (gf_node_get_attribute_by_tag((GF_Node *)node, tag, 0, 0, &info)==GF_OK) { - SMIL_AnimateValue *attval = info.far_ptr; - if (attval->type==0) { - SVG_String *string = attval->value; - attval->value = NULL; - if (string) { - gf_svg_parse_attribute((GF_Node *)node, &info, * string, anim_value_type); - if (* string) gf_free(* string); - gf_free(string); - } - } - } - } - } - } - - e->animp = gf_malloc(sizeof(SMILAnimationAttributesPointers)); - animp = e->animp; - animp->accumulate = all_atts.accumulate; - animp->additive = all_atts.additive; - animp->attributeName = all_atts.attributeName; - animp->attributeType = all_atts.attributeType; - animp->by = all_atts.by; - animp->calcMode = all_atts.calcMode; - animp->from = all_atts.from; - animp->keySplines = all_atts.keySplines; - animp->keyTimes = all_atts.keyTimes; - animp->lsr_enabled = all_atts.lsr_enabled; - animp->to = all_atts.to; - animp->type = all_atts.transform_type; - animp->values = all_atts.values; - if (node->sgprivate->tag == TAG_SVG_animateMotion) { - e->animp->keyPoints = all_atts.keyPoints; - e->animp->origin = all_atts.origin; - e->animp->path = all_atts.path; - e->animp->rotate = all_atts.rotate; - } else { - e->animp->keyPoints = NULL; - e->animp->origin = NULL; - e->animp->path = NULL; - e->animp->rotate = NULL; - } - - - gf_smil_timing_init_runtime_info(node); - gf_smil_anim_init_runtime_info(node); - gf_smil_anim_set_anim_runtime_in_timing(node); -} - - - -#endif /*GPAC_DISABLE_SVG*/ +/* + * GPAC - Multimedia Framework C SDK + * + * Authors: Cyril Concolato - Jean Le Feuvre + * Copyright (c)2004-200X ENST - All rights reserved + * + * This file is part of GPAC / SVG Scene Graph sub-project + * + * GPAC is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * GPAC 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; see the file COPYING. If not, write to + * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + * + */ + +#include +#include + +#ifndef GPAC_DISABLE_LOG +u32 time_spent_in_anim = 0; +#endif + +#ifndef GPAC_DISABLE_SVG + + +/************************************************************************************** + * Each GF_Node holds the (SVG/SMIL) animation elements which target itself in a list * + * The following are the generic functions to manipulate this list: * + * - add a new animation to the list, * + * - get an animation from the list, * + * - remove an animation from the list, * + * - count the animations in the list, * + * - delete the list * + **************************************************************************************/ +GF_Err gf_node_animation_add(GF_Node *node, void *animation) +{ + if (!node || !animation) return GF_BAD_PARAM; + if (!node->sgprivate->interact) GF_SAFEALLOC(node->sgprivate->interact, struct _node_interactive_ext); + if (!node->sgprivate->interact->animations) node->sgprivate->interact->animations = gf_list_new(); + return gf_list_add(node->sgprivate->interact->animations, animation); +} + +GF_Err gf_node_animation_del(GF_Node *node) +{ + if (!node || !node->sgprivate->interact || !node->sgprivate->interact->animations) return GF_BAD_PARAM; + gf_list_del(node->sgprivate->interact->animations); + node->sgprivate->interact->animations = NULL; + return GF_OK; +} + +u32 gf_node_animation_count(GF_Node *node) +{ + if (!node || !node->sgprivate->interact|| !node->sgprivate->interact->animations) return 0; + return gf_list_count(node->sgprivate->interact->animations); +} + +void *gf_node_animation_get(GF_Node *node, u32 i) +{ + if (!node || !node->sgprivate->interact || !node->sgprivate->interact->animations) return 0; + return gf_list_get(node->sgprivate->interact->animations, i); +} + +GF_Err gf_node_animation_rem(GF_Node *node, u32 i) +{ + if (!node || !node->sgprivate->interact || !node->sgprivate->interact->animations) return GF_OK; + return gf_list_rem(node->sgprivate->interact->animations, i); +} +/************************************************************************************** + * End of Generic GF_Node animations list * + **************************************************************************************/ + + +/************************************************************************************** + * Helping functions for animation * + **************************************************************************************/ +/* Sets the pointer to the attribute value with the pointer + to the value which passed (if unspecified) */ +void gf_svg_attributes_resolve_unspecified(GF_FieldInfo *in, GF_FieldInfo *p, GF_FieldInfo *t) +{ + if (in->fieldType == 0) { + if (p->fieldType == SVG_Transform_datatype) { + /* if the input value is not specified, and the presentation value is of type Transform, + then we should use the default identity transform instead of the presentation value */ + *in = *t; + } else { + *in = *p; + } + } +} + +/* Replaces the pointer to the attribute value with the pointer + to the value which is inherited (if inherited) */ +void gf_svg_attributes_resolve_inherit(GF_FieldInfo *in, GF_FieldInfo *prop) +{ + if (gf_svg_is_inherit(in)) *in = *prop; +} + +/* Replaces the pointer to the attribute value with the pointer + to the value of the color attribute (if the current value is set to currentColor) */ +void gf_svg_attributes_resolve_currentColor(GF_FieldInfo *in, GF_FieldInfo *current_color) +{ + if ((in->fieldType == SVG_Paint_datatype) && gf_svg_is_current_color(in)) { + *in = *current_color; + } +} + +/************************************************************************************** + * The main function doing evaluation of the animation is: gf_smil_anim_evaluate * + * Depending on the timing status of the animation it calls: * + * - gf_smil_anim_animate * + * - gf_smil_anim_animate_with_fraction * + * - gf_smil_anim_freeze * + * - gf_smil_anim_remove * + * * + * The gf_smil_anim_animate consists in * + * - interpolating using gf_smil_anim_compute_interpolation_value * + * - accumulating using gf_smil_anim_apply_accumulate * + * - applying additive behavior * + * * + * Depending on the animation attributes, one of the following functions is called * + * by the function gf_smil_anim_compute_interpolation_value * + * - gf_smil_anim_set * + * - gf_smil_anim_animate_using_values * + * - gf_smil_anim_animate_from_to * + * - gf_smil_anim_animate_from_by * + * - gf_smil_anim_animate_using_path * + * * + * In most animation methods, the important step in the animation is to resolve * + * the inherit and currentColor values to perform further interpolation, i.e. calls: * + * gf_svg_attributes_resolve_currentColor(&info, &rai->owner->current_color_value); * + * gf_svg_attributes_resolve_inherit(&info, &rai->owner->parent_presentation_value); * + * * + **************************************************************************************/ +static void gf_smil_anim_set(SMIL_Anim_RTI *rai) +{ + GF_FieldInfo to_info; + SMILAnimationAttributesPointers *animp = rai->animp; + + if (!animp->to || !animp->to->type) { + GF_LOG(GF_LOG_ERROR, GF_LOG_SMIL, + ("[SMIL Animation] Animation %s - set element without to attribute\n", + gf_node_get_log_name((GF_Node *)rai->anim_elt))); + return; + } + + if (rai->change_detection_mode) { + /* if the set has been applied, unless next animations are additive we don't need + to apply it again */ + if (rai->previous_coef > 0) rai->interpolated_value_changed = 0; + else rai->interpolated_value_changed = 1; + return; + } else { + GF_LOG(GF_LOG_DEBUG, GF_LOG_SMIL, + ("[SMIL Animation] Time %f - Animation %s - applying set animation\n", + gf_node_get_scene_time((GF_Node*)rai->anim_elt), + gf_node_get_log_name((GF_Node *)rai->anim_elt))); + + to_info.fieldType = animp->to->type; + to_info.far_ptr = animp->to->value; + /* we do not need to resolve currentColor values or inherit values here, + because no further interpolation is required for the animation and + because inheritance is applied after animations in the compositor. */ + + gf_svg_attributes_copy(&rai->interpolated_value, &to_info, 0); + rai->previous_coef = FIX_ONE; + } +} + +static void gf_smil_anim_use_keypoints_keytimes(SMIL_Anim_RTI *rai, Fixed normalized_simple_time, + Fixed *interpolation_coefficient, u32 *keyValueIndex) +{ + SMILAnimationAttributesPointers *animp = rai->animp; + u32 keyTimeIndex = 0; + Fixed interval_duration; + + *interpolation_coefficient = normalized_simple_time; + + /* Computing new interpolation coefficient */ + if (rai->key_times_count) { + Fixed keyTimeBefore = 0, keyTimeAfter=0; + for (keyTimeIndex = rai->previous_keytime_index; keyTimeIndex< rai->key_times_count; keyTimeIndex++) { + Fixed *tm1, *t = (Fixed *)gf_list_get(*animp->keyTimes, keyTimeIndex); + if (normalized_simple_time < *t) { + rai->previous_keytime_index = keyTimeIndex; + tm1 = (Fixed *) gf_list_get(*animp->keyTimes, keyTimeIndex-1); + if (tm1) keyTimeBefore = *tm1; + else keyTimeBefore = 0; + keyTimeAfter = *t; + break; + } + } + keyTimeIndex--; + interval_duration = keyTimeAfter - keyTimeBefore; + if (keyValueIndex) *keyValueIndex = keyTimeIndex; + if (interval_duration) + *interpolation_coefficient = gf_divfix(normalized_simple_time - keyTimeBefore, interval_duration); + else + *interpolation_coefficient = FIX_ONE; + if (!rai->change_detection_mode) + GF_LOG(GF_LOG_DEBUG, GF_LOG_SMIL, + ("[SMIL Animation] Time %f - Animation %s - Using Key Times: index %d, interval duration %.2f, coeff: %.2f\n", + gf_node_get_scene_time((GF_Node*)rai->anim_elt), + gf_node_get_log_name((GF_Node *)rai->anim_elt), + keyTimeIndex, + interval_duration, + interpolation_coefficient)); + } + + if (rai->anim_elt->sgprivate->tag == TAG_SVG_animateMotion && rai->key_points_count) { + Fixed *p1, *p2; + p1 = (Fixed *)gf_list_get(*animp->keyPoints, keyTimeIndex); + if (animp->calcMode && *animp->calcMode == SMIL_CALCMODE_DISCRETE) { + *interpolation_coefficient = *p1; + } else { + p2 = (Fixed *)gf_list_get(*animp->keyPoints, keyTimeIndex+1); + *interpolation_coefficient = gf_mulfix(FIX_ONE - *interpolation_coefficient, *p1) + + gf_mulfix(*interpolation_coefficient, (p2 ? *p2 : *p1)); + } + if (keyValueIndex) *keyValueIndex = 0; + if (!rai->change_detection_mode) + GF_LOG(GF_LOG_DEBUG, GF_LOG_SMIL, + ("[SMIL Animation] Time %f - Animation %s - Using Key Points: key Point Index %d, coeff: %.2f\n", + gf_node_get_scene_time((GF_Node*)rai->anim_elt), gf_node_get_log_name((GF_Node *)rai->anim_elt), keyTimeIndex, *interpolation_coefficient)); + } +} + +static void gf_smil_anim_animate_using_values(SMIL_Anim_RTI *rai, Fixed normalized_simple_time) +{ + SMILAnimationAttributesPointers *animp = rai->animp; + GF_List *values = NULL; + GF_FieldInfo value_info, value_info_next; + u32 keyValueIndex; + Fixed interpolation_coefficient; + u32 real_calcMode; + + values = animp->values->values; + + memset(&value_info, 0, sizeof(GF_FieldInfo)); + value_info.fieldType = animp->values->type; + value_info_next = value_info; + + real_calcMode = (gf_svg_attribute_is_interpolatable(animp->values->type)? + (animp->calcMode ? *animp->calcMode : SMIL_CALCMODE_LINEAR): + SMIL_CALCMODE_DISCRETE + ); + + if (rai->values_count == 1) { + if (rai->change_detection_mode) { + /* Since we have only 1 value, the previous key index should always be 0, + unless the animation has not started or is reset (-1) */ + if (rai->previous_key_index == 0) rai->interpolated_value_changed = 0; + else rai->interpolated_value_changed = 1; + return; + } else { + value_info.far_ptr = gf_list_get(values, 0); + /* no further interpolation needed + therefore no need to resolve inherit and currentColor */ + gf_svg_attributes_copy(&rai->interpolated_value, &value_info, 0); + rai->previous_key_index = 0; + GF_LOG(GF_LOG_DEBUG, GF_LOG_SMIL, + ("[SMIL Animation] Time %f - Animation %s - Using values[0] as interpolation value\n", + gf_node_get_scene_time((GF_Node*)rai->anim_elt), gf_node_get_log_name((GF_Node *)rai->anim_elt))); + return; + } + } + + /* Computing new key value index and interpolation coefficient */ + if (!rai->key_times_count) { + if (real_calcMode == SMIL_CALCMODE_DISCRETE) { + if (normalized_simple_time == FIX_ONE) { + keyValueIndex = rai->values_count-1; + interpolation_coefficient = FIX_ONE; + } else { + Fixed tmp = normalized_simple_time*rai->values_count; + Fixed tmp_floor = gf_floor(tmp); + if ((tmp - tmp_floor) == 0 && tmp) { + keyValueIndex = FIX2INT(tmp_floor) - 1; + } else { + keyValueIndex = FIX2INT(tmp_floor); + } + interpolation_coefficient = tmp - INT2FIX(keyValueIndex); + } + } else { + Fixed tmp = normalized_simple_time*(rai->values_count-1); + if (normalized_simple_time == FIX_ONE) { + keyValueIndex = rai->values_count-2; + } else { + keyValueIndex = FIX2INT(gf_floor(tmp)); + } + interpolation_coefficient = tmp - INT2FIX(keyValueIndex); + } + //GF_LOG(GF_LOG_DEBUG, GF_LOG_SMIL, ("[SMIL Animation] Time %f - Animation %s - No KeyTimes: key index %d, coeff: %.2f\n", gf_node_get_scene_time((GF_Node*)rai->anim_elt), gf_node_get_log_name((GF_Node *)rai->anim_elt), keyValueIndex, FIX2FLT(interpolation_coefficient))); + } else { + gf_smil_anim_use_keypoints_keytimes(rai, normalized_simple_time, &interpolation_coefficient, &keyValueIndex); + } + + if (rai->change_detection_mode) { + if (real_calcMode == SMIL_CALCMODE_DISCRETE && rai->previous_key_index == (s32)keyValueIndex && rai->previous_coef != -FIX_ONE) { + rai->interpolated_value_changed = 0; + } else if (rai->previous_key_index == (s32)keyValueIndex && rai->previous_coef == interpolation_coefficient) + rai->interpolated_value_changed = 0; + else + rai->interpolated_value_changed = 1; + } else { + rai->previous_key_index = keyValueIndex; + rai->previous_coef = interpolation_coefficient; + + switch (real_calcMode) { + case SMIL_CALCMODE_DISCRETE: + GF_LOG(GF_LOG_DEBUG, GF_LOG_SMIL, + ("[SMIL Animation] Time %f - Animation %s - applying discrete animation using values (key value index: %d)\n", + gf_node_get_scene_time((GF_Node*)rai->anim_elt), gf_node_get_log_name((GF_Node *)rai->anim_elt), keyValueIndex)); + value_info.far_ptr = gf_list_get(values, keyValueIndex); + /* no further interpolation needed + therefore no need to resolve inherit and currentColor */ + gf_svg_attributes_copy(&rai->interpolated_value, &value_info, 0); + break; + case SMIL_CALCMODE_PACED: + /* TODO: at the moment assume it is linear */ + case SMIL_CALCMODE_SPLINE: + /* TODO: at the moment assume it is linear */ + case SMIL_CALCMODE_LINEAR: + if (keyValueIndex == rai->values_count - 1) { + GF_LOG(GF_LOG_DEBUG, GF_LOG_SMIL, + ("[SMIL Animation] Time %f - Animation %s - applying linear animation using values (setting last key value: %d)\n", + gf_node_get_scene_time((GF_Node*)rai->anim_elt), gf_node_get_log_name((GF_Node *)rai->anim_elt), keyValueIndex)); + value_info.far_ptr = gf_list_get(values, rai->values_count - 1); + /* no further interpolation needed + therefore no need to resolve inherit and currentColor */ + gf_svg_attributes_copy(&rai->interpolated_value, &value_info, 0); + } else { + + GF_LOG(GF_LOG_DEBUG, GF_LOG_SMIL, + ("[SMIL Animation] Time %f - Animation %s - applying linear animation using values (key value indices: %d, %d / coeff: %f)\n", + gf_node_get_scene_time((GF_Node*)rai->anim_elt), gf_node_get_log_name((GF_Node *)rai->anim_elt), keyValueIndex, keyValueIndex+1, interpolation_coefficient)); + value_info.far_ptr = gf_list_get(values, keyValueIndex); + if (rai->owner->is_property && gf_svg_attribute_is_interpolatable(animp->values->type)) { + gf_svg_attributes_resolve_currentColor(&value_info, &rai->owner->current_color_value); + gf_svg_attributes_resolve_inherit(&value_info, &rai->owner->parent_presentation_value); + } + + value_info_next.far_ptr = gf_list_get(values, keyValueIndex+1); + if (rai->owner->is_property && gf_svg_attribute_is_interpolatable(animp->values->type)) { + gf_svg_attributes_resolve_currentColor(&value_info_next, &rai->owner->current_color_value); + gf_svg_attributes_resolve_inherit(&value_info_next, &rai->owner->parent_presentation_value); + } + + gf_svg_attributes_interpolate(&value_info, + &value_info_next, + &rai->interpolated_value, + interpolation_coefficient, 1); + } + break; + } + } +} + +static void gf_smil_anim_animate_from_to(SMIL_Anim_RTI *rai, Fixed normalized_simple_time) +{ + GF_FieldInfo from_info, to_info; + SMILAnimationAttributesPointers *animp = rai->animp; + Fixed interpolation_coefficient; + s32 useFrom = (normalized_simple_time<=FIX_ONE/2); + u32 real_calcMode; + + real_calcMode = (animp->to && gf_svg_attribute_is_interpolatable(animp->to->type)? + (animp->calcMode ? *animp->calcMode : SMIL_CALCMODE_LINEAR): + SMIL_CALCMODE_DISCRETE + ); + + if (rai->change_detection_mode) { + if (rai->previous_coef == normalized_simple_time) + rai->interpolated_value_changed = 0; + else { + if (real_calcMode == SMIL_CALCMODE_DISCRETE && + useFrom == rai->previous_key_index) { + rai->interpolated_value_changed = 0; + } else { + rai->interpolated_value_changed = 1; + } + } + } else { + + if (animp->from) { + from_info.fieldType = animp->from->type; + from_info.far_ptr = animp->from->value; + } else { + from_info.fieldType = 0; + from_info.far_ptr = NULL; + } + + if (rai->is_first_anim) + gf_svg_attributes_resolve_unspecified(&from_info, + &rai->owner->specified_value, + &rai->default_transform_value); + else + gf_svg_attributes_resolve_unspecified(&from_info, + &rai->owner->presentation_value, + &rai->default_transform_value); + + if (rai->owner->is_property && gf_svg_attribute_is_interpolatable(from_info.fieldType)) { + gf_svg_attributes_resolve_currentColor(&from_info, &rai->owner->current_color_value); + gf_svg_attributes_resolve_inherit(&from_info, &rai->owner->parent_presentation_value); + } + if (animp->to) { + to_info.fieldType = animp->to->type; + to_info.far_ptr = animp->to->value; + } else { + to_info.fieldType = 0; + to_info.far_ptr = NULL; + } + + if (rai->is_first_anim) + gf_svg_attributes_resolve_unspecified(&to_info, + &rai->owner->specified_value, + &rai->default_transform_value); + else + gf_svg_attributes_resolve_unspecified(&to_info, + &rai->owner->presentation_value, + &rai->default_transform_value); + + if (rai->owner->is_property && gf_svg_attribute_is_interpolatable(to_info.fieldType)) { + gf_svg_attributes_resolve_currentColor(&to_info, &rai->owner->current_color_value); + gf_svg_attributes_resolve_inherit(&to_info, &rai->owner->parent_presentation_value); + } + + gf_smil_anim_use_keypoints_keytimes(rai, normalized_simple_time, &interpolation_coefficient, NULL); + + rai->previous_coef = interpolation_coefficient; + + switch (real_calcMode) { + case SMIL_CALCMODE_DISCRETE: + { + /* before half of the duration stay at 'from' and then switch to 'to' */ + GF_LOG(GF_LOG_DEBUG, GF_LOG_SMIL, + ("[SMIL Animation] Time %f - Animation %s - applying from-to animation (using %s value)\n", + gf_node_get_scene_time((GF_Node*)rai->anim_elt), gf_node_get_log_name((GF_Node *)rai->anim_elt), (useFrom?"from":"to"))); + gf_svg_attributes_copy(&rai->interpolated_value, (useFrom?&from_info:&to_info), 0); + rai->previous_key_index = useFrom; + } + break; + case SMIL_CALCMODE_SPLINE: + case SMIL_CALCMODE_PACED: + case SMIL_CALCMODE_LINEAR: + default: + GF_LOG(GF_LOG_DEBUG, GF_LOG_SMIL, + ("[SMIL Animation] Time %f - Animation %s - applying from-to animation (linear interpolation, using coefficient %f)\n", + gf_node_get_scene_time((GF_Node*)rai->anim_elt), gf_node_get_log_name((GF_Node *)rai->anim_elt), interpolation_coefficient)); + gf_svg_attributes_interpolate(&from_info, &to_info, &rai->interpolated_value, interpolation_coefficient, 1); + break; + } + } +} + +static void gf_smil_anim_animate_from_by(SMIL_Anim_RTI *rai, Fixed normalized_simple_time) +{ + Fixed from_coef; + GF_FieldInfo from_info, by_info; + SMILAnimationAttributesPointers *animp = rai->animp; + s32 useFrom = (normalized_simple_time<=FIX_ONE/2); + + if (rai->change_detection_mode) { + if (rai->previous_coef == normalized_simple_time) + rai->interpolated_value_changed = 0; + else { + if (animp->calcMode && + *animp->calcMode == SMIL_CALCMODE_DISCRETE && + useFrom == rai->previous_key_index) { + rai->interpolated_value_changed = 0; + } else { + rai->interpolated_value_changed = 1; + } + } + } else { + rai->previous_coef = normalized_simple_time; + + if (animp->from) { + from_info.fieldType = animp->from->type; + from_info.far_ptr = animp->from->value; + from_coef = FIX_ONE; + } else { + from_info.fieldType = 0; + from_info.far_ptr = NULL; + /* this is a by animation only, then, it is always additive, + we don't need the from value*/ + from_coef = 0; + } + + if (rai->is_first_anim) + gf_svg_attributes_resolve_unspecified(&from_info, + &rai->owner->specified_value, + &rai->default_transform_value); + else + gf_svg_attributes_resolve_unspecified(&from_info, + &rai->owner->presentation_value, + &rai->default_transform_value); + + if (rai->owner->is_property && gf_svg_attribute_is_interpolatable(from_info.fieldType)) { + gf_svg_attributes_resolve_currentColor(&from_info, &rai->owner->current_color_value); + gf_svg_attributes_resolve_inherit(&from_info, &rai->owner->parent_presentation_value); + } + + if (animp->by) { + by_info.fieldType = animp->by->type; + by_info.far_ptr = animp->by->value; + } else { + by_info.fieldType = 0; + by_info.far_ptr = NULL; + } + + if (rai->owner->is_property && gf_svg_attribute_is_interpolatable(from_info.fieldType)) { + gf_svg_attributes_resolve_currentColor(&by_info, &rai->owner->current_color_value); + gf_svg_attributes_resolve_inherit(&by_info, &rai->owner->parent_presentation_value); + } + + switch ((animp->calcMode ? *animp->calcMode : SMIL_CALCMODE_LINEAR)) { + case SMIL_CALCMODE_DISCRETE: + { + /* before half of the duration stay at 'from' and then switch to 'to' */ + if (useFrom) { + GF_LOG(GF_LOG_DEBUG, GF_LOG_SMIL, + ("[SMIL Animation] Time %f - Animation %s - applying from-by animation (setting from)", + gf_node_get_scene_time((GF_Node*)rai->anim_elt), gf_node_get_log_name((GF_Node *)rai->anim_elt))); + gf_svg_attributes_muladd(from_coef, &from_info, 0, &by_info, &rai->interpolated_value, 0); + } else { + GF_LOG(GF_LOG_DEBUG, GF_LOG_SMIL, + ("[SMIL Animation] Time %f - Animation %s - applying from-by animation (setting from+by)", + gf_node_get_scene_time((GF_Node*)rai->anim_elt), gf_node_get_log_name((GF_Node *)rai->anim_elt))); + gf_svg_attributes_muladd(from_coef, &from_info, FIX_ONE, &by_info, &rai->interpolated_value, 0); + } + rai->previous_key_index = useFrom; + } + break; + case SMIL_CALCMODE_SPLINE: + case SMIL_CALCMODE_PACED: + case SMIL_CALCMODE_LINEAR: + default: + GF_LOG(GF_LOG_DEBUG, GF_LOG_SMIL, + ("[SMIL Animation] Time %f - Animation %s - applying from-by animation (linear interpolation between from and from+by, coef: %f)\n", + gf_node_get_scene_time((GF_Node*)rai->anim_elt), gf_node_get_log_name((GF_Node *)rai->anim_elt), normalized_simple_time)); + gf_svg_attributes_muladd(from_coef, &from_info, normalized_simple_time, &by_info, &rai->interpolated_value, 0); + break; + } + } +} + +static void gf_svg_compute_path_anim(SMIL_Anim_RTI *rai, GF_Matrix2D *m, Fixed normalized_simple_time) +{ + Fixed offset; + offset = gf_mulfix(normalized_simple_time, rai->length); + gf_mx2d_init(*m); + + gf_path_iterator_get_transform(rai->path_iterator, offset, 1, m, 1, 0); + //GF_LOG(GF_LOG_DEBUG, GF_LOG_SMIL, ("offset: %f, position: (%f, %f)", offset, ((GF_Matrix2D *)rai->interpolated_value.far_ptr)->m[2], ((GF_Matrix2D *)rai->interpolated_value.far_ptr)->m[5])); + switch (rai->rotate) { + case SVG_NUMBER_AUTO: + break; + case SVG_NUMBER_AUTO_REVERSE: + gf_mx2d_add_rotation(m, m->m[2], m->m[5], GF_PI); + break; + default: + m->m[0] = FIX_ONE; + m->m[1] = 0; + m->m[3] = 0; + m->m[4] = FIX_ONE; + } +} + +static void gf_smil_anim_animate_using_path(SMIL_Anim_RTI *rai, Fixed normalized_simple_time) +{ + Fixed interpolation_coefficient; + + gf_smil_anim_use_keypoints_keytimes(rai, normalized_simple_time, &interpolation_coefficient, NULL); + + if (rai->change_detection_mode) { + if (rai->previous_coef == interpolation_coefficient) + rai->interpolated_value_changed = 0; + else { + rai->interpolated_value_changed = 1; + } + } else { + rai->previous_coef = interpolation_coefficient; + + GF_LOG(GF_LOG_DEBUG, GF_LOG_SMIL, + ("[SMIL Animation] Time %f - Animation %s - applying path animation (coef: %f)\n", + gf_node_get_scene_time((GF_Node*)rai->anim_elt), gf_node_get_log_name((GF_Node *)rai->anim_elt), normalized_simple_time)); + + gf_svg_compute_path_anim(rai, (GF_Matrix2D*)rai->interpolated_value.far_ptr, interpolation_coefficient); + } +} + +static void gf_smil_anim_compute_interpolation_value(SMIL_Anim_RTI *rai, Fixed normalized_simple_time) +{ + SMILAnimationAttributesPointers *animp = rai->animp; + + if (rai->path) { + gf_smil_anim_animate_using_path(rai, normalized_simple_time); + } else if (rai->anim_elt->sgprivate->tag == TAG_SVG_set) { + gf_smil_anim_set(rai); + } else if (rai->values_count) { + /* Ignore 'from'/'to'/'by'*/ + gf_smil_anim_animate_using_values(rai, normalized_simple_time); + } else if ((animp->by && animp->by->type) && (!animp->to || animp->to->type == 0)) { + /* 'to' is not specified but 'by' is, so this is a 'by' animation or a 'from'-'by' animation */ + gf_smil_anim_animate_from_by(rai, normalized_simple_time); + } else { + /* Ignore 'by' if specified */ + gf_smil_anim_animate_from_to(rai, normalized_simple_time); + } + +#ifndef GPAC_DISABLE_LOG + if (0 && (gf_log_get_level() >= GF_LOG_DEBUG) && (gf_log_get_tools() & GF_LOG_SMIL)) { + char *str; + gf_log_lt(GF_LOG_DEBUG, GF_LOG_SMIL); + str = gf_svg_dump_attribute(rai->anim_elt, &rai->interpolated_value); + + gf_log("[SMIL Animation] Time %f - Animation %s - Interpolation value changed for attribute %s, new value: %s \n", + gf_node_get_scene_time(rai->anim_elt), gf_node_get_log_name(rai->anim_elt), + gf_svg_get_attribute_name(rai->anim_elt, rai->owner->presentation_value.fieldIndex), str); + + if (str) gf_free(str); + } +#endif +} + +void gf_smil_anim_set_anim_runtime_in_timing(GF_Node *n) +{ + u32 i, j; + SVGTimedAnimBaseElement *timed_elt = NULL; + SMIL_Timing_RTI *rti = NULL; + GF_Node *target = NULL; + + if (!n) return; + timed_elt = (SVGTimedAnimBaseElement *)n; + + if (!gf_svg_is_animation_tag(n->sgprivate->tag)) return; + + target = timed_elt->xlinkp->href->target; + if (!target) return; + + if (timed_elt->timingp) rti = timed_elt->timingp->runtime; + if (!rti) return; + + rti->rai = NULL; + + for (i = 0; i < gf_node_animation_count(target); i++) { + SMIL_Anim_RTI *rai_tmp; + SMIL_AttributeAnimations *aa = (SMIL_AttributeAnimations *)gf_node_animation_get(target, i); + j=0; + while ((rai_tmp = (SMIL_Anim_RTI *)gf_list_enum(aa->anims, &j))) { + if (rai_tmp->timingp->runtime == rti) { + rti->rai = rai_tmp; + return; + } + } + } +} + +static void gf_smil_anim_get_last_specified_value(SMIL_Anim_RTI *rai) +{ + SMILAnimationAttributesPointers *animp = rai->animp; + + if (!animp) return; + + if (rai->path) { + if (!rai->last_specified_value.far_ptr) rai->last_specified_value.far_ptr = gf_malloc(sizeof(GF_Matrix2D)); + gf_svg_compute_path_anim(rai, rai->last_specified_value.far_ptr, FIX_ONE); + return; + } else if (rai->anim_elt->sgprivate->tag == TAG_SVG_set) { + if (animp->to) { + rai->last_specified_value.fieldType = animp->to->type; + rai->last_specified_value.far_ptr = animp->to->value; + } else { + /* TODO ??? */ + GF_LOG(GF_LOG_ERROR, GF_LOG_SMIL, + ("[SMIL Animation] Animation %s - set element without to attribute\n", + gf_node_get_log_name((GF_Node *)rai->anim_elt))); + } + return; + } + + if (rai->values_count) { + /* Ignore from/to/by*/ + rai->last_specified_value.fieldType = animp->values->type; + rai->last_specified_value.far_ptr = gf_list_last(animp->values->values); + } else if ((animp->by && animp->by->type) && (!animp->to || animp->to->type == 0)) { + rai->last_specified_value.fieldType = animp->by->type; + rai->last_specified_value.far_ptr = animp->by->value; + } else if (animp->to) { + rai->last_specified_value.fieldType = animp->to->type; + rai->last_specified_value.far_ptr = animp->to->value; + } + if (gf_svg_is_inherit(&rai->last_specified_value)) { + rai->last_specified_value.fieldType = rai->owner->presentation_value.fieldType; + rai->last_specified_value.far_ptr = rai->owner->presentation_value.far_ptr; + } + if (rai->owner->is_property && gf_svg_attribute_is_interpolatable(rai->last_specified_value.fieldType)) { + gf_svg_attributes_resolve_currentColor(&rai->last_specified_value, &rai->owner->current_color_value); + gf_svg_attributes_resolve_inherit(&rai->last_specified_value, &rai->owner->parent_presentation_value); + } +} + +/* if the animation behavior is accumulative and this is not the first iteration, + then we modify the interpolation value as follows: + interpolation value += last specified value * number of iterations completed */ +static void gf_smil_anim_apply_accumulate(SMIL_Anim_RTI *rai) +{ + u32 nb_iterations; + + SMILAnimationAttributesPointers *animp = rai->animp; + SMILTimingAttributesPointers *timingp = rai->timingp; + + nb_iterations = (timingp->runtime->current_interval ? timingp->runtime->current_interval->nb_iterations : 1); + + if (rai->change_detection_mode) { + if ((animp->accumulate && *animp->accumulate == SMIL_ACCUMULATE_SUM) + && nb_iterations > 0 + && rai->previous_iteration != (s32) nb_iterations) { + /* if we actually do accumulation and the number of iteration is different, + then we force the result as changed regardless of the result of the interpolation + (TODO: check if this need to be improved)*/ + rai->interpolated_value_changed = 1; + } else { + /* if we don't accumulate we leave the value of interpolated_value_changed unchanged */ + } + } else { + if (nb_iterations > 0 && rai->previous_iteration != (s32) nb_iterations) { + rai->previous_iteration = nb_iterations; + } + + if ((animp->accumulate && *animp->accumulate == SMIL_ACCUMULATE_SUM) && nb_iterations > 0) { + GF_LOG(GF_LOG_DEBUG, GF_LOG_SMIL, + ("[SMIL Animation] Time %f - Animation %s - applying accumulation (iteration #%d)\n", + gf_node_get_scene_time((GF_Node*)rai->anim_elt), gf_node_get_log_name((GF_Node *)rai->anim_elt), nb_iterations)); + + gf_svg_attributes_muladd(FIX_ONE, &rai->interpolated_value, + INT2FIX(nb_iterations), &rai->last_specified_value, + &rai->interpolated_value, 1); + + if ((animp->from) && animp->by && (rai->last_specified_value.far_ptr == animp->by->value)) { + /* this is a from-by animation, the last specified value is not the 'by' value but actually 'from'+'by', + we need to add nb_iterations times from to the interpolated_value + see (animate-elem-210-t.svg (upper two circles in the mid column, after 9s/14s */ + GF_FieldInfo from_info; + from_info.fieldType = rai->animp->from->type; + from_info.far_ptr = rai->animp->from->value; + gf_svg_attributes_muladd(FIX_ONE, &rai->interpolated_value, + INT2FIX(nb_iterations), &from_info, + &rai->interpolated_value, 1); + } + } + } +} + +static void gf_smil_apply_additive(SMIL_Anim_RTI *rai) +{ + SMILAnimationAttributesPointers *animp = rai->animp; + if (rai->change_detection_mode) return; + else { + /* Apply additive behavior if required + PV = (additive == sum ? PV + animp->IV : animp->IV); */ + if (animp->additive && *animp->additive == SMIL_ADDITIVE_SUM) { + GF_LOG(GF_LOG_DEBUG, GF_LOG_SMIL, + ("[SMIL Animation] Time %f - Animation %s - applying additive behavior\n", + gf_node_get_scene_time((GF_Node*)rai->anim_elt), gf_node_get_log_name((GF_Node *)rai->anim_elt))); + + gf_svg_attributes_add((rai->is_first_anim ? &rai->owner->specified_value : &rai->owner->presentation_value), + &rai->interpolated_value, + &rai->owner->presentation_value, + 1); + +#ifndef GPAC_DISABLE_LOG + if ((gf_log_get_level() >= GF_LOG_DEBUG) && (gf_log_get_tools() & GF_LOG_SMIL)) { + char *str; + gf_log_lt(GF_LOG_DEBUG, GF_LOG_SMIL); + str = gf_svg_dump_attribute((GF_Node*)rai->anim_elt, &rai->owner->presentation_value); + gf_log("[SMIL Animation] Time %f - Animation %s - Presentation value changed for attribute %s, new value: %s\n", + gf_node_get_scene_time((GF_Node*)rai->anim_elt), gf_node_get_log_name((GF_Node*)rai->anim_elt), + gf_svg_get_attribute_name((GF_Node*)rai->anim_elt, rai->owner->presentation_value.fieldIndex), str); + + if (str) gf_free(str); + } +#endif + + } else { + GF_LOG(GF_LOG_DEBUG, GF_LOG_SMIL, + ("[SMIL Animation] Time %f - Animation %s - applying non-additive behavior\n", + gf_node_get_scene_time((GF_Node*)rai->anim_elt), gf_node_get_log_name((GF_Node *)rai->anim_elt))); + + /* FIXME: if we switch pointers to avoid copying values, + we need to modify the address in the DOM node as well, + we also need to take care about change detections. Not easy!! + + void *tmp = rai->owner->presentation_value.far_ptr; + rai->owner->presentation_value.far_ptr = rai->interpolated_value.far_ptr; + rai->interpolated_value.far_ptr = tmp; + */ + + gf_svg_attributes_copy(&rai->owner->presentation_value, &rai->interpolated_value, 1); +#ifndef GPAC_DISABLE_LOG + if ((gf_log_get_level() >= GF_LOG_DEBUG) && (gf_log_get_tools() & GF_LOG_SMIL)) { + char *str; + gf_log_lt(GF_LOG_DEBUG, GF_LOG_SMIL); + str = gf_svg_dump_attribute((GF_Node*)rai->anim_elt, &rai->owner->presentation_value); + + gf_log("[SMIL Animation] Time %f - Animation %s - Presentation value changed for attribute %s, new value: %s\n", + gf_node_get_scene_time((GF_Node*)rai->anim_elt), gf_node_get_log_name((GF_Node*)rai->anim_elt), + gf_svg_get_attribute_name((GF_Node*)rai->anim_elt, rai->owner->presentation_value.fieldIndex), str); + + if (str) gf_free(str); + } +#endif + } + } +} + +static void gf_smil_anim_animate(SMIL_Timing_RTI *rti, Fixed normalized_simple_time) +{ + SMIL_Anim_RTI *rai = rti->rai; + SMILAnimationAttributesPointers *animp = rai->animp; + + if (!rai || !animp) return; + + gf_smil_anim_compute_interpolation_value(rai, normalized_simple_time); + gf_smil_anim_apply_accumulate(rai); + gf_smil_apply_additive(rai); +} + +static void gf_smil_anim_animate_with_fraction(SMIL_Timing_RTI *rti, Fixed normalized_simple_time) +{ + gf_smil_anim_animate(rti, rti->fraction); + rti->evaluate_status = SMIL_TIMING_EVAL_NONE; +} + +void gf_smil_anim_reset_variables(SMIL_Anim_RTI *rai) +{ + if (!rai) return; + /* we reset all the animation parameters to force computation of next interpolation value + when the animation restarts */ + rai->interpolated_value_changed = 0; + rai->previous_key_index = -1; + rai->previous_coef = -FIX_ONE; + rai->previous_iteration = -1; + rai->previous_keytime_index = 0; + rai->anim_done = 0; +} + +/* copy/paste of the animate function + TODO: check if computations of interpolation value can be avoided. +*/ +static void gf_smil_anim_freeze(SMIL_Timing_RTI *rti, Fixed normalized_simple_time) +{ + SMIL_Anim_RTI *rai = rti->rai; + SMILAnimationAttributesPointers *animp = rai->animp; + + if (!rai || !animp) return; + + if (rai->change_detection_mode) { + if (rai->anim_done == 0) + rai->interpolated_value_changed = 1; + else + rai->interpolated_value_changed = 0; + } else { + GF_LOG(GF_LOG_DEBUG, GF_LOG_SMIL, + ("[SMIL Animation] Time %f - Animation %s - applying freeze behavior\n", + gf_node_get_scene_time((GF_Node*)rai->anim_elt), gf_node_get_log_name((GF_Node *)rai->anim_elt))); + + gf_smil_anim_compute_interpolation_value(rai, normalized_simple_time); + gf_smil_anim_apply_accumulate(rai); + gf_smil_apply_additive(rai); + rai->anim_done = 1; + } +} + +static void gf_smil_anim_remove(SMIL_Timing_RTI *rti, Fixed normalized_simple_time) +{ + SMIL_Anim_RTI *rai = rti->rai; + if (!rai) return; + + if (rai->change_detection_mode) { + if (rai->anim_done == 0) + rai->interpolated_value_changed = 1; + else + rai->interpolated_value_changed = 0; + } else { + GF_LOG(GF_LOG_DEBUG, GF_LOG_SMIL, + ("[SMIL Animation] Time %f - Animation %s - applying remove behavior\n", + gf_node_get_scene_time((GF_Node*)rai->anim_elt), gf_node_get_log_name((GF_Node *)rai->anim_elt))); + + /* TODO: see if we can avoid this copy by switching pointers */ + gf_svg_attributes_copy(&rai->owner->presentation_value, &rai->owner->specified_value, 0); + /* TODO: check if we need to apply additive behavior even in fill='remove' + maybe (see animate-elem-211-t.svg) */ + + rai->anim_done = 1; + +#ifndef GPAC_DISABLE_LOG + if ((gf_log_get_level() >= GF_LOG_DEBUG) && (gf_log_get_tools() & GF_LOG_SMIL)) { + char *str; + gf_log_lt(GF_LOG_DEBUG, GF_LOG_SMIL); + str = gf_svg_dump_attribute((GF_Node*)rai->anim_elt, &rai->owner->presentation_value); + + gf_log("[SMIL Animation] Time %f - Animation %s - Presentation value changed for attribute %s, new value: %s\n", + gf_node_get_scene_time((GF_Node*)rai->anim_elt), gf_node_get_log_name((GF_Node*)rai->anim_elt), + gf_svg_get_attribute_name((GF_Node*)rai->anim_elt, rai->owner->presentation_value.fieldIndex), str); + if (str) gf_free(str); + } +#endif + + } +} + +static void gf_smil_anim_evaluate(SMIL_Timing_RTI *rti, Fixed normalized_simple_time, u32 state) +{ + SMIL_Anim_RTI *rai = rti->rai; + switch (state) { + case SMIL_TIMING_EVAL_REPEAT: + /* we are starting a new cycle of animation, therefore we need to reset the previous state variables + like previous_keytime_index ... */ + gf_smil_anim_reset_variables(rai); + case SMIL_TIMING_EVAL_UPDATE: + gf_smil_anim_animate(rti, normalized_simple_time); + break; + case SMIL_TIMING_EVAL_FREEZE: + gf_smil_anim_freeze(rti, normalized_simple_time); + break; + case SMIL_TIMING_EVAL_REMOVE: + gf_smil_anim_remove(rti, normalized_simple_time); + break; + case SMIL_TIMING_EVAL_FRACTION: + gf_smil_anim_animate_with_fraction(rti, normalized_simple_time); + break; +/* + discard should be done before in smil_notify_time + case SMIL_TIMING_EVAL_DISCARD: + break; +*/ + } +} +/************************************************************************************** + **************************************************************************************/ + +GF_EXPORT +void gf_svg_apply_animations(GF_Node *node, SVGPropertiesPointers *render_svg_props) +{ + u32 count_all, i; + u32 active_anim; +#ifndef GPAC_DISABLE_LOG + u32 time=0; + + if ((gf_log_get_level() >= GF_LOG_DEBUG) && (gf_log_get_tools() & GF_LOG_RTI)) { + time = gf_sys_clock(); + } +#endif + + /* Perform all the animations on this node */ + count_all = gf_node_animation_count(node); + for (i = 0; i < count_all; i++) { + GF_FieldInfo info; + s32 j; + u32 count; + SMIL_AttributeAnimations *aa; + + + aa = (SMIL_AttributeAnimations *)gf_node_animation_get(node, i); + count = gf_list_count(aa->anims); + if (!count) continue; + + aa->presentation_value_changed = 0; + + if (aa->is_property) { + /* Storing the pointer to the parent presentation value, + i.e. the presentation value produced at the parent level in the tree */ + aa->parent_presentation_value = aa->presentation_value; + aa->parent_presentation_value.far_ptr = + gf_svg_get_property_pointer((SVG_Element *)node, aa->orig_dom_ptr, render_svg_props); + + /* Storing also the pointer to the presentation value of the color property + (special handling of the keyword 'currentColor' if used in animation values) */ + gf_node_get_attribute_by_tag(node, TAG_SVG_ATT_color, 1, 1, &info); + aa->current_color_value.far_ptr = info.far_ptr; + } + + /* We start with the last animation (TODO in the execution order), then scan in the reverse order + up to the first animation which is not additive, to determine if the presentation value will change + We evaluate each animation, but only in the 'change_detection_mode' */ + for (j = count-1; j >= 0; j--) { + SMIL_Anim_RTI *rai = (SMIL_Anim_RTI *)gf_list_get(aa->anims, j); + SMIL_Timing_RTI *rti = rai->timingp->runtime; + + rai->interpolated_value_changed = 0; + + /* The evaluate_status has been updated when notifying the new scene time to this animation, + i.e. before the scene tree traversal */ + if (rti->evaluate_status) { + rai->change_detection_mode = 1; + rti->evaluate(rti, rti->normalized_simple_time, rti->evaluate_status); + aa->presentation_value_changed += rai->interpolated_value_changed; + if (!rai->animp->additive || *rai->animp->additive == SMIL_ADDITIVE_REPLACE) { + /* we don't need to check previous animations since this one will overwrite it */ + j--; + break; + } + } + } + + active_anim = 0; + if (aa->presentation_value_changed) { + /* If the result of all the combined animations will produce a different result compared to the previous frame, + we start in the forward order from the j were the previous step stopped (i.e. the first anim in replace mode) + and evaluate each animation, in the computation mode (change_detection_mode = 0)*/ + for (j++; j<(s32)count; j++) { + SMIL_Anim_RTI *rai = (SMIL_Anim_RTI *)gf_list_get(aa->anims, j); + SMIL_Timing_RTI *rti = rai->timingp->runtime; + + if (j == 0) rai->is_first_anim = 1; + else rai->is_first_anim = 0; + + if (rti->evaluate_status) { + rai->change_detection_mode = 0; + rti->evaluate(rti, rti->normalized_simple_time, rti->evaluate_status); + active_anim++; + } + } + } + +/* DEBUG: uncomment this line to remove animation effect, and keep animation computation */ +// gf_svg_attributes_copy(&aa->presentation_value, &aa->specified_value, 0); + +#ifndef GPAC_DISABLE_LOG + if (aa->presentation_value_changed) { + if ((gf_log_get_level() >= GF_LOG_DEBUG) && (gf_log_get_tools() & GF_LOG_SMIL)) { + char *str; + gf_log_lt(GF_LOG_DEBUG, GF_LOG_SMIL); + str = gf_svg_dump_attribute(node, &aa->presentation_value); + + gf_log("[SMIL Animation] Time %f - Element %s - Presentation value changed for attribute %s, new value: %s - dirty flags %x\n", + gf_node_get_scene_time(node), gf_node_get_log_name(node), + gf_svg_get_attribute_name(node, aa->presentation_value.fieldIndex), str, aa->dirty_flags); + + if (str) gf_free(str); + } + } +#endif + + /* we only set dirty flags when a real flag is set to avoid unnecessary computation + for example, it is not necessary to set it when the anim is an animateTransform + since there is no associated flag */ + if (aa->dirty_flags) { + if (aa->presentation_value_changed) { + gf_node_dirty_set(node, aa->dirty_flags, aa->dirty_parents); + } else { + /* WARNING - This does not work for use elements because apply_animations may be called several times */ + if (active_anim) gf_node_dirty_clear(node, aa->dirty_flags); + } + } + } + +#ifndef GPAC_DISABLE_LOG + if ((gf_log_get_level() >= GF_LOG_DEBUG) && (gf_log_get_tools() & GF_LOG_RTI)) { + time_spent_in_anim += gf_sys_clock() - time; + } +#endif +} + + +GF_Node *gf_smil_anim_get_target(GF_Node *e) +{ + XLinkAttributesPointers *xlinkp = NULL; + if (!gf_svg_is_animation_tag(e->sgprivate->tag)) return NULL; + xlinkp = ((SVGTimedAnimBaseElement *)e)->xlinkp; + return xlinkp->href->target; +} + +void gf_smil_anim_init_runtime_info(GF_Node *e) +{ + u32 i; + GF_FieldInfo target_attribute; + SMIL_AttributeAnimations *aa = NULL; + SMIL_Anim_RTI *rai; + XLinkAttributesPointers *xlinkp = NULL; + SMILAnimationAttributesPointers *animp = NULL; + SMILTimingAttributesPointers *timingp = NULL; + GF_Node *target = NULL; + + if (!e) return; + + /* Filling animation structures to be independent of the SVG Element structure */ + animp = ((SVGTimedAnimBaseElement *)e)->animp; + timingp = ((SVGTimedAnimBaseElement *)e)->timingp; + xlinkp = ((SVGTimedAnimBaseElement *)e)->xlinkp; + + target = xlinkp->href->target; + + memset(&target_attribute, 0, sizeof(GF_FieldInfo)); + if (animp->attributeName && (animp->attributeName->name || animp->attributeName->tag)) { + /* Filling the target_attribute structure with info on the animated attribute (type, pointer to data, ...) + NOTE: in the mode Dynamic Allocation of Attributes, this means that the animated + attribute is created with a default value, if it was not specified on the target element */ + if (animp->attributeName->tag) { + gf_node_get_attribute_by_tag(target, animp->attributeName->tag, 1, 1, &target_attribute); + } else { + gf_node_get_field_by_name(target, animp->attributeName->name, &target_attribute); + } + } else { + /* All animation elements should have a target attribute except for animateMotion + cf http://www.w3.org/mid/u403c21ajf1sjqtk58g0g38eaep9f9g2ss@hive.bjoern.hoehrmann.de + "For animateMotion, the attributeName is implied and cannot be specified; + animateTransform requires specification of the attribute name and any attribute that is + a transform-like attribute can be a target, e.g. gradientTransform."*/ + + switch (e->sgprivate->tag) { + case TAG_SVG_animateMotion: + /* Explicit creation of the pseudo 'motionTransform' attribute since it cannot be specified */ + gf_node_get_attribute_by_tag(target, TAG_SVG_ATT_motionTransform, 1, 0, &target_attribute); + gf_mx2d_init(*(GF_Matrix2D *)target_attribute.far_ptr); + break; + default: + GF_LOG(GF_LOG_WARNING, GF_LOG_SMIL, + ("[SMIL Animation] Missing attributeName attribute on element %s\n", + gf_node_get_log_name((GF_Node*)e) )); + return; + } + } + + if (animp->attributeType && *animp->attributeType == SMIL_ATTRIBUTETYPE_CSS) { + /* see example animate-elem-219-t.svg from the SVG test suite, upper row */ + if (!gf_svg_is_property(target, &target_attribute)) { + GF_LOG(GF_LOG_WARNING, GF_LOG_SMIL, + ("[SMIL Animation] Using CSS attributeType for an animation on an attribute which is not a property %s\n", + gf_node_get_log_name((GF_Node*)e) )); + return; + } + } + + /* Creation and setup of the runtime structure for animation */ + GF_SAFEALLOC(rai, SMIL_Anim_RTI) + + rai->anim_elt = e; + rai->animp = animp; + rai->timingp = timingp; + rai->xlinkp = xlinkp; + + gf_mx2d_init(rai->identity); + rai->default_transform_value.far_ptr = &rai->identity; + rai->default_transform_value.fieldType = SVG_Transform_datatype; + + /* the interpolated value has the same type as the target attribute, + but we need to create a new pointer to hold its value */ + rai->interpolated_value = target_attribute; + rai->interpolated_value.far_ptr = gf_svg_create_attribute_value(target_attribute.fieldType); + + /* there has not been any interpolation yet, so the previous key index and interpolation coefficient + shall not be set*/ + gf_smil_anim_reset_variables(rai); + + rai->values_count = (animp->values ? gf_list_count(animp->values->values) : 0); + rai->key_times_count = (animp->keyTimes ? gf_list_count(*animp->keyTimes) : 0); + rai->key_points_count = (animp->keyPoints ? gf_list_count(*animp->keyPoints) : 0); + rai->key_splines_count = (animp->keySplines ? gf_list_count(*animp->keySplines) : 0); + + + if (!rai->values_count && /* 'values' attribute not specified */ + (!animp->to || animp->to->type == 0) && /* 'to' attribute not specified */ + (!animp->from || animp->from->type == 0) && /* 'from' attribute not specified */ + (animp->by && animp->by->type != 0)) { /* 'by' attribute specified */ + /* if this is a 'by' animation without from the animation is defined to be additive + see http://www.w3.org/TR/2005/REC-SMIL2-20051213/animation.html#AnimationNS-FromToBy + we override the additive attribute */ + if (!animp->additive) { + /* this case can only happen with dynamic allocation of attributes */ + GF_FieldInfo info; + gf_node_get_attribute_by_tag(e, TAG_SVG_ATT_additive, 1, 0, &info); + animp->additive = info.far_ptr; + } + if (*animp->additive == SMIL_ADDITIVE_REPLACE) { + GF_LOG(GF_LOG_WARNING, GF_LOG_SMIL, ("[SMIL Animation] Warning: by-animations cannot use additive=\"replace\"\n")); + } + *animp->additive = SMIL_ADDITIVE_SUM; + } + + /*TODO + http://www.w3.org/TR/2005/REC-SMIL2-20051213/animation.html#animationNS-ToAnimation + To animation defines its own kind of additive semantics, so the additive attribute is ignored. + */ + + /*TODO + http://www.w3.org/TR/2005/REC-SMIL2-20051213/animation.html#animationNS-ToAnimation + Because to animation is defined in terms of absolute values of the target attribute, + cumulative animation is not defined: + */ + + /* TODO + http://www.w3.org/TR/2005/REC-SMIL2-20051213/animation.html#animationNS-setElement + The set element is non-additive. The additive and accumulate attributes are not allowed, + and will be ignored if specified. + */ + + /* For animateMotion, we need to retrieve the value of the rotate attribute, retrieve the path either + from the 'path' attribute or from the 'mpath' element, and then initialize the path iterator*/ + if (e->sgprivate->tag == TAG_SVG_animateMotion) { + GF_Path *the_path = NULL; + GF_ChildNodeItem *child = NULL; + + GF_FieldInfo info; + if (gf_node_get_attribute_by_tag(e, TAG_SVG_ATT_rotate, 0, 0, &info) == GF_OK) { + rai->rotate = ((SVG_Rotate *)info.far_ptr)->type; + } else { + rai->rotate = SVG_NUMBER_VALUE; + } + if (gf_node_get_attribute_by_tag(e, TAG_SVG_ATT_path, 0, 0, &info) == GF_OK) { + the_path = ((SVG_PathData *)info.far_ptr); + } + child = ((SVG_Element *)e)->children; + + if ((!animp->to || animp->to->type == 0) && + (!animp->by || animp->by->type == 0) && + (!animp->values || animp->values->type == 0)) { +#if USE_GF_PATH + if (!gf_path_is_empty(the_path)) { + rai->path = the_path; + rai->path_iterator = gf_path_iterator_new(rai->path); + rai->length = gf_path_iterator_get_length(rai->path_iterator); + } +#else + rai->path = gf_path_new(); + if (gf_list_count(the_path->points)) { + gf_svg_path_build(rai->path, the_path->commands, the_path->points); + rai->path_iterator = gf_path_iterator_new(rai->path); + rai->length = gf_path_iterator_get_length(rai->path_iterator); + } +#endif + else { + while (child) { + GF_Node *used_path = NULL; + u32 child_tag = gf_node_get_tag(child->node); + if (child_tag == TAG_SVG_mpath) { + GF_FieldInfo info; + if (gf_node_get_attribute_by_tag(child->node, TAG_XLINK_ATT_href, 0, 0, &info) == GF_OK) { + XMLRI *iri = (XMLRI *)info.far_ptr; + if (iri->target) used_path = iri->target; + else if (iri->string) used_path = + (GF_Node *)gf_sg_find_node_by_name(gf_node_get_graph(child->node), iri->string); + if (used_path && gf_node_get_tag(used_path) == TAG_SVG_path) { + gf_node_get_attribute_by_tag(used_path, TAG_SVG_ATT_d, 1, 0, &info); +#if USE_GF_PATH + rai->path = (SVG_PathData *)info.far_ptr; +#else + gf_svg_path_build(rai->path, + ((SVG_PathData *)info.far_ptr)->commands, + ((SVG_PathData *)info.far_ptr)->points); +#endif + rai->path_iterator = gf_path_iterator_new(rai->path); + rai->length = gf_path_iterator_get_length(rai->path_iterator); + } + } + break; + } + child = child->next; + } + } + } + } + + /* for all animations, check if there is already one animation on this attribute, + if yes, get the list and append the new animation runtime info + if no, create a list and add the new animation runtime info. */ + for (i = 0; i < gf_node_animation_count(target); i++) { + aa = (SMIL_AttributeAnimations *)gf_node_animation_get(target, i); + if (aa->presentation_value.fieldIndex == target_attribute.fieldIndex) { + gf_list_add(aa->anims, rai); + break; + } + aa = NULL; + } + if (!aa) { + GF_SAFEALLOC(aa, SMIL_AttributeAnimations) + + /* We determine if the animated attribute is a property since this changes quite a lot the animation model */ + aa->is_property = gf_svg_is_property(target, &target_attribute); + aa->current_color_value.fieldType = SVG_Paint_datatype; + + /* We copy (one copy for all animations on the same attribute) the DOM specified + value before any animation starts (because the animation will override it), + we also save the initial memory address of the specified value (orig_dom_ptr) + for inheritance hack */ + aa->specified_value = target_attribute; + aa->orig_dom_ptr = aa->specified_value.far_ptr; + aa->specified_value.far_ptr = gf_svg_create_attribute_value(target_attribute.fieldType); + gf_svg_attributes_copy(&aa->specified_value, &target_attribute, 0); + + /* Now, the initial memory address of the specified value holds the presentation value, + and the presentation value is initialized */ + aa->presentation_value = target_attribute; + + aa->anims = gf_list_new(); + gf_list_add(aa->anims, rai); + gf_node_animation_add(target, aa); + + /* determine what the rendering will need to do when the animation runs */ + aa->dirty_flags = gf_svg_get_modification_flags((SVG_Element *)target, &target_attribute); + + /* If the animation will result in a change of geometry or of the display property, + this animation will require traversing the tree, we need to inform the parents of the target node */ + aa->dirty_parents = 0; + if (aa->dirty_flags & (GF_SG_SVG_GEOMETRY_DIRTY | GF_SG_SVG_DISPLAY_DIRTY)) aa->dirty_parents = 1; + } + + rai->owner = aa; + gf_smil_anim_get_last_specified_value(rai); + + /* for animation (unlike other timed elements like video), the evaluation (i.e. interpolation) cannot be done + during timing evaluation, because due to inheritance, interpolation can only be computed + during scene tree traversal, therefore we need to postpone evaluation of the timed element */ + timingp->runtime->postpone = 1; + + timingp->runtime->evaluate = gf_smil_anim_evaluate; +} + +void gf_smil_anim_delete_runtime_info(SMIL_Anim_RTI *rai) +{ + gf_svg_delete_attribute_value(rai->interpolated_value.fieldType, + rai->interpolated_value.far_ptr, + rai->anim_elt->sgprivate->scenegraph); + if (rai->path) { + gf_svg_delete_attribute_value(rai->last_specified_value.fieldType, + rai->last_specified_value.far_ptr, + rai->anim_elt->sgprivate->scenegraph); + } +#if USE_GF_PATH +#else + if (rai->path) gf_path_del(rai->path); +#endif + if (rai->path_iterator) gf_path_iterator_del(rai->path_iterator); + gf_free(rai); +} + +void gf_smil_anim_remove_from_target(GF_Node *anim, GF_Node *target) +{ + u32 i, j; + if (!target) return; + for (i = 0; i < gf_node_animation_count((GF_Node *)target); i ++) { + SMIL_Anim_RTI *rai; + SMIL_AttributeAnimations *aa = (SMIL_AttributeAnimations *)gf_node_animation_get((GF_Node *)target, i); + j=0; + while ((rai = (SMIL_Anim_RTI *)gf_list_enum(aa->anims, &j))) { + if ((GF_Node *)rai->anim_elt == anim) { + gf_list_rem(aa->anims, j-1); + gf_smil_anim_delete_runtime_info(rai); + break; + } + } + if (gf_list_count(aa->anims) == 0) { + gf_list_del(aa->anims); + gf_svg_delete_attribute_value(aa->specified_value.fieldType, + aa->specified_value.far_ptr, + target->sgprivate->scenegraph); + aa->presentation_value.far_ptr = aa->orig_dom_ptr; + gf_node_animation_rem((GF_Node *)target, i); + gf_free(aa); + } + } +} + +void gf_smil_anim_delete_animations(GF_Node *e) +{ + u32 i, j; + + for (i = 0; i < gf_node_animation_count(e); i ++) { + SMIL_Anim_RTI *rai; + SMIL_AttributeAnimations *aa = (SMIL_AttributeAnimations *)gf_node_animation_get(e, i); + gf_svg_delete_attribute_value(aa->specified_value.fieldType, + aa->specified_value.far_ptr, + e->sgprivate->scenegraph); + j=0; + while ((rai = (SMIL_Anim_RTI *)gf_list_enum(aa->anims, &j))) { + rai->xlinkp->href->target = NULL; + gf_smil_anim_delete_runtime_info(rai); + } + gf_list_del(aa->anims); + gf_free(aa); + } + gf_node_animation_del(e); +} + +void gf_smil_anim_init_discard(GF_Node *node) +{ + SVGAllAttributes all_atts; + XLinkAttributesPointers *xlinkp = NULL; + SVGTimedAnimBaseElement *e = (SVGTimedAnimBaseElement *)node; + gf_smil_timing_init_runtime_info(node); + + gf_svg_flatten_attributes((SVG_Element *)e, &all_atts); + GF_SAFEALLOC(e->xlinkp, XLinkAttributesPointers); + xlinkp = e->xlinkp; + xlinkp->href = all_atts.xlink_href; + xlinkp->type = all_atts.xlink_type; + + e->timingp->runtime->evaluate_status = SMIL_TIMING_EVAL_DISCARD; +} + +void gf_smil_anim_init_node(GF_Node *node) +{ + XLinkAttributesPointers *xlinkp = NULL; + SMILAnimationAttributesPointers *animp = NULL; + SVGAllAttributes all_atts; + SVGTimedAnimBaseElement *e = (SVGTimedAnimBaseElement *)node; + + gf_svg_flatten_attributes((SVG_Element *)e, &all_atts); + e->xlinkp = gf_malloc(sizeof(XLinkAttributesPointers)); + xlinkp = e->xlinkp; + xlinkp->href = all_atts.xlink_href; + xlinkp->type = all_atts.xlink_type; + + /*perform init of default values*/ + if (!xlinkp->href) { + GF_FieldInfo info; + gf_node_get_attribute_by_tag((GF_Node *)node, TAG_XLINK_ATT_href, 1, 0, &info); + xlinkp->href = info.far_ptr; + xlinkp->href->type = XMLRI_ELEMENTID; + xlinkp->href->target = gf_node_get_parent(node, 0); + } + if (xlinkp->href->type == XMLRI_STRING) { + if (!xlinkp->href->string) { + fprintf(stderr, "Error: IRI not initialized\n"); + return; + } else { + GF_Node *n; + + n = (GF_Node*)gf_sg_find_node_by_name(gf_node_get_graph(node), xlinkp->href->string); + if (n) { + xlinkp->href->type = XMLRI_ELEMENTID; + xlinkp->href->target = n; + gf_node_register_iri(node->sgprivate->scenegraph, xlinkp->href); + } else { + return; + } + } + } + if (!xlinkp->href->target) return; + + // We may not have an attribute name, when using an animateMotion element + if (node->sgprivate->tag != TAG_SVG_animateMotion && !all_atts.attributeName) return; + + if ( (all_atts.to && (all_atts.to->type==0)) + || (all_atts.from && (all_atts.from->type==0)) + || (all_atts.from && (all_atts.from->type==0)) + ) { + GF_FieldInfo info; + if (gf_node_get_attribute_by_name((GF_Node *)xlinkp->href->target, all_atts.attributeName->name, 0, 1, 1, &info)==GF_OK) { + u32 anim_value_type = info.fieldType; + u32 i; + for (i=0; i<3; i++) { + u32 tag = 0; + switch (i) { + case 0: tag=TAG_SVG_ATT_to; break; + case 1: tag=TAG_SVG_ATT_from; break; + case 2: tag=TAG_SVG_ATT_by; break; + } + if (gf_node_get_attribute_by_tag((GF_Node *)node, tag, 0, 0, &info)==GF_OK) { + SMIL_AnimateValue *attval = info.far_ptr; + if (attval->type==0) { + SVG_String *string = attval->value; + attval->value = NULL; + if (string) { + gf_svg_parse_attribute((GF_Node *)node, &info, * string, anim_value_type); + if (* string) gf_free(* string); + gf_free(string); + } + } + } + } + } + } + + e->animp = gf_malloc(sizeof(SMILAnimationAttributesPointers)); + animp = e->animp; + animp->accumulate = all_atts.accumulate; + animp->additive = all_atts.additive; + animp->attributeName = all_atts.attributeName; + animp->attributeType = all_atts.attributeType; + animp->by = all_atts.by; + animp->calcMode = all_atts.calcMode; + animp->from = all_atts.from; + animp->keySplines = all_atts.keySplines; + animp->keyTimes = all_atts.keyTimes; + animp->lsr_enabled = all_atts.lsr_enabled; + animp->to = all_atts.to; + animp->type = all_atts.transform_type; + animp->values = all_atts.values; + if (node->sgprivate->tag == TAG_SVG_animateMotion) { + e->animp->keyPoints = all_atts.keyPoints; + e->animp->origin = all_atts.origin; + e->animp->path = all_atts.path; + e->animp->rotate = all_atts.rotate; + } else { + e->animp->keyPoints = NULL; + e->animp->origin = NULL; + e->animp->path = NULL; + e->animp->rotate = NULL; + } + + + gf_smil_timing_init_runtime_info(node); + gf_smil_anim_init_runtime_info(node); + gf_smil_anim_set_anim_runtime_in_timing(node); +} + + + +#endif /*GPAC_DISABLE_SVG*/ diff --git a/src/scenegraph/svg_attributes.c b/src/scenegraph/svg_attributes.c index 5cce30e..2f7eaa1 100644 --- a/src/scenegraph/svg_attributes.c +++ b/src/scenegraph/svg_attributes.c @@ -891,7 +891,7 @@ static GF_Err svg_parse_clock_value(char *d, Double *clock_value) u32 hours; u32 minutes; Float seconds; - if (sscanf(d, "%ud:%ud:%f", &hours, &minutes, &seconds) < 3) return GF_BAD_PARAM; + if (sscanf(d, "%u:%u:%f", &hours, &minutes, &seconds) < 3) return GF_BAD_PARAM; *clock_value = hours*3600 + minutes*60 + seconds; } else { /* Partial Clock value : mm:ss(.frac) */ @@ -960,29 +960,27 @@ static GF_Err smil_parse_time(GF_Node *elt, SMIL_Time *v, char *d) v->type = GF_SMIL_TIME_WALLCLOCK; tmp += 10; if ((tmp1 = strchr(tmp, 'T')) ) { - /* From tmp to wallStartTime, we parse a date - do not use %ud here, broken on Win32 (sscanf returns 1) - */ - sscanf(tmp, "%d-%d-%dT", &year, &month, &day); + /* From tmp to wallStartTime, we parse a date */ + sscanf(tmp, "%u-%u-%dT", &year, &month, &day); tmp1++; tmp = tmp1; } if ((tmp1 = strchr(tmp, ':')) ) { if ((tmp2 = strchr(tmp1, ':')) ) { /* HHMMSS */ - sscanf(tmp, "%ud:%ud:%f", &hours, &minutes, &seconds); + sscanf(tmp, "%u:%u:%f", &hours, &minutes, &seconds); } else { /* HHMM */ - sscanf(tmp, "%ud:%ud", &hours, &minutes); + sscanf(tmp, "%u:%u", &hours, &minutes); } } if (strchr(tmp, 'Z')) { return GF_OK; } else { if ( (tmp1 = strchr(tmp, '+')) ) { - sscanf(tmp1, "%ud:%ud", &nhours, &nminutes); + sscanf(tmp1, "%u:%u", &nhours, &nminutes); } else if ( (tmp1 = strchr(tmp, '-')) ) { - sscanf(tmp1, "%ud:%ud", &nhours, &nminutes); + sscanf(tmp1, "%u:%u", &nhours, &nminutes); } } return GF_OK; diff --git a/src/scenegraph/svg_smjs.c b/src/scenegraph/svg_smjs.c index c66adef..c0b6b56 100644 --- a/src/scenegraph/svg_smjs.c +++ b/src/scenegraph/svg_smjs.c @@ -42,7 +42,7 @@ #define JSVAL_CHECK_STRING(_v) (JSVAL_IS_STRING(_v) || JSVAL_IS_NULL(_v)) -static Bool svg_script_execute_handler(GF_Node *node, GF_DOM_Event *event, GF_Node *observer); +static Bool svg_script_execute_handler(GF_Node *node, GF_DOM_Event *event, GF_Node *observer, char *utf8_script); jsval dom_element_construct(JSContext *c, GF_Node *n); @@ -1360,6 +1360,33 @@ JSBool SMJS_FUNCTION(svg_udom_create_color) return JS_TRUE; } + +JSBool SMJS_FUNCTION(svg_path_get_total_length) +{ + Double length = 0; + GF_FieldInfo info; + SMJS_OBJ + + GF_Node *n = (GF_Node *)dom_get_element(c, obj); + if (!n) return JS_TRUE; + if (n->sgprivate->tag != TAG_SVG_path) return JS_TRUE; + + gf_node_get_field_by_name(n, "d", &info); + if (info.fieldType == SVG_PathData_datatype) { +#if USE_GF_PATH + GF_Path *p = (GF_Path *)info.far_ptr; + GF_PathIterator *path_it = gf_path_iterator_new(p); + if (path_it) { + Fixed len = gf_path_iterator_get_length(path_it); + length = FIX2FLT(len); + gf_path_iterator_del(path_it); + } +#endif + } + SMJS_SET_RVAL( JS_MAKE_DOUBLE(c, length ) ); + return JS_TRUE; +} + JSBool SMJS_FUNCTION(svg_udom_move_focus) { GF_JSAPIParam par; @@ -1424,7 +1451,7 @@ static JSBool SMJS_FUNCTION(svg_connection_create) return JS_TRUE; } -#ifdef UNUSED_FUNC +#ifdef GPAC_UNUSED_FUNC /** * FIXME : those 5 funcs and two variables are not used anywhere... */ @@ -1462,7 +1489,7 @@ static JSFunctionSpec connectionFuncs[] = { {"close", svg_connection_close, 0, 0, 0}, {0, 0, 0, 0, 0} }; -#endif /* UNUSED_FUNC */ +#endif /*GPAC_UNUSED_FUNC*/ static void baseCI_finalize(JSContext *c, JSObject *obj) { @@ -1617,7 +1644,7 @@ static JSObject *svg_new_path_object(JSContext *c, SVG_PathData *d) #endif } -#ifdef UNUSED_FUNC +#ifdef GPAC_UNUSED_FUNC static JSBool pathCI_constructor(JSContext *c, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { pathCI *p; @@ -1626,7 +1653,7 @@ static JSBool pathCI_constructor(JSContext *c, JSObject *obj, uintN argc, jsval *rval = OBJECT_TO_JSVAL(obj); return JS_TRUE; } -#endif /* UNUSED_FUNC */ +#endif /*GPAC_UNUSED_FUNC*/ static void pathCI_finalize(JSContext *c, JSObject *obj) { @@ -2160,6 +2187,9 @@ static void svg_init_js_api(GF_SceneGraph *scene) SMJS_FUNCTION_SPEC("endElement", svg_udom_smil_end, 0), SMJS_FUNCTION_SPEC("pauseElement", svg_udom_smil_pause, 0), SMJS_FUNCTION_SPEC("resumeElement", svg_udom_smil_resume, 0), + + SMJS_FUNCTION_SPEC("getTotalLength", svg_path_get_total_length, 0), + SMJS_FUNCTION_SPEC(0, 0, 0) }; @@ -2545,7 +2575,7 @@ void dump_root(const char *name, void *rp, void *data) } #endif -static Bool svg_script_execute_handler(GF_Node *node, GF_DOM_Event *event, GF_Node *observer) +static Bool svg_script_execute_handler(GF_Node *node, GF_DOM_Event *event, GF_Node *observer, char *utf8_script) { GF_DOMText *txt = NULL; GF_SVGJS *svg_js; @@ -2555,19 +2585,27 @@ static Bool svg_script_execute_handler(GF_Node *node, GF_DOM_Event *event, GF_No GF_DOMHandler *hdl = (GF_DOMHandler *)node; jsval fval, rval; - if (!hdl->js_fun && !hdl->js_fun_val && !hdl->evt_listen_obj) { - txt = svg_get_text_child(node); - if (!txt) return 0; + /*LASeR hack for encoding scripts without handler - node is a listener in this case, not a handler*/ + if (utf8_script) { + if (!node) return 0; + hdl = NULL; + } else { + if (!hdl->js_fun && !hdl->js_fun_val && !hdl->evt_listen_obj) { + txt = svg_get_text_child(node); + if (!txt) return 0; + } + /*not sure about this (cf test struct-use-205-t.svg)*/ + if (!node->sgprivate->parents) return 0; } - /*not sure about this (cf test struct-use-205-t.svg)*/ - if (!node->sgprivate->parents) return 0; svg_js = node->sgprivate->scenegraph->svg_js; #ifndef GPAC_DISABLE_LOG if ((gf_log_get_level() >= (GF_LOG_DEBUG)) && (gf_log_get_tools() & (GF_LOG_SCRIPT))) { char *content, *_content = NULL; - if (hdl->js_fun_val) { + if (utf8_script) { + content = utf8_script; + } else if (hdl->js_fun_val) { JSString *s = JS_DecompileFunction(svg_js->js_ctx, JS_ValueToFunction(svg_js->js_ctx, (jsval) hdl->js_fun_val), 0); content = _content = SMJS_CHARS_FROM_STRING(svg_js->js_ctx, s); } else if (hdl->js_fun) { @@ -2596,15 +2634,18 @@ static Bool svg_script_execute_handler(GF_Node *node, GF_DOM_Event *event, GF_No svg_js->in_script = 1; /*if an observer is being specified, use it*/ - if (hdl->evt_listen_obj) __this = hdl->evt_listen_obj; + if (hdl && hdl->evt_listen_obj) __this = hdl->evt_listen_obj; /*compile the jsfun if any - 'this' is the associated observer*/ else __this = observer ? JSVAL_TO_OBJECT( dom_element_construct(svg_js->js_ctx, observer) ) : svg_js->global; - if (txt && !hdl->js_fun) { + if (txt && hdl && !hdl->js_fun) { const char *argn = "evt"; hdl->js_fun = JS_CompileFunction(svg_js->js_ctx, __this, NULL, 1, &argn, txt->textContent, strlen(txt->textContent), NULL, 0); } - if (hdl->js_fun || hdl->js_fun_val || hdl->evt_listen_obj) { + if (utf8_script) { + ret = JS_EvaluateScript(svg_js->js_ctx, __this, utf8_script, strlen(utf8_script), 0, 0, &rval); + } + else if (hdl->js_fun || hdl->js_fun_val || hdl->evt_listen_obj) { JSObject *evt; jsval argv[1]; evt = gf_dom_new_event(svg_js->js_ctx); @@ -2628,8 +2669,15 @@ static Bool svg_script_execute_handler(GF_Node *node, GF_DOM_Event *event, GF_No else { ret = JS_EvaluateScript(svg_js->js_ctx, __this, txt->textContent, strlen(txt->textContent), 0, 0, &rval); } + + /*check any pending exception if outer-most event*/ + if (!prev_event && JS_IsExceptionPending(svg_js->js_ctx)) { + JS_ReportPendingException(svg_js->js_ctx); + JS_ClearPendingException(svg_js->js_ctx); + } + JS_SetPrivate(svg_js->js_ctx, svg_js->event, prev_event); - if (txt ) hdl->js_fun=0; + if (txt && hdl) hdl->js_fun=0; while (svg_js->force_gc) { svg_js->force_gc = 0; @@ -2643,7 +2691,7 @@ static Bool svg_script_execute_handler(GF_Node *node, GF_DOM_Event *event, GF_No if ((event->type==GF_EVENT_CLICK) || (event->type==GF_EVENT_MOUSEOVER)) { NodeIDedItem *reg_node; fprintf(stdout, "Node registry\n"); - reg_node = hdl->sgprivate->scenegraph->id_node; + reg_node = node->sgprivate->scenegraph->id_node; while (reg_node) { fprintf(stdout, "\t%s\n", reg_node->NodeName); reg_node = reg_node->next; diff --git a/src/scenegraph/vrml_proto.c b/src/scenegraph/vrml_proto.c index 6253822..d9f0ed7 100644 --- a/src/scenegraph/vrml_proto.c +++ b/src/scenegraph/vrml_proto.c @@ -848,30 +848,24 @@ void gf_sg_proto_del_instance(GF_ProtoInstance *inst) gf_node_unregister(node, (GF_Node*) inst); gf_list_rem(inst->node_code, 0); } - gf_list_del(inst->node_code); + sg = inst->sgprivate->scenegraph; + + /*reset the scene graph before destroying the node code list, as unregistering nodes + not destroyed in the previous phase (eg, cyclic references such as script and co) will + refer to the node-code list*/ + gf_sg_reset(sg); + sg->pOwningProto = NULL; + + gf_free((char *) inst->proto_name); + gf_list_del(inst->node_code); assert(!gf_list_count(inst->scripts_to_load)); gf_list_del(inst->scripts_to_load); if (inst->proto_interface) gf_list_del_item(inst->proto_interface->instances, inst); - sg = inst->sgprivate->scenegraph; - - gf_free((char *) inst->proto_name); - - /*and finally destroy the node. If the proto is a hardcoded one (UserCallback set), destroy the node first - since the hardcoded proto may need the scene graph when being destroyed*/ - if (inst->sgprivate->UserCallback) { - gf_sg_reset(sg); - sg->pOwningProto = NULL; - gf_node_free((GF_Node *)inst); - gf_sg_del(sg); - } else { - gf_sg_reset(sg); - sg->pOwningProto = NULL; - gf_node_free((GF_Node *)inst); - gf_sg_del(sg); - } + gf_node_free((GF_Node *)inst); + gf_sg_del(sg); } /*Note on ISed fields: we cannot support fan-in on proto, eg we assume only one eventIn field can receive events diff --git a/src/scenegraph/vrml_smjs.c b/src/scenegraph/vrml_smjs.c index b99aeac..0c6d4a0 100644 --- a/src/scenegraph/vrml_smjs.c +++ b/src/scenegraph/vrml_smjs.c @@ -306,7 +306,7 @@ JSContext *gf_sg_ecmascript_new(GF_SceneGraph *sg) GF_SAFEALLOC(js_rt, GF_JSRuntime); js_rt->js_runtime = js_runtime; js_rt->mx = gf_mx_new("JavaScript"); - GF_LOG(GF_LOG_DEBUG, GF_LOG_SCRIPT, ("[ECMAScript] ECMAScript runtime allocated 0x%08x\n", js_runtime)); + GF_LOG(GF_LOG_DEBUG, GF_LOG_SCRIPT, ("[ECMAScript] ECMAScript runtime allocated %p\n", js_runtime)); gf_sg_load_script_modules(sg); } js_rt->nb_inst++; @@ -732,6 +732,12 @@ static void on_route_to_object(GF_Node *node, GF_Route *_r) if (JSVAL_IS_GCTHING(argv[0])) gf_js_remove_root(priv->js_ctx, &argv[0], GF_JSGC_VAL); if (JSVAL_IS_GCTHING(argv[1])) gf_js_remove_root(priv->js_ctx, &argv[1], GF_JSGC_VAL); + /*check any pending exception if outer-most event*/ + if ( (JS_IsRunning(priv->js_ctx)==JS_FALSE) && JS_IsExceptionPending(priv->js_ctx)) { + JS_ReportPendingException(priv->js_ctx); + JS_ClearPendingException(priv->js_ctx); + } + gf_sg_lock_javascript(priv->js_ctx, 0); #ifdef FORCE_GC @@ -1405,7 +1411,7 @@ static void node_finalize_ex(JSContext *c, JSObject *obj, Bool is_js_call) JS_ObjectDestroyed(c, obj, ptr, is_js_call); if (ptr) { - GF_Node *parent = (GF_Node *)JS_GetScript(ptr->js_ctx ? ptr->js_ctx : c); + JS_GetScript(ptr->js_ctx ? ptr->js_ctx : c); if (ptr->node /*num_instances may be 0 if the node is the script being destroyed*/ && ptr->node->sgprivate->num_instances @@ -3600,7 +3606,6 @@ static void gf_sg_script_update_cached_object(GF_ScriptPriv *priv, JSObject *obj { u32 i; jsval newVal; - GF_JSField *slot = NULL; JSString *s; /*we need to rebuild MF types where SF is a native type.*/ @@ -3809,7 +3814,7 @@ jsval gf_sg_script_to_smjs_field(GF_ScriptPriv *priv, GF_FieldInfo *field, GF_No && (jsf->field.far_ptr==field->far_ptr) #endif ) { - GF_LOG(GF_LOG_DEBUG, GF_LOG_SCRIPT, ("[VRML JS] found cached jsobj 0x%08x (field %s) in script %s bank (%d entries)\n", obj, field->name, gf_node_get_log_name((GF_Node*)JS_GetScript(priv->js_ctx)), gf_list_count(priv->js_cache) ) ); + GF_LOG(GF_LOG_DEBUG, GF_LOG_SCRIPT, ("[VRML JS] found cached jsobj %p (field %s) in script %s bank (%d entries)\n", obj, field->name, gf_node_get_log_name((GF_Node*)JS_GetScript(priv->js_ctx)), gf_list_count(priv->js_cache) ) ); if (!force_evaluate && !jsf->field.NDTtype) return OBJECT_TO_JSVAL(obj); gf_sg_script_update_cached_object(priv, obj, jsf, field, parent); @@ -4089,8 +4094,6 @@ jsval gf_sg_script_to_smjs_field(GF_ScriptPriv *priv, GF_FieldInfo *field, GF_No static void JS_ReleaseRootObjects(GF_ScriptPriv *priv) { - u32 i=0; - while (gf_list_count(priv->js_cache)) { GF_JSField *jsf; /*we don't walk through the list since unprotecting an element could trigger GC which in turn could modify this list content*/ @@ -4275,6 +4278,12 @@ static void JS_EventIn(GF_Node *node, GF_FieldInfo *in_field) if (JSVAL_IS_GCTHING(argv[0])) gf_js_remove_root(priv->js_ctx, &argv[0], GF_JSGC_VAL); if (JSVAL_IS_GCTHING(argv[1])) gf_js_remove_root(priv->js_ctx, &argv[1], GF_JSGC_VAL); + /*check any pending exception if outer-most event*/ + if ( (JS_IsRunning(priv->js_ctx)==JS_FALSE) && JS_IsExceptionPending(priv->js_ctx)) { + JS_ReportPendingException(priv->js_ctx); + JS_ClearPendingException(priv->js_ctx); + } + gf_sg_lock_javascript(priv->js_ctx, 0); gf_js_vrml_flush_event_out(node, priv); @@ -4528,7 +4537,7 @@ static void JSScript_NodeModified(GF_SceneGraph *sg, GF_Node *node, GF_FieldInfo if (gf_list_del_item(sg->objects, node->sgprivate->interact->js_binding->node)>=0) { #ifndef GPAC_DISABLE_SVG - JSBool ret = gf_js_remove_root(sg->svg_js->js_ctx, &(node->sgprivate->interact->js_binding->node), GF_JSGC_OBJECT); + gf_js_remove_root(sg->svg_js->js_ctx, &(node->sgprivate->interact->js_binding->node), GF_JSGC_OBJECT); if (sg->svg_js->in_script) sg->svg_js->force_gc = 1; else @@ -4664,6 +4673,12 @@ void gf_sg_handle_dom_event_for_vrml(GF_Node *node, GF_DOM_Event *event, GF_Node ret = JS_CallFunctionName(priv->js_ctx, hdl->evt_listen_obj, "handleEvent", 1, argv, &rval); } + /*check any pending exception if outer-most event*/ + if (!prev_event && JS_IsExceptionPending(priv->js_ctx)) { + JS_ReportPendingException(priv->js_ctx); + JS_ClearPendingException(priv->js_ctx); + } + event->is_vrml = prev_type; JS_SetPrivate(priv->js_ctx, priv->event, prev_event); diff --git a/src/terminal/channel.c b/src/terminal/channel.c index 7247770..39c7d6a 100644 --- a/src/terminal/channel.c +++ b/src/terminal/channel.c @@ -633,6 +633,8 @@ void Channel_ReceiveSkipSL(GF_ClientService *serv, GF_Channel *ch, const char *S gf_es_lock(ch, 0); } + + static void gf_es_check_timing(GF_Channel *ch) { /*the first data received inits the clock - this is needed to handle clock dependencies on non-initialized @@ -670,6 +672,42 @@ static void gf_es_check_timing(GF_Channel *ch) } } + +void gf_es_dispatch_raw_media_au(GF_Channel *ch, char *payload, u32 payload_size, u32 cts) +{ + GF_CompositionMemory *cb; + GF_CMUnit *cu; + if (!payload || !ch->odm->codec->CB) return; + if (!ch->odm->codec->CB->no_allocation) return; + + cb = ch->odm->codec->CB; + cu = gf_cm_lock_input(cb, cts, 1); + if (cu) { + u32 size = 0; + assert(cu->RenderedLength==0); + if (cb->UnitSize >= payload_size) { + cu->data = payload; + size = payload_size; + cu->TS = cts; + GF_LOG(GF_LOG_DEBUG, GF_LOG_MEDIA, ("[ODM%d] Raw Frame dispatched to CB - TS %d ms\n", ch->odm->OD->objectDescriptorID, cu->TS)); + } + gf_cm_unlock_input(cb, cu, size, 1); + + if (ch->BufferOn) { + ch->BufferOn = 0; + gf_clock_buffer_off(ch->clock); + gf_cm_abort_buffering(cb); + } + /*since the CB is a simple pointer to the input frame, wait until it is released before getting + back to the caller module*/ + if (size) { + gf_sema_wait(ch->odm->raw_frame_sema); + assert(cb->output->dataLength == 0); + } + } +} + + /*handles reception of an SL-PDU, logical or physical*/ void gf_es_receive_sl_packet(GF_ClientService *serv, GF_Channel *ch, char *payload, u32 payload_size, GF_SLHeader *header, GF_Err reception_status) { @@ -693,6 +731,20 @@ void gf_es_receive_sl_packet(GF_ClientService *serv, GF_Channel *ch, char *paylo if (ch->es_state != GF_ESM_ES_RUNNING) return; + if (ch->skip_sl) { + Channel_ReceiveSkipSL(serv, ch, payload, payload_size); + return; + } + if (ch->is_raw_channel) { + ch->CTS = ch->DTS = (u32) (ch->ts_offset + (header->compositionTimeStamp - ch->seed_ts) * 1000 / ch->ts_res); + if (!ch->IsClockInit) { + gf_es_check_timing(ch); + } + if (payload) + gf_es_dispatch_raw_media_au(ch, payload, payload_size, ch->CTS); + return; + } + /*physical SL-PDU - depacketize*/ if (!header) { u32 SLHdrLen; @@ -704,11 +756,6 @@ void gf_es_receive_sl_packet(GF_ClientService *serv, GF_Channel *ch, char *paylo hdr = *header; } - if (ch->skip_sl) { - Channel_ReceiveSkipSL(serv, ch, payload, payload_size); - return; - } - /*we ignore OCRs for the moment*/ if (hdr.OCRflag) { if (!ch->IsClockInit) { @@ -723,8 +770,12 @@ void gf_es_receive_sl_packet(GF_ClientService *serv, GF_Channel *ch, char *paylo } ch->clock->clock_init = 0; gf_clock_set_time(ch->clock, OCR_TS); + /*many TS streams deployed with HLS have broken PCRs - we will check their consistency + when receiving the first AU with DTS/CTS on this channel*/ + ch->clock->probe_ocr = 1; GF_LOG(GF_LOG_INFO, GF_LOG_SYNC, ("[SyncLayer] ES%d: initializing clock at STB %d from OCR TS %d (origial TS "LLD") - %d buffering - OTB %d\n", ch->esd->ESID, gf_term_get_time(ch->odm->term), OCR_TS, hdr.objectClockReference, ch->clock->Buffering, gf_clock_time(ch->clock) )); if (ch->clock->clock_init) ch->IsClockInit = 1; + } } #if 0 @@ -749,6 +800,18 @@ void gf_es_receive_sl_packet(GF_ClientService *serv, GF_Channel *ch, char *paylo GF_LOG(GF_LOG_DEBUG, GF_LOG_SYNC, ("[SyncLayer] ES%d: At OTB %d adjusting OCR to %d (origial TS "LLD") - diff %d\n", ch->esd->ESID, gf_clock_real_time(ch->clock), OCR_TS, hdr.objectClockReference, (s32) OCR_TS - (s32) ck)); // gf_clock_set_time(ch->clock, (u32) OCR_TS); } +#else + { + u32 ck; + u32 OCR_TS; + if (hdr.m2ts_pcr) { + OCR_TS = (u32) ( hdr.objectClockReference / 27000); + } else { + OCR_TS = (u32) ( (s64) (hdr.objectClockReference) * ch->ocr_scale); + } + ck = gf_clock_time(ch->clock); + GF_LOG(GF_LOG_DEBUG, GF_LOG_SYNC, ("[SyncLayer] ES%d: At OTB %d got OCR %d (origial TS "LLD") - diff %d%s\n", ch->esd->ESID, gf_clock_real_time(ch->clock), OCR_TS, hdr.objectClockReference, (s32) OCR_TS - (s32) ck, (hdr.m2ts_pcr==2) ? " - PCR Discontinuity flag" : "" )); + } #endif if (!payload_size) return; } @@ -842,6 +905,7 @@ void gf_es_receive_sl_packet(GF_ClientService *serv, GF_Channel *ch, char *paylo if (!ch->IsClockInit && (ch->net_dts < ch->seed_ts)) ch->seed_ts = ch->net_dts; #endif + if (ch->net_ctsseed_ts) { u64 diff = ch->seed_ts - ch->net_cts; @@ -860,6 +924,17 @@ void gf_es_receive_sl_packet(GF_ClientService *serv, GF_Channel *ch, char *paylo ch->DTS = (u32) (ch->ts_offset + (s64) (ch->net_dts) * 1000 / ch->ts_res); } + if (ch->clock->probe_ocr && gf_es_owns_clock(ch)) { + s32 diff_ts = ch->DTS; + diff_ts -= ch->clock->init_time; + if (ABS(diff_ts) > 10000) { + GF_LOG(GF_LOG_ERROR, GF_LOG_SYNC, ("[SyncLayer] ES%d: invalid clock reference detected - DTS %d OCR %d - using DTS as OCR\n", ch->DTS, ch->clock->init_time)); + ch->clock->clock_init = 0; + gf_clock_set_time(ch->clock, ch->DTS-1000); + } + ch->clock->probe_ocr = 0; + } + ch->no_timestamps = 0; } else { ch->no_timestamps = 1; @@ -1140,6 +1215,7 @@ GF_DBUnit *gf_es_get_au(GF_Channel *ch) /*update timing if new stream data but send no data*/ if (is_new_data) { gf_es_receive_sl_packet(ch->service, ch, NULL, 0, &slh, GF_OK); + if (ch->ipmp_tool) { GF_IPMPEvent evt; memset(&evt, 0, sizeof(evt)); @@ -1450,7 +1526,7 @@ void gf_es_config_drm(GF_Channel *ch, GF_NetComDRMConfig *drm_cfg) gf_modules_close_interface((GF_BaseInterface *) ch->ipmp_tool); ch->ipmp_tool = NULL; } - gf_term_message(ch->odm->term, ch->service->url, "No IPMP tool suitable to handle channel protection", GF_NOT_SUPPORTED); + GF_LOG(GF_LOG_ERROR, GF_LOG_MEDIA, ("[IPMP] No IPMP tool suitable to handle channel protection scheme %s (KMS URI %s)\n", drm_cfg->scheme_uri, drm_cfg->kms_uri)); ch_buffer_off(ch); } diff --git a/src/terminal/decoder.c b/src/terminal/decoder.c index 047fcfc..38b3081 100644 --- a/src/terminal/decoder.c +++ b/src/terminal/decoder.c @@ -33,6 +33,7 @@ #include "input_sensor.h" GF_Err Codec_Load(GF_Codec *codec, GF_ESD *esd, u32 PL); +GF_Err gf_codec_process_raw_media_pull(GF_Codec *codec, u32 TimeAvailable); GF_Codec *gf_codec_new(GF_ObjectManager *odm, GF_ESD *base_layer, s32 PL, GF_Err *e) { @@ -59,7 +60,7 @@ GF_Codec *gf_codec_new(GF_ObjectManager *odm, GF_ESD *base_layer, s32 PL, GF_Err if (tmp->type==GF_STREAM_PRIVATE_MEDIA) tmp->type = GF_STREAM_VISUAL; - GF_LOG(GF_LOG_INFO, GF_LOG_CODEC, ("[Codec] Found decoder %s for stream type %s\n", tmp->decio->module_name, gf_esd_get_textual_description(base_layer) )); + GF_LOG(GF_LOG_INFO, GF_LOG_CODEC, ("[Codec] Found decoder %s for stream type %s\n", tmp->decio ? tmp->decio->module_name : "RAW", gf_esd_get_textual_description(base_layer) )); return tmp; } @@ -160,9 +161,15 @@ GF_Err gf_codec_add_channel(GF_Codec *codec, GF_Channel *ch) /*setup CB*/ if (!codec->CB && max) { + if (codec->flags & GF_ESM_CODEC_IS_RAW_MEDIA) { + max = 1; + /*create a semaphore in non-notified stage*/ + codec->odm->raw_frame_sema = gf_sema_new(1, 0); + } + GF_LOG(GF_LOG_DEBUG, GF_LOG_CODEC, ("[ODM] Creating composition buffer for codec %s - %d units %d bytes each\n", codec->decio->module_name, max, CUsize)); - codec->CB = gf_cm_new(CUsize, max); + codec->CB = gf_cm_new(CUsize, max, (codec->flags & GF_ESM_CODEC_IS_RAW_MEDIA) ? 1 : 0); codec->CB->Min = min; codec->CB->odm = codec->odm; } @@ -175,6 +182,10 @@ GF_Err gf_codec_add_channel(GF_Codec *codec, GF_Channel *ch) codec->is_reordering = cap.cap.valueInt; } + if (codec->flags & GF_ESM_CODEC_IS_RAW_MEDIA) { + ch->is_raw_channel = 1; + } + /*setup net channel config*/ if (ch->service) { memset(&com, 0, sizeof(GF_NetworkCommand)); @@ -208,8 +219,27 @@ GF_Err gf_codec_add_channel(GF_Codec *codec, GF_Channel *ch) } } + } else if (codec->flags & GF_ESM_CODEC_IS_RAW_MEDIA) { + cap.CapCode = GF_CODEC_OUTPUT_SIZE; + gf_codec_get_capability(codec, &cap); + if (codec->CB && (cap.cap.valueInt != codec->CB->UnitSize)) { + gf_cm_del(codec->CB); + codec->CB = NULL; + } + CUsize = cap.cap.valueInt; + /*create a semaphore in non-notified stage*/ + codec->odm->raw_frame_sema = gf_sema_new(1, 0); + + codec->CB = gf_cm_new(CUsize, 1, 1); + codec->CB->Min = 0; + codec->CB->odm = codec->odm; + ch->is_raw_channel = 1; + if (ch->is_pulling) { + codec->process = gf_codec_process_raw_media_pull; + } } + /*assign the first base layer as the codec clock by default, or current channel clock if no clock set Also assign codec priority here*/ if (!ch->esd->dependsOnESID || !codec->ck) { @@ -453,7 +483,7 @@ check_unit: gf_scene_regenerate(scene); scene->graph_attached = 2; scene->is_dynamic_scene = prev_dyn; - GF_LOG(GF_LOG_INFO, GF_LOG_MEDIA, ("[Decoder] Got OD resources before scene - generating temporary scene\n")); + GF_LOG(GF_LOG_INFO, GF_LOG_CODEC, ("[Decoder] Got OD resources before scene - generating temporary scene\n")); } } @@ -673,8 +703,6 @@ static GF_Err MediaCodec_Process(GF_Codec *codec, u32 TimeAvailable) gf_es_drop_au(ch); return GF_OK; } - codec->nb_repeted_frames = 0; - memcpy(codec->last_unit_signature, new_unit_signature, sizeof(new_unit_signature)); /*usually only one image is tolerated in the stream, but just in case force reset of CB*/ if (codec->CB->UnitCount && (obj_time>=AU->CTS)) { @@ -683,6 +711,14 @@ static GF_Err MediaCodec_Process(GF_Codec *codec, u32 TimeAvailable) codec->CB->UnitCount = 0; gf_mx_v(codec->odm->mx); } + + /*CB is already full*/ + if (codec->CB->UnitCount) + return GF_OK; + + codec->nb_repeted_frames = 0; + memcpy(codec->last_unit_signature, new_unit_signature, sizeof(new_unit_signature)); + } /*try to refill the full buffer*/ @@ -712,11 +748,11 @@ static GF_Err MediaCodec_Process(GF_Codec *codec, u32 TimeAvailable) NOTE: the 100 ms safety gard is to avoid discarding audio*/ if (!ch->skip_sl && (AU->CTS + 100 < obj_time) ) { mmlevel = GF_CODEC_LEVEL_DROP; - GF_LOG(GF_LOG_DEBUG, GF_LOG_MEDIA, ("[%s] ODM%d: frame too late (%d vs %d) - using drop level\n", codec->decio->module_name, codec->odm->OD->objectDescriptorID, AU->CTS, obj_time)); + GF_LOG(GF_LOG_DEBUG, GF_LOG_CODEC, ("[%s] ODM%d: frame too late (%d vs %d) - using drop level\n", codec->decio->module_name, codec->odm->OD->objectDescriptorID, AU->CTS, obj_time)); if (ch->resync_drift && (AU->CTS + ch->resync_drift < obj_time)) { ch->clock->StartTime += (obj_time - AU->CTS); - GF_LOG(GF_LOG_WARNING, GF_LOG_MEDIA, ("[%s] ODM%d: decoder too slow on OCR stream - rewinding clock of %d ms\n", codec->decio->module_name, codec->odm->OD->objectDescriptorID, obj_time - AU->CTS)); + GF_LOG(GF_LOG_WARNING, GF_LOG_CODEC, ("[%s] ODM%d: decoder too slow on OCR stream - rewinding clock of %d ms\n", codec->decio->module_name, codec->odm->OD->objectDescriptorID, obj_time - AU->CTS)); obj_time = gf_clock_time(codec->ck); } } @@ -805,15 +841,12 @@ scalable_retry: processing a scalable stream*/ case GF_OK: if (unit_size) { - GF_LOG(GF_LOG_DEBUG, GF_LOG_RTI|GF_LOG_CODEC, ("[%s] ODM%d at %d decoded frame TS %d in %d ms (DTS %d)\n", codec->decio->module_name, codec->odm->OD->objectDescriptorID, gf_clock_real_time(ch->clock), AU->CTS, now, AU->DTS)); + GF_LOG(GF_LOG_DEBUG, GF_LOG_RTI|GF_LOG_CODEC, ("[%s] ODM%d at %d decoded frame TS %d in %d ms (DTS %d) - %d in CB\n", codec->decio->module_name, codec->odm->OD->objectDescriptorID, gf_clock_real_time(ch->clock), AU->CTS, now, AU->DTS, codec->CB->UnitCount + 1)); } /*if no size the decoder is not using the composition memory - if the object is in intitial buffering resume it!!*/ else if (codec->CB->Status == CB_BUFFER) { gf_cm_abort_buffering(codec->CB); } - /*in seek don't dispatch any output*/ - if (mmlevel == GF_CODEC_LEVEL_SEEK) - unit_size = 0; codec_update_stats(codec, AU->dataLength, now); if (ch->skip_sl) { @@ -829,7 +862,7 @@ scalable_retry: } #ifndef GPAC_DISABLE_LOGS if (codec->odm->flags & GF_ODM_PREFETCH) { - GF_LOG(GF_LOG_INFO, GF_LOG_MEDIA, ("[%s] ODM%d At %d decoding frame TS %d in prefetch mode\n", codec->decio->module_name, codec->odm->OD->objectDescriptorID, gf_clock_real_time(ch->clock) )); + GF_LOG(GF_LOG_INFO, GF_LOG_CODEC, ("[%s] ODM%d At %d decoding frame TS %d in prefetch mode\n", codec->decio->module_name, codec->odm->OD->objectDescriptorID, gf_clock_real_time(ch->clock), AU->CTS)); } #endif break; @@ -837,7 +870,7 @@ scalable_retry: unit_size = 0; /*error - if the object is in intitial buffering resume it!!*/ gf_cm_abort_buffering(codec->CB); - GF_LOG(GF_LOG_DEBUG, GF_LOG_MEDIA, ("[%s] ODM%d At %d (frame TS %d - %d ms ): decoded error %s\n", codec->decio->module_name, codec->odm->OD->objectDescriptorID, gf_clock_real_time(ch->clock), AU->CTS, now, gf_error_to_string(e) )); + GF_LOG(GF_LOG_INFO, GF_LOG_CODEC, ("[%s] ODM%d At %d (frame TS %d - %d ms ): decoded error %s\n", codec->decio->module_name, codec->odm->OD->objectDescriptorID, gf_clock_real_time(ch->clock), AU->CTS, now, gf_error_to_string(e) )); e = GF_OK; break; } @@ -862,8 +895,14 @@ drop: Decoder_GetNextAU(codec, &ch, &AU); /*same CTS: same output, likely scalable stream so don't release the CB*/ - if (AU && (AU->CTS == cts) && (ch !=prev_ch) ) + if (AU && (AU->CTS == cts) && (ch !=prev_ch) ) { + unit_size = codec->CB->UnitSize; goto scalable_retry; + } + + /*in seek don't dispatch any output*/ + if (mmlevel == GF_CODEC_LEVEL_SEEK) + unit_size = 0; UnlockCompositionUnit(codec, CU, unit_size); if (!ch || !AU) return GF_OK; @@ -882,6 +921,54 @@ drop: } +GF_Err gf_codec_process_private_media(GF_Codec *codec, u32 TimeAvailable) +{ + + if (codec->ck && codec->ck->Paused) { + u32 i; + for (i=0; iodm->channels); i++) { + GF_Channel *ch = gf_list_get(codec->odm->channels, i); + if (ch->BufferOn) { + ch->BufferOn = 0; + gf_clock_buffer_off(ch->clock); + } + } + if (codec->CB) + gf_cm_abort_buffering(codec->CB); + } + return GF_OK; +} + + +GF_Err gf_codec_process_raw_media_pull(GF_Codec *codec, u32 TimeAvailable) +{ + GF_Channel *ch; + GF_DBUnit *db; + if (codec->ck && codec->ck->Paused) { + u32 i; + for (i=0; iodm->channels); i++) { + ch = gf_list_get(codec->odm->channels, i); + if (ch->BufferOn) { + ch->BufferOn = 0; + gf_clock_buffer_off(ch->clock); + } + } + if (codec->CB) + gf_cm_abort_buffering(codec->CB); + } + + /*this will pull the next AU from the service */ + Decoder_GetNextAU(codec, &ch, &db); + if (!db) return GF_OK; + + /*dispatch raw media - this call is blocking untill the cu has been consumed */ + gf_es_dispatch_raw_media_au(ch, db->data, db->dataLength, db->CTS); + + /*release AU from service*/ + gf_term_channel_release_sl_packet(ch->service, ch); + return GF_OK; +} + GF_Err gf_codec_process_ocr(GF_Codec *codec, u32 TimeAvailable) { /*OCR: needed for OCR in pull mode (dummy streams used to sync various sources)*/ @@ -920,8 +1007,62 @@ GF_Err gf_codec_process(GF_Codec *codec, u32 TimeAvailable) GF_Err gf_codec_get_capability(GF_Codec *codec, GF_CodecCapability *cap) { cap->cap.valueInt = 0; - if (!codec->decio) return GF_OK; - return codec->decio->GetCapabilities(codec->decio, cap); + if (codec->decio) + return codec->decio->GetCapabilities(codec->decio, cap); + + if (codec->flags & GF_ESM_CODEC_IS_RAW_MEDIA) { + GF_BitStream *bs; + u32 pf, w, h, stride, out_size, sr, nb_ch, bpp, ch_cfg; + GF_Channel *ch = gf_list_get(codec->odm->channels, 0); + if (!ch || !ch->esd->decoderConfig->decoderSpecificInfo || !ch->esd->decoderConfig->decoderSpecificInfo->data) return 0; + bs = gf_bs_new(ch->esd->decoderConfig->decoderSpecificInfo->data, ch->esd->decoderConfig->decoderSpecificInfo->dataLength, GF_BITSTREAM_READ); + + pf = w = h = sr = nb_ch = bpp = ch_cfg = 0; + if (codec->type==GF_STREAM_VISUAL) { + pf = gf_bs_read_u32(bs); + w = gf_bs_read_u16(bs); + h = gf_bs_read_u16(bs); + out_size = gf_bs_read_u32(bs); + stride = gf_bs_read_u32(bs); + } else { + sr = gf_bs_read_u32(bs); + nb_ch = gf_bs_read_u16(bs); + bpp = gf_bs_read_u16(bs); + out_size = gf_bs_read_u32(bs); + ch_cfg = gf_bs_read_u32(bs); + } + gf_bs_del(bs); + switch (cap->CapCode) { + case GF_CODEC_WIDTH: + cap->cap.valueInt = w; + return GF_OK; + case GF_CODEC_HEIGHT: + cap->cap.valueInt = h; + return GF_OK; + case GF_CODEC_STRIDE: + cap->cap.valueInt = stride; + return GF_OK; + case GF_CODEC_PIXEL_FORMAT: + cap->cap.valueInt = pf; + return GF_OK; + case GF_CODEC_OUTPUT_SIZE: + cap->cap.valueInt = out_size; + return GF_OK; + case GF_CODEC_SAMPLERATE: + cap->cap.valueInt = sr; + return GF_OK; + case GF_CODEC_NB_CHAN: + cap->cap.valueInt = nb_ch; + return GF_OK; + case GF_CODEC_BITS_PER_SAMPLE: + cap->cap.valueInt = bpp; + return GF_OK; + case GF_CODEC_CHANNEL_CONFIG: + cap->cap.valueInt = ch_cfg; + return GF_OK; + } + } + return GF_BAD_PARAM; } GF_Err gf_codec_set_capability(GF_Codec *codec, GF_CodecCapability cap) @@ -976,11 +1117,11 @@ static GF_Err Codec_LoadModule(GF_Codec *codec, GF_ESD *esd, u32 PL) { char szPrefDec[500]; const char *sOpt; - GF_BaseDecoder *ifce; + GF_BaseDecoder *ifce, *dec_ifce; u32 i, plugCount; u32 ifce_type; char *cfg; - u32 cfg_size; + u32 cfg_size, dec_confidence; GF_Terminal *term = codec->odm->term; if (esd->decoderConfig->decoderSpecificInfo) { @@ -1000,7 +1141,7 @@ static GF_Err Codec_LoadModule(GF_Codec *codec, GF_ESD *esd, u32 PL) break; case GF_STREAM_PRIVATE_MEDIA: ifce_type = GF_PRIVATE_MEDIA_DECODER_INTERFACE; - codec->process = MediaCodec_Process; + codec->process = gf_codec_process_private_media; break; case GF_STREAM_PRIVATE_SCENE: ifce_type = GF_SCENE_DECODER_INTERFACE; @@ -1036,28 +1177,51 @@ static GF_Err Codec_LoadModule(GF_Codec *codec, GF_ESD *esd, u32 PL) } } + dec_confidence = 0; + ifce = NULL; + if (sOpt) { ifce = (GF_BaseDecoder *) gf_modules_load_interface_by_name(term->user->modules, sOpt, ifce_type); if (ifce) { - if (ifce->CanHandleStream && ifce->CanHandleStream(ifce, esd->decoderConfig->streamType, esd, PL) ) { - codec->decio = ifce; - return GF_OK; + if (ifce->CanHandleStream) { + dec_confidence = ifce->CanHandleStream(ifce, esd->decoderConfig->streamType, esd, PL); + if (dec_confidence==GF_CODEC_SUPPORTED) { + codec->decio = ifce; + return GF_OK; + } + if (dec_confidence==GF_CODEC_NOT_SUPPORTED) { + gf_modules_close_interface((GF_BaseInterface *) ifce); + ifce = NULL; + } + } else { + gf_modules_close_interface((GF_BaseInterface *) ifce); } - gf_modules_close_interface((GF_BaseInterface *) ifce); } } + dec_ifce = ifce; /*prefered codec module per streamType/objectType from config*/ sprintf(szPrefDec, "codec_%02X_%02X", esd->decoderConfig->streamType, esd->decoderConfig->objectTypeIndication); sOpt = gf_cfg_get_key(term->user->config, "Systems", szPrefDec); if (sOpt) { ifce = (GF_BaseDecoder *) gf_modules_load_interface_by_name(term->user->modules, sOpt, ifce_type); if (ifce) { - if (ifce->CanHandleStream && ifce->CanHandleStream(ifce, esd->decoderConfig->streamType, esd, PL) ) { - codec->decio = ifce; - return GF_OK; + if (ifce->CanHandleStream) { + u32 conf = ifce->CanHandleStream(ifce, esd->decoderConfig->streamType, esd, PL); + if ((conf!=GF_CODEC_NOT_SUPPORTED) && (conf>=dec_confidence)) { + /*switch*/ + if (dec_ifce) gf_modules_close_interface((GF_BaseInterface *) dec_ifce); + dec_confidence = conf; + dec_ifce = ifce; + ifce = NULL; + if (dec_confidence==GF_CODEC_SUPPORTED) { + codec->decio = dec_ifce; + return GF_OK; + } + } } - gf_modules_close_interface((GF_BaseInterface *) ifce); + if (ifce) + gf_modules_close_interface((GF_BaseInterface *) ifce); } } /*not found, check all modules*/ @@ -1065,14 +1229,28 @@ static GF_Err Codec_LoadModule(GF_Codec *codec, GF_ESD *esd, u32 PL) for (i = 0; i < plugCount ; i++) { ifce = (GF_BaseDecoder *) gf_modules_load_interface(term->user->modules, i, ifce_type); if (!ifce) continue; - if (ifce->CanHandleStream && ifce->CanHandleStream(ifce, esd->decoderConfig->streamType, esd, PL) ) { - codec->decio = ifce; - sprintf(szPrefDec, "codec_%02X_%02X", esd->decoderConfig->streamType, esd->decoderConfig->objectTypeIndication); - gf_cfg_set_key(term->user->config, "Systems", szPrefDec, ifce->module_name); - return GF_OK; + if (ifce->CanHandleStream) { + u32 conf = ifce->CanHandleStream(ifce, esd->decoderConfig->streamType, esd, PL); + + if ((conf!=GF_CODEC_NOT_SUPPORTED) && (conf>dec_confidence)) { + /*switch*/ + if (dec_ifce) gf_modules_close_interface((GF_BaseInterface *) dec_ifce); + dec_confidence = conf; + dec_ifce = ifce; + ifce = NULL; + } } - gf_modules_close_interface((GF_BaseInterface *) ifce); + if (ifce) + gf_modules_close_interface((GF_BaseInterface *) ifce); + } + + if (dec_ifce) { + codec->decio = dec_ifce; + sprintf(szPrefDec, "codec_%02X_%02X", esd->decoderConfig->streamType, esd->decoderConfig->objectTypeIndication); + gf_cfg_set_key(term->user->config, "Systems", szPrefDec, dec_ifce->module_name); + return GF_OK; } + return GF_CODEC_NOT_FOUND; } @@ -1098,6 +1276,12 @@ GF_Err Codec_Load(GF_Codec *codec, GF_ESD *esd, u32 PL) case GF_STREAM_AUDIO: if (!esd->decoderConfig->objectTypeIndication) return GF_NON_COMPLIANT_BITSTREAM; + + if (esd->decoderConfig->objectTypeIndication==GPAC_OTI_RAW_MEDIA_STREAM) { + codec->flags |= GF_ESM_CODEC_IS_RAW_MEDIA; + codec->process = gf_codec_process_private_media; + return GF_OK; + } default: return Codec_LoadModule(codec, esd, PL); } @@ -1122,7 +1306,8 @@ void gf_codec_del(GF_Codec *codec) break; #endif default: - gf_modules_close_interface((GF_BaseInterface *) codec->decio); + if (codec->decio) + gf_modules_close_interface((GF_BaseInterface *) codec->decio); break; } } diff --git a/src/terminal/media_manager.c b/src/terminal/media_manager.c index bc30fdd..9f0e297 100644 --- a/src/terminal/media_manager.c +++ b/src/terminal/media_manager.c @@ -126,7 +126,7 @@ void gf_term_add_codec(GF_Terminal *term, GF_Codec *codec) GF_CodecCapability cap; assert(codec); - GF_LOG(GF_LOG_DEBUG, GF_LOG_MEDIA, ("[Terminal] Registering codec %s\n", codec->decio ? codec->decio->module_name : "Unknown")); + GF_LOG(GF_LOG_DEBUG, GF_LOG_MEDIA, ("[Terminal] Registering codec %s\n", codec->decio ? codec->decio->module_name : "RAW")); /*caution: the mutex can be grabbed by a decoder waiting for a mutex owned by the calling thread this happens when several scene codecs are running concurently and triggering play/pause on media*/ @@ -217,7 +217,7 @@ void gf_term_remove_codec(GF_Terminal *term, GF_Codec *codec) Bool locked; CodecEntry *ce; - GF_LOG(GF_LOG_DEBUG, GF_LOG_MEDIA, ("[Terminal] Unregistering codec %s\n", codec->decio ? codec->decio->module_name : "Unknown")); + GF_LOG(GF_LOG_DEBUG, GF_LOG_MEDIA, ("[Terminal] Unregistering codec %s\n", codec->decio ? codec->decio->module_name : "RAW")); /*cf note above*/ locked = gf_mx_try_lock(term->mm_mx); @@ -302,14 +302,16 @@ static u32 MM_SimulationStep_Decoder(GF_Terminal *term) time_taken = gf_sys_clock(); e = gf_codec_process(ce->dec, time_slice); + time_taken = gf_sys_clock() - time_taken; /*avoid signaling errors too often...*/ #ifndef GPAC_DISABLE_LOG - if (e) GF_LOG(GF_LOG_WARNING, GF_LOG_MEDIA, ("[ODM%d] Decoding Error %s\n", ce->dec->odm->OD->objectDescriptorID, gf_error_to_string(e) )); + if (e) { + GF_LOG(GF_LOG_WARNING, GF_LOG_MEDIA, ("[ODM%d] Decoding Error %s\n", ce->dec->odm->OD->objectDescriptorID, gf_error_to_string(e) )); + } else { + GF_LOG(GF_LOG_DEBUG, GF_LOG_MEDIA, ("[%s] Decode time slice %d ms out of %d ms\n", ce->dec->decio ? ce->dec->decio->module_name : "RAW", time_taken, time_left )); + } #endif - - time_taken = gf_sys_clock() - time_taken; - if (ce->flags & GF_MM_CE_DISCRADED) { gf_free(ce); gf_list_rem(term->codecs, term->last_codec); @@ -318,11 +320,11 @@ static u32 MM_SimulationStep_Decoder(GF_Terminal *term) if (ce->dec->CB && (ce->dec->CB->UnitCount >= ce->dec->CB->Min)) ce->dec->PriorityBoost = 0; } + term->last_codec = (term->last_codec + 1) % count; + remain -= 1; if (!remain) break; - term->last_codec = (term->last_codec + 1) % count; - if (time_left > time_taken) { time_left -= time_taken; } else { diff --git a/src/terminal/media_memory.c b/src/terminal/media_memory.c index f3159ce..892c131 100644 --- a/src/terminal/media_memory.c +++ b/src/terminal/media_memory.c @@ -84,20 +84,22 @@ static GFINLINE void my_large_gf_free(void *ptr) { #endif -static void gf_cm_unit_del(GF_CMUnit *cb) +static void gf_cm_unit_del(GF_CMUnit *cb, Bool no_data_allocation) { if (!cb) return; - if (cb->next) gf_cm_unit_del(cb->next); + if (cb->next) gf_cm_unit_del(cb->next, no_data_allocation); cb->next = NULL; if (cb->data) { - my_large_gf_free(cb->data); + if (!no_data_allocation) { + my_large_gf_free(cb->data); + } cb->data = NULL; } gf_free(cb); } -GF_CompositionMemory *gf_cm_new(u32 UnitSize, u32 capacity) +GF_CompositionMemory *gf_cm_new(u32 UnitSize, u32 capacity, Bool no_allocation) { GF_CompositionMemory *tmp; GF_CMUnit *cu, *prev; @@ -108,6 +110,7 @@ GF_CompositionMemory *gf_cm_new(u32 UnitSize, u32 capacity) tmp->Capacity = capacity; tmp->UnitSize = UnitSize; + tmp->no_allocation = no_allocation; prev = NULL; i = 1; @@ -120,8 +123,12 @@ GF_CompositionMemory *gf_cm_new(u32 UnitSize, u32 capacity) cu->prev = prev; } cu->dataLength = 0; - cu->data = UnitSize ? (char*)my_large_alloc(sizeof(char)*UnitSize) : NULL; - if (cu->data) memset(cu->data, 0, sizeof(char)*UnitSize); + if (no_allocation) { + cu->data = NULL; + } else { + cu->data = UnitSize ? (char*)my_large_alloc(sizeof(char)*UnitSize) : NULL; + if (cu->data) memset(cu->data, 0, sizeof(char)*UnitSize); + } prev = cu; capacity --; i++; @@ -148,7 +155,7 @@ void gf_cm_del(GF_CompositionMemory *cb) if (cb->input){ /*break the loop and destroy*/ cb->input->prev->next = NULL; - gf_cm_unit_del(cb->input); + gf_cm_unit_del(cb->input, cb->no_allocation); cb->input = NULL; } gf_odm_lock(cb->odm, 0); @@ -372,6 +379,11 @@ void gf_cm_reset(GF_CompositionMemory *cb) cu = cb->input; cu->RenderedLength = 0; + if (cu->dataLength && cb->odm->raw_frame_sema) { + cu->dataLength = 0; + gf_sema_notify(cb->odm->raw_frame_sema, 1); + } + cu->dataLength = 0; cu->TS = 0; cu = cu->next; @@ -400,12 +412,24 @@ void gf_cm_resize(GF_CompositionMemory *cb, u32 newCapacity) cu = cb->input; cb->UnitSize = newCapacity; - my_large_gf_free(cu->data); - cu->data = (char*) my_large_alloc(newCapacity); - cu = cu->next; - while (cu != cb->input) { + if (!cb->no_allocation) { my_large_gf_free(cu->data); cu->data = (char*) my_large_alloc(newCapacity); + } else { + cu->data = NULL; + if (cu->dataLength && cb->odm->raw_frame_sema) { + cu->dataLength = 0; + gf_sema_notify(cb->odm->raw_frame_sema, 1); + } + } + cu = cu->next; + while (cu != cb->input) { + if (!cb->no_allocation) { + my_large_gf_free(cu->data); + cu->data = (char*) my_large_alloc(newCapacity); + } else { + cu->data = NULL; + } cu = cu->next; } @@ -425,7 +449,7 @@ void gf_cm_reinit(GF_CompositionMemory *cb, u32 UnitSize, u32 Capacity) if (cb->input){ /*break the loop and destroy*/ cb->input->prev->next = NULL; - gf_cm_unit_del(cb->input); + gf_cm_unit_del(cb->input, cb->no_allocation); cb->input = NULL; } @@ -444,7 +468,11 @@ void gf_cm_reinit(GF_CompositionMemory *cb, u32 UnitSize, u32 Capacity) cu->prev = prev; } cu->dataLength = 0; - cu->data = (char*)my_large_alloc(UnitSize); + if (cb->no_allocation) { + cu->data = NULL; + } else { + cu->data = (char*)my_large_alloc(UnitSize); + } prev = cu; Capacity --; i++; @@ -523,9 +551,13 @@ void gf_cm_drop_output(GF_CompositionMemory *cb) /*this allows reuse of the CU*/ cb->output->RenderedLength = 0; cb->LastRenderedTS = cb->output->TS; + if (cb->odm->raw_frame_sema) { + cb->output->dataLength = 0; + gf_sema_notify(cb->odm->raw_frame_sema, 1); + } - /*on visual streams, always keep the last AU*/ - if (cb->output->dataLength && (cb->odm->codec->type == GF_STREAM_VISUAL) ) { + /*on visual streams (except raw oness), always keep the last AU*/ + if (!cb->no_allocation && cb->output->dataLength && (cb->odm->codec->type == GF_STREAM_VISUAL) ) { if ( !cb->output->next->dataLength || (cb->Capacity == 1) ) { return; } diff --git a/src/terminal/media_memory.h b/src/terminal/media_memory.h index 76b836c..5a2d5e3 100644 --- a/src/terminal/media_memory.h +++ b/src/terminal/media_memory.h @@ -110,6 +110,7 @@ struct _composition_memory u32 Min; /*Unit size is the size of each buffer*/ u32 UnitSize; + Bool no_allocation; /*Status of the buffer*/ u32 Status; @@ -127,7 +128,7 @@ struct _composition_memory }; /*a composition buffer only has fixed-size unit*/ -GF_CompositionMemory *gf_cm_new(u32 UnitSize, u32 capacity); +GF_CompositionMemory *gf_cm_new(u32 UnitSize, u32 capacity, Bool no_allocation); void gf_cm_del(GF_CompositionMemory *cb); /*re-inits complete cb*/ void gf_cm_reinit(GF_CompositionMemory *cb, u32 UnitSize, u32 Capacity); diff --git a/src/terminal/media_object.c b/src/terminal/media_object.c index 79e1efd..36367e7 100644 --- a/src/terminal/media_object.c +++ b/src/terminal/media_object.c @@ -453,6 +453,8 @@ void gf_mo_release_data(GF_MediaObject *mo, u32 nb_bytes, s32 forceDrop) gf_odm_lock(mo->odm, 0); return; } + if (mo->odm->codec->CB->no_allocation) + forceDrop = 1; /*perform a sanity check on TS since the CB may have changed status - this may happen in temporal scalability only*/ @@ -567,6 +569,9 @@ void gf_mo_play(GF_MediaObject *mo, Double clipBegin, Double clipEnd, Bool can_l mo->odm->media_stop_time = 0; } } + /*done prefetching*/ + mo->odm->flags &= ~GF_ODM_PREFETCH; + if (is_restart) { mediacontrol_restart(mo->odm); } else { @@ -759,7 +764,7 @@ Bool gf_mo_is_same_url(GF_MediaObject *obj, MFURL *an_url, Bool *keep_fragment, /*check on full URL without removing fragment IDs*/ if (include_sub_url) { for (i=0; icount; i++) { - if (!stricmp(szURL1, an_url->vals[i].url)) return 1; + if (an_url->vals[i].url && !stricmp(szURL1, an_url->vals[i].url)) return 1; } return 0; } @@ -952,12 +957,11 @@ Bool gf_mo_is_done(GF_MediaObject *mo) u64 dur; if (!gf_odm_lock_mo(mo)) return 0; - /*for natural media use composition buffer*/ - if (mo->odm->codec && mo->odm->codec->CB) + if (mo->odm->codec && mo->odm->codec->CB) { + /*for natural media use composition buffer*/ res = (mo->odm->codec->CB->Status==CB_STOP) ? 1 : 0; - - /*otherwise check EOS and time*/ - else { + } else { + /*otherwise check EOS and time*/ codec = mo->odm->codec; dur = mo->odm->duration; if (!mo->odm->codec) { @@ -1017,13 +1021,16 @@ Bool gf_mo_is_private_media(GF_MediaObject *mo) } GF_EXPORT -void gf_mo_set_position(GF_MediaObject *mo, GF_Window *src, GF_Window *dst) +Bool gf_mo_set_position(GF_MediaObject *mo, GF_Window *src, GF_Window *dst) { + GF_Err e; GF_PrivateMediaDecoder *dec; - if (!mo->odm || !mo->odm->codec || !mo->odm->codec->decio || (mo->odm->codec->decio->InterfaceType!=GF_PRIVATE_MEDIA_DECODER_INTERFACE)) return; + if (!mo->odm || !mo->odm->codec || !mo->odm->codec->decio || (mo->odm->codec->decio->InterfaceType!=GF_PRIVATE_MEDIA_DECODER_INTERFACE)) return 0; dec = (GF_PrivateMediaDecoder*)mo->odm->codec->decio; - dec->Control(dec, 0, src, dst); + e = dec->Control(dec, 0, src, dst); + if (e==GF_BUFFER_TOO_SMALL) return 1; + return 0; } GF_EXPORT diff --git a/src/terminal/media_sensor.c b/src/terminal/media_sensor.c index 75f4e5b..9c5afd0 100644 --- a/src/terminal/media_sensor.c +++ b/src/terminal/media_sensor.c @@ -107,7 +107,7 @@ void MS_Modified(GF_Node *node) gf_mo_unregister(node, st->stream); if (st->sensor->isActive) { st->sensor->isActive = 0; - gf_node_event_out_str((GF_Node *) st->sensor, "isActive"); + gf_node_event_out((GF_Node *) st->sensor, 4/*"isActive"*/); } } st->stream = gf_mo_register(node, &st->sensor->url, 0, 0); @@ -138,7 +138,7 @@ void mediasensor_update_timing(GF_ObjectManager *odm, Bool is_eos) if (ck->has_seen_eos && (1000*time>=(Double) (s64)odm->subscene->duration)) { if (media_sens->sensor->isActive) { media_sens->sensor->isActive = 0; - gf_node_event_out_str((GF_Node *) media_sens->sensor, "isActive"); + gf_node_event_out((GF_Node *) media_sens->sensor, 4/*"isActive"*/); GF_LOG(GF_LOG_DEBUG, GF_LOG_INTERACT, ("[ODM%d] Deactivating media sensor\n", odm->OD->objectDescriptorID)); } @@ -148,7 +148,7 @@ void mediasensor_update_timing(GF_ObjectManager *odm, Bool is_eos) if (!is_eos && !media_sens->sensor->isActive) { media_sens->sensor->isActive = 1; - gf_node_event_out_str((GF_Node *) media_sens->sensor, "isActive"); + gf_node_event_out((GF_Node *) media_sens->sensor, 4/*"isActive"*/); if (odm->subscene) { media_sens->sensor->mediaDuration = (Double) (s64)odm->subscene->duration; } else { @@ -159,15 +159,15 @@ void mediasensor_update_timing(GF_ObjectManager *odm, Bool is_eos) else media_sens->sensor->mediaDuration = -FIX_ONE; - gf_node_event_out_str((GF_Node *) media_sens->sensor, "mediaDuration"); + gf_node_event_out((GF_Node *) media_sens->sensor, 3/*"mediaDuration"*/); } if (media_sens->sensor->isActive && (media_sens->sensor->mediaCurrentTime != time)) { media_sens->sensor->mediaCurrentTime = time; - gf_node_event_out_str((GF_Node *) media_sens->sensor, "mediaCurrentTime"); + gf_node_event_out((GF_Node *) media_sens->sensor, 1/*"mediaCurrentTime"*/); } if (is_eos && media_sens->sensor->isActive) { media_sens->sensor->isActive = 0; - gf_node_event_out_str((GF_Node *) media_sens->sensor, "isActive"); + gf_node_event_out((GF_Node *) media_sens->sensor, 4/*"isActive"*/); } continue; } @@ -179,7 +179,7 @@ void mediasensor_update_timing(GF_ObjectManager *odm, Bool is_eos) if (desc->startTime > time) { if (media_sens->sensor->isActive) { media_sens->sensor->isActive = 0; - gf_node_event_out_str((GF_Node *) media_sens->sensor, "isActive"); + gf_node_event_out((GF_Node *) media_sens->sensor, 4/*"isActive"*/); GF_LOG(GF_LOG_DEBUG, GF_LOG_INTERACT, ("[ODM%d] Deactivating media sensor at time %g - segment %s\n", odm->OD->objectDescriptorID, time, desc->SegmentName)); } @@ -197,18 +197,18 @@ void mediasensor_update_timing(GF_ObjectManager *odm, Bool is_eos) if (!media_sens->sensor->isActive) { media_sens->sensor->isActive = 1; - gf_node_event_out_str((GF_Node *) media_sens->sensor, "isActive"); + gf_node_event_out((GF_Node *) media_sens->sensor, 4/*"isActive"*/); /*set info*/ gf_sg_vrml_mf_reset(& media_sens->sensor->info, GF_SG_VRML_MFSTRING); gf_sg_vrml_mf_alloc(& media_sens->sensor->info, GF_SG_VRML_MFSTRING, 1); media_sens->sensor->info.vals[0] = desc->SegmentName ? gf_strdup(desc->SegmentName) : NULL; - gf_node_event_out_str((GF_Node *) media_sens->sensor, "info"); + gf_node_event_out((GF_Node *) media_sens->sensor, 5/*"info"*/); /*set duration*/ media_sens->sensor->mediaDuration = desc->Duration; - gf_node_event_out_str((GF_Node *) media_sens->sensor, "mediaDuration"); + gf_node_event_out((GF_Node *) media_sens->sensor, 3/*"mediaDuration"*/); /*set seg start time*/ media_sens->sensor->streamObjectStartTime = desc->startTime; - gf_node_event_out_str((GF_Node *) media_sens->sensor, "streamObjectStartTime"); + gf_node_event_out((GF_Node *) media_sens->sensor, 2/*"streamObjectStartTime"*/); GF_LOG(GF_LOG_DEBUG, GF_LOG_INTERACT, ("[ODM%d] Activating media sensor time %g - segment %s\n", odm->OD->objectDescriptorID, time, desc->SegmentName)); } @@ -216,7 +216,7 @@ void mediasensor_update_timing(GF_ObjectManager *odm, Bool is_eos) time -= desc->startTime; if (media_sens->sensor->mediaCurrentTime != time) { media_sens->sensor->mediaCurrentTime = time; - gf_node_event_out_str((GF_Node *) media_sens->sensor, "mediaCurrentTime"); + gf_node_event_out((GF_Node *) media_sens->sensor, 1/*"mediaCurrentTime"*/); } break; } @@ -224,7 +224,7 @@ void mediasensor_update_timing(GF_ObjectManager *odm, Bool is_eos) /*we're after last segment, deactivate*/ if (media_sens->sensor->isActive) { media_sens->sensor->isActive = 0; - gf_node_event_out_str((GF_Node *) media_sens->sensor, "isActive"); + gf_node_event_out((GF_Node *) media_sens->sensor, 4/*"isActive"*/); media_sens->active_seg = count; GF_LOG(GF_LOG_DEBUG, GF_LOG_INTERACT, ("[ODM%d] Deactivating media sensor at time %g: no more segments\n", odm->OD->objectDescriptorID, time)); } @@ -236,7 +236,7 @@ void MS_Stop(MediaSensorStack *st) { if (st->sensor->isActive) { st->sensor->isActive = 0; - gf_node_event_out_str((GF_Node *) st->sensor, "isActive"); + gf_node_event_out((GF_Node *) st->sensor, 4/*"isActive"*/); GF_LOG(GF_LOG_DEBUG, GF_LOG_INTERACT, ("[ODM%d] Deactivating media sensor\n", st->stream->odm->OD->objectDescriptorID)); } diff --git a/src/terminal/network_service.c b/src/terminal/network_service.c index faafa21..1e82aa0 100644 --- a/src/terminal/network_service.c +++ b/src/terminal/network_service.c @@ -157,11 +157,15 @@ static void term_on_connect(void *user_priv, GF_ClientService *service, LPNETCHA /*not a fatal error*/ if (err) gf_term_message(term, "GPAC Cache", "Cannot load cache", err); } + return; } /*this is channel connection*/ ch = gf_term_get_channel(service, netch); - if (!ch) return; + if (!ch) { + GF_LOG(GF_LOG_ERROR, GF_LOG_MEDIA, ("[Terminal] Channel connection ACK error: channel not found\n")); + return; + } /*confirm channel connection even if error - this allow playback of objects even if not all streams are setup*/ gf_term_lock_net(term, 1); @@ -169,13 +173,16 @@ static void term_on_connect(void *user_priv, GF_ClientService *service, LPNETCHA gf_term_lock_net(term, 0); if (err && ((err!=GF_STREAM_NOT_FOUND) || (ch->esd->decoderConfig->streamType!=GF_STREAM_INTERACT))) { - char szMsg[1024]; - sprintf(szMsg, "Channel %d connection failure", ch->esd->ESID); - gf_term_message(term, service->url, szMsg, err); + GF_LOG(GF_LOG_ERROR, GF_LOG_MEDIA, ("[Terminal] Channel %d connection error: %s\n", ch->esd->ESID, gf_error_to_string(err) )); ch->es_state = GF_ESM_ES_UNAVAILABLE; /* return;*/ } + if (ch->odm->mo) { + GF_LOG(GF_LOG_DEBUG, GF_LOG_MEDIA, ("[Terminal] Channel %d connected - %d objects opened\n", ch->esd->ESID, ch->odm->mo->num_open )); + } else { + GF_LOG(GF_LOG_DEBUG, GF_LOG_MEDIA, ("[Terminal] Channel %d connected - not attached to the scene\n", ch->esd->ESID)); + } /*Plays request are skiped until all channels are connected. We send a PLAY on the objecy in case 1-OD user has requested a play 2-this is a channel of the root OD @@ -249,13 +256,15 @@ static Bool is_same_od(GF_ObjectDescriptor *od1, GF_ObjectDescriptor *od2) if (!esd1) return 0; esd2 = gf_list_get(od2->ESDescriptors, 0); if (!esd2) return 0; - if (esd1->ESID==esd2->ESID) return 1; - return 0; + if (esd1->ESID!=esd2->ESID) return 0; + if (esd1->decoderConfig->streamType != esd2->decoderConfig->streamType) return 0; + if (esd1->decoderConfig->objectTypeIndication != esd2->decoderConfig->objectTypeIndication ) return 0; + return 1; } static void term_on_media_add(void *user_priv, GF_ClientService *service, GF_Descriptor *media_desc, Bool no_scene_check) { - u32 i; + u32 i, min_od_id; GF_MediaObject *the_mo; GF_Scene *scene; GF_ObjectManager *odm, *root; @@ -264,12 +273,12 @@ static void term_on_media_add(void *user_priv, GF_ClientService *service, GF_Des root = service->owner; if (!root){ - GF_LOG(GF_LOG_ERROR, GF_LOG_NETWORK, ("[Service %s] has not root, aborting !\n", service->url)); + GF_LOG(GF_LOG_ERROR, GF_LOG_MEDIA, ("[Service %s] has not root, aborting !\n", service->url)); return; } scene = root->subscene ? root->subscene : root->parentscene; - GF_LOG(GF_LOG_DEBUG, GF_LOG_NETWORK, ("[Service %s] %s\n", service->url, media_desc ? "Adding new media object" : "Regenerating scene graph")); + GF_LOG(GF_LOG_DEBUG, GF_LOG_MEDIA, ("[Service %s] %s\n", service->url, media_desc ? "Adding new media object" : "Regenerating scene graph")); if (!media_desc) { if (!no_scene_check) gf_scene_regenerate(scene); return; @@ -294,11 +303,17 @@ static void term_on_media_add(void *user_priv, GF_ClientService *service, GF_Des /*check if we have a mediaObject in the scene not attached and matching this object*/ the_mo = NULL; odm = NULL; + min_od_id = 0; for (i=0; iscene_objects); i++) { char *frag, *ext; GF_ESD *esd; + char *url; GF_MediaObject *mo = gf_list_get(scene->scene_objects, i); if (!mo->odm) continue; + + if ((mo->OD_ID != GF_MEDIA_EXTERNAL_ID) && (min_od_idOD_ID)) + min_od_id = mo->OD_ID; + /*already assigned object - this may happen since the compositor has no control on when objects are declared by the service, therefore opening file#video and file#audio may result in the objects being declared twice if the service doesn't keep track of declared objects*/ @@ -328,7 +343,12 @@ static void term_on_media_add(void *user_priv, GF_ClientService *service, GF_Des frag = strchr(ext, '='); ext[0] = 0; } - if (!strstr(service->url, mo->URLs.vals[0].url)) { + url = mo->URLs.vals[0].url; + if (!strnicmp(url, "file://localhost", 16)) url += 16; + else if (!strnicmp(url, "file://", 7)) url += 7; + else if (!strnicmp(url, "gpac://", 7)) url += 7; + + if (!strstr(service->url, url)) { if (ext) ext[0] = '#'; continue; } @@ -364,7 +384,6 @@ static void term_on_media_add(void *user_priv, GF_ClientService *service, GF_Des odm = mo->odm; break; } - if (!odm) { odm = gf_odm_new(); odm->term = term; @@ -373,12 +392,22 @@ static void term_on_media_add(void *user_priv, GF_ClientService *service, GF_Des } odm->OD = od; odm->mo = the_mo; - if (the_mo) the_mo->OD_ID = od->objectDescriptorID; odm->flags |= GF_ODM_NOT_IN_OD_STREAM; - gf_term_lock_net(term, 0); + if (!od->objectDescriptorID) { + od->objectDescriptorID = min_od_id + 1; + } + if (the_mo) the_mo->OD_ID = od->objectDescriptorID; + if (!scene->selected_service_id) + scene->selected_service_id = od->ServiceID; + + GF_LOG(GF_LOG_DEBUG, GF_LOG_MEDIA, ("[ODM%d] setup object - MO %08x\n", odm->OD->objectDescriptorID, odm->mo)); gf_odm_setup_object(odm, service); + /*unlock net once the object has been added to the scene, otherwise we may have another modules declaring an object with ID 0 from + another thread, which will assert (only one object with a givne OD ID)*/ + gf_term_lock_net(term, 0); + /*OD inserted by service: resetup scene*/ if (!no_scene_check && scene->is_dynamic_scene) gf_scene_regenerate(scene); } @@ -422,12 +451,14 @@ static void term_on_command(void *user_priv, GF_ClientService *service, GF_Netwo GF_Channel *ch = (GF_Channel *)gf_list_get(odm->channels, j); if (ch->service != service) continue; if (ch->es_state != GF_ESM_ES_RUNNING) continue; - if (!ch->MaxBuffer || ch->dispatch_after_db || ch->bypass_sl_and_db || ch->IsEndOfStream) continue; + if (/*!ch->MaxBuffer || */ch->dispatch_after_db || ch->bypass_sl_and_db || ch->IsEndOfStream) continue; if (ch->MaxBuffer>com->buffer.max) com->buffer.max = ch->MaxBuffer; if (ch->MinBufferbuffer.min) com->buffer.min = ch->MinBuffer; if (ch->IsClockInit && (u32) ch->BufferTime < com->buffer.occupancy) { - if (odm->codec->CB->UnitCount <= odm->codec->CB->Min) { - com->buffer.occupancy = 0; + /*if we don't have more units (compressed or not) than requested max for the composition memory, request more data*/ + if (odm->codec->CB->UnitCount + ch->AU_Count <= odm->codec->CB->Capacity) { +// com->buffer.occupancy = 0; + com->buffer.occupancy = ch->BufferTime; } else { com->buffer.occupancy = ch->BufferTime; } @@ -435,6 +466,7 @@ static void term_on_command(void *user_priv, GF_ClientService *service, GF_Netwo } } gf_mx_v(term->mm_mx); +// fprintf(stdout, "Buffer occupancy %d\n", com->buffer.occupancy); if (com->buffer.occupancy==(u32) -1) com->buffer.occupancy = 0; return; } @@ -507,34 +539,37 @@ Bool net_check_interface(GF_InputService *ifce) return 1; } -static void fetch_mime_io(void *dnld, GF_NETIO_Parameter *parameter) -{ - /* - * souchay : - * NOTE for shoutcast servers and dumb servers - * if HEAD method is not undertood, it will be handled into HTTP 501 : method not implemented - */ - if (parameter->msg_type==GF_NETIO_GET_METHOD) parameter->name = "HEAD"; -} - -static char *get_mime_type(GF_Terminal *term, const char *url, GF_Err *ret_code) +static char *get_mime_type(GF_Terminal *term, const char *url, GF_Err *ret_code, GF_DownloadSession **the_session) { char * ret = NULL; GF_DownloadSession * sess; (*ret_code) = GF_OK; if (strnicmp(url, "http", 4)) return NULL; - sess = gf_dm_sess_new(term->downloader, (char *) url, GF_NETIO_SESSION_NOT_THREADED | GF_NETIO_SESSION_FORCE_NO_CACHE, fetch_mime_io, NULL, ret_code); + + /*don't use any NetIO and don't issue a HEAD command, always go for GET and store the session */ + sess = gf_dm_sess_new(term->downloader, (char *) url, GF_NETIO_SESSION_NOT_THREADED | GF_NETIO_SESSION_NOT_CACHED, NULL, NULL, ret_code); if (!sess) { if (strstr(url, "rtsp://") || strstr(url, "rtp://") || strstr(url, "udp://") || strstr(url, "tcp://") ) (*ret_code) = GF_OK; return NULL; } else { - const char * mime = gf_dm_sess_mime_type(sess); - if (mime){ - ret = gf_strdup(mime); - } + /*start processing the resource, and stop if error or as soon as we get data*/ + while (1) { + *ret_code = gf_dm_sess_process_headers(sess); + if (*ret_code) break; + if (gf_dm_sess_get_status(sess)>=GF_NETIO_DATA_EXCHANGE) { + const char * mime = gf_dm_sess_mime_type(sess); + if (mime) ret = gf_strdup(mime); + break; + } + } + } + + if (the_session && (*ret_code == GF_OK)) { + *the_session = sess; + } else { + gf_dm_sess_del(sess); } - gf_dm_sess_del(sess); return ret; } @@ -561,13 +596,15 @@ static Bool check_extension(const char *szExtList, char *szExt) } -static GF_InputService *gf_term_can_handle_service(GF_Terminal *term, const char *url, const char *parent_url, Bool no_mime_check, char **out_url, GF_Err *ret_code) +static GF_InputService *gf_term_can_handle_service(GF_Terminal *term, const char *url, const char *parent_url, Bool no_mime_check, char **out_url, GF_Err *ret_code, GF_DownloadSession **the_session) { u32 i; GF_Err e; char *sURL, *qm, *frag, *ext, *mime_type, *url_res; char szExt[50]; + const char *force_module = NULL; GF_InputService *ifce; + Bool skip_mime = 0; memset(szExt, 0, sizeof(szExt)); (*ret_code) = GF_OK; @@ -581,8 +618,15 @@ static GF_InputService *gf_term_can_handle_service(GF_Terminal *term, const char goto exit; } + if (!strnicmp(url, "libplayer://", 12)) { + force_module = "LibPlayer"; + } + /*used by GUIs scripts to skip URL concatenation*/ if (!strncmp(url, "gpac://", 7)) sURL = gf_strdup(url+7); + /*opera-style localhost URLs*/ + else if (!strncmp(url, "file://localhost", 16)) sURL = gf_strdup(url+16); + else if (parent_url) sURL = gf_url_concatenate(parent_url, url); /*path absolute*/ @@ -591,6 +635,7 @@ static GF_InputService *gf_term_can_handle_service(GF_Terminal *term, const char if (gf_url_is_local(sURL)) gf_url_to_fs_path(sURL); + if (the_session) *the_session = NULL; if (no_mime_check) { mime_type = NULL; } else { @@ -598,7 +643,7 @@ static GF_InputService *gf_term_can_handle_service(GF_Terminal *term, const char TRYTOFIXME: it would be nice to reuse the downloader created while fetching the mime type, however we don't know if the plugin will want it threaded or not.... */ - mime_type = get_mime_type(term, sURL, &e); + mime_type = get_mime_type(term, sURL, &e, the_session); if (e) { (*ret_code) = e; goto exit; @@ -611,14 +656,13 @@ static GF_InputService *gf_term_can_handle_service(GF_Terminal *term, const char || !stricmp(mime_type, "application/octet-stream") ) ) { - gf_free(mime_type); - mime_type = NULL; + skip_mime = 1; } ifce = NULL; /*load from mime type*/ - if (mime_type) { + if (mime_type && !skip_mime) { const char *sPlug = gf_cfg_get_key(term->user->config, "MimeTypes", mime_type); GF_LOG(GF_LOG_DEBUG, GF_LOG_MEDIA, ("[Terminal] Mime type found: %s\n", mime_type)); if (!sPlug) { @@ -630,6 +674,10 @@ static GF_InputService *gf_term_can_handle_service(GF_Terminal *term, const char sPlug += 2; GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("%s:%d FOUND matching module %s\n", __FILE__, __LINE__, sPlug)); ifce = (GF_InputService *) gf_modules_load_interface_by_name(term->user->modules, sPlug, GF_NET_CLIENT_INTERFACE); + if (force_module && ifce && !strstr(ifce->module_name, force_module)) { + gf_modules_close_interface((GF_BaseInterface *) ifce); + ifce = NULL; + } if (ifce && !net_check_interface(ifce) ) { gf_modules_close_interface((GF_BaseInterface *) ifce); ifce = NULL; @@ -697,7 +745,12 @@ static GF_InputService *gf_term_can_handle_service(GF_Terminal *term, const char GF_LOG(GF_LOG_DEBUG, GF_LOG_MEDIA, ("[Terminal] module[%i]=%s, mime=%s, cannot be loaded for GF_NET_CLIENT_INTERFACE.\n", i, sPlug, sMime)); continue; } - if (!net_check_interface(ifce)) { + if (force_module && ifce && !strstr(ifce->module_name, force_module)) { + gf_modules_close_interface((GF_BaseInterface *) ifce); + ifce = NULL; + continue; + } + if (ifce && !net_check_interface(ifce)) { gf_modules_close_interface((GF_BaseInterface *) ifce); ifce = NULL; continue; @@ -713,17 +766,25 @@ static GF_InputService *gf_term_can_handle_service(GF_Terminal *term, const char ifce = (GF_InputService *) gf_modules_load_interface(term->user->modules, i, GF_NET_CLIENT_INTERFACE); if (!ifce) continue; GF_LOG(GF_LOG_DEBUG, GF_LOG_MEDIA, ("[Terminal] Checking if module %s supports URL %s\n", ifce->module_name, sURL)); - if (net_check_interface(ifce) && ifce->CanHandleURL(ifce, sURL)) break; + if (force_module && ifce && !strstr(ifce->module_name, force_module)) { + } + else if (net_check_interface(ifce) && ifce->CanHandleURL(ifce, sURL)) { + break; + } gf_modules_close_interface((GF_BaseInterface *) ifce); ifce = NULL; } } exit: if (!ifce){ - GF_LOG(GF_LOG_WARNING, GF_LOG_MEDIA, ("[Terminal] Did not find any input plugin for URL %s (%s)\n", sURL ? sURL : url, mime_type ? mime_type : "no mime type")); + GF_LOG(GF_LOG_ERROR, GF_LOG_MEDIA, ("[Terminal] Did not find any input plugin for URL %s (%s)\n", sURL ? sURL : url, mime_type ? mime_type : "no mime type")); if (sURL) gf_free(sURL); if ( (*ret_code) == GF_OK) (*ret_code) = GF_NOT_SUPPORTED; *out_url = NULL; + + if (the_session && *the_session) { + gf_dm_sess_del(*the_session); + } } else { *out_url = sURL; GF_LOG(GF_LOG_INFO, GF_LOG_MEDIA, ("[Terminal] Found input plugin %s for URL %s (%s)\n", ifce->module_name, sURL, mime_type ? mime_type : "no mime type")); @@ -736,9 +797,10 @@ exit: GF_ClientService *gf_term_service_new(GF_Terminal *term, struct _od_manager *owner, const char *url, const char *parent_url, GF_Err *ret_code) { + GF_DownloadSession *download_session; char *sURL; GF_ClientService *serv; - GF_InputService *ifce = gf_term_can_handle_service(term, url, parent_url, 0, &sURL, ret_code); + GF_InputService *ifce = gf_term_can_handle_service(term, url, parent_url, 0, &sURL, ret_code, &download_session); if (!ifce) return NULL; GF_SAFEALLOC(serv, GF_ClientService); @@ -748,6 +810,7 @@ GF_ClientService *gf_term_service_new(GF_Terminal *term, struct _od_manager *own serv->url = sURL; serv->Clocks = gf_list_new(); serv->dnloads = gf_list_new(); + serv->pending_service_session = download_session; gf_list_add(term->net_services, serv); return serv; @@ -761,7 +824,7 @@ Bool gf_term_is_supported_url(GF_Terminal *term, const char *fileName, Bool use_ char *parent_url = NULL; if (use_parent_url && term->root_scene) parent_url = term->root_scene->root_od->net_service->url; - ifce = gf_term_can_handle_service(term, fileName, parent_url, no_mime_check, &sURL, &e); + ifce = gf_term_can_handle_service(term, fileName, parent_url, no_mime_check, &sURL, &e, NULL); if (!ifce) return 0; gf_modules_close_interface((GF_BaseInterface *) ifce); gf_free(sURL); @@ -778,7 +841,8 @@ Bool gf_term_service_can_handle_url(GF_ClientService *ns, char *url) GF_Err gf_term_service_command(GF_ClientService *ns, GF_NetworkCommand *com) { - return ns->ifce->ServiceCommand(ns->ifce, com); + if (ns) return ns->ifce->ServiceCommand(ns->ifce, com); + return GF_OK; } GF_Err gf_term_channel_get_sl_packet(GF_ClientService *ns, LPNETCHANNEL channel, char **out_data_ptr, u32 *out_data_size, GF_SLHeader *out_sl_hdr, Bool *sl_compressed, GF_Err *out_reception_status, Bool *is_new_data) { @@ -815,6 +879,15 @@ void gf_term_on_command(GF_ClientService *service, GF_NetworkCommand *com, GF_Er assert(service); term_on_command(service->term, service, com, response); } + +GF_EXPORT +Bool gf_term_on_service_event(GF_ClientService *service, GF_Event *service_event) +{ + assert(service); + if (service->term->user->EventProc) return service->term->user->EventProc(service->term->user->opaque, service_event); + return 0; +} + GF_EXPORT void gf_term_on_sl_packet(GF_ClientService *service, LPNETCHANNEL ns, char *data, u32 data_size, GF_SLHeader *hdr, GF_Err reception_status) { @@ -836,11 +909,13 @@ const char *gf_term_get_service_url(GF_ClientService *service) return service->url; } -void NM_DeleteService(GF_ClientService *ns) +void gf_term_delete_net_service(GF_ClientService *ns) { const char *sOpt = gf_cfg_get_key(ns->term->user->config, "StreamingCache", "AutoSave"); if (ns->cache) gf_term_service_cache_close(ns, (sOpt && !stricmp(sOpt, "yes")) ? 1 : 0); + if (ns->pending_service_session) gf_dm_sess_del(ns->pending_service_session); + assert(!ns->nb_odm_users); assert(!ns->nb_ch_users); assert(!ns->owner); @@ -873,7 +948,7 @@ GF_DownloadSession *gf_term_download_new(GF_ClientService *service, const char * { GF_Err e; GF_DownloadSession * sess; - char *sURL; + char *sURL, *orig_url; if (!service){ GF_LOG(GF_LOG_ERROR, GF_LOG_NETWORK, ("[HTTP] service is null, cannot create new download session for %s.\n", url)); return NULL; @@ -883,7 +958,21 @@ GF_DownloadSession *gf_term_download_new(GF_ClientService *service, const char * /*path was absolute*/ if (!sURL) sURL = gf_strdup(url); assert( service->term ); - sess = gf_dm_sess_new(service->term->downloader, sURL, flags, user_io, cbk, &e); + + orig_url = service->pending_service_session ? (char *) gf_dm_sess_get_original_resource_name(service->pending_service_session) : NULL; + /*this will take care of URL formatting (%20 etc ..) */ + if (orig_url) orig_url = gf_url_concatenate(service->url, orig_url); + + if (orig_url && !strcmp(orig_url, sURL)) { + sess = service->pending_service_session; + service->pending_service_session = NULL; + /*resetup*/ + gf_dm_sess_reassign(sess, flags, user_io, cbk); + } else { + sess = gf_dm_sess_new(service->term->downloader, sURL, flags, user_io, cbk, &e); + } + if (orig_url) gf_free(orig_url); + if (!sess){ GF_LOG(GF_LOG_ERROR, GF_LOG_NETWORK, ("[HTTP] session could not be created for %s : %s. service url=%s, url=%s.\n", sURL, gf_error_to_string(e), service->url, url)); gf_free(sURL); @@ -958,7 +1047,7 @@ void gf_term_service_del(GF_ClientService *ns) if (! * (u32 *) ns) { gf_dm_sess_del((GF_DownloadSession * ) ns); } else { - NM_DeleteService(ns); + gf_term_delete_net_service(ns); } } diff --git a/src/terminal/object_browser.c b/src/terminal/object_browser.c index 346ac01..227a82b 100644 --- a/src/terminal/object_browser.c +++ b/src/terminal/object_browser.c @@ -106,6 +106,20 @@ void gf_term_select_object(GF_Terminal *term, GF_ObjectManager *odm) gf_scene_select_object(term->root_scene, odm); } +u32 gf_term_get_current_service_id(GF_Terminal *term) +{ + SFURL *the_url; + GF_MediaObject *mo; + if (!term || !term->root_scene) return 0; + if (! term->root_scene->is_dynamic_scene) return term->root_scene->root_od->OD->ServiceID; + + if (term->root_scene->visual_url.OD_ID || term->root_scene->visual_url.url) the_url = &term->root_scene->visual_url; + else the_url = &term->root_scene->audio_url; + + mo = gf_scene_find_object(term->root_scene, the_url->OD_ID, the_url->url); + if (mo && mo->odm && mo->odm->OD) return mo->odm->OD->ServiceID; + return 0; +} static void get_codec_stats(GF_Codec *dec, GF_MediaInfo *info) @@ -195,6 +209,8 @@ GF_Err gf_term_get_object_info(GF_Terminal *term, GF_ObjectManager *odm, GF_Medi info->service_handler = odm->net_service->ifce->module_name; info->service_url = odm->net_service->url; if (odm->net_service->owner == odm) info->owns_service = 1; + } else if ((odm->subscene && odm->subscene->graph_attached) || (odm->codec)) { + info->service_url = "No associated network Service"; } else { info->service_url = "Service not found or error"; } @@ -361,7 +377,7 @@ GF_Err gf_term_dump_scene(GF_Terminal *term, char *rad_name, char **filename, Bo mode = xml_dump ? GF_SM_DUMP_AUTO_XML : GF_SM_DUMP_AUTO_TXT; /*figure out best dump format based on extension*/ - ext = strrchr(odm->net_service->url, '.'); + ext = odm->net_service ? strrchr(odm->net_service->url, '.') : NULL; if (ext) { strcpy(szExt, ext); strlwr(szExt); diff --git a/src/terminal/object_manager.c b/src/terminal/object_manager.c index 899cb38..66009aa 100644 --- a/src/terminal/object_manager.c +++ b/src/terminal/object_manager.c @@ -88,6 +88,7 @@ void gf_odm_del(GF_ObjectManager *odm) #endif if (odm->mo) odm->mo->odm = NULL; + if (odm->raw_frame_sema) gf_sema_del(odm->raw_frame_sema); gf_list_del(odm->channels); odm->channels = NULL; @@ -123,9 +124,8 @@ void gf_odm_disconnect(GF_ObjectManager *odm, Bool do_remove) { GF_Channel *ch; - if (do_remove) odm->state = GF_ODM_STATE_DESTROYED; + if (do_remove) odm->flags |= GF_ODM_DESTROYED; gf_odm_stop(odm, 1); - if (do_remove) odm->state = GF_ODM_STATE_DESTROYED; /*disconnect sub-scene*/ if (odm->subscene) gf_scene_disconnect(odm->subscene, do_remove); @@ -335,6 +335,10 @@ void gf_odm_setup_entry_point(GF_ObjectManager *odm, const char *service_sub_url gf_odm_setup_object(odm, odm->net_service); gf_term_lock_net(term, 0); + /*it may happen that this object was inserted in a dynamic scene from a service through a URL redirect. In which case, + the scene regeneration might not have been completed since the redirection was not done yet - force a scene regenerate*/ + if (odm->parentscene && odm->parentscene->is_dynamic_scene) + gf_scene_regenerate(odm->parentscene); return; err_exit: @@ -359,7 +363,7 @@ static GF_ESD *od_get_esd(GF_ObjectDescriptor *OD, u16 ESID) return NULL; } -#ifdef UNUSED_FUNC +#ifdef GPAC_UNUSED_FUNC static void ODM_SelectAlternateStream(GF_ObjectManager *odm, u32 lang_code, u8 stream_type) { u32 i; @@ -409,7 +413,7 @@ static void ODM_SelectAlternateStream(GF_ObjectManager *odm, u32 lang_code, u8 s } } } -#endif /* UNUSED_FUNC */ +#endif /*GPAC_UNUSED_FUNC*/ /*Validate the streams in this OD, and check if we have to setup an inline scene*/ @@ -556,7 +560,7 @@ void gf_odm_setup_object(GF_ObjectManager *odm, GF_ClientService *serv) gf_odf_desc_del((GF_Descriptor *)odm->OD); odm->OD = NULL; odm->net_service = NULL; - GF_LOG(GF_LOG_DEBUG, GF_LOG_MEDIA, ("[Terminal] Object redirection to %s\n", url)); + GF_LOG(GF_LOG_DEBUG, GF_LOG_MEDIA, ("[Terminal] Object redirection to %s (MO %08x)\n", url, odm->mo)); /*if object is a scene, create the inline before connecting the object. This is needed in irder to register the nodes using the resource for event @@ -610,7 +614,6 @@ void gf_odm_setup_object(GF_ObjectManager *odm, GF_ClientService *serv) /*avoid channels PLAY request when confirming connection (sync network service)*/ odm->state = GF_ODM_STATE_IN_SETUP; - gf_odm_lock(odm, 1); i=0; while ((esd = (GF_ESD *)gf_list_enum(odm->OD->ESDescriptors, &i)) ) { @@ -642,7 +645,6 @@ void gf_odm_setup_object(GF_ObjectManager *odm, GF_ClientService *serv) gf_odm_start(odm, 0); } - evt.type = GF_EVENT_CONNECT; evt.connect.is_connected = 1; gf_term_forward_event(odm->term, &evt, 0, 1); @@ -670,8 +672,10 @@ void gf_odm_setup_object(GF_ObjectManager *odm, GF_ClientService *serv) } /*case 3: if the object is inserted from a broadcast, start it if not already done. This covers cases where the scene (BIFS, LASeR) and the media (images) are both carrouseled and the carrousels are interleaved. If we wait for the scene to trigger a PLAY, we will likely - have to wait for an entire image carousel period to start filling the buffers, which is sub-optimal*/ - else if (!odm->state && (odm->flags & GF_ODM_NO_TIME_CTRL)) { + have to wait for an entire image carousel period to start filling the buffers, which is sub-optimal + we also force a prefetch for object declared outside the OD stream to make sure we don't loose any data before object declaration and play + as can be the case with MPEG2 TS (first video packet right after the PMT) - this should be refined*/ + else if (!odm->state && ((odm->flags & GF_ODM_NO_TIME_CTRL) || (odm->flags & GF_ODM_NOT_IN_OD_STREAM)) && (odm->parentscene->selected_service_id == odm->OD->ServiceID)) { GF_LOG(GF_LOG_INFO, GF_LOG_MEDIA, ("[ODM%d] Inserted from broadcast - forcing play\n", odm->OD->objectDescriptorID)); gf_odm_start(odm, 2); odm->flags |= GF_ODM_PREFETCH; @@ -748,10 +752,10 @@ GF_Err gf_odm_setup_es(GF_ObjectManager *odm, GF_ESD *esd, GF_ClientService *ser esd->OCRESID = ck->clockID; } /*for dynamic scene, force all streams to be sync on main OD stream (one timeline, no need to reload ressources)*/ - else if (odm->term->root_scene->is_dynamic_scene) { - GF_ObjectManager *root_od = odm->term->root_scene->root_od; - if (gf_list_count(root_od->net_service->Clocks)==1) { - ck = (GF_Clock*)gf_list_get(root_od->net_service->Clocks, 0); + else if (odm->parentscene && odm->parentscene->is_dynamic_scene && !odm->subscene) { + GF_ObjectManager *parent_od = odm->parentscene->root_od; + if (parent_od->net_service && (gf_list_count(parent_od->net_service->Clocks)==1)) { + ck = (GF_Clock*)gf_list_get(parent_od->net_service->Clocks, 0); esd->OCRESID = ck->clockID; goto clock_setup; } @@ -934,6 +938,15 @@ clock_setup: } } } + { + GF_CodecCapability cap; + cap.CapCode = GF_CODEC_RAW_MEDIA; + gf_codec_get_capability(dec, &cap); + if (cap.cap.valueInt) { + dec->flags |= GF_ESM_CODEC_IS_RAW_MEDIA; + dec->process = gf_codec_process_private_media; + } + } ch->es_state = GF_ESM_ES_SETUP; ch->odm = odm; @@ -1017,7 +1030,7 @@ GF_Err gf_odm_post_es_setup(GF_Channel *ch, GF_Codec *dec, GF_Err had_err) if (ch->esd->URLString) { strcpy(szURL, ch->esd->URLString); } else { - sprintf(szURL, "ES_ID=%ud", ch->esd->ESID); + sprintf(szURL, "ES_ID=%u", ch->esd->ESID); } /*connect before setup: this is needed in case the decoder cfg is wrong, we may need to get it from @@ -1181,8 +1194,6 @@ void gf_odm_start(GF_ObjectManager *odm, u32 media_queue_state) Bool skip_register = 1; gf_term_lock_media_queue(odm->term, 1); - odm->flags &= ~GF_ODM_PREFETCH; - /*only if not open & ready (not waiting for ACK on channel setup)*/ if (!odm->pending_channels && odm->OD) { /*object is not started - issue channel setup requests*/ @@ -1253,6 +1264,14 @@ void gf_odm_play(GF_ObjectManager *odm) #endif GF_Clock *parent_ck = NULL; + if (odm->codec && odm->codec->CB && !(odm->flags & GF_ODM_PREFETCH)) { + /*reset*/ + gf_cm_set_status(odm->codec->CB, CB_STOP); + odm->codec->CB->HasSeenEOS = 0; + } + odm->flags &= ~GF_ODM_PREFETCH; + + if (odm->parentscene) { parent_ck = gf_odm_get_media_clock(odm->parentscene->root_od); if (!gf_odm_shares_clock(odm, parent_ck)) parent_ck = NULL; @@ -1381,11 +1400,6 @@ void gf_odm_play(GF_ObjectManager *odm) /*start codecs last (otherwise we end up pulling data from channels not yet connected->pbs when seeking)*/ if (odm->codec) { - /*reset*/ - if (odm->codec->CB) { - gf_cm_set_status(odm->codec->CB, CB_STOP); - odm->codec->CB->HasSeenEOS = 0; - } gf_term_start_codec(odm->codec); } else if (odm->subscene) { if (odm->subscene->scene_codec) gf_term_start_codec(odm->subscene->scene_codec); @@ -1449,13 +1463,30 @@ void gf_odm_stop(GF_ObjectManager *odm, Bool force_close) gf_term_lock_media_queue(odm->term, 0); /*little opt for image codecs: don't actually stop the OD*/ - if (!force_close && odm->codec && odm->codec->CB) { + if (!force_close && odm->codec && odm->codec->CB && !odm->codec->CB->no_allocation) { if (odm->codec->CB->Capacity==1) return; } + /*if raw media, stop all channels before sending stop command to network, to avoid new media frames to be set + as pending and thereby locking the channel associated service*/ + if (odm->codec && odm->codec->flags & GF_ESM_CODEC_IS_RAW_MEDIA) { + i=0; + while ((ch = (GF_Channel*)gf_list_enum(odm->channels, &i)) ) { + gf_es_stop(ch); + } + gf_term_stop_codec(odm->codec); + /*and wait until frame has been consumed by the renderer + we don't use semaphore wait as the raw channel may already be pending on the semaphore*/ + while (odm->codec->CB->UnitCount) { + gf_sleep(1); + } + } + + /*object was not unlocked, decoders were not started*/ if (odm->state==GF_ODM_STATE_BLOCKED) { odm->current_time = 0; + gf_sema_notify(odm->raw_frame_sema, 1); return; } diff --git a/src/terminal/scene.c b/src/terminal/scene.c index b1ce920..ebfdaab 100644 --- a/src/terminal/scene.c +++ b/src/terminal/scene.c @@ -29,9 +29,10 @@ /*for URL concatenation*/ #include #include +#include #include "media_control.h" -#include #include +#include /*SVG properties*/ #ifndef GPAC_DISABLE_SVG @@ -194,6 +195,8 @@ void gf_scene_disconnect(GF_Scene *scene, Bool for_shutdown) GF_SceneDecoder *dec = NULL; if (scene->scene_codec) dec = (GF_SceneDecoder *)scene->scene_codec->decio; + GF_LOG(GF_LOG_DEBUG, GF_LOG_MEDIA, ("[Scene] disconnecting\n")); + gf_term_lock_compositor(scene->root_od->term, 1); /*disconnect / kill all objects BEFORE reseting the scene graph since we have @@ -257,7 +260,7 @@ void gf_scene_disconnect(GF_Scene *scene, Bool for_shutdown) } #endif - if (scene->graph_attached && (scene->root_od->term->root_scene == scene)) { + if (scene->root_od->term->root_scene == scene) { gf_sc_set_scene(scene->root_od->term->compositor, NULL); } /*release the scene*/ @@ -303,51 +306,54 @@ static void gf_scene_insert_object(GF_Scene *scene, GF_MediaObject *mo, Bool loc root_od = scene->root_od; url = mo->URLs.vals[0].url; - if (!stricmp(url, "KeySensor")) { - GF_ESD *esd = gf_odf_desc_esd_new(0); - esd->decoderConfig->streamType = GF_STREAM_INTERACT; - esd->decoderConfig->objectTypeIndication = 1; - gf_free(esd->decoderConfig->decoderSpecificInfo->data); - esd->decoderConfig->decoderSpecificInfo->data = gf_strdup(" KeySensor"); - esd->decoderConfig->decoderSpecificInfo->data[0] = 9; - esd->decoderConfig->decoderSpecificInfo->dataLength = 10; - esd->ESID = esd->OCRESID = 65534; - gf_list_add(odm->OD->ESDescriptors, esd); - } else if (!stricmp(url, "StringSensor")) { - GF_ESD *esd = gf_odf_desc_esd_new(0); - esd->decoderConfig->streamType = GF_STREAM_INTERACT; - esd->decoderConfig->objectTypeIndication = 1; - gf_free(esd->decoderConfig->decoderSpecificInfo->data); - esd->decoderConfig->decoderSpecificInfo->data = gf_strdup(" StringSensor"); - esd->decoderConfig->decoderSpecificInfo->data[0] = 12; - esd->decoderConfig->decoderSpecificInfo->dataLength = 13; - esd->ESID = esd->OCRESID = 65534; - gf_list_add(odm->OD->ESDescriptors, esd); - } else if (!stricmp(url, "Mouse")) { - GF_ESD *esd = gf_odf_desc_esd_new(0); - esd->decoderConfig->streamType = GF_STREAM_INTERACT; - esd->decoderConfig->objectTypeIndication = 1; - gf_free(esd->decoderConfig->decoderSpecificInfo->data); - esd->decoderConfig->decoderSpecificInfo->data = gf_strdup(" Mouse"); - esd->decoderConfig->decoderSpecificInfo->data[0] = 5; - esd->decoderConfig->decoderSpecificInfo->dataLength = 6; - esd->ESID = esd->OCRESID = 65534; - gf_list_add(odm->OD->ESDescriptors, esd); - } else { - if (!keep_fragment) { - char *frag = strrchr(mo->URLs.vals[0].url, '#'); - if (frag) frag[0] = 0; - odm->OD->URLString = gf_strdup(mo->URLs.vals[0].url); - if (frag) frag[0] = '#'; + if (url) { + if (!stricmp(url, "KeySensor")) { + GF_ESD *esd = gf_odf_desc_esd_new(0); + esd->decoderConfig->streamType = GF_STREAM_INTERACT; + esd->decoderConfig->objectTypeIndication = 1; + gf_free(esd->decoderConfig->decoderSpecificInfo->data); + esd->decoderConfig->decoderSpecificInfo->data = gf_strdup(" KeySensor"); + esd->decoderConfig->decoderSpecificInfo->data[0] = 9; + esd->decoderConfig->decoderSpecificInfo->dataLength = 10; + esd->ESID = esd->OCRESID = 65534; + gf_list_add(odm->OD->ESDescriptors, esd); + } else if (!stricmp(url, "StringSensor")) { + GF_ESD *esd = gf_odf_desc_esd_new(0); + esd->decoderConfig->streamType = GF_STREAM_INTERACT; + esd->decoderConfig->objectTypeIndication = 1; + gf_free(esd->decoderConfig->decoderSpecificInfo->data); + esd->decoderConfig->decoderSpecificInfo->data = gf_strdup(" StringSensor"); + esd->decoderConfig->decoderSpecificInfo->data[0] = 12; + esd->decoderConfig->decoderSpecificInfo->dataLength = 13; + esd->ESID = esd->OCRESID = 65534; + gf_list_add(odm->OD->ESDescriptors, esd); + } else if (!stricmp(url, "Mouse")) { + GF_ESD *esd = gf_odf_desc_esd_new(0); + esd->decoderConfig->streamType = GF_STREAM_INTERACT; + esd->decoderConfig->objectTypeIndication = 1; + gf_free(esd->decoderConfig->decoderSpecificInfo->data); + esd->decoderConfig->decoderSpecificInfo->data = gf_strdup(" Mouse"); + esd->decoderConfig->decoderSpecificInfo->data[0] = 5; + esd->decoderConfig->decoderSpecificInfo->dataLength = 6; + esd->ESID = esd->OCRESID = 65534; + gf_list_add(odm->OD->ESDescriptors, esd); } else { - odm->OD->URLString = gf_strdup(mo->URLs.vals[0].url); + if (!keep_fragment) { + char *frag = strrchr(mo->URLs.vals[0].url, '#'); + if (frag) frag[0] = 0; + odm->OD->URLString = gf_strdup(mo->URLs.vals[0].url); + if (frag) frag[0] = '#'; + } else { + odm->OD->URLString = gf_strdup(mo->URLs.vals[0].url); + } + if (lock_timelines) odm->flags |= GF_ODM_INHERIT_TIMELINE; } - if (lock_timelines) odm->flags |= GF_ODM_INHERIT_TIMELINE; } /*HACK - temp storage of sync ref*/ if (sync_ref) odm->ocr_codec = (struct _generic_codec *)sync_ref; + GF_LOG(GF_LOG_DEBUG, GF_LOG_MEDIA, ("[Scene] Inserting new MediaObject %08x for resource %s\n", odm->mo, url)); gf_list_add(scene->resources, odm); if (original_parent_scene) { gf_odm_setup_object(odm, original_parent_scene->root_od->net_service); @@ -378,6 +384,8 @@ void gf_scene_remove_object(GF_Scene *scene, GF_ObjectManager *odm, Bool for_shu gf_list_del_item(scene->resources, odm); gf_term_lock_net(odm->term, 0); + GF_LOG(GF_LOG_DEBUG, GF_LOG_MEDIA, ("[Scene] removing ODM %d\n", odm->OD ? odm->OD->objectDescriptorID : GF_MEDIA_EXTERNAL_ID)); + i=0; while ((obj = (GF_MediaObject*)gf_list_enum(scene->scene_objects, &i))) { @@ -641,7 +649,7 @@ restart: obj = NULL; i=0; while ((obj = (GF_MediaObject *)gf_list_enum(scene->scene_objects, &i))) { - if (obj->odm && ((obj->odm->state == GF_ODM_STATE_DESTROYED) || (obj->odm->action_type == GF_ODM_ACTION_DELETE)) ) + if (obj->odm && ((obj->odm->flags & GF_ODM_DESTROYED) || (obj->odm->action_type == GF_ODM_ACTION_DELETE)) ) continue; if ( @@ -723,6 +731,8 @@ void gf_scene_setup_object(GF_Scene *scene, GF_ObjectManager *odm) GF_MediaObject *obj; u32 i; + GF_LOG(GF_LOG_DEBUG, GF_LOG_MEDIA, ("[Scene] Setup object manager %d (MO %p)\n", odm->OD->objectDescriptorID, odm->mo)); + /*an object may already be assigned (when using ESD URLs, setup is performed twice)*/ if (odm->mo != NULL) goto existing; @@ -875,7 +885,7 @@ void gf_scene_force_size_to_video(GF_Scene *scene, GF_MediaObject *mo) { u32 w, h; gf_scene_get_video_size(mo, &w, &h); - gf_scene_force_size(scene, w, h); + if (w && h) gf_scene_force_size(scene, w, h); } #ifndef GPAC_DISABLE_VRML @@ -998,7 +1008,7 @@ static void set_media_url(GF_Scene *scene, SFURL *media_url, GF_Node *node, MFU /*regenerates the scene graph for dynamic scene. This will also try to reload any previously presented streams. Note that in the usual case the scene is generated just once when receiving the first OD AU (ressources are NOT destroyed when seeking), but since the network may need -to update the OD ressources, we still kake care of it*/ +to update the OD ressources, we still take care of it*/ void gf_scene_regenerate(GF_Scene *scene) { GF_Node *n1, *n2; @@ -1180,6 +1190,7 @@ void gf_scene_select_object(GF_Scene *scene, GF_ObjectManager *odm) mt->startTime = gf_scene_get_time(scene); gf_node_changed((GF_Node *)mt, NULL); if (odm->mo) gf_scene_force_size_to_video(scene, odm->mo); + scene->selected_service_id = odm->OD->ServiceID; return; } @@ -1265,8 +1276,18 @@ void gf_scene_force_size(GF_Scene *scene, u32 width, u32 height) if (!scene->is_dynamic_scene) return; gf_sg_set_scene_size_info(scene->graph, width, height, gf_sg_use_pixel_metrics(scene->graph)); - if (scene->root_od->term->root_scene == scene) + if (scene->root_od->term->root_scene == scene) { gf_sc_set_scene(scene->root_od->term->compositor, scene->graph); + } + else if (scene->root_od->parentscene && scene->root_od->parentscene->is_dynamic_scene) { + gf_sg_set_scene_size_info(scene->root_od->parentscene->graph, width, height, gf_sg_use_pixel_metrics(scene->root_od->parentscene->graph)); + if (scene->root_od->term->root_scene == scene->root_od->parentscene) { + if (width && height) { + gf_sc_set_scene_size(scene->root_od->term->compositor, width, height, 1); + gf_sc_set_size(scene->root_od->term->compositor, width, height); + } + } + } gf_scene_notify_event(scene, GF_EVENT_SCENE_ATTACHED, NULL, NULL, GF_OK); @@ -1421,3 +1442,79 @@ Bool gf_scene_is_over(GF_SceneGraph *sg) } return 1; } + +#define USE_TEXTURES 0 + +void gf_scene_generate_views(GF_Scene *scene, char *url) +{ + GF_Node *n1, *switcher; +#if USE_TEXTURES + GF_Node *n2; + M_MovieTexture *mt; +#else + M_Inline *inl; +#endif + GF_Event evt; + gf_sg_reset(scene->graph); + + n1 = is_create_node(scene->graph, TAG_MPEG4_OrderedGroup, NULL); + gf_sg_set_root_node(scene->graph, n1); + gf_node_register(n1, NULL); + + switcher = is_create_node(scene->graph, TAG_MPEG4_Switch, NULL); + gf_node_register(switcher, n1); + gf_node_list_add_child( &((GF_ParentNode *)n1)->children, switcher); + ((M_Switch*)switcher)->whichChoice = -2; + + while (1) { + char *sep = strchr(url, ':'); + if (sep) sep[0] = 0; +#if USE_TEXTURES + /*create a shape and bitmap node*/ + n2 = is_create_node(scene->graph, TAG_MPEG4_Shape, NULL); + gf_node_list_add_child( &((M_Switch *)switcher)->choice, n2); + gf_node_register(n2, switcher); + n1 = n2; + n2 = is_create_node(scene->graph, TAG_MPEG4_Appearance, NULL); + ((M_Shape *)n1)->appearance = n2; + gf_node_register(n2, n1); + + /*note we create a movie texture even for images...*/ + mt = (M_MovieTexture *) is_create_node(scene->graph, TAG_MPEG4_MovieTexture, NULL); + mt->startTime = gf_scene_get_time(scene); + ((M_Appearance *)n2)->texture = (GF_Node *)mt; + gf_node_register((GF_Node *)mt, n2); + + n2 = is_create_node(scene->graph, TAG_MPEG4_Bitmap, NULL); + ((M_Shape *)n1)->geometry = n2; + gf_node_register(n2, n1); + + gf_sg_vrml_mf_reset(&mt->url, GF_SG_VRML_MFURL); + gf_sg_vrml_mf_append(&mt->url, GF_SG_VRML_MFURL, NULL); + mt->url.vals[0].url = gf_strdup(url); +#else + inl = (M_Inline *) is_create_node(scene->graph, TAG_MPEG4_Inline, NULL); + gf_node_list_add_child( &((M_Switch *)switcher)->choice, (GF_Node *)inl); + gf_node_register((GF_Node*) inl, switcher); + + gf_sg_vrml_mf_reset(&inl->url, GF_SG_VRML_MFURL); + gf_sg_vrml_mf_append(&inl->url, GF_SG_VRML_MFURL, NULL); + inl->url.vals[0].url = gf_strdup(url); +#endif + + if (!sep) break; + sep[0] = ':'; + url = sep+1; + } + + gf_sc_set_option(scene->root_od->term->compositor, GF_OPT_USE_OPENGL, 1); + + gf_sg_set_scene_size_info(scene->graph, 0, 0, 1); + gf_sc_set_scene(scene->root_od->term->compositor, scene->graph); + scene->graph_attached = 1; + scene->is_dynamic_scene = 1; + + evt.type = GF_EVENT_CONNECT; + evt.connect.is_connected = 1; + gf_term_send_event(scene->root_od->term, &evt); +} diff --git a/src/terminal/terminal.c b/src/terminal/terminal.c index 661eb9b..d69dc46 100644 --- a/src/terminal/terminal.c +++ b/src/terminal/terminal.c @@ -410,6 +410,12 @@ static void gf_term_connect_from_time_ex(GF_Terminal * term, const char *URL, u6 /*render first visual frame and pause*/ if (pause_at_first_frame) gf_term_set_play_state(term, GF_STATE_STEP_PAUSE, 0, 0); + + if (!strnicmp(URL, "views://", 8)) { + odm->OD = (GF_ObjectDescriptor *)gf_odf_desc_new(GF_ODF_OD_TAG); + gf_scene_generate_views(term->root_scene, (char *) URL+8); + return; + } /*connect - we don't have any parentID */ gf_term_connect_object(term, odm, (char *) URL, (char*)parent_path); } @@ -522,6 +528,7 @@ GF_Terminal *gf_term_new(GF_User *user) tmp->net_services = gf_list_new(); tmp->net_services_to_remove = gf_list_new(); + tmp->net_services_to_connect = gf_list_new(); tmp->channels_pending = gf_list_new(); tmp->media_queue = gf_list_new(); tmp->media_queue_mx = gf_mx_new("MediaQueue"); @@ -670,6 +677,7 @@ GF_Err gf_term_del(GF_Terminal * term) gf_sc_del(term->compositor); gf_list_del(term->net_services); + gf_list_del(term->net_services_to_connect); gf_list_del(term->net_services_to_remove); gf_list_del(term->input_streams); gf_list_del(term->x3d_sensors); @@ -781,7 +789,7 @@ void gf_term_disconnect(GF_Terminal *term) GF_EXPORT const char *gf_term_get_url(GF_Terminal *term) { - if (!term || !term->root_scene) return NULL; + if (!term || !term->root_scene || !term->root_scene->root_od || !term->root_scene->root_od->net_service) return NULL; return term->root_scene->root_od->net_service->url; } @@ -892,6 +900,16 @@ u32 gf_term_get_option(GF_Terminal * term, u32 type) } } +static void gf_term_cleanup_pending_session(GF_Terminal *term, GF_ClientService *ns) +{ + if (gf_list_find(term->net_services, ns)<0) return; + + if (ns && ns->pending_service_session) { + gf_dm_sess_del(ns->pending_service_session); + ns->pending_service_session = NULL; + } +} + GF_EXPORT GF_Err gf_term_set_size(GF_Terminal * term, u32 NewWidth, u32 NewHeight) @@ -909,6 +927,25 @@ void gf_term_handle_services(GF_Terminal *term) if (!gf_mx_try_lock(term->media_queue_mx)) return; + + while (gf_list_count(term->net_services_to_connect)) { + GF_ObjectManager *odm = (GF_ObjectManager *)gf_list_get(term->net_services_to_connect, 0); + GF_ClientService *ns = odm->net_service; + gf_list_rem(term->net_services_to_connect, 0); + /*unlock media queue before connecting*/ + gf_mx_v(term->media_queue_mx); + + /*OK connect*/ + gf_term_service_media_event(odm, GF_EVENT_MEDIA_BEGIN_SESSION_SETUP); + odm->net_service->ifce->ConnectService(odm->net_service->ifce, odm->net_service, odm->net_service->url); + + /*remove pending download session if any*/ + gf_term_cleanup_pending_session(term, ns); + + /*lock media queue after connecting*/ + gf_mx_p(term->media_queue_mx); + } + /*play ODs that need it*/ while (gf_list_count(term->media_queue)) { Bool destroy = 0; @@ -1270,9 +1307,14 @@ void gf_term_connect_object(GF_Terminal *term, GF_ObjectManager *odm, char *serv odm->net_service->nb_odm_users++; gf_term_lock_net(term, 0); - /*OK connect*/ - gf_term_service_media_event(odm, GF_EVENT_MEDIA_BEGIN_SESSION_SETUP); - odm->net_service->ifce->ConnectService(odm->net_service->ifce, odm->net_service, odm->net_service->url); + ns = odm->net_service; + + gf_mx_p(term->media_queue_mx); + /*we are all set but we cannot assume it is safe to call connect from this thread, as this could be a + script callback (JS locked) and connecting the media could trigger JS calls, which would deadlock*/ + gf_list_add(term->net_services_to_connect, odm); + + gf_mx_v(term->media_queue_mx); } /*connects given channel to its URL if needed*/ @@ -1303,6 +1345,7 @@ GF_Err gf_term_connect_remote_channel(GF_Terminal *term, GF_Channel *ch, char *U ch->service = ns; ns->ifce->ConnectService(ns->ifce, ns, ns->url); + gf_term_cleanup_pending_session(term, ns); gf_term_lock_net(term, 0); return GF_OK; } @@ -1448,6 +1491,7 @@ void gf_term_attach_service(GF_Terminal *term, GF_InputService *service_hdl) Bool net_check_interface(GF_InputService *ifce); GF_Scene *scene; GF_ObjectManager *odm; + GF_ClientService *ns; if (!net_check_interface(service_hdl)) return; if (term->root_scene) gf_term_disconnect(term); @@ -1475,8 +1519,11 @@ void gf_term_attach_service(GF_Terminal *term, GF_InputService *service_hdl) gf_term_lock_net(term, 0); + ns = odm->net_service; /*OK connect*/ odm->net_service->ifce->ConnectService(odm->net_service->ifce, odm->net_service, odm->net_service->url); + + gf_term_cleanup_pending_session(term, ns); } GF_EXPORT @@ -1596,6 +1643,12 @@ GF_Err gf_term_get_screen_buffer(GF_Terminal *term, GF_VideoSurface *framebuffer return gf_sc_get_screen_buffer(term->compositor, framebuffer, 0); } +GF_Err gf_term_get_offscreen_buffer(GF_Terminal *term, GF_VideoSurface *framebuffer, u32 view_idx, u32 depth_buffer_type) +{ + if (!term) return GF_BAD_PARAM; + return gf_sc_get_offscreen_buffer(term->compositor, framebuffer, view_idx, depth_buffer_type); +} + GF_Err gf_term_release_screen_buffer(GF_Terminal *term, GF_VideoSurface *framebuffer) { if (!term) return GF_BAD_PARAM; @@ -1606,20 +1659,27 @@ GF_Err gf_term_release_screen_buffer(GF_Terminal *term, GF_VideoSurface *framebu static void gf_term_sample_scenetime(GF_Scene *scene) { u32 i, count; - gf_term_lock_net(scene->root_od->term, 1); + Bool locked = gf_mx_try_lock(scene->root_od->term->net_mx); + /*we cannot grab the network mutex, therefore we are not sure if some resources are not being destroyed. + TODO: add a dedicated mutex for this condition instead of using the global net mutex*/ + if (!locked) return; + gf_scene_sample_time(scene); count = gf_list_count(scene->resources); for (i=0; iresources, i); if (odm->subscene) gf_term_sample_scenetime(odm->subscene); } - gf_term_lock_net(scene->root_od->term, 0); + gf_mx_v(scene->root_od->term->net_mx); } u32 gf_term_sample_clocks(GF_Terminal *term) { - gf_term_sample_scenetime(term->root_scene); - return (u32) (1000*term->root_scene->simulation_time); + if (term->root_scene) { + gf_term_sample_scenetime(term->root_scene); + return (u32) (1000*term->root_scene->simulation_time); + } + return 0; } const char *gf_term_get_text_selection(GF_Terminal *term, Bool probe_only) @@ -1721,6 +1781,8 @@ enum GF_ACTION_SLOW_REWIND, GF_ACTION_NEXT, GF_ACTION_PREVIOUS, + GF_ACTION_QUALITY_UP, + GF_ACTION_QUALITY_DOWN, }; static void set_clocks_speed(GF_Terminal *term, Fixed ratio) @@ -1894,6 +1956,12 @@ void gf_term_process_shortcut(GF_Terminal *term, GF_Event *ev) set_clocks_speed(term, term->speed_ratio); } break; + case GF_ACTION_QUALITY_UP: + gf_term_switch_quality(term, 1); + break; + case GF_ACTION_QUALITY_DOWN: + gf_term_switch_quality(term, 0); + break; } break; } @@ -1951,6 +2019,8 @@ void gf_term_load_shortcuts(GF_Terminal *term) else if (!stricmp(name, "SlowRewind")) term->shortcuts[k].action = GF_ACTION_SLOW_REWIND; else if (!stricmp(name, "Next")) term->shortcuts[k].action = GF_ACTION_NEXT; else if (!stricmp(name, "Previous")) term->shortcuts[k].action = GF_ACTION_PREVIOUS; + else if (!stricmp(name, "QualityUp")) term->shortcuts[k].action = GF_ACTION_QUALITY_UP; + else if (!stricmp(name, "QualityDown")) term->shortcuts[k].action = GF_ACTION_QUALITY_DOWN; else { term->shortcuts[k].mods = 0; term->shortcuts[k].code = 0; @@ -1966,16 +2036,26 @@ void gf_scene_switch_quality(GF_Scene *scene, Bool up) u32 i; GF_ObjectManager *odm; GF_CodecCapability caps; + GF_NetworkCommand net_cmd; + if (!scene) return; caps.CapCode = GF_CODEC_MEDIA_SWITCH_QUALITY; caps.cap.valueInt = up ? 1 : 0; + net_cmd.command_type = GF_NET_SERVICE_QUALITY_SWITCH; + net_cmd.switch_quality.on_channel = NULL; + net_cmd.switch_quality.up = up; + if (scene->scene_codec) { scene->scene_codec->decio->SetCapabilities(scene->scene_codec->decio, caps); + if (scene->root_od->net_service) + scene->root_od->net_service->ifce->ServiceCommand(scene->root_od->net_service->ifce, &net_cmd); } i=0; while (NULL != (odm = gf_list_enum(scene->resources, &i))) { if (odm->codec) odm->codec->decio->SetCapabilities(odm->codec->decio, caps); + if (odm->net_service) + odm->net_service->ifce->ServiceCommand(odm->net_service->ifce, &net_cmd); if (odm->subscene) gf_scene_switch_quality(odm->subscene, up); } diff --git a/src/utils/alloc.c b/src/utils/alloc.c index 02f3184..846fbab 100644 --- a/src/utils/alloc.c +++ b/src/utils/alloc.c @@ -1,712 +1,712 @@ -/* - * GPAC - Multimedia Framework C SDK - * - * Authors: Romain Bouqueau - Jean Le Feuvre - * Copyright (c) Telecom ParisTech 2010-20XX - * - * All rights reserved - * - * This file is part of GPAC / common tools sub-project - * - * GPAC is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * GPAC 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -#if !defined(WIN32) && !defined(_WIN32_WCE) -/* This is needed for asprintf */ -#define _GNU_SOURCE -#include -#include -#endif - -#include - - -#define STD_MALLOC 0 -#define GOOGLE_MALLOC 1 -#define INTEL_MALLOC 2 -#define DL_MALLOC 3 - -#ifdef WIN32 -#define USE_MALLOC STD_MALLOC -#else -#define USE_MALLOC STD_MALLOC -#endif - - -#if defined(_WIN32_WCE) && !defined(strdup) -#define strdup _strdup -#endif - -/* - WARNING - you must enable C++ style compilation of this file (error.c) to be able to compile - with google malloc. This is not set by default in the project settings. -*/ -#if (USE_MALLOC==GOOGLE_MALLOC) -#include -#include -#include - -#ifdef WIN32 -#pragma comment(lib, "libtcmalloc_minimal") -#endif - -#define MALLOC malloc -#define CALLOC calloc -#define REALLOC realloc -#define FREE free -#define STRDUP(a) return strdup(a); - -/*we must use c++ compiler for google malloc :( */ -#define CDECL extern "C" -#endif - -#if (USE_MALLOC==INTEL_MALLOC) -#define CDECL -CDECL void * scalable_malloc(size_t size); -CDECL void * scalable_realloc(void* ptr, size_t size); -CDECL void * scalable_calloc(size_t num, size_t size); -CDECL void scalable_free(void* ptr); - -#ifdef WIN32 -#pragma comment(lib, "tbbmalloc.lib") -#endif - -#define MALLOC scalable_malloc -#define CALLOC scalable_calloc -#define REALLOC scalable_realloc -#define FREE scalable_free -#define STRDUP(_a) if (_a) { unsigned int len = strlen(_a)+1; char *ptr = (char *) scalable_malloc(len); strcpy(ptr, _a); return ptr; } else { return NULL; } - -#endif - -#ifndef CDECL -#define CDECL -#endif - -#if (USE_MALLOC==DL_MALLOC) - -CDECL void * dlmalloc(size_t size); -CDECL void * dlrealloc(void* ptr, size_t size); -CDECL void * dlcalloc(size_t num, size_t size); -CDECL void dlfree(void* ptr); - -#define MALLOC dlmalloc -#define CALLOC dlcalloc -#define REALLOC dlrealloc -#define FREE dlfree -#define STRDUP(_a) if (_a) { unsigned int len = strlen(_a)+1; char *ptr = (char *) dlmalloc(len); strcpy(ptr, _a); return ptr; } else { return NULL; } - -#endif - -#if (USE_MALLOC==STD_MALLOC) - -#include - -#define MALLOC malloc -#define CALLOC calloc -#define REALLOC realloc -#define FREE free -#define STRDUP(a) return strdup(a); - -#endif - - - -#ifndef _WIN32_WCE -#include -#endif - -/*This is to handle cases where config.h is generated at the root of the gpac build tree (./configure) -This is only needed when building libgpac and modules when libgpac is not installed*/ -#ifdef GPAC_HAVE_CONFIG_H -# include "config.h" -#else -# include -#endif - -/*GPAC memory tracking*/ -#ifndef GPAC_MEMORY_TRACKING - -CDECL -void *gf_malloc(size_t size) -{ - return MALLOC(size); -} -CDECL -void *gf_calloc(size_t num, size_t size_of) -{ - return CALLOC(num, size_of); -} -CDECL -void *gf_realloc(void *ptr, size_t size) -{ - return REALLOC(ptr, size); -} -CDECL -void gf_free(void *ptr) -{ - FREE(ptr); -} -CDECL -char *gf_strdup(const char *str) -{ - STRDUP(str); -} - -#else - - -CDECL -size_t gpac_allocated_memory = 0; -size_t gpac_nb_alloc_blocs = 0; - -#ifdef _WIN32_WCE -#define assert(p) -#endif - -static void register_address(void *ptr, size_t size, char *filename, int line); -static int unregister_address(void *ptr, char *filename, int line); - -static void gf_memory_log(unsigned int level, const char *fmt, ...); -enum -{ - /*! Log message describes an error*/ - GF_MEMORY_ERROR = 1, - /*! Log message describes a warning*/ - GF_MEMORY_WARNING, - /*! Log message is informational (state, etc..)*/ - GF_MEMORY_INFO, - /*! Log message is a debug info*/ - GF_MEMORY_DEBUG, -}; - -static void *gf_mem_malloc_basic(size_t size, char *filename, int line) -{ - return MALLOC(size); -} -static void *gf_mem_calloc_basic(size_t num, size_t size_of, char *filename, int line) -{ - return CALLOC(num, size_of); -} -static void *gf_mem_realloc_basic(void *ptr, size_t size, char *filename, int line) -{ - return REALLOC(ptr, size); -} -static void gf_mem_free_basic(void *ptr, char *filename, int line) -{ - FREE(ptr); -} -static char *gf_mem_strdup_basic(const char *str, char *filename, int line) -{ - STRDUP(str); -} - -void *gf_mem_malloc_tracker(size_t size, char *filename, int line) -{ - void *ptr = MALLOC(size); - if (!ptr) { - gf_memory_log(GF_MEMORY_ERROR, "[MemTracker] malloc() has returned a NULL pointer\n"); - assert(0); - } else { - register_address(ptr, size, filename, line); - } - gf_memory_log(GF_MEMORY_DEBUG, "[MemTracker] malloc %3d bytes at 0x%08X\n in file %s at line %d\n", size, ptr, filename, line); - return ptr; -} - -void *gf_mem_calloc_tracker(size_t num, size_t size_of, char *filename, int line) -{ - size_t size = num*size_of; - void *ptr = CALLOC(num, size_of); - if (!ptr) { - gf_memory_log(GF_MEMORY_ERROR, "[MemTracker] calloc() has returned a NULL pointer\n"); - assert(0); - } else { - register_address(ptr, size, filename, line); - } - gf_memory_log(GF_MEMORY_DEBUG, "[MemTracker] calloc %3d bytes at 0x%08X\n in file %s at line %d\n", size, ptr, filename, line); - return ptr; -} - -void gf_mem_free_tracker(void *ptr, char *filename, int line) -{ - int size_prev; - if (ptr && (size_prev=unregister_address(ptr, filename, line))) { - gf_memory_log(GF_MEMORY_DEBUG, "[MemTracker] free %3d bytes at 0x%08X\n in file %s at line %d\n", size_prev, ptr, filename, line); - FREE(ptr); - } -} - -void *gf_mem_realloc_tracker(void *ptr, size_t size, char *filename, int line) -{ - void *ptr_g; - int size_prev; - if (!ptr) { - gf_memory_log(GF_MEMORY_DEBUG, "[MemTracker] realloc() from a null pointer: calling malloc() instead\n"); - return gf_mem_malloc_tracker(size, filename, line); - } - /*a) The return value is NULL if the size is zero and the buffer argument is not NULL. In this case, the original block is freed.*/ - if (!size) { - gf_memory_log(GF_MEMORY_DEBUG, "[MemTracker] realloc() with a null size: calling free() instead\n"); - gf_mem_free_tracker(ptr, filename, line); - return NULL; - } - ptr_g = REALLOC(ptr, size); - if (!ptr_g) { - /*b) The return value is NULL if there is not enough available memory to expand the block to the given size. In this case, the original block is unchanged.*/ - gf_memory_log(GF_MEMORY_ERROR, "[MemTracker] realloc() has returned a NULL pointer\n"); - assert(0); - } else { - size_prev = unregister_address(ptr, filename, line); - register_address(ptr_g, size, filename, line); - gf_memory_log(GF_MEMORY_DEBUG, "[MemTracker] realloc %3d (instead of %3d) bytes at 0x%08X (instead of 0x%08X)\n in file %s at line %d\n", size, size_prev, ptr_g, ptr, filename, line); - } - return ptr_g; -} - -char *gf_mem_strdup_tracker(const char *str, char *filename, int line) -{ - char *ptr; - if (!str) return NULL; - ptr = (char*)gf_mem_malloc_tracker(strlen(str)+1, filename, line); - strcpy(ptr, str); - return ptr; -} - -static void *(*gf_mem_malloc_proto)(size_t size, char *filename, int line) = gf_mem_malloc_basic; -static void *(*gf_mem_calloc_proto)(size_t num, size_t size_of, char *filename, int line) = gf_mem_calloc_basic; -static void *(*gf_mem_realloc_proto)(void *ptr, size_t size, char *filename, int line) = gf_mem_realloc_basic; -static void (*gf_mem_free_proto)(void *ptr, char *filename, int line) = gf_mem_free_basic; -static char *(*gf_mem_strdup_proto)(const char *str, char *filename, int line) = gf_mem_strdup_basic; - -CDECL -void *gf_mem_malloc(size_t size, char *filename, int line) -{ - return gf_mem_malloc_proto(size, filename, line); -} -CDECL -void *gf_mem_calloc(size_t num, size_t size_of, char *filename, int line) -{ - return gf_mem_calloc_proto(num, size_of, filename, line); -} -CDECL -void *gf_mem_realloc(void *ptr, size_t size, char *filename, int line) -{ - return gf_mem_realloc_proto(ptr, size, filename, line); -} -CDECL -void gf_mem_free(void *ptr, char *filename, int line) -{ - gf_mem_free_proto(ptr, filename, line); -} -CDECL -char *gf_mem_strdup(const char *str, char *filename, int line) -{ - return gf_mem_strdup_proto(str, filename, line); -} - -CDECL -void gf_mem_enable_tracker() -{ - gf_mem_malloc_proto = gf_mem_malloc_tracker; - gf_mem_calloc_proto = gf_mem_calloc_tracker; - gf_mem_realloc_proto = gf_mem_realloc_tracker; - gf_mem_free_proto = gf_mem_free_tracker; - gf_mem_strdup_proto = gf_mem_strdup_tracker; -} - - -#define GPAC_MEMORY_TRACKING_HASH_TABLE 1 -#if GPAC_MEMORY_TRACKING_HASH_TABLE - -#define HASH_ENTRIES 4096 - -typedef struct s_memory_element -{ - void *ptr; - int size; - struct s_memory_element *next; - int line; - char *filename; -} memory_element; - -/*pointer to the first element of the list*/ -typedef memory_element** memory_list; - -static unsigned int gf_memory_hash(void *ptr) -{ - return (((unsigned int)ptr>>4)+(unsigned int)ptr)%HASH_ENTRIES; -} - -#else - -typedef struct s_memory_element -{ - void *ptr; - int size; - struct s_memory_element *next; - int line; - char *filename; -} memory_element; - -/*pointer to the first element of the list*/ -typedef memory_element* memory_list; - -#endif - - -/*base functions (add, find, del_item, del) are implemented upon a stack model*/ -static void gf_memory_add_stack(memory_element **p, void *ptr, int size, char *filename, int line) -{ - memory_element *element = (memory_element*)MALLOC(sizeof(memory_element)+strlen(filename)+1); - element->ptr = ptr; - element->size = size; - element->line = line; - element->next = *p; - element->filename = (char*)&(element->filename)+sizeof(element->filename); - strcpy(element->filename, filename); - *p = element; -} - -/*returns the position of a ptr from a memory_element, 0 if not found*/ -static int gf_memory_find_stack(memory_element *p, void *ptr) -{ - int i = 1; - memory_element *element = p; - while (element) { - if (element->ptr == ptr) { - return i; - } - element = element->next; - i++; - } - return 0; -} - -/*returns the size of the deleted item*/ -static int gf_memory_del_item_stack(memory_element **p, void *ptr) -{ - int size; - memory_element *curr_element=*p, *prev_element=NULL; - while (curr_element) { - if (curr_element->ptr == ptr) { - if (prev_element) prev_element->next = curr_element->next; - else *p = curr_element->next; - size = curr_element->size; - FREE(curr_element); - return size; - } - prev_element = curr_element; - curr_element = curr_element->next; - } - return 0; -} - -static void gf_memory_del_stack(memory_element **p) -{ - memory_element *curr_element=*p, *next_element; - while (curr_element) { - next_element = curr_element->next; - FREE(curr_element); - curr_element = next_element; - } - *p = NULL; -} - - -#if GPAC_MEMORY_TRACKING_HASH_TABLE - -/*this list is implemented as a stack to minimise the cost of freeing recent allocations*/ -static void gf_memory_add(memory_list *p, void *ptr, int size, char *filename, int line) -{ - unsigned int hash; - if (!*p) *p = (memory_list) CALLOC(HASH_ENTRIES, sizeof(memory_element*)); - assert(*p); - - hash = gf_memory_hash(ptr); - gf_memory_add_stack(&((*p)[hash]), ptr, size, filename, line); -} - - -static int gf_memory_find(memory_list p, void *ptr) -{ - unsigned int hash; - assert(p); - if (!p) return 0; - hash = gf_memory_hash(ptr); - return gf_memory_find_stack(p[hash], ptr); -} - -static int gf_memory_del_item(memory_list *p, void *ptr) -{ - unsigned int hash; - int ret; - memory_element **sub_list; - if (!*p) *p = (memory_list) CALLOC(HASH_ENTRIES, sizeof(memory_element*)); - assert(*p); - hash = gf_memory_hash(ptr); - sub_list = &((*p)[hash]); - if (!sub_list) return 0; - ret = gf_memory_del_item_stack(sub_list, ptr); - if (ret && !((*p)[hash])) { - /*check for deletion*/ - int i; - for (i=0; i - - -/*GPAC memory tracking*/ -#ifdef GPAC_MEMORY_TRACKING - -#include - -/*global lists of allocations and deallocations*/ -memory_list memory_add = NULL, memory_rem = NULL; -GF_Mutex *gpac_allocations_lock = NULL; - -static void register_address(void *ptr, size_t size, char *filename, int line) -{ - /*mutex initialization*/ - if (gpac_allocations_lock == 0) { - assert(!memory_add); - assert(!memory_rem); - gpac_allocations_lock = (GF_Mutex*)1; /*must be non-null to avoid a recursive infinite call*/ - gpac_allocations_lock = gf_mx_new("gpac_allocations_lock"); - } - else if (gpac_allocations_lock == (void*)1) { - /*we're initializing the mutex (ie called by the gf_mx_new() above)*/ - return; - } - - /*lock*/ - gf_mx_p(gpac_allocations_lock); - - gf_memory_add(&memory_add, ptr, size, filename, line); - gf_memory_del_item(&memory_rem, ptr); /*the same block can be reallocated, so remove it from the deallocation list*/ - - /*update stats*/ - gpac_allocated_memory += size; - gpac_nb_alloc_blocs++; - - /*gf_memory_log(GF_MEMORY_DEBUG, "[MemTracker] register %6d bytes at 0x%08X (%8d Bytes in %4d Blocks allocated)\n", size, ptr, gpac_allocated_memory, gpac_nb_alloc_blocs);*/ - - /*unlock*/ - gf_mx_v(gpac_allocations_lock); -} - -/*returns the size of the unregistered block*/ -static int unregister_address(void *ptr, char *filename, int line) -{ - int size = 0; /*default: failure*/ - - /*lock*/ - gf_mx_p(gpac_allocations_lock); - - if (!memory_add) { - if (!memory_rem) { - /*assume we're rather destroying the mutex (ie calling the gf_mx_del() below) - than being called by free() before the first allocation occured*/ - return 1; - /*gf_memory_log(GF_MEMORY_ERROR, "[MemTracker] calling free() before the first allocation occured\n"); - assert(0); */ - } - } else { - if (!gf_memory_find(memory_add, ptr)) { - int pos; - if (!(pos=gf_memory_find(memory_rem, ptr))) { - gf_memory_log(GF_MEMORY_ERROR, "[MemTracker] trying to free a never allocated block (0x%08X)\n", ptr); - /* assert(0); */ /*don't assert since this is often due to allocations that occured out of gpac (fonts, etc.)*/ - } else { - int i; - unsigned int hash = gf_memory_hash(ptr); - memory_element *element = memory_rem[hash]; - assert(element); - for (i=1; inext; - assert(element); - gf_memory_log(GF_MEMORY_ERROR, "[MemTracker] the block 0x%08X trying to be deleted\n in file %s at line %d\n has already been freed\n in file %s at line %d\n", ptr, filename, line, element->filename, element->line); - assert(0); - } - } else { - size = gf_memory_del_item(&memory_add, ptr); - assert(size>=0); - - /*update stats*/ - gpac_allocated_memory -= size; - gpac_nb_alloc_blocs--; - - /*gf_memory_log(GF_MEMORY_DEBUG, "[MemTracker] unregister %6d bytes at 0x%08X (%8d bytes in %4d blocks remaining)\n", size, ptr, gpac_allocated_memory, gpac_nb_alloc_blocs); */ - - /*the allocation list is empty: free the lists to avoid a leak (we should be exiting)*/ - if (!memory_add) { - assert(!gpac_allocated_memory); - assert(!gpac_nb_alloc_blocs); - - /*we destroy the mutex we own, then we return*/ - gf_mx_del(gpac_allocations_lock); - gpac_allocations_lock = NULL; - - gf_memory_log(GF_MEMORY_DEBUG, "[MemTracker] the allocated-blocks-list is empty: the freed-blocks-list will be emptied too.\n"); - gf_memory_del(&memory_rem); - - return size; - } else { - gf_memory_add(&memory_rem, ptr, size, filename, line); - } - } - } - - /*unlock*/ - gf_mx_v(gpac_allocations_lock); - - return size; -} - -static void gf_memory_log(unsigned int level, const char *fmt, ...) -{ - va_list vl; - char msg[1024]; - assert(strlen(fmt) < 200); - va_start(vl, fmt); - vsprintf(msg, fmt, vl); - GF_LOG(level, GF_LOG_MEMORY, (msg)); - va_end(vl); -} - -/*prints allocations sum-up*/ -void gf_memory_size() -{ - unsigned int level = gpac_nb_alloc_blocs ? GF_MEMORY_WARNING : GF_MEMORY_INFO; - gf_memory_log(level, "[MemTracker] Total: %d bytes allocated on %d blocks\n", gpac_allocated_memory, gpac_nb_alloc_blocs); -} - -/*prints the state of current allocations*/ -void gf_memory_print() -{ - /*if lists are empty, the mutex is also NULL*/ - if (!memory_add) { - assert(!gpac_allocations_lock); - gf_memory_log(GF_MEMORY_INFO, "[MemTracker] gf_memory_print(): the memory tracker is not initialized.\n"); - } else { - int i=0; - assert(gpac_allocations_lock); - - gf_memory_log(GF_MEMORY_INFO, "\n[MemTracker] Printing the current state of allocations:\n"); - - /*lock*/ - gf_mx_p(gpac_allocations_lock); -#if GPAC_MEMORY_TRACKING_HASH_TABLE - for (i=0; inext; - gf_memory_log(GF_MEMORY_INFO, "[MemTracker] Memory Block 0x%08X (size %d) allocated\n in file %s at line %d\n", curr_element->ptr, curr_element->size, curr_element->filename, curr_element->line); - curr_element = next_element; - } - } - gf_memory_size(); - - /*unlock*/ - gf_mx_v(gpac_allocations_lock); - } -} - -#endif /*GPAC_MEMORY_TRACKING*/ - - -/*gf_asprintf(): as_printf portable implementation*/ -#if defined(WIN32) || defined(_WIN32_WCE) -static GFINLINE int gf_vasprintf (char **strp, const char *fmt, va_list ap) -{ - int vsn_ret, size; - char *buffer, *realloc_buffer; - - size = 2*strlen(fmt); /*first guess for the size*/ - buffer = (char*)gf_malloc(size); - if (buffer == NULL) - return -1; - - while (1) { - vsn_ret = _vsnprintf(buffer, size, fmt, ap); - - /* If that worked, return the string. */ - if (vsn_ret>-1 && vsn_ret +#include +#endif + +#include + + +#define STD_MALLOC 0 +#define GOOGLE_MALLOC 1 +#define INTEL_MALLOC 2 +#define DL_MALLOC 3 + +#ifdef WIN32 +#define USE_MALLOC STD_MALLOC +#else +#define USE_MALLOC STD_MALLOC +#endif + + +#if defined(_WIN32_WCE) && !defined(strdup) +#define strdup _strdup +#endif + +/* + WARNING - you must enable C++ style compilation of this file (error.c) to be able to compile + with google malloc. This is not set by default in the project settings. +*/ +#if (USE_MALLOC==GOOGLE_MALLOC) +#include +#include +#include + +#ifdef WIN32 +#pragma comment(lib, "libtcmalloc_minimal") +#endif + +#define MALLOC malloc +#define CALLOC calloc +#define REALLOC realloc +#define FREE free +#define STRDUP(a) return strdup(a); + +/*we must use c++ compiler for google malloc :( */ +#define CDECL extern "C" +#endif + +#if (USE_MALLOC==INTEL_MALLOC) +#define CDECL +CDECL void * scalable_malloc(size_t size); +CDECL void * scalable_realloc(void* ptr, size_t size); +CDECL void * scalable_calloc(size_t num, size_t size); +CDECL void scalable_free(void* ptr); + +#ifdef WIN32 +#pragma comment(lib, "tbbmalloc.lib") +#endif + +#define MALLOC scalable_malloc +#define CALLOC scalable_calloc +#define REALLOC scalable_realloc +#define FREE scalable_free +#define STRDUP(_a) if (_a) { unsigned int len = strlen(_a)+1; char *ptr = (char *) scalable_malloc(len); strcpy(ptr, _a); return ptr; } else { return NULL; } + +#endif + +#ifndef CDECL +#define CDECL +#endif + +#if (USE_MALLOC==DL_MALLOC) + +CDECL void * dlmalloc(size_t size); +CDECL void * dlrealloc(void* ptr, size_t size); +CDECL void * dlcalloc(size_t num, size_t size); +CDECL void dlfree(void* ptr); + +#define MALLOC dlmalloc +#define CALLOC dlcalloc +#define REALLOC dlrealloc +#define FREE dlfree +#define STRDUP(_a) if (_a) { unsigned int len = strlen(_a)+1; char *ptr = (char *) dlmalloc(len); strcpy(ptr, _a); return ptr; } else { return NULL; } + +#endif + +#if (USE_MALLOC==STD_MALLOC) + +#include + +#define MALLOC malloc +#define CALLOC calloc +#define REALLOC realloc +#define FREE free +#define STRDUP(a) return strdup(a); + +#endif + + + +#ifndef _WIN32_WCE +#include +#endif + +/*This is to handle cases where config.h is generated at the root of the gpac build tree (./configure) +This is only needed when building libgpac and modules when libgpac is not installed*/ +#ifdef GPAC_HAVE_CONFIG_H +# include "config.h" +#else +# include +#endif + +/*GPAC memory tracking*/ +#ifndef GPAC_MEMORY_TRACKING + +CDECL +void *gf_malloc(size_t size) +{ + return MALLOC(size); +} +CDECL +void *gf_calloc(size_t num, size_t size_of) +{ + return CALLOC(num, size_of); +} +CDECL +void *gf_realloc(void *ptr, size_t size) +{ + return REALLOC(ptr, size); +} +CDECL +void gf_free(void *ptr) +{ + FREE(ptr); +} +CDECL +char *gf_strdup(const char *str) +{ + STRDUP(str); +} + +#else + + +CDECL +size_t gpac_allocated_memory = 0; +size_t gpac_nb_alloc_blocs = 0; + +#ifdef _WIN32_WCE +#define assert(p) +#endif + +static void register_address(void *ptr, size_t size, char *filename, int line); +static int unregister_address(void *ptr, char *filename, int line); + +static void gf_memory_log(unsigned int level, const char *fmt, ...); +enum +{ + /*! Log message describes an error*/ + GF_MEMORY_ERROR = 1, + /*! Log message describes a warning*/ + GF_MEMORY_WARNING, + /*! Log message is informational (state, etc..)*/ + GF_MEMORY_INFO, + /*! Log message is a debug info*/ + GF_MEMORY_DEBUG, +}; + +static void *gf_mem_malloc_basic(size_t size, char *filename, int line) +{ + return MALLOC(size); +} +static void *gf_mem_calloc_basic(size_t num, size_t size_of, char *filename, int line) +{ + return CALLOC(num, size_of); +} +static void *gf_mem_realloc_basic(void *ptr, size_t size, char *filename, int line) +{ + return REALLOC(ptr, size); +} +static void gf_mem_free_basic(void *ptr, char *filename, int line) +{ + FREE(ptr); +} +static char *gf_mem_strdup_basic(const char *str, char *filename, int line) +{ + STRDUP(str); +} + +void *gf_mem_malloc_tracker(size_t size, char *filename, int line) +{ + void *ptr = MALLOC(size); + if (!ptr) { + gf_memory_log(GF_MEMORY_ERROR, "[MemTracker] malloc() has returned a NULL pointer\n"); + assert(0); + } else { + register_address(ptr, size, filename, line); + } + gf_memory_log(GF_MEMORY_DEBUG, "[MemTracker] malloc %3d bytes at %p\n in file %s at line %d\n", size, ptr, filename, line); + return ptr; +} + +void *gf_mem_calloc_tracker(size_t num, size_t size_of, char *filename, int line) +{ + size_t size = num*size_of; + void *ptr = CALLOC(num, size_of); + if (!ptr) { + gf_memory_log(GF_MEMORY_ERROR, "[MemTracker] calloc() has returned a NULL pointer\n"); + assert(0); + } else { + register_address(ptr, size, filename, line); + } + gf_memory_log(GF_MEMORY_DEBUG, "[MemTracker] calloc %3d bytes at %p\n in file %s at line %d\n", size, ptr, filename, line); + return ptr; +} + +void gf_mem_free_tracker(void *ptr, char *filename, int line) +{ + int size_prev; + if (ptr && (size_prev=unregister_address(ptr, filename, line))) { + gf_memory_log(GF_MEMORY_DEBUG, "[MemTracker] free %3d bytes at %p\n in file %s at line %d\n", size_prev, ptr, filename, line); + FREE(ptr); + } +} + +void *gf_mem_realloc_tracker(void *ptr, size_t size, char *filename, int line) +{ + void *ptr_g; + int size_prev; + if (!ptr) { + gf_memory_log(GF_MEMORY_DEBUG, "[MemTracker] realloc() from a null pointer: calling malloc() instead\n"); + return gf_mem_malloc_tracker(size, filename, line); + } + /*a) The return value is NULL if the size is zero and the buffer argument is not NULL. In this case, the original block is freed.*/ + if (!size) { + gf_memory_log(GF_MEMORY_DEBUG, "[MemTracker] realloc() with a null size: calling free() instead\n"); + gf_mem_free_tracker(ptr, filename, line); + return NULL; + } + ptr_g = REALLOC(ptr, size); + if (!ptr_g) { + /*b) The return value is NULL if there is not enough available memory to expand the block to the given size. In this case, the original block is unchanged.*/ + gf_memory_log(GF_MEMORY_ERROR, "[MemTracker] realloc() has returned a NULL pointer\n"); + assert(0); + } else { + size_prev = unregister_address(ptr, filename, line); + register_address(ptr_g, size, filename, line); + gf_memory_log(GF_MEMORY_DEBUG, "[MemTracker] realloc %3d (instead of %3d) bytes at %p (instead of %p)\n in file %s at line %d\n", size, size_prev, ptr_g, ptr, filename, line); + } + return ptr_g; +} + +char *gf_mem_strdup_tracker(const char *str, char *filename, int line) +{ + char *ptr; + if (!str) return NULL; + ptr = (char*)gf_mem_malloc_tracker(strlen(str)+1, filename, line); + strcpy(ptr, str); + return ptr; +} + +static void *(*gf_mem_malloc_proto)(size_t size, char *filename, int line) = gf_mem_malloc_basic; +static void *(*gf_mem_calloc_proto)(size_t num, size_t size_of, char *filename, int line) = gf_mem_calloc_basic; +static void *(*gf_mem_realloc_proto)(void *ptr, size_t size, char *filename, int line) = gf_mem_realloc_basic; +static void (*gf_mem_free_proto)(void *ptr, char *filename, int line) = gf_mem_free_basic; +static char *(*gf_mem_strdup_proto)(const char *str, char *filename, int line) = gf_mem_strdup_basic; + +CDECL +void *gf_mem_malloc(size_t size, char *filename, int line) +{ + return gf_mem_malloc_proto(size, filename, line); +} +CDECL +void *gf_mem_calloc(size_t num, size_t size_of, char *filename, int line) +{ + return gf_mem_calloc_proto(num, size_of, filename, line); +} +CDECL +void *gf_mem_realloc(void *ptr, size_t size, char *filename, int line) +{ + return gf_mem_realloc_proto(ptr, size, filename, line); +} +CDECL +void gf_mem_free(void *ptr, char *filename, int line) +{ + gf_mem_free_proto(ptr, filename, line); +} +CDECL +char *gf_mem_strdup(const char *str, char *filename, int line) +{ + return gf_mem_strdup_proto(str, filename, line); +} + +CDECL +void gf_mem_enable_tracker() +{ + gf_mem_malloc_proto = gf_mem_malloc_tracker; + gf_mem_calloc_proto = gf_mem_calloc_tracker; + gf_mem_realloc_proto = gf_mem_realloc_tracker; + gf_mem_free_proto = gf_mem_free_tracker; + gf_mem_strdup_proto = gf_mem_strdup_tracker; +} + + +#define GPAC_MEMORY_TRACKING_HASH_TABLE 1 +#if GPAC_MEMORY_TRACKING_HASH_TABLE + +#define HASH_ENTRIES 4096 + +typedef struct s_memory_element +{ + void *ptr; + int size; + struct s_memory_element *next; + int line; + char *filename; +} memory_element; + +/*pointer to the first element of the list*/ +typedef memory_element** memory_list; + +static unsigned int gf_memory_hash(void *ptr) +{ + return (((unsigned int)ptr>>4)+(unsigned int)ptr)%HASH_ENTRIES; +} + +#else + +typedef struct s_memory_element +{ + void *ptr; + int size; + struct s_memory_element *next; + int line; + char *filename; +} memory_element; + +/*pointer to the first element of the list*/ +typedef memory_element* memory_list; + +#endif + + +/*base functions (add, find, del_item, del) are implemented upon a stack model*/ +static void gf_memory_add_stack(memory_element **p, void *ptr, int size, char *filename, int line) +{ + memory_element *element = (memory_element*)MALLOC(sizeof(memory_element)+strlen(filename)+1); + element->ptr = ptr; + element->size = size; + element->line = line; + element->next = *p; + element->filename = (char*)&(element->filename)+sizeof(element->filename); + strcpy(element->filename, filename); + *p = element; +} + +/*returns the position of a ptr from a memory_element, 0 if not found*/ +static int gf_memory_find_stack(memory_element *p, void *ptr) +{ + int i = 1; + memory_element *element = p; + while (element) { + if (element->ptr == ptr) { + return i; + } + element = element->next; + i++; + } + return 0; +} + +/*returns the size of the deleted item*/ +static int gf_memory_del_item_stack(memory_element **p, void *ptr) +{ + int size; + memory_element *curr_element=*p, *prev_element=NULL; + while (curr_element) { + if (curr_element->ptr == ptr) { + if (prev_element) prev_element->next = curr_element->next; + else *p = curr_element->next; + size = curr_element->size; + FREE(curr_element); + return size; + } + prev_element = curr_element; + curr_element = curr_element->next; + } + return 0; +} + +static void gf_memory_del_stack(memory_element **p) +{ + memory_element *curr_element=*p, *next_element; + while (curr_element) { + next_element = curr_element->next; + FREE(curr_element); + curr_element = next_element; + } + *p = NULL; +} + + +#if GPAC_MEMORY_TRACKING_HASH_TABLE + +/*this list is implemented as a stack to minimise the cost of freeing recent allocations*/ +static void gf_memory_add(memory_list *p, void *ptr, int size, char *filename, int line) +{ + unsigned int hash; + if (!*p) *p = (memory_list) CALLOC(HASH_ENTRIES, sizeof(memory_element*)); + assert(*p); + + hash = gf_memory_hash(ptr); + gf_memory_add_stack(&((*p)[hash]), ptr, size, filename, line); +} + + +static int gf_memory_find(memory_list p, void *ptr) +{ + unsigned int hash; + assert(p); + if (!p) return 0; + hash = gf_memory_hash(ptr); + return gf_memory_find_stack(p[hash], ptr); +} + +static int gf_memory_del_item(memory_list *p, void *ptr) +{ + unsigned int hash; + int ret; + memory_element **sub_list; + if (!*p) *p = (memory_list) CALLOC(HASH_ENTRIES, sizeof(memory_element*)); + assert(*p); + hash = gf_memory_hash(ptr); + sub_list = &((*p)[hash]); + if (!sub_list) return 0; + ret = gf_memory_del_item_stack(sub_list, ptr); + if (ret && !((*p)[hash])) { + /*check for deletion*/ + int i; + for (i=0; i + + +/*GPAC memory tracking*/ +#ifdef GPAC_MEMORY_TRACKING + +#include + +/*global lists of allocations and deallocations*/ +memory_list memory_add = NULL, memory_rem = NULL; +GF_Mutex *gpac_allocations_lock = NULL; + +static void register_address(void *ptr, size_t size, char *filename, int line) +{ + /*mutex initialization*/ + if (gpac_allocations_lock == 0) { + assert(!memory_add); + assert(!memory_rem); + gpac_allocations_lock = (GF_Mutex*)1; /*must be non-null to avoid a recursive infinite call*/ + gpac_allocations_lock = gf_mx_new("gpac_allocations_lock"); + } + else if (gpac_allocations_lock == (void*)1) { + /*we're initializing the mutex (ie called by the gf_mx_new() above)*/ + return; + } + + /*lock*/ + gf_mx_p(gpac_allocations_lock); + + gf_memory_add(&memory_add, ptr, size, filename, line); + gf_memory_del_item(&memory_rem, ptr); /*the same block can be reallocated, so remove it from the deallocation list*/ + + /*update stats*/ + gpac_allocated_memory += size; + gpac_nb_alloc_blocs++; + + /*gf_memory_log(GF_MEMORY_DEBUG, "[MemTracker] register %6d bytes at %p (%8d Bytes in %4d Blocks allocated)\n", size, ptr, gpac_allocated_memory, gpac_nb_alloc_blocs);*/ + + /*unlock*/ + gf_mx_v(gpac_allocations_lock); +} + +/*returns the size of the unregistered block*/ +static int unregister_address(void *ptr, char *filename, int line) +{ + int size = 0; /*default: failure*/ + + /*lock*/ + gf_mx_p(gpac_allocations_lock); + + if (!memory_add) { + if (!memory_rem) { + /*assume we're rather destroying the mutex (ie calling the gf_mx_del() below) + than being called by free() before the first allocation occured*/ + return 1; + /*gf_memory_log(GF_MEMORY_ERROR, "[MemTracker] calling free() before the first allocation occured\n"); + assert(0); */ + } + } else { + if (!gf_memory_find(memory_add, ptr)) { + int pos; + if (!(pos=gf_memory_find(memory_rem, ptr))) { + gf_memory_log(GF_MEMORY_ERROR, "[MemTracker] trying to free a never allocated block (%p)\n", ptr); + /* assert(0); */ /*don't assert since this is often due to allocations that occured out of gpac (fonts, etc.)*/ + } else { + int i; + unsigned int hash = gf_memory_hash(ptr); + memory_element *element = memory_rem[hash]; + assert(element); + for (i=1; inext; + assert(element); + gf_memory_log(GF_MEMORY_ERROR, "[MemTracker] the block %p trying to be deleted\n in file %s at line %d\n has already been freed\n in file %s at line %d\n", ptr, filename, line, element->filename, element->line); + assert(0); + } + } else { + size = gf_memory_del_item(&memory_add, ptr); + assert(size>=0); + + /*update stats*/ + gpac_allocated_memory -= size; + gpac_nb_alloc_blocs--; + + /*gf_memory_log(GF_MEMORY_DEBUG, "[MemTracker] unregister %6d bytes at %p (%8d bytes in %4d blocks remaining)\n", size, ptr, gpac_allocated_memory, gpac_nb_alloc_blocs); */ + + /*the allocation list is empty: free the lists to avoid a leak (we should be exiting)*/ + if (!memory_add) { + assert(!gpac_allocated_memory); + assert(!gpac_nb_alloc_blocs); + + /*we destroy the mutex we own, then we return*/ + gf_mx_del(gpac_allocations_lock); + gpac_allocations_lock = NULL; + + gf_memory_log(GF_MEMORY_DEBUG, "[MemTracker] the allocated-blocks-list is empty: the freed-blocks-list will be emptied too.\n"); + gf_memory_del(&memory_rem); + + return size; + } else { + gf_memory_add(&memory_rem, ptr, size, filename, line); + } + } + } + + /*unlock*/ + gf_mx_v(gpac_allocations_lock); + + return size; +} + +static void gf_memory_log(unsigned int level, const char *fmt, ...) +{ + va_list vl; + char msg[1024]; + assert(strlen(fmt) < 200); + va_start(vl, fmt); + vsprintf(msg, fmt, vl); + GF_LOG(level, GF_LOG_MEMORY, (msg)); + va_end(vl); +} + +/*prints allocations sum-up*/ +void gf_memory_size() +{ + unsigned int level = gpac_nb_alloc_blocs ? GF_MEMORY_ERROR : GF_MEMORY_INFO; + gf_memory_log(level, "[MemTracker] Total: %d bytes allocated on %d blocks\n", gpac_allocated_memory, gpac_nb_alloc_blocs); +} + +/*prints the state of current allocations*/ +void gf_memory_print() +{ + /*if lists are empty, the mutex is also NULL*/ + if (!memory_add) { + assert(!gpac_allocations_lock); + gf_memory_log(GF_MEMORY_INFO, "[MemTracker] gf_memory_print(): the memory tracker is not initialized.\n"); + } else { + int i=0; + assert(gpac_allocations_lock); + + gf_memory_log(GF_MEMORY_INFO, "\n[MemTracker] Printing the current state of allocations:\n"); + + /*lock*/ + gf_mx_p(gpac_allocations_lock); +#if GPAC_MEMORY_TRACKING_HASH_TABLE + for (i=0; inext; + gf_memory_log(GF_MEMORY_INFO, "[MemTracker] Memory Block %p (size %d) allocated\n in file %s at line %d\n", curr_element->ptr, curr_element->size, curr_element->filename, curr_element->line); + curr_element = next_element; + } + } + gf_memory_size(); + + /*unlock*/ + gf_mx_v(gpac_allocations_lock); + } +} + +#endif /*GPAC_MEMORY_TRACKING*/ + + +/*gf_asprintf(): as_printf portable implementation*/ +#if defined(WIN32) || defined(_WIN32_WCE) +static GFINLINE int gf_vasprintf (char **strp, const char *fmt, va_list ap) +{ + int vsn_ret, size; + char *buffer, *realloc_buffer; + + size = 2*strlen(fmt); /*first guess for the size*/ + buffer = (char*)gf_malloc(size); + if (buffer == NULL) + return -1; + + while (1) { + vsn_ret = _vsnprintf(buffer, size, fmt, ap); + + /* If that worked, return the string. */ + if (vsn_ret>-1 && vsn_retbsmode) { + case GF_BITSTREAM_WRITE: + if (bs->position + repeat_count > bs->size) + return 0; + memset(bs->original + bs->position, byte, repeat_count); + bs->position += repeat_count; + return repeat_count; + case GF_BITSTREAM_WRITE_DYN: + /*need to gf_realloc ...*/ + if (bs->position+repeat_count> bs->size) { + if (bs->size + repeat_count > 0xFFFFFFFF) + return 0; + bs->original = (char*)gf_realloc(bs->original, sizeof(u32)*((u32) bs->size + repeat_count)); + if (!bs->original) + return 0; + bs->size += repeat_count; + } + memset(bs->original + bs->position, byte, repeat_count); + bs->position += repeat_count; + return repeat_count; + case GF_BITSTREAM_FILE_READ: + case GF_BITSTREAM_FILE_WRITE: + if (fwrite(&byte, 1, repeat_count, bs->stream) != repeat_count) return 0; + if (bs->size == bs->position) bs->size += repeat_count; + bs->position += repeat_count; + return repeat_count; + default: + return 0; + } +} + + + GF_EXPORT void gf_bs_write_float(GF_BitStream *bs, Float value) { diff --git a/src/utils/cache.c b/src/utils/cache.c index 80139d8..318d45d 100644 --- a/src/utils/cache.c +++ b/src/utils/cache.c @@ -1,27 +1,27 @@ /* - * GPAC Multimedia Framework - * - * Authors: Jean Le Feuvre - * Copyright (c) 2005-2005 ENST - * All rights reserved - * - * This file is part of GPAC / common tools sub-project - * - * GPAC is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * GPAC 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ +* GPAC Multimedia Framework +* +* Authors: Jean Le Feuvre +* Copyright (c) 2005-2005 ENST +* All rights reserved +* +* This file is part of GPAC / common tools sub-project +* +* GPAC is free software; you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation; either version 2, or (at your option) +* any later version. +* +* GPAC 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 Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with this library; see the file COPYING. If not, write to +* the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +* +*/ #include #include @@ -44,6 +44,8 @@ static const char * CACHE_SECTION_NAME = "cache"; static const char * CACHE_SECTION_NAME_URL = "url"; +static const char * CACHE_SECTION_NAME_RANGE = "range"; + static const char * CACHE_SECTION_NAME_ETAG = "ETag"; static const char * CACHE_SECTION_NAME_MIME_TYPE = "Content-Type"; @@ -54,283 +56,303 @@ static const char * CACHE_SECTION_NAME_LAST_MODIFIED = "Last-Modified"; enum CacheValid { - NO_VALIDATION = 0, - MUST_REVALIDATE = 1, - IS_HTTPS = 2, - CORRUPTED = 4, - NO_CACHE = 8 + NO_VALIDATION = 0, + MUST_REVALIDATE = 1, + IS_HTTPS = 2, + CORRUPTED = 4, + NO_CACHE = 8 }; struct __CacheReaderStruct { - FILE * readPtr; - s64 readPosition; + FILE * readPtr; + s64 readPosition; }; typedef struct __DownloadedRangeStruc { - u32 start; - u32 end; - const char * filename; + u32 start; + u32 end; + const char * filename; } * DownloadedRange; +//#define ENABLE_WRITE_MX /** - * This opaque structure handles the data from the cache - */ +* This opaque structure handles the data from the cache +*/ struct __DownloadedCacheEntryStruct { - /** - * URL of the cache (never NULL) - */ - char * url; - /** - * Hash of the cache (never NULL) - */ - char * hash; - /** - * Name of the cache filename, (can be NULL) - */ - char * cache_filename; - /** - * Name of the cached properties filename , (can be NULL) - */ - GF_Config * properties; - /** - * Theorical size of cache if any - */ - u32 contentLength; - /** - * Real size of cache - */ - u32 cacheSize; - /** - * GMT timestamp for revalidation - */ - u32 validity; - /** - * The last modification time on the server - */ - char * serverLastModified; - /** - * The last modification time of the cache if any - */ - char * diskLastModified; - /** - * ETag if any - */ - char * serverETag; - /** - * ETag if any - */ - char * diskETag; - /** - * Mime-type (never NULL) - */ - char * mimeType; - /** - * Write pointer for the cache - */ - FILE * writeFilePtr; - /** - * Bytes written during this cache session - */ - u32 written_in_cache; - /** - * Flag indicating whether we have to revalidate - */ - enum CacheValid flags; - - const GF_DownloadSession * write_session; - - GF_Mutex * write_mutex; - - GF_List * sessions; - - Bool deletableFilesOnDelete; - - GF_DownloadManager * dm; + /** + * URL of the cache (never NULL) + */ + char * url; + /** + * Hash of the cache (never NULL) + */ + char * hash; + /** + * Name of the cache filename, (can be NULL) + */ + char * cache_filename; + /** + * Name of the cached properties filename , (can be NULL) + */ + GF_Config * properties; + /** + * Theorical size of cache if any + */ + u32 contentLength; + /** + * Real size of cache + */ + u32 cacheSize; + /** + * GMT timestamp for revalidation + */ + u32 validity; + /** + * The last modification time on the server + */ + char * serverLastModified; + /** + * The last modification time of the cache if any + */ + char * diskLastModified; + /** + * ETag if any + */ + char * serverETag; + /** + * ETag if any + */ + char * diskETag; + /** + * Mime-type (never NULL) + */ + char * mimeType; + /** + * Write pointer for the cache + */ + FILE * writeFilePtr; + /** + * Bytes written during this cache session + */ + u32 written_in_cache; + /** + * Flag indicating whether we have to revalidate + */ + enum CacheValid flags; + + const GF_DownloadSession * write_session; + +#ifdef ENABLE_WRITE_MX + GF_Mutex * write_mutex; +#endif + + GF_List * sessions; + + Bool deletableFilesOnDelete; + + GF_DownloadManager * dm; + + /*start and end range of the cache*/ + u64 range_start, range_end; + }; -Bool enum_cache_files(void *cbck, char *item_name, char *item_path) { - const char * startPattern; - int sz; - assert( cbck ); - assert( item_name ); - assert( item_path); - startPattern = (const char *) cbck; - sz = strlen( startPattern ); - if (!strncmp(startPattern, item_name, sz)) { - if (GF_OK != gf_delete_file(item_path)) - GF_LOG(GF_LOG_ERROR, GF_LOG_NETWORK, ("[CACHE] : failed to cleanup file %s\n", item_path)); - } - return 0; +Bool delete_cache_files(void *cbck, char *item_name, char *item_path) { + const char * startPattern; + int sz; + assert( cbck ); + assert( item_name ); + assert( item_path); + startPattern = (const char *) cbck; + sz = strlen( startPattern ); + if (!strncmp(startPattern, item_name, sz)) { + if (GF_OK != gf_delete_file(item_path)) + GF_LOG(GF_LOG_ERROR, GF_LOG_NETWORK, ("[CACHE] : failed to cleanup file %s\n", item_path)); + } + return 0; } static const char * cache_file_prefix = "gpac_cache_"; GF_Err gf_cache_delete_all_cached_files(const char * directory) { - gf_enum_dir_item item = &enum_cache_files; - GF_LOG(GF_LOG_INFO, GF_LOG_NETWORK, ("Deleting cached files in %s...\n", directory)); - return gf_enum_directory( directory, 0, item, (void*)cache_file_prefix, NULL); + GF_LOG(GF_LOG_INFO, GF_LOG_NETWORK, ("Deleting cached files in %s...\n", directory)); + return gf_enum_directory( directory, 0, delete_cache_files, (void*)cache_file_prefix, NULL); } void gf_cache_entry_set_delete_files_when_deleted(const DownloadedCacheEntry entry) { - if (entry) - entry->deletableFilesOnDelete = 1; + if (entry) + entry->deletableFilesOnDelete = 1; } Bool gf_cache_entry_is_delete_files_when_deleted(const DownloadedCacheEntry entry) { - if (!entry) - return 0; - return entry->deletableFilesOnDelete; + if (!entry) + return 0; + return entry->deletableFilesOnDelete; } #define CHECK_ENTRY if (!entry) { GF_LOG(GF_LOG_WARNING, GF_LOG_NETWORK, ("[CACHE] entry is null at " __FILE__ ":%d\n", __LINE__)); return GF_BAD_PARAM; } /* - * Getters functions - */ +* Getters functions +*/ const char * gf_cache_get_etag_on_server ( const DownloadedCacheEntry entry ) { - return entry ? entry->serverETag : NULL; + return entry ? entry->serverETag : NULL; } const char * gf_cache_get_etag_on_disk ( const DownloadedCacheEntry entry ) { - return entry ? entry->serverETag : NULL; + return entry ? entry->serverETag : NULL; } const char * gf_cache_get_mime_type ( const DownloadedCacheEntry entry ) { - return entry ? entry->mimeType : NULL; + return entry ? entry->mimeType : NULL; } GF_Err gf_cache_set_etag_on_server(const DownloadedCacheEntry entry, const char * eTag ) { - if (!entry) - return GF_BAD_PARAM; - if (entry->serverETag) - gf_free(entry->serverETag); - entry->serverETag = eTag ? gf_strdup(eTag) : NULL; - return GF_OK; + if (!entry) + return GF_BAD_PARAM; + if (entry->serverETag) + gf_free(entry->serverETag); + entry->serverETag = eTag ? gf_strdup(eTag) : NULL; + return GF_OK; } GF_Err gf_cache_set_etag_on_disk(const DownloadedCacheEntry entry, const char * eTag ) { - if (!entry) - return GF_BAD_PARAM; - if (entry->diskETag) - gf_free(entry->diskETag); - entry->diskETag = eTag ? gf_strdup(eTag) : NULL; - return GF_OK; + if (!entry) + return GF_BAD_PARAM; + if (entry->diskETag) + gf_free(entry->diskETag); + entry->diskETag = eTag ? gf_strdup(eTag) : NULL; + return GF_OK; } GF_Err gf_cache_set_mime_type(const DownloadedCacheEntry entry, const char * mime_type ) { - if (!entry) - return GF_BAD_PARAM; - if (entry->mimeType) - gf_free(entry->mimeType); - entry->mimeType = mime_type? gf_strdup( mime_type) : NULL; - return GF_OK; + if (!entry) + return GF_BAD_PARAM; + if (entry->mimeType) + gf_free(entry->mimeType); + entry->mimeType = mime_type? gf_strdup( mime_type) : NULL; + return GF_OK; } Bool gf_cache_is_cached_on_disk(const DownloadedCacheEntry entry ) { - if (entry == NULL) - return 0; - return entry->flags & NO_CACHE; + if (entry == NULL) + return 0; + return entry->flags & NO_CACHE; +} + +u64 gf_cache_get_start_range( const DownloadedCacheEntry entry ) +{ + return entry ? entry->range_start : 0; +} + +u64 gf_cache_get_end_range( const DownloadedCacheEntry entry ) +{ + return entry ? entry->range_end : 0; } const char * gf_cache_get_url ( const DownloadedCacheEntry entry ) { - return entry ? entry->url : NULL; + return entry ? entry->url : NULL; } const char * gf_cache_get_hash ( const DownloadedCacheEntry entry ) { - return entry ? entry->hash : NULL; + return entry ? entry->hash : NULL; } const char * gf_cache_get_last_modified_on_server ( const DownloadedCacheEntry entry ) { - return entry ? entry->serverLastModified : NULL; + return entry ? entry->serverLastModified : NULL; } const char * gf_cache_get_last_modified_on_disk ( const DownloadedCacheEntry entry ) { - return entry ? entry->diskLastModified : NULL; + return entry ? entry->diskLastModified : NULL; } GF_Err gf_cache_set_last_modified_on_server ( const DownloadedCacheEntry entry, const char * newLastModified ) { - if (!entry) - return GF_BAD_PARAM; - if (entry->serverLastModified) - gf_free(entry->serverLastModified); - entry->serverLastModified = newLastModified ? gf_strdup(newLastModified) : NULL; - return GF_OK; + if (!entry) + return GF_BAD_PARAM; + if (entry->serverLastModified) + gf_free(entry->serverLastModified); + entry->serverLastModified = newLastModified ? gf_strdup(newLastModified) : NULL; + return GF_OK; } GF_Err gf_cache_set_last_modified_on_disk ( const DownloadedCacheEntry entry, const char * newLastModified ) { - if (!entry) - return GF_BAD_PARAM; - if (entry->diskLastModified) - gf_free(entry->diskLastModified); - entry->diskLastModified = newLastModified ? gf_strdup(newLastModified) : NULL; - return GF_OK; + if (!entry) + return GF_BAD_PARAM; + if (entry->diskLastModified) + gf_free(entry->diskLastModified); + entry->diskLastModified = newLastModified ? gf_strdup(newLastModified) : NULL; + return GF_OK; } #define _CACHE_TMP_SIZE 4096 GF_Err gf_cache_flush_disk_cache ( const DownloadedCacheEntry entry ) { - CHECK_ENTRY; - if ( !entry->properties) - return GF_OK; - GF_LOG(GF_LOG_DEBUG, GF_LOG_NETWORK, ("[CACHE] gf_cache_flush_disk_cache:%d for entry=%p\n", __LINE__, entry)); - gf_cfg_set_key(entry->properties, CACHE_SECTION_NAME, CACHE_SECTION_NAME_URL, entry->url); - if (entry->mimeType) - gf_cfg_set_key(entry->properties, CACHE_SECTION_NAME, CACHE_SECTION_NAME_MIME_TYPE, entry->mimeType); - if (entry->diskETag) - gf_cfg_set_key(entry->properties, CACHE_SECTION_NAME, CACHE_SECTION_NAME_ETAG, entry->diskETag); - if (entry->diskLastModified) - gf_cfg_set_key(entry->properties, CACHE_SECTION_NAME, CACHE_SECTION_NAME_LAST_MODIFIED, entry->diskLastModified); - { - char buff[16]; - snprintf(buff, 16, "%d", entry->contentLength); - gf_cfg_set_key(entry->properties, CACHE_SECTION_NAME, CACHE_SECTION_NAME_CONTENT_SIZE, buff); - } - return gf_cfg_save ( entry->properties ); + char buff[100]; + CHECK_ENTRY; + if ( !entry->properties) + return GF_OK; + GF_LOG(GF_LOG_DEBUG, GF_LOG_NETWORK, ("[CACHE] gf_cache_flush_disk_cache:%d for entry=%p\n", __LINE__, entry)); + gf_cfg_set_key(entry->properties, CACHE_SECTION_NAME, CACHE_SECTION_NAME_URL, entry->url); + + sprintf(buff, LLD"-"LLD, entry->range_start, entry->range_end); + gf_cfg_set_key(entry->properties, CACHE_SECTION_NAME, CACHE_SECTION_NAME_RANGE, buff); + + if (entry->mimeType) + gf_cfg_set_key(entry->properties, CACHE_SECTION_NAME, CACHE_SECTION_NAME_MIME_TYPE, entry->mimeType); + if (entry->diskETag) + gf_cfg_set_key(entry->properties, CACHE_SECTION_NAME, CACHE_SECTION_NAME_ETAG, entry->diskETag); + if (entry->diskLastModified) + gf_cfg_set_key(entry->properties, CACHE_SECTION_NAME, CACHE_SECTION_NAME_LAST_MODIFIED, entry->diskLastModified); + { + snprintf(buff, 16, "%d", entry->contentLength); + gf_cfg_set_key(entry->properties, CACHE_SECTION_NAME, CACHE_SECTION_NAME_CONTENT_SIZE, buff); + } + return gf_cfg_save ( entry->properties ); } u32 gf_cache_get_cache_filesize ( const DownloadedCacheEntry entry ) { - return entry ? entry->cacheSize : -1; + return entry ? entry->cacheSize : -1; } const char * gf_cache_get_cache_filename( const DownloadedCacheEntry entry ) { - return entry ? entry->cache_filename : NULL; + return entry ? entry->cache_filename : NULL; } GF_Err appendHttpCacheHeaders(const DownloadedCacheEntry entry, char * httpRequest) { - if (!entry || !httpRequest) - return GF_BAD_PARAM; - if (entry->flags) - return GF_OK; - if (gf_cache_check_if_cache_file_is_corrupted(entry)) - return GF_OK; - /* OK, this is potentially bad if httpRequest is not big enough */ - if (entry->diskETag) { - strcat(httpRequest, "If-None-Match: "); - strcat(httpRequest, entry->diskETag); - strcat(httpRequest, "\r\n"); - } - if (entry->diskLastModified) { - strcat(httpRequest, "If-Modified-Since: "); - strcat(httpRequest, entry->diskLastModified); - strcat(httpRequest, "\r\n"); - } - return GF_OK; + if (!entry || !httpRequest) + return GF_BAD_PARAM; + if (entry->flags) + return GF_OK; + if (gf_cache_check_if_cache_file_is_corrupted(entry)) + return GF_OK; + /* OK, this is potentially bad if httpRequest is not big enough */ + if (entry->diskETag) { + strcat(httpRequest, "If-None-Match: "); + strcat(httpRequest, entry->diskETag); + strcat(httpRequest, "\r\n"); + } + if (entry->diskLastModified) { + strcat(httpRequest, "If-Modified-Since: "); + strcat(httpRequest, entry->diskLastModified); + strcat(httpRequest, "\r\n"); + } + return GF_OK; } #define _CACHE_HASH_SIZE 20 @@ -341,266 +363,284 @@ static const char * default_cache_file_suffix = ".dat"; static const char * cache_file_info_suffix = ".txt"; -DownloadedCacheEntry gf_cache_create_entry ( GF_DownloadManager * dm, const char * cache_directory, const char * url ) +DownloadedCacheEntry gf_cache_create_entry ( GF_DownloadManager * dm, const char * cache_directory, const char * url , u64 start_range, u64 end_range) { - char tmp[_CACHE_TMP_SIZE]; - u8 hash[_CACHE_HASH_SIZE]; - int sz; - char ext[_CACHE_MAX_EXTENSION_SIZE]; - DownloadedCacheEntry entry = NULL; - if ( !dm || !url || !cache_directory) { - GF_LOG(GF_LOG_WARNING, GF_LOG_NETWORK, - ("[CACHE] gf_cache_create_entry :%d, dm=%p, url=%s cache_directory=%s, aborting.\n", __LINE__, dm, url, cache_directory)); - return entry; - } - sz = strlen ( url ); - if ( sz > _CACHE_TMP_SIZE ) - { - GF_LOG(GF_LOG_WARNING, GF_LOG_NETWORK, - ("[CACHE] gf_cache_create_entry:%d : ERROR, URL is too long (%d chars), more than %d chars.\n", __LINE__, sz, _CACHE_TMP_SIZE )); - return entry; - } - tmp[0] = '\0'; - /*generate hash of the full url*/ - strcpy ( tmp, url ); - gf_sha1_csum ( tmp, strlen ( tmp ), hash ); - tmp[0] = 0; - { - int i; - for ( i=0; i<20; i++ ) - { - char t[3]; - t[2] = 0; - sprintf ( t, "%02X", hash[i] ); - strcat ( tmp, t ); - } - } - assert ( strlen ( tmp ) == (_CACHE_HASH_SIZE * 2) ); - - entry = gf_malloc ( sizeof ( struct __DownloadedCacheEntryStruct ) ); - if ( !entry ) { - GF_LOG(GF_LOG_WARNING, GF_LOG_NETWORK, ("gf_cache_create_entry:%d : OUT of memory !\n", __LINE__)); - return NULL; - } - GF_LOG(GF_LOG_DEBUG, GF_LOG_NETWORK, - ("[CACHE] gf_cache_create_entry:%d, entry=%p\n", __LINE__, entry)); - entry->properties = NULL; - entry->writeFilePtr = NULL; - entry->url = gf_strdup ( url ); - entry->hash = gf_strdup ( tmp ); - entry->mimeType = NULL; - /* Sizeof cache directory + hash + possible extension */ - entry->cache_filename = gf_malloc ( strlen ( cache_directory ) + strlen(cache_file_prefix) + strlen(tmp) + _CACHE_MAX_EXTENSION_SIZE + 1); - - entry->cacheSize = 0; - entry->contentLength = 0; - entry->serverETag = NULL; - entry->diskETag = NULL; - entry->flags = NO_VALIDATION; - entry->validity = 0; - entry->diskLastModified = NULL; - entry->serverLastModified = NULL; - entry->dm = dm; - { - char name[1024]; - snprintf(name, 1024, "CachedEntryWriteMx=%p, url=%s", (void*) entry, url); - entry->write_mutex = gf_mx_new(name); - assert( entry->write_mutex); - } - entry->deletableFilesOnDelete = 0; - entry->write_session = NULL; - entry->sessions = gf_list_new(); - if ( !entry->hash || !entry->url || !entry->cache_filename || !entry->sessions) - { - GF_Err err; - /* Probably out of memory */ - GF_LOG(GF_LOG_WARNING, GF_LOG_NETWORK, ("[CACHE] gf_cache_create_entry:%d, aborting due to OUT of MEMORY !\n", __LINE__)); - err = gf_cache_delete_entry ( entry ); - assert ( err == GF_OK ); - return NULL; - } - tmp[0] = '\0'; - strcpy ( entry->cache_filename, cache_directory ); - strcat( entry->cache_filename, cache_file_prefix ); - strcat ( entry->cache_filename, entry->hash ); - strcpy ( tmp, url ); - - { - char * parser; - parser = strrchr ( tmp, '?' ); - if ( parser ) - parser[0] = '\0'; - parser = strrchr ( tmp, '#' ); - if ( parser ) - parser[0] = '\0'; - parser = strrchr ( tmp, '.' ); - if ( parser && ( strlen ( parser ) < _CACHE_MAX_EXTENSION_SIZE ) ) - strncpy(ext, parser, _CACHE_MAX_EXTENSION_SIZE); - else - strncpy(ext, default_cache_file_suffix, _CACHE_MAX_EXTENSION_SIZE); - assert (strlen(ext)); - strcat( entry->cache_filename, ext); - } - tmp[0] = '\0'; - strcpy( tmp, cache_file_prefix); - strcat( tmp, entry->hash ); - strcat( tmp , ext); - strcat ( tmp, cache_file_info_suffix ); - entry->properties = gf_cfg_force_new ( cache_directory, tmp ); - if ( !entry->properties ) - { - GF_Err err; - /* OUT of memory ? */ - GF_LOG(GF_LOG_WARNING, GF_LOG_NETWORK, ("[CACHE] gf_cache_create_entry:%d, aborting due to OUT of MEMORY !\n", __LINE__)); - err = gf_cache_delete_entry ( entry ); - assert ( err == GF_OK ); - return NULL; - } - gf_cache_set_etag_on_disk(entry, gf_cfg_get_key(entry->properties, CACHE_SECTION_NAME, CACHE_SECTION_NAME_ETAG)); - gf_cache_set_etag_on_server(entry, gf_cfg_get_key(entry->properties, CACHE_SECTION_NAME, CACHE_SECTION_NAME_ETAG)); - gf_cache_set_mime_type(entry, gf_cfg_get_key(entry->properties, CACHE_SECTION_NAME, CACHE_SECTION_NAME_MIME_TYPE)); - gf_cache_set_last_modified_on_disk(entry, gf_cfg_get_key(entry->properties, CACHE_SECTION_NAME, CACHE_SECTION_NAME_LAST_MODIFIED)); - gf_cache_set_last_modified_on_server(entry, gf_cfg_get_key(entry->properties, CACHE_SECTION_NAME, CACHE_SECTION_NAME_LAST_MODIFIED)); - { - const char * keyValue = gf_cfg_get_key ( entry->properties, CACHE_SECTION_NAME, CACHE_SECTION_NAME_URL ); - if ( keyValue == NULL || stricmp ( url, keyValue ) ) - entry->flags |= CORRUPTED; - } - gf_cache_check_if_cache_file_is_corrupted(entry); - - return entry; + char tmp[_CACHE_TMP_SIZE]; + u8 hash[_CACHE_HASH_SIZE]; + int sz; + char ext[_CACHE_MAX_EXTENSION_SIZE]; + DownloadedCacheEntry entry = NULL; + if ( !dm || !url || !cache_directory) { + GF_LOG(GF_LOG_WARNING, GF_LOG_NETWORK, + ("[CACHE] gf_cache_create_entry :%d, dm=%p, url=%s cache_directory=%s, aborting.\n", __LINE__, dm, url, cache_directory)); + return entry; + } + sz = strlen ( url ); + if ( sz > _CACHE_TMP_SIZE ) + { + GF_LOG(GF_LOG_WARNING, GF_LOG_NETWORK, + ("[CACHE] gf_cache_create_entry:%d : ERROR, URL is too long (%d chars), more than %d chars.\n", __LINE__, sz, _CACHE_TMP_SIZE )); + return entry; + } + tmp[0] = '\0'; + /*generate hash of the full url*/ + if (start_range && end_range) { + sprintf(tmp, "%s_"LLD"-"LLD, url, start_range, end_range ); + } else { + strcpy ( tmp, url ); + } + gf_sha1_csum ( tmp, strlen ( tmp ), hash ); + tmp[0] = 0; + { + int i; + for ( i=0; i<20; i++ ) + { + char t[3]; + t[2] = 0; + sprintf ( t, "%02X", hash[i] ); + strcat ( tmp, t ); + } + } + assert ( strlen ( tmp ) == (_CACHE_HASH_SIZE * 2) ); + + GF_SAFEALLOC(entry, struct __DownloadedCacheEntryStruct); + + if ( !entry ) { + GF_LOG(GF_LOG_WARNING, GF_LOG_NETWORK, ("gf_cache_create_entry:%d : OUT of memory !\n", __LINE__)); + return NULL; + } + GF_LOG(GF_LOG_DEBUG, GF_LOG_NETWORK, + ("[CACHE] gf_cache_create_entry:%d, entry=%p\n", __LINE__, entry)); + + entry->url = gf_strdup ( url ); + entry->hash = gf_strdup ( tmp ); + + /* Sizeof cache directory + hash + possible extension */ + entry->cache_filename = gf_malloc ( strlen ( cache_directory ) + strlen(cache_file_prefix) + strlen(tmp) + _CACHE_MAX_EXTENSION_SIZE + 1); + + entry->cacheSize = 0; + entry->contentLength = 0; + entry->serverETag = NULL; + entry->diskETag = NULL; + entry->flags = NO_VALIDATION; + entry->validity = 0; + entry->diskLastModified = NULL; + entry->serverLastModified = NULL; + entry->dm = dm; + entry->range_start = start_range; + entry->range_end = end_range; + + { + char name[1024]; + snprintf(name, 1024, "CachedEntryWriteMx=%p, url=%s", (void*) entry, url); +#ifdef ENABLE_WRITE_MX + entry->write_mutex = gf_mx_new(name); + assert( entry->write_mutex); +#endif + } + entry->deletableFilesOnDelete = 0; + entry->write_session = NULL; + entry->sessions = gf_list_new(); + if ( !entry->hash || !entry->url || !entry->cache_filename || !entry->sessions) + { + GF_Err err; + /* Probably out of memory */ + GF_LOG(GF_LOG_WARNING, GF_LOG_NETWORK, ("[CACHE] gf_cache_create_entry:%d, aborting due to OUT of MEMORY !\n", __LINE__)); + err = gf_cache_delete_entry ( entry ); + assert ( err == GF_OK ); + return NULL; + } + tmp[0] = '\0'; + strcpy ( entry->cache_filename, cache_directory ); + strcat( entry->cache_filename, cache_file_prefix ); + strcat ( entry->cache_filename, entry->hash ); + strcpy ( tmp, url ); + + { + char * parser; + parser = strrchr ( tmp, '?' ); + if ( parser ) + parser[0] = '\0'; + parser = strrchr ( tmp, '#' ); + if ( parser ) + parser[0] = '\0'; + parser = strrchr ( tmp, '.' ); + if ( parser && ( strlen ( parser ) < _CACHE_MAX_EXTENSION_SIZE ) ) + strncpy(ext, parser, _CACHE_MAX_EXTENSION_SIZE); + else + strncpy(ext, default_cache_file_suffix, _CACHE_MAX_EXTENSION_SIZE); + assert (strlen(ext)); + strcat( entry->cache_filename, ext); + } + tmp[0] = '\0'; + strcpy( tmp, cache_file_prefix); + strcat( tmp, entry->hash ); + strcat( tmp , ext); + strcat ( tmp, cache_file_info_suffix ); + entry->properties = gf_cfg_force_new ( cache_directory, tmp ); + if ( !entry->properties ) + { + GF_Err err; + /* OUT of memory ? */ + GF_LOG(GF_LOG_WARNING, GF_LOG_NETWORK, ("[CACHE] gf_cache_create_entry:%d, aborting due to OUT of MEMORY !\n", __LINE__)); + err = gf_cache_delete_entry ( entry ); + assert ( err == GF_OK ); + return NULL; + } + gf_cache_set_etag_on_disk(entry, gf_cfg_get_key(entry->properties, CACHE_SECTION_NAME, CACHE_SECTION_NAME_ETAG)); + gf_cache_set_etag_on_server(entry, gf_cfg_get_key(entry->properties, CACHE_SECTION_NAME, CACHE_SECTION_NAME_ETAG)); + gf_cache_set_mime_type(entry, gf_cfg_get_key(entry->properties, CACHE_SECTION_NAME, CACHE_SECTION_NAME_MIME_TYPE)); + gf_cache_set_last_modified_on_disk(entry, gf_cfg_get_key(entry->properties, CACHE_SECTION_NAME, CACHE_SECTION_NAME_LAST_MODIFIED)); + gf_cache_set_last_modified_on_server(entry, gf_cfg_get_key(entry->properties, CACHE_SECTION_NAME, CACHE_SECTION_NAME_LAST_MODIFIED)); + { + const char * keyValue = gf_cfg_get_key ( entry->properties, CACHE_SECTION_NAME, CACHE_SECTION_NAME_URL ); + if ( keyValue == NULL || stricmp ( url, keyValue ) ) + entry->flags |= CORRUPTED; + + keyValue = gf_cfg_get_key(entry->properties, CACHE_SECTION_NAME, CACHE_SECTION_NAME_RANGE); + if (keyValue) sscanf(keyValue, LLD"-"LLD, &entry->range_start, &entry->range_end); + } + gf_cache_check_if_cache_file_is_corrupted(entry); + + return entry; } GF_Err gf_cache_set_content_length( const DownloadedCacheEntry entry, u32 length ) { - CHECK_ENTRY; - entry->contentLength = length; - return GF_OK; + CHECK_ENTRY; + entry->contentLength = length; + return GF_OK; } u32 gf_cache_get_content_length( const DownloadedCacheEntry entry) { - return entry ? entry->contentLength : 0; + return entry ? entry->contentLength : 0; } GF_Err gf_cache_close_write_cache( const DownloadedCacheEntry entry, const GF_DownloadSession * sess, Bool success ) { - GF_Err e = GF_OK; - CHECK_ENTRY; - if (!sess || !entry->write_session || entry->write_session != sess) - return GF_OK; - assert( sess == entry->write_session ); - if (entry->writeFilePtr) { - GF_LOG(GF_LOG_INFO, GF_LOG_NETWORK, - ("[CACHE] Closing file %s, %d bytes written.\n", entry->cache_filename, entry->written_in_cache)); - if (fflush( entry->writeFilePtr ) || fclose( entry->writeFilePtr )) - e = GF_IO_ERR; - e|= gf_cache_flush_disk_cache(entry); - if (e == GF_OK && success) { - e|= gf_cache_set_last_modified_on_disk( entry, gf_cache_get_last_modified_on_server(entry)); - e|= gf_cache_set_etag_on_disk( entry, gf_cache_get_etag_on_server(entry)); - } - e|= gf_cache_flush_disk_cache(entry); + GF_Err e = GF_OK; + CHECK_ENTRY; + if (!sess || !entry->write_session || entry->write_session != sess) + return GF_OK; + assert( sess == entry->write_session ); + if (entry->writeFilePtr) { + GF_LOG(GF_LOG_INFO, GF_LOG_NETWORK, + ("[CACHE] Closing file %s, %d bytes written.\n", entry->cache_filename, entry->written_in_cache)); + if (fflush( entry->writeFilePtr ) || fclose( entry->writeFilePtr )) + e = GF_IO_ERR; + e|= gf_cache_flush_disk_cache(entry); + if (e == GF_OK && success) { + e|= gf_cache_set_last_modified_on_disk( entry, gf_cache_get_last_modified_on_server(entry)); + e|= gf_cache_set_etag_on_disk( entry, gf_cache_get_etag_on_server(entry)); + } + e|= gf_cache_flush_disk_cache(entry); #if defined(_BSD_SOURCE) || _XOPEN_SOURCE >= 500 - /* On UNIX, be sure to flush all the data */ - sync(); + /* On UNIX, be sure to flush all the data */ + sync(); #endif - entry->writeFilePtr = NULL; - if (GF_OK != e) { - GF_LOG(GF_LOG_ERROR, GF_LOG_NETWORK, ("[CACHE] Failed to fully write file on cache, e=%d\n", e)); - } - } - entry->write_session = NULL; - gf_mx_v(entry->write_mutex); - return e; + entry->writeFilePtr = NULL; + if (GF_OK != e) { + GF_LOG(GF_LOG_ERROR, GF_LOG_NETWORK, ("[CACHE] Failed to fully write file on cache, e=%d\n", e)); + } + } + entry->write_session = NULL; +#ifdef ENABLE_WRITE_MX + gf_mx_v(entry->write_mutex); +#endif + return e; } GF_Err gf_cache_open_write_cache( const DownloadedCacheEntry entry, const GF_DownloadSession * sess ) { - CHECK_ENTRY; - if (!sess) - return GF_BAD_PARAM; - GF_LOG(GF_LOG_DEBUG, GF_LOG_NETWORK,("[CACHE] Locking write mutex %p for entry=%s\n", (void*) (entry->write_mutex), entry->url) ); - gf_mx_p(entry->write_mutex); - entry->write_session = sess; - assert( ! entry->writeFilePtr); - GF_LOG(GF_LOG_INFO, GF_LOG_NETWORK, - ("[CACHE] Opening cache file %s for write (%s)...", entry->cache_filename, entry->url)); - entry->writeFilePtr = gf_f64_open(entry->cache_filename, "wb"); - if (!entry->writeFilePtr) { - GF_LOG(GF_LOG_ERROR, GF_LOG_NETWORK, - ("[CACHE] Error while opening cache file %s for writting.", entry->cache_filename)); - entry->write_session = NULL; - gf_mx_v(entry->write_mutex); - return GF_IO_ERR; - } - entry->written_in_cache = 0; - return GF_OK; + CHECK_ENTRY; + if (!sess) + return GF_BAD_PARAM; +#ifdef ENABLE_WRITE_MX + GF_LOG(GF_LOG_DEBUG, GF_LOG_NETWORK,("[CACHE] Locking write mutex %p for entry=%s\n", (void*) (entry->write_mutex), entry->url) ); + gf_mx_p(entry->write_mutex); +#endif + entry->write_session = sess; + assert( ! entry->writeFilePtr); + GF_LOG(GF_LOG_INFO, GF_LOG_NETWORK, + ("[CACHE] Opening cache file %s for write (%s)...", entry->cache_filename, entry->url)); + entry->writeFilePtr = gf_f64_open(entry->cache_filename, "wb"); + if (!entry->writeFilePtr) { + GF_LOG(GF_LOG_ERROR, GF_LOG_NETWORK, + ("[CACHE] Error while opening cache file %s for writting.", entry->cache_filename)); + entry->write_session = NULL; +#ifdef ENABLE_WRITE_MX + gf_mx_v(entry->write_mutex); +#endif + return GF_IO_ERR; + } + entry->written_in_cache = 0; + return GF_OK; } GF_Err gf_cache_write_to_cache( const DownloadedCacheEntry entry, const GF_DownloadSession * sess, const char * data, const u32 size) { - u32 readen; - GF_LOG(GF_LOG_DEBUG, GF_LOG_NETWORK, ("[CACHE] gf_cache_write_to_cache:%d\n", __LINE__)); - CHECK_ENTRY; - if (!data || !entry->writeFilePtr || sess != entry->write_session) { - GF_LOG(GF_LOG_WARNING, GF_LOG_NETWORK, ("Incorrect parameter : data=%p, entry->writeFilePtr=%p at "__FILE__, data, entry->writeFilePtr)); - return GF_BAD_PARAM; - } - readen = fwrite(data, sizeof(char), size, entry->writeFilePtr); - if (readen > 0) - entry->written_in_cache+= readen; - if (readen != size) { - /* Something bad happened */ - GF_LOG(GF_LOG_WARNING, GF_LOG_NETWORK, - ("[CACHE] Error while writting %d bytes of data to cache : has written only %d bytes.", size, readen)); - gf_cache_close_write_cache(entry, sess, 0); - gf_delete_file(entry->cache_filename); - return GF_IO_ERR; - } - if (fflush(entry->writeFilePtr)) { - GF_LOG(GF_LOG_WARNING, GF_LOG_NETWORK, - ("[CACHE] Error while flushing data bytes to cache file : %s.", entry->cache_filename)); - gf_cache_close_write_cache(entry, sess, 0); - gf_delete_file(entry->cache_filename); - return GF_IO_ERR; - } - return GF_OK; + u32 readen; + GF_LOG(GF_LOG_DEBUG, GF_LOG_NETWORK, ("[CACHE] gf_cache_write_to_cache:%d\n", __LINE__)); + CHECK_ENTRY; + if (!data || !entry->writeFilePtr || sess != entry->write_session) { + GF_LOG(GF_LOG_WARNING, GF_LOG_NETWORK, ("Incorrect parameter : data=%p, entry->writeFilePtr=%p at "__FILE__, data, entry->writeFilePtr)); + return GF_BAD_PARAM; + } + readen = fwrite(data, sizeof(char), size, entry->writeFilePtr); + if (readen > 0) + entry->written_in_cache+= readen; + if (readen != size) { + /* Something bad happened */ + GF_LOG(GF_LOG_WARNING, GF_LOG_NETWORK, + ("[CACHE] Error while writting %d bytes of data to cache : has written only %d bytes.", size, readen)); + gf_cache_close_write_cache(entry, sess, 0); + gf_delete_file(entry->cache_filename); + return GF_IO_ERR; + } + if (fflush(entry->writeFilePtr)) { + GF_LOG(GF_LOG_WARNING, GF_LOG_NETWORK, + ("[CACHE] Error while flushing data bytes to cache file : %s.", entry->cache_filename)); + gf_cache_close_write_cache(entry, sess, 0); + gf_delete_file(entry->cache_filename); + return GF_IO_ERR; + } + return GF_OK; } GF_CacheReader gf_cache_reader_new(const DownloadedCacheEntry entry) { - GF_CacheReader reader; - if (entry == NULL) - return NULL; - reader = gf_malloc(sizeof(struct __CacheReaderStruct)); - if (reader == NULL) - return NULL; - reader->readPtr = gf_f64_open( entry->cache_filename, "rb" ); - reader->readPosition = 0; - if (!reader->readPtr) { - gf_cache_reader_del(reader); - return NULL; - } - return reader; + GF_CacheReader reader; + if (entry == NULL) + return NULL; + reader = gf_malloc(sizeof(struct __CacheReaderStruct)); + if (reader == NULL) + return NULL; + reader->readPtr = gf_f64_open( entry->cache_filename, "rb" ); + reader->readPosition = 0; + if (!reader->readPtr) { + gf_cache_reader_del(reader); + return NULL; + } + return reader; } GF_Err gf_cache_reader_del( GF_CacheReader handle ) { - if (!handle) - return GF_BAD_PARAM; - if (handle->readPtr) - fclose(handle->readPtr); - handle->readPtr = NULL; - handle->readPosition = -1; - return GF_OK; + if (!handle) + return GF_BAD_PARAM; + if (handle->readPtr) + fclose(handle->readPtr); + handle->readPtr = NULL; + handle->readPosition = -1; + return GF_OK; } s64 gf_cache_reader_seek_at( GF_CacheReader reader, u64 seekPosition) { - if (!reader) - return -1; - reader->readPosition = gf_f64_seek(reader->readPtr, seekPosition, SEEK_SET); - return reader->readPosition; + if (!reader) + return -1; + reader->readPosition = gf_f64_seek(reader->readPtr, seekPosition, SEEK_SET); + return reader->readPosition; } s64 gf_cache_reader_get_position( const GF_CacheReader reader) { - if (!reader) - return -1; - return reader->readPosition; + if (!reader) + return -1; + return reader->readPosition; } s64 gf_cache_reader_get_currentSize( GF_CacheReader reader ); @@ -608,144 +648,148 @@ s64 gf_cache_reader_get_currentSize( GF_CacheReader reader ); s64 gf_cache_reader_full_size( GF_CacheReader reader ); s32 gf_cache_reader_read( GF_CacheReader reader, char * buff, s32 length) { - s32 readen; - if (!reader || !buff || length < 0 || !reader->readPtr) - return -1; - readen = fread(buff, sizeof(char), length, reader->readPtr); - if (readen > 0) - reader->readPosition+= readen; - return readen; + s32 readen; + if (!reader || !buff || length < 0 || !reader->readPtr) + return -1; + readen = fread(buff, sizeof(char), length, reader->readPtr); + if (readen > 0) + reader->readPosition+= readen; + return readen; } GF_Err gf_cache_delete_entry ( const DownloadedCacheEntry entry ) { - if ( !entry ) - return GF_OK; - GF_LOG(GF_LOG_DEBUG, GF_LOG_NETWORK, ("[CACHE] gf_cache_delete_entry:%d, entry=%p\n", __LINE__, entry)); - if (entry->writeFilePtr) { - /** Cache should have been close before, abornormal situation */ - GF_LOG(GF_LOG_WARNING, GF_LOG_NETWORK, ("[CACHE] gf_cache_delete_entry:%d, entry=%p, cache has not been closed properly\n", __LINE__, entry)); - fclose(entry->writeFilePtr); - } - if (entry->write_mutex) { - gf_mx_del(entry->write_mutex); - } - if (entry->deletableFilesOnDelete) { - GF_LOG(GF_LOG_INFO, GF_LOG_NETWORK, ("[CACHE] url %s cleanup, deleting %s...\n", entry->url, entry->cache_filename)); - if (GF_OK != gf_delete_file(entry->cache_filename)) - GF_LOG(GF_LOG_WARNING, GF_LOG_NETWORK, ("[CACHE] gf_cache_delete_entry:%d, failed to delete file %s\n", __LINE__, entry->cache_filename)); - } - entry->write_mutex = NULL; - entry->write_session = NULL; - entry->writeFilePtr = NULL; - if (entry->serverETag) - gf_free(entry->serverETag); - entry->serverETag = NULL; - - if (entry->diskETag) - gf_free(entry->diskETag); - entry->diskETag = NULL; - - if (entry->serverLastModified) - gf_free(entry->serverLastModified); - entry->serverLastModified = NULL; - - if (entry->diskLastModified) - gf_free(entry->diskLastModified); - entry->diskLastModified = NULL; - - if ( entry->hash ) - { - gf_free ( entry->hash ); - entry->hash = NULL; - } - if ( entry->url ) - { - gf_free ( entry->url ); - entry->url = NULL; - } - if ( entry->mimeType ) - { - gf_free ( entry->mimeType ); - entry->mimeType = NULL; - } - if ( entry->cache_filename ) - { - gf_free ( entry->cache_filename ); - entry->cache_filename = NULL; - } - if ( entry->properties ) - { - char * propfile; - if (entry->deletableFilesOnDelete) - propfile = gf_cfg_get_filename(entry->properties); - else - propfile = NULL; - gf_cfg_del ( entry->properties ); - entry->properties = NULL; - if (propfile) { - if (GF_OK != gf_delete_file( propfile )) - GF_LOG(GF_LOG_WARNING, GF_LOG_NETWORK, ("[CACHE] gf_cache_delete_entry:%d, failed to delete file %s\n", __LINE__, propfile)); - gf_free ( propfile ); - } - } - entry->dm = NULL; - if (entry->sessions) { - assert( gf_list_count(entry->sessions) == 0); - gf_list_del(entry->sessions); - entry->sessions = NULL; - } - gf_free (entry); - return GF_OK; + if ( !entry ) + return GF_OK; + GF_LOG(GF_LOG_DEBUG, GF_LOG_NETWORK, ("[CACHE] gf_cache_delete_entry:%d, entry=%p\n", __LINE__, entry)); + if (entry->writeFilePtr) { + /** Cache should have been close before, abornormal situation */ + GF_LOG(GF_LOG_WARNING, GF_LOG_NETWORK, ("[CACHE] gf_cache_delete_entry:%d, entry=%p, cache has not been closed properly\n", __LINE__, entry)); + fclose(entry->writeFilePtr); + } +#ifdef ENABLE_WRITE_MX + if (entry->write_mutex) { + gf_mx_del(entry->write_mutex); + } +#endif + if (entry->deletableFilesOnDelete) { + GF_LOG(GF_LOG_INFO, GF_LOG_NETWORK, ("[CACHE] url %s cleanup, deleting %s...\n", entry->url, entry->cache_filename)); + if (GF_OK != gf_delete_file(entry->cache_filename)) + GF_LOG(GF_LOG_WARNING, GF_LOG_NETWORK, ("[CACHE] gf_cache_delete_entry:%d, failed to delete file %s\n", __LINE__, entry->cache_filename)); + } +#ifdef ENABLE_WRITE_MX + entry->write_mutex = NULL; +#endif + entry->write_session = NULL; + entry->writeFilePtr = NULL; + if (entry->serverETag) + gf_free(entry->serverETag); + entry->serverETag = NULL; + + if (entry->diskETag) + gf_free(entry->diskETag); + entry->diskETag = NULL; + + if (entry->serverLastModified) + gf_free(entry->serverLastModified); + entry->serverLastModified = NULL; + + if (entry->diskLastModified) + gf_free(entry->diskLastModified); + entry->diskLastModified = NULL; + + if ( entry->hash ) + { + gf_free ( entry->hash ); + entry->hash = NULL; + } + if ( entry->url ) + { + gf_free ( entry->url ); + entry->url = NULL; + } + if ( entry->mimeType ) + { + gf_free ( entry->mimeType ); + entry->mimeType = NULL; + } + if ( entry->cache_filename ) + { + gf_free ( entry->cache_filename ); + entry->cache_filename = NULL; + } + if ( entry->properties ) + { + char * propfile; + if (entry->deletableFilesOnDelete) + propfile = gf_cfg_get_filename(entry->properties); + else + propfile = NULL; + gf_cfg_del ( entry->properties ); + entry->properties = NULL; + if (propfile) { + if (GF_OK != gf_delete_file( propfile )) + GF_LOG(GF_LOG_WARNING, GF_LOG_NETWORK, ("[CACHE] gf_cache_delete_entry:%d, failed to delete file %s\n", __LINE__, propfile)); + gf_free ( propfile ); + } + } + entry->dm = NULL; + if (entry->sessions) { + assert( gf_list_count(entry->sessions) == 0); + gf_list_del(entry->sessions); + entry->sessions = NULL; + } + gf_free (entry); + return GF_OK; } Bool gf_cache_check_if_cache_file_is_corrupted(const DownloadedCacheEntry entry) { - FILE *the_cache = gf_f64_open ( entry->cache_filename, "rb" ); - if ( the_cache ) - { - char * endPtr; - const char * keyValue = gf_cfg_get_key ( entry->properties, CACHE_SECTION_NAME, CACHE_SECTION_NAME_CONTENT_SIZE ); - - gf_f64_seek ( the_cache, 0, SEEK_END ); - entry->cacheSize = ( u32 ) gf_f64_tell ( the_cache ); - fclose ( the_cache ); - if (keyValue) { - entry->contentLength = strtoul( keyValue, &endPtr, 10); - if (*endPtr!='\0' || entry->contentLength != entry->cacheSize) { - entry->flags |= CORRUPTED; - GF_LOG(GF_LOG_INFO, GF_LOG_NETWORK, ("[CACHE] gf_cache_create_entry:%d, cached file and cache info size mismatch.\n", __LINE__)); - } - } else - entry->flags |= CORRUPTED; - - } else { - entry->flags |= CORRUPTED; - } - if (entry->flags & CORRUPTED) - GF_LOG(GF_LOG_INFO, GF_LOG_NETWORK, ("[CACHE] gf_cache_create_entry:%d, CACHE is corrupted !\n", __LINE__)); - - return entry->flags & CORRUPTED; + FILE *the_cache = gf_f64_open ( entry->cache_filename, "rb" ); + if ( the_cache ) + { + char * endPtr; + const char * keyValue = gf_cfg_get_key ( entry->properties, CACHE_SECTION_NAME, CACHE_SECTION_NAME_CONTENT_SIZE ); + + gf_f64_seek ( the_cache, 0, SEEK_END ); + entry->cacheSize = ( u32 ) gf_f64_tell ( the_cache ); + fclose ( the_cache ); + if (keyValue) { + entry->contentLength = strtoul( keyValue, &endPtr, 10); + if (*endPtr!='\0' || entry->contentLength != entry->cacheSize) { + entry->flags |= CORRUPTED; + GF_LOG(GF_LOG_INFO, GF_LOG_NETWORK, ("[CACHE] gf_cache_create_entry:%d, cached file and cache info size mismatch.\n", __LINE__)); + } + } else + entry->flags |= CORRUPTED; + + } else { + entry->flags |= CORRUPTED; + } + if (entry->flags & CORRUPTED) + GF_LOG(GF_LOG_INFO, GF_LOG_NETWORK, ("[CACHE] gf_cache_create_entry:%d, CACHE is corrupted !\n", __LINE__)); + + return entry->flags & CORRUPTED; } s32 gf_cache_remove_session_from_cache_entry(DownloadedCacheEntry entry, GF_DownloadSession * sess) { - u32 i; - s32 count; - if (!entry || !sess || !entry->sessions) - return -1; - count = gf_list_count(entry->sessions); - for (i = 0 ; i < (u32)count; i++) { - GF_DownloadSession * s = gf_list_get(entry->sessions, i); - if (s == sess) { - gf_list_rem(entry->sessions, i); - count --; + u32 i; + s32 count; + if (!entry || !sess || !entry->sessions) + return -1; + count = gf_list_count(entry->sessions); + for (i = 0 ; i < (u32)count; i++) { + GF_DownloadSession * s = gf_list_get(entry->sessions, i); + if (s == sess) { + gf_list_rem(entry->sessions, i); + count --; break; - } - } - if (entry->write_session == sess) { + } + } + if (entry->write_session == sess) { /* OK, this is not optimal to close it since we are in a mutex, - * but we don't want to risk to have another session opening - * a not fully closed cache entry */ + * but we don't want to risk to have another session opening + * a not fully closed cache entry */ if (entry->writeFilePtr){ if (fclose(entry->writeFilePtr)) { GF_LOG(GF_LOG_ERROR, GF_LOG_NETWORK, ("[CACHE] gf_cache_remove_session_from_cache_entry:%d, Failed to properly fclose cache file '%s' of url '%s', cache may be corrupted !\n", __LINE__, entry->cache_filename, entry->url)); @@ -753,31 +797,39 @@ s32 gf_cache_remove_session_from_cache_entry(DownloadedCacheEntry entry, GF_Down } entry->writeFilePtr = NULL; entry->write_session = NULL; - gf_mx_v(entry->write_mutex); +#ifdef ENABLE_WRITE_MX + gf_mx_v(entry->write_mutex); +#endif } - return count; + return count; } u32 gf_cache_get_sessions_count_for_cache_entry(const DownloadedCacheEntry entry) { - if (!entry) - return 0; - return gf_list_count(entry->sessions); + if (!entry) + return 0; + return gf_list_count(entry->sessions); } s32 gf_cache_add_session_to_cache_entry(DownloadedCacheEntry entry, GF_DownloadSession * sess) { - u32 i; - s32 count; - if (!entry || !sess || !entry->sessions) - return -1; - count = gf_list_count(entry->sessions); - for (i = 0 ; i < (u32)count; i++) { - GF_DownloadSession * s = gf_list_get(entry->sessions, i); - if (s == sess) { - return count; - } - } - gf_list_add(entry->sessions, sess); - return count + 1; + u32 i; + s32 count; + if (!entry || !sess || !entry->sessions) + return -1; + count = gf_list_count(entry->sessions); + for (i = 0 ; i < (u32)count; i++) { + GF_DownloadSession * s = gf_list_get(entry->sessions, i); + if (s == sess) { + return count; + } + } + gf_list_add(entry->sessions, sess); + return count + 1; +} + +FILE *gf_cache_get_file_pointer(const DownloadedCacheEntry entry) +{ + if (entry) return entry->writeFilePtr; + return NULL; } diff --git a/src/utils/color.c b/src/utils/color.c index 69a53e3..9162063 100644 --- a/src/utils/color.c +++ b/src/utils/color.c @@ -71,7 +71,7 @@ static void yuv2rgb_init(void) } } -static void gf_yuv_load_lines(unsigned char *dst, s32 dststride, unsigned char *y_src, unsigned char *u_src, unsigned char * v_src, s32 y_stride, s32 uv_stride, s32 width) +static void gf_yuv_load_lines_planar(unsigned char *dst, s32 dststride, unsigned char *y_src, unsigned char *u_src, unsigned char * v_src, s32 y_stride, s32 uv_stride, s32 width) { u32 hw, x; unsigned char *dst2 = (unsigned char *) dst + dststride; @@ -122,6 +122,40 @@ static void gf_yuv_load_lines(unsigned char *dst, s32 dststride, unsigned char * } } +static void gf_yuv_load_lines_packed(unsigned char *dst, s32 dststride, unsigned char *y_src, unsigned char *u_src, unsigned char * v_src, s32 width) +{ + u32 hw, x; + + hw = width / 2; + for (x = 0; x < hw; x++) { + s32 u, v; + s32 b_u, g_uv, r_v, rgb_y; + + u = *u_src; + v = *v_src; + + b_u = B_U[u]; + g_uv = G_U[u] + G_V[v]; + r_v = R_V[v]; + + rgb_y = RGB_Y[*y_src]; + dst[0] = col_clip( (rgb_y + r_v) >> SCALEBITS_OUT); + dst[1] = col_clip( (rgb_y - g_uv) >> SCALEBITS_OUT); + dst[2] = col_clip( (rgb_y + b_u) >> SCALEBITS_OUT); + dst[3] = 0xFF; + + rgb_y = RGB_Y[*(y_src+2)]; + dst[4] = col_clip( (rgb_y + r_v) >> SCALEBITS_OUT); + dst[5] = col_clip( (rgb_y - g_uv) >> SCALEBITS_OUT); + dst[6] = col_clip( (rgb_y + b_u) >> SCALEBITS_OUT); + dst[7] = 0xFF; + + dst += 8; + y_src += 4; + u_src += 4; + v_src += 4; + } +} static void gf_yuva_load_lines(unsigned char *dst, s32 dststride, unsigned char *y_src, unsigned char *u_src, unsigned char *v_src, unsigned char *a_src, @@ -713,7 +747,7 @@ static void load_line_yv12(char *src_bits, u32 x_offset, u32 y_offset, u32 y_pit pY += x_offset + y_offset*y_pitch; pU += x_offset/2 + y_offset*y_pitch/4; pV += x_offset/2 + y_offset*y_pitch/4; - gf_yuv_load_lines((unsigned char*)dst_bits, 4*width, pY, pU, pV, y_pitch, y_pitch/2, width); + gf_yuv_load_lines_planar((unsigned char*)dst_bits, 4*width, pY, pU, pV, y_pitch, y_pitch/2, width); } static void load_line_yuva(char *src_bits, u32 x_offset, u32 y_offset, u32 y_pitch, u32 width, u32 height, u8 *dst_bits) @@ -731,6 +765,16 @@ static void load_line_yuva(char *src_bits, u32 x_offset, u32 y_offset, u32 y_pit gf_yuva_load_lines(dst_bits, 4*width, pY, pU, pV, pA, y_pitch, y_pitch/2, width); } +static void load_line_yuyv(u8 *src_bits, u32 x_offset, u32 y_offset, u32 y_pitch, u32 width, u8 *dst_bits) +{ + u8 *pY, *pU, *pV; + pY = (u8 *)src_bits + x_offset + y_offset*y_pitch; + pU = (u8 *)pY + 1; + pV = (u8 *)pY + 3; + gf_yuv_load_lines_packed((unsigned char*)dst_bits, 4*width, pY, pU, pV, width); +} + + static void gf_cmx_apply_argb(GF_ColorMatrix *_this, u8 *a_, u8 *r_, u8 *g_, u8 *b_); GF_EXPORT @@ -739,7 +783,7 @@ GF_Err gf_stretch_bits(GF_VideoSurface *dst, GF_VideoSurface *src, GF_Window *ds u8 *tmp, *rows; u8 ka, kr, kg, kb, kl, kh; s32 src_row; - u32 i, yuv_type = 0; + u32 i, yuv_planar_type = 0; Bool no_memcpy; Bool yuv_init = 0; Bool has_alpha = (alpha!=0xFF) ? 1 : 0; @@ -793,13 +837,18 @@ GF_Err gf_stretch_bits(GF_VideoSurface *dst, GF_VideoSurface *src, GF_Window *ds case GF_PIXEL_IYUV: case GF_PIXEL_I420: yuv2rgb_init(); - yuv_type = 1; + yuv_planar_type = 1; break; case GF_PIXEL_YUVA: has_alpha = 1; case GF_PIXEL_YUVD: - yuv_type = 2; + yuv_planar_type = 2; + yuv2rgb_init(); + break; + case GF_PIXEL_YUY2: + yuv_planar_type = 0; yuv2rgb_init(); + load_line = load_line_yuyv; break; default: return GF_NOT_SUPPORTED; @@ -855,9 +904,9 @@ GF_Err gf_stretch_bits(GF_VideoSurface *dst, GF_VideoSurface *src, GF_Window *ds dst_w = dst_wnd ? dst_wnd->w : dst->width; dst_h = dst_wnd ? dst_wnd->h : dst->height; - if (yuv_type && (src_w%2)) src_w++; + if (yuv_planar_type && (src_w%2)) src_w++; - tmp = (u8 *) gf_malloc(sizeof(u8) * src_w * (yuv_type ? 8 : 4) ); + tmp = (u8 *) gf_malloc(sizeof(u8) * src_w * (yuv_planar_type ? 8 : 4) ); rows = tmp; src_bits = (u8 *) src->video_buffer; @@ -903,13 +952,13 @@ GF_Err gf_stretch_bits(GF_VideoSurface *dst, GF_VideoSurface *src, GF_Window *ds /*new row, check if conversion is needed*/ if (prev_row != src_row) { u32 the_row = src_row - 1; - if (yuv_type) { + if (yuv_planar_type) { if ( the_row % 2) { if (!yuv_init) { yuv_init = 1; the_row --; if (flip) the_row = src->height-2 - the_row; - if (yuv_type==1) { + if (yuv_planar_type==1) { load_line_yv12(src->video_buffer, x_off, the_row, src->pitch_y, src_w, src->height, tmp); } else { load_line_yuva(src->video_buffer, x_off, the_row, src->pitch_y, src_w, src->height, tmp); @@ -919,7 +968,7 @@ GF_Err gf_stretch_bits(GF_VideoSurface *dst, GF_VideoSurface *src, GF_Window *ds rows = flip ? tmp : tmp + src_w * 4; } else { if (flip) the_row = src->height-2 - the_row; - if (yuv_type==1) { + if (yuv_planar_type==1) { load_line_yv12(src->video_buffer, x_off, the_row, src->pitch_y, src_w, src->height, tmp); } else { load_line_yuva(src->video_buffer, x_off, the_row, src->pitch_y, src_w, src->height, tmp); diff --git a/src/utils/configfile.c b/src/utils/configfile.c index b97b57d..0556fac 100644 --- a/src/utils/configfile.c +++ b/src/utils/configfile.c @@ -42,33 +42,10 @@ typedef struct struct __tag_config { char *fileName; - char *filePath; GF_List *sections; Bool hasChanged; }; -/*! - * \brief Build a full absolute path from a directory and a file_name - * \param dest The destination absolute file name properly allocated - * \param directory The directory file path - * \param file_name The filename - * \return NULL if bad parameters specified, dest otherwise - */ -static const char * gf_build_full_path( char * dest, const char * directory, const char * file_name){ - if (!dest || !file_name) - return NULL; - if (directory) { - if (directory[strlen(directory)-1] == GF_PATH_SEPARATOR) { - strcpy(dest, directory); - strcat(dest, file_name); - } else { - sprintf(dest, "%s%c%s", directory, GF_PATH_SEPARATOR, file_name); - } - } else { - strcpy(dest, file_name); - } - return dest; -} static void DelSection(IniSection *ptr) { @@ -105,25 +82,33 @@ static void gf_cfg_clear(GF_Config * iniFile){ } if (iniFile->fileName) gf_free(iniFile->fileName); - if (iniFile->filePath) - gf_free(iniFile->filePath); memset((void *)iniFile, 0, sizeof(GF_Config)); } /*! * \brief Parses the config file if any and clears the existing structure */ -static GF_Err gf_cfg_parse_config_file(GF_Config * tmp, const char * filePath, const char * file_name){ - IniSection *p; +GF_Err gf_cfg_parse_config_file(GF_Config * tmp, const char * filePath, const char * file_name) +{ + IniSection *p; IniKey *k; FILE *file; char *ret; char *line; u32 line_alloc = MAX_INI_LINE; char fileName[GF_MAX_PATH]; - gf_build_full_path(fileName, filePath, file_name); + gf_cfg_clear(tmp); - tmp->filePath = gf_strdup(filePath); + + if (filePath && ((filePath[strlen(filePath)-1] == '/') || (filePath[strlen(filePath)-1] == '\\')) ) { + strcpy(fileName, filePath); + strcat(fileName, file_name); + } else if (filePath) { + sprintf(fileName, "%s%c%s", filePath, GF_PATH_SEPARATOR, file_name); + } else { + strcpy(fileName, file_name); + } + tmp->fileName = gf_strdup(fileName); tmp->sections = gf_list_new(); file = gf_f64_open(fileName, "rt"); @@ -170,7 +155,6 @@ static GF_Err gf_cfg_parse_config_file(GF_Config * tmp, const char * filePath, c if (!p) { gf_list_del(tmp->sections); gf_free(tmp->fileName); - gf_free(tmp->filePath); gf_free(tmp); fclose(file); gf_free(line); diff --git a/src/utils/downloader.c b/src/utils/downloader.c index 3901459..3b4e063 100644 --- a/src/utils/downloader.c +++ b/src/utils/downloader.c @@ -34,7 +34,6 @@ #include #include - #ifdef GPAC_HAS_SSL #include #include @@ -48,10 +47,15 @@ #define SIZE_IN_STREAM ( 2 << 29 ) -static void gf_dm_connect(GF_DownloadSession *sess); + +#define SESSION_RETRY_COUNT 20 #define GF_DOWNLOAD_AGENT_NAME "GPAC/" GPAC_FULL_VERSION #define GF_DOWNLOAD_BUFFER_SIZE 8192 +#define GF_WAIT_REPLY_SLEEP 20 + + +static void gf_dm_connect(GF_DownloadSession *sess); /*internal flags*/ enum @@ -100,6 +104,7 @@ struct __gf_download_session u16 port; char *orig_url; + char *orig_url_before_redirect; char *remote_path; gf_user_credentials_struct * creds; char cookie[GF_MAX_PATH]; @@ -111,12 +116,11 @@ struct __gf_download_session u32 flags; u32 total_size, bytes_done, start_time, icy_metaint, icy_count, icy_bytes; - u32 bytes_per_sec, window_start, bytes_in_wnd; - u32 limit_data_rate; + u32 bytes_per_sec; /* Range information if needed for the download (cf flag) */ Bool needs_range; - u32 range_start, range_end; + u64 range_start, range_end; /*0: GET 1: HEAD @@ -130,6 +134,7 @@ struct __gf_download_session Bool server_only_understand_get; /* True if cache file must be stored on disk */ Bool use_cache_file; + Bool disable_cache; #ifdef GPAC_HAS_SSL SSL *ssl; @@ -157,6 +162,8 @@ struct __gf_download_manager u32 head_timeout; GF_Config *cfg; GF_List *sessions; + Bool disable_cache; + u32 limit_data_rate; GF_List *skip_proxy_servers; GF_List *credentials; @@ -226,6 +233,14 @@ GF_Err gf_cache_close_write_cache( const DownloadedCacheEntry entry, const GF_Do */ GF_Err gf_cache_open_write_cache( const DownloadedCacheEntry entry, const GF_DownloadSession * sess ); +/** + * \brief Returns write file pointer + * This function returns the current cache file pointer + * \param entry The entry to use + * \return cache file pointer or NULL + */ +FILE *gf_cache_get_file_pointer(const DownloadedCacheEntry entry) ; + /** * Find a User's credentials for a given site */ @@ -367,9 +382,11 @@ static int ssl_init(GF_DownloadManager *dm, u32 mode) case 0: meth = SSLv23_client_method(); break; +#if 0 /*SSL v2 is no longer supported in OpenSSL 1.0*/ case 1: meth = SSLv2_client_method(); break; +#endif case 2: meth = SSLv3_client_method(); break; @@ -437,10 +454,12 @@ DownloadedCacheEntry gf_dm_find_cached_entry_by_url(GF_DownloadSession * sess) { assert(e); url = gf_cache_get_url(e); assert( url ); - if (!strcmp(url, sess->orig_url)) { - gf_mx_v( sess->dm->cache_mx ); - return e; - } + if (strcmp(url, sess->orig_url)) continue; + if (sess->range_start != gf_cache_get_start_range(e)) continue; + if (sess->range_end != gf_cache_get_end_range(e)) continue; + /*OK that's ours*/ + gf_mx_v( sess->dm->cache_mx ); + return e; } gf_mx_v( sess->dm->cache_mx ); return NULL; @@ -452,7 +471,7 @@ DownloadedCacheEntry gf_dm_find_cached_entry_by_url(GF_DownloadSession * sess) { * \param url The full URL * \return The DownloadedCacheEntry */ -DownloadedCacheEntry gf_cache_create_entry( GF_DownloadManager * dm, const char * cache_directory, const char * url); +DownloadedCacheEntry gf_cache_create_entry( GF_DownloadManager * dm, const char * cache_directory, const char * url, u64 start_range, u64 end_range); /*! * Removes a session for a DownloadedCacheEntry @@ -473,7 +492,8 @@ void gf_dm_remove_cache_entry_from_session(GF_DownloadSession * sess) { if (sess->dm /*JLF - not sure what the rationale of this test is, and it prevents cleanup of cache entry which then results to crash when restarting the session (entry->writeFilePtr i snot set back to NULL)*/ - && gf_cache_entry_is_delete_files_when_deleted(sess->cache_entry) + && gf_cache_entry_is_delete_files_when_deleted(sess->cache_entry) + && (0 == gf_cache_get_sessions_count_for_cache_entry(sess->cache_entry))) { u32 i, count; @@ -504,11 +524,11 @@ s32 gf_cache_add_session_to_cache_entry(DownloadedCacheEntry entry, GF_DownloadS void gf_dm_configure_cache(GF_DownloadSession *sess) { DownloadedCacheEntry entry; - GF_LOG(GF_LOG_INFO, GF_LOG_NETWORK, ("[Downloader] gf_dm_configure_cache(%p), cached=%s\n", sess, sess->flags&GF_NETIO_SESSION_NOT_CACHED?"no":"yes" )); + GF_LOG(GF_LOG_INFO, GF_LOG_NETWORK, ("[Downloader] gf_dm_configure_cache(%p), cached=%s\n", sess, sess->flags & GF_NETIO_SESSION_NOT_CACHED ? "no" : "yes" )); gf_dm_remove_cache_entry_from_session(sess); entry = gf_dm_find_cached_entry_by_url(sess); if (!entry) { - entry = gf_cache_create_entry(sess->dm, sess->dm->cache_directory, sess->orig_url); + entry = gf_cache_create_entry(sess->dm, sess->dm->cache_directory, sess->orig_url, sess->range_start, sess->range_end); gf_mx_p( sess->dm->cache_mx ); gf_list_add(sess->dm->cache_entries, entry); gf_mx_v( sess->dm->cache_mx ); @@ -573,22 +593,25 @@ void gf_dm_delete_cached_file_entry_session(const GF_DownloadSession * sess, co } -static void gf_dm_disconnect(GF_DownloadSession *sess) +static void gf_dm_disconnect(GF_DownloadSession *sess, Bool force_close) { GF_LOG(GF_LOG_DEBUG, GF_LOG_CORE, ("[Downloader] gf_dm_disconnect(%p)\n", sess )); if (sess->mx) gf_mx_p(sess->mx); + + if (force_close || !(sess->flags & GF_NETIO_SESSION_PERSISTENT)) { #ifdef GPAC_HAS_SSL - if (sess->ssl) { - SSL_shutdown(sess->ssl); - SSL_free(sess->ssl); - sess->ssl = NULL; - } + if (sess->ssl) { + SSL_shutdown(sess->ssl); + SSL_free(sess->ssl); + sess->ssl = NULL; + } #endif - if (sess->sock) { - gf_sk_del(sess->sock); - sess->sock = NULL; - } + if (sess->sock) { + gf_sk_del(sess->sock); + sess->sock = NULL; + } + } sess->status = GF_NETIO_DISCONNECTED; if (sess->num_retry) sess->num_retry--; if (sess->mx) @@ -605,7 +628,7 @@ void gf_dm_sess_del(GF_DownloadSession *sess) sess->destroy = 1; return; } - gf_dm_disconnect(sess); + gf_dm_disconnect(sess, 1); /*if threaded wait for thread exit*/ if (sess->th) { @@ -634,6 +657,7 @@ void gf_dm_sess_del(GF_DownloadSession *sess) gf_dm_remove_cache_entry_from_session(sess); sess->cache_entry = NULL; if (sess->orig_url) gf_free(sess->orig_url); + if (sess->orig_url_before_redirect) gf_free(sess->orig_url_before_redirect); if (sess->server_name) gf_free(sess->server_name); sess->server_name = NULL; if (sess->remote_path) gf_free(sess->remote_path); @@ -754,12 +778,19 @@ GF_Err gf_dm_get_url_info(const char * url, GF_URL_Info * info, const char * bas /*relative URL*/ if (!strstr(url, "://")) { u32 i; - info->protocol = "file:/"; - if (baseURL){ + info->protocol = "file://"; + if (baseURL) { urlConcatenateWithBaseURL = gf_url_concatenate(baseURL, url); + /*relative file path*/ + if (!strstr(baseURL, "://")) { + info->canonicalRepresentation = urlConcatenateWithBaseURL; + return GF_OK; + } proto_offset = gf_dm_parse_protocol(urlConcatenateWithBaseURL, info); - } else + } else { proto_offset = -1; + } + if (proto_offset < 0){ tmp = urlConcatenateWithBaseURL; assert( ! info->remotePath ); @@ -841,59 +872,84 @@ GF_Err gf_dm_get_url_info(const char * url, GF_URL_Info * info, const char * bas return GF_OK; } -GF_Err gf_dm_setup_from_url(GF_DownloadSession *sess, const char *url) +GF_Err gf_dm_sess_setup_from_url(GF_DownloadSession *sess, const char *url) { + Bool socket_changed = 0; GF_Err e; GF_URL_Info info; gf_dm_url_info_init(&info); e = gf_dm_get_url_info(url, &info, sess->remote_path); - sess->port = info.port; + if (e) return e; + + if (!sess->sock) socket_changed = 1; + else if (sess->status>GF_NETIO_DISCONNECTED) socket_changed = 1; + + if (sess->port != info.port) { + socket_changed = 1; + sess->port = info.port; + } + if (!strcmp("http://", info.protocol) || !strcmp("https://", info.protocol)) { - sess->do_requests = http_do_requests; - if (!strcmp("https://", info.protocol)) - sess->flags |= GF_DOWNLOAD_SESSION_USE_SSL; + if (sess->do_requests != http_do_requests) { + sess->do_requests = http_do_requests; + socket_changed = 1; + } + if (!strcmp("https://", info.protocol)) { + if (!(sess->flags & GF_DOWNLOAD_SESSION_USE_SSL)) { + sess->flags |= GF_DOWNLOAD_SESSION_USE_SSL; + socket_changed = 1; + } + } else if (sess->flags & GF_DOWNLOAD_SESSION_USE_SSL) { + sess->flags &= ~GF_DOWNLOAD_SESSION_USE_SSL; + socket_changed = 1; + } } else { sess->do_requests = NULL; } - if (sess->orig_url) - gf_free(sess->orig_url); - sess->orig_url = NULL; - if (info.server_name && sess->server_name) - { - gf_free(sess->server_name); - sess->server_name = NULL; - } - if (e == GF_OK) { - const char *opt; - sess->orig_url = gf_strdup(info.canonicalRepresentation); - if (sess->remote_path) - gf_free(sess->remote_path); - sess->remote_path = NULL; - sess->remote_path = gf_strdup(info.remotePath); - sess->server_name = info.server_name ? gf_strdup(info.server_name) : NULL; - if (info.userName) { - if (! sess->dm) { - GF_LOG(GF_LOG_ERROR, GF_LOG_NETWORK, ("[HTTP] Did not found any download manager, credentials not supported\n")); - } else - sess->creds = gf_user_credentials_register(sess->dm, sess->server_name, info.userName, info.password, info.userName && info.password); - } - /*setup BW limiter*/ - sess->limit_data_rate = 0; - if (sess->dm && sess->dm->cfg) { - opt = gf_cfg_get_key(sess->dm->cfg, "Downloader", "MaxRate"); - if (opt) { - /*use it in in BYTES per second*/ - sess->limit_data_rate = 1024 * atoi(opt) / 8; - } - } - } + if (sess->server_name && info.server_name && !strcmp(sess->server_name, info.server_name)) { + } else { + socket_changed = 1; + if (sess->server_name) gf_free(sess->server_name); + sess->server_name = info.server_name ? gf_strdup(info.server_name) : NULL; + } + + if (sess->orig_url) gf_free(sess->orig_url); + sess->orig_url = gf_strdup(info.canonicalRepresentation); + + if (!sess->orig_url_before_redirect) + sess->orig_url_before_redirect = gf_strdup(url); + + if (sess->remote_path) gf_free(sess->remote_path); + sess->remote_path = gf_strdup(info.remotePath); + + if (!socket_changed && info.userName && sess->creds->username && !strcmp(info.userName, sess->creds->username)) { + } else { + sess->creds = NULL; + if (info.userName ) { + if (! sess->dm) { + GF_LOG(GF_LOG_ERROR, GF_LOG_NETWORK, ("[HTTP] Did not found any download manager, credentials not supported\n")); + } else + sess->creds = gf_user_credentials_register(sess->dm, sess->server_name, info.userName, info.password, info.userName && info.password); + } + } gf_dm_url_info_del(&info); + + if (sess->sock && !socket_changed) { + sess->status = GF_NETIO_CONNECTED; + sess->num_retry = SESSION_RETRY_COUNT; + /*this should be done when building HTTP GET request in case we have range directives*/ + gf_dm_configure_cache(sess); + } else { + if (sess->sock) gf_sk_del(sess->sock); + sess->sock = NULL; + sess->status = GF_NETIO_SETUP; + } return e; } -#define GF_WAIT_REPLY_SLEEP 20 + static u32 gf_dm_session_thread(void *par) { GF_DownloadSession *sess = (GF_DownloadSession *)par; @@ -916,14 +972,13 @@ static u32 gf_dm_session_thread(void *par) gf_sleep(2); } /*destroy all sessions*/ - gf_dm_disconnect(sess); + gf_dm_disconnect(sess, 0); sess->status = GF_NETIO_STATE_ERROR; sess->last_error = 0; sess->flags |= GF_DOWNLOAD_SESSION_THREAD_DEAD; return 1; } -#define SESSION_RETRY_COUNT 20 GF_DownloadSession *gf_dm_sess_new_simple(GF_DownloadManager * dm, const char *url, u32 dl_flags, gf_dm_user_io user_io, @@ -942,9 +997,10 @@ GF_DownloadSession *gf_dm_sess_new_simple(GF_DownloadManager * dm, const char *u sess->usr_cbk = usr_cbk; sess->creds = NULL; sess->dm = dm; + sess->disable_cache = dm->disable_cache; assert( dm ); - *e = gf_dm_setup_from_url(sess, url); + *e = gf_dm_sess_setup_from_url(sess, url); if (*e) { GF_LOG(GF_LOG_WARNING, GF_LOG_NETWORK, ("%s:%d gf_dm_sess_new_simple: error=%s at setup for '%s'\n", __FILE__, __LINE__, gf_error_to_string(*e), url)); gf_dm_sess_del(sess); @@ -956,8 +1012,6 @@ GF_DownloadSession *gf_dm_sess_new_simple(GF_DownloadManager * dm, const char *u sess->mx = gf_mx_new(url); gf_th_run(sess->th, gf_dm_session_thread, sess); } - if (!(sess->flags & GF_NETIO_SESSION_FORCE_NO_CACHE)) - sess->use_cache_file = 0; sess->num_retry = SESSION_RETRY_COUNT; return sess; } @@ -1101,27 +1155,28 @@ static void gf_dm_connect(GF_DownloadSession *sess) } GF_LOG(GF_LOG_INFO, GF_LOG_NETWORK, ("[HTTP] Connecting to %s:%d\n", proxy, proxy_port)); - e = gf_sk_connect(sess->sock, (char *) proxy, proxy_port, (char *)ip); + if (sess->status == GF_NETIO_SETUP) { + e = gf_sk_connect(sess->sock, (char *) proxy, proxy_port, (char *)ip); - /*retry*/ - if ((e == GF_IP_SOCK_WOULD_BLOCK) && sess->num_retry) { - sess->status = GF_NETIO_SETUP; - sess->num_retry--; - return; - } + /*retry*/ + if ((e == GF_IP_SOCK_WOULD_BLOCK) && sess->num_retry) { + sess->status = GF_NETIO_SETUP; + sess->num_retry--; + return; + } - /*failed*/ - if (e) { - sess->status = GF_NETIO_STATE_ERROR; - sess->last_error = e; - gf_dm_sess_notify_state(sess, sess->status, e); - return; - } + /*failed*/ + if (e) { + sess->status = GF_NETIO_STATE_ERROR; + sess->last_error = e; + gf_dm_sess_notify_state(sess, sess->status, e); + return; + } - sess->status = GF_NETIO_CONNECTED; - gf_dm_sess_notify_state(sess, GF_NETIO_CONNECTED, GF_OK); - gf_sk_set_buffer_size(sess->sock, 0, GF_DOWNLOAD_BUFFER_SIZE); - gf_dm_configure_cache(sess); + sess->status = GF_NETIO_CONNECTED; + gf_dm_sess_notify_state(sess, GF_NETIO_CONNECTED, GF_OK); + gf_sk_set_buffer_size(sess->sock, 0, GF_DOWNLOAD_BUFFER_SIZE); + } #ifdef GPAC_HAS_SSL if (!sess->ssl && (sess->flags & GF_DOWNLOAD_SESSION_USE_SSL)) { @@ -1154,7 +1209,7 @@ static void gf_dm_connect(GF_DownloadSession *sess) X509_free(cert); if (!success) { - gf_dm_disconnect(sess); + gf_dm_disconnect(sess, 1); sess->status = GF_NETIO_STATE_ERROR; sess->last_error = GF_AUTHENTICATION_FAILURE; gf_dm_sess_notify_state(sess, sess->status, sess->last_error); @@ -1163,6 +1218,10 @@ static void gf_dm_connect(GF_DownloadSession *sess) } } #endif + + /*this should be done when building HTTP GET request in case we have range directives*/ + gf_dm_configure_cache(sess); + } DownloadedCacheEntry gf_dm_refresh_cache_entry(GF_DownloadSession *sess) { @@ -1190,11 +1249,11 @@ DownloadedCacheEntry gf_dm_refresh_cache_entry(GF_DownloadSession *sess) { /* Since HEAD is not understood by this server, we use a GET instead */ sess->http_read_type = GET; sess->flags |= GF_NETIO_SESSION_NOT_CACHED; - gf_dm_disconnect(sess); + gf_dm_disconnect(sess, 0); sess->status = GF_NETIO_SETUP; sess->server_only_understand_get = 1; GF_LOG(GF_LOG_INFO, GF_LOG_NETWORK, ("gf_dm_refresh_cache_entry() : Timeout with HEAD, try with GET\n")); - e = gf_dm_setup_from_url(sess, sess->orig_url); + e = gf_dm_sess_setup_from_url(sess, sess->orig_url); if (e) { GF_LOG(GF_LOG_WARNING, GF_LOG_NETWORK, ("gf_dm_refresh_cache_entry() : Error with GET %d\n", e)); sess->status = GF_NETIO_STATE_ERROR; @@ -1237,7 +1296,16 @@ const char *gf_dm_sess_mime_type(GF_DownloadSession *sess) return gf_cache_get_mime_type( sess->cache_entry ); } - +GF_Err gf_dm_sess_set_range(GF_DownloadSession *sess, u64 start_range, u64 end_range) +{ + if (!sess) return GF_BAD_PARAM; + if (sess->cache_entry) return GF_BAD_PARAM; + if (sess->status != GF_NETIO_SETUP) return GF_BAD_PARAM; + sess->range_start = start_range; + sess->range_end = end_range; + sess->needs_range = 1; + return GF_OK; +} GF_Err gf_dm_sess_process(GF_DownloadSession *sess) { @@ -1266,6 +1334,33 @@ GF_Err gf_dm_sess_process(GF_DownloadSession *sess) return sess->last_error; } +GF_Err gf_dm_sess_process_headers(GF_DownloadSession *sess) +{ + Bool go; + go = 1; + while (go) { + switch (sess->status) { + /*setup download*/ + case GF_NETIO_SETUP: + gf_dm_connect(sess); + if (sess->status == GF_NETIO_SETUP) + gf_sleep(16); + break; + case GF_NETIO_WAIT_FOR_REPLY: + gf_sleep(16); + case GF_NETIO_CONNECTED: + sess->do_requests(sess); + break; + case GF_NETIO_DATA_EXCHANGE: + case GF_NETIO_DISCONNECTED: + case GF_NETIO_STATE_ERROR: + go = 0; + break; + } + } + return sess->last_error; +} + static Bool gf_dm_needs_to_delete_cache(GF_DownloadManager * dm) { const char * opt; if (!dm || !dm->cfg) @@ -1320,7 +1415,18 @@ GF_DownloadManager *gf_dm_new(GF_Config *cfg) sprintf(dm->cache_directory, "%s%c", opt, GF_PATH_SEPARATOR); } else { dm->cache_directory = gf_strdup(opt); + } + + opt = cfg ? gf_cfg_get_key(cfg, "Downloader", "MaxRate") : NULL; + /*use it in in BYTES per second*/ + if (opt) dm->limit_data_rate = 1024 * atoi(opt) / 8; + + if (cfg) { + opt = gf_cfg_get_key(cfg, "Downloader", "DisableCache"); + if (!opt) gf_cfg_set_key(cfg, "Downloader", "DisableCache", "no"); + if (opt && !strcmp(opt, "yes")) dm->disable_cache = 1; + } dm->head_timeout = 5000; if (cfg) { @@ -1512,7 +1618,7 @@ static GFINLINE void gf_dm_data_received(GF_DownloadSession *sess, const char *d } if (sess->total_size && (sess->bytes_done == sess->total_size)) { - gf_dm_disconnect(sess); + gf_dm_disconnect(sess, 0); par.msg_type = GF_NETIO_DATA_TRANSFERED; par.error = GF_OK; gf_dm_sess_user_io(sess, &par); @@ -1525,16 +1631,11 @@ static GFINLINE void gf_dm_data_received(GF_DownloadSession *sess, const char *d } /*update state if not done*/ if (rcv) { - sess->bytes_in_wnd += rcv; - runtime = gf_sys_clock() - sess->window_start; + runtime = gf_sys_clock() - sess->start_time; if (!runtime) { sess->bytes_per_sec = 0; } else { - sess->bytes_per_sec = (1000 * (sess->bytes_in_wnd)) / runtime; - if (runtime>1000) { - sess->window_start += runtime/2; - sess->bytes_in_wnd = sess->bytes_per_sec / 2; - } + sess->bytes_per_sec = (1000 * sess->bytes_done) / runtime; } } } @@ -1554,11 +1655,11 @@ GF_Err gf_dm_sess_fetch_data(GF_DownloadSession *sess, char *buffer, u32 buffer_ if (sess->status == GF_NETIO_SETUP) { gf_dm_connect(sess); + if (sess->last_error) return sess->last_error; return GF_OK; } else if (sess->status < GF_NETIO_DATA_EXCHANGE) { sess->do_requests(sess); - if (sess->status > GF_NETIO_DATA_TRANSFERED) return GF_SERVICE_ERROR; - return GF_OK; + return sess->last_error; } /*we're running but we had data previously*/ if (sess->init_data) { @@ -1589,7 +1690,10 @@ GF_Err gf_dm_sess_get_stats(GF_DownloadSession * sess, const char **server, cons if (!sess) return GF_BAD_PARAM; if (server) *server = sess->server_name; if (path) *path = sess->remote_path; - if (total_size) *total_size = sess->total_size; + if (total_size) { + if (sess->total_size==SIZE_IN_STREAM) *total_size = 0; + else *total_size = sess->total_size; + } if (bytes_done) *bytes_done = sess->bytes_done; if (bytes_per_sec) *bytes_per_sec = sess->bytes_per_sec; if (net_status) *net_status = sess->status; @@ -1617,11 +1721,11 @@ void gf_dm_sess_abort(GF_DownloadSession * sess) { if (sess->mx) { gf_mx_p(sess->mx); - gf_dm_disconnect(sess); + gf_dm_disconnect(sess, 1); sess->status = GF_NETIO_STATE_ERROR; gf_mx_v(sess->mx); } else { - gf_dm_disconnect(sess); + gf_dm_disconnect(sess, 1); } } void *gf_dm_sess_get_private(GF_DownloadSession * sess) @@ -1666,7 +1770,7 @@ static GF_Err http_send_headers(GF_DownloadSession *sess, char * sHTTP) { const char *url; const char *user_profile; const char *param_string; - Bool has_accept, has_connection, has_range, has_agent, has_language, send_profile; + Bool has_accept, has_connection, has_range, has_agent, has_language, send_profile, has_mime; assert (sess->status == GF_NETIO_CONNECTED); /*setup authentification*/ strcpy(pass_buf, ""); @@ -1715,11 +1819,8 @@ static GF_Err http_send_headers(GF_DownloadSession *sess, char * sHTTP) { par.name ? par.name : "GET", url, sess->server_name); } - /*signal we support title streaming*/ - if (!strcmp(sess->remote_path, "/")) strcat(sHTTP, "icy-metadata:1\r\n"); - /*get all headers*/ - has_agent = has_accept = has_connection = has_range = has_language = 0; + has_agent = has_accept = has_connection = has_range = has_language = has_mime = 0; while (1) { par.msg_type = GF_NETIO_GET_HEADER; par.value = NULL; @@ -1734,6 +1835,7 @@ static GF_Err http_send_headers(GF_DownloadSession *sess, char * sHTTP) { else if (!strcmp(par.name, "Range")) has_range = 1; else if (!strcmp(par.name, "User-Agent")) has_agent = 1; else if (!strcmp(par.name, "Accept-Language")) has_language = 1; + else if (!strcmp(par.name, "Content-Type")) has_mime = 1; if (!par.msg_type) break; } if (!has_agent) { @@ -1741,12 +1843,14 @@ static GF_Err http_send_headers(GF_DownloadSession *sess, char * sHTTP) { strcat(sHTTP, user_agent); strcat(sHTTP, "\r\n"); } - if (!has_accept) strcat(sHTTP, "Accept: */*\r\n"); + /*no mime and POST/PUT, default to octet stream*/ + if (!has_mime && (sess->http_read_type==OTHER)) strcat(sHTTP, "Content-Type: application/octet-stream\r\n"); + if (!has_accept && (sess->http_read_type!=OTHER) ) strcat(sHTTP, "Accept: */*\r\n"); if (sess->proxy_enabled==1) strcat(sHTTP, "Proxy-Connection: Keep-alive\r\n"); else if (!has_connection) strcat(sHTTP, "Connection: Keep-Alive\r\n"); if (!has_range && sess->needs_range) { - if (!sess->range_end) sprintf(range_buf, "Range: bytes=%d-\r\n", sess->range_start); - else sprintf(range_buf, "Range: bytes=%d-%d\r\n", sess->range_start, sess->range_end); + if (!sess->range_end) sprintf(range_buf, "Range: bytes="LLD"-\r\n", sess->range_start); + else sprintf(range_buf, "Range: bytes="LLD"-"LLD"\r\n", sess->range_start, sess->range_end); /* FIXME : cache should not be used here */ strcat(sHTTP, range_buf); } @@ -1811,26 +1915,28 @@ static GF_Err http_send_headers(GF_DownloadSession *sess, char * sHTTP) { strcat(sHTTP, range_buf); } } - /*{ - const char * mime = gf_cache_get_mime_type(sess->cache_entry); - if (sess->server_only_understand_get || mime && !strcmp("audio/mpeg", mime)){*/ - /* This will force the server to respond with Icy-Metaint */ - strcat(sHTTP, "Icy-Metadata: 1\r\n"); - /* } - }*/ - if (GF_OK < appendHttpCacheHeaders( sess->cache_entry, sHTTP)) { - GF_LOG(GF_LOG_WARNING, GF_LOG_NETWORK, ("Cache Entry : %p, FAILED to append cache directives.", sess->cache_entry)); - } + if (sess->http_read_type!=OTHER) { + /*signal we support title streaming*/ + if (!strcmp(sess->remote_path, "/")) strcat(sHTTP, "icy-metadata:1\r\n"); + /* This will force the server to respond with Icy-Metaint */ + strcat(sHTTP, "Icy-Metadata: 1\r\n"); + + /*cached headers are not appended in POST*/ + if (!sess->disable_cache && (GF_OK < appendHttpCacheHeaders( sess->cache_entry, sHTTP)) ) { + GF_LOG(GF_LOG_WARNING, GF_LOG_NETWORK, ("Cache Entry : %p, FAILED to append cache directives.", sess->cache_entry)); + } + } strcat(sHTTP, "\r\n"); if (send_profile || par.data) { u32 len = strlen(sHTTP); - char *tmp_buf = gf_malloc(sizeof(char)*(len+par.size)); + char *tmp_buf = gf_malloc(sizeof(char)*(len+par.size+1)); strcpy(tmp_buf, sHTTP); if (par.data) { memcpy(tmp_buf+len, par.data, par.size); + tmp_buf[len+par.size] = 0; } else { FILE *profile; assert( sess->dm ); @@ -1903,18 +2009,18 @@ static GF_Err http_parse_remaining_body(GF_DownloadSession * sess, char * sHTTP) return GF_REMOTE_SERVICE_ERROR; #if 1 - if (sess->limit_data_rate && sess->bytes_per_sec) { - if (sess->bytes_per_sec>sess->limit_data_rate) { + if (sess->dm && sess->dm->limit_data_rate && sess->bytes_per_sec) { + if (sess->bytes_per_sec > sess->dm->limit_data_rate) { /*update state*/ - u32 runtime = gf_sys_clock() - sess->window_start; - sess->bytes_per_sec = (1000 * (sess->bytes_in_wnd)) / runtime; - if (sess->bytes_per_sec > sess->limit_data_rate) return GF_OK; + u32 runtime = gf_sys_clock() - sess->start_time; + sess->bytes_per_sec = (1000 * sess->bytes_done) / runtime; + if (sess->bytes_per_sec > sess->dm->limit_data_rate) return GF_OK; } } #endif e = gf_dm_read_data(sess, sHTTP, GF_DOWNLOAD_BUFFER_SIZE, &size); if (e!= GF_IP_CONNECTION_CLOSED && (!size || e == GF_IP_NETWORK_EMPTY)) { - if (e == GF_IP_CONNECTION_CLOSED || (!sess->total_size && (gf_sys_clock() - sess->window_start > 5000))) { + if (e == GF_IP_CONNECTION_CLOSED || (!sess->total_size && (gf_sys_clock() - sess->start_time > 5000))) { sess->total_size = sess->bytes_done; gf_dm_sess_notify_state(sess, GF_NETIO_DATA_TRANSFERED, GF_OK); assert(sess->server_name); @@ -1940,7 +2046,7 @@ static GF_Err http_parse_remaining_body(GF_DownloadSession * sess, char * sHTTP) e = GF_OK; } } - gf_dm_disconnect(sess); + gf_dm_disconnect(sess, 1); sess->last_error = e; gf_dm_sess_notify_state(sess, sess->status, e); return e; @@ -1980,12 +2086,14 @@ static GF_Err wait_for_header_and_parse(GF_DownloadSession *sess, char * sHTTP) continue; /*socket has been closed while configuring, retry (not sure if the server got the GET)*/ case GF_IP_CONNECTION_CLOSED: - gf_dm_disconnect(sess); - if (!strncmp("HEAD", sHTTP, 4)) { + if (sess->http_read_type == HEAD) { /* Some servers such as shoutcast directly close connection if HEAD or an unknown method is issued */ sess->server_only_understand_get = 1; } - if (sess->num_retry) + GF_LOG(GF_LOG_INFO, GF_LOG_NETWORK, ("[HTTP] Connection closed by server when getting %s - retrying\n", sess->remote_path)); + gf_dm_disconnect(sess, 1); + + if (sess->num_retry) sess->status = GF_NETIO_SETUP; else { sess->last_error = e; @@ -2097,10 +2205,9 @@ static GF_Err wait_for_header_and_parse(GF_DownloadSession *sess, char * sHTTP) if (hdr_val[0] == ':') hdr_val += 1; hdr_val += http_skip_space(hdr_val); if (hdr_val[0] == '*') { - sscanf(hdr_val, "*/%ud", &total_size); + sscanf(hdr_val, "*/%u", &total_size); } else { - /*do not use %ud here, broken on Win32 (sscanf returns 1)*/ - sscanf(hdr_val, "%d-%d/%d", &first_byte, &last_byte, &total_size); + sscanf(hdr_val, "%u-%u/%u", &first_byte, &last_byte, &total_size); } } } @@ -2136,6 +2243,9 @@ static GF_Err wait_for_header_and_parse(GF_DownloadSession *sess, char * sHTTP) if (sep) sep[0]=':'; if (hdr_sep) hdr_sep[0] = '\r'; + + + if (sess->status==GF_NETIO_DISCONNECTED) return GF_OK; } if (no_range) first_byte = 0; @@ -2175,9 +2285,9 @@ static GF_Err wait_for_header_and_parse(GF_DownloadSession *sess, char * sHTTP) new_location[strlen(new_location)-1] = 0; /*reset and reconnect*/ - gf_dm_disconnect(sess); + gf_dm_disconnect(sess, 1); sess->status = GF_NETIO_SETUP; - e = gf_dm_setup_from_url(sess, new_location); + e = gf_dm_sess_setup_from_url(sess, new_location); if (e) { sess->status = GF_NETIO_STATE_ERROR; sess->last_error = e; @@ -2188,7 +2298,7 @@ static GF_Err wait_for_header_and_parse(GF_DownloadSession *sess, char * sHTTP) { sess->status = GF_NETIO_PARSE_REPLY; gf_dm_sess_notify_state(sess, GF_NETIO_PARSE_REPLY, GF_OK); - gf_dm_disconnect(sess); + gf_dm_disconnect(sess, 0); if (sess->user_proc) { /* For modules that do not use cache and have problems with GF_NETIO_DATA_TRANSFERED ... */ const char * filename; @@ -2200,9 +2310,9 @@ static GF_Err wait_for_header_and_parse(GF_DownloadSession *sess, char * sHTTP) if (!f) { GF_LOG(GF_LOG_INFO, GF_LOG_NETWORK, ("[HTTP] FAILED to open cache file %s for reading contents !\n", filename)); /* Ooops, no cache, redowload everything ! */ - gf_dm_disconnect(sess); + gf_dm_disconnect(sess, 0); sess->status = GF_NETIO_SETUP; - e = gf_dm_setup_from_url(sess, sess->orig_url); + e = gf_dm_sess_setup_from_url(sess, sess->orig_url); sess->total_size = gf_cache_get_cache_filesize(sess->cache_entry); if (e) { sess->status = GF_NETIO_STATE_ERROR; @@ -2212,7 +2322,7 @@ static GF_Err wait_for_header_and_parse(GF_DownloadSession *sess, char * sHTTP) return e; } sess->status = GF_NETIO_DATA_EXCHANGE; - { + if (! (sess->flags & GF_NETIO_SESSION_NOT_THREADED)) { char file_cache_buff[16384]; int read = 0; u32 total_size = gf_cache_get_cache_filesize(sess->cache_entry); @@ -2248,7 +2358,7 @@ static GF_Err wait_for_header_and_parse(GF_DownloadSession *sess, char * sHTTP) sess->creds = gf_user_credentials_register(sess->dm, sess->server_name, NULL, NULL, 0); if (!sess->creds) { /* User credentials have not been filled properly, we have to abort */ - gf_dm_disconnect(sess); + gf_dm_disconnect(sess, 1); sess->status = GF_NETIO_STATE_ERROR; par.error = GF_AUTHENTICATION_FAILURE; par.msg_type = GF_NETIO_DISCONNECTED; @@ -2257,9 +2367,9 @@ static GF_Err wait_for_header_and_parse(GF_DownloadSession *sess, char * sHTTP) sess->last_error = e; goto exit; } - gf_dm_disconnect(sess); + gf_dm_disconnect(sess, 0); sess->status = GF_NETIO_SETUP; - e = gf_dm_setup_from_url(sess, sess->orig_url); + e = gf_dm_sess_setup_from_url(sess, sess->orig_url); if (e) { sess->status = GF_NETIO_STATE_ERROR; sess->last_error = e; @@ -2282,15 +2392,15 @@ static GF_Err wait_for_header_and_parse(GF_DownloadSession *sess, char * sHTTP) case 400: case 501: /* Method not implemented ! */ - if (sess->http_read_type != GET) { + if (sess->http_read_type == HEAD) { /* Since HEAD is not understood by this server, we use a GET instead */ sess->http_read_type = GET; sess->flags |= GF_NETIO_SESSION_NOT_CACHED; - gf_dm_disconnect(sess); + gf_dm_disconnect(sess, 0); sess->status = GF_NETIO_SETUP; sess->server_only_understand_get = 1; GF_LOG(GF_LOG_INFO, GF_LOG_NETWORK, ("Method not supported, try with GET.\n")); - e = gf_dm_setup_from_url(sess, sess->orig_url); + e = gf_dm_sess_setup_from_url(sess, sess->orig_url); if (e) { sess->status = GF_NETIO_STATE_ERROR; sess->last_error = e; @@ -2298,12 +2408,16 @@ static GF_Err wait_for_header_and_parse(GF_DownloadSession *sess, char * sHTTP) } return e; } - return GF_URL_ERROR; + + gf_dm_sess_user_io(sess, &par); + e = GF_REMOTE_SERVICE_ERROR; + goto exit; + case 503: /*retry without proxy*/ if (sess->proxy_enabled==1) { sess->proxy_enabled=2; - gf_dm_disconnect(sess); + gf_dm_disconnect(sess, 1); sess->status = GF_NETIO_SETUP; return GF_OK; } @@ -2317,7 +2431,7 @@ static GF_Err wait_for_header_and_parse(GF_DownloadSession *sess, char * sHTTP) sess->use_cache_file = 0; if (sess->http_read_type==HEAD) { - gf_dm_disconnect(sess); + gf_dm_disconnect(sess, 0); gf_dm_sess_notify_state(sess, GF_NETIO_DATA_TRANSFERED, GF_OK); sess->status = GF_NETIO_DISCONNECTED; sess->http_read_type = 0; @@ -2352,7 +2466,7 @@ static GF_Err wait_for_header_and_parse(GF_DownloadSession *sess, char * sHTTP) sess->bytes_done = 0; } else { /*we don't expect anything*/ - gf_dm_disconnect(sess); + gf_dm_disconnect(sess, 0); gf_dm_sess_notify_state(sess, GF_NETIO_DATA_TRANSFERED, GF_OK); sess->status = GF_NETIO_DISCONNECTED; return GF_OK; @@ -2371,9 +2485,7 @@ static GF_Err wait_for_header_and_parse(GF_DownloadSession *sess, char * sHTTP) } } - sess->window_start = sess->start_time = gf_sys_clock(); - sess->bytes_in_wnd = 0; - + sess->start_time = gf_sys_clock(); /* we may have existing data in this buffer ... */ if (!e && (BodyStart < (s32) bytesRead)) { @@ -2386,13 +2498,15 @@ static GF_Err wait_for_header_and_parse(GF_DownloadSession *sess, char * sHTTP) exit: if (e) { GF_LOG(GF_LOG_ERROR, GF_LOG_NETWORK, ("[HTTP] Error parsing reply: %s for URL %s\n", gf_error_to_string(e), sess->orig_url )); - gf_dm_disconnect(sess); + gf_dm_disconnect(sess, 1); sess->status = GF_NETIO_STATE_ERROR; sess->last_error = e; gf_dm_sess_notify_state(sess, sess->status, e); return e; } - return http_parse_remaining_body(sess, sHTTP); + /*DO NOT call parse_body yet, as the final user may not be connected to our session*/ + //return http_parse_remaining_body(sess, sHTTP); + return GF_OK; } /** @@ -2415,49 +2529,6 @@ void http_do_requests(GF_DownloadSession *sess) } } -#define FILE_W_BUFFER_SZ 1024 - -GF_Err gf_dm_copy(const char * file_source, const char * file_dest) { - FILE * source, * dest; - char buff[FILE_W_BUFFER_SZ]; - u32 readen, written; - GF_Err e = GF_OK; - source = gf_f64_open(file_source, "rb"); - dest = gf_f64_open( file_dest, "wb"); - if (!source || !dest) { - e = GF_IO_ERR; - goto cleanup; - } - readen = fread(buff, sizeof(char), FILE_W_BUFFER_SZ, source); - while (readen > 1) { - written = fwrite(buff, sizeof(char), readen, dest); - if (written != readen) { - e = GF_IO_ERR; - goto cleanup; - } - readen = fread(buff, sizeof(char), FILE_W_BUFFER_SZ, source); - } - -cleanup: - if (source) - fclose(source); - if (dest) - fclose(dest); - return e; -} - - -GF_Err gf_dm_copy_or_link(const char * file_source, const char * file_dest) { -#ifdef __USE_POSIX - if (link( file_source, file_dest)) { -#endif /* __USE_POSIX */ - return gf_dm_copy(file_source, file_dest); -#ifdef __USE_POSIX - } - return GF_OK; -#endif /* #ifdef __POSIX__ */ -} - /** * NET IO for MPD, we don't need this anymore since mime-type can be given by session @@ -2509,30 +2580,91 @@ GF_Err gf_dm_wget_with_cache(GF_DownloadManager * dm, e = gf_dm_sess_process(dnload); } e|= gf_cache_close_write_cache(dnload->cache_entry, dnload, e == GF_OK); - /* e|= gf_dm_copy_or_link( gf_cache_get_cache_filename(dnload->cache_entry), filename ); */ fclose(f); gf_dm_sess_del(dnload); return e; } +GF_Err gf_dm_get_file_memory(const char *url, char **out_data, u32 *out_size, char **out_mime) +{ + GF_Err e; + FILE * f; + GF_DownloadSession *dnload; + GF_DownloadManager *dm; + + if (!url || !out_data || !out_size) + return GF_BAD_PARAM; + f = gf_temp_file_new(); + if (!f) { + GF_LOG(GF_LOG_ERROR, GF_LOG_NETWORK, ("[WGET] Failed to create temp file for write.\n")); + return GF_IO_ERR; + } + + dm = gf_dm_new(NULL); + if (!dm) { + fclose(f); + return GF_OUT_OF_MEM; + } + + dnload = gf_dm_sess_new_simple(dm, (char *)url, GF_NETIO_SESSION_NOT_THREADED, &wget_NetIO, f, &e); + if (!dnload) { + gf_dm_del(dm); + return GF_BAD_PARAM; + } + dnload->use_cache_file = 0; + dnload->disable_cache = 1; + if (!e) + e = gf_dm_sess_process(dnload); + + if (!e) + e = gf_cache_close_write_cache(dnload->cache_entry, dnload, e == GF_OK); + + if (!e) { + u32 size = ftell(f); + *out_size = size; + *out_data = gf_malloc(sizeof(char)* ( 1 + size)); + fseek(f, 0, SEEK_SET); + fread(*out_data, 1, size, f); + (*out_data)[size] = 0; + if (out_mime) { + const char *mime = gf_dm_sess_mime_type(dnload); + if (mime) *out_mime = gf_strdup(mime); + } + } + fclose(f); + gf_dm_sess_del(dnload); + gf_dm_del(dm); + return e; +} + const char *gf_dm_sess_get_resource_name(GF_DownloadSession *dnload) { return dnload ? dnload->orig_url : NULL; } +const char *gf_dm_sess_get_original_resource_name(GF_DownloadSession *dnload) +{ + if (dnload) return dnload->orig_url_before_redirect ? dnload->orig_url_before_redirect : dnload->orig_url; + return NULL; +} + +u32 gf_dm_sess_get_status(GF_DownloadSession *dnload) +{ + return dnload ? dnload->status : GF_NETIO_STATE_ERROR; +} + GF_Err gf_dm_sess_reset(GF_DownloadSession *sess) { if (!sess) return GF_BAD_PARAM; sess->status = GF_NETIO_SETUP; sess->needs_range = 0; sess->range_start = sess->range_end = 0; - sess->bytes_done = sess->bytes_in_wnd = sess->bytes_per_sec = 0; + sess->bytes_done = sess->bytes_per_sec = 0; if (sess->init_data) gf_free(sess->init_data); sess->init_data = NULL; sess->init_data_size = 0; sess->last_error = GF_OK; sess->total_size = 0; - sess->window_start = 0; sess->start_time = 0; return GF_OK; } @@ -2627,3 +2759,88 @@ const char * gf_cache_get_cache_filename_range( const GF_DownloadSession * sess, } } } + +GF_Err gf_dm_sess_reassign(GF_DownloadSession *sess, u32 flags, gf_dm_user_io user_io, void *cbk) +{ + /*shall only be called for non-threaded sessions!! */ + if (sess->th) return GF_BAD_PARAM; + +#if 0 + /*if the user requests non-cached (eg callback-sent) data, but the session was configured to use file, we need to copy back existing + data to the session init_data */ + if (sess->use_cache_file && (flags & GF_NETIO_SESSION_NOT_CACHED)) { + if (sess->cache_entry) { + FILE *fptr = gf_cache_get_file_pointer(sess->cache_entry); + if (fptr) { + gf_f64_seek(fptr, 0, SEEK_END); + sess->init_data_size = (u32) gf_f64_tell(fptr); + gf_f64_seek(fptr, 0, SEEK_SET); + if (sess->init_data) gf_free(sess->init_data); + sess->init_data = gf_malloc(sess->init_data_size); + sess->init_data_size = fread(sess->init_data, 1, sess->init_data_size, fptr); + gf_cache_close_write_cache(sess->cache_entry, sess, 0); + } + gf_dm_remove_cache_entry_from_session(sess); + sess->cache_entry = NULL; + } + sess->use_cache_file = 0; + } +#endif + + +#if 0 + /*the case where the user wants file but the session is configured as live is simply ignored*/ + else if (!sess->use_cache_file && (sess->flags & GF_NETIO_SESSION_NOT_CACHED)) { + sess->use_cache_file = 1; + gf_dm_configure_cache(sess); + + if (sess->http_read_type == GET ) { + e = gf_cache_open_write_cache(sess->cache_entry, sess); + if (e) return e; + + if (sess->init_data && sess->init_data_size) { + gf_cache_write_to_cache(sess->cache_entry, sess, sess->init_data, sess->init_data_size); + if (sess->init_data) { + gf_free(sess->init_data); + sess->init_data = NULL; + } + sess->init_data_size = 0; + } + } + } +#endif + + sess->flags = flags; + sess->user_proc = user_io; + sess->usr_cbk = cbk; + + sess->num_retry = SESSION_RETRY_COUNT; + + if (sess->status==GF_NETIO_DISCONNECTED) + sess->status = GF_NETIO_SETUP; + + if ( ! (flags & GF_NETIO_SESSION_NOT_THREADED) ) { + sess->th = gf_th_new(sess->orig_url); + sess->mx = gf_mx_new(sess->orig_url); + gf_th_run(sess->th, gf_dm_session_thread, sess); + } + + return GF_OK; +} + +GF_EXPORT +void gf_dm_set_data_rate(GF_DownloadManager *dm, u32 rate_in_byte_per_sec) +{ + dm->limit_data_rate = rate_in_byte_per_sec; + if (dm->cfg) { + char szBuf[100]; + sprintf(szBuf, "%d", rate_in_byte_per_sec*128/*8/1024*/); + gf_cfg_set_key(dm->cfg, "Downloader", "MaxRate", szBuf); + } +} + +u32 gf_dm_get_data_rate(GF_DownloadManager *dm) +{ + return dm->limit_data_rate; +} + diff --git a/src/utils/error.c b/src/utils/error.c index 65eb92b..ea44a57 100644 --- a/src/utils/error.c +++ b/src/utils/error.c @@ -133,10 +133,12 @@ u32 global_log_tools = 0; u32 gf_log_parse_level(const char *val) { #ifndef GPAC_DISABLE_LOG + if (!val) return 0; if (!stricmp(val, "error")) return GF_LOG_ERROR; if (!stricmp(val, "warning")) return GF_LOG_WARNING; if (!stricmp(val, "info")) return GF_LOG_INFO; if (!stricmp(val, "debug")) return GF_LOG_DEBUG; + fprintf(stderr, "Unknown log level specified: %s\n", val); #endif return 0; } @@ -165,14 +167,18 @@ u32 gf_log_parse_tools(const char *val) else if (!stricmp(val, "smil")) flags |= GF_LOG_SMIL; else if (!stricmp(val, "compose")) flags |= GF_LOG_COMPOSE; else if (!stricmp(val, "mmio")) flags |= GF_LOG_MMIO; - else if (!stricmp(val, "none")) flags = 0; - else if (!stricmp(val, "all")) flags = 0xFFFFFFFF; else if (!stricmp(val, "rti")) flags |= GF_LOG_RTI; else if (!stricmp(val, "cache")) flags |= GF_LOG_CACHE; else if (!stricmp(val, "audio")) flags |= GF_LOG_AUDIO; else if (!stricmp(val, "mem")) flags |= GF_LOG_MEMORY; else if (!stricmp(val, "module")) flags |= GF_LOG_MODULE; else if (!stricmp(val, "mutex")) flags |= GF_LOG_MUTEX; + else if (!stricmp(val, "none")) flags = 0; + else if (!stricmp(val, "all")) flags = 0xFFFFFFFF; + else { + fprintf(stderr, "Unknown log tool specified: %s\n", val); + return 0; + } if (!sep) break; sep[0] = ':'; val = sep+1; @@ -198,9 +204,9 @@ void default_log_callback(void *cbck, u32 level, u32 tool, const char* fmt, va_l #endif } - static void *user_log_cbk = NULL; static gf_log_cbk log_cbk = default_log_callback; +static Bool log_exit_on_error = 0; GF_EXPORT void gf_log(const char *fmt, ...) @@ -209,6 +215,8 @@ void gf_log(const char *fmt, ...) va_start(vl, fmt); log_cbk(user_log_cbk, call_lev, call_tool, fmt, vl); va_end(vl); + if (log_exit_on_error && call_lev==GF_LOG_ERROR) + exit(1); } GF_EXPORT @@ -216,11 +224,19 @@ void gf_log_set_level(u32 level) { global_log_level = level; } + +GF_EXPORT +void gf_log_set_strict_error(Bool strict) +{ + log_exit_on_error = strict; +} + GF_EXPORT void gf_log_set_tools(u32 modules) { global_log_tools = modules; } + GF_EXPORT void gf_log_lt(u32 ll, u32 lt) { @@ -251,6 +267,10 @@ void gf_log_set_level(u32 level) { } GF_EXPORT +void gf_log_set_strict_error(Bool strict) +{ +} +GF_EXPORT void gf_log_set_tools(u32 modules) { } diff --git a/src/utils/math.c b/src/utils/math.c index ce7d706..97586bb 100644 --- a/src/utils/math.c +++ b/src/utils/math.c @@ -1146,7 +1146,9 @@ GF_EXPORT void gf_vec_norm(GF_Vec *v) { Fixed __res = gf_vec_len(*v); - if (__res ) __res = 1.0f/__res ; + if (!__res ) return; + if (__res == FIX_ONE) return; + __res = 1.0f/__res; v->x *= __res; v->y *= __res; v->z *= __res; diff --git a/src/utils/module.c b/src/utils/module.c index 6128f5c..45df7ea 100644 --- a/src/utils/module.c +++ b/src/utils/module.c @@ -183,10 +183,10 @@ GF_BaseInterface *gf_modules_load_interface(GF_ModuleManager *pm, u32 whichplug, if (!strcmp(inst->name, "gm_sdl_out.dylib")) { if (InterfaceFamily == GF_VIDEO_OUTPUT_INTERFACE) { ifce = SDL_Module_Load_Video(); - fprintf(stderr, "*** Loading SDL Video: 0x%p ***\n", ifce); + fprintf(stderr, "*** Loading SDL Video: %p ***\n", ifce); } else if (InterfaceFamily == GF_AUDIO_OUTPUT_INTERFACE) { ifce = SDL_Module_Load_Audio(); - fprintf(stderr, "*** Loading SDL Audio: 0x%p ***\n", ifce); + fprintf(stderr, "*** Loading SDL Audio: %p ***\n", ifce); } } #endif @@ -197,13 +197,13 @@ GF_BaseInterface *gf_modules_load_interface(GF_ModuleManager *pm, u32 whichplug, gf_list_add(inst->interfaces, ifce); /*keep track of parent*/ ifce->HPLUG = inst; - GF_LOG(GF_LOG_DEBUG, GF_LOG_CORE, ("[Core] Load interface %s DONE.\n", inst->name)); + GF_LOG(GF_LOG_DEBUG, GF_LOG_CORE, ("[Core] Load interface %s DONE.\n", inst->name)); return ifce; err_exit: - GF_LOG(GF_LOG_DEBUG, GF_LOG_CORE, ("[Core] Load interface %s exit label, freing library...\n", inst->name)); + GF_LOG(GF_LOG_DEBUG, GF_LOG_CORE, ("[Core] Load interface %s exit label, freing library...\n", inst->name)); gf_modules_unload_library(inst); - GF_LOG(GF_LOG_DEBUG, GF_LOG_CORE, ("[Core] Load interface %s EXIT.\n", inst->name)); + GF_LOG(GF_LOG_DEBUG, GF_LOG_CORE, ("[Core] Load interface %s EXIT.\n", inst->name)); return NULL; } @@ -236,7 +236,7 @@ GF_BaseInterface *gf_modules_load_interface_by_name(GF_ModuleManager *pm, const for (i=0; imodule_name && !stricmp(ifce->module_name, plug_name)) { + if (ifce->module_name && !strnicmp(ifce->module_name, plug_name, MIN(strlen(ifce->module_name), strlen(plug_name)) )) { /*update cache entry*/ gf_cfg_set_key(pm->cfg, "PluginsCache", plug_name, ((ModuleInstance*)ifce->HPLUG)->name); GF_LOG(GF_LOG_DEBUG, GF_LOG_CORE, ("[Core] Added plugin cache %s for %s\n", plug_name, ((ModuleInstance*)ifce->HPLUG)->name)); diff --git a/src/utils/os_config_init.c b/src/utils/os_config_init.c new file mode 100644 index 0000000..c25aa41 --- /dev/null +++ b/src/utils/os_config_init.c @@ -0,0 +1,518 @@ +/* + * GPAC - Multimedia Framework C SDK + * + * Copyright (c) Telecom ParisTech 2011- + * All rights reserved + * Authors: Jean Le Feuvre + * + * This file is part of GPAC / common tools sub-project + * + * GPAC is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * GPAC 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; see the file COPYING. If not, write to + * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + * + */ + +#include + + +#if defined(WIN32) || defined(_WIN32_WCE) +#include /*for GetModuleFileName*/ + +#ifndef _WIN32_WCE +#include /*for _mkdir*/ +#include /*for getting user-dir*/ + +#ifndef SHGFP_TYPE_CURRENT +#define SHGFP_TYPE_CURRENT 0 /*needed for MinGW*/ +#endif + +#endif + +#define CFG_FILE_NAME "GPAC.cfg" +#define TEST_MODULE "gm_dummy_in.dll" + +#elif (defined(__DARWIN__) || defined(__APPLE__) ) +#include /*for _NSGetExecutablePath */ + +#define TEST_MODULE "gm_dummy_in.dylib" +#define CFG_FILE_NAME ".gpacrc" + +#else +#ifdef GPAC_CONFIG_LINUX +#include +#endif +#define CFG_FILE_NAME ".gpacrc" +#define TEST_MODULE "gm_dummy_in.so" +#endif + + +static Bool check_file_exists(char *name, char *path, char *outPath) +{ + char szPath[GF_MAX_PATH]; + FILE *f; + sprintf(szPath, "%s%c%s", path, GF_PATH_SEPARATOR, name); + f = fopen(szPath, "rb"); + if (!f) return 0; + fclose(f); + if (outPath != path) strcpy(outPath, path); + return 1; +} + +enum +{ + GF_PATH_APP, + GF_PATH_CFG, + GF_PATH_GUI, + GF_PATH_MODULES, +}; + +#if defined(WIN32) || defined(_WIN32_WCE) +static Bool get_default_install_path(char *file_path, u32 path_type) +{ + FILE *f; + char *sep; + char szPath[GF_MAX_PATH]; + + +#ifdef _WIN32_WCE + TCHAR w_szPath[GF_MAX_PATH]; + GetModuleFileName(NULL, w_szPath, GF_MAX_PATH); + CE_WideToChar((u16 *) w_szPath, file_path); +#else + GetModuleFileNameA(NULL, file_path, GF_MAX_PATH); +#endif + + /*remove exe name*/ + if (strstr(file_path, ".exe")) { + sep = strrchr(file_path, '\\'); + if (sep) sep[0] = 0; + } + + strcpy(szPath, file_path); + strlwr(szPath); + + /*if this is run from a browser, we do not get our app path - fortunately on Windows, we always use 'GPAC' in the + installation path*/ + if (!strstr(file_path, "gpac")) { + HKEY hKey = NULL; + DWORD dwSize = GF_MAX_PATH; + DWORD dwType = REG_SZ; + + /*locate the key in current user, then in local machine*/ +#ifdef _WIN32_WCE + u16 w_path[1024]; + RegOpenKeyEx(HKEY_CURRENT_USER, TEXT("Software\\GPAC"), 0, KEY_READ, &hKey); +#ifdef _DEBUG + if (RegQueryValueEx(hKey, TEXT("DebugDir"), 0, &dwType, (LPBYTE) w_path, &dwSize) != ERROR_SUCCESS) +#endif + RegQueryValueEx(hKey, TEXT("InstallDir"), 0, &dwType, (LPBYTE) w_path, &dwSize); + CE_WideToChar(w_path, (char *)file_path); + RegCloseKey(hKey); +#else + if (RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\GPAC", 0, KEY_READ, &hKey) != ERROR_SUCCESS) + RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\GPAC", 0, KEY_READ, &hKey); + + dwSize = GF_MAX_PATH; + +#ifdef _DEBUG + if (RegQueryValueEx(hKey, "DebugDir", NULL, NULL,(unsigned char*) file_path, &dwSize) != ERROR_SUCCESS) +#endif + RegQueryValueEx(hKey, "InstallDir", NULL, NULL,(unsigned char*) file_path, &dwSize); + + RegCloseKey(hKey); +#endif + } + + + if (path_type==GF_PATH_APP) return 1; + + if (path_type==GF_PATH_GUI) { + char *sep; + strcat(file_path, "\\gui"); + if (check_file_exists("gui.bt", file_path, file_path)) return 1; + sep = strstr(file_path, "\\bin\\"); + if (sep) { + sep[0] = 0; + strcat(file_path, "\\gui"); + if (check_file_exists("gui.bt", file_path, file_path)) return 1; + } + return 0; + } + /*modules are stored in the GPAC directory (should be changed to GPAC/modules)*/ + if (path_type==GF_PATH_MODULES) return 1; + + /*we are looking for the config file path - make sure it is writable*/ + + strcpy(szPath, file_path); + strcat(szPath, "\\gpaccfgtest.txt"); + f = gf_f64_open(szPath, "wb"); + if (f != NULL) { + fclose(f); + gf_delete_file(szPath); + return 1; + } +#ifdef _WIN32_WCE + return 0; +#else + /*no write access, get user home directory*/ + SHGetFolderPath(NULL, CSIDL_APPDATA | CSIDL_FLAG_CREATE, NULL, SHGFP_TYPE_CURRENT, file_path); + if (file_path[strlen(file_path)-1] != '\\') strcat(file_path, "\\"); + strcat(file_path, "GPAC"); + /*create GPAC dir*/ + _mkdir(file_path); + strcpy(szPath, file_path); + strcat(szPath, "\\gpaccfgtest.txt"); + f = gf_f64_open(szPath, "wb"); + /*COMPLETE FAILURE*/ + if (!f) return 0; + + fclose(f); + gf_delete_file(szPath); + return 1; +#endif +} + +/*FIXME - android initialization is a mess right now*/ +#elif defined(GPAC_ANDROID) + +static Bool get_default_install_path(char *file_path, u32 path_type) +{ + if (path_type==GF_PATH_APP) strcpy(file_path, ""); + else if (path_type==GF_PATH_CFG) strcpy(file_path, ""); + else if (path_type==GF_PATH_GUI) strcpy(file_path, ""); + else if (path_type==GF_PATH_MODULES) strcpy(file_path, ""); + return 1; +} + + +#elif defined(__SYMBIAN__) + +#if defined(__SERIES60_3X__) +#define SYMBIAN_GPAC_CFG_DIR "\\private\\F01F9075" +#define SYMBIAN_GPAC_GUI_DIR "\\private\\F01F9075\\gui" +#define SYMBIAN_GPAC_MODULES_DIR "\\sys\\bin" +#else +#define SYMBIAN_GPAC_CFG_DIR "\\system\\apps\\Osmo4" +#define SYMBIAN_GPAC_GUI_DIR "\\system\\apps\\Osmo4\\gui" +#define SYMBIAN_GPAC_MODULES_DIR GPAC_CFG_DIR +#endif + +static Bool get_default_install_path(char *file_path, u32 path_type) +{ + if (path_type==GF_PATH_APP) strcpy(file_path, SYMBIAN_GPAC_MODULES_DIR); + else if (path_type==GF_PATH_CFG) strcpy(file_path, SYMBIAN_GPAC_CFG_DIR); + else if (path_type==GF_PATH_GUI) strcpy(file_path, SYMBIAN_GPAC_GUI_DIR); + else if (path_type==GF_PATH_MODULES) strcpy(file_path, SYMBIAN_GPAC_MODULES_DIR); + return 1; +} + +/*Linux, OSX, iOS*/ +#else + +static Bool get_default_install_path(char *file_path, u32 path_type) +{ + char app_path[GF_MAX_PATH]; + char *sep; + u32 size = GF_MAX_PATH; + + /*on OSX, Linux & co, user home is where we store the cfg file*/ + if (path_type==GF_PATH_CFG) { + char *user_home = getenv("HOME"); + if (!user_home) return 0; + strcpy(file_path, user_home); + if (file_path[strlen(file_path)-1] == '/') file_path[strlen(file_path)-1] = 0; + return 1; + } + + if (path_type==GF_PATH_APP) { +#if (defined(__DARWIN__) || defined(__APPLE__) ) + if (_NSGetExecutablePath(app_path, &size) ==0) { + realpath(app_path, file_path); + char *sep = strrchr(file_path, '/'); + if (sep) sep[0] = 0; + return 1; + } + +#elif defined(GPAC_CONFIG_LINUX) + size = readlink("/proc/self/exe", file_path, GF_MAX_PATH); + if (size>0) { + char *sep = strrchr(file_path, '/'); + if (sep) sep[0] = 0; + return 1; + } +#endif + return 0; + } + + + /*locate the app*/ + if (!get_default_install_path(app_path, GF_PATH_APP)) return 0; + + /*installed or symlink on system, user user home directory*/ + if (!strnicmp(app_path, "/usr/", 5) || !strnicmp(app_path, "/opt/", 5)) { + if (path_type==GF_PATH_GUI) { + /*look in possible install dirs ...*/ + if (check_file_exists("gui.bt", "/usr/share/gpac/gui", file_path)) return 1; + if (check_file_exists("gui.bt", "/usr/local/share/gpac/gui", file_path)) return 1; + if (check_file_exists("gui.bt", "/opt/share/gpac/gui", file_path)) return 1; + if (check_file_exists("gui.bt", "/opt/local/share/gpac/gui", file_path)) return 1; + } else if (path_type==GF_PATH_MODULES) { + /*look in possible install dirs ...*/ + if (check_file_exists(TEST_MODULE, "/usr/lib/gpac", file_path)) return 1; + if (check_file_exists(TEST_MODULE, "/usr/local/lib/gpac", file_path)) return 1; + if (check_file_exists(TEST_MODULE, "/opt/lib/gpac", file_path)) return 1; + if (check_file_exists(TEST_MODULE, "/opt/local/lib/gpac", file_path)) return 1; + } + } + + if (path_type==GF_PATH_GUI) { + if (get_default_install_path(app_path, GF_PATH_CFG)) { + /*GUI not found, look in ~/.gpac/gui/ */ + strcat(app_path, "/.gpac/gui"); + if (check_file_exists("gui.bt", app_path, file_path)) return 1; + } + + /*GUI not found, look in gpac distribution if any */ + if (get_default_install_path(app_path, GF_PATH_APP)) { + char *sep = strstr(app_path, "/bin/gcc"); + if (sep) { + sep[0] = 0; + strcat(app_path, "/gui"); + if (check_file_exists("gui.bt", app_path, file_path)) return 1; + } + } + /*GUI not found, look in .app for OSX case*/ + } + + if (path_type==GF_PATH_MODULES) { + /*look in gpac compilation tree (modules are output in the same folder as apps) */ + if (get_default_install_path(app_path, GF_PATH_APP)) { + if (check_file_exists(TEST_MODULE, app_path, file_path)) return 1; + /*on OSX check modules subdirectory */ + strcat(app_path, "/modules"); + if (check_file_exists(TEST_MODULE, app_path, file_path)) return 1; + } + /*modules not found, look in ~/.gpac/modules/ */ + if (get_default_install_path(app_path, GF_PATH_CFG)) { + strcpy(app_path, file_path); + strcat(app_path, "/.gpac/modules"); + if (check_file_exists(TEST_MODULE, app_path, file_path)) return 1; + } + /*modules not found, failure*/ + return 0; + } + + /*OSX way vs iPhone*/ + sep = strstr(app_path, ".app/"); + if (sep) sep[4] = 0; + + /*we are looking for .app install path, or GUI */ + if (path_type==GF_PATH_GUI) { +#ifndef GPAC_IPHONE + strcat(app_path, "/Contents/MacOS/gui"); + if (check_file_exists("gui.bt", app_path, file_path)) return 1; +#else /*iOS: for now, everything is set flat within the package*/ + /*iOS app is distributed with embedded GUI*/ + get_default_install_path(app_path, GF_PATH_APP); + strcat(app_path, "/gui"); + if (check_file_exists("gui_old.bt", app_path, file_path)) return 1; +#endif + } + else { // (path_type==GF_PATH_MODULES) + strcat(app_path, "/Contents/MacOS/modules"); + if (check_file_exists(TEST_MODULE, app_path, file_path)) return 1; + } + /*not found ...*/ + return 0; +} + +#endif + + +static GF_Config *create_default_config(char *file_path) +{ + FILE *f; + GF_Config *cfg; + char *cache_dir; + char szPath[GF_MAX_PATH]; + char gui_path[GF_MAX_PATH]; + + if (! get_default_install_path(file_path, GF_PATH_CFG)) { + gf_delete_file(szPath); + return NULL; + } + /*Create the config file*/ + sprintf(szPath, "%s%c%s", file_path, GF_PATH_SEPARATOR, CFG_FILE_NAME); + f = gf_f64_open(szPath, "wt"); + if (!f) return NULL; + fclose(f); + + if (! get_default_install_path(szPath, GF_PATH_MODULES)) { + gf_delete_file(szPath); + fprintf(stdout, "default modules not found\n"); + return NULL; + } + + cfg = gf_cfg_new(file_path, CFG_FILE_NAME); + if (!cfg) return NULL; + + gf_cfg_set_key(cfg, "General", "ModulesDirectory", szPath); + + /*get default temporary directoy */ + cache_dir = gf_get_default_cache_directory(); + if (cache_dir) { + gf_cfg_set_key(cfg, "General", "CacheDirectory", cache_dir); + gf_free(cache_dir); + } + + gf_cfg_set_key(cfg, "Compositor", "Raster2D", "GPAC 2D Raster"); + gf_cfg_set_key(cfg, "Audio", "ForceConfig", "yes"); + gf_cfg_set_key(cfg, "Audio", "NumBuffers", "2"); + gf_cfg_set_key(cfg, "Audio", "TotalDuration", "120"); + gf_cfg_set_key(cfg, "Audio", "DisableNotification", "no"); + + /*Setup font engine to FreeType by default, and locate TrueType font directory on the system*/ + gf_cfg_set_key(cfg, "FontEngine", "FontReader", "ft_font"); + gf_cfg_set_key(cfg, "FontEngine", "RescanFonts", "yes"); + + +#if defined(_WIN32_WCE) + /*FIXME - is this true on all WinCE systems??*/ + strcpy(szPath, "\\Windows"); +#elif defined(WIN32) + GetWindowsDirectory((char*)szPath, MAX_PATH); + if (szPath[strlen((char*)szPath)-1] != '\\') strcat((char*)szPath, "\\"); + strcat((char *)szPath, "Fonts"); +#elif defined(__APPLE__) + +#ifdef GPAC_IPHONE + strcpy(szPath, "/System/Library/Fonts/Cache"); +#else + strcpy(szPath, "/Library/Fonts"); +#endif + +#else + strcpy(szPath, "/usr/share/fonts/truetype/"); +#endif + gf_cfg_set_key(cfg, "FontEngine", "FontDirectory", szPath); + + gf_cfg_set_key(cfg, "Downloader", "CleanCache", "yes"); + gf_cfg_set_key(cfg, "Compositor", "AntiAlias", "All"); + gf_cfg_set_key(cfg, "Compositor", "FrameRate", "30"); + /*use power-of-2 emulation in OpenGL if no rectangular texture extension*/ + gf_cfg_set_key(cfg, "Compositor", "EmulatePOW2", "yes"); + gf_cfg_set_key(cfg, "Compositor", "ScalableZoom", "yes"); + +#if defined(_WIN32_WCE) + gf_cfg_set_key(cfg, "Video", "DriverName", "GAPI Video Output"); +#elif defined(WIN32) + gf_cfg_set_key(cfg, "Video", "DriverName", "DirectX Video Output"); +#elif defined(__DARWIN__) || defined(__APPLE__) + gf_cfg_set_key(cfg, "Video", "DriverName", "SDL Video Output"); +#else + gf_cfg_set_key(cfg, "Video", "DriverName", "X11 Video Output"); + gf_cfg_set_key(cfg, "Audio", "DriverName", "SDL Audio Output"); +#endif + + gf_cfg_set_key(cfg, "Video", "SwitchResolution", "no"); + gf_cfg_set_key(cfg, "Video", "HardwareMemory", "Auto"); + gf_cfg_set_key(cfg, "Network", "AutoReconfigUDP", "yes"); + gf_cfg_set_key(cfg, "Network", "UDPTimeout", "10000"); + gf_cfg_set_key(cfg, "Network", "BufferLength", "3000"); + + + /*locate GUI*/ + if ( get_default_install_path(szPath, GF_PATH_GUI) ) { + sprintf(gui_path, "%s%cgui.bt", szPath, GF_PATH_SEPARATOR); + f = fopen(gui_path, "rt"); + if (f) { + fclose(f); + gf_cfg_set_key(cfg, "General", "StartupFile", gui_path); + } + } + + /*store and reload*/ + gf_cfg_del(cfg); + return gf_cfg_new(file_path, CFG_FILE_NAME); +} + +/*check if modules directory has changed in the config file +this is mainly intended for OSX where we can have an install in /usr/... and an install in /Applications/Osmo4.app +*/ +static void check_modules_dir(GF_Config *cfg) +{ + char path[GF_MAX_PATH]; + const char *opt; + + if ( get_default_install_path(path, GF_PATH_MODULES) ) { +#if defined(__DARWIN__) || defined(__APPLE__) + opt = gf_cfg_get_key(cfg, "General", "ModulesDirectory"); + if (!opt || strcmp(opt, path)) gf_cfg_set_key(cfg, "General", "ModulesDirectory", path); +#endif + } + + /*if startup file was disabled, do not attempt to correct it*/ + if (gf_cfg_get_key(cfg, "General", "StartupFile")==NULL) return; + + if ( get_default_install_path(path, GF_PATH_GUI) ) { + opt = gf_cfg_get_key(cfg, "General", "StartupFile"); + if (strstr(opt, "gui.bt") && strcmp(opt, path)) { +#if defined(_WIN32_WCE) || defined(WIN32) + strcat(path, "\\gui.bt"); +#else + strcat(path, "/gui.bt"); +#endif + gf_cfg_set_key(cfg, "General", "StartupFile", path); + } + } +} + +GF_Config *gf_cfg_init(const char *file, Bool *new_cfg) +{ + GF_Config *cfg; + char szPath[GF_MAX_PATH]; + + if (new_cfg) *new_cfg = 0; + + if (file) { + cfg = gf_cfg_new(NULL, file); + if (cfg) { + check_modules_dir(cfg); + return cfg; + } + } + + if (!get_default_install_path(szPath, GF_PATH_CFG)) { + fprintf(stderr, "Fatal error: Cannot create a configuration file in application or user home directory - no write access\n"); + return NULL; + } + cfg = gf_cfg_new(szPath, CFG_FILE_NAME); + if (!cfg) { + fprintf(stdout, "GPAC config file %s not found in %s - creating new file\n", CFG_FILE_NAME, szPath); + cfg = create_default_config(szPath); + } + + if (!cfg) { + fprintf(stdout, "cannot create config file %s in %s directory\n", CFG_FILE_NAME, szPath); + return NULL; + } + + fprintf(stdout, "Using config file in %s directory\n", szPath); + + check_modules_dir(cfg); + + if (new_cfg) *new_cfg = 1; + return cfg; +} + diff --git a/src/utils/os_divers.c b/src/utils/os_divers.c index 3db684e..87ce36c 100644 --- a/src/utils/os_divers.c +++ b/src/utils/os_divers.c @@ -193,7 +193,7 @@ GF_Err gf_delete_file(const char *fileName) { #if defined(_WIN32_WCE) TCHAR swzName[MAX_PATH]; - CE_CharToWide(fileName, swzName); + CE_CharToWide((char*)fileName, swzName); return (DeleteFile(swzName)==0) ? GF_IO_ERR : GF_OK; #elif defined(WIN32) /* success if != 0 */ @@ -209,8 +209,8 @@ void gf_move_file(const char *fileName, const char *newFileName) #if defined(_WIN32_WCE) TCHAR swzName[MAX_PATH]; TCHAR swzNewName[MAX_PATH]; - CE_CharToWide(fileName, swzName); - CE_CharToWide(newFileName, swzNewName); + CE_CharToWide((char*)fileName, swzName); + CE_CharToWide((char*)newFileName, swzNewName); MoveFile(swzName, swzNewName); #elif defined(WIN32) MoveFile(fileName, newFileName); @@ -856,6 +856,8 @@ sh4_change_fpscr(int off, int on) void gf_mem_enable_tracker(); #endif +static u64 memory_at_gpac_startup = 0; + void gf_sys_init(Bool enable_memory_tracker) { if (!sys_init) { @@ -937,6 +939,14 @@ void gf_sys_init(Bool enable_memory_tracker) #endif } sys_init += 1; + + + /*init RTI stats*/ + if (!memory_at_gpac_startup) { + GF_SystemRTInfo rti; + gf_sys_get_rti(500, &rti, GF_RTI_SYSTEM_MEMORY_ONLY); + memory_at_gpac_startup = rti.physical_memory_avail; + } } void gf_sys_close() @@ -956,6 +966,10 @@ void gf_sys_close() if (psapi_hinst) FreeLibrary(psapi_hinst); psapi_hinst = NULL; #endif + +#ifdef GPAC_MEMORY_TRACKING + gf_memory_print(); +#endif } } @@ -965,10 +979,9 @@ extern size_t gpac_nb_alloc_blocs; #endif /*CPU and Memory Usage*/ - #ifdef WIN32 -Bool gf_sys_get_rti(u32 refresh_time_ms, GF_SystemRTInfo *rti, u32 flags) +Bool gf_sys_get_rti_os(u32 refresh_time_ms, GF_SystemRTInfo *rti, u32 flags) { #if defined(_WIN32_WCE) THREADENTRY32 tentry; @@ -1229,11 +1242,15 @@ Bool gf_sys_get_rti(u32 refresh_time_ms, GF_SystemRTInfo *rti, u32 flags) #include #include #include +#if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1060 +#include +#else #include +#endif static u64 total_physical_memory = 0; -Bool gf_sys_get_rti(u32 refresh_time_ms, GF_SystemRTInfo *rti, u32 flags) +Bool gf_sys_get_rti_os(u32 refresh_time_ms, GF_SystemRTInfo *rti, u32 flags) { size_t length; u32 entry_time, i, percent; @@ -1340,7 +1357,7 @@ Bool gf_sys_get_rti(u32 refresh_time_ms, GF_SystemRTInfo *rti, u32 flags) //linux #else -Bool gf_sys_get_rti(u32 refresh_time_ms, GF_SystemRTInfo *rti, u32 flags) +Bool gf_sys_get_rti_os(u32 refresh_time_ms, GF_SystemRTInfo *rti, u32 flags) { u32 entry_time; u64 process_u_k_time; @@ -1500,6 +1517,18 @@ Bool gf_sys_get_rti(u32 refresh_time_ms, GF_SystemRTInfo *rti, u32 flags) #endif + +Bool gf_sys_get_rti(u32 refresh_time_ms, GF_SystemRTInfo *rti, u32 flags) +{ + Bool res = gf_sys_get_rti_os(refresh_time_ms, rti, flags); + if (res) { + if (!rti->process_memory) rti->process_memory = memory_at_gpac_startup - rti->physical_memory_avail; + if (!rti->gpac_memory) rti->gpac_memory = memory_at_gpac_startup - rti->physical_memory_avail; + } + return res; +} + + char * gf_get_default_cache_directory(){ #ifdef _WIN32_WCE return gf_strdup( "\\windows\\temp" ); @@ -1637,22 +1666,45 @@ exit: close(fd); return NULL; } - #else /* WIN32 */ -#pragma message("gf_global_resource_lock() not implemented") struct _GF_GlobalLock_opaque { char * resourceName; + HANDLE hMutex; /*a named mutex is a system-mode object on windows*/ }; - #endif GF_GlobalLock * gf_global_resource_lock(const char * resourceName){ #ifdef WIN32 - GF_GlobalLock * lock = gf_malloc(sizeof(GF_GlobalLock)); - lock->resourceName = gf_strdup( resourceName ); - /* TODO : implement this properly for Windows... */ - return lock; +#ifdef _WIN32_WCE + unsigned short sWResourceName[MAX_PATH]; +#endif + GF_GlobalLock *lock = gf_malloc(sizeof(GF_GlobalLock)); + lock->resourceName = gf_strdup(resourceName); + + /*first ensure mutex is created*/ +#ifdef _WIN32_WCE + CE_CharToWide((char *)resourceName, sWResourceName); + lock->hMutex = CreateMutex(NULL, TRUE, sWResourceName); +#else + lock->hMutex = CreateMutex(NULL, TRUE, resourceName); +#endif + if (!lock->hMutex) { + DWORD lastErr = GetLastError(); + if (lastErr != ERROR_ALREADY_EXISTS) + return NULL; + } + + /*then lock it*/ + switch (WaitForSingleObject(lock->hMutex, INFINITE)) { + case WAIT_ABANDONED: + case WAIT_TIMEOUT: + assert(0); /*serious error: someone has modified the object elsewhere*/ + gf_global_resource_unlock(lock); + return NULL; + } + + return lock; #else /* WIN32 */ return gf_create_PID_file(resourceName); #endif /* WIN32 */ @@ -1674,9 +1726,17 @@ GF_Err gf_global_resource_unlock(GF_GlobalLock * lock){ gf_free(lock->pidFile); lock->pidFile = NULL; lock->fd = -1; -#endif /* not defined WIN32 */ - if (lock->resourceName) - gf_free(lock->resourceName); +#else /* WIN32 */ + { + /*MSDN: "The mutex object is destroyed when its last handle has been closed."*/ + BOOL ret = ReleaseMutex(lock->hMutex); + assert(ret); + ret = CloseHandle(lock->hMutex); + assert(ret); + } +#endif + if (lock->resourceName) + gf_free(lock->resourceName); lock->resourceName = NULL; gf_free(lock); return GF_OK; diff --git a/src/utils/os_net.c b/src/utils/os_net.c index 08da742..71f2546 100644 --- a/src/utils/os_net.c +++ b/src/utils/os_net.c @@ -615,7 +615,7 @@ GF_Err gf_sk_bind(GF_Socket *sock, const char *local_ip, u16 port, const char *p s32 optval; if (!sock || sock->socket) return GF_BAD_PARAM; - + #ifndef WIN32 if(!local_ip){ if(!peer_name || !strcmp(peer_name,"localhost")){ @@ -631,7 +631,10 @@ GF_Err gf_sk_bind(GF_Socket *sock, const char *local_ip, u16 port, const char *p /*probe way to peer: is it V4 or V6? */ if (peer_name && peer_port) { res = gf_sk_get_ipv6_addr(peer_name, peer_port, af, AI_PASSIVE, type); - if (!res) return GF_IP_CONNECTION_FAILURE; + if (!res) { + GF_LOG(GF_LOG_ERROR, GF_LOG_NETWORK, ("[Socket] Cannot get IPV6 host name for %s:%d\n", peer_name, peer_port)); + return GF_IP_ADDRESS_NOT_FOUND; + } #ifdef WIN32 /*win32 has troubles redirecting IPV4 datagrams to IPV6 sockets, so override local family type to avoid IPV4(S)->IPV6(C) UDP*/ @@ -657,7 +660,10 @@ GF_Err gf_sk_bind(GF_Socket *sock, const char *local_ip, u16 port, const char *p res = gf_sk_get_ipv6_addr(NULL, port, af, AI_PASSIVE, type); local_ip = NULL; } - if (!res) return GF_IP_CONNECTION_FAILURE; + if (!res) { + GF_LOG(GF_LOG_ERROR, GF_LOG_NETWORK, ("[Socket] Cannot get IPV6 host name for %s:%d\n", local_ip, port)); + return GF_IP_ADDRESS_NOT_FOUND; + } } /*for all interfaces*/ @@ -700,6 +706,7 @@ GF_Err gf_sk_bind(GF_Socket *sock, const char *local_ip, u16 port, const char *p return GF_OK; } freeaddrinfo(res); + GF_LOG(GF_LOG_ERROR, GF_LOG_NETWORK, ("[Socket] Cannot bind to host %s port %d\n", local_ip, port)); return GF_IP_CONNECTION_FAILURE; #else diff --git a/src/utils/os_thread.c b/src/utils/os_thread.c index bf14b32..a01a114 100644 --- a/src/utils/os_thread.c +++ b/src/utils/os_thread.c @@ -114,7 +114,7 @@ GF_Thread *gf_th_new(const char *name) tmp->log_name = gf_strdup(name); } else { char szN[20]; - sprintf(szN, "0x%p", (void*)tmp); + sprintf(szN, "%p", (void*)tmp); tmp->log_name = gf_strdup(szN); } log_add_thread(tmp); @@ -332,7 +332,7 @@ u32 gf_th_id() #ifdef WIN32 return ((u32) GetCurrentThreadId()); #else - return ((u32) pthread_self()); + return ((u32) (PTR_TO_U_CAST(pthread_self()))); #endif } @@ -381,7 +381,7 @@ GF_Mutex *gf_mx_new(const char *name) tmp->log_name = gf_strdup(name); } else { char szN[20]; - sprintf(szN, "0x%p", (void*)tmp); + sprintf(szN, "%p", (void*)tmp); tmp->log_name = gf_strdup(szN); } assert( tmp->log_name); @@ -486,14 +486,20 @@ Bool gf_mx_try_lock(GF_Mutex *mx) } #ifdef WIN32 - /*wait for 1 ms (I can't figure out from MS doc if 0 timeout only "tests the state" or also lock the mutex ... */ - switch (WaitForSingleObject(mx->hMutex, 1)) { + /*is the object signaled?*/ + switch (WaitForSingleObject(mx->hMutex, 0)) { + case WAIT_OBJECT_0: + break; case WAIT_ABANDONED: case WAIT_TIMEOUT: GF_LOG(GF_LOG_DEBUG, GF_LOG_MUTEX, ("[Mutex %s] At %d Couldn't be locked by thread %s (grabbed by thread %s)\n", mx->log_name, gf_sys_clock(), log_th_name(caller), log_th_name(mx->Holder) )); return 0; + case WAIT_FAILED: + GF_LOG(GF_LOG_ERROR, GF_LOG_MUTEX, ("[Mutex %s] At %d WaitForSingleObject failed\n", mx->log_name, gf_sys_clock())); + return 0; default: - break; + assert(0); + return 0; } #else if (pthread_mutex_trylock(&mx->hMutex) != 0 ) { @@ -540,7 +546,7 @@ GF_Semaphore *gf_sema_new(u32 MaxCount, u32 InitCount) */ { char semaName[40]; - sprintf(semaName,"GPAC_SEM%d", (u32) tmp); + sprintf(semaName,"GPAC_SEM%ld", (unsigned long) tmp); tmp->SemName = gf_strdup(semaName); } tmp->hSemaphore = sem_open(tmp->SemName, O_CREAT, S_IRUSR|S_IWUSR, InitCount); diff --git a/src/utils/xml_parser.c b/src/utils/xml_parser.c index 603945c..75c06c8 100644 --- a/src/utils/xml_parser.c +++ b/src/utils/xml_parser.c @@ -64,7 +64,7 @@ static char *xml_translate_xml_string(char *str) if (szChar[2]=='x') sscanf(szChar, "&#x%x;", &val); else - sscanf(szChar, "&#%ud;", &val); + sscanf(szChar, "&#%u;", &val); wchar[0] = val; srcp = wchar; j += gf_utf8_wcstombs(&value[j], 20, &srcp); -- 2.30.2

    ryQbKuG?q~dNQkTyt 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∋G1 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 diff --git a/extra_lib/lib/android/armeabi/libjs_osmo.so b/extra_lib/lib/android/armeabi/libjs_osmo.so deleted file mode 100755 index c13e6800f9ee5a6e638b9b2d82ca71fc62fc80b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 511672 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π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%0A2)VS$;}A0S75%X%>(TVby>i}^7p$fZ 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

  • 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 literal 0 HcmV?d00001 diff --git a/applications/osmo4_ios/main.c b/applications/osmo4_ios/main.c index b6e1492..75955cd 100644 --- a/applications/osmo4_ios/main.c +++ b/applications/osmo4_ios/main.c @@ -73,7 +73,7 @@ int (*AVI_write_frame)(avi_t *AVI, char *data, long bytes, int keyframe); void (*gf_cfg_del)(GF_Config *iniFile); Bool (*gf_term_get_channel_net_info)(GF_Terminal *term, GF_ObjectManager *odm, u32 *d_enum, u32 *chid, NetStatCommand *netcom, GF_Err *ret_code); void (*gf_term_process_shortcut)(GF_Terminal *term, GF_Event *ev); -GF_Config *(*gf_cfg_new)(const char *filePath, const char *fileName); +GF_Config *(*gf_cfg_init)(const char *fileName, Bool *is_new); Bool (*gf_term_get_download_info)(GF_Terminal *term, GF_ObjectManager *odm, u32 *d_enum, const char **server, const char **path, u32 *bytes_done, u32 *total_bytes, u32 *bytes_per_sec); u32 (*gf_sys_clock)(); GF_ObjectManager *(*gf_term_get_object)(GF_Terminal *term, GF_ObjectManager *scene_od, u32 index); @@ -318,131 +318,6 @@ void PrintHelp() ); } -GF_Config *create_default_config(char *file_path, char *file_name) -{ - GF_Config *cfg; - char szPath[GF_MAX_PATH]; - -#ifdef WIN32 - FILE *f; - Bool write_access = 0; - - /*following code is highly inspired by Osmo4*/ - /*do we have the write privileges on this dir ? if not, use user local data directory*/ - strcpy(szPath, file_path); - strcat(szPath, "GPAC.cfg"); - f = gf_f64_open(szPath, "wb"); - if (f != NULL) { - fclose(f); - write_access = 1; - } else { - write_access = 0; - } - strcpy(szPath, file_path); - - /*get GPAC.cfg path*/ - if (!write_access) { - char szPath2[GF_MAX_PATH]; - SHGetFolderPath(NULL, CSIDL_APPDATA | CSIDL_FLAG_CREATE, NULL, SHGFP_TYPE_CURRENT, file_path); - if (file_path[strlen((char *) file_path)-1] != '\\') strcat(file_path, "\\"); - strcat(file_path, "GPAC\\"); - /*create GPAC dir*/ - _mkdir(file_path); - strcpy(szPath2, file_path); - strcat(szPath2, "GPAC.cfg"); - f = gf_f64_open(szPath2, "wb"); - assert(f); - if (!f) return NULL; - fclose(f); - } -#else - FILE *f; - sprintf(szPath, "%s%c%s", file_path, GF_PATH_SEPARATOR, file_name); - f = gf_f64_open(szPath, "wt"); - fprintf(stdout, "create %s: %s\n", szPath, (f==NULL) ? "Error" : "OK"); - if (!f) return NULL; - fclose(f); -#endif - - cfg = gf_cfg_new(file_path, file_name); - if (!cfg) return NULL; - -#ifdef GPAC_MODULES_PATH - fprintf(stdout, "Using module directory %s \n", GPAC_MODULES_PATH); - strcpy(szPath, GPAC_MODULES_PATH); -#elif defined(WIN32) - //szPath still contains the executable directory -#else -#if 0 - fprintf(stdout, "Please enter full path to GPAC modules directory:\n"); - scanf("%s", szPath); -#endif - strcpy(szPath, "/Applications/osmo4ios.app/"); -#endif - gf_cfg_set_key(cfg, "General", "ModulesDirectory", szPath); - gf_cfg_set_key(cfg, "Audio", "ForceConfig", "yes"); - gf_cfg_set_key(cfg, "Audio", "NumBuffers", "2"); - gf_cfg_set_key(cfg, "Audio", "TotalDuration", "120"); - gf_cfg_set_key(cfg, "Audio", "DisableNotification", "no"); - gf_cfg_set_key(cfg, "FontEngine", "FontReader", "ft_font"); - -#ifdef WIN32 - GetWindowsDirectory((char*)szPath, MAX_PATH); - if (szPath[strlen((char*)szPath)-1] != '\\') strcat((char*)szPath, "\\"); - strcat((char *)szPath, "Fonts"); -#elif defined(__DARWIN__) || defined(__APPLE__) - fprintf(stdout, "Please enter full path to a TrueType font directory (.ttf, .ttc) - enter to default:\n"); - //scanf("%s", szPath); -#else - strcpy(szPath, "/usr/share/fonts/truetype/"); -#endif - strcpy(szPath, "/System/Library/Fonts/Cache"), /*iOS*/ - fprintf(stdout, "Using default font directory %s\n", szPath); - gf_cfg_set_key(cfg, "FontEngine", "FontDirectory", szPath); - -#ifdef WIN32 -/* fprintf(stdout, "Please enter full path to a cache directory for HTTP downloads:\n"); - scanf("%s", szPath); -*/ - GetWindowsDirectory((char*)szPath, MAX_PATH); - if (szPath[strlen((char*)szPath)-1] != '\\') strcat((char*)szPath, "\\"); - strcat((char *)szPath, "Temp"); - - gf_cfg_set_key(cfg, "General", "CacheDirectory", szPath); - fprintf(stdout, "Using default cache directory %s\n", szPath); -#else - fprintf(stdout, "Using /tmp as a cache directory for HTTP downloads:\n"); - gf_cfg_set_key(cfg, "General", "CacheDirectory", "/tmp"); -#endif - - gf_cfg_set_key(cfg, "Downloader", "CleanCache", "yes"); - gf_cfg_set_key(cfg, "Compositor", "AntiAlias", "All"); - gf_cfg_set_key(cfg, "Compositor", "FrameRate", "30"); - /*use power-of-2 emulation*/ - gf_cfg_set_key(cfg, "Compositor", "EmulatePOW2", "yes"); -#ifdef WIN32 - gf_cfg_set_key(cfg, "Compositor", "ScalableZoom", "yes"); - gf_cfg_set_key(cfg, "Video", "DriverName", "DirectX Video Output"); -#elif defined(__DARWIN__) - gf_cfg_set_key(cfg, "Video", "DriverName", "SDL Video Output"); - /*SDL not so fast with scalable zoom*/ - gf_cfg_set_key(cfg, "Compositor", "ScalableZoom", "no"); -#else - gf_cfg_set_key(cfg, "Video", "DriverName", "X11 Video Output"); - /*x11 only supports scalable zoom*/ - gf_cfg_set_key(cfg, "Compositor", "ScalableZoom", "yes"); - gf_cfg_set_key(cfg, "Audio", "DriverName", "SDL Audio Output"); -#endif - - gf_cfg_set_key(cfg, "Video", "SwitchResolution", "no"); - gf_cfg_set_key(cfg, "Network", "AutoReconfigUDP", "yes"); - gf_cfg_set_key(cfg, "Network", "UDPTimeout", "10000"); - gf_cfg_set_key(cfg, "Network", "BufferLength", "3000"); - - /*store and reload*/ - gf_cfg_del(cfg); - return gf_cfg_new(file_path, file_name); -} static void PrintTime(u64 time) { @@ -831,64 +706,6 @@ Bool GPAC_EventProc(void *ptr, GF_Event *evt) return 0; } -GF_Config *loadconfigfile(char *filepath) -{ - GF_Config *cfg = NULL; - char *cfg_dir; - char szPath[GF_MAX_PATH]; - - if (filepath) { - strcpy(szPath, filepath); - cfg_dir = strrchr(szPath, '\\'); - if (!cfg_dir) cfg_dir = strrchr(szPath, '/'); - if (cfg_dir) { - char c = cfg_dir[0]; - cfg_dir[0] = 0; - cfg = gf_cfg_new(cfg_dir, cfg_dir+1); - cfg_dir[0] = c; - if (cfg) goto success; - } else { - cfg = gf_cfg_new(".", filepath); - if (cfg) goto success; - } - } - -#ifdef WIN32 - GetModuleFileNameA(NULL, szPath, GF_MAX_PATH); - cfg_dir = strrchr(szPath, '\\'); - if (cfg_dir) cfg_dir[1] = 0; - - cfg = gf_cfg_new(szPath, "GPAC.cfg"); - if (cfg) goto success; - strcpy(szPath, "."); - cfg = gf_cfg_new(szPath, "GPAC.cfg"); - if (cfg) goto success; - strcpy(szPath, "."); - cfg = gf_cfg_new(szPath, "GPAC.cfg"); - if (cfg) goto success; - - GetModuleFileNameA(NULL, szPath, GF_MAX_PATH); - cfg_dir = strrchr(szPath, '\\'); - if (cfg_dir) cfg_dir[1] = 0; - cfg = create_default_config(szPath, "GPAC.cfg"); -#else - /*linux*/ - cfg_dir = getenv("HOME"); - fprintf(stderr, "WARNING: HOME env var not set - using current directory for config file\n"); - strcpy(szPath, "/Applications/Documents"); - cfg = gf_cfg_new(szPath, ".gpacrc"); - if (cfg) goto success; - fprintf(stderr, "GPAC config file not found in %s - creating new file\n", szPath); - cfg = create_default_config(szPath, ".gpacrc"); -#endif - if (!cfg) { - fprintf(stderr, "cannot create config file in %s directory\n", szPath); - return NULL; - } - success: - fprintf(stderr, "Using config file in %s directory\n", szPath); - return cfg; -} void list_modules(GF_ModuleManager *modules) { @@ -901,6 +718,7 @@ void list_modules(GF_ModuleManager *modules) fprintf(stderr, "\n"); } + void set_navigation() { GF_Err e; @@ -1044,7 +862,7 @@ int main (int argc, char *argv[]) int *libgpac_so = NULL; libgpac_so = dlopen("/Applications/osmo4ios.app/libgpac_dynamic.dylib", RTLD_LAZY); - fprintf(stderr, "dlopen libgpac_so: 0x%p\n", libgpac_so); + fprintf(stderr, "dlopen libgpac_so: %p\n", libgpac_so); fprintf(stderr, "dlsym: %p gf_log_lt\n", gf_log_lt = dlsym(libgpac_so, "gf_log_lt")); fprintf(stderr, "dlsym: %p AVI_close\n", AVI_close = dlsym(libgpac_so, "AVI_close")); fprintf(stderr, "dlsym: %p gf_sleep\n", gf_sleep = dlsym(libgpac_so, "gf_sleep")); @@ -1093,7 +911,7 @@ int main (int argc, char *argv[]) fprintf(stderr, "dlsym: %p gf_cfg_del\n", gf_cfg_del = dlsym(libgpac_so, "gf_cfg_del")); fprintf(stderr, "dlsym: %p gf_term_get_channel_net_info\n", gf_term_get_channel_net_info = dlsym(libgpac_so, "gf_term_get_channel_net_info")); fprintf(stderr, "dlsym: %p gf_term_process_shortcut\n", gf_term_process_shortcut = dlsym(libgpac_so, "gf_term_process_shortcut")); - fprintf(stderr, "dlsym: %p gf_cfg_new\n", gf_cfg_new = dlsym(libgpac_so, "gf_cfg_new")); + fprintf(stderr, "dlsym: %p gf_cfg_init\n", gf_cfg_init = dlsym(libgpac_so, "gf_cfg_init")); fprintf(stderr, "dlsym: %p gf_term_get_download_info\n", gf_term_get_download_info = dlsym(libgpac_so, "gf_term_get_download_info")); fprintf(stderr, "dlsym: %p gf_sys_clock\n", gf_sys_clock = dlsym(libgpac_so, "gf_sys_clock")); fprintf(stderr, "dlsym: %p gf_term_get_object\n", gf_term_get_object = dlsym(libgpac_so, "gf_term_get_object")); @@ -1159,7 +977,7 @@ int main (int argc, char *argv[]) gf_iphone_set_sdl_video_module(SDL_NewVideo); gf_iphone_set_sdl_audio_module(SDL_NewAudio); - cfg_file = loadconfigfile(the_cfg); + cfg_file = gf_cfg_init(the_cfg, NULL); if (!cfg_file) { fprintf(stdout, "Error: Configuration File \"GPAC.cfg\" not found\n"); if (logfile) fclose(logfile); @@ -1167,15 +985,10 @@ int main (int argc, char *argv[]) } { - const char *str; logs_set = 1; - str = gf_cfg_get_key(cfg_file, "General", "LogLevel"); - if (str) - gf_log_set_level(gf_log_parse_level(str)); - str = gf_cfg_get_key(cfg_file, "General", "LogTools"); - if (str) - gf_log_set_tools(gf_log_parse_tools(str)); + gf_log_set_level( gf_log_parse_level( gf_cfg_get_key(cfg_file, "General", "LogLevel") ) ); + gf_log_set_tools( gf_log_parse_tools( gf_cfg_get_key(cfg_file, "General", "LogTools") ) ); } for (i=1; i<(u32) argc; i++) { diff --git a/applications/osmo4_ios/osmo4ios-Info.plist b/applications/osmo4_ios/osmo4ios-Info.plist index af9a1ca..2c7f467 100644 --- a/applications/osmo4_ios/osmo4ios-Info.plist +++ b/applications/osmo4_ios/osmo4ios-Info.plist @@ -7,14 +7,18 @@ CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier - com.yourcompany.${PRODUCT_NAME:identifier} + com.gpac.${PRODUCT_NAME:identifier} CFBundleInfoDictionaryVersion 6.0 + CFBundleName + Osmo4 CFBundlePackageType APPL + CFBundleShortVersionString + 9.9.9 CFBundleSignature - ???? + gpac CFBundleVersion - 1.0 + 9999 diff --git a/applications/osmo4_sym/osmo4_view.cpp b/applications/osmo4_sym/osmo4_view.cpp index e6064b6..eb1c751 100644 --- a/applications/osmo4_sym/osmo4_view.cpp +++ b/applications/osmo4_sym/osmo4_view.cpp @@ -260,7 +260,8 @@ void COsmo4AppView::SetupLogs() fclose(logs); do_log = 1; gf_log_set_level(GF_LOG_DEBUG); - gf_log_set_tools(0xFFFFFFFF); + u32 lt = gf_log_parse_tools( gf_cfg_get_key(m_user.config, "General", "LogLevel") ); + gf_log_set_tools(lt ? lt : 0xFFFFFFFF); } } if (!do_log) { @@ -323,65 +324,12 @@ void COsmo4AppView::ConstructL( const TRect& aRect ) m_mx = gf_mx_new("Osmo4"); //load config file - m_user.config = gf_cfg_new(GPAC_CFG_DIR, "GPAC.cfg"); + m_user.config = gf_cfg_init(NULL, &first_launch); if (!m_user.config) { - first_launch = 1; - FILE *ft = fopen(GPAC_CFG_DIR"GPAC.cfg", "wt"); - if (!ft) { - MessageBox("Cannot create GPAC Config file", "Fatal Error"); - User::Leave(KErrGeneral); - } else { - fclose(ft); - } - m_user.config = gf_cfg_new(GPAC_CFG_DIR, "GPAC.cfg"); - if (!m_user.config) { - MessageBox("GPAC Configuration file not found", "Fatal Error"); - User::Leave(KErrGeneral); - } + MessageBox("Cannot create GPAC Config file", "Fatal Error"); + User::Leave(KErrGeneral); } - - SetupLogs(); - gf_set_progress_callback(this, Osmo4_progress_cbk); - - opt = gf_cfg_get_key(m_user.config, "General", "ModulesDirectory"); - if (!opt) first_launch = 2; - if (first_launch) { - FILE *t; - /*hardcode module directory*/ - gf_cfg_set_key(m_user.config, "General", "ModulesDirectory", GPAC_MODULES_DIR); - /*hardcode cache directory*/ - gf_cfg_set_key(m_user.config, "General", "CacheDirectory", GPAC_CFG_DIR"cache"); - gf_cfg_set_key(m_user.config, "Downloader", "CleanCache", "yes"); - /*startup file*/ - t = fopen(GPAC_CFG_DIR"gui/gui.bt", "rt"); - if (t) { - fclose(t); - gf_cfg_set_key(m_user.config, "General", "StartupFile", GPAC_CFG_DIR"gui/gui.bt"); - } else { - t = fopen(GPAC_CFG_DIR"gpac.mp4", "rt"); - if (t) { - fclose(t); - gf_cfg_set_key(m_user.config, "General", "StartupFile", GPAC_CFG_DIR"gpac.mp4"); - } - } - /*setup UDP traffic autodetect*/ - gf_cfg_set_key(m_user.config, "Network", "AutoReconfigUDP", "yes"); - gf_cfg_set_key(m_user.config, "Network", "UDPTimeout", "10000"); - gf_cfg_set_key(m_user.config, "Network", "BufferLength", "3000"); - - gf_cfg_set_key(m_user.config, "Compositor", "TextureTextMode", "Default"); - - - /*save cfg and reload*/ - gf_cfg_del(m_user.config); - m_user.config = gf_cfg_new(GPAC_CFG_DIR, "GPAC.cfg"); - if (!m_user.config) { - MessageBox("Cannot save initial GPAC Config file", "Fatal Error"); - User::Leave(KErrGeneral); - } - - MessageBox("Osmo4", "Thank you for Installing"); } diff --git a/applications/osmo4_w32/Options.cpp b/applications/osmo4_w32/Options.cpp index 2558d81..974bc35 100644 --- a/applications/osmo4_w32/Options.cpp +++ b/applications/osmo4_w32/Options.cpp @@ -12,6 +12,7 @@ #include #include +#include "Options.h" #ifdef _DEBUG #define new DEBUG_NEW @@ -1146,7 +1147,7 @@ void COptHTTP::DoDataExchange(CDataExchange* pDX) DDX_Control(pDX, IDC_HTTP_USE_PROXY, m_useProxy); DDX_Control(pDX, IDC_SAX_DELAY, m_SAXDuration); DDX_Control(pDX, IDC_SAX_PROGRESSIVE, m_Progressive); - DDX_Control(pDX, IDC_RESTART_CACHE, m_RestartFile); + DDX_Control(pDX, IDC_RESTART_CACHE, m_DisableCache); DDX_Control(pDX, IDC_CLEAN_CACHE, m_CleanCache); DDX_Control(pDX, IDC_BROWSE_CACHE, m_CacheDir); //}}AFX_DATA_MAP @@ -1159,6 +1160,7 @@ BEGIN_MESSAGE_MAP(COptHTTP, CDialog) ON_BN_CLICKED(IDC_SAX_PROGRESSIVE, OnSaxProgressive) ON_BN_CLICKED(IDC_HTTP_USE_PROXY, OnUseProxy) //}}AFX_MSG_MAP + ON_BN_CLICKED(IDC_RESTART_CACHE, &COptHTTP::OnBnClickedRestartCache) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// @@ -1208,8 +1210,8 @@ BOOL COptHTTP::OnInitDialog() sOpt = gf_cfg_get_key(gpac->m_user.config, "Downloader", "CleanCache"); m_CleanCache.SetCheck((sOpt && !stricmp(sOpt, "yes")) ? 1 : 0); - sOpt = gf_cfg_get_key(gpac->m_user.config, "Downloader", "RestartFiles"); - m_RestartFile.SetCheck((sOpt && !stricmp(sOpt, "yes")) ? 1 : 0); + sOpt = gf_cfg_get_key(gpac->m_user.config, "Downloader", "DisableCache"); + m_DisableCache.SetCheck((sOpt && !stricmp(sOpt, "yes")) ? 1 : 0); sOpt = gf_cfg_get_key(gpac->m_user.config, "SAXLoader", "Progressive"); m_Progressive.SetCheck((sOpt && !stricmp(sOpt, "yes")) ? 1 : 0); @@ -1264,7 +1266,7 @@ void COptHTTP::SaveOptions() Osmo4 *gpac = GetApp(); gf_cfg_set_key(gpac->m_user.config, "Downloader", "CleanCache", m_CleanCache.GetCheck() ? "yes" : "no"); - gf_cfg_set_key(gpac->m_user.config, "Downloader", "RestartFiles", m_RestartFile.GetCheck() ? "yes" : "no"); + gf_cfg_set_key(gpac->m_user.config, "Downloader", "DisableCache", m_DisableCache.GetCheck() ? "yes" : "no"); gf_cfg_set_key(gpac->m_user.config, "SAXLoader", "Progressive", m_Progressive.GetCheck() ? "yes" : "no"); m_SAXDuration.GetWindowText(szCacheDir, MAX_PATH); @@ -1980,3 +1982,8 @@ void COptLogs::SaveOptions() gpac->m_log_tools = flags; gf_log_set_tools(gpac->m_log_tools); } + +void COptHTTP::OnBnClickedRestartCache() +{ + // TODO : ajoutez ici le code de votre gestionnaire de notification de contrôle +} diff --git a/applications/osmo4_w32/Options.h b/applications/osmo4_w32/Options.h index b9e3df8..2e26e73 100644 --- a/applications/osmo4_w32/Options.h +++ b/applications/osmo4_w32/Options.h @@ -215,7 +215,7 @@ public: CButton m_useProxy; CEdit m_SAXDuration; CButton m_Progressive; - CButton m_RestartFile; + CButton m_DisableCache; CButton m_CleanCache; CButton m_CacheDir; //}}AFX_DATA @@ -241,6 +241,8 @@ protected: afx_msg void OnUseProxy(); //}}AFX_MSG DECLARE_MESSAGE_MAP() +public: + afx_msg void OnBnClickedRestartCache(); }; diff --git a/applications/osmo4_w32/Osmo4.cpp b/applications/osmo4_w32/Osmo4.cpp index 544abba..41f434e 100644 --- a/applications/osmo4_w32/Osmo4.cpp +++ b/applications/osmo4_w32/Osmo4.cpp @@ -273,6 +273,14 @@ Bool Osmo4_EventProc(void *priv, GF_Event *evt) case GF_KEY_MEDIAPREVIOUSTRACK: pFrame->m_pPlayList->PlayPrev(); break; + case GF_KEY_H: + if ((evt->key.flags & GF_KEY_MOD_CTRL) && gpac->m_isopen) + gf_term_switch_quality(gpac->m_term, 1); + break; + case GF_KEY_L: + if ((evt->key.flags & GF_KEY_MOD_CTRL) && gpac->m_isopen) + gf_term_switch_quality(gpac->m_term, 0); + break; } break; case GF_EVENT_NAVIGATE: @@ -298,7 +306,6 @@ Bool Osmo4_EventProc(void *priv, GF_Event *evt) UserPassDialog passdlg; return passdlg.GetPassword(evt->auth.site_url, evt->auth.user, evt->auth.password); } - } return 0; } @@ -326,9 +333,6 @@ static void osmo4_do_log(void *cbk, u32 level, u32 tool, const char *fmt, va_lis BOOL Osmo4::InitInstance() { - char config_file[MAX_PATH]; - FILE *ft; - Bool write_access; CCommandLineInfo cmdInfo; m_logs = NULL; @@ -342,29 +346,6 @@ BOOL Osmo4::InitInstance() while (szApplicationPath[strlen((char *) szApplicationPath)-1] != '\\') szApplicationPath[strlen((char *) szApplicationPath)-1] = 0; if (szApplicationPath[strlen((char *) szApplicationPath)-1] != '\\') strcat(szApplicationPath, "\\"); - /*do we have the write privileges on this dir ? if no, use Documents and Settings*/ - strcpy(config_file, szApplicationPath); - strcat(config_file, "test.txt"); - ft = gf_f64_open(config_file, "wb"); - if (ft != NULL) { - fclose(ft); - gf_delete_file(config_file); - write_access = 1; - } else { - write_access = 0; - } - - /*get GPAC.cfg path*/ - if (write_access) { - strcat(szUserPath, szApplicationPath); - } else { - SHGetFolderPath(NULL, CSIDL_APPDATA | CSIDL_FLAG_CREATE, NULL, SHGFP_TYPE_CURRENT, szUserPath); - if (szUserPath[strlen((char *) szUserPath)-1] != '\\') strcat(szUserPath, "\\"); - strcat(szUserPath, "GPAC\\"); - /*create GPAC dir*/ - _mkdir(szUserPath); - } - gf_sys_init(0); /*setup user*/ @@ -372,27 +353,19 @@ BOOL Osmo4::InitInstance() Bool first_launch = 0; /*init config and modules*/ - m_user.config = gf_cfg_new((const char *) szUserPath, "GPAC.cfg"); + m_user.config = gf_cfg_init(NULL, &first_launch); if (!m_user.config) { - first_launch = 1; - /*create blank config file in the exe dir*/ - char config_file[MAX_PATH]; - - strcpy(config_file, szUserPath); - /*create GPAC cache dir*/ - strcat(config_file, "cache"); - _mkdir(config_file); - - strcpy((char *) config_file, (const char *) szUserPath); - strcat((char *) config_file, "GPAC.cfg"); - ft = gf_f64_open((const char *) config_file, "wt"); - fclose(ft); - m_user.config = gf_cfg_new((const char *) szUserPath, "GPAC.cfg"); - if (!m_user.config) { - MessageBox(NULL, "GPAC Configuration file not found", "Fatal Error", MB_OK); - m_pMainWnd->PostMessage(WM_CLOSE); - } + MessageBox(NULL, "GPAC Configuration file not found", "Fatal Error", MB_OK); + m_pMainWnd->PostMessage(WM_CLOSE); } + + char *name = gf_cfg_get_filename(m_user.config); + char *sep = strrchr(name, '\\'); + if (sep) sep[0] = 0; + strcpy(szUserPath, name); + if (sep) sep[0] = '\\'; + gf_free(name); + const char *opt = gf_cfg_get_key(m_user.config, "General", "SingleInstance"); m_SingleInstance = (opt && !stricmp(opt, "yes")) ? 1 : 0; @@ -463,62 +436,21 @@ BOOL Osmo4::InitInstance() const char *str = gf_cfg_get_key(m_user.config, "General", "ModulesDirectory"); m_user.modules = gf_modules_new(str, m_user.config); - if (!m_user.modules) { - const char *sOpt; - /*inital launch*/ - m_user.modules = gf_modules_new(szApplicationPath, m_user.config); - if (m_user.modules) { - FILE *t; - unsigned char str_path[MAX_PATH]; - gf_cfg_set_key(m_user.config, "General", "ModulesDirectory", (const char *) szApplicationPath); - - sOpt = gf_cfg_get_key(m_user.config, "Compositor", "Raster2D"); - if (!sOpt) gf_cfg_set_key(m_user.config, "Compositor", "Raster2D", "GPAC 2D Raster"); - - sOpt = gf_cfg_get_key(m_user.config, "General", "CacheDirectory"); - if (!sOpt) { - sprintf((char *) str_path, "%scache", szUserPath); - gf_cfg_set_key(m_user.config, "General", "CacheDirectory", (const char *) str_path); - } - /*setup UDP traffic autodetect*/ - gf_cfg_set_key(m_user.config, "Network", "AutoReconfigUDP", "yes"); - gf_cfg_set_key(m_user.config, "Network", "UDPTimeout", "10000"); - gf_cfg_set_key(m_user.config, "Network", "BufferLength", "3000"); - - /*first launch, register all files ext*/ - u32 i; - for (i=0; iCanHandleURL(ifce, "test.test"); - gf_modules_close_interface((GF_BaseInterface *)ifce); - } - } - - sprintf((char *) str_path, "%sgui/gui.bt", szApplicationPath); - t = gf_f64_open((char *) str_path, "rt"); - if (!t) { - sprintf((char *) str_path, "%sgpac.mp4", szApplicationPath); - t = gf_f64_open((char *) str_path, "rt"); - } - if (t) { - gf_cfg_set_key(m_user.config, "General", "StartupFile", (const char *) str_path); - fclose(t); + if (!m_user.modules || ! gf_modules_get_count(m_user.modules) ) { + MessageBox(NULL, "No modules available - system cannot work", "Fatal Error", MB_OK); + m_pMainWnd->PostMessage(WM_CLOSE); + } + else if (first_launch) { + /*first launch, register all files ext*/ + u32 i; + for (i=0; iCanHandleURL(ifce, "test.test"); + gf_modules_close_interface((GF_BaseInterface *)ifce); } } - - /*check audio config on windows, force config*/ - sOpt = gf_cfg_get_key(m_user.config, "Audio", "ForceConfig"); - if (!sOpt) { - gf_cfg_set_key(m_user.config, "Audio", "ForceConfig", "yes"); - gf_cfg_set_key(m_user.config, "Audio", "NumBuffers", "2"); - gf_cfg_set_key(m_user.config, "Audio", "TotalDuration", "120"); - } - - /*by default use GDIplus, much faster than freetype on font loading*/ - gf_cfg_set_key(m_user.config, "FontEngine", "FontReader", "gm_soft_raster"); - /*set some shortcuts*/ gf_cfg_set_key(m_user.config, "Shortcuts", "VolumeUp", "ctrl+Up"); gf_cfg_set_key(m_user.config, "Shortcuts", "VolumeDown", "ctrl+Down"); @@ -526,26 +458,6 @@ BOOL Osmo4::InitInstance() gf_cfg_set_key(m_user.config, "Shortcuts", "FastForward", "ctrl+Right"); gf_cfg_set_key(m_user.config, "Shortcuts", "Play", "ctrl+ "); } - if (! gf_modules_get_count(m_user.modules) ) { - MessageBox(NULL, "No modules available - system cannot work", "Fatal Error", MB_OK); - m_pMainWnd->PostMessage(WM_CLOSE); - } - - /*setup font dir*/ - str = gf_cfg_get_key(m_user.config, "FontEngine", "FontDirectory"); - if (!str) { - char szFtPath[MAX_PATH]; - ::GetWindowsDirectory((char*)szFtPath, MAX_PATH); - if (szFtPath[strlen((char*)szFtPath)-1] != '\\') strcat((char*)szFtPath, "\\"); - strcat((char *)szFtPath, "Fonts"); - gf_cfg_set_key(m_user.config, "FontEngine", "FontDirectory", (const char *) szFtPath); - } - - /*check video driver, if none or raw_out use dx_hw by default*/ - str = gf_cfg_get_key(m_user.config, "Video", "DriverName"); - if (!str || !stricmp(str, "raw_out")) { - gf_cfg_set_key(m_user.config, "Video", "DriverName", "DirectX Video Output"); - } /*check log file*/ str = gf_cfg_get_key(m_user.config, "General", "LogFile"); @@ -556,49 +468,13 @@ BOOL Osmo4::InitInstance() else m_logs = NULL; /*set log level*/ - m_log_level = 0; - str = gf_cfg_get_key(m_user.config, "General", "LogLevel"); - if (str) { - if (!stricmp(str, "debug")) m_log_level = GF_LOG_DEBUG; - else if (!stricmp(str, "info")) m_log_level = GF_LOG_INFO; - else if (!stricmp(str, "warning")) m_log_level = GF_LOG_WARNING; - else if (!stricmp(str, "error")) m_log_level = GF_LOG_ERROR; - gf_log_set_level(m_log_level); - } + m_log_level = gf_log_parse_level(gf_cfg_get_key(m_user.config, "General", "LogLevel")); + gf_log_set_level(m_log_level); /*set log tools*/ - m_log_tools = 0; - str = gf_cfg_get_key(m_user.config, "General", "LogTools"); - if (str) { - char *sep; - char *val = (char *) str; - while (val) { - sep = strchr(val, ':'); - if (sep) sep[0] = 0; - if (!stricmp(val, "core")) m_log_tools |= GF_LOG_CODING; - else if (!stricmp(val, "coding")) m_log_tools |= GF_LOG_CODING; - else if (!stricmp(val, "container")) m_log_tools |= GF_LOG_CONTAINER; - else if (!stricmp(val, "network")) m_log_tools |= GF_LOG_NETWORK; - else if (!stricmp(val, "rtp")) m_log_tools |= GF_LOG_RTP; - else if (!stricmp(val, "author")) m_log_tools |= GF_LOG_AUTHOR; - else if (!stricmp(val, "sync")) m_log_tools |= GF_LOG_SYNC; - else if (!stricmp(val, "codec")) m_log_tools |= GF_LOG_CODEC; - else if (!stricmp(val, "parser")) m_log_tools |= GF_LOG_PARSER; - else if (!stricmp(val, "media")) m_log_tools |= GF_LOG_MEDIA; - else if (!stricmp(val, "scene")) m_log_tools |= GF_LOG_SCENE; - else if (!stricmp(val, "script")) m_log_tools |= GF_LOG_SCRIPT; - else if (!stricmp(val, "interact")) m_log_tools |= GF_LOG_INTERACT; - else if (!stricmp(val, "compose")) m_log_tools |= GF_LOG_COMPOSE; - else if (!stricmp(val, "mmio")) m_log_tools |= GF_LOG_MMIO; - else if (!stricmp(val, "none")) m_log_tools = 0; - else if (!stricmp(val, "all")) m_log_tools = 0xFFFFFFFF; - if (!sep) break; - sep[0] = ':'; - val = sep+1; - } - gf_log_set_tools(m_log_tools); - } - + m_log_tools = gf_log_parse_tools(gf_cfg_get_key(m_user.config, "General", "LogTools")); + gf_log_set_tools(m_log_tools); + m_user.opaque = this; m_user.os_window_handler = pFrame->m_pWndView->m_hWnd; m_user.EventProc = Osmo4_EventProc; diff --git a/applications/osmo4_w32/Osmo4.rc b/applications/osmo4_w32/Osmo4.rc index 1c65b6f..2241bfe 100644 --- a/applications/osmo4_w32/Osmo4.rc +++ b/applications/osmo4_w32/Osmo4.rc @@ -1,880 +1,872 @@ -// Microsoft Visual C++ generated resource script. -// -#include "resource.h" - -#define APSTUDIO_READONLY_SYMBOLS -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 2 resource. -// -#include "afxres.h" - -///////////////////////////////////////////////////////////////////////////// -#undef APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// -// Anglais (États-Unis) resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) -#ifdef _WIN32 -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -#pragma code_page(1252) -#endif //_WIN32 - -///////////////////////////////////////////////////////////////////////////// -// -// Menu -// - -IDR_MAINFRAME MENU -BEGIN - POPUP "&File" - BEGIN - MENUITEM "&Open File\tCtrl+O", ID_FILEOPEN - MENUITEM "Open &URL\tCtrl+U", ID_OPEN_URL - MENUITEM SEPARATOR - MENUITEM "File Propert&ies\tCtrl+I", ID_FILE_PROP - POPUP "Streaming Cache" - BEGIN - MENUITEM "&Enable", ID_REC_ENABLE - MENUITEM "&Stop and Save", ID_REC_STOP - MENUITEM "&Abort", ID_REC_ABORT - END - MENUITEM SEPARATOR - MENUITEM "Copy", ID_FILE_COPY - MENUITEM "Paste", ID_FILE_PASTE - MENUITEM SEPARATOR - MENUITEM "Exit", ID_FILE_EXIT - END - POPUP "View" - BEGIN - POPUP "Viewpoint" - BEGIN - MENUITEM "", ID_VIEWPORT_EMPTY - END - POPUP "&Navigation" - BEGIN - MENUITEM "Headlight", ID_HEADLIGHT - MENUITEM SEPARATOR - MENUITEM "&None", ID_NAVIGATE_NONE - MENUITEM "&Walk", ID_NAVIGATE_WALK - MENUITEM "&Fly", ID_NAVIGATE_FLY - MENUITEM "&Examine", ID_NAVIGATE_EXAM - MENUITEM "&Pan", ID_NAVIGATE_PAN - MENUITEM "&Slide", ID_NAVIGATE_SLIDE - MENUITEM "&Orbit", ID_NAVIGATE_ORBIT - MENUITEM "&VR", ID_NAVIGATE_VR - MENUITEM "&Game", ID_NAVIGATE_GAME - MENUITEM SEPARATOR - POPUP "Collision" - BEGIN - MENUITEM "Off", ID_COLLIDE_NONE - MENUITEM "Regular", ID_COLLIDE_REG - MENUITEM "Displacement", ID_COLLIDE_DISP - END - MENUITEM "Gravity", ID_GRAVITY - MENUITEM SEPARATOR - MENUITEM "&Reset", ID_NAV_RESET - END - MENUITEM SEPARATOR - MENUITEM "&Fullscreen", ID_VIEW_FULLSCREEN - MENUITEM "Original &Aspect", ID_VIEW_ORIGINAL - POPUP "Aspect &Ratio" - BEGIN - MENUITEM "&Keep Original", ID_AR_KEEP - MENUITEM "&Fill Screen", ID_AR_FILL - MENUITEM "Ratio 4/3", ID_AR_43 - MENUITEM "Ratio 16/9", ID_AR_169 - END - MENUITEM SEPARATOR - MENUITEM "Resource Usage", ID_VIEW_CPU - MENUITEM SEPARATOR - MENUITEM "&Options", IDD_CONFIGURE - END - POPUP "Play" - BEGIN - POPUP "Stream &Selection" - BEGIN - POPUP "Audio" - BEGIN - MENUITEM "", ID_AUDIO_EMPTY - END - POPUP "Video" - BEGIN - MENUITEM "", ID_VIDEO_EMPTY - END - POPUP "Subtitle" - BEGIN - MENUITEM "", ID_SUBS_EMPTY - END - MENUITEM SEPARATOR - MENUITEM "Add Subtitle", ID_ADD_SUBTITLE - END - POPUP "&Chapters" - BEGIN - MENUITEM "", ID_SETCHAP_FIRST - END - MENUITEM SEPARATOR - MENUITEM "Playlist\tCtrl+L", ID_VIEW_PL, CHECKED - MENUITEM "&Loop Playlist", ID_PLAYLIST_LOOP - MENUITEM SEPARATOR - MENUITEM "Play/Pause\tCtrl+P", ID_FILE_PLAY - MENUITEM "Step-by-Step\tCtrl+S", ID_FILE_STEP - MENUITEM "Stop", ID_FILE_STOP - MENUITEM SEPARATOR - MENUITEM "Reload File\tCtrl+R", ID_FILE_RELOAD - MENUITEM SEPARATOR - MENUITEM "Clear History", ID_CLEAR_NAV - MENUITEM "Reload Config", ID_CONFIG_RELOAD - END - POPUP "?" - BEGIN - MENUITEM "Shortcut List", ID_SHORTCUTS - MENUITEM "Navigation Keys", ID_NAV_INFO - MENUITEM SEPARATOR - MENUITEM "&About ...", ID_H_ABOUT - END -END - - -///////////////////////////////////////////////////////////////////////////// -// -// Accelerator -// - - - -///////////////////////////////////////////////////////////////////////////// -// -// Dialog -// - -IDD_ABOUTBOX DIALOGEX 0, 0, 209, 137 -STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CLIENTEDGE -CAPTION "Osmo4 / GPAC version X.X.X" -FONT 8, "MS Sans Serif", 0, 0, 0x1 -BEGIN - ICON IDR_MAINFRAME,IDC_STATIC,8,4,20,20 - CTEXT "Osmo4 Player - GPAC Multimedia Framework",IDC_STATIC,31,10,150,10,SS_NOPREFIX - CTEXT "(c) Jean Le Feuvre 2000-2005 - (c) ENST 2005-200X\nAll Rights Reserved",IDC_STATIC,4,64,201,18 - CTEXT "This program is free software and may be distributed according to the terms of the GNU Lesser General Public License",IDC_STATIC,4,26,200,18 - PUSHBUTTON "http://gpac.sourceforge.net",IDC_GOGPAC,43,47,121,13,BS_FLAT,WS_EX_STATICEDGE - GROUPBOX "With Many Thanks To:",IDC_STATIC,3,82,203,53 - CTEXT "The FreeType Project\nMozilla SpiderMonkey (JavaScript support)\n\nZLIB, the PNG Group, the I.J.G.\nFFMPEG, FAAD, XVID, MAD",IDC_STATIC,9,92,189,41 -END - -IDD_PASSWD DIALOG 0, 0, 134, 71 -STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Enter user name and password" -FONT 8, "MS Sans Serif" -BEGIN - DEFPUSHBUTTON "OK",IDOK,4,56,50,12 - PUSHBUTTON "Cancel",IDCANCEL,80,56,50,12 - LTEXT "Static__________________________",IDC_TXT_SITE,25,4,105,8 - LTEXT "Login",IDC_STATIC,7,21,18,8 - LTEXT "Password",IDC_STATIC,7,37,32,8 - EDITTEXT IDC_EDIT_USER,47,18,55,14,ES_AUTOHSCROLL - EDITTEXT IDC_EDIT_PASSWORD,47,34,55,14,ES_PASSWORD | ES_AUTOHSCROLL - LTEXT "Site",IDC_STATIC,7,4,13,8 -END - - -///////////////////////////////////////////////////////////////////////////// -// -// Version -// - -VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,0,0,1 - PRODUCTVERSION 1,0,0,1 - FILEFLAGSMASK 0x3fL -#ifdef _DEBUG - FILEFLAGS 0x1L -#else - FILEFLAGS 0x0L -#endif - FILEOS 0x4L - FILETYPE 0x1L - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904b0" - BEGIN - VALUE "FileDescription", "Osmo4-GPAC" - VALUE "FileVersion", "0.4.5" - VALUE "InternalName", "Osmo4" - VALUE "LegalCopyright", "Copyright (C) 2005" - VALUE "OriginalFilename", "Osmo4.EXE" - VALUE "ProductName", "Osmo4-GPAC" - VALUE "ProductVersion", "0.4.5" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x409, 1200 - END -END - - -///////////////////////////////////////////////////////////////////////////// -// -// DESIGNINFO -// - -#ifdef APSTUDIO_INVOKED -GUIDELINES DESIGNINFO -BEGIN - IDD_ABOUTBOX, DIALOG - BEGIN - BOTTOMMARGIN, 136 - END -END -#endif // APSTUDIO_INVOKED - - -///////////////////////////////////////////////////////////////////////////// -// -// Toolbar -// - -IDR_MAINTOOLS TOOLBAR 16, 15 -BEGIN - BUTTON ID_FILEOPEN - BUTTON ID_NAV_PREV - BUTTON ID_NAV_NEXT - BUTTON ID_FILE_PLAY - BUTTON ID_FILE_PLAY - BUTTON ID_FILE_STEP - BUTTON ID_FILE_STOP - BUTTON ID_FILE_PROPS - BUTTON IDD_CONFIGURE - BUTTON ID_SWITCH_RENDER - BUTTON ID_SWITCH_RENDER -END - - -///////////////////////////////////////////////////////////////////////////// -// -// Bitmap -// - -IDR_MAINTOOLS BITMAP "res\\maintool.bmp" - -///////////////////////////////////////////////////////////////////////////// -// -// String Table -// - -STRINGTABLE -BEGIN - IDR_MAINFRAME "Osmo4" -END - -STRINGTABLE -BEGIN - AFX_IDS_APP_TITLE "Osmo4" - AFX_IDS_IDLEMESSAGE "Ready" -END - -STRINGTABLE -BEGIN - ID_FILE_EXIT "Quit the application; prompts to save documents\nExit" - ID_H_ABOUT "Display program information, version number and copyright\nAbout" - ID_PLAYLIST_LOOP "Restarts playlist from begining when playlist is over" - ID_FILEOPEN "Opens local file" - ID_VIEW_ORIGINAL "restore Original Aspect of presentation" -END - -STRINGTABLE -BEGIN - ID_VIEW_STATUS_BAR "Show or hide the status bar\nToggle StatusBar" -END - -STRINGTABLE -BEGIN - AFX_IDS_SCSIZE "Change the window size" - AFX_IDS_SCMOVE "Change the window position" - AFX_IDS_SCMINIMIZE "Reduce the window to an icon" - AFX_IDS_SCMAXIMIZE "Enlarge the window to full size" - AFX_IDS_SCNEXTWINDOW "Switch to the next document window" - AFX_IDS_SCPREVWINDOW "Switch to the previous document window" - AFX_IDS_SCCLOSE "Close the active window and prompts to save the documents" -END - -STRINGTABLE -BEGIN - AFX_IDS_SCRESTORE "Restore the window to normal size" - AFX_IDS_SCTASKLIST "Activate Task List" -END - -STRINGTABLE -BEGIN - ID_FILE_STOP "Stops current presentation" - ID_SWITCH_RENDER "Switch between 2D and 3D renderers" - ID_COLLIDE_NONE "Turns collision detection off" - ID_COLLIDE_REG "Turns collision detection on" - ID_COLLIDE_DISP "Collision with camera displacement" - ID_HEADLIGHT "Turns headlight on/off" -END - -STRINGTABLE -BEGIN - ID_CLEAR_NAV "Clears navigation history" - ID_TIMER " " - ID_FPS " " - ID_VIEW_PL "View navigation history as a playlist" -END - -STRINGTABLE -BEGIN - ID_VIEW_FULLSCREEN "Move to Full Screen mode (Esc to exit)" - ID_AR_KEEP "Keep Aspect Ratio of presentation" - ID_SHORTCUTS "List of available shortcuts" - ID_FILE_PROP "Show presentation properties" - ID_FILE_STEP "Step one frame into presentation" - IDD_CONFIGURE "Configure Player" - ID_VIEW_SCALABLE "Uses vectorial zooming when resizing the window" - ID_OPEN_URL "Open remote presentation" - ID_FILE_RELOAD "Reload current presentation" - ID_FILE_PLAY "Play/Pause presentation" - ID_NAVIGATE_NONE "Disable navigation" -END - -STRINGTABLE -BEGIN - ID_NAVIGATE_WALK "Turn walk navigation on" - ID_AR_FILL "Ignores Aspect Ratio and always fill screen" - ID_AR_43 "Forces Aspect Ratio of 4/3" - ID_AR_169 "Forces Aspect Ratio of 16/9" - ID_NAV_RESET "Restore last viewpoint" -END - -STRINGTABLE -BEGIN - ID_NAVIGATE_VR "QT-VR like navigation" - ID_REC_ENABLE "Enable recording of streaming data" - ID_REC_STOP "Stops recording and save to file" - ID_REC_ABORT "Stops recording and discard data" -END - -STRINGTABLE -BEGIN - ID_FILE_COPY "Copy selected text to clipboard" - ID_FILE_PASTE "Paste clipboard" -END - -#endif // Anglais (États-Unis) resources -///////////////////////////////////////////////////////////////////////////// - - -///////////////////////////////////////////////////////////////////////////// -// Français (France) resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_FRA) -#ifdef _WIN32 -LANGUAGE LANG_FRENCH, SUBLANG_FRENCH -#pragma code_page(1252) -#endif //_WIN32 - -///////////////////////////////////////////////////////////////////////////// -// -// Dialog -// - -IDD_OPENFILE DIALOG 0, 0, 301, 23 -STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Select Location" -FONT 8, "MS Sans Serif" -BEGIN - COMBOBOX IDC_COMBOURL,3,5,273,67,CBS_DROPDOWN | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP - DEFPUSHBUTTON "OK",IDC_BUTGO,279,5,19,13 -END - -IDD_OPTIONS DIALOG 0, 0, 174, 106 -STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Osmo4 Options" -FONT 8, "MS Sans Serif" -BEGIN - PUSHBUTTON "Apply",IDC_SAVEOPT,147,2,26,12 - COMBOBOX IDC_SELECT,42,2,99,173,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "Category",IDC_STATIC,7,4,29,8 -END - -IDD_OPT_GEN DIALOG 0, 20, 169, 76 -STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTROL | WS_CHILD -FONT 8, "MS Sans Serif" -BEGIN - CONTROL "Loop At End",IDC_LOOP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,4,4,55,10 - CONTROL "Look for subtitles",IDC_LOOKFORSUB,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,4,42,69,10 - CONTROL "Disable console messages",IDC_NO_CONSOLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,4,17,99,10 - CONTROL "View Graph in XMT-A format",IDC_DUMP_XMT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,4,30,105,10 - CONTROL "Single Instance",IDC_SINGLE_INSTANCE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,4,54,65,10 -END - -IDD_OPT_RENDER DIALOG 0, 20, 169, 76 -STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTROL | WS_CHILD -FONT 8, "MS Sans Serif" -BEGIN - LTEXT "Rendering Frame Rate",IDC_STATIC,5,4,72,8 - COMBOBOX IDC_BIFS_RATE,81,2,84,55,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "Fast Rendering",IDC_FAST_RENDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,49,64,10 - CONTROL "Force Scene Size",IDC_FORCE_SIZE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,96,49,72,10 - LTEXT "Anti-Aliasing Level",IDC_STATIC,7,20,58,8 - COMBOBOX IDC_AA_LIST,81,17,84,46,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "Use 3D Renderer",IDC_USE_RENDER3D,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,63,71,10 - LTEXT "2D Rasterizer",IDC_STATIC,7,35,44,8 - COMBOBOX IDC_GD_LIST,81,33,84,44,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - COMBOBOX IDC_DRAW_BOUNDS,109,60,56,44,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "Bounds",IDC_STATIC,82,64,25,8 -END - -IDD_OPT_AUDIO DIALOG 0, 20, 169, 76 -STYLE DS_SETFONT | DS_CONTROL | WS_CHILD | WS_THICKFRAME -FONT 8, "MS Sans Serif" -BEGIN - CONTROL "Spin1",IDC_SPIN_AUDIO,"msctls_updown32",UDS_SETBUDDYINT | UDS_ARROWKEYS,27,15,11,14 - EDITTEXT IDC_EDIT_AUDIO,5,15,19,14,ES_READONLY | ES_NUMBER - CONTROL "Force Audio Config",IDC_FORCE_AUDIO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,3,73,10 - LTEXT "buffers",IDC_STATIC,43,18,23,8 - CONTROL "Spin1",IDC_SPIN_FPS,"msctls_updown32",UDS_SETBUDDYINT | UDS_ARROWKEYS,104,15,11,14 - EDITTEXT IDC_AUDIO_FPS,77,15,24,14,ES_NUMBER - LTEXT "Audio Driver",IDC_STATIC,7,63,40,8 - CONTROL "No Resynchronization",IDC_AUDIO_RESYNC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,4,46,82,10 - COMBOBOX IDC_DRIVER_LIST,63,60,103,62,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "Disable Notifications",IDC_AUDIO_NOTIFS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,89,47,79,10 - CONTROL "Disable Multichannel",IDC_AUDIO_MULTICH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,4,34,81,10 - LTEXT "ms total length",IDC_STATIC,118,18,49,8 -END - -IDD_OPT_VIDEO DIALOG 0, 20, 169, 76 -STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTROL | WS_CHILD -FONT 8, "MS Sans Serif" -BEGIN - LTEXT "Video Driver",IDC_STATIC,6,7,40,8 - COMBOBOX IDC_VIDEO_LIST,55,5,111,44,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "Change video resolution in fullscreen",IDC_SWITCH_RES, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,29,131,10 - CONTROL "Use Hardware Video Memory in 2D mode",IDC_HWMEMORY, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,44,143,10 -END - -IDD_OPT_HTTP DIALOG 0, 20, 169, 76 -STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTROL | WS_CHILD -FONT 8, "MS Sans Serif" -BEGIN - PUSHBUTTON "...",IDC_BROWSE_CACHE,57,4,109,12 - CONTROL "Clean cache at exit",IDC_CLEAN_CACHE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,3,19,77,10 - CONTROL "Always redownload incomplete cached files",IDC_RESTART_CACHE, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,3,30,153,10 - LTEXT "Cache Directory",IDC_STATIC,5,5,52,8 - CONTROL "XML progressive load",IDC_SAX_PROGRESSIVE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,3,42,84,10 - EDITTEXT IDC_SAX_DELAY,142,41,22,12,ES_CENTER | ES_AUTOHSCROLL | ES_NUMBER - LTEXT "TimeSlice (ms)",IDC_STATIC,91,43,46,8 - EDITTEXT IDC_HTTP_PROXY,54,58,111,12,ES_AUTOHSCROLL - CONTROL "Use proxy",IDC_HTTP_USE_PROXY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,3,59,47,10 -END - -IDD_OPT_FONT DIALOG 0, 20, 169, 76 -STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTROL | WS_CHILD -FONT 8, "MS Sans Serif" -BEGIN - LTEXT "Font Engine",IDC_STATIC,6,11,39,8 - COMBOBOX IDC_FONT_LIST,60,8,105,44,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "...",IDC_BROWSE_FONT,2,40,164,12 - LTEXT "System Font Directory",IDC_STATIC,46,29,70,8 - COMBOBOX IDC_TEXTURE_MODE,101,58,64,44,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "Text Texturing Mode",IDC_STATIC,7,60,69,8 -END - -IDD_OPT_SYSTEMS DIALOG 0, 20, 169, 76 -STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTROL | WS_CHILD -FONT 8, "MS Sans Serif" -BEGIN - COMBOBOX IDC_LANG,75,4,92,58,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "Prefered Language for stream selection",IDC_STATIC,3,3,61,17 - LTEXT "Decoder Threading",IDC_STATIC,4,28,62,8 - COMBOBOX IDC_DEC_THREAD,75,25,92,57,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "Always draw late BIFS frames",IDC_BIFSDROP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,3,43,109,10 - CONTROL "Force Single Timeline",IDC_FORCE_DURATION,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,3,58,83,10 -END - -IDD_OPT_STREAM DIALOG 0, 20, 169, 76 -STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTROL | WS_CHILD -FONT 8, "MS Sans Serif" -BEGIN - LTEXT "Default Port",IDC_STATIC,6,6,40,8 - COMBOBOX IDC_PORT,52,3,113,61,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP - CONTROL "RTP over RTSP",IDC_RTSP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,4,19,68,10 - CONTROL "use RTP reordering",IDC_REORDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,81,19,76,10 - LTEXT "milliseconds before control timeout",IDC_STATIC,38,34,108,8 - EDITTEXT IDC_TIMEOUT,3,32,30,12,ES_CENTER | ES_AUTOHSCROLL | ES_NUMBER - LTEXT "milliseconds of Media Buffering ",IDC_STATIC,38,48,100,8 - EDITTEXT IDC_BUFFER,3,47,30,12,ES_CENTER | ES_AUTOHSCROLL | ES_NUMBER - EDITTEXT IDC_REBUFFER_LEN,83,60,30,12,ES_CENTER | ES_AUTOHSCROLL | ES_NUMBER - CONTROL "Rebuffer if less than",IDC_REBUFFER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,4,63,79,10 - LTEXT "milliseconds",IDC_STATIC,117,63,41,8 -END - -IDD_PROPERTIES DIALOGEX 0, 0, 338, 150 -STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Presentation Properties" -FONT 8, "MS Sans Serif", 0, 0, 0x1 -BEGIN - CONTROL "Tree1",IDC_ODTREE,"SysTreeView32",TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_DISABLEDRAGDROP | TVS_SHOWSELALWAYS | TVS_TRACKSELECT | WS_BORDER | WS_TABSTOP | 0x400,2,2,120,114 - EDITTEXT IDC_ODINFO,123,17,213,130,ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_NOHIDESEL | ES_OEMCONVERT | ES_READONLY | WS_VSCROLL | WS_HSCROLL,WS_EX_DLGMODALFRAME | WS_EX_STATICEDGE - PUSHBUTTON "Get World Info",IDC_WORLD,2,118,119,13 - PUSHBUTTON "View Scene Graph",IDC_VIEWSG,2,134,119,13 - CONTROL "Tab1",IDC_VIEWSEL,"SysTabControl32",TCS_BUTTONS,124,2,208,14 -END - -IDD_OPT_DECODER DIALOG 0, 20, 169, 76 -STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTROL | WS_CHILD -FONT 8, "MS Sans Serif" -BEGIN - LTEXT "Prefered Audio Module",-1,46,5,69,8 - COMBOBOX IDC_AUDEC_LIST,26,17,111,56,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "Prefered Video Module",-1,48,40,69,8 - COMBOBOX IDC_VIDEC_LIST,25,52,113,55,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP -END - -IDD_OPT_RENDER2D DIALOG 0, 20, 169, 76 -STYLE DS_SETFONT | DS_MODALFRAME | WS_CHILD -FONT 8, "MS Sans Serif" -BEGIN - CONTROL "Disable YUV Hardware",IDC_YUV,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,54,89,10 - LTEXT "Static",IDC_FORMAT_YUV,97,57,67,8 - CONTROL "Direct Rendering",IDC_DIRECTRENDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,32,72,10 - CONTROL "Scalable Zoom",IDC_ZOOM_SCALABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,10,77,10 -END - -IDD_OPT_RENDER3D DIALOG 0, 20, 169, 76 -STYLE DS_SETFONT | DS_MODALFRAME | WS_CHILD -FONT 8, "MS Sans Serif" -BEGIN - CONTROL "Use OpenGL Outlines",IDC_RASTER_OUTLINE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,2,84,10 - CONTROL "Emulate power-of-two textures for video",IDC_EMUL_POW2, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,45,140,10 - CONTROL "Polygon Anti-Aliasing",IDC_DISABLE_POLY_AA,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,90,2,78,10 - CONTROL "Disable rectangular texture extensions",IDC_DISABLE_TX_RECT, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,55,135,10 - CONTROL "Bitmap node uses direct pixel copy",IDC_BITMAP_USE_PIXEL, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,65,125,10 - LTEXT "Draw Normals",IDC_STATIC,4,17,45,8 - COMBOBOX IDC_DRAW_NORMALS,4,25,48,44,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "Backface Cull",IDC_STATIC,57,17,55,8 - COMBOBOX IDC_BACK_CULL,57,25,47,44,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "Draw Mode",IDC_STATIC,113,17,55,8 - COMBOBOX IDC_DRAW_MODE,111,25,53,44,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP -END - -IDD_SLIDERS DIALOG 0, 0, 218, 18 -STYLE DS_SETFONT | WS_CHILD -FONT 8, "MS Sans Serif" -BEGIN - CONTROL "Slider1",ID_SLIDER,"msctls_trackbar32",TBS_BOTH | TBS_NOTICKS | WS_TABSTOP,0,3,185,12 - CONTROL "Slider1",ID_AUDIO_VOL,"msctls_trackbar32",TBS_BOTH | TBS_NOTICKS | WS_BORDER | WS_TABSTOP,187,3,30,13 -END - -IDD_NAVBAR DIALOGEX 0, 0, 279, 15 -STYLE DS_SETFONT | WS_CHILD -FONT 8, "MS Sans Serif", 0, 0, 0x1 -BEGIN - COMBOBOX IDC_ADDRESS,29,1,130,196,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP,WS_EX_ACCEPTFILES - LTEXT "Address",IDC_DUMTXT,1,4,26,8 -END - -IDD_PLAYLIST DIALOGEX 0, 0, 186, 54 -STYLE DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME -EXSTYLE WS_EX_TOOLWINDOW -CAPTION "Osmo4 Playlist" -FONT 8, "MS Sans Serif", 0, 0, 0x1 -BEGIN - CONTROL "List4",IDC_FILELIST,"SysListView32",LVS_REPORT | WS_BORDER | WS_TABSTOP,1,0,182,51 -END - -IDD_OPT_MCACHE DIALOG 0, 20, 169, 76 -STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTROL | WS_CHILD -FONT 8, "MS Sans Serif" -BEGIN - PUSHBUTTON "...",IDC_BROWSE_MCACHE,41,2,126,12 - CONTROL "Overwrite existing files",IDC_MCACHE_OVERWRITE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,3,18,85,10 - CONTROL "Use filename",IDC_MCACHE_USENAME,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,3,31,57,10 - LTEXT "Record To",IDC_STATIC,4,4,35,8 - EDITTEXT IDC_BASEPRES,81,31,82,12,ES_CENTER | ES_AUTOHSCROLL | ES_NUMBER -END - -IDD_OPT_FILETYPES DIALOG 0, 20, 169, 76 -STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTROL | WS_CHILD -FONT 8, "MS Sans Serif" -BEGIN - COMBOBOX IDC_FILELIST,59,6,108,61,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "Supported Files",IDC_STATIC,6,8,50,8 - LTEXT "Extension",IDC_FILES_EXT,7,25,154,8 - LTEXT "Mime Type",IDC_FILES_MIMES,7,37,156,8 - CONTROL "Associate with Osmo4",IDC_ASSOCIATE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,60,84,10 - LTEXT "Plugin",IDC_FILES_PLUG,8,49,154,8 -END - -IDD_OPT_LOGS DIALOG 0, 20, 169, 76 -STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTROL | WS_CHILD -FONT 8, "MS Sans Serif" -BEGIN - LTEXT "Level",IDC_STATIC,6,7,18,8 - COMBOBOX IDC_LOG_LEVEL,30,4,64,74,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "core",IDC_TOOL_CORE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,3,23,30,10 - CONTROL "coding",IDC_TOOL_CODING,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,3,33,37,10 - CONTROL "container",IDC_TOOL_CONTAINER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,3,43,45,10 - CONTROL "network",IDC_TOOL_NET,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,3,53,41,10 - CONTROL "rtp",IDC_TOOL_RTP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,3,63,24,10 - CONTROL "author",IDC_TOOL_AUTHOR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,48,24,36,10 - CONTROL "sync",IDC_TOOL_SYNC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,48,34,31,10 - CONTROL "codec",IDC_TOOL_CODEC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,48,44,36,10 - CONTROL "parser",IDC_TOOL_PARSER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,48,54,35,10 - CONTROL "media",IDC_TOOL_MEDIA,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,48,64,35,10 - CONTROL "scene",IDC_TOOL_SCENE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,86,24,35,10 - CONTROL "script",IDC_TOOL_SCRIPT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,86,34,33,10 - CONTROL "compose",IDC_TOOL_COMPOSE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,86,44,45,10 - CONTROL "render",IDC_TOOL_RENDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,86,54,36,10 - CONTROL "mmio",IDC_TOOL_MMIO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,86,64,32,10 -END - - -///////////////////////////////////////////////////////////////////////////// -// -// DESIGNINFO -// - -#ifdef APSTUDIO_INVOKED -GUIDELINES DESIGNINFO -BEGIN - IDD_OPT_VIDEO, DIALOG - BEGIN - RIGHTMARGIN, 168 - END - - IDD_OPT_FONT, DIALOG - BEGIN - LEFTMARGIN, 1 - RIGHTMARGIN, 168 - BOTTOMMARGIN, 74 - END - - IDD_OPT_SYSTEMS, DIALOG - BEGIN - RIGHTMARGIN, 167 - TOPMARGIN, 1 - BOTTOMMARGIN, 75 - END - - IDD_OPT_STREAM, DIALOG - BEGIN - LEFTMARGIN, 1 - RIGHTMARGIN, 167 - TOPMARGIN, 1 - END - - IDD_PROPERTIES, DIALOG - BEGIN - RIGHTMARGIN, 335 - TOPMARGIN, 1 - END - - IDD_OPT_DECODER, DIALOG - BEGIN - RIGHTMARGIN, 168 - END - - IDD_OPT_RENDER3D, DIALOG - BEGIN - RIGHTMARGIN, 168 - END - - IDD_NAVBAR, DIALOG - BEGIN - RIGHTMARGIN, 167 - END - - IDD_OPT_FILETYPES, DIALOG - BEGIN - RIGHTMARGIN, 168 - END - - IDD_OPT_LOGS, DIALOG - BEGIN - RIGHTMARGIN, 168 - END -END -#endif // APSTUDIO_INVOKED - - -///////////////////////////////////////////////////////////////////////////// -// -// Toolbar -// - -IDR_PLAYLIST TOOLBAR 16, 15 -BEGIN - BUTTON ID_PL_OPEN - BUTTON ID_PL_SAVE - BUTTON ID_PL_ADD_FILE - BUTTON ID_PL_REM_FILE - BUTTON ID_PL_UP - BUTTON ID_PL_DOWN - BUTTON ID_PL_SORT_FILE -END - - -///////////////////////////////////////////////////////////////////////////// -// -// Bitmap -// - -IDR_PLAYLIST BITMAP "res\\playlist.bmp" - -#ifdef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// TEXTINCLUDE -// - -1 TEXTINCLUDE -BEGIN - "resource.h\0" -END - -2 TEXTINCLUDE -BEGIN - "#include ""afxres.h""\r\n" - "\0" -END - -3 TEXTINCLUDE -BEGIN - "#define _AFX_NO_SPLITTER_RESOURCES\r\n" - "#define _AFX_NO_OLE_RESOURCES\r\n" - "#define _AFX_NO_TRACKER_RESOURCES\r\n" - "#define _AFX_NO_PROPERTY_RESOURCES\r\n" - "\r\n" - "#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r\n" - "#ifdef _WIN32\r\n" - "LANGUAGE 9, 1\r\n" - "#pragma code_page(1252)\r\n" - "#endif //_WIN32\r\n" - "#include ""res\\Osmo4.rc2"" // non-Microsoft Visual C++ edited resources\r\n" - "#include ""afxres.rc"" // Standard components\r\n" - "#endif\r\n" - "\0" -END - -#endif // APSTUDIO_INVOKED - - -///////////////////////////////////////////////////////////////////////////// -// -// Icon -// - -// Icon with lowest ID value placed first to ensure application icon -// remains consistent on all systems. -IDR_MAINFRAME ICON "..\\..\\doc\\osmo4.ico" -IDI_PLAY ICON "res\\play.ico" -IDI_STOP ICON "res\\stop.ico" -IDI_PAUSE ICON "res\\pause.ico" -IDI_MESSAGE ICON "res\\message.ico" -IDI_ERR ICON "res\\error.ico" - -///////////////////////////////////////////////////////////////////////////// -// -// Dialog Info -// - -IDD_OPT_RENDER DLGINIT -BEGIN - IDC_BIFS_RATE, 0x403, 4, 0 -0x2e35, 0x0030, - IDC_BIFS_RATE, 0x403, 4, 0 -0x2e37, 0x0035, - IDC_BIFS_RATE, 0x403, 5, 0 -0x3031, 0x302e, "\000" - IDC_BIFS_RATE, 0x403, 5, 0 -0x3231, 0x352e, "\000" - IDC_BIFS_RATE, 0x403, 5, 0 -0x3531, 0x302e, "\000" - IDC_BIFS_RATE, 0x403, 5, 0 -0x3432, 0x302e, "\000" - IDC_BIFS_RATE, 0x403, 5, 0 -0x3532, 0x302e, "\000" - IDC_BIFS_RATE, 0x403, 5, 0 -0x3033, 0x302e, "\000" - 0 -END - -IDD_OPT_SYSTEMS DLGINIT -BEGIN - IDC_LANG, 0x403, 8, 0 -0x6e45, 0x6c67, 0x7369, 0x0068, - IDC_LANG, 0x403, 7, 0 -0x7246, 0x6e65, 0x6863, "\000" - IDC_LANG, 0x403, 7, 0 -0x6547, 0x6d72, 0x6e61, "\000" - IDC_LANG, 0x403, 8, 0 -0x7449, 0x6c61, 0x6169, 0x006e, - IDC_LANG, 0x403, 8, 0 -0x7053, 0x6e61, 0x7369, 0x0068, - IDC_LANG, 0x403, 9, 0 -0x6843, 0x6e69, 0x6565, 0x6573, "\000" - IDC_LANG, 0x403, 10, 0 -0x614a, 0x6170, 0x656e, 0x7365, 0x0065, - IDC_DEC_THREAD, 0x403, 14, 0 -0x6953, 0x676e, 0x656c, 0x5420, 0x7268, 0x6165, 0x0064, - IDC_DEC_THREAD, 0x403, 13, 0 -0x754d, 0x6c74, 0x2069, 0x6854, 0x6572, 0x6461, "\000" - IDC_DEC_THREAD, 0x403, 5, 0 -0x7246, 0x6565, "\000" - 0 -END - -IDD_OPT_LOGS DLGINIT -BEGIN - IDC_LOG_LEVEL, 0x403, 9, 0 -0x6944, 0x6173, 0x6c62, 0x6465, "\000" - IDC_LOG_LEVEL, 0x403, 6, 0 -0x7245, 0x6f72, 0x0072, - IDC_LOG_LEVEL, 0x403, 8, 0 -0x6157, 0x6e72, 0x6e69, 0x0067, - IDC_LOG_LEVEL, 0x403, 5, 0 -0x6e49, 0x6f66, "\000" - IDC_LOG_LEVEL, 0x403, 6, 0 -0x6544, 0x7562, 0x0067, - 0 -END - -#endif // Français (France) resources -///////////////////////////////////////////////////////////////////////////// - - - -#ifndef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 3 resource. -// -#define _AFX_NO_SPLITTER_RESOURCES -#define _AFX_NO_OLE_RESOURCES -#define _AFX_NO_TRACKER_RESOURCES -#define _AFX_NO_PROPERTY_RESOURCES - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) -#ifdef _WIN32 -LANGUAGE 9, 1 -#pragma code_page(1252) -#endif //_WIN32 -#include "res\Osmo4.rc2" // non-Microsoft Visual C++ edited resources -#include "afxres.rc" // Standard components -#endif - -///////////////////////////////////////////////////////////////////////////// -#endif // not APSTUDIO_INVOKED - +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "afxres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// Anglais (États-Unis) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// Menu +// + +IDR_MAINFRAME MENU +BEGIN + POPUP "&File" + BEGIN + MENUITEM "&Open File\tCtrl+O", ID_FILEOPEN + MENUITEM "Open &URL\tCtrl+U", ID_OPEN_URL + MENUITEM SEPARATOR + MENUITEM "File Propert&ies\tCtrl+I", ID_FILE_PROP + POPUP "Streaming Cache" + BEGIN + MENUITEM "&Enable", ID_REC_ENABLE + MENUITEM "&Stop and Save", ID_REC_STOP + MENUITEM "&Abort", ID_REC_ABORT + END + MENUITEM SEPARATOR + MENUITEM "Copy", ID_FILE_COPY + MENUITEM "Paste", ID_FILE_PASTE + MENUITEM SEPARATOR + MENUITEM "Exit", ID_FILE_EXIT + END + POPUP "View" + BEGIN + POPUP "Viewpoint" + BEGIN + MENUITEM "", ID_VIEWPORT_EMPTY + END + POPUP "&Navigation" + BEGIN + MENUITEM "Headlight", ID_HEADLIGHT + MENUITEM SEPARATOR + MENUITEM "&None", ID_NAVIGATE_NONE + MENUITEM "&Walk", ID_NAVIGATE_WALK + MENUITEM "&Fly", ID_NAVIGATE_FLY + MENUITEM "&Examine", ID_NAVIGATE_EXAM + MENUITEM "&Pan", ID_NAVIGATE_PAN + MENUITEM "&Slide", ID_NAVIGATE_SLIDE + MENUITEM "&Orbit", ID_NAVIGATE_ORBIT + MENUITEM "&VR", ID_NAVIGATE_VR + MENUITEM "&Game", ID_NAVIGATE_GAME + MENUITEM SEPARATOR + POPUP "Collision" + BEGIN + MENUITEM "Off", ID_COLLIDE_NONE + MENUITEM "Regular", ID_COLLIDE_REG + MENUITEM "Displacement", ID_COLLIDE_DISP + END + MENUITEM "Gravity", ID_GRAVITY + MENUITEM SEPARATOR + MENUITEM "&Reset", ID_NAV_RESET + END + MENUITEM SEPARATOR + MENUITEM "&Fullscreen", ID_VIEW_FULLSCREEN + MENUITEM "Original &Aspect", ID_VIEW_ORIGINAL + POPUP "Aspect &Ratio" + BEGIN + MENUITEM "&Keep Original", ID_AR_KEEP + MENUITEM "&Fill Screen", ID_AR_FILL + MENUITEM "Ratio 4/3", ID_AR_43 + MENUITEM "Ratio 16/9", ID_AR_169 + END + MENUITEM SEPARATOR + MENUITEM "Resource Usage", ID_VIEW_CPU + MENUITEM SEPARATOR + MENUITEM "&Options", IDD_CONFIGURE + END + POPUP "Play" + BEGIN + POPUP "Stream &Selection" + BEGIN + POPUP "Audio" + BEGIN + MENUITEM "", ID_AUDIO_EMPTY + END + POPUP "Video" + BEGIN + MENUITEM "", ID_VIDEO_EMPTY + END + POPUP "Subtitle" + BEGIN + MENUITEM "", ID_SUBS_EMPTY + END + MENUITEM SEPARATOR + MENUITEM "Add Subtitle", ID_ADD_SUBTITLE + END + POPUP "&Chapters" + BEGIN + MENUITEM "", ID_SETCHAP_FIRST + END + MENUITEM SEPARATOR + MENUITEM "Playlist\tCtrl+L", ID_VIEW_PL, CHECKED + MENUITEM "&Loop Playlist", ID_PLAYLIST_LOOP + MENUITEM SEPARATOR + MENUITEM "Play/Pause\tCtrl+P", ID_FILE_PLAY + MENUITEM "Step-by-Step\tCtrl+S", ID_FILE_STEP + MENUITEM "Stop", ID_FILE_STOP + MENUITEM SEPARATOR + MENUITEM "Reload File\tCtrl+R", ID_FILE_RELOAD + MENUITEM SEPARATOR + MENUITEM "Clear History", ID_CLEAR_NAV + MENUITEM "Reload Config", ID_CONFIG_RELOAD + END + POPUP "?" + BEGIN + MENUITEM "Shortcut List", ID_SHORTCUTS + MENUITEM "Navigation Keys", ID_NAV_INFO + MENUITEM SEPARATOR + MENUITEM "&About ...", ID_H_ABOUT + END +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_ABOUTBOX DIALOGEX 0, 0, 209, 137 +STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CLIENTEDGE +CAPTION "Osmo4 / GPAC version X.X.X" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + ICON IDR_MAINFRAME,IDC_STATIC,8,4,20,20 + CTEXT "Osmo4 Player - GPAC Multimedia Framework",IDC_STATIC,31,10,150,10,SS_NOPREFIX + CTEXT "(c) Jean Le Feuvre 2000-2005 - (c) ENST 2005-200X\nAll Rights Reserved",IDC_STATIC,4,64,201,18 + CTEXT "This program is free software and may be distributed according to the terms of the GNU Lesser General Public License",IDC_STATIC,4,26,200,18 + PUSHBUTTON "http://gpac.sourceforge.net",IDC_GOGPAC,43,47,121,13,BS_FLAT,WS_EX_STATICEDGE + GROUPBOX "With Many Thanks To:",IDC_STATIC,3,82,203,53 + CTEXT "The FreeType Project\nMozilla SpiderMonkey (JavaScript support)\n\nZLIB, the PNG Group, the I.J.G.\nFFMPEG, FAAD, XVID, MAD",IDC_STATIC,9,92,189,41 +END + +IDD_PASSWD DIALOG 0, 0, 134, 71 +STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Enter user name and password" +FONT 8, "MS Sans Serif" +BEGIN + DEFPUSHBUTTON "OK",IDOK,4,56,50,12 + PUSHBUTTON "Cancel",IDCANCEL,80,56,50,12 + LTEXT "Static__________________________",IDC_TXT_SITE,25,4,105,8 + LTEXT "Login",IDC_STATIC,7,21,18,8 + LTEXT "Password",IDC_STATIC,7,37,32,8 + EDITTEXT IDC_EDIT_USER,47,18,55,14,ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_PASSWORD,47,34,55,14,ES_PASSWORD | ES_AUTOHSCROLL + LTEXT "Site",IDC_STATIC,7,4,13,8 +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 1,0,0,1 + PRODUCTVERSION 1,0,0,1 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x4L + FILETYPE 0x1L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "FileDescription", "Osmo4-GPAC" + VALUE "FileVersion", "0.4.5" + VALUE "InternalName", "Osmo4" + VALUE "LegalCopyright", "Copyright (C) 2005" + VALUE "OriginalFilename", "Osmo4.EXE" + VALUE "ProductName", "Osmo4-GPAC" + VALUE "ProductVersion", "0.4.5" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO +BEGIN + IDD_ABOUTBOX, DIALOG + BEGIN + BOTTOMMARGIN, 136 + END +END +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Toolbar +// + +IDR_MAINTOOLS TOOLBAR 16, 15 +BEGIN + BUTTON ID_FILEOPEN + BUTTON ID_NAV_PREV + BUTTON ID_NAV_NEXT + BUTTON ID_FILE_PLAY + BUTTON ID_FILE_PLAY + BUTTON ID_FILE_STEP + BUTTON ID_FILE_STOP + BUTTON ID_FILE_PROPS + BUTTON IDD_CONFIGURE + BUTTON ID_SWITCH_RENDER + BUTTON ID_SWITCH_RENDER +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Bitmap +// + +IDR_MAINTOOLS BITMAP "res\\maintool.bmp" + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE +BEGIN + IDR_MAINFRAME "Osmo4" +END + +STRINGTABLE +BEGIN + AFX_IDS_APP_TITLE "Osmo4" + AFX_IDS_IDLEMESSAGE "Ready" +END + +STRINGTABLE +BEGIN + ID_FILE_EXIT "Quit the application; prompts to save documents\nExit" + ID_H_ABOUT "Display program information, version number and copyright\nAbout" + ID_PLAYLIST_LOOP "Restarts playlist from begining when playlist is over" + ID_FILEOPEN "Opens local file" + ID_VIEW_ORIGINAL "restore Original Aspect of presentation" +END + +STRINGTABLE +BEGIN + ID_VIEW_STATUS_BAR "Show or hide the status bar\nToggle StatusBar" +END + +STRINGTABLE +BEGIN + AFX_IDS_SCSIZE "Change the window size" + AFX_IDS_SCMOVE "Change the window position" + AFX_IDS_SCMINIMIZE "Reduce the window to an icon" + AFX_IDS_SCMAXIMIZE "Enlarge the window to full size" + AFX_IDS_SCNEXTWINDOW "Switch to the next document window" + AFX_IDS_SCPREVWINDOW "Switch to the previous document window" + AFX_IDS_SCCLOSE "Close the active window and prompts to save the documents" +END + +STRINGTABLE +BEGIN + AFX_IDS_SCRESTORE "Restore the window to normal size" + AFX_IDS_SCTASKLIST "Activate Task List" +END + +STRINGTABLE +BEGIN + ID_FILE_STOP "Stops current presentation" + ID_SWITCH_RENDER "Switch between 2D and 3D renderers" + ID_COLLIDE_NONE "Turns collision detection off" + ID_COLLIDE_REG "Turns collision detection on" + ID_COLLIDE_DISP "Collision with camera displacement" + ID_HEADLIGHT "Turns headlight on/off" +END + +STRINGTABLE +BEGIN + ID_CLEAR_NAV "Clears navigation history" + ID_TIMER " " + ID_FPS " " + ID_VIEW_PL "View navigation history as a playlist" +END + +STRINGTABLE +BEGIN + ID_VIEW_FULLSCREEN "Move to Full Screen mode (Esc to exit)" + ID_AR_KEEP "Keep Aspect Ratio of presentation" + ID_SHORTCUTS "List of available shortcuts" + ID_FILE_PROP "Show presentation properties" + ID_FILE_STEP "Step one frame into presentation" + IDD_CONFIGURE "Configure Player" + ID_VIEW_SCALABLE "Uses vectorial zooming when resizing the window" + ID_OPEN_URL "Open remote presentation" + ID_FILE_RELOAD "Reload current presentation" + ID_FILE_PLAY "Play/Pause presentation" + ID_NAVIGATE_NONE "Disable navigation" +END + +STRINGTABLE +BEGIN + ID_NAVIGATE_WALK "Turn walk navigation on" + ID_AR_FILL "Ignores Aspect Ratio and always fill screen" + ID_AR_43 "Forces Aspect Ratio of 4/3" + ID_AR_169 "Forces Aspect Ratio of 16/9" + ID_NAV_RESET "Restore last viewpoint" +END + +STRINGTABLE +BEGIN + ID_NAVIGATE_VR "QT-VR like navigation" + ID_REC_ENABLE "Enable recording of streaming data" + ID_REC_STOP "Stops recording and save to file" + ID_REC_ABORT "Stops recording and discard data" +END + +STRINGTABLE +BEGIN + ID_FILE_COPY "Copy selected text to clipboard" + ID_FILE_PASTE "Paste clipboard" +END + +#endif // Anglais (États-Unis) resources +///////////////////////////////////////////////////////////////////////////// + + +///////////////////////////////////////////////////////////////////////////// +// Français (France) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_FRA) +#ifdef _WIN32 +LANGUAGE LANG_FRENCH, SUBLANG_FRENCH +#pragma code_page(1252) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_OPENFILE DIALOG 0, 0, 301, 23 +STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Select Location" +FONT 8, "MS Sans Serif" +BEGIN + COMBOBOX IDC_COMBOURL,3,5,273,67,CBS_DROPDOWN | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP + DEFPUSHBUTTON "OK",IDC_BUTGO,279,5,19,13 +END + +IDD_OPTIONS DIALOG 0, 0, 174, 106 +STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Osmo4 Options" +FONT 8, "MS Sans Serif" +BEGIN + PUSHBUTTON "Apply",IDC_SAVEOPT,147,2,26,12 + COMBOBOX IDC_SELECT,42,2,99,173,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Category",IDC_STATIC,7,4,29,8 +END + +IDD_OPT_GEN DIALOG 0, 20, 169, 76 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTROL | WS_CHILD +FONT 8, "MS Sans Serif" +BEGIN + CONTROL "Loop At End",IDC_LOOP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,4,4,55,10 + CONTROL "Look for subtitles",IDC_LOOKFORSUB,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,4,42,69,10 + CONTROL "Disable console messages",IDC_NO_CONSOLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,4,17,99,10 + CONTROL "View Graph in XMT-A format",IDC_DUMP_XMT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,4,30,105,10 + CONTROL "Single Instance",IDC_SINGLE_INSTANCE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,4,54,65,10 +END + +IDD_OPT_RENDER DIALOG 0, 20, 169, 76 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTROL | WS_CHILD +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "Rendering Frame Rate",IDC_STATIC,5,4,72,8 + COMBOBOX IDC_BIFS_RATE,81,2,84,55,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "Fast Rendering",IDC_FAST_RENDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,49,64,10 + CONTROL "Force Scene Size",IDC_FORCE_SIZE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,96,49,72,10 + LTEXT "Anti-Aliasing Level",IDC_STATIC,7,20,58,8 + COMBOBOX IDC_AA_LIST,81,17,84,46,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "Use 3D Renderer",IDC_USE_RENDER3D,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,63,71,10 + LTEXT "2D Rasterizer",IDC_STATIC,7,35,44,8 + COMBOBOX IDC_GD_LIST,81,33,84,44,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_DRAW_BOUNDS,109,60,56,44,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Bounds",IDC_STATIC,82,64,25,8 +END + +IDD_OPT_AUDIO DIALOG 0, 20, 169, 76 +STYLE DS_SETFONT | DS_CONTROL | WS_CHILD | WS_THICKFRAME +FONT 8, "MS Sans Serif" +BEGIN + CONTROL "Spin1",IDC_SPIN_AUDIO,"msctls_updown32",UDS_SETBUDDYINT | UDS_ARROWKEYS,27,15,11,14 + EDITTEXT IDC_EDIT_AUDIO,5,15,19,14,ES_READONLY | ES_NUMBER + CONTROL "Force Audio Config",IDC_FORCE_AUDIO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,3,73,10 + LTEXT "buffers",IDC_STATIC,43,18,23,8 + CONTROL "Spin1",IDC_SPIN_FPS,"msctls_updown32",UDS_SETBUDDYINT | UDS_ARROWKEYS,104,15,11,14 + EDITTEXT IDC_AUDIO_FPS,77,15,24,14,ES_NUMBER + LTEXT "Audio Driver",IDC_STATIC,7,63,40,8 + CONTROL "No Resynchronization",IDC_AUDIO_RESYNC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,4,46,82,10 + COMBOBOX IDC_DRIVER_LIST,63,60,103,62,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "Disable Notifications",IDC_AUDIO_NOTIFS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,89,47,79,10 + CONTROL "Disable Multichannel",IDC_AUDIO_MULTICH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,4,34,81,10 + LTEXT "ms total length",IDC_STATIC,118,18,49,8 +END + +IDD_OPT_VIDEO DIALOG 0, 20, 169, 76 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTROL | WS_CHILD +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "Video Driver",IDC_STATIC,6,7,40,8 + COMBOBOX IDC_VIDEO_LIST,55,5,111,44,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "Change video resolution in fullscreen",IDC_SWITCH_RES, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,29,131,10 + CONTROL "Use Hardware Video Memory in 2D mode",IDC_HWMEMORY, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,44,143,10 +END + +IDD_OPT_HTTP DIALOGEX 0, 20, 169, 76 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTROL | WS_CHILD +FONT 8, "MS Sans Serif", 0, 0, 0x0 +BEGIN + PUSHBUTTON "...",IDC_BROWSE_CACHE,57,4,109,12 + CONTROL "Clean cache at exit",IDC_CLEAN_CACHE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,87,23,77,10 + CONTROL "Disable Cache",IDC_RESTART_CACHE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,3,22,62,10 + LTEXT "Cache Directory",IDC_STATIC,5,5,52,8 + CONTROL "XML progressive load",IDC_SAX_PROGRESSIVE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,3,42,84,10 + EDITTEXT IDC_SAX_DELAY,142,41,22,12,ES_CENTER | ES_AUTOHSCROLL | ES_NUMBER + LTEXT "TimeSlice (ms)",IDC_STATIC,91,43,46,8 + EDITTEXT IDC_HTTP_PROXY,54,58,111,12,ES_AUTOHSCROLL + CONTROL "Use proxy",IDC_HTTP_USE_PROXY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,3,59,47,10 +END + +IDD_OPT_FONT DIALOG 0, 20, 169, 76 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTROL | WS_CHILD +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "Font Engine",IDC_STATIC,6,11,39,8 + COMBOBOX IDC_FONT_LIST,60,8,105,44,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "...",IDC_BROWSE_FONT,2,40,164,12 + LTEXT "System Font Directory",IDC_STATIC,46,29,70,8 + COMBOBOX IDC_TEXTURE_MODE,101,58,64,44,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Text Texturing Mode",IDC_STATIC,7,60,69,8 +END + +IDD_OPT_SYSTEMS DIALOG 0, 20, 169, 76 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTROL | WS_CHILD +FONT 8, "MS Sans Serif" +BEGIN + COMBOBOX IDC_LANG,75,4,92,58,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Prefered Language for stream selection",IDC_STATIC,3,3,61,17 + LTEXT "Decoder Threading",IDC_STATIC,4,28,62,8 + COMBOBOX IDC_DEC_THREAD,75,25,92,57,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "Always draw late BIFS frames",IDC_BIFSDROP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,3,43,109,10 + CONTROL "Force Single Timeline",IDC_FORCE_DURATION,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,3,58,83,10 +END + +IDD_OPT_STREAM DIALOG 0, 20, 169, 76 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTROL | WS_CHILD +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "Default Port",IDC_STATIC,6,6,40,8 + COMBOBOX IDC_PORT,52,3,113,61,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP + CONTROL "RTP over RTSP",IDC_RTSP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,4,19,68,10 + CONTROL "use RTP reordering",IDC_REORDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,81,19,76,10 + LTEXT "milliseconds before control timeout",IDC_STATIC,38,34,108,8 + EDITTEXT IDC_TIMEOUT,3,32,30,12,ES_CENTER | ES_AUTOHSCROLL | ES_NUMBER + LTEXT "milliseconds of Media Buffering ",IDC_STATIC,38,48,100,8 + EDITTEXT IDC_BUFFER,3,47,30,12,ES_CENTER | ES_AUTOHSCROLL | ES_NUMBER + EDITTEXT IDC_REBUFFER_LEN,83,60,30,12,ES_CENTER | ES_AUTOHSCROLL | ES_NUMBER + CONTROL "Rebuffer if less than",IDC_REBUFFER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,4,63,79,10 + LTEXT "milliseconds",IDC_STATIC,117,63,41,8 +END + +IDD_PROPERTIES DIALOGEX 0, 0, 338, 150 +STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Presentation Properties" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + CONTROL "Tree1",IDC_ODTREE,"SysTreeView32",TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_DISABLEDRAGDROP | TVS_SHOWSELALWAYS | TVS_TRACKSELECT | WS_BORDER | WS_TABSTOP | 0x400,2,2,120,114 + EDITTEXT IDC_ODINFO,123,17,213,130,ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_NOHIDESEL | ES_OEMCONVERT | ES_READONLY | WS_VSCROLL | WS_HSCROLL,WS_EX_DLGMODALFRAME | WS_EX_STATICEDGE + PUSHBUTTON "Get World Info",IDC_WORLD,2,118,119,13 + PUSHBUTTON "View Scene Graph",IDC_VIEWSG,2,134,119,13 + CONTROL "Tab1",IDC_VIEWSEL,"SysTabControl32",TCS_BUTTONS,124,2,208,14 +END + +IDD_OPT_DECODER DIALOG 0, 20, 169, 76 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTROL | WS_CHILD +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "Prefered Audio Module",-1,46,5,69,8 + COMBOBOX IDC_AUDEC_LIST,26,17,111,56,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Prefered Video Module",-1,48,40,69,8 + COMBOBOX IDC_VIDEC_LIST,25,52,113,55,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP +END + +IDD_OPT_RENDER2D DIALOG 0, 20, 169, 76 +STYLE DS_SETFONT | DS_MODALFRAME | WS_CHILD +FONT 8, "MS Sans Serif" +BEGIN + CONTROL "Disable YUV Hardware",IDC_YUV,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,54,89,10 + LTEXT "Static",IDC_FORMAT_YUV,97,57,67,8 + CONTROL "Direct Rendering",IDC_DIRECTRENDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,32,72,10 + CONTROL "Scalable Zoom",IDC_ZOOM_SCALABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,10,77,10 +END + +IDD_OPT_RENDER3D DIALOG 0, 20, 169, 76 +STYLE DS_SETFONT | DS_MODALFRAME | WS_CHILD +FONT 8, "MS Sans Serif" +BEGIN + CONTROL "Use OpenGL Outlines",IDC_RASTER_OUTLINE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,2,84,10 + CONTROL "Emulate power-of-two textures for video",IDC_EMUL_POW2, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,45,140,10 + CONTROL "Polygon Anti-Aliasing",IDC_DISABLE_POLY_AA,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,90,2,78,10 + CONTROL "Disable rectangular texture extensions",IDC_DISABLE_TX_RECT, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,55,135,10 + CONTROL "Bitmap node uses direct pixel copy",IDC_BITMAP_USE_PIXEL, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,65,125,10 + LTEXT "Draw Normals",IDC_STATIC,4,17,45,8 + COMBOBOX IDC_DRAW_NORMALS,4,25,48,44,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Backface Cull",IDC_STATIC,57,17,55,8 + COMBOBOX IDC_BACK_CULL,57,25,47,44,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Draw Mode",IDC_STATIC,113,17,55,8 + COMBOBOX IDC_DRAW_MODE,111,25,53,44,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP +END + +IDD_SLIDERS DIALOG 0, 0, 218, 18 +STYLE DS_SETFONT | WS_CHILD +FONT 8, "MS Sans Serif" +BEGIN + CONTROL "Slider1",ID_SLIDER,"msctls_trackbar32",TBS_BOTH | TBS_NOTICKS | WS_TABSTOP,0,3,185,12 + CONTROL "Slider1",ID_AUDIO_VOL,"msctls_trackbar32",TBS_BOTH | TBS_NOTICKS | WS_BORDER | WS_TABSTOP,187,3,30,13 +END + +IDD_NAVBAR DIALOGEX 0, 0, 279, 15 +STYLE DS_SETFONT | WS_CHILD +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + COMBOBOX IDC_ADDRESS,29,1,130,196,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP,WS_EX_ACCEPTFILES + LTEXT "Address",IDC_DUMTXT,1,4,26,8 +END + +IDD_PLAYLIST DIALOGEX 0, 0, 186, 54 +STYLE DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME +EXSTYLE WS_EX_TOOLWINDOW +CAPTION "Osmo4 Playlist" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + CONTROL "List4",IDC_FILELIST,"SysListView32",LVS_REPORT | WS_BORDER | WS_TABSTOP,1,0,182,51 +END + +IDD_OPT_MCACHE DIALOG 0, 20, 169, 76 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTROL | WS_CHILD +FONT 8, "MS Sans Serif" +BEGIN + PUSHBUTTON "...",IDC_BROWSE_MCACHE,41,2,126,12 + CONTROL "Overwrite existing files",IDC_MCACHE_OVERWRITE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,3,18,85,10 + CONTROL "Use filename",IDC_MCACHE_USENAME,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,3,31,57,10 + LTEXT "Record To",IDC_STATIC,4,4,35,8 + EDITTEXT IDC_BASEPRES,81,31,82,12,ES_CENTER | ES_AUTOHSCROLL | ES_NUMBER +END + +IDD_OPT_FILETYPES DIALOG 0, 20, 169, 76 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTROL | WS_CHILD +FONT 8, "MS Sans Serif" +BEGIN + COMBOBOX IDC_FILELIST,59,6,108,61,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Supported Files",IDC_STATIC,6,8,50,8 + LTEXT "Extension",IDC_FILES_EXT,7,25,154,8 + LTEXT "Mime Type",IDC_FILES_MIMES,7,37,156,8 + CONTROL "Associate with Osmo4",IDC_ASSOCIATE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,60,84,10 + LTEXT "Plugin",IDC_FILES_PLUG,8,49,154,8 +END + +IDD_OPT_LOGS DIALOG 0, 20, 169, 76 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTROL | WS_CHILD +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "Level",IDC_STATIC,6,7,18,8 + COMBOBOX IDC_LOG_LEVEL,30,4,64,74,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "core",IDC_TOOL_CORE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,3,23,30,10 + CONTROL "coding",IDC_TOOL_CODING,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,3,33,37,10 + CONTROL "container",IDC_TOOL_CONTAINER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,3,43,45,10 + CONTROL "network",IDC_TOOL_NET,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,3,53,41,10 + CONTROL "rtp",IDC_TOOL_RTP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,3,63,24,10 + CONTROL "author",IDC_TOOL_AUTHOR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,48,24,36,10 + CONTROL "sync",IDC_TOOL_SYNC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,48,34,31,10 + CONTROL "codec",IDC_TOOL_CODEC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,48,44,36,10 + CONTROL "parser",IDC_TOOL_PARSER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,48,54,35,10 + CONTROL "media",IDC_TOOL_MEDIA,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,48,64,35,10 + CONTROL "scene",IDC_TOOL_SCENE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,86,24,35,10 + CONTROL "script",IDC_TOOL_SCRIPT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,86,34,33,10 + CONTROL "compose",IDC_TOOL_COMPOSE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,86,44,45,10 + CONTROL "render",IDC_TOOL_RENDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,86,54,36,10 + CONTROL "mmio",IDC_TOOL_MMIO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,86,64,32,10 +END + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO +BEGIN + IDD_OPT_VIDEO, DIALOG + BEGIN + RIGHTMARGIN, 168 + END + + IDD_OPT_FONT, DIALOG + BEGIN + LEFTMARGIN, 1 + RIGHTMARGIN, 168 + BOTTOMMARGIN, 74 + END + + IDD_OPT_SYSTEMS, DIALOG + BEGIN + RIGHTMARGIN, 167 + TOPMARGIN, 1 + BOTTOMMARGIN, 75 + END + + IDD_OPT_STREAM, DIALOG + BEGIN + LEFTMARGIN, 1 + RIGHTMARGIN, 167 + TOPMARGIN, 1 + END + + IDD_PROPERTIES, DIALOG + BEGIN + RIGHTMARGIN, 335 + TOPMARGIN, 1 + END + + IDD_OPT_DECODER, DIALOG + BEGIN + RIGHTMARGIN, 168 + END + + IDD_OPT_RENDER3D, DIALOG + BEGIN + RIGHTMARGIN, 168 + END + + IDD_NAVBAR, DIALOG + BEGIN + RIGHTMARGIN, 167 + END + + IDD_OPT_FILETYPES, DIALOG + BEGIN + RIGHTMARGIN, 168 + END + + IDD_OPT_LOGS, DIALOG + BEGIN + RIGHTMARGIN, 168 + END +END +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Toolbar +// + +IDR_PLAYLIST TOOLBAR 16, 15 +BEGIN + BUTTON ID_PL_OPEN + BUTTON ID_PL_SAVE + BUTTON ID_PL_ADD_FILE + BUTTON ID_PL_REM_FILE + BUTTON ID_PL_UP + BUTTON ID_PL_DOWN + BUTTON ID_PL_SORT_FILE +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Bitmap +// + +IDR_PLAYLIST BITMAP "res\\playlist.bmp" + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""afxres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "#define _AFX_NO_SPLITTER_RESOURCES\r\n" + "#define _AFX_NO_OLE_RESOURCES\r\n" + "#define _AFX_NO_TRACKER_RESOURCES\r\n" + "#define _AFX_NO_PROPERTY_RESOURCES\r\n" + "\r\n" + "#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r\n" + "#ifdef _WIN32\r\n" + "LANGUAGE 9, 1\r\n" + "#pragma code_page(1252)\r\n" + "#endif //_WIN32\r\n" + "#include ""res\\Osmo4.rc2"" // non-Microsoft Visual C++ edited resources\r\n" + "#include ""afxres.rc"" // Standard components\r\n" + "#endif\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDR_MAINFRAME ICON "..\\..\\doc\\osmo4.ico" +IDI_PLAY ICON "res\\play.ico" +IDI_STOP ICON "res\\stop.ico" +IDI_PAUSE ICON "res\\pause.ico" +IDI_MESSAGE ICON "res\\message.ico" +IDI_ERR ICON "res\\error.ico" + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog Info +// + +IDD_OPT_RENDER DLGINIT +BEGIN + IDC_BIFS_RATE, 0x403, 4, 0 +0x2e35, 0x0030, + IDC_BIFS_RATE, 0x403, 4, 0 +0x2e37, 0x0035, + IDC_BIFS_RATE, 0x403, 5, 0 +0x3031, 0x302e, "\000" + IDC_BIFS_RATE, 0x403, 5, 0 +0x3231, 0x352e, "\000" + IDC_BIFS_RATE, 0x403, 5, 0 +0x3531, 0x302e, "\000" + IDC_BIFS_RATE, 0x403, 5, 0 +0x3432, 0x302e, "\000" + IDC_BIFS_RATE, 0x403, 5, 0 +0x3532, 0x302e, "\000" + IDC_BIFS_RATE, 0x403, 5, 0 +0x3033, 0x302e, "\000" + 0 +END + +IDD_OPT_SYSTEMS DLGINIT +BEGIN + IDC_LANG, 0x403, 8, 0 +0x6e45, 0x6c67, 0x7369, 0x0068, + IDC_LANG, 0x403, 7, 0 +0x7246, 0x6e65, 0x6863, "\000" + IDC_LANG, 0x403, 7, 0 +0x6547, 0x6d72, 0x6e61, "\000" + IDC_LANG, 0x403, 8, 0 +0x7449, 0x6c61, 0x6169, 0x006e, + IDC_LANG, 0x403, 8, 0 +0x7053, 0x6e61, 0x7369, 0x0068, + IDC_LANG, 0x403, 9, 0 +0x6843, 0x6e69, 0x6565, 0x6573, "\000" + IDC_LANG, 0x403, 10, 0 +0x614a, 0x6170, 0x656e, 0x7365, 0x0065, + IDC_DEC_THREAD, 0x403, 14, 0 +0x6953, 0x676e, 0x656c, 0x5420, 0x7268, 0x6165, 0x0064, + IDC_DEC_THREAD, 0x403, 13, 0 +0x754d, 0x6c74, 0x2069, 0x6854, 0x6572, 0x6461, "\000" + IDC_DEC_THREAD, 0x403, 5, 0 +0x7246, 0x6565, "\000" + 0 +END + +IDD_OPT_LOGS DLGINIT +BEGIN + IDC_LOG_LEVEL, 0x403, 9, 0 +0x6944, 0x6173, 0x6c62, 0x6465, "\000" + IDC_LOG_LEVEL, 0x403, 6, 0 +0x7245, 0x6f72, 0x0072, + IDC_LOG_LEVEL, 0x403, 8, 0 +0x6157, 0x6e72, 0x6e69, 0x0067, + IDC_LOG_LEVEL, 0x403, 5, 0 +0x6e49, 0x6f66, "\000" + IDC_LOG_LEVEL, 0x403, 6, 0 +0x6544, 0x7562, 0x0067, + 0 +END + +#endif // Français (France) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// +#define _AFX_NO_SPLITTER_RESOURCES +#define _AFX_NO_OLE_RESOURCES +#define _AFX_NO_TRACKER_RESOURCES +#define _AFX_NO_PROPERTY_RESOURCES + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE 9, 1 +#pragma code_page(1252) +#endif //_WIN32 +#include "res\Osmo4.rc2" // non-Microsoft Visual C++ edited resources +#include "afxres.rc" // Standard components +#endif + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/applications/osmo4_wce/Osmo4.cpp b/applications/osmo4_wce/Osmo4.cpp index 40ee9d5..664e158 100644 --- a/applications/osmo4_wce/Osmo4.cpp +++ b/applications/osmo4_wce/Osmo4.cpp @@ -194,6 +194,7 @@ void COsmo4::EnableLogs(Bool turn_on) BOOL COsmo4::InitInstance() { + Bool first_load = 0; if (!AfxSocketInit()) { AfxMessageBox(IDP_SOCKETS_INIT_FAILED); @@ -230,102 +231,36 @@ BOOL COsmo4::InitInstance() memset(&m_user, 0, sizeof(GF_User)); /*init config and plugins*/ - m_user.config = gf_cfg_new((const char *) config_path, "GPAC.cfg"); + m_user.config = gf_cfg_init(NULL, &first_load); if (!m_user.config) { - /*create blank config file in the exe dir*/ - unsigned char config_file[MAX_PATH]; - strcpy((char *) config_file, (const char *) config_path); - strcat((char *) config_file, "GPAC.cfg"); - FILE *ft = fopen((const char *) config_file, "wt"); - fclose(ft); - m_user.config = gf_cfg_new((const char *) config_path, "GPAC.cfg"); - if (!m_user.config) { - MessageBox(NULL, _T("GPAC Configuration file not found"), _T("Fatal Error"), MB_OK); - m_pMainWnd->PostMessage(WM_CLOSE); - } + MessageBox(NULL, _T("GPAC Configuration file not found"), _T("Fatal Error"), MB_OK); + m_pMainWnd->PostMessage(WM_CLOSE); } const char *str = gf_cfg_get_key(m_user.config, "General", "LogLevel"); EnableLogs((str && !strcmp(str, "debug")) ? 1 : 0); - - str = gf_cfg_get_key(m_user.config, "General", "ModulesDirectory"); - m_user.modules = gf_modules_new(str, m_user.config); - if (!m_user.modules) { - unsigned char str_path[MAX_PATH]; - const char *sOpt; - FILE *t; - /*inital launch*/ - m_user.modules = gf_modules_new(config_path, m_user.config); - if (m_user.modules) { - gf_cfg_set_key(m_user.config, "General", "ModulesDirectory", (const char *) config_path); - - sOpt = gf_cfg_get_key(m_user.config, "Compositor", "Raster2D"); - if (!sOpt) gf_cfg_set_key(m_user.config, "Compositor", "Raster2D", "GPAC 2D Raster"); - - - sOpt = gf_cfg_get_key(m_user.config, "General", "CacheDirectory"); - if (!sOpt) { - sprintf((char *) str_path, "%scache", config_path); - gf_cfg_set_key(m_user.config, "General", "CacheDirectory", (const char *) str_path); - } - /*setup UDP traffic autodetect*/ - gf_cfg_set_key(m_user.config, "Network", "AutoReconfigUDP", "yes"); - gf_cfg_set_key(m_user.config, "Network", "UDPTimeout", "10000"); - gf_cfg_set_key(m_user.config, "Network", "BufferLength", "3000"); - - - /*first launch, register all files ext*/ - u32 i; - for (i=0; iCanHandleURL(ifce, "test.test"); - gf_modules_close_interface((GF_BaseInterface *)ifce); - } + if (first_load) { + /*first launch, register all files ext*/ + u32 i; + for (i=0; iCanHandleURL(ifce, "test.test"); + gf_modules_close_interface((GF_BaseInterface *)ifce); } } - - /*check audio config on windows, force config*/ - sOpt = gf_cfg_get_key(m_user.config, "Audio", "ForceConfig"); - if (!sOpt) { - gf_cfg_set_key(m_user.config, "Audio", "ForceConfig", "yes"); - gf_cfg_set_key(m_user.config, "Audio", "NumBuffers", "2"); - gf_cfg_set_key(m_user.config, "Audio", "TotalDuration", "200"); - } - /*by default use GDIplus, much faster than freetype on font loading*/ - gf_cfg_set_key(m_user.config, "FontEngine", "FontReader", "ft_font"); - - sprintf((char *) str_path, "%sgui/gui.bt", config_path); - t = fopen(str_path, "rt"); - if (!t) { - sprintf((char *) str_path, "%sgpac.mp4", config_path); - t = fopen(str_path, "rt"); - } - if (t) { - gf_cfg_set_key(m_user.config, "General", "StartupFile", (const char *) str_path); - fclose(t); - } - ::MessageBox(NULL, _T("Osmo4/GPAC Setup complete"), _T("Initial launch"), MB_OK); - } - if (! gf_modules_get_count(m_user.modules) ) { - MessageBox(NULL, _T("No plugins available - system cannot work"), _T("Fatal Error"), MB_OK); - m_pMainWnd->PostMessage(WM_QUIT); } - /*setup font dir*/ - str = gf_cfg_get_key(m_user.config, "FontEngine", "FontDirectory"); - if (!str || !strlen(str) ) { - strcpy((char *) config_path, "\\Windows"); - gf_cfg_set_key(m_user.config, "FontEngine", "FontDirectory", (const char *) config_path); - } - /*check video driver, if none or raw_out use dx_hw by default*/ - str = gf_cfg_get_key(m_user.config, "Video", "DriverName"); - if (!str || !stricmp(str, "raw_out")) { - gf_cfg_set_key(m_user.config, "Video", "DriverName", "gapi"); + str = gf_cfg_get_key(m_user.config, "General", "ModulesDirectory"); + m_user.modules = gf_modules_new(str, m_user.config); + if (!m_user.modules || ! gf_modules_get_count(m_user.modules) ) { + MessageBox(NULL, _T("No plugins available - system cannot work"), _T("Fatal Error"), MB_OK); + m_pMainWnd->PostMessage(WM_QUIT); + return FALSE; } m_user.config = m_user.config; diff --git a/applications/osmo4_wx/Makefile b/applications/osmo4_wx/Makefile index 4f2b68e..ca72be1 100644 --- a/applications/osmo4_wx/Makefile +++ b/applications/osmo4_wx/Makefile @@ -21,12 +21,6 @@ endif #common obj OBJS= wxOsmo4.o wxGPACControl.o fileprops.o Playlist.o menubtn.o -ifeq ($(BUILD_INSTALL), yes) -INSTALL_FLAGS=-DGPAC_MODULES_PATH=\"$(moddir)\" -else -INSTALL_FLAGS= -endif - ifeq ($(CONFIG_WIN32),yes) EXE=.exe PROG=Osmo4$(EXE) @@ -54,7 +48,7 @@ Osmo4$(EXE): $(OBJS) $(CC) $(LDFLAGS) -o ../../bin/gcc/$@ $(OBJS) -L../../bin/gcc -lgpac $(WX_LFLAGS) %.o: %.cpp - $(CXX) $(CFLAGS) $(INSTALL_FLAGS) $(WX_CFLAGS) -c -o $@ $< + $(CXX) $(CFLAGS) $(WX_CFLAGS) -c -o $@ $< clean: rm -f $(OBJS) ../../bin/gcc/$(PROG) @@ -74,7 +68,6 @@ ifeq ($(CONFIG_DARWIN),yes) echo -n 'APPLOsm4' > $(DESTDIR)$(mac_apps)/Osmo4.app/Contents/PkgInfo else rm -f wxOsmo4.o - $(MAKE) -override BUILD_INSTALL=yes all mkdir -p $(DESTDIR)$(prefix)/bin install -m 755 $(INSTFLAGS) ../../bin/gcc/Osmo4 "$(DESTDIR)$(prefix)/bin" endif diff --git a/applications/osmo4_wx/wxOsmo4.cpp b/applications/osmo4_wx/wxOsmo4.cpp index 99d2341..5c7767e 100644 --- a/applications/osmo4_wx/wxOsmo4.cpp +++ b/applications/osmo4_wx/wxOsmo4.cpp @@ -534,85 +534,26 @@ Bool wxOsmo4Frame::LoadTerminal() wxPathList pathList; wxString currentDir(wxGetCwd()); wxString abs_gpac_path = wxT(""); - const char *gpac_cfg; + char *gpac_cfg, *sep; ::wxLogMessage(wxT("Looking for GPAC configuration file")); -#if defined(__WXMAC__) && !defined(__DARWIN__) - // On Mac, the current directory is the relevant one when the application starts. - abs_gpac_path = wxGetCwd(); - gpac_cfg = "GPAC.cfg"; -#else - -#ifdef WIN32 - wxOsmo4App &app = wxGetApp(); - gpac_cfg = "GPAC.cfg"; - /*locate exe*/ - if (wxIsAbsolutePath(app.argv[0])) { - abs_gpac_path = wxPathOnly(app.argv[0]); - } else { - if (currentDir.Last() != wxFILE_SEP_PATH) currentDir += wxFILE_SEP_PATH; - abs_gpac_path = currentDir + app.argv[0]; - if (wxFileExists(abs_gpac_path)) { - abs_gpac_path = wxPathOnly(abs_gpac_path); - } else { - abs_gpac_path = wxT(""); - pathList.AddEnvList(wxT("PATH")); - abs_gpac_path = pathList.FindAbsoluteValidPath(app.argv[0]); - if (!abs_gpac_path.IsEmpty()) { - abs_gpac_path = wxPathOnly(abs_gpac_path); - } else { - /*ask user*/ - wxDirDialog dlg(NULL, wxT("Locate GPAC config file directory")); - if ( dlg.ShowModal() != wxID_OK ) return 0; - abs_gpac_path = dlg.GetPath(); - } - } - } -#else - gpac_cfg = ".gpacrc"; - char *cfg_dir = getenv("HOME"); - if (cfg_dir) { - abs_gpac_path = wxString(cfg_dir, wxConvUTF8); - } else { - /*ask user*/ - wxDirDialog dlg(NULL, wxT("Locate GPAC config file directory")); - if ( dlg.ShowModal() != wxID_OK ) return 0; - abs_gpac_path = dlg.GetPath(); - } -#endif - -#endif - /*load config*/ - m_user.config = gf_cfg_new(abs_gpac_path.mb_str(wxConvUTF8), gpac_cfg); + Bool first_launch = 0; + m_user.config = gf_cfg_init(NULL, &first_launch); if (!m_user.config) { - unsigned char config_file[GF_MAX_PATH]; - strcpy((char *) config_file, (const char *) abs_gpac_path.mb_str(wxConvUTF8)); - if (config_file[strlen((char *) config_file)-1] != GF_PATH_SEPARATOR) { - char szSep[2]; - szSep[0] = GF_PATH_SEPARATOR; - szSep[1] = 0; - strcat((char *) config_file, (const char *)szSep); - } - strcat((char *) config_file, gpac_cfg); - FILE *ft = fopen((const char *) config_file, "wt"); - if (!ft) { - wxMessageDialog(NULL, wxT("Cannot create blank config file"), wxT("Init error"), wxOK).ShowModal(); - return 0; - } - fclose(ft); - m_user.config = gf_cfg_new(abs_gpac_path.mb_str(wxConvUTF8), gpac_cfg); - if (!m_user.config) { - wxMessageDialog(NULL, wxT("Cannot open GPAC configuration file"), wxT("Init error"), wxOK); - return 0; - } + wxMessageDialog(NULL, wxT("Cannot open GPAC configuration file"), wxT("Init error"), wxOK); + return 0; } - strcpy(szAppPath, abs_gpac_path.mb_str(wxConvUTF8)); - if (szAppPath[strlen(szAppPath)] != GF_PATH_SEPARATOR) - sprintf(szAppPath, "%s%c", szAppPath, GF_PATH_SEPARATOR); + gpac_cfg = gf_cfg_get_filename(m_user.config); + sep = strrchr(gpac_cfg, '/'); + if (!sep) sep = strrchr(gpac_cfg, '\\'); + if (sep) sep[0] = 0; + strcpy(szAppPath, gpac_cfg); + if (sep) sep[0] = '/'; + gf_free(gpac_cfg); /*check log file*/ const char *str = gf_cfg_get_key(m_user.config, "General", "LogFile"); @@ -620,84 +561,28 @@ Bool wxOsmo4Frame::LoadTerminal() gf_log_set_callback(this, wxOsmo4_do_log); /*set log level*/ - m_log_level = 0; - str = gf_cfg_get_key(m_user.config, "General", "LogLevel"); - if (str) { - if (!stricmp(str, "debug")) m_log_level = GF_LOG_DEBUG; - else if (!stricmp(str, "info")) m_log_level = GF_LOG_INFO; - else if (!stricmp(str, "warning")) m_log_level = GF_LOG_WARNING; - else if (!stricmp(str, "error")) m_log_level = GF_LOG_ERROR; - gf_log_set_level(m_log_level); - } + m_log_level = gf_log_parse_level( gf_cfg_get_key(m_user.config, "General", "LogLevel") ); + gf_log_set_level(m_log_level); /*set log tools*/ - m_log_tools = 0; - str = gf_cfg_get_key(m_user.config, "General", "LogTools"); - if (str) { - char *sep; - char *val = (char *) str; - while (val) { - sep = strchr(val, ':'); - if (sep) sep[0] = 0; - if (!stricmp(val, "core")) m_log_tools |= GF_LOG_CODING; - else if (!stricmp(val, "coding")) m_log_tools |= GF_LOG_CODING; - else if (!stricmp(val, "container")) m_log_tools |= GF_LOG_CONTAINER; - else if (!stricmp(val, "network")) m_log_tools |= GF_LOG_NETWORK; - else if (!stricmp(val, "rtp")) m_log_tools |= GF_LOG_RTP; - else if (!stricmp(val, "author")) m_log_tools |= GF_LOG_AUTHOR; - else if (!stricmp(val, "sync")) m_log_tools |= GF_LOG_SYNC; - else if (!stricmp(val, "codec")) m_log_tools |= GF_LOG_CODEC; - else if (!stricmp(val, "parser")) m_log_tools |= GF_LOG_PARSER; - else if (!stricmp(val, "media")) m_log_tools |= GF_LOG_MEDIA; - else if (!stricmp(val, "scene")) m_log_tools |= GF_LOG_SCENE; - else if (!stricmp(val, "script")) m_log_tools |= GF_LOG_SCRIPT; - else if (!stricmp(val, "interact")) m_log_tools |= GF_LOG_INTERACT; - else if (!stricmp(val, "compose")) m_log_tools |= GF_LOG_COMPOSE; - else if (!stricmp(val, "mmio")) m_log_tools |= GF_LOG_MMIO; - else if (!stricmp(val, "none")) m_log_tools = 0; - else if (!stricmp(val, "all")) m_log_tools = 0xFFFFFFFF; - if (!sep) break; - sep[0] = ':'; - val = sep+1; - } - gf_log_set_tools(m_log_tools); - } + m_log_tools = gf_log_parse_tools( gf_cfg_get_key(m_user.config, "General", "LogTools") ); + gf_log_set_tools(m_log_tools); gf_sys_init(0); ::wxLogMessage(wxT("GPAC configuration file opened - looking for modules")); - str = gf_cfg_get_key(m_user.config, "General", "ModulesDirectory"); - Bool first_launch = 0; - if (!str) { - first_launch = 1; -#ifdef GPAC_MODULES_PATH - str = GPAC_MODULES_PATH; -#else - str = abs_gpac_path.mb_str(wxConvUTF8); -#endif - } - m_user.modules = gf_modules_new(str, m_user.config); /*initial launch*/ - if (first_launch || !gf_modules_get_count(m_user.modules)) { - const char *sOpt; - wxDirDialog dlg(NULL, wxT("Locate GPAC modules directory")); - if (!gf_modules_get_count(m_user.modules)) { - if (m_user.modules) gf_modules_del(m_user.modules); - m_user.modules = NULL; - if ( dlg.ShowModal() != wxID_OK ) return false; - str = dlg.GetPath().mb_str(wxConvUTF8); - - m_user.modules = gf_modules_new(str, m_user.config); - if (!m_user.modules || !gf_modules_get_count(m_user.modules) ) { - wxMessageDialog(NULL, wxT("Cannot find any modules for GPAC"), wxT("Init error"), wxOK); - gf_cfg_del(m_user.config); - m_user.config = NULL; - return 0; - } - } + if (!m_user.modules || !gf_modules_get_count(m_user.modules)) { + wxMessageDialog(NULL, wxT("No modules available - system cannot work"), wxT("Fatal Error"), wxOK).ShowModal(); + if (m_user.modules) gf_modules_del(m_user.modules); + gf_cfg_del(m_user.config); + m_user.config = NULL; + return 0; + } + if (first_launch) { u32 i; for (i=0; iversion = (NP_VERSION_MAJOR << 8) | NP_VERSION_MINOR; -#ifdef XP_MAC - aNPPFuncs->newp = NewNPP_NewProc(Private_New); - aNPPFuncs->destroy = NewNPP_DestroyProc(Private_Destroy); - aNPPFuncs->setwindow = NewNPP_SetWindowProc(Private_SetWindow); - aNPPFuncs->newstream = NewNPP_NewStreamProc(Private_NewStream); - aNPPFuncs->destroystream = NewNPP_DestroyStreamProc(Private_DestroyStream); - aNPPFuncs->asfile = NewNPP_StreamAsFileProc(Private_StreamAsFile); - aNPPFuncs->writeready = NewNPP_WriteReadyProc(Private_WriteReady); - aNPPFuncs->write = NewNPP_WriteProc(Private_Write); - aNPPFuncs->print = NewNPP_PrintProc(Private_Print); - aNPPFuncs->event = NewNPP_HandleEventProc(Private_HandleEvent); - aNPPFuncs->urlnotify = NewNPP_URLNotifyProc(Private_URLNotify); - aNPPFuncs->getvalue = NewNPP_GetValueProc(Private_GetValue); - aNPPFuncs->setvalue = NewNPP_SetValueProc(Private_SetValue); -#else - aNPPFuncs->newp = NPP_New; - aNPPFuncs->destroy = NPP_Destroy; - aNPPFuncs->setwindow = NPP_SetWindow; - aNPPFuncs->newstream = NPP_NewStream; - aNPPFuncs->destroystream = NPP_DestroyStream; - aNPPFuncs->asfile = NPP_StreamAsFile; - aNPPFuncs->writeready = NPP_WriteReady; - aNPPFuncs->write = NPP_Write; - aNPPFuncs->print = NPP_Print; - aNPPFuncs->event = NPP_HandleEvent; - aNPPFuncs->urlnotify = NPP_URLNotify; - aNPPFuncs->getvalue = NPP_GetValue; - aNPPFuncs->setvalue = NPP_SetValue; -#endif -#ifdef OJI - aNPPFuncs->javaClass = NULL; -#endif - - return NPERR_NO_ERROR; -} - -static NPError fillNetscapeFunctionTable(NPNetscapeFuncs* aNPNFuncs) -{ - if(aNPNFuncs == NULL) - return NPERR_INVALID_FUNCTABLE_ERROR; - - if(HIBYTE(aNPNFuncs->version) > NP_VERSION_MAJOR) - return NPERR_INCOMPATIBLE_VERSION_ERROR; - - if(aNPNFuncs->size < sizeof(NPNetscapeFuncs)) - return NPERR_INVALID_FUNCTABLE_ERROR; - - NPNFuncs.size = aNPNFuncs->size; - NPNFuncs.version = aNPNFuncs->version; - NPNFuncs.geturlnotify = aNPNFuncs->geturlnotify; - NPNFuncs.geturl = aNPNFuncs->geturl; - NPNFuncs.posturlnotify = aNPNFuncs->posturlnotify; - NPNFuncs.posturl = aNPNFuncs->posturl; - NPNFuncs.requestread = aNPNFuncs->requestread; - NPNFuncs.newstream = aNPNFuncs->newstream; - NPNFuncs.write = aNPNFuncs->write; - NPNFuncs.destroystream = aNPNFuncs->destroystream; - NPNFuncs.status = aNPNFuncs->status; - NPNFuncs.uagent = aNPNFuncs->uagent; - NPNFuncs.memalloc = aNPNFuncs->memalloc; - NPNFuncs.memfree = aNPNFuncs->memfree; - NPNFuncs.memflush = aNPNFuncs->memflush; - NPNFuncs.reloadplugins = aNPNFuncs->reloadplugins; -#ifdef OJI - NPNFuncs.getJavaEnv = aNPNFuncs->getJavaEnv; - NPNFuncs.getJavaPeer = aNPNFuncs->getJavaPeer; -#endif - NPNFuncs.getvalue = aNPNFuncs->getvalue; - NPNFuncs.setvalue = aNPNFuncs->setvalue; - NPNFuncs.invalidaterect = aNPNFuncs->invalidaterect; - NPNFuncs.invalidateregion = aNPNFuncs->invalidateregion; - NPNFuncs.forceredraw = aNPNFuncs->forceredraw; - - return NPERR_NO_ERROR; -} - -#ifdef XP_WIN - -NPError OSCALL NP_Initialize(NPNetscapeFuncs* aNPNFuncs) -{ - NPError rv = fillNetscapeFunctionTable(aNPNFuncs); - if(rv != NPERR_NO_ERROR) - return rv; - - return NS_PluginInitialize(); -} - -NPError OSCALL NP_GetEntryPoints(NPPluginFuncs* aNPPFuncs) -{ - return fillPluginFunctionTable(aNPPFuncs); -} - -#endif - - -#ifdef XP_UNIX - -NPError OSCALL NP_Initialize(NPNetscapeFuncs* aNPNFuncs, NPPluginFuncs* aNPPFuncs) -{ - NPError rv = fillNetscapeFunctionTable(aNPNFuncs); - if(rv != NPERR_NO_ERROR) - return rv; - - rv = fillPluginFunctionTable(aNPPFuncs); - if(rv != NPERR_NO_ERROR) - return rv; - - return NS_PluginInitialize(); -} - -char * NP_GetMIMEDescription(void) -{ - return NPP_GetMIMEDescription(); -} - -NPError NP_GetValue(void *future, NPPVariable aVariable, void *aValue) -{ - return NS_PluginGetValue(aVariable, aValue); -} - -#endif - - -#ifdef XP_MAC - - -#if !TARGET_API_MAC_CARBON -QDGlobals* gQDPtr; // Pointer to Netscape's QuickDraw globals -#endif - -short gResFile; // Refnum of the plugin's resource file - -NPError Private_Initialize(void) -{ - NPError rv = NS_PluginInitialize(); - return rv; -} - -void Private_Shutdown(void) -{ - NS_PluginShutdown(); - __destroy_global_chain(); -} - -void SetUpQD(void); - -void SetUpQD(void) -{ - ProcessSerialNumber PSN; - FSSpec myFSSpec; - Str63 name; - ProcessInfoRec infoRec; - OSErr result = noErr; - CFragConnectionID connID; - Str255 errName; - - // Memorize the plugin¹s resource file refnum for later use. - gResFile = CurResFile(); - -#if !TARGET_API_MAC_CARBON - // Ask the system if CFM is available. - long response; - OSErr err = Gestalt(gestaltCFMAttr, &response); - Boolean hasCFM = BitTst(&response, 31-gestaltCFMPresent); - - if (hasCFM) { - // GetProcessInformation takes a process serial number and - // will give us back the name and FSSpec of the application. - // See the Process Manager in IM. - infoRec.processInfoLength = sizeof(ProcessInfoRec); - infoRec.processName = name; - infoRec.processAppSpec = &myFSSpec; - - PSN.highLongOfPSN = 0; - PSN.lowLongOfPSN = kCurrentProcess; - - result = GetProcessInformation(&PSN, &infoRec); - } - else - // If no CFM installed, assume it must be a 68K app. - result = -1; - - if (result == noErr) { - // Now that we know the app name and FSSpec, we can call GetDiskFragment - // to get a connID to use in a subsequent call to FindSymbol (it will also - // return the address of ³main² in app, which we ignore). If GetDiskFragment - // returns an error, we assume the app must be 68K. - Ptr mainAddr; - result = GetDiskFragment(infoRec.processAppSpec, 0L, 0L, infoRec.processName, - kReferenceCFrag, &connID, (Ptr*)&mainAddr, errName); - } - - if (result == noErr) { - // The app is a PPC code fragment, so call FindSymbol - // to get the exported ³qd² symbol so we can access its - // QuickDraw globals. - CFragSymbolClass symClass; - result = FindSymbol(connID, "\pqd", (Ptr*)&gQDPtr, &symClass); - } - else { - // The app is 68K, so use its A5 to compute the address - // of its QuickDraw globals. - gQDPtr = (QDGlobals*)(*((long*)SetCurrentA5()) - (sizeof(QDGlobals) - sizeof(GrafPtr))); - } -#endif /* !TARGET_API_MAC_CARBON */ -} - -NPError main(NPNetscapeFuncs* nsTable, NPPluginFuncs* pluginFuncs, NPP_ShutdownUPP* unloadUpp); - -#if !TARGET_API_MAC_CARBON -#pragma export on -#if GENERATINGCFM -RoutineDescriptor mainRD = BUILD_ROUTINE_DESCRIPTOR(uppNPP_MainEntryProcInfo, main); -#endif -#pragma export off -#endif /* !TARGET_API_MAC_CARBON */ - - -NPError main(NPNetscapeFuncs* aNPNFuncs, NPPluginFuncs* aNPPFuncs, NPP_ShutdownUPP* aUnloadUpp) -{ - NPError rv = NPERR_NO_ERROR; - - if (aUnloadUpp == NULL) - rv = NPERR_INVALID_FUNCTABLE_ERROR; - - if (rv == NPERR_NO_ERROR) - rv = fillNetscapeFunctionTable(aNPNFuncs); - - if (rv == NPERR_NO_ERROR) { - // defer static constructors until the global functions are initialized. - __InitCode__(); - rv = fillPluginFunctionTable(aNPPFuncs); - } - - *aUnloadUpp = NewNPP_ShutdownProc(Private_Shutdown); - SetUpQD(); - rv = Private_Initialize(); - - return rv; -} -#endif //XP_MAC diff --git a/applications/osmozilla/npn_gate.cpp b/applications/osmozilla/npn_gate.cpp deleted file mode 100644 index 13a0c7c..0000000 --- a/applications/osmozilla/npn_gate.cpp +++ /dev/null @@ -1,215 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: NPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Netscape Public License - * Version 1.1 (the "License"); you may not use this file except in - * compliance with the License. You may obtain a copy of the License at - * http://www.mozilla.org/NPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is mozilla.org code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 1998 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the NPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the NPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - - -//////////////////////////////////////////////////////////// -// -// Implementation of Netscape entry points (NPN_*) -// -#include "npplat.h" - -extern NPNetscapeFuncs NPNFuncs; - -void NPN_Version(int* plugin_major, int* plugin_minor, int* netscape_major, int* netscape_minor) -{ - *plugin_major = NP_VERSION_MAJOR; - *plugin_minor = NP_VERSION_MINOR; - *netscape_major = HIBYTE(NPNFuncs.version); - *netscape_minor = LOBYTE(NPNFuncs.version); -} - -NPError NPN_GetURLNotify(NPP instance, const char *url, const char *target, void* notifyData) -{ - int navMinorVers = NPNFuncs.version & 0xFF; - NPError rv = NPERR_NO_ERROR; - - if( navMinorVers >= NPVERS_HAS_NOTIFICATION ) - rv = CallNPN_GetURLNotifyProc(NPNFuncs.geturlnotify, instance, url, target, notifyData); - else - rv = NPERR_INCOMPATIBLE_VERSION_ERROR; - - return rv; -} - -NPError NPN_GetURL(NPP instance, const char *url, const char *target) -{ - NPError rv = CallNPN_GetURLProc(NPNFuncs.geturl, instance, url, target); - return rv; -} - -NPError NPN_PostURLNotify(NPP instance, const char* url, const char* window, uint32 len, const char* buf, NPBool file, void* notifyData) -{ - int navMinorVers = NPNFuncs.version & 0xFF; - NPError rv = NPERR_NO_ERROR; - - if( navMinorVers >= NPVERS_HAS_NOTIFICATION ) - rv = CallNPN_PostURLNotifyProc(NPNFuncs.posturlnotify, instance, url, window, len, buf, file, notifyData); - else - rv = NPERR_INCOMPATIBLE_VERSION_ERROR; - - return rv; -} - -NPError NPN_PostURL(NPP instance, const char* url, const char* window, uint32 len, const char* buf, NPBool file) -{ - NPError rv = CallNPN_PostURLProc(NPNFuncs.posturl, instance, url, window, len, buf, file); - return rv; -} - -NPError NPN_RequestRead(NPStream* stream, NPByteRange* rangeList) -{ - NPError rv = CallNPN_RequestReadProc(NPNFuncs.requestread, stream, rangeList); - return rv; -} - -NPError NPN_NewStream(NPP instance, NPMIMEType type, const char* target, NPStream** stream) -{ - int navMinorVersion = NPNFuncs.version & 0xFF; - - NPError rv = NPERR_NO_ERROR; - - if( navMinorVersion >= NPVERS_HAS_STREAMOUTPUT ) - rv = CallNPN_NewStreamProc(NPNFuncs.newstream, instance, type, target, stream); - else - rv = NPERR_INCOMPATIBLE_VERSION_ERROR; - - return rv; -} - -int32 NPN_Write(NPP instance, NPStream *stream, int32 len, void *buffer) -{ - int navMinorVersion = NPNFuncs.version & 0xFF; - int32 rv = 0; - - if( navMinorVersion >= NPVERS_HAS_STREAMOUTPUT ) - rv = CallNPN_WriteProc(NPNFuncs.write, instance, stream, len, buffer); - else - rv = -1; - - return rv; -} - -NPError NPN_DestroyStream(NPP instance, NPStream* stream, NPError reason) -{ - int navMinorVersion = NPNFuncs.version & 0xFF; - NPError rv = NPERR_NO_ERROR; - - if( navMinorVersion >= NPVERS_HAS_STREAMOUTPUT ) - rv = CallNPN_DestroyStreamProc(NPNFuncs.destroystream, instance, stream, reason); - else - rv = NPERR_INCOMPATIBLE_VERSION_ERROR; - - return rv; -} - -void NPN_Status(NPP instance, const char *message) -{ - CallNPN_StatusProc(NPNFuncs.status, instance, message); -} - -const char* NPN_UserAgent(NPP instance) -{ - const char * rv = NULL; - rv = CallNPN_UserAgentProc(NPNFuncs.uagent, instance); - return rv; -} - -void* NPN_MemAlloc(uint32 size) -{ - void * rv = NULL; - rv = CallNPN_MemAllocProc(NPNFuncs.memalloc, size); - return rv; -} - -void NPN_MemFree(void* ptr) -{ - CallNPN_MemFreeProc(NPNFuncs.memfree, ptr); -} - -uint32 NPN_MemFlush(uint32 size) -{ - uint32 rv = CallNPN_MemFlushProc(NPNFuncs.memflush, size); - return rv; -} - -void NPN_ReloadPlugins(NPBool reloadPages) -{ - CallNPN_ReloadPluginsProc(NPNFuncs.reloadplugins, reloadPages); -} - -#ifdef OJI -JRIEnv* NPN_GetJavaEnv(void) -{ - JRIEnv * rv = NULL; - rv = CallNPN_GetJavaEnvProc(NPNFuncs.getJavaEnv); - return rv; -} - -jref NPN_GetJavaPeer(NPP instance) -{ - jref rv; - rv = CallNPN_GetJavaPeerProc(NPNFuncs.getJavaPeer, instance); - return rv; -} -#endif - -NPError NPN_GetValue(NPP instance, NPNVariable variable, void *value) -{ - NPError rv = CallNPN_GetValueProc(NPNFuncs.getvalue, instance, variable, value); - return rv; -} - -NPError NPN_SetValue(NPP instance, NPPVariable variable, void *value) -{ - NPError rv = CallNPN_SetValueProc(NPNFuncs.setvalue, instance, variable, value); - return rv; -} - -void NPN_InvalidateRect(NPP instance, NPRect *invalidRect) -{ - CallNPN_InvalidateRectProc(NPNFuncs.invalidaterect, instance, invalidRect); -} - -void NPN_InvalidateRegion(NPP instance, NPRegion invalidRegion) -{ - CallNPN_InvalidateRegionProc(NPNFuncs.invalidateregion, instance, invalidRegion); -} - -void NPN_ForceRedraw(NPP instance) -{ - CallNPN_ForceRedrawProc(NPNFuncs.forceredraw, instance); -} diff --git a/applications/osmozilla/npp_gate.cpp b/applications/osmozilla/npp_gate.cpp deleted file mode 100644 index 179dba8..0000000 --- a/applications/osmozilla/npp_gate.cpp +++ /dev/null @@ -1,353 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: NPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Netscape Public License - * Version 1.1 (the "License"); you may not use this file except in - * compliance with the License. You may obtain a copy of the License at - * http://www.mozilla.org/NPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is mozilla.org code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 1998 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the NPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the NPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#include "osmozilla.h" - - -// here the plugin creates a plugin instance object which -// will be associated with this newly created NPP instance and -// will do all the neccessary job -NPError NPP_New(NPMIMEType pluginType, NPP instance, uint16 mode, int16 argc, char* argn[], char* argv[], NPSavedData* saved) -{ - if(instance == NULL) - return NPERR_INVALID_INSTANCE_ERROR; - - NPError rv = NPERR_NO_ERROR; - - // create a new plugin instance object - // initialization will be done when the associated window is ready - nsPluginCreateData ds; - - ds.instance = instance; - ds.type = pluginType; - ds.mode = mode; - ds.argc = argc; - ds.argn = argn; - ds.argv = argv; - ds.saved = saved; - - nsPluginInstanceBase * plugin = NS_NewPluginInstance(&ds); - if(plugin == NULL) - return NPERR_OUT_OF_MEMORY_ERROR; - - // associate the plugin instance object with NPP instance - instance->pdata = (void *)plugin; - return rv; -} - -// here is the place to clean up and destroy the nsPluginInstance object -NPError NPP_Destroy (NPP instance, NPSavedData** save) -{ - if(instance == NULL) - return NPERR_INVALID_INSTANCE_ERROR; - - NPError rv = NPERR_NO_ERROR; - - nsPluginInstanceBase * plugin = (nsPluginInstanceBase *)instance->pdata; - if(plugin != NULL) { - plugin->shut(); - NS_DestroyPluginInstance(plugin); - } - return rv; -} - -// during this call we know when the plugin window is ready or -// is about to be destroyed so we can do some gui specific -// initialization and shutdown -NPError NPP_SetWindow (NPP instance, NPWindow* pNPWindow) -{ - if(instance == NULL) - return NPERR_INVALID_INSTANCE_ERROR; - - NPError rv = NPERR_NO_ERROR; - - if(pNPWindow == NULL) - return NPERR_GENERIC_ERROR; - - nsPluginInstanceBase * plugin = (nsPluginInstanceBase *)instance->pdata; - - if(plugin == NULL) - return NPERR_GENERIC_ERROR; - - // window just created - if(!plugin->isInitialized() && (pNPWindow->window != NULL)) { - if(!plugin->init(pNPWindow)) { - NS_DestroyPluginInstance(plugin); - return NPERR_MODULE_LOAD_FAILED_ERROR; - } - } - - // window goes away - if((pNPWindow->window == NULL) && plugin->isInitialized()) - return plugin->SetWindow(pNPWindow); - - // window resized? - if(plugin->isInitialized() && (pNPWindow->window != NULL)) - return plugin->SetWindow(pNPWindow); - - // this should not happen, nothing to do - if((pNPWindow->window == NULL) && !plugin->isInitialized()) - return plugin->SetWindow(pNPWindow); - - return rv; -} - -NPError NPP_NewStream(NPP instance, NPMIMEType type, NPStream* stream, NPBool seekable, uint16* stype) -{ - if(instance == NULL) - return NPERR_INVALID_INSTANCE_ERROR; - - nsPluginInstanceBase * plugin = (nsPluginInstanceBase *)instance->pdata; - if(plugin == NULL) - return NPERR_GENERIC_ERROR; - - NPError rv = plugin->NewStream(type, stream, seekable, stype); - return rv; -} - -int32 NPP_WriteReady (NPP instance, NPStream *stream) -{ - if(instance == NULL) - return 0x0fffffff; - - nsPluginInstanceBase * plugin = (nsPluginInstanceBase *)instance->pdata; - if(plugin == NULL) - return 0x0fffffff; - - int32 rv = plugin->WriteReady(stream); - return rv; -} - -int32 NPP_Write (NPP instance, NPStream *stream, int32 offset, int32 len, void *buffer) -{ - if(instance == NULL) - return len; - - nsPluginInstanceBase * plugin = (nsPluginInstanceBase *)instance->pdata; - if(plugin == NULL) - return len; - - int32 rv = plugin->Write(stream, offset, len, buffer); - return rv; -} - -NPError NPP_DestroyStream (NPP instance, NPStream *stream, NPError reason) -{ - if(instance == NULL) - return NPERR_INVALID_INSTANCE_ERROR; - - nsPluginInstanceBase * plugin = (nsPluginInstanceBase *)instance->pdata; - if(plugin == NULL) - return NPERR_GENERIC_ERROR; - - NPError rv = plugin->DestroyStream(stream, reason); - return rv; -} - -void NPP_StreamAsFile (NPP instance, NPStream* stream, const char* fname) -{ - if(instance == NULL) - return; - - nsPluginInstanceBase * plugin = (nsPluginInstanceBase *)instance->pdata; - if(plugin == NULL) - return; - - plugin->StreamAsFile(stream, fname); -} - -void NPP_Print (NPP instance, NPPrint* printInfo) -{ - if(instance == NULL) - return; - - nsPluginInstanceBase * plugin = (nsPluginInstanceBase *)instance->pdata; - if(plugin == NULL) - return; - plugin->Print(printInfo); -} - -void NPP_URLNotify(NPP instance, const char* url, NPReason reason, void* notifyData) -{ - if(instance == NULL) - return; - - nsPluginInstanceBase * plugin = (nsPluginInstanceBase *)instance->pdata; - if(plugin == NULL) - return; - - plugin->URLNotify(url, reason, notifyData); -} - -NPError NPP_GetValue(NPP instance, NPPVariable variable, void *value) -{ - if(instance == NULL) - return NPERR_INVALID_INSTANCE_ERROR; - - nsPluginInstanceBase * plugin = (nsPluginInstanceBase *)instance->pdata; - if(plugin == NULL) - return NPERR_GENERIC_ERROR; - - NPError rv = plugin->GetValue(variable, value); - return rv; -} - -NPError NPP_SetValue(NPP instance, NPNVariable variable, void *value) -{ - if(instance == NULL) - return NPERR_INVALID_INSTANCE_ERROR; - - nsPluginInstanceBase * plugin = (nsPluginInstanceBase *)instance->pdata; - if(plugin == NULL) - return NPERR_GENERIC_ERROR; - - NPError rv = plugin->SetValue(variable, value); - return rv; -} - -int16 NPP_HandleEvent(NPP instance, void* event) -{ - if(instance == NULL) - return 0; - - nsPluginInstanceBase * plugin = (nsPluginInstanceBase *)instance->pdata; - if(plugin == NULL) - return 0; - - uint16 rv = plugin->HandleEvent(event); - return rv; -} - -#ifdef OJI -jref NPP_GetJavaClass (void) -{ - return NULL; -} -#endif - -/**************************************************/ -/* */ -/* Mac */ -/* */ -/**************************************************/ - -// Mac needs these wrappers, see npplat.h for more info - -#ifdef XP_MAC - -NPError Private_New(NPMIMEType pluginType, NPP instance, uint16 mode, int16 argc, char* argn[], char* argv[], NPSavedData* saved) -{ - NPError rv = NPP_New(pluginType, instance, mode, argc, argn, argv, saved); - return rv; -} - -NPError Private_Destroy(NPP instance, NPSavedData** save) -{ - NPError rv = NPP_Destroy(instance, save); - return rv; -} - -NPError Private_SetWindow(NPP instance, NPWindow* window) -{ - NPError rv = NPP_SetWindow(instance, window); - return rv; -} - -NPError Private_NewStream(NPP instance, NPMIMEType type, NPStream* stream, NPBool seekable, uint16* stype) -{ - NPError rv = NPP_NewStream(instance, type, stream, seekable, stype); - return rv; -} - -int32 Private_WriteReady(NPP instance, NPStream* stream) -{ - int32 rv = NPP_WriteReady(instance, stream); - return rv; -} - -int32 Private_Write(NPP instance, NPStream* stream, int32 offset, int32 len, void* buffer) -{ - int32 rv = NPP_Write(instance, stream, offset, len, buffer); - return rv; -} - -void Private_StreamAsFile(NPP instance, NPStream* stream, const char* fname) -{ - NPP_StreamAsFile(instance, stream, fname); -} - - -NPError Private_DestroyStream(NPP instance, NPStream* stream, NPError reason) -{ - NPError rv = NPP_DestroyStream(instance, stream, reason); - return rv; -} - -int16 Private_HandleEvent(NPP instance, void* event) -{ - int16 rv = NPP_HandleEvent(instance, event); - return rv; -} - -void Private_Print(NPP instance, NPPrint* platformPrint) -{ - NPP_Print(instance, platformPrint); -} - -void Private_URLNotify(NPP instance, const char* url, NPReason reason, void* notifyData) -{ - NPP_URLNotify(instance, url, reason, notifyData); -} - -jref Private_GetJavaClass(void) -{ - return NULL; -} - -NPError Private_GetValue(NPP instance, NPPVariable variable, void *result) -{ - NPError rv = NPP_GetValue(instance, variable, result); - return rv; -} - -NPError Private_SetValue(NPP instance, NPNVariable variable, void *value) -{ - NPError rv = NPP_SetValue(instance, variable, value); - return rv; -} - -#endif //XP_MAC diff --git a/applications/osmozilla/npplat.h b/applications/osmozilla/npplat.h deleted file mode 100644 index d80dd88..0000000 --- a/applications/osmozilla/npplat.h +++ /dev/null @@ -1,151 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: NPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Netscape Public License - * Version 1.1 (the "License"); you may not use this file except in - * compliance with the License. You may obtain a copy of the License at - * http://www.mozilla.org/NPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is mozilla.org code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 1998 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the NPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the NPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#ifndef _NPPLAT_H_ -#define _NPPLAT_H_ - -/**************************************************/ -/* */ -/* Windows */ -/* */ -/**************************************************/ - -#ifdef WIN32 -#include -#endif - -#include "npapi.h" -#include "npupp.h" - -/**************************************************/ -/* */ -/* Unix */ -/* */ -/**************************************************/ -#ifdef XP_UNIX -#include -#endif //XP_UNIX - -/**************************************************/ -/* */ -/* Mac */ -/* */ -/**************************************************/ -#ifdef XP_MAC - -#include -#include -#include -#include -#include -#include - -#include "jri.h" - -// The Mixed Mode procInfos defined in npupp.h assume Think C- -// style calling conventions. These conventions are used by -// Metrowerks with the exception of pointer return types, which -// in Metrowerks 68K are returned in A0, instead of the standard -// D0. Thus, since NPN_MemAlloc and NPN_UserAgent return pointers, -// Mixed Mode will return the values to a 68K plugin in D0, but -// a 68K plugin compiled by Metrowerks will expect the result in -// A0. The following pragma forces Metrowerks to use D0 instead. -// -#ifdef __MWERKS__ -#ifndef powerc -#pragma pointers_in_D0 -#endif -#endif - -#ifdef __MWERKS__ -#ifndef powerc -#pragma pointers_in_A0 -#endif -#endif - -// The following fix for static initializers (which fixes a preious -// incompatibility with some parts of PowerPlant, was submitted by -// Jan Ulbrich. -#ifdef __MWERKS__ - #ifdef __cplusplus - extern "C" { - #endif - #ifndef powerc - extern void __InitCode__(void); - #else - extern void __sinit(void); - #define __InitCode__ __sinit - #endif - extern void __destroy_global_chain(void); - #ifdef __cplusplus - } - #endif // __cplusplus -#endif // __MWERKS__ - -// Wrapper functions for all calls from Netscape to the plugin. -// These functions let the plugin developer just create the APIs -// as documented and defined in npapi.h, without needing to -// install those functions in the function table or worry about -// setting up globals for 68K plugins. -NPError Private_Initialize(void); -void Private_Shutdown(void); -NPError Private_New(NPMIMEType pluginType, NPP instance, uint16 mode, int16 argc, char* argn[], char* argv[], NPSavedData* saved); -NPError Private_Destroy(NPP instance, NPSavedData** save); -NPError Private_SetWindow(NPP instance, NPWindow* window); -NPError Private_NewStream(NPP instance, NPMIMEType type, NPStream* stream, NPBool seekable, uint16* stype); -NPError Private_DestroyStream(NPP instance, NPStream* stream, NPError reason); -int32 Private_WriteReady(NPP instance, NPStream* stream); -int32 Private_Write(NPP instance, NPStream* stream, int32 offset, int32 len, void* buffer); -void Private_StreamAsFile(NPP instance, NPStream* stream, const char* fname); -void Private_Print(NPP instance, NPPrint* platformPrint); -int16 Private_HandleEvent(NPP instance, void* event); -void Private_URLNotify(NPP instance, const char* url, NPReason reason, void* notifyData); -jref Private_GetJavaClass(void); -NPError Private_GetValue(NPP instance, NPPVariable variable, void *result); -NPError Private_SetValue(NPP instance, NPNVariable variable, void *value); - -#endif //XP_MAC - -#ifndef HIBYTE -#define HIBYTE(i) (i >> 8) -#endif - -#ifndef LOBYTE -#define LOBYTE(i) (i & 0xff) -#endif - -#endif //_NPPLAT_H_ diff --git a/applications/osmozilla/nsIOsmozilla.h b/applications/osmozilla/nsIOsmozilla.h index fdd4ccc..15869d4 100644 --- a/applications/osmozilla/nsIOsmozilla.h +++ b/applications/osmozilla/nsIOsmozilla.h @@ -1,10 +1,13 @@ /* - * DO NOT EDIT. THIS FILE IS GENERATED FROM nsIOsmozilla.idl - */ +* DO NOT EDIT. THIS FILE IS GENERATED FROM nsIOsmozilla.idl +*/ #ifndef __gen_nsIOsmozilla_h__ #define __gen_nsIOsmozilla_h__ +#include "osmo_npapi.h" + +#ifdef GECKO_XPCOM #ifndef __gen_nsISupports_h__ #include "nsISupports.h" @@ -20,47 +23,47 @@ #define NS_IOSMOZILLA_IID \ {0xd2d536a0, 0xb6fc, 0x11d5, \ - { 0x9d, 0x10, 0x00, 0x60, 0xb0, 0xfb, 0xd8, 0x0b }} + { 0x9d, 0x10, 0x00, 0x60, 0xb0, 0xfb, 0xd8, 0x0b }} class NS_NO_VTABLE nsIOsmozilla : public nsISupports { - public: +public: - NS_DEFINE_STATIC_IID_ACCESSOR(NS_IOSMOZILLA_IID) + NS_DEFINE_STATIC_IID_ACCESSOR(NS_IOSMOZILLA_IID) - /* void Pause (); */ - NS_IMETHOD Pause(void) = 0; + /* void Pause (); */ + NS_IMETHOD Pause(void) = 0; - /* void Play (); */ - NS_IMETHOD Play(void) = 0; + /* void Play (); */ + NS_IMETHOD Play(void) = 0; - /* void Stop (); */ - NS_IMETHOD Stop(void) = 0; + /* void Stop (); */ + NS_IMETHOD Stop(void) = 0; - /* void Update (in string type, in string commands); */ - NS_IMETHOD Update(const char *type, const char *commands) = 0; + /* void Update (in string type, in string commands); */ + NS_IMETHOD Update(const char *type, const char *commands) = 0; }; /* Use this macro when declaring classes that implement this interface. */ #define NS_DECL_NSIOSMOZILLA \ - NS_IMETHOD Pause(void); \ - NS_IMETHOD Play(void); \ - NS_IMETHOD Stop(void); \ - NS_IMETHOD Update(const char *type, const char *commands); + NS_IMETHOD Pause(void); \ + NS_IMETHOD Play(void); \ + NS_IMETHOD Stop(void); \ + NS_IMETHOD Update(const char *type, const char *commands); /* Use this macro to declare functions that forward the behavior of this interface to another object. */ #define NS_FORWARD_NSIOSMOZILLA(_to) \ - NS_IMETHOD Pause(void) { return _to Pause(); } \ - NS_IMETHOD Play(void) { return _to Play(); } \ - NS_IMETHOD Stop(void) { return _to Stop(); } \ - NS_IMETHOD Update(const char *type, const char *commands) { return _to Update(type, commands); } + NS_IMETHOD Pause(void) { return _to Pause(); } \ + NS_IMETHOD Play(void) { return _to Play(); } \ + NS_IMETHOD Stop(void) { return _to Stop(); } \ + NS_IMETHOD Update(const char *type, const char *commands) { return _to Update(type, commands); } /* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */ #define NS_FORWARD_SAFE_NSIOSMOZILLA(_to) \ - NS_IMETHOD Pause(void) { return !_to ? NS_ERROR_NULL_POINTER : _to->Pause(); } \ - NS_IMETHOD Play(void) { return !_to ? NS_ERROR_NULL_POINTER : _to->Play(); } \ - NS_IMETHOD Stop(void) { return !_to ? NS_ERROR_NULL_POINTER : _to->Stop(); } \ - NS_IMETHOD Update(const char *type, const char *commands) { return !_to ? NS_ERROR_NULL_POINTER : _to->Update(type, commands); } + NS_IMETHOD Pause(void) { return !_to ? NS_ERROR_NULL_POINTER : _to->Pause(); } \ + NS_IMETHOD Play(void) { return !_to ? NS_ERROR_NULL_POINTER : _to->Play(); } \ + NS_IMETHOD Stop(void) { return !_to ? NS_ERROR_NULL_POINTER : _to->Stop(); } \ + NS_IMETHOD Update(const char *type, const char *commands) { return !_to ? NS_ERROR_NULL_POINTER : _to->Update(type, commands); } #if 0 /* Use the code below as a template for the implementation class for this interface. */ @@ -69,12 +72,12 @@ class NS_NO_VTABLE nsIOsmozilla : public nsISupports { class nsOsmozilla : public nsIOsmozilla { public: - NS_DECL_ISUPPORTS - NS_DECL_NSIOSMOZILLA + NS_DECL_ISUPPORTS + NS_DECL_NSIOSMOZILLA - nsOsmozilla(); - virtual ~nsOsmozilla(); - /* additional members */ + nsOsmozilla(); + virtual ~nsOsmozilla(); + /* additional members */ }; /* Implementation file */ @@ -82,40 +85,41 @@ NS_IMPL_ISUPPORTS1(nsOsmozilla, nsIOsmozilla) nsOsmozilla::nsOsmozilla() { - /* member initializers and constructor code */ + /* member initializers and constructor code */ } nsOsmozilla::~nsOsmozilla() { - /* destructor code */ + /* destructor code */ } /* void Pause (); */ NS_IMETHODIMP nsOsmozilla::Pause() { - return NS_ERROR_NOT_IMPLEMENTED; + return NS_ERROR_NOT_IMPLEMENTED; } /* void Play (); */ NS_IMETHODIMP nsOsmozilla::Play() { - return NS_ERROR_NOT_IMPLEMENTED; + return NS_ERROR_NOT_IMPLEMENTED; } /* void Stop (); */ NS_IMETHODIMP nsOsmozilla::Stop() { - return NS_ERROR_NOT_IMPLEMENTED; + return NS_ERROR_NOT_IMPLEMENTED; } /* void Update (in string type, in string commands); */ NS_IMETHODIMP nsOsmozilla::Update(const char *type, const char *commands) { - return NS_ERROR_NOT_IMPLEMENTED; + return NS_ERROR_NOT_IMPLEMENTED; } /* End of implementation class template. */ #endif +#endif //GECKO_XPCOM #endif /* __gen_nsIOsmozilla_h__ */ diff --git a/applications/osmozilla/osmo_npapi.cpp b/applications/osmozilla/osmo_npapi.cpp new file mode 100644 index 0000000..6e11664 --- /dev/null +++ b/applications/osmozilla/osmo_npapi.cpp @@ -0,0 +1,773 @@ +/* +* GPAC - Multimedia Framework C SDK +* +* Copyright (c) ENST 2000-200X +* All rights reserved +* +* This file is part of GPAC / Osmozilla NPAPI plugin +* +* GPAC is free software; you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation; either version 2, or (at your option) +* any later version. +* +* GPAC 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 Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with this library; see the file COPYING. If not, write to +* the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +* +*/ + + +//////////////////////////////////////////////////////////// +// +// Implementation of Netscape entry points (NPN_*) +// +#include "osmo_npapi.h" +#include "osmozilla.h" + +#if defined(XP_UNIX) && !defined(XP_MACOS) +#include +#include +#endif + +NPNetscapeFuncs *sBrowserFunctions = NULL; + +NPError Osmozilla_GetURL(NPP instance, const char *url, const char *target) +{ + if (!sBrowserFunctions) return NPERR_INVALID_FUNCTABLE_ERROR; + return sBrowserFunctions->geturl(instance, url, target); +} + +void Osmozilla_SetStatus(NPP instance, const char *message) +{ + if (!sBrowserFunctions) return; + sBrowserFunctions->status(instance, message); +} + +#ifndef GECKO_XPCOM +void Osmozilla_InitScripting(Osmozilla *osmo); +#endif + +NPError NPOsmozilla_New(NPMIMEType pluginType, NPP instance, uint16_t mode, int16_t argc, char* argn[], char* argv[], NPSavedData* saved) +{ + Osmozilla *osmo; + NPError rv = NPERR_NO_ERROR; + if(instance == NULL) + return NPERR_INVALID_INSTANCE_ERROR; + + + osmo = (Osmozilla *) malloc(sizeof(Osmozilla)); + memset(osmo, 0, sizeof(Osmozilla)); + + osmo->np_instance = instance; + // associate the plugin instance object with NPP instance + instance->pdata = (void *)osmo; + + Osmozilla_Initialize(osmo, argc, argn, argv); + +#ifndef GECKO_XPCOM + Osmozilla_InitScripting(osmo); +#endif + + return rv; +} + +// here is the place to clean up and destroy the nsPluginInstance object +NPError NPOsmozilla_Destroy (NPP instance, NPSavedData** save) +{ + NPError rv = NPERR_NO_ERROR; + Osmozilla *osmozilla; + if(instance == NULL) + return NPERR_INVALID_INSTANCE_ERROR; + + osmozilla = (Osmozilla*)instance->pdata; + if (osmozilla != NULL) { + Osmozilla_Shutdown(osmozilla); +#ifdef GECKO_XPCOM + NPOsmozilla_ShutdownScript(osmozilla); +#else + if (osmozilla->script_obj) sBrowserFunctions->releaseobject(osmozilla->script_obj); + osmozilla->script_obj = NULL; +#endif + + free(osmozilla); + } + instance->pdata = NULL; + return rv; +} + +// during this call we know when the plugin window is ready or +// is about to be destroyed so we can do some gui specific +// initialization and shutdown +NPError NPOsmozilla_SetWindow (NPP instance, NPWindow* pNPWindow) +{ + Osmozilla *osmozilla; + void *os_wnd_handle, *os_wnd_display; + NPError rv = NPERR_NO_ERROR; + + if (!instance || !instance->pdata) return NPERR_INVALID_INSTANCE_ERROR; + if (pNPWindow == NULL) return NPERR_GENERIC_ERROR; + osmozilla = (Osmozilla *)instance->pdata; + + // window just created + if (!osmozilla->window_set) { + if (pNPWindow->window == NULL) return NPERR_GENERIC_ERROR; + +#ifdef XP_WIN + os_wnd_handle = pNPWindow->window; + os_wnd_display = NULL; +#elif defined(XP_MAXOS) + os_wnd_handle = pNPWindow->window; + os_wnd_display = NULL; +#elif defined(XP_UNIX) + os_wnd_handle = pNPWindow->window; + /*HACK - although we don't use the display in the X11 plugin, this is used to signal that + the user is mozilla and prevent some X11 calls crashing the browser in file playing mode + (eg, "firefox myfile.mp4" )*/ + os_wnd_display =((NPSetWindowCallbackStruct *)pNPWindow->ws_info)->display; +#endif + + if (! Osmozilla_SetWindow(osmozilla, os_wnd_handle, os_wnd_display, pNPWindow->width, pNPWindow->height) ) { + return NPERR_MODULE_LOAD_FAILED_ERROR; + } + + } + +#if 0 + // window goes away + if((pNPWindow->window == NULL) && plugin->isInitialized()) + return plugin->SetWindow(pNPWindow); + + // window resized? + if(plugin->isInitialized() && (pNPWindow->window != NULL)) + return plugin->SetWindow(pNPWindow); + + // this should not happen, nothing to do + if((pNPWindow->window == NULL) && !plugin->isInitialized()) + return plugin->SetWindow(pNPWindow); +#endif + + return rv; +} + +NPError NPOsmozilla_NewStream(NPP instance, NPMIMEType type, NPStream* stream, NPBool seekable, uint16_t *stype) +{ + Osmozilla *osmozilla; + if(instance == NULL) + return NPERR_INVALID_INSTANCE_ERROR; + + osmozilla = (Osmozilla *)instance->pdata; + if(osmozilla== NULL) + return NPERR_GENERIC_ERROR; + + Osmozilla_ConnectTo(osmozilla, stream->url); + *stype = NP_SEEK; + return NPERR_NO_ERROR; +} + +NPINT32 NPOsmozilla_WriteReady (NPP instance, NPStream *stream) +{ + return 0x0fffffff; +} + +NPINT32 NPOsmozilla_Write (NPP instance, NPStream *stream, NPINT32 offset, NPINT32 len, void *buffer) +{ + return len; +} + +NPError NPOsmozilla_DestroyStream (NPP instance, NPStream *stream, NPError reason) +{ + return NPERR_NO_ERROR; +} + +void NPOsmozilla_StreamAsFile (NPP instance, NPStream* stream, const char* fname) +{ +} + +void NPOsmozilla_Print (NPP instance, NPPrint* printInfo) +{ + Osmozilla *osmozilla; + if(instance == NULL) + return; + + osmozilla = (Osmozilla *)instance->pdata; + if(osmozilla== NULL) + return; + + Osmozilla_Print(osmozilla, (printInfo->mode == NP_EMBED) ? 1 : 0, printInfo->print.embedPrint.platformPrint, + printInfo->print.embedPrint.window.x, printInfo->print.embedPrint.window.y, + printInfo->print.embedPrint.window.width, printInfo->print.embedPrint.window.height); +} + +void NPOsmozilla_URLNotify(NPP instance, const char* url, NPReason reason, void* notifyData) +{ + return; +} + +NPError NPOsmozilla_GetValue(NPP instance, NPPVariable variable, void *value) +{ + NPError rv = NPERR_NO_ERROR; + Osmozilla *osmozilla; + if(instance == NULL) + return NPERR_INVALID_INSTANCE_ERROR; + + osmozilla = (Osmozilla *)instance->pdata; + if(osmozilla== NULL) return NPERR_GENERIC_ERROR; + + switch (variable) { +#ifdef GECKO_XPCOM + case NPPVpluginScriptableInstance: + rv = NPOsmozilla_GetPeer(osmozilla, value); + break; + + case NPPVpluginScriptableIID: + rv = NPOsmozilla_GetPeerIID(osmozilla, value); + break; +#else + + case NPPVpluginScriptableNPObject: + sBrowserFunctions->retainobject(osmozilla->script_obj); + * (void **)value = osmozilla->script_obj; + break; + +#endif + case NPPVpluginNameString : + *(const char**)value = "Osmozilla/GPAC plugin for NPAPI"; + break; + default: + break; + } + + return rv; +} + + + +NPError NPOsmozilla_SetValue(NPP instance, NPNVariable variable, void *value) +{ + return NPERR_NO_ERROR; +} + +int16_t NPOsmozilla_HandleEvent(NPP instance, void* event) +{ + /*we hacked the proc*/ + return 0; +} + + +NPError OSCALL NP_Shutdown() +{ +#ifdef GECKO_XPCOM + NPOsmozilla_ReleaseServiceManager(); +#endif + return NPERR_NO_ERROR; +} + +static NPError fillPluginFunctionTable(NPPluginFuncs* aNPPFuncs) +{ + if(aNPPFuncs == NULL) + return NPERR_INVALID_FUNCTABLE_ERROR; + + // Set up the plugin function table that Netscape will use to + // call us. Netscape needs to know about our version and size + // and have a UniversalProcPointer for every function we implement. + + aNPPFuncs->version = (NP_VERSION_MAJOR << 8) | NP_VERSION_MINOR; + aNPPFuncs->newp = NPOsmozilla_New; + aNPPFuncs->destroy = NPOsmozilla_Destroy; + aNPPFuncs->setwindow = NPOsmozilla_SetWindow; + aNPPFuncs->newstream = NPOsmozilla_NewStream; + aNPPFuncs->destroystream = NPOsmozilla_DestroyStream; + aNPPFuncs->asfile = NPOsmozilla_StreamAsFile; + aNPPFuncs->writeready = NPOsmozilla_WriteReady; + aNPPFuncs->write = NPOsmozilla_Write; + aNPPFuncs->print = NPOsmozilla_Print; + aNPPFuncs->event = NPOsmozilla_HandleEvent; + aNPPFuncs->urlnotify = NPOsmozilla_URLNotify; + aNPPFuncs->getvalue = NPOsmozilla_GetValue; + aNPPFuncs->setvalue = NPOsmozilla_SetValue; + return NPERR_NO_ERROR; +} + + +static NPError NS_PluginInitialize() +{ +#ifdef GECKO_XPCOM + NPOsmozilla_GetServiceManager(); +#endif + return NPERR_NO_ERROR; +} + +// get values per plugin +NPError NS_PluginGetValue(NPPVariable aVariable, void *aValue) +{ + NPError err = NPERR_NO_ERROR; + switch (aVariable) { + case NPPVpluginNameString: + *((char **)aValue) = (char *) "Osmozilla"; + break; + case NPPVpluginDescriptionString: + *((char **)aValue) = Osmozilla_GetVersion(); + break; + default: + err = NPERR_INVALID_PARAM; + break; + } + return err; +} + + + + +#define GPAC_PLUGIN_MIMETYPES \ + "audio/mpeg:mp2,mp3,mpga,mpega:MP3 Music;" \ + "audio/x-mpeg:mp2,mp3,mpga,mpega:MP3 Music;" \ + "audio/amr:amr,awb:AMR Audio;" \ + "audio/mp4:mp4,mpg4,mpeg4,m4a:MPEG-4 Audio;" \ + "audio/aac:aac:MPEG-4 AAC Music;" \ + "audio/aacp:aac:MPEG-4 AACPlus Music;" \ + "audio/basic:snd,au:Basic Audio;" \ + "audio/x-wav:wav:WAV Audio;" \ + "audio/3gpp:3gp,3gpp:3GPP/MMS Music;" \ + "audio/3gpp2:3g2,3gp2:3GPP2/MMS Music;" \ + "video/mpeg:mpg,mpeg,mpe,mpv2:MPEG Video;" \ + "video/x-mpeg:mpg,mpeg,mpe,mpv2:MPEG Video;" \ + "video/mpeg-system:mpg,mpeg,mpe,vob,mpv2:MPEG Video;" \ + "video/x-mpeg-system:mpg,mpeg,mpe,vob,mpv2:MPEG Video;" \ + "video/avi:avi:AVI Video;" \ + "video/quicktime:mov,qt:QuickTime Movies;" \ + "video/x-ms-asf:asf,asx:Windows Media Video;" \ + "video/x-ms-wmv:wmv:Windows Media;" \ + "video/mp4:mp4,mpg4:MPEG-4 Video;" \ + "video/3gpp:3gp,3gpp:3GPP/MMS Video;" \ + "video/3gpp2:3g2,3gp2:3GPP2/MMS Video;" \ + "image/jpeg:jpeg,jpg:JPEG Images;" \ + "image/png:png:PNG Images;" \ + "image/bmp:bmp:MS Bitmap Images;" \ + "image/svg+xml:svg,svg.gz,svgz:SVG Document;" \ + "image/x-svgm:svgm:SVGM Document;" \ + "x-subtitle/srt:srt:SRT SubTitles;" \ + "x-subtitle/sub:sub:SUB SubTitles;" \ + "x-subtitle/ttxt:ttxt:GPAC 3GPP TimedText;" \ + "model/vrml:wrl,wrl.gz:VRML World;" \ + "model/x3d+vrml:x3dv,x3dv.gz,x3dvz:X3D/VRML World;" \ + "model/x3d+xml:x3d,x3d.gz,x3dz:X3D/XML World;" \ + "application/ogg:ogg:Ogg Media;" \ + "application/x-ogg:ogg:Ogg Media;" \ + "application/x-bt:bt,bt.gz,btz:MPEG-4 Text (BT);" \ + "application/x-xmt:xmt,xmt.gz,xmtz:MPEG-4 Text (XMT);" \ + "application/mp4:mp4,mpg4:MPEG-4 Movies;" \ + "application/sdp:sdp:Streaming Media Session;" \ + /* explicit plugin call */ \ + "application/x-gpac::GPAC plugin;" \ + +char * NP_GetMIMEDescription(void) +{ + return (char *) GPAC_PLUGIN_MIMETYPES; +} + + +NPError NP_GetValue(void *future, NPPVariable aVariable, void *aValue) +{ + return NS_PluginGetValue(aVariable, aValue); +} + + +#if defined(XP_WIN) || defined(XP_MACOS) + +NPError OSCALL NP_Initialize(NPNetscapeFuncs* aNPNFuncs) +{ + sBrowserFunctions = aNPNFuncs; + + return NS_PluginInitialize(); +} + +NPError OSCALL NP_GetEntryPoints(NPPluginFuncs* aNPPFuncs) +{ + return fillPluginFunctionTable(aNPPFuncs); +} + + +#elif defined(XP_UNIX) + +NPError OSCALL NP_Initialize(NPNetscapeFuncs* aNPNFuncs, NPPluginFuncs* aNPPFuncs) +{ + NPError rv; + sBrowserFunctions = aNPNFuncs; + rv = fillPluginFunctionTable(aNPPFuncs); + if(rv != NPERR_NO_ERROR) + return rv; + + return NS_PluginInitialize(); +} +#endif + + +#ifdef GECKO_XPCOM + + +#include +#include +#include +#include +#include + +#include "nsIOsmozilla.h" + +#include "osmozilla.h" + + +nsIServiceManager *gServiceManager = NULL; + + +// We must implement nsIClassInfo because it signals the +// Mozilla Security Manager to allow calls from JavaScript. +// helper class to implement all necessary nsIClassInfo method stubs +// and to set flags used by the security system + +class nsClassInfoMixin : public nsIClassInfo +{ + // These flags are used by the DOM and security systems to signal that + // JavaScript callers are allowed to call this object's scritable methods. + NS_IMETHOD GetFlags(PRUint32 *aFlags) + {*aFlags = nsIClassInfo::PLUGIN_OBJECT | nsIClassInfo::DOM_OBJECT; + return NS_OK;} + + NS_IMETHOD GetImplementationLanguage(PRUint32 *aImplementationLanguage) + {*aImplementationLanguage = nsIProgrammingLanguage::CPLUSPLUS; + return NS_OK;} + + // The rest of the methods can safely return error codes... + NS_IMETHOD GetInterfaces(PRUint32 *count, nsIID * **array) + {return NS_ERROR_NOT_IMPLEMENTED;} + NS_IMETHOD GetHelperForLanguage(PRUint32 language, nsISupports **_retval) + {return NS_ERROR_NOT_IMPLEMENTED;} + NS_IMETHOD GetContractID(char * *aContractID) + {return NS_ERROR_NOT_IMPLEMENTED;} + NS_IMETHOD GetClassDescription(char * *aClassDescription) + {return NS_ERROR_NOT_IMPLEMENTED;} + NS_IMETHOD GetClassID(nsCID * *aClassID) + {return NS_ERROR_NOT_IMPLEMENTED;} + NS_IMETHOD GetClassIDNoAlloc(nsCID *aClassIDNoAlloc) + {return NS_ERROR_NOT_IMPLEMENTED;} +}; + + +class nsOsmozillaPeer : public nsIOsmozilla , public nsClassInfoMixin +{ +public: + nsOsmozillaPeer(Osmozilla *osmo); + virtual ~nsOsmozillaPeer(); + + // methods from nsISupports + NS_IMETHOD QueryInterface(const nsIID & aIID, void **aInstancePtr); + NS_IMETHOD_(nsrefcnt) AddRef(); + NS_IMETHOD_(nsrefcnt) Release(); + +public: + NS_DECL_NSIOSMOZILLA + void SetInstance(Osmozilla *osmo); + +protected: + nsrefcnt mRefCnt; + Osmozilla *mPlugin; +}; + + +static NS_DEFINE_IID(kIZillaPluginIID, NS_IOSMOZILLA_IID); +static NS_DEFINE_IID(kIClassInfoIID, NS_ICLASSINFO_IID); +static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID); + +nsOsmozillaPeer::nsOsmozillaPeer(Osmozilla *osmo) +{ + mPlugin=osmo; + mRefCnt = 0; +} + +nsOsmozillaPeer::~nsOsmozillaPeer() +{ +} +// Notice that we expose our claim to implement nsIClassInfo. +//NS_IMPL_ISUPPORTS2(nsOsmozillaPeer, nsITestPlugin, nsIClassInfo) + +// the following method will be callable from JavaScript +NS_IMETHODIMP nsOsmozillaPeer::Pause() { + Osmozilla_Pause(mPlugin); + return NS_OK; +} +NS_IMETHODIMP nsOsmozillaPeer::Play() { + Osmozilla_Play(mPlugin); + return NS_OK; +} +NS_IMETHODIMP nsOsmozillaPeer::Stop() { + Osmozilla_Stop(mPlugin); + return NS_OK; +} + +NS_IMETHODIMP nsOsmozillaPeer::Update(const char *type, const char *commands) +{ + Osmozilla_Update(mPlugin, type, commands); + return NS_OK; +} + +void nsOsmozillaPeer::SetInstance(Osmozilla *osmo) +{ + mPlugin = osmo; +} + +NS_IMETHODIMP_(nsrefcnt) nsOsmozillaPeer::AddRef() +{ + ++mRefCnt; + return mRefCnt; +} + +NS_IMETHODIMP_(nsrefcnt) nsOsmozillaPeer::Release() +{ + --mRefCnt; + if (mRefCnt == 0) { + delete this; + return 0; + } + return mRefCnt; +} + +// here nsOsmozillaPeer should return three interfaces it can be asked for by their iid's +// static casts are necessary to ensure that correct pointer is returned +NS_IMETHODIMP nsOsmozillaPeer::QueryInterface(const nsIID & aIID, + void **aInstancePtr) +{ + if (!aInstancePtr) + return NS_ERROR_NULL_POINTER; + + if (aIID.Equals(kIZillaPluginIID)) { + *aInstancePtr = NS_STATIC_CAST(nsIOsmozilla *, this); + AddRef(); + return NS_OK; + } + + if (aIID.Equals(kIClassInfoIID)) { + *aInstancePtr = NS_STATIC_CAST(nsIClassInfo *, this); + AddRef(); + return NS_OK; + } + + if (aIID.Equals(kISupportsIID)) { + *aInstancePtr = NS_STATIC_CAST(nsISupports *, (NS_STATIC_CAST (nsIOsmozilla *, this))); + AddRef(); + return NS_OK; + } + return NS_NOINTERFACE; +} + + +extern NPNetscapeFuncs *sBrowserFunctions; + +void NPOsmozilla_GetServiceManager() +{ + // this is probably a good place to get the service manager + // note that Mozilla will add reference, so do not forget to release + nsISupports *sm = NULL; + + if (!sBrowserFunctions) return; + sBrowserFunctions->getvalue(NULL, NPNVserviceManager, &sm); + + // Mozilla returns nsIServiceManager so we can use it directly; doing QI on + // nsISupports here can still be more appropriate in case something is changed + // in the future so we don't need to do casting of any sort. + if (sm) { + sm->QueryInterface(NS_GET_IID(nsIServiceManager), (void **) &gServiceManager); + NS_RELEASE(sm); + } +} + +void NPOsmozilla_ReleaseServiceManager() +{ +#ifdef GECKO_XPCOM + // we should release the service manager + NS_IF_RELEASE(gServiceManager); + gServiceManager = NULL; +#endif +} + +void NPOsmozilla_ShutdownScript(Osmozilla *osmo) +{ + nsOsmozillaPeer *peer = (nsOsmozillaPeer *) osmo->scriptable_peer; + if (peer != NULL) { + peer->SetInstance(NULL); + NS_IF_RELEASE(peer); + } +} + + +NPError NPOsmozilla_GetPeer(Osmozilla *osmo, void *value) +{ + if (!osmo->scriptable_peer) { + osmo->scriptable_peer = new nsOsmozillaPeer(osmo); + if (!osmo->scriptable_peer) return NPERR_OUT_OF_MEMORY_ERROR; + NS_ADDREF( (nsOsmozillaPeer *) osmo->scriptable_peer); + } + + NS_ADDREF( (nsOsmozillaPeer *)osmo->scriptable_peer); + *(nsISupports **) value = (nsISupports *) osmo->scriptable_peer; + return NPERR_NO_ERROR; +} + +NPError NPOsmozilla_GetPeerIID(Osmozilla *osmo, void *value) +{ + static nsIID scriptableIID = NS_IOSMOZILLA_IID; + if (!sBrowserFunctions) return NPERR_OUT_OF_MEMORY_ERROR; + + nsIID *ptr = (nsIID *) sBrowserFunctions->memalloc( sizeof(nsIID) ); + if (! ptr) return NPERR_OUT_OF_MEMORY_ERROR; + + *ptr = scriptableIID; + *(nsIID **) value = ptr; + return NPERR_NO_ERROR; +} + +#else + +#define kOSMOZILLA_ID_METHOD_PLAY 0 +#define kOSMOZILLA_ID_METHOD_PAUSE 1 +#define kOSMOZILLA_ID_METHOD_STOP 2 +#define kOSMOZILLA_ID_METHOD_UPDATE 3 + +#define kOSMOZILLA_NUM_METHODS 4 + +NPIdentifier v_OSMOZILLA_MethodIdentifiers[kOSMOZILLA_NUM_METHODS]; +const NPUTF8 * v_OSMOZILLA_MethodNames[kOSMOZILLA_NUM_METHODS] = { + "Play", + "Pause", + "Stop", + "Update" +}; + +NPClass osmozilla_script_class; + +typedef struct { + NPClass *_class; + uint32_t referenceCount; + Osmozilla *osmo; +} OsmozillaObject; + +NPObject *OSMOZILLA_Allocate(NPP npp, NPClass *theClass) +{ + OsmozillaObject *obj = NULL; + + sBrowserFunctions->getstringidentifiers(v_OSMOZILLA_MethodNames, kOSMOZILLA_NUM_METHODS, v_OSMOZILLA_MethodIdentifiers); + obj = (OsmozillaObject *)malloc(sizeof(OsmozillaObject)); + obj->osmo = (Osmozilla *) npp->pdata; + return (NPObject *)obj; +} + +void OSMOZILLA_Deallocate(NPObject* obj) +{ + free(obj); + return; +} + +void OSMOZILLA_Invalidate(NPObject* obj) +{ + return; +} + +bool OSMOZILLA_HasMethod(NPObject* obj, NPIdentifier name) +{ + int i = 0; + while (i < kOSMOZILLA_NUM_METHODS) { + if ( name == v_OSMOZILLA_MethodIdentifiers[i] ) { + return 1; + } + i++; + } + return 0; +} + +bool OSMOZILLA_Invoke(NPObject* obj, NPIdentifier name, const NPVariant* args, uint32_t argCount, NPVariant* result) +{ + OsmozillaObject *npo = (OsmozillaObject *)obj; + if (!npo->osmo) return 0; + if (name == v_OSMOZILLA_MethodIdentifiers[kOSMOZILLA_ID_METHOD_PLAY]) { + Osmozilla_Play(npo->osmo); + return 1; + } + if (name == v_OSMOZILLA_MethodIdentifiers[kOSMOZILLA_ID_METHOD_PAUSE]) { + Osmozilla_Pause(npo->osmo); + return 1; + } + if (name == v_OSMOZILLA_MethodIdentifiers[kOSMOZILLA_ID_METHOD_STOP]) { + Osmozilla_Stop(npo->osmo); + return 1; + } + if (name == v_OSMOZILLA_MethodIdentifiers[kOSMOZILLA_ID_METHOD_UPDATE]) { + const char *mime = NULL; + const char *update = NULL; + if (argCount==2) { + mime = (args[0].type==NPVariantType_String) ? args[0].value.stringValue.UTF8Characters : NULL; + update = (args[1].type==NPVariantType_String) ? args[1].value.stringValue.UTF8Characters : NULL; + } + if (!update) return 0; + Osmozilla_Update(npo->osmo, mime, update); + return 1; + } + return 0; +} + +bool OSMOZILLA_InvokeDefault(NPObject *npobj, const NPVariant *args, uint32_t argCount, NPVariant *result) +{ + return 1; +} + +bool OSMOZILLA_HasProperty(NPObject* obj, NPIdentifier name) +{ + bool result = 0; + /*nothing exposed yet*/ + return result; +} + +bool OSMOZILLA_GetProperty(NPObject* obj, NPIdentifier name, NPVariant* result) +{ + return 1; +} + +bool OSMOZILLA_SetProperty(NPObject *obj, NPIdentifier name, const NPVariant *value) +{ + return 1; +} + +bool OSMOZILLA_RemoveProperty(NPObject *npobj, NPIdentifier name) +{ + return 1; +} + +bool OSMOZILLA_Enumerate(NPObject *npobj, NPIdentifier **value, uint32_t *count) +{ + return 1; +} + +void Osmozilla_InitScripting(Osmozilla *osmo) +{ + osmozilla_script_class.allocate = OSMOZILLA_Allocate; + osmozilla_script_class.deallocate = OSMOZILLA_Deallocate; + osmozilla_script_class.invalidate = OSMOZILLA_Invalidate; + osmozilla_script_class.hasMethod = OSMOZILLA_HasMethod; + osmozilla_script_class.invoke = OSMOZILLA_Invoke; + osmozilla_script_class.invokeDefault = OSMOZILLA_InvokeDefault; + osmozilla_script_class.hasProperty = OSMOZILLA_HasProperty; + osmozilla_script_class.getProperty = OSMOZILLA_GetProperty; + osmozilla_script_class.setProperty = OSMOZILLA_SetProperty; + osmozilla_script_class.removeProperty = OSMOZILLA_RemoveProperty; + osmozilla_script_class.enumerate = OSMOZILLA_Enumerate; + + /*create script object*/ + osmo->script_obj = sBrowserFunctions->createobject(osmo->np_instance, &osmozilla_script_class); + +} + +#endif //GECKO_XPCOM + diff --git a/applications/osmozilla/osmo_npapi.h b/applications/osmozilla/osmo_npapi.h new file mode 100644 index 0000000..cd2c3bf --- /dev/null +++ b/applications/osmozilla/osmo_npapi.h @@ -0,0 +1,133 @@ +/* +* GPAC - Multimedia Framework C SDK +* +* Copyright (c) ENST 2000-200X +* All rights reserved +* +* This file is part of GPAC / Osmozilla NPAPI plugin +* +* GPAC is free software; you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation; either version 2, or (at your option) +* any later version. +* +* GPAC 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 Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with this library; see the file COPYING. If not, write to +* the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +* +*/ + +#ifndef _OSMO_NPAPI_H_ +#define _OSMO_NPAPI_H_ + + +#ifdef WIN32 +#include +#ifndef __cplusplus +typedef BOOL bool; +#endif //__cplusplus +#endif + +#include "npapi.h" + +/*check this with gecko 1.9.2*/ +#if (NP_VERSION_MINOR < 20) +#define GECKO_XPCOM +#endif + +#ifdef GECKO_XPCOM +#include "npupp.h" + +#ifndef uint16_t +typedef uint16 uint16_t; +#endif + +#ifndef int16_t +typedef int16 int16_t; +#endif + +#define NPINT32 int32 + +#else + +#include "npfunctions.h" + +#define NPINT32 int32_t + +#endif + +#ifdef XP_UNIX +#include +#endif //XP_UNIX + + +#ifndef HIBYTE +#define HIBYTE(i) (i >> 8) +#endif + +#ifndef LOBYTE +#define LOBYTE(i) (i & 0xff) +#endif + +/*functions callbacks to browser*/ +NPError Osmozilla_GetURL(NPP instance, const char *url, const char *target); +void Osmozilla_SetStatus(NPP instance, const char *message); + + +/* +Plugins functions exposed to browser +*/ +NPError NPOsmozilla_New(NPMIMEType pluginType, NPP instance, uint16_t mode, int16_t argc, char* argn[], char* argv[], NPSavedData* saved); +NPError NPOsmozilla_Destroy(NPP instance, NPSavedData** save); +NPError NPOsmozilla_SetWindow(NPP instance, NPWindow* window); +NPError NPOsmozilla_NewStream(NPP instance, NPMIMEType type, NPStream* stream, NPBool seekable, uint16_t* stype); +NPError NPOsmozilla_DestroyStream(NPP instance, NPStream* stream, NPError reason); +NPINT32 NPOsmozilla_WriteReady(NPP instance, NPStream* stream); +NPINT32 NPOsmozilla_Write(NPP instance, NPStream* stream, NPINT32 offset, NPINT32 len, void* buffer); +void NPOsmozilla_StreamAsFile(NPP instance, NPStream* stream, const char* fname); +void NPOsmozilla_Print(NPP instance, NPPrint* platformPrint); +int16_t NPOsmozilla_HandleEvent(NPP instance, void* event); +void NPOsmozilla_URLNotify(NPP instance, const char* url, NPReason reason, void* notifyData); +NPError NPOsmozilla_GetValue(NPP instance, NPPVariable variable, void *result); +NPError NPOsmozilla_SetValue(NPP instance, NPNVariable variable, void *value); + + +/* +Functions called by browser +*/ + +typedef struct __tag_osmozilla Osmozilla; + +/*base functions*/ +int Osmozilla_Initialize(Osmozilla *osmo, signed short argc, char* argn[], char* argv[]); +void Osmozilla_Shutdown(Osmozilla *osmo); +int Osmozilla_SetWindow(Osmozilla *osmozilla, void *os_wnd_handle, void *os_wnd_display, unsigned int width, unsigned int height); +void Osmozilla_ConnectTo(Osmozilla *osmozilla, const char *url); +void Osmozilla_Print(Osmozilla *osmozilla, unsigned int is_embed, void *os_print_dc, unsigned int target_x, unsigned int target_y, unsigned int target_width, unsigned int target_height); +char *Osmozilla_GetVersion(); + + +/*scripting functions*/ +void Osmozilla_Play(Osmozilla *osmo); +void Osmozilla_Pause(Osmozilla *osmo); +void Osmozilla_Stop(Osmozilla *osmo); +void Osmozilla_Update(Osmozilla *osmo, const char *type, const char *commands); + + + +#ifdef GECKO_XPCOM + +void NPOsmozilla_GetServiceManager(); +void NPOsmozilla_ReleaseServiceManager(); +void NPOsmozilla_ShutdownScript(Osmozilla *osmo); +NPError NPOsmozilla_GetPeer(Osmozilla *osmo, void *value); +NPError NPOsmozilla_GetPeerIID(Osmozilla *osmo, void *value); + +#endif //GECKO_XPCOM + +#endif //_NPPLAT_H_ diff --git a/applications/osmozilla/osmozilla.cpp b/applications/osmozilla/osmozilla.cpp index e683b1e..784fd6e 100644 --- a/applications/osmozilla/osmozilla.cpp +++ b/applications/osmozilla/osmozilla.cpp @@ -1,265 +1,55 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: NPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Netscape Public License - * Version 1.1 (the "License"); you may not use this file except in - * compliance with the License. You may obtain a copy of the License at - * http://www.mozilla.org/NPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is mozilla.org code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 1998 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the NPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the NPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#include -#include -#include -#include -#include -#ifdef WIN32 -#include -#include -#endif -#include "osmozilla.h" - -#include -#include - -nsIServiceManager *gServiceManager = NULL; - - -#define GPAC_PLUGIN_MIMETYPES \ - "audio/mpeg:mp2,mp3,mpga,mpega:MP3 Music;" \ - "audio/x-mpeg:mp2,mp3,mpga,mpega:MP3 Music;" \ - "audio/amr:amr,awb:AMR Audio;" \ - "audio/mp4:mp4,mpg4,mpeg4,m4a:MPEG-4 Audio;" \ - "audio/aac:aac:MPEG-4 AAC Music;" \ - "audio/aacp:aac:MPEG-4 AACPlus Music;" \ - "audio/basic:snd,au:Basic Audio;" \ - "audio/x-wav:wav:WAV Audio;" \ - "audio/3gpp:3gp,3gpp:3GPP/MMS Music;" \ - "audio/3gpp2:3g2,3gp2:3GPP2/MMS Music;" \ - "video/mpeg:mpg,mpeg,mpe,mpv2:MPEG Video;" \ - "video/x-mpeg:mpg,mpeg,mpe,mpv2:MPEG Video;" \ - "video/mpeg-system:mpg,mpeg,mpe,vob,mpv2:MPEG Video;" \ - "video/x-mpeg-system:mpg,mpeg,mpe,vob,mpv2:MPEG Video;" \ - "video/avi:avi:AVI Video;" \ - "video/quicktime:mov,qt:QuickTime Movies;" \ - "video/x-ms-asf:asf,asx:Windows Media Video;" \ - "video/x-ms-wmv:wmv:Windows Media;" \ - "video/mp4:mp4,mpg4:MPEG-4 Video;" \ - "video/3gpp:3gp,3gpp:3GPP/MMS Video;" \ - "video/3gpp2:3g2,3gp2:3GPP2/MMS Video;" \ - "image/jpeg:jpeg,jpg:JPEG Images;" \ - "image/png:png:PNG Images;" \ - "image/bmp:bmp:MS Bitmap Images;" \ - "image/svg+xml:svg,svg.gz,svgz:SVG Document;" \ - "image/x-svgm:svgm:SVGM Document;" \ - "x-subtitle/srt:srt:SRT SubTitles;" \ - "x-subtitle/sub:sub:SUB SubTitles;" \ - "x-subtitle/ttxt:ttxt:GPAC 3GPP TimedText;" \ - "model/vrml:wrl,wrl.gz:VRML World;" \ - "model/x3d+vrml:x3dv,x3dv.gz,x3dvz:X3D/VRML World;" \ - "model/x3d+xml:x3d,x3d.gz,x3dz:X3D/XML World;" \ - "application/ogg:ogg:Ogg Media;" \ - "application/x-ogg:ogg:Ogg Media;" \ - "application/x-bt:bt,bt.gz,btz:MPEG-4 Text (BT);" \ - "application/x-xmt:xmt,xmt.gz,xmtz:MPEG-4 Text (XMT);" \ - "application/mp4:mp4,mpg4:MPEG-4 Movies;" \ - "application/sdp:sdp:Streaming Media Session;" \ - /* explicit plugin call */ \ - "application/x-gpac::GPAC plugin;" \ - - -char* NPP_GetMIMEDescription(void) -{ - return (char *) GPAC_PLUGIN_MIMETYPES; -} +/* +* GPAC - Multimedia Framework C SDK +* +* Copyright (c) ENST 2000-200X +* All rights reserved +* +* This file is part of GPAC / Osmozilla NPAPI plugin +* +* GPAC is free software; you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation; either version 2, or (at your option) +* any later version. +* +* GPAC 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 Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with this library; see the file COPYING. If not, write to +* the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +* +*/ -///////////////////////////////////// -// general initialization and shutdown -// -NPError NS_PluginInitialize() -{ - // this is probably a good place to get the service manager - // note that Mozilla will add reference, so do not forget to release - nsISupports *sm = NULL; - - NPN_GetValue(NULL, NPNVserviceManager, &sm); - - // Mozilla returns nsIServiceManager so we can use it directly; doing QI on - // nsISupports here can still be more appropriate in case something is changed - // in the future so we don't need to do casting of any sort. - if (sm) { - sm->QueryInterface(NS_GET_IID(nsIServiceManager), (void **) &gServiceManager); - NS_RELEASE(sm); - } - return NPERR_NO_ERROR; -} - -void NS_PluginShutdown() -{ - // we should release the service manager - NS_IF_RELEASE(gServiceManager); - gServiceManager = NULL; -} - -// get values per plugin -NPError NS_PluginGetValue(NPPVariable aVariable, void *aValue) -{ - NPError err = NPERR_NO_ERROR; - switch (aVariable) { - case NPPVpluginNameString: - *((char **)aValue) = (char *) "Osmozilla"; - break; - case NPPVpluginDescriptionString: - *((char **)aValue) = (char *) "GPAC Plugin " GPAC_FULL_VERSION " for Mozilla. For more information go to GPAC website"; - break; - default: - err = NPERR_INVALID_PARAM; - break; - } - return err; -} - -///////////////////////////////////////////////////////////// -// -// construction and destruction of our plugin instance object -// -nsPluginInstanceBase * NS_NewPluginInstance(nsPluginCreateData * aCreateDataStruct) -{ - if(!aCreateDataStruct) return NULL; - nsOsmozillaInstance * plugin = new nsOsmozillaInstance(aCreateDataStruct); - return plugin; -} - -void NS_DestroyPluginInstance(nsPluginInstanceBase * aPlugin) -{ - if(aPlugin) delete (nsOsmozillaInstance *)aPlugin; -} - -//////////////////////////////////////// -// -// nsOsmozillaInstance class implementation -// -nsOsmozillaInstance::nsOsmozillaInstance(nsPluginCreateData * aCreateDataStruct) : nsPluginInstanceBase(), - mInstance(aCreateDataStruct->instance) -{ -#ifdef XP_UNIX - mWindow = 0L; - mFontInfo = NULL; - mXtwidget = NULL; -#endif +#include "osmozilla.h" #ifdef XP_WIN - m_hWnd = NULL; +#include #endif - mScriptablePeer = NULL; - mInitialized = 0; - - - m_szURL = NULL; - m_term = NULL; - m_bIsConnected = 0; - - m_argc=aCreateDataStruct->argc; - m_argv=aCreateDataStruct->argv; - m_argn=aCreateDataStruct->argn; - - SetOptions(); -} - -void nsOsmozillaInstance::SetOptions() -{ - m_bLoop = 0; - m_bAutoStart = 1; - m_bUse3D = 0; - - /*options sent from plugin*/ - for(int i=0;i +#include +#include - /*URL is not absolute, request new stream to mozilla - we don't pass absolute URLs since some may not be - handled by gecko */ - if (m_szURL) { - Bool absolute_url = 0; - if (strstr(m_szURL, "://")) absolute_url = 1; - else if (m_szURL[0] == '/') { - FILE *test = gf_f64_open(m_szURL, "rb"); - if (test) { - absolute_url = 1; - fclose(test); - } - } - else if ((m_szURL[1] == ':') && ((m_szURL[2] == '\\') || (m_szURL[2] == '/'))) absolute_url = 1; - if (!absolute_url) { - char *url = m_szURL; - m_szURL = NULL; - NPN_GetURL(mInstance, url, NULL); - gf_free(url); - } - } +short Osmozilla_GetURL(NPP instance, const char *url, const char *target); +void Osmozilla_SetStatus(NPP instance, const char *message); -} -nsOsmozillaInstance::~nsOsmozillaInstance() +void Osmozilla_Shutdown(Osmozilla *osmo) { - if (mInstance) { - mInstance->pdata = NULL; - mInstance = NULL; + if (osmo->url) gf_free(osmo->url); + osmo->url = NULL; + if (osmo->term) { + GF_Terminal *a_term = osmo->term; + osmo->term = NULL; + gf_term_del(a_term); } - mInitialized = FALSE; - if (mScriptablePeer != NULL) { - mScriptablePeer->SetInstance(NULL); - NS_IF_RELEASE(mScriptablePeer); - } + if (osmo->user->modules) gf_modules_del(osmo->user->modules); + if (osmo->user->config) gf_cfg_del(osmo->user->config); + gf_free(osmo->user); + osmo->user = NULL; } static void osmozilla_do_log(void *cbk, u32 level, u32 tool, const char *fmt, va_list list) @@ -269,201 +59,12 @@ static void osmozilla_do_log(void *cbk, u32 level, u32 tool, const char *fmt, va fflush(logs); } -NPBool nsOsmozillaInstance::init(NPWindow* aWindow) -{ - FILE *ft; - char config_path[GF_MAX_PATH], config_test_file[GF_MAX_PATH]; - char *gpac_cfg; - const char *str; - - if(aWindow == NULL) return FALSE; - -#ifdef XP_WIN - gpac_cfg = (char *)"GPAC.cfg"; - - HKEY hKey = NULL; - DWORD dwSize; - /*locate the key in current user, then in local machine*/ - if (RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\GPAC", 0, KEY_READ, &hKey) != ERROR_SUCCESS) - RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\GPAC", 0, KEY_READ, &hKey); - dwSize = GF_MAX_PATH; -#ifdef _DEBUG - if (RegQueryValueEx(hKey, "DebugDir", NULL, NULL,(unsigned char*) config_path, &dwSize) != ERROR_SUCCESS) -#endif - RegQueryValueEx(hKey, "InstallDir", NULL, NULL,(unsigned char*) config_path, &dwSize); - RegCloseKey(hKey); - - /*do we have write access?*/ - strcpy(config_test_file, config_path); - if (config_path[strlen(config_path)-1] != '\\') - strcat(config_test_file, "\\"); - assert(strlen(config_path)+strlen(gpac_cfg)+1term) return 0; switch (evt->type) { case GF_EVENT_MESSAGE: @@ -473,61 +74,48 @@ Bool nsOsmozillaInstance::EventProc(GF_Event *evt) else sprintf((char *)msg, "GPAC: %s", evt->message.message); - NPN_Status(mInstance, msg); + Osmozilla_SetStatus(osmo->np_instance, msg); break; case GF_EVENT_PROGRESS: if (evt->progress.done == evt->progress.total) { - NPN_Status(mInstance, ""); + Osmozilla_SetStatus(osmo->np_instance, ""); } else { char *szTitle = (char *)""; if (evt->progress.progress_type==0) szTitle = (char *)"Buffer "; else if (evt->progress.progress_type==1) szTitle = (char *)"Download "; else if (evt->progress.progress_type==2) szTitle = (char *)"Import "; sprintf(msg, "(GPAC) %s: %02.2f", szTitle, (100.0*evt->progress.done) / evt->progress.total); - NPN_Status(mInstance, msg); + Osmozilla_SetStatus(osmo->np_instance, msg); } break; - /*IGNORE any scene size, just work with the size allocated in the parent doc*/ + /*IGNORE any scene size, just work with the size allocated in the parent doc*/ case GF_EVENT_SCENE_SIZE: - gf_term_set_size(m_term, m_width, m_height); + gf_term_set_size(osmo->term, osmo->width, osmo->height); break; - /*window has been resized (full-screen plugin), resize*/ + /*window has been resized (full-screen plugin), resize*/ case GF_EVENT_SIZE: - m_width = evt->size.width; - m_height = evt->size.height; - gf_term_set_size(m_term, m_width, m_height); + osmo->width = evt->size.width; + osmo->height = evt->size.height; + gf_term_set_size(osmo->term, osmo->width, osmo->height); break; case GF_EVENT_CONNECT: - m_bIsConnected = evt->connect.is_connected; + osmo->is_connected = evt->connect.is_connected; break; case GF_EVENT_DURATION: - m_bCanSeek = evt->duration.can_seek; - m_Duration = evt->duration.duration; + osmo->can_seek = evt->duration.can_seek; + osmo->duration = evt->duration.duration; break; case GF_EVENT_DBLCLICK: - gf_term_set_option(m_term, GF_OPT_FULLSCREEN, !gf_term_get_option(m_term, GF_OPT_FULLSCREEN)); + gf_term_set_option(osmo->term, GF_OPT_FULLSCREEN, !gf_term_get_option(osmo->term, GF_OPT_FULLSCREEN)); break; - case GF_EVENT_KEYDOWN: - if ((evt->key.flags & GF_KEY_MOD_ALT)) { - } else { - switch (evt->key.key_code) { - case GF_KEY_HOME: - gf_term_set_option(m_term, GF_OPT_NAVIGATION_TYPE, 1); - break; -/* case GF_KEY_ESCAPE: - gf_term_set_option(m_term, GF_OPT_FULLSCREEN, !gf_term_get_option(m_term, GF_OPT_FULLSCREEN)); - break; -*/ } - } - break; case GF_EVENT_NAVIGATE_INFO: strcpy(msg, evt->navigate.to_url); - NPN_Status(mInstance, msg); + Osmozilla_SetStatus(osmo->np_instance, msg); break; case GF_EVENT_NAVIGATE: - if (gf_term_is_supported_url(m_term, evt->navigate.to_url, 1, m_disable_mime)) { - gf_term_navigate_to(m_term, evt->navigate.to_url); + if (gf_term_is_supported_url(osmo->term, evt->navigate.to_url, 1, osmo->disable_mime)) { + gf_term_navigate_to(osmo->term, evt->navigate.to_url); return 1; } else { u32 i; @@ -540,7 +128,7 @@ Bool nsOsmozillaInstance::EventProc(GF_Event *evt) else if (!strcmp(evt->navigate.parameters[i], "_new")) target = (char *)"_new"; else if (!strnicmp(evt->navigate.parameters[i], "_target=", 8)) target = (char *) evt->navigate.parameters[i]+8; } - NPN_GetURL(mInstance, evt->navigate.to_url, target); + Osmozilla_GetURL(osmo->np_instance, evt->navigate.to_url, target); return 1; } break; @@ -548,205 +136,283 @@ Bool nsOsmozillaInstance::EventProc(GF_Event *evt) return 0; } -Bool Osmozilla_EventProc(void *priv, GF_Event *evt) +int Osmozilla_Initialize(Osmozilla *osmo, signed short argc, char* argn[], char* argv[]) { - nsOsmozillaInstance *gpac = (nsOsmozillaInstance *) priv; - return gpac->EventProc(evt); -} + const char *str; + int i; + u32 log_level, log_tools; -NPError nsOsmozillaInstance::SetWindow(NPWindow* aWindow) -{ - const char *gui; - if (mInitialized) { - m_width = aWindow->width; - m_height = aWindow->height; - if (m_bIsConnected) gf_term_set_size(m_term, m_width, m_height); - return TRUE; + osmo->auto_start = 1; + + /*options sent from plugin*/ + for(i=0;iauto_start = 0; + + else if (!stricmp(argn[i],"src") ) { + if (osmo->url) gf_free(osmo->url); + osmo->url = gf_strdup(argv[i]); + } + else if (!stricmp(argn[i],"use3d") && (!stricmp(argv[i], "true") || !stricmp(argv[i], "yes") ) ) { + osmo->use_3d = 1; + } + else if (!stricmp(argn[i],"loop") && (!stricmp(argv[i], "true") || !stricmp(argv[i], "yes") ) ) { + osmo->loop = 1; + } + else if (!stricmp(argn[i],"aspectratio")) { + osmo->aspect_ratio = GF_ASPECT_RATIO_KEEP; + if (!stricmp(argv[i], "keep")) osmo->aspect_ratio = GF_ASPECT_RATIO_KEEP; + else if (!stricmp(argv[i], "16:9")) osmo->aspect_ratio = GF_ASPECT_RATIO_16_9; + else if (!stricmp(argv[i], "4:3")) osmo->aspect_ratio = GF_ASPECT_RATIO_4_3; + else if (!stricmp(argv[i], "fill")) osmo->aspect_ratio = GF_ASPECT_RATIO_FILL_SCREEN; + } } - - if(aWindow == NULL) return FALSE; - if (!aWindow->width || !aWindow->height) return FALSE; - m_width = aWindow->width; - m_height = aWindow->height; + /*URL is not absolute, request new stream to mozilla - we don't pass absolute URLs since some may not be + handled by gecko */ + if (osmo->url) { + Bool absolute_url = 0; + if (strstr(osmo->url, "://")) absolute_url = 1; + else if (osmo->url[0] == '/') { + FILE *test = gf_f64_open(osmo->url, "rb"); + if (test) { + absolute_url = 1; + fclose(test); + } + } + else if ((osmo->url[1] == ':') && ((osmo->url[2] == '\\') || (osmo->url[2] == '/'))) absolute_url = 1; - m_user.EventProc = Osmozilla_EventProc; - -#ifdef XP_WIN - m_user.os_window_handler = aWindow->window; + if (!absolute_url) { + char *url = osmo->url; + osmo->url = NULL; + Osmozilla_GetURL(osmo->np_instance, url, NULL); + gf_free(url); + } + } + + GF_SAFEALLOC(osmo->user, GF_User); + osmo->user->config = gf_cfg_init(NULL, NULL); + /*need to have a valid cfg file for now*/ + if (!osmo->user->config) { + gf_free(osmo->user); + osmo->user = NULL; +#ifdef WIN32 + MessageBox(NULL, "GPAC CONFIGURATION FILE NOT FOUND OR INVALID", "OSMOZILLA FATAL ERROR", MB_OK); +#else + fprintf(stdout, "OSMOZILLA FATAL ERROR\nGPAC CONFIGURATION FILE NOT FOUND OR INVALID\n"); #endif + return 0; + } -#ifdef XP_UNIX - m_user.os_window_handler = aWindow->window; - /*HACK - although we don't use the display in the X11 plugin, this is used to signal that - the user is mozilla and prevent some X11 calls crashing the browser in file playing mode - (eg, "firefox myfile.mp4" )*/ - m_user.os_display =((NPSetWindowCallbackStruct *)aWindow->ws_info)->display; - XSynchronize((Display *) m_user.os_display, True); - m_user.os_window_handler = aWindow->window; + str = gf_cfg_get_key(osmo->user->config, "General", "ModulesDirectory"); + osmo->user->modules = gf_modules_new(str, osmo->user->config); + if (!gf_modules_get_count(osmo->user->modules)) { + if (osmo->user->modules) gf_modules_del(osmo->user->modules); + gf_free(osmo->user); + osmo->user = NULL; +#ifdef WIN32 + MessageBox(NULL, "GPAC MODULES NOT FOUND", "OSMOZILLA FATAL ERROR", MB_OK); +#else + fprintf(stdout, "OSMOZILLA FATAL ERROR\nGPAC MODULES NOT FOUND\n"); #endif + return 0; + } + + osmo->user->opaque = osmo; + osmo->user->EventProc = Osmozilla_EventProc; + + /*always fetch mime ? Check with anchor examples*/ + osmo->disable_mime = 0; + str = gf_cfg_get_key(osmo->user->config, "General", "NoMIMETypeFetch"); + if (str && !strcmp(str, "yes")) osmo->disable_mime = 0; + /*check log file*/ + str = gf_cfg_get_key(osmo->user->config, "General", "LogFile"); + if (str) { + osmo->logs = gf_f64_open(str, "wt"); + if (osmo->logs) gf_log_set_callback(osmo->logs, osmozilla_do_log); + } + + /*setup logs*/ + log_level = gf_log_parse_level(gf_cfg_get_key(osmo->user->config, "General", "LogLevel")); + if (!log_level) + fprintf(stdout, "Osmozilla: invalid log level specified\n"); + gf_log_set_level(log_level); + log_tools = gf_log_parse_tools(gf_cfg_get_key(osmo->user->config, "General", "LogTools")); + if (!log_tools) + fprintf(stdout, "Osmozilla: invalid log tools specified\n"); + gf_log_set_tools(log_tools); + + fprintf(stdout, "Osmozilla initialized\n"); + + return 1; +} + +int Osmozilla_SetWindow(Osmozilla *osmo, void *os_wnd_handle, void *os_wnd_display, unsigned int width, unsigned int height) +{ + const char *gui; + if (osmo->window_set) { + osmo->width = width; + osmo->height = height; + if (osmo->is_connected) gf_term_set_size(osmo->term, osmo->width, osmo->height); + return 1; + } + if (!os_wnd_handle) return 0; + + osmo->width = width; + osmo->height = height; + + osmo->user->os_window_handler = os_wnd_handle; + osmo->user->os_display = os_wnd_display; - m_prev_time = 0; - m_url_changed = 0; - - m_term = gf_term_new(&m_user); - if (! m_term) return FALSE; + /*Everything is now setup, create the terminal*/ + fprintf(stdout, "Creating Osmozilla terminal\n"); + osmo->term = gf_term_new(osmo->user); + if (!osmo->term) return 0; + fprintf(stdout, "Osmozilla terminal created\n"); - gf_term_set_option(m_term, GF_OPT_ASPECT_RATIO, aspect_ratio); - mInitialized = TRUE; + gf_term_set_option(osmo->term, GF_OPT_ASPECT_RATIO, osmo->aspect_ratio); + osmo->window_set = 1; #ifdef XP_WIN - SetFocus((HWND)aWindow->window); + SetFocus((HWND)os_wnd_handle); #endif /*stream not ready*/ - if (!m_szURL || !m_bAutoStart) return TRUE; + if (!osmo->url || !osmo->auto_start) { + fprintf(stdout, "Osmozilla ready - not connecting to %s yet\n", osmo->url); + return 1; + } /*connect from 0 and pause if not autoplay*/ - gui = gf_cfg_get_key(m_user.config, "General", "StartupFile"); + gui = gf_cfg_get_key(osmo->user->config, "General", "StartupFile"); if (gui) { - gf_cfg_set_key(m_user.config, "Temp", "BrowserMode", "yes"); - gf_cfg_set_key(m_user.config, "Temp", "GUIStartupFile", m_szURL); - gf_term_connect(m_term, gui); + gf_cfg_set_key(osmo->user->config, "Temp", "BrowserMode", "yes"); + gf_cfg_set_key(osmo->user->config, "Temp", "GUIStartupFile", osmo->url); + gf_term_connect(osmo->term, gui); } else { - gf_term_connect(m_term, m_szURL); + gf_term_connect(osmo->term, osmo->url); } - - return TRUE; + fprintf(stdout, "Osmozilla connected to %s\n", osmo->url); + return 1; } +char *Osmozilla_GetVersion() +{ + return (char *) "GPAC Plugin " GPAC_FULL_VERSION " for NPAPI compatible Web Browsers. For more information go to GPAC website"; +} - -NPError nsOsmozillaInstance::NewStream(NPMIMEType type, NPStream * stream, - NPBool seekable, uint16 * stype) +void Osmozilla_ConnectTo(Osmozilla *osmo, const char *url) { - if (m_szURL) gf_free(m_szURL); - m_szURL = gf_strdup((const char *)stream->url); + fprintf(stdout, "Osmozilla connecting to %s\n", url); + if (osmo->url) gf_free(osmo->url); + osmo->url = gf_strdup(url); /*connect from 0 and pause if not autoplay*/ - if (m_bAutoStart) { - const char *gui = gf_cfg_get_key(m_user.config, "General", "StartupFile"); + if (osmo->auto_start) { + const char *gui = gf_cfg_get_key(osmo->user->config, "General", "StartupFile"); if (gui) { - gf_cfg_set_key(m_user.config, "Temp", "BrowserMode", "yes"); - gf_cfg_set_key(m_user.config, "Temp", "GUIStartupFile", m_szURL); - gf_term_connect(m_term, gui); + gf_cfg_set_key(osmo->user->config, "Temp", "BrowserMode", "yes"); + gf_cfg_set_key(osmo->user->config, "Temp", "GUIStartupFile", url); + gf_term_connect(osmo->term, gui); } else { - gf_term_connect(m_term, m_szURL); + gf_term_connect(osmo->term, url); } } - - /*we handle data fetching ourselves*/ - *stype = NP_SEEK; - return NPERR_NO_ERROR; + fprintf(stdout, "Osmozilla connected to %s\n", url); } -NPError nsOsmozillaInstance::DestroyStream(NPStream * stream, NPError reason) +void Osmozilla_Pause(Osmozilla *osmo) { - if (0 && m_szURL) { - gf_term_disconnect(m_term); - gf_free(m_szURL); - m_szURL = NULL; - } - return NPERR_NO_ERROR; -} - -uint16 nsOsmozillaInstance::HandleEvent(void* event) -{ - fprintf(stdout, "event !\n"); - return false; -} - -void nsOsmozillaInstance::Pause() -{ -fprintf(stdout, "pause\n"); - if (m_term) { - if (gf_term_get_option(m_term, GF_OPT_PLAY_STATE) == GF_STATE_PAUSED) { - gf_term_set_option(m_term, GF_OPT_PLAY_STATE, GF_STATE_PLAYING); + if (osmo->term) { + if (gf_term_get_option(osmo->term, GF_OPT_PLAY_STATE) == GF_STATE_PAUSED) { + gf_term_set_option(osmo->term, GF_OPT_PLAY_STATE, GF_STATE_PLAYING); } else { - gf_term_set_option(m_term, GF_OPT_PLAY_STATE, GF_STATE_PAUSED); + gf_term_set_option(osmo->term, GF_OPT_PLAY_STATE, GF_STATE_PAUSED); } } } -void nsOsmozillaInstance::Play() +void Osmozilla_Play(Osmozilla *osmo) { - if (!m_bIsConnected) { - if (m_szURL) gf_term_connect(m_term, (const char *) m_szURL); + if (!osmo->is_connected) { + if (osmo->url) gf_term_connect(osmo->term, (const char *) osmo->url); } else { - gf_term_set_option(m_term, GF_OPT_PLAY_STATE, GF_STATE_PLAYING); + gf_term_set_option(osmo->term, GF_OPT_PLAY_STATE, GF_STATE_PLAYING); } } -void nsOsmozillaInstance::Stop() +void Osmozilla_Stop(Osmozilla *osmo) { - gf_term_disconnect(m_term); + if (osmo->term) gf_term_disconnect(osmo->term); } #ifdef XP_WIN PBITMAPINFO CreateBitmapInfoStruct(GF_VideoSurface *pfb) { - PBITMAPINFO pbmi; - WORD cClrBits; + PBITMAPINFO pbmi; + WORD cClrBits; cClrBits = 32; - pbmi = (PBITMAPINFO) LocalAlloc(LPTR, - sizeof(BITMAPINFOHEADER)); + pbmi = (PBITMAPINFO) LocalAlloc(LPTR, + sizeof(BITMAPINFOHEADER)); - pbmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); + pbmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); pbmi->bmiHeader.biWidth = pfb->width; pbmi->bmiHeader.biHeight = 1; - pbmi->bmiHeader.biPlanes = 1; - pbmi->bmiHeader.biBitCount = cClrBits; - - pbmi->bmiHeader.biCompression = BI_RGB; - pbmi->bmiHeader.biSizeImage = ((pbmi->bmiHeader.biWidth * cClrBits +31) & ~31) /8 - * pbmi->bmiHeader.biHeight; - pbmi->bmiHeader.biClrImportant = 0; - return pbmi; + pbmi->bmiHeader.biPlanes = 1; + pbmi->bmiHeader.biBitCount = cClrBits; + + pbmi->bmiHeader.biCompression = BI_RGB; + pbmi->bmiHeader.biSizeImage = ((pbmi->bmiHeader.biWidth * cClrBits +31) & ~31) /8 + * pbmi->bmiHeader.biHeight; + pbmi->bmiHeader.biClrImportant = 0; + return pbmi; } #endif -void nsOsmozillaInstance::Print(NPPrint* printInfo) +void Osmozilla_Print(Osmozilla *osmo, unsigned int is_embed, void *os_print_dc, unsigned int target_x, unsigned int target_y, unsigned int target_width, unsigned int target_height) { - if (printInfo->mode == NP_EMBED) - { - NPEmbedPrint *ep = (NPEmbedPrint *)printInfo; + if (is_embed) { #ifdef XP_MACOS /* - ep->platformPrint contains a THPrint reference on MacOS + os_print_dc contains a THPrint reference on MacOS */ - } + } #endif // XP_MACOS #ifdef XP_UNIX - /* - ep->platformPrint contains a NPPrintCallbackStruct on Unix and - the plug-in location and size in the NPWindow are in page coordinates (720/ inch), but the printer requires point coordinates (72/inch) - */ + /* + os_print_dc contains a NPPrintCallbackStruct on Unix and + the plug-in location and size in the NPWindow are in page coordinates (720/ inch), but the printer requires point coordinates (72/inch) + */ #endif // XP_UNIX #ifdef XP_WIN - /* - The coordinates for the window rectangle are in TWIPS format. - This means that you need to convert the x-y coordinates using the Windows API call DPtoLP when you output text - */ - HDC pDC = (HDC)printInfo->print.embedPrint.platformPrint; - GF_VideoSurface fb; - u32 xsrc, ysrc; - u16 src_16; - char *src; - /*lock the source buffer */ - gf_term_get_screen_buffer(m_term, &fb); - BITMAPINFO *infoSrc = CreateBitmapInfoStruct(&fb); - float deltay = (float)printInfo->print.embedPrint.window.height/(float)fb.height; - int ysuiv = 0; - char *ligne = (char *) LocalAlloc(GMEM_FIXED, fb.width*4); - for (ysrc=0; ysrcterm, &fb); + infoSrc = CreateBitmapInfoStruct(&fb); + deltay = (float)target_height/(float)fb.height; + ligne = (char *) LocalAlloc(GMEM_FIXED, fb.width*4); + for (ysrc=0; ysrc>5; src+=2; break; - } - dst += 4; } - int ycrt = ysuiv; - ysuiv = (u32) ( ((float)ysrc+1.0)*deltay); - int delta = ysuiv-ycrt; - StretchDIBits( - pDC, printInfo->print.embedPrint.window.x, ycrt+printInfo->print.embedPrint.window.y, printInfo->print.embedPrint.window.width, - delta, - 0, 0, fb.width, 1, - ligne, infoSrc, DIB_RGB_COLORS, SRCCOPY); + dst += 4; } + ycrt = ysuiv; + ysuiv = (u32) ( ((float)ysrc+1.0)*deltay); + delta = ysuiv-ycrt; + StretchDIBits( + pDC, target_x, target_y, target_width, + delta, + 0, 0, fb.width, 1, + ligne, infoSrc, DIB_RGB_COLORS, SRCCOPY); + } - /*unlock GPAC frame buffer */ - gf_term_release_screen_buffer(m_term, &fb); - /* gf_free temporary objects */ - GlobalFree(ligne); - LocalFree(infoSrc); + /*unlock GPAC frame buffer */ + gf_term_release_screen_buffer(osmo->term, &fb); + /* gf_free temporary objects */ + GlobalFree(ligne); + LocalFree(infoSrc); #endif // XP_WIN - } else if (printInfo->mode == NP_FULL) - { - NPFullPrint *ep = (NPFullPrint *)printInfo; - // TODO present the print dialog and manage the print - } + + return; +} + +/*TODO - this is full print, present the print dialog and manage the print*/ } -void nsOsmozillaInstance::Update(const char *type, const char *commands) +void Osmozilla_Update(Osmozilla *osmo, const char *type, const char *commands) { - if (m_term) { - GF_Err e = gf_term_scene_update(m_term, (char *) type, (char *) commands); + if (osmo->term) { + GF_Err e = gf_term_scene_update(osmo->term, (char *) type, (char *) commands); if (e) { char szMsg[1024]; sprintf((char *)szMsg, "GPAC: Error applying update (%s)", gf_error_to_string(e) ); - NPN_Status(mInstance, szMsg); + Osmozilla_SetStatus(osmo->np_instance, szMsg); } } } - -// Scriptability related code - -nsOsmozillaPeer *nsOsmozillaInstance::getScriptablePeer() -{ -fprintf(stdout, "get peer\n"); - if (!mScriptablePeer) { - mScriptablePeer = new nsOsmozillaPeer(this); - if (!mScriptablePeer) return NULL; - NS_ADDREF(mScriptablePeer); - } - NS_ADDREF(mScriptablePeer); - return mScriptablePeer; -} - -static NS_DEFINE_IID(kIZillaPluginIID, NS_IOSMOZILLA_IID); -static NS_DEFINE_IID(kIClassInfoIID, NS_ICLASSINFO_IID); -static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID); - -nsOsmozillaPeer::nsOsmozillaPeer(nsOsmozillaInstance * aPlugin) -{ - mPlugin=aPlugin; - mRefCnt = 0; -} - -nsOsmozillaPeer::~nsOsmozillaPeer() -{ -} - // Notice that we expose our claim to implement nsIClassInfo. -//NS_IMPL_ISUPPORTS2(nsOsmozillaPeer, nsITestPlugin, nsIClassInfo) - - // the following method will be callable from JavaScript -NS_IMETHODIMP nsOsmozillaPeer::Pause() { mPlugin->Pause(); return NS_OK; } -NS_IMETHODIMP nsOsmozillaPeer::Play() { mPlugin->Play(); return NS_OK; } -NS_IMETHODIMP nsOsmozillaPeer::Stop() { mPlugin->Stop(); return NS_OK; } - -NS_IMETHODIMP nsOsmozillaPeer::Update(const char *type, const char *commands) -{ - mPlugin->Update(type, commands); - return NS_OK; -} - -void nsOsmozillaPeer::SetInstance(nsOsmozillaInstance * plugin) -{ - mPlugin = plugin; -} - -NS_IMETHODIMP_(nsrefcnt) nsOsmozillaPeer::AddRef() -{ - ++mRefCnt; - return mRefCnt; -} - -NS_IMETHODIMP_(nsrefcnt) nsOsmozillaPeer::Release() -{ - --mRefCnt; - if (mRefCnt == 0) { - delete this; - return 0; - } - return mRefCnt; -} - -// here nsOsmozillaPeer should return three interfaces it can be asked for by their iid's -// static casts are necessary to ensure that correct pointer is returned -NS_IMETHODIMP nsOsmozillaPeer::QueryInterface(const nsIID & aIID, - void **aInstancePtr) -{ - if (!aInstancePtr) - return NS_ERROR_NULL_POINTER; - - if (aIID.Equals(kIZillaPluginIID)) { - *aInstancePtr = NS_STATIC_CAST(nsIOsmozilla *, this); - AddRef(); - return NS_OK; - } - - if (aIID.Equals(kIClassInfoIID)) { - *aInstancePtr = NS_STATIC_CAST(nsIClassInfo *, this); - AddRef(); - return NS_OK; - } - - if (aIID.Equals(kISupportsIID)) { - *aInstancePtr = NS_STATIC_CAST(nsISupports *, (NS_STATIC_CAST (nsIOsmozilla *, this))); - AddRef(); - return NS_OK; - } - return NS_NOINTERFACE; -} - diff --git a/applications/osmozilla/osmozilla.h b/applications/osmozilla/osmozilla.h index d00619b..5929d97 100644 --- a/applications/osmozilla/osmozilla.h +++ b/applications/osmozilla/osmozilla.h @@ -1,241 +1,71 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: NPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Netscape Public License - * Version 1.1 (the "License"); you may not use this file except in - * compliance with the License. You may obtain a copy of the License at - * http://www.mozilla.org/NPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is mozilla.org code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 1998 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the NPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the NPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#ifndef __PLUGIN_H__ -#define __PLUGIN_H__ - -#include - -#include "npplat.h" -#include "nsIOsmozilla.h" - -#include - -#ifndef WIN32 -#include -#include -#include -#endif - -class nsOsmozillaPeer; - -struct nsPluginCreateData -{ - NPP instance; - NPMIMEType type; - uint16 mode; - int16 argc; - char** argn; - char** argv; - NPSavedData* saved; -}; - -class nsPluginInstanceBase +/* +* GPAC - Multimedia Framework C SDK +* +* Copyright (c) ENST 2000-200X +* All rights reserved +* +* This file is part of GPAC / Osmozilla NPAPI plugin +* +* GPAC is free software; you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation; either version 2, or (at your option) +* any later version. +* +* GPAC 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 Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with this library; see the file COPYING. If not, write to +* the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +* +*/ + +#ifndef __OSMOZILLA_H__ +#define __OSMOZILLA_H__ + + +/*DO NOT INCLUDE ANY GPAC FILE IN THIS HEADER, IT CAUSES TYPE REDEFINITION CONFLICT ON OSX*/ +typedef struct _tag_terminal GF_Terminal; +typedef struct _tag_user GF_User; + +#include + + +typedef struct _NPP *NPP; + +typedef struct __tag_osmozilla { -public: - // these three methods must be implemented in the derived - // class platform specific way - virtual NPBool init(NPWindow* aWindow) = 0; - virtual void shut() = 0; - virtual NPBool isInitialized() = 0; - - // implement all or part of those methods in the derived - // class as needed - virtual NPError SetWindow(NPWindow* pNPWindow) { return NPERR_NO_ERROR; } - virtual NPError NewStream(NPMIMEType type, NPStream* stream, - NPBool seekable, uint16* stype) { return NPERR_NO_ERROR; } - virtual NPError DestroyStream(NPStream *stream, NPError reason) { return NPERR_NO_ERROR; } - virtual void StreamAsFile(NPStream* stream, const char* fname) { return; } - virtual int32 WriteReady(NPStream *stream) { return 0x0fffffff; } - virtual int32 Write(NPStream *stream, int32 offset, - int32 len, void *buffer) { return len; } - virtual void Print(NPPrint* printInfo) { return; } - virtual uint16 HandleEvent(void* event) { return 0; } - virtual void URLNotify(const char* url, NPReason reason, - void* notifyData) { return; } - virtual NPError GetValue(NPPVariable variable, void *value) { return NPERR_NO_ERROR; } - virtual NPError SetValue(NPNVariable variable, void *value) { return NPERR_NO_ERROR; } -}; - -// functions that should be implemented for each specific plugin - -// creation and destruction of the object of the derived class -nsPluginInstanceBase * NS_NewPluginInstance(nsPluginCreateData * aCreateDataStruct); -void NS_DestroyPluginInstance(nsPluginInstanceBase * aPlugin); - -// global plugin initialization and shutdown -NPError NS_PluginInitialize(); -void NS_PluginShutdown(); - -// global to get plugins name & description -NPError NS_PluginGetValue(NPPVariable aVariable, void *aValue); -char* NPP_GetMIMEDescription(void); - - -//#define NO_GPAC - -class nsOsmozillaInstance : public nsPluginInstanceBase -{ -public: - - nsOsmozillaInstance(nsPluginCreateData * aCreateDataStruct); - virtual ~nsOsmozillaInstance(); - - NPBool init(NPWindow* aWindow); - void shut(); - NPBool isInitialized() {return mInitialized;} + /*plugiun & window info*/ + NPP np_instance; + int window_set; + unsigned int height, width; - - NPError SetWindow(NPWindow* aWindow); - NPError NewStream(NPMIMEType type, NPStream * stream, NPBool seekable,uint16 * stype); - NPError DestroyStream(NPStream * stream, NPError reason); - NPError GetValue(NPPVariable aVariable, void *aValue); - virtual uint16 HandleEvent(void* event); - - - nsOsmozillaPeer * getScriptablePeer(); - - // locals - const char * getVersion(); - - int m_argc; - char **m_argv; - char **m_argn; - nsOsmozillaPeer *mScriptablePeer; - - void Pause(); - void Play(); - void Stop(); - void Update(const char *type, const char *commands); - void Print(NPPrint* printInfo); - Bool EventProc(GF_Event *evt); - - -private: - NPP mInstance; - NPBool mInitialized; - -#ifdef XP_WIN - HWND m_hWnd; -#endif -#ifdef XP_UNIX - Window mWindow; - Display *mDisplay; - XFontStruct *mFontInfo; - Widget mXtwidget; -#endif - -#ifdef XP_MACOSX - NPWindow *window; -#endif + /*GPAC term*/ + GF_User *user; + GF_Terminal *term; /*general options*/ - Bool m_bLoop, m_bAutoStart, m_bIsConnected; - - GF_Terminal *m_term; - GF_User m_user; - - char *m_szURL; - - Bool m_isopen, m_paused, m_url_changed, m_bUse3D, m_disable_mime; - u32 max_duration, m_log_level, m_log_tools, aspect_ratio; - FILE *m_logs; - Bool m_bCanSeek; - Double m_Duration; - uint32 m_height, m_width; - unsigned char *m_navigate_url; - u32 current_time_ms, m_prev_time; - Float current_FPS; - - void SetOptions(); -}; - -// We must implement nsIClassInfo because it signals the - // Mozilla Security Manager to allow calls from JavaScript. - // helper class to implement all necessary nsIClassInfo method stubs - // and to set flags used by the security system - -class nsClassInfoMixin : public nsIClassInfo - { - // These flags are used by the DOM and security systems to signal that - // JavaScript callers are allowed to call this object's scritable methods. - NS_IMETHOD GetFlags(PRUint32 *aFlags) - {*aFlags = nsIClassInfo::PLUGIN_OBJECT | nsIClassInfo::DOM_OBJECT; - return NS_OK;} - - NS_IMETHOD GetImplementationLanguage(PRUint32 *aImplementationLanguage) - {*aImplementationLanguage = nsIProgrammingLanguage::CPLUSPLUS; - return NS_OK;} - - // The rest of the methods can safely return error codes... - NS_IMETHOD GetInterfaces(PRUint32 *count, nsIID * **array) - {return NS_ERROR_NOT_IMPLEMENTED;} - NS_IMETHOD GetHelperForLanguage(PRUint32 language, nsISupports **_retval) - {return NS_ERROR_NOT_IMPLEMENTED;} - NS_IMETHOD GetContractID(char * *aContractID) - {return NS_ERROR_NOT_IMPLEMENTED;} - NS_IMETHOD GetClassDescription(char * *aClassDescription) - {return NS_ERROR_NOT_IMPLEMENTED;} - NS_IMETHOD GetClassID(nsCID * *aClassID) - {return NS_ERROR_NOT_IMPLEMENTED;} - NS_IMETHOD GetClassIDNoAlloc(nsCID *aClassIDNoAlloc) - {return NS_ERROR_NOT_IMPLEMENTED;} - }; - + char loop, auto_start, is_connected, use_3d, disable_mime; + unsigned int aspect_ratio; + + /*the URL we are connected to*/ + char *url; + /*timing info of current url*/ + double duration; + char can_seek; + + /*log file if any*/ + FILE *logs; + +#ifdef GECKO_XPCOM + void *scriptable_peer; +#else + struct NPObject *script_obj; +#endif -class nsOsmozillaPeer : public nsIOsmozilla , public nsClassInfoMixin -{ -public: - nsOsmozillaPeer(nsOsmozillaInstance * aPlugin); - virtual ~nsOsmozillaPeer(); - - // methods from nsISupports - NS_IMETHOD QueryInterface(const nsIID & aIID, void **aInstancePtr); - NS_IMETHOD_(nsrefcnt) AddRef(); - NS_IMETHOD_(nsrefcnt) Release(); - -public: - NS_DECL_NSIOSMOZILLA - void SetInstance(nsOsmozillaInstance * plugin); - -protected: - nsrefcnt mRefCnt; - nsOsmozillaInstance * mPlugin; -}; +} Osmozilla; -#endif // __PLUGIN_H__ +#endif // __OSMOZILLA_H__ diff --git a/applications/osmozilla/osmozilla.rc b/applications/osmozilla/osmozilla.rc index 18be328..9fc460b 100644 --- a/applications/osmozilla/osmozilla.rc +++ b/applications/osmozilla/osmozilla.rc @@ -9,6 +9,10 @@ // #include "winresrc.h" +/*do not include setup.h*/ +#define _GF_SETUP_H_ +#include + ///////////////////////////////////////////////////////////////////////////// #undef APSTUDIO_READONLY_SYMBOLS @@ -28,8 +32,8 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,0,0,1 - PRODUCTVERSION 1,0,0,1 + FILEVERSION 1,0,1,0 + PRODUCTVERSION 1,0,1,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -49,7 +53,7 @@ BEGIN VALUE "FileDescription", "Osmozilla allows playback of many media and rich media files. For more information, visit gpac.sourceforge.net\0" VALUE "FileExtents", "*|aac|wrl,wrl.gz|x3dv,x3dv.gz,x3dvz|x3d,x3d.gz,x3dz|svg,svg.gz,svgz|mpg,mpeg,mp2,mpa,mpe,mpv2|asf,wma,wmv,asx,asr|avi|mp4,mpg4|mp4|m4a|3gp,3gpp|3gp,3gpp|3g2,3gp2|3g2,3gp2|mp2,mp3,mpga,mpega|ogg|sdp\0" VALUE "FileOpenName", "GPAC Plugin|AAC Music|VRML World|X3D/VRML World|X3D/XML World|SVG Document|MPEG Video|WindowsMedia Movies|AVI Movies|MPEG-4 Videos|MPEG-4 Movies|MPEG-4 Music|3GPP Movies|3GPP Music|3GPP2 Movies|3GPP2 Music|MP3 Music|OGG Movies|SDP Session\0" - VALUE "FileVersion", "0.4.5\0" + VALUE "FileVersion", GPAC_VERSION"-rev"GPAC_SVN_REVISION"\0" VALUE "InternalName", "nposmozilla\0" VALUE "LegalCopyright", "Copyright © GPAC 2005-2007\0" VALUE "LegalTrademarks", "\0" @@ -57,7 +61,7 @@ BEGIN VALUE "OriginalFilename", "nposmozilla.dll\0" VALUE "PrivateBuild", "\0" VALUE "ProductName", "Osmozilla - GPAC Plugin for Mozilla\0" - VALUE "ProductVersion", "0.4.5\0" + VALUE "ProductVersion", GPAC_VERSION"-rev"GPAC_SVN_REVISION"\0" VALUE "SpecialBuild", "\0" END END diff --git a/applications/udptsseg/Makefile b/applications/udptsseg/Makefile index 776c1b9..f7f7bf2 100644 --- a/applications/udptsseg/Makefile +++ b/applications/udptsseg/Makefile @@ -1,81 +1,81 @@ -include ../../config.mak - -vpath %.c $(SRC_PATH)/applications/udptsseg - -CFLAGS= $(OPTFLAGS) -I"$(SRC_PATH)/include" - -ifeq ($(DEBUGBUILD), yes) -CFLAGS+=-g -LDFLAGS+=-g -endif - -ifeq ($(GPROFBUILD), yes) -CFLAGS+=-pg -LDFLAGS+=-pg -endif - -#common obj -OBJS= main.o - -LINKFLAGS=-L../../bin/gcc -L../../extra_lib/lib/gcc - -ifeq ($(CONFIG_WIN32),yes) -EXE=.exe -PROG=udptsseg$(EXE) -ifeq ($(MP4BOX_STATIC),yes) -LINKFLAGS+=-lgpac_static -lz $(EXTRALIBS) -else -LINKFLAGS+=-lgpac -endif -else -EXT= -PROG=udptsseg -ifeq ($(MP4BOX_STATIC),yes) -LINKFLAGS+=-lgpac_static -lz $(EXTRALIBS) -else -LINKFLAGS+=-lgpac -endif -endif - -#3 - spidermonkey support -ifeq ($(CONFIG_JS),no) -else -SCENEGRAPH_CFLAGS+=$(JS_FLAGS) -ifeq ($(CONFIG_JS),local) -NEED_LOCAL_LIB="yes" -endif -LINKFLAGS+=$(JS_LIBS) -endif - - -SRCS := $(OBJS:.o=.c) - -all: $(PROG) - -$(PROG): $(OBJS) - $(CC) $(LDFLAGS) -o ../../bin/gcc/$@ $(OBJS) $(LINKFLAGS) - - -%.o: %.c - $(CC) $(CFLAGS) -c -o $@ $< - - -clean: - rm -f $(OBJS) ../../bin/gcc/$(PROG) - -dep: depend - -depend: - rm -f .depend - $(CC) -MM $(CFLAGS) $(SRCS) 1>.depend - -distclean: clean - rm -f Makefile.bak .depend - - - -# include dependency files if they exist -# -ifneq ($(wildcard .depend),) -include .depend -endif +include ../../config.mak + +vpath %.c $(SRC_PATH)/applications/udptsseg + +CFLAGS= $(OPTFLAGS) -I"$(SRC_PATH)/include" + +ifeq ($(DEBUGBUILD), yes) +CFLAGS+=-g +LDFLAGS+=-g +endif + +ifeq ($(GPROFBUILD), yes) +CFLAGS+=-pg +LDFLAGS+=-pg +endif + +#common obj +OBJS= main.o + +LINKFLAGS=-L../../bin/gcc -L../../extra_lib/lib/gcc + +ifeq ($(CONFIG_WIN32),yes) +EXE=.exe +PROG=udptsseg$(EXE) +ifeq ($(MP4BOX_STATIC),yes) +LINKFLAGS+=-lgpac_static -lz $(EXTRALIBS) +else +LINKFLAGS+=-lgpac +endif +else +EXT= +PROG=udptsseg +ifeq ($(MP4BOX_STATIC),yes) +LINKFLAGS+=-lgpac_static -lz $(EXTRALIBS) +else +LINKFLAGS+=-lgpac +endif +endif + +#3 - spidermonkey support +ifeq ($(CONFIG_JS),no) +else +SCENEGRAPH_CFLAGS+=$(JS_FLAGS) +ifeq ($(CONFIG_JS),local) +NEED_LOCAL_LIB="yes" +endif +LINKFLAGS+=$(JS_LIBS) +endif + + +SRCS := $(OBJS:.o=.c) + +all: $(PROG) + +$(PROG): $(OBJS) + $(CC) $(LDFLAGS) -o ../../bin/gcc/$@ $(OBJS) $(LINKFLAGS) + + +%.o: %.c + $(CC) $(CFLAGS) -c -o $@ $< + + +clean: + rm -f $(OBJS) ../../bin/gcc/$(PROG) + +dep: depend + +depend: + rm -f .depend + $(CC) -MM $(CFLAGS) $(SRCS) 1>.depend + +distclean: clean + rm -f Makefile.bak .depend + + + +# include dependency files if they exist +# +ifneq ($(wildcard .depend),) +include .depend +endif diff --git a/applications/udptsseg/main.c b/applications/udptsseg/main.c index e2f472e..33ede4f 100644 --- a/applications/udptsseg/main.c +++ b/applications/udptsseg/main.c @@ -1,315 +1,315 @@ -/* -* GPAC - Multimedia Framework C SDK -* -* Copyright (c) ENST 2000-200X -* All rights reserved -* -* This file is part of GPAC / udp TS segmenter (udptsseg) application -* -* GPAC is free software; you can redistribute it and/or modify -* it under the terms of the GNU Lesser General Public License as published by -* the Free Software Foundation; either version 2, or (at your option) -* any later version. -* -* GPAC 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 Lesser General Public License for more details. -* -* You should have received a copy of the GNU Lesser General Public -* License along with this library; see the file COPYING. If not, write to -* the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -* -*/ -#include -#include -#include -#include -#include - -#define UDP_BUFFER_SIZE 64484 - -/* adapted from http://svn.assembla.com/svn/legend/segmenter/segmenter.c */ -static GF_Err write_manifest(char *manifest, char *segment_dir, u32 segment_duration, char *segment_prefix, char *http_prefix, - u32 first_segment, u32 last_segment, Bool end) { - FILE *manifest_fp; - u32 i; - char manifest_tmp_name[GF_MAX_PATH]; - char manifest_name[GF_MAX_PATH]; - char *tmp_manifest = manifest_tmp_name; - - if (segment_dir) { - sprintf(manifest_tmp_name, "%stmp.m3u8", segment_dir); - sprintf(manifest_name, "%s%s", segment_dir, manifest); - } else { - sprintf(manifest_tmp_name, "tmp.m3u8"); - sprintf(manifest_name, "%s", manifest); - } - - manifest_fp = fopen(tmp_manifest, "w"); - if (!manifest_fp) { - fprintf(stderr, "Could not create m3u8 manifest file (%s)\n", tmp_manifest); - return GF_BAD_PARAM; - } - - fprintf(manifest_fp, "#EXTM3U\n#EXT-X-TARGETDURATION:%u\n#EXT-X-MEDIA-SEQUENCE:%u\n", segment_duration, first_segment); - - for (i = first_segment; i <= last_segment; i++) { - fprintf(manifest_fp, "#EXTINF:%u,\n%s%s_%u.ts\n", segment_duration, http_prefix, segment_prefix, i); - } - - if (end) { - fprintf(manifest_fp, "#EXT-X-ENDLIST\n"); - } - fclose(manifest_fp); - - if (!rename(tmp_manifest, manifest_name)) { - return GF_OK; - } else { - if (remove(manifest_name)) { - fprintf(stdout, "Error removing file %s\n", manifest_name); - return GF_IO_ERR; - } else if (rename(tmp_manifest, manifest_name)) { - fprintf(stderr, "Could not rename temporary m3u8 manifest file (%s) into %s\n", tmp_manifest, manifest_name); - return GF_IO_ERR; - } else { - return GF_OK; - } - } -} - -void usage() -{ - fprintf(stderr, "usage: udptsseg -src=UDP -dst-file=FILE -segment-duration=DUR -segment-dir=DIR -segment-manifest=M3U8 -segment-http-prefix=P -segment-number=N\n" - "-src=UDP udp://address:port providing the input transport stream\n" - "-dst-file=FILE e.g. out.ts, radical name of all segments\n" - "-segment-dir=DIR server local directory to store segments (with the trailing path separator)\n" - "-segment-duration=DUR segment duration in seconds\n" - "-segment-manifest=M3U8 m3u8 file basename\n" - "-segment-http-prefix=P client address for accessing server segments\n" - "-segment-number=N only n segments are used using a cyclic pattern\n" - "\n"); -} - -int main(int argc, char **argv) -{ - u32 i; - char *arg = NULL; - char *ts_in = NULL; - char *segment_dir = NULL; - char *segment_manifest = NULL; - char *segment_http_prefix = NULL; - u32 run_time = 0; - char *input_ip = NULL; - u32 input_port = 0; - GF_Socket *input_udp_sk = NULL; - char *input_buffer = NULL; - u32 input_buffer_size = UDP_BUFFER_SIZE; - GF_Err e = GF_OK; - FILE *ts_output_file = NULL; - char *ts_out = NULL; - char segment_prefix[GF_MAX_PATH]; - char segment_name[GF_MAX_PATH]; - u32 segment_duration = 0; - u32 segment_index = 0; - u32 segment_number = 0; - char segment_manifest_default[GF_MAX_PATH]; - u32 run = 1; - u32 last_segment_time = 0; - u32 last_segment_size = 0; - u32 read = 0; - u32 towrite = 0; - u32 leftinbuffer = 0; - - fprintf(stdout, "UDP Transport Stream Segmenter\n"); - - if (argc < 7) { - usage(); - return 0; - } - /*****************/ - /* gpac init */ - /*****************/ - gf_sys_init(0); - gf_log_set_level(GF_LOG_ERROR); - gf_log_set_tools(0xFFFFFFFF); - - /*****************/ - /* parsing of the arguments */ - /*****************/ - for (i = 1; i < (u32) argc ; i++) { - arg = argv[i]; - if (!strnicmp(arg, "-src=udp://",11)) { - char *sep; - arg+=11; - sep = strchr(arg+6, ':'); - if (sep) { - input_port = atoi(sep+1); - sep[0]=0; - input_ip = gf_strdup(arg); - sep[0]=':'; - } else { - input_ip = gf_strdup(arg); - } - - } else if (!strnicmp(arg, "-time=", 6)) { - run_time = atoi(arg+6); - } else if (!strnicmp(arg, "-dst-file=", 10)) { - ts_out = gf_strdup(arg+10); - } else if (!strnicmp(arg, "-segment-dir=", 13)) { - segment_dir = gf_strdup(arg+13); - } else if (!strnicmp(arg, "-segment-duration=", 18)) { - segment_duration = atoi(arg+18); - } else if (!strnicmp(arg, "-segment-manifest=", 18)) { - segment_manifest = gf_strdup(arg+18); - } else if (!strnicmp(arg, "-segment-http-prefix=", 21)) { - segment_http_prefix = gf_strdup(arg+21); - } else if (!strnicmp(arg, "-segment-number=", 16)) { - segment_number = atoi(arg+16); - } - } - fprintf(stdout, "Listening to TS input on %s:%d\n", input_ip, input_port); - fprintf(stdout, "Creating %d sec. segments in directory %s\n", segment_duration, segment_dir); - fprintf(stdout, "Creating %s manifest with %d segments\n", segment_manifest, segment_number); - - /*****************/ - /* creation of the input socket */ - /*****************/ - input_udp_sk = gf_sk_new(GF_SOCK_TYPE_UDP); - if (gf_sk_is_multicast_address((char *)input_ip)) { - e = gf_sk_setup_multicast(input_udp_sk, (char *)input_ip, input_port, 32, 0, NULL); - } else { - e = gf_sk_bind(input_udp_sk, NULL, input_port, (char *)input_ip, input_port, GF_SOCK_REUSE_PORT); - } - if (e) { - fprintf(stdout, "Error initializing UDP socket for %s:%d : %s\n", input_ip, input_port, gf_error_to_string(e)); - goto exit; - } - gf_sk_set_buffer_size(input_udp_sk, 0, UDP_BUFFER_SIZE); - gf_sk_set_block_mode(input_udp_sk, 1); - - /*****************/ - /* Initialisation of the TS and Manifest files */ - /*****************/ - - if (segment_duration) { - char *dot; - strcpy(segment_prefix, ts_out); - dot = strrchr(segment_prefix, '.'); - dot[0] = 0; - if (segment_dir) { - if (strchr("\\/", segment_name[strlen(segment_name)-1])) { - sprintf(segment_name, "%s%s_%d.ts", segment_dir, segment_prefix, segment_index); - } else { - sprintf(segment_name, "%s%c%s_%d.ts", segment_dir, GF_PATH_SEPARATOR, segment_prefix, segment_index); - } - } else { - sprintf(segment_name, "%s_%d.ts", segment_prefix, segment_index); - } - fprintf(stderr, "Processing %s segment\r", segment_name); - ts_out = gf_strdup(segment_name); - if (!segment_manifest) { - sprintf(segment_manifest_default, "%s.m3u8", segment_prefix); - segment_manifest = segment_manifest_default; - } - //write_manifest(segment_manifest, segment_dir, segment_duration, segment_prefix, segment_http_prefix, segment_index, 0, 0); - } - ts_output_file = fopen(ts_out, "wb"); - if (!ts_output_file) { - fprintf(stderr, "Error opening %s\n", ts_out); - goto exit; - } - - /*allocate data buffer*/ - input_buffer = (char*)gf_malloc(input_buffer_size); - assert(input_buffer); - - /*****************/ - /* main loop */ - /*****************/ - last_segment_time = gf_sys_clock(); - last_segment_size = 0; - while (run) { - /*check for some input from the network*/ - if (input_ip) { - gf_sk_receive(input_udp_sk, input_buffer+leftinbuffer, input_buffer_size-leftinbuffer, 0, &read); - leftinbuffer += read; - if (leftinbuffer) { - fprintf(stderr, "Processing %s segment ... received %d bytes (buffer: %d, segment: %d)\n", segment_name, read, leftinbuffer, last_segment_size); - if (input_buffer[0] != 0x47) { - u32 i = 0; - while (input_buffer[i] != 0x47 && i < leftinbuffer) i++; - fprintf(stderr, "Warning: data in buffer not starting with the MPEG-2 TS sync byte, skipping %d bytes of %d\n", i, leftinbuffer); - if (i < leftinbuffer) memmove(input_buffer, input_buffer+i, leftinbuffer-i); - leftinbuffer -=i; - } - if ((leftinbuffer % 188) != 0) { - fprintf(stderr, "Warning: data in buffer with a size (%d bytes) not multiple of 188 bytes\n", leftinbuffer); - towrite = leftinbuffer - (leftinbuffer % 188); - } else { - towrite = leftinbuffer; - } - } else { - towrite = 0; - } - /*write to current file */ - if (ts_output_file != NULL) { - u32 now = gf_sys_clock(); - if (towrite) { - fwrite(input_buffer, 1, towrite, ts_output_file); - if (towrite < leftinbuffer) { - fprintf(stderr, "Warning: wrote %d bytes, keeping %d bytes\n", towrite, (leftinbuffer-towrite)); - memmove(input_buffer, input_buffer+towrite, leftinbuffer-towrite); - } - leftinbuffer -= towrite; - last_segment_size += towrite; - } - if ((now - last_segment_time) > segment_duration*1000) { - last_segment_time = now; - fclose(ts_output_file); - fprintf(stderr, "Closing segment %s (%d bytes)\n", segment_name, last_segment_size); - last_segment_size = 0; - segment_index++; - if (segment_dir) { - if (strchr("\\/", segment_name[strlen(segment_name)-1])) { - sprintf(segment_name, "%s%s_%d.ts", segment_dir, segment_prefix, segment_index); - } else { - sprintf(segment_name, "%s%c%s_%d.ts", segment_dir, GF_PATH_SEPARATOR, segment_prefix, segment_index); - } - } else { - sprintf(segment_name, "%s_%d.ts", segment_prefix, segment_index); - } - ts_output_file = fopen(segment_name, "wb"); - if (!ts_output_file) { - fprintf(stderr, "Error opening segment %s\n", segment_name); - goto exit; - } - /* delete the oldest segment */ - if (segment_number && ((s32) (segment_index - segment_number - 1) >= 0)){ - char old_segment_name[GF_MAX_PATH]; - if (segment_dir) { - if (strchr("\\/", segment_name[strlen(segment_name)-1])) { - sprintf(old_segment_name, "%s%s_%d.ts", segment_dir, segment_prefix, segment_index - segment_number - 1); - } else { - sprintf(old_segment_name, "%s/%s_%d.ts", segment_dir, segment_prefix, segment_index - segment_number - 1); - } - } else { - sprintf(old_segment_name, "%s_%d.ts", segment_prefix, segment_index - segment_number - 1); - } - gf_delete_file(old_segment_name); - fprintf(stderr, "Deleting segment %s\n", old_segment_name); - } - write_manifest(segment_manifest, segment_dir, segment_duration, segment_prefix, segment_http_prefix, - // (segment_index >= segment_number/2 ? segment_index - segment_number/2 : 0), segment_index >1 ? segment_index-1 : 0, 0); - ( (segment_index > segment_number ) ? segment_index - segment_number : 0), segment_index >1 ? segment_index-1 : 0, 0); - } - } - - //} - } - /*cpu load regulation*/ - gf_sleep(1); - } -exit: - return 0; -} +/* +* GPAC - Multimedia Framework C SDK +* +* Copyright (c) ENST 2000-200X +* All rights reserved +* +* This file is part of GPAC / udp TS segmenter (udptsseg) application +* +* GPAC is free software; you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation; either version 2, or (at your option) +* any later version. +* +* GPAC 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 Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with this library; see the file COPYING. If not, write to +* the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +* +*/ +#include +#include +#include +#include +#include + +#define UDP_BUFFER_SIZE 64484 + +/* adapted from http://svn.assembla.com/svn/legend/segmenter/segmenter.c */ +static GF_Err write_manifest(char *manifest, char *segment_dir, u32 segment_duration, char *segment_prefix, char *http_prefix, + u32 first_segment, u32 last_segment, Bool end) { + FILE *manifest_fp; + u32 i; + char manifest_tmp_name[GF_MAX_PATH]; + char manifest_name[GF_MAX_PATH]; + char *tmp_manifest = manifest_tmp_name; + + if (segment_dir) { + sprintf(manifest_tmp_name, "%stmp.m3u8", segment_dir); + sprintf(manifest_name, "%s%s", segment_dir, manifest); + } else { + sprintf(manifest_tmp_name, "tmp.m3u8"); + sprintf(manifest_name, "%s", manifest); + } + + manifest_fp = fopen(tmp_manifest, "w"); + if (!manifest_fp) { + fprintf(stderr, "Could not create m3u8 manifest file (%s)\n", tmp_manifest); + return GF_BAD_PARAM; + } + + fprintf(manifest_fp, "#EXTM3U\n#EXT-X-TARGETDURATION:%u\n#EXT-X-MEDIA-SEQUENCE:%u\n", segment_duration, first_segment); + + for (i = first_segment; i <= last_segment; i++) { + fprintf(manifest_fp, "#EXTINF:%u,\n%s%s_%u.ts\n", segment_duration, http_prefix, segment_prefix, i); + } + + if (end) { + fprintf(manifest_fp, "#EXT-X-ENDLIST\n"); + } + fclose(manifest_fp); + + if (!rename(tmp_manifest, manifest_name)) { + return GF_OK; + } else { + if (remove(manifest_name)) { + fprintf(stdout, "Error removing file %s\n", manifest_name); + return GF_IO_ERR; + } else if (rename(tmp_manifest, manifest_name)) { + fprintf(stderr, "Could not rename temporary m3u8 manifest file (%s) into %s\n", tmp_manifest, manifest_name); + return GF_IO_ERR; + } else { + return GF_OK; + } + } +} + +void usage() +{ + fprintf(stderr, "usage: udptsseg -src=UDP -dst-file=FILE -segment-duration=DUR -segment-dir=DIR -segment-manifest=M3U8 -segment-http-prefix=P -segment-number=N\n" + "-src=UDP udp://address:port providing the input transport stream\n" + "-dst-file=FILE e.g. out.ts, radical name of all segments\n" + "-segment-dir=DIR server local directory to store segments (with the trailing path separator)\n" + "-segment-duration=DUR segment duration in seconds\n" + "-segment-manifest=M3U8 m3u8 file basename\n" + "-segment-http-prefix=P client address for accessing server segments\n" + "-segment-number=N only n segments are used using a cyclic pattern\n" + "\n"); +} + +int main(int argc, char **argv) +{ + u32 i; + char *arg = NULL; + char *ts_in = NULL; + char *segment_dir = NULL; + char *segment_manifest = NULL; + char *segment_http_prefix = NULL; + u32 run_time = 0; + char *input_ip = NULL; + u32 input_port = 0; + GF_Socket *input_udp_sk = NULL; + char *input_buffer = NULL; + u32 input_buffer_size = UDP_BUFFER_SIZE; + GF_Err e = GF_OK; + FILE *ts_output_file = NULL; + char *ts_out = NULL; + char segment_prefix[GF_MAX_PATH]; + char segment_name[GF_MAX_PATH]; + u32 segment_duration = 0; + u32 segment_index = 0; + u32 segment_number = 0; + char segment_manifest_default[GF_MAX_PATH]; + u32 run = 1; + u32 last_segment_time = 0; + u32 last_segment_size = 0; + u32 read = 0; + u32 towrite = 0; + u32 leftinbuffer = 0; + + fprintf(stdout, "UDP Transport Stream Segmenter\n"); + + if (argc < 7) { + usage(); + return 0; + } + /*****************/ + /* gpac init */ + /*****************/ + gf_sys_init(0); + gf_log_set_level(GF_LOG_ERROR); + gf_log_set_tools(0xFFFFFFFF); + + /*****************/ + /* parsing of the arguments */ + /*****************/ + for (i = 1; i < (u32) argc ; i++) { + arg = argv[i]; + if (!strnicmp(arg, "-src=udp://",11)) { + char *sep; + arg+=11; + sep = strchr(arg+6, ':'); + if (sep) { + input_port = atoi(sep+1); + sep[0]=0; + input_ip = gf_strdup(arg); + sep[0]=':'; + } else { + input_ip = gf_strdup(arg); + } + + } else if (!strnicmp(arg, "-time=", 6)) { + run_time = atoi(arg+6); + } else if (!strnicmp(arg, "-dst-file=", 10)) { + ts_out = gf_strdup(arg+10); + } else if (!strnicmp(arg, "-segment-dir=", 13)) { + segment_dir = gf_strdup(arg+13); + } else if (!strnicmp(arg, "-segment-duration=", 18)) { + segment_duration = atoi(arg+18); + } else if (!strnicmp(arg, "-segment-manifest=", 18)) { + segment_manifest = gf_strdup(arg+18); + } else if (!strnicmp(arg, "-segment-http-prefix=", 21)) { + segment_http_prefix = gf_strdup(arg+21); + } else if (!strnicmp(arg, "-segment-number=", 16)) { + segment_number = atoi(arg+16); + } + } + fprintf(stdout, "Listening to TS input on %s:%d\n", input_ip, input_port); + fprintf(stdout, "Creating %d sec. segments in directory %s\n", segment_duration, segment_dir); + fprintf(stdout, "Creating %s manifest with %d segments\n", segment_manifest, segment_number); + + /*****************/ + /* creation of the input socket */ + /*****************/ + input_udp_sk = gf_sk_new(GF_SOCK_TYPE_UDP); + if (gf_sk_is_multicast_address((char *)input_ip)) { + e = gf_sk_setup_multicast(input_udp_sk, (char *)input_ip, input_port, 32, 0, NULL); + } else { + e = gf_sk_bind(input_udp_sk, NULL, input_port, (char *)input_ip, input_port, GF_SOCK_REUSE_PORT); + } + if (e) { + fprintf(stdout, "Error initializing UDP socket for %s:%d : %s\n", input_ip, input_port, gf_error_to_string(e)); + goto exit; + } + gf_sk_set_buffer_size(input_udp_sk, 0, UDP_BUFFER_SIZE); + gf_sk_set_block_mode(input_udp_sk, 1); + + /*****************/ + /* Initialisation of the TS and Manifest files */ + /*****************/ + + if (segment_duration) { + char *dot; + strcpy(segment_prefix, ts_out); + dot = strrchr(segment_prefix, '.'); + dot[0] = 0; + if (segment_dir) { + if (strchr("\\/", segment_name[strlen(segment_name)-1])) { + sprintf(segment_name, "%s%s_%d.ts", segment_dir, segment_prefix, segment_index); + } else { + sprintf(segment_name, "%s%c%s_%d.ts", segment_dir, GF_PATH_SEPARATOR, segment_prefix, segment_index); + } + } else { + sprintf(segment_name, "%s_%d.ts", segment_prefix, segment_index); + } + fprintf(stderr, "Processing %s segment\r", segment_name); + ts_out = gf_strdup(segment_name); + if (!segment_manifest) { + sprintf(segment_manifest_default, "%s.m3u8", segment_prefix); + segment_manifest = segment_manifest_default; + } + //write_manifest(segment_manifest, segment_dir, segment_duration, segment_prefix, segment_http_prefix, segment_index, 0, 0); + } + ts_output_file = fopen(ts_out, "wb"); + if (!ts_output_file) { + fprintf(stderr, "Error opening %s\n", ts_out); + goto exit; + } + + /*allocate data buffer*/ + input_buffer = (char*)gf_malloc(input_buffer_size); + assert(input_buffer); + + /*****************/ + /* main loop */ + /*****************/ + last_segment_time = gf_sys_clock(); + last_segment_size = 0; + while (run) { + /*check for some input from the network*/ + if (input_ip) { + gf_sk_receive(input_udp_sk, input_buffer+leftinbuffer, input_buffer_size-leftinbuffer, 0, &read); + leftinbuffer += read; + if (leftinbuffer) { + fprintf(stderr, "Processing %s segment ... received %d bytes (buffer: %d, segment: %d)\n", segment_name, read, leftinbuffer, last_segment_size); + if (input_buffer[0] != 0x47) { + u32 i = 0; + while (input_buffer[i] != 0x47 && i < leftinbuffer) i++; + fprintf(stderr, "Warning: data in buffer not starting with the MPEG-2 TS sync byte, skipping %d bytes of %d\n", i, leftinbuffer); + if (i < leftinbuffer) memmove(input_buffer, input_buffer+i, leftinbuffer-i); + leftinbuffer -=i; + } + if ((leftinbuffer % 188) != 0) { + fprintf(stderr, "Warning: data in buffer with a size (%d bytes) not multiple of 188 bytes\n", leftinbuffer); + towrite = leftinbuffer - (leftinbuffer % 188); + } else { + towrite = leftinbuffer; + } + } else { + towrite = 0; + } + /*write to current file */ + if (ts_output_file != NULL) { + u32 now = gf_sys_clock(); + if (towrite) { + fwrite(input_buffer, 1, towrite, ts_output_file); + if (towrite < leftinbuffer) { + fprintf(stderr, "Warning: wrote %d bytes, keeping %d bytes\n", towrite, (leftinbuffer-towrite)); + memmove(input_buffer, input_buffer+towrite, leftinbuffer-towrite); + } + leftinbuffer -= towrite; + last_segment_size += towrite; + } + if ((now - last_segment_time) > segment_duration*1000) { + last_segment_time = now; + fclose(ts_output_file); + fprintf(stderr, "Closing segment %s (%d bytes)\n", segment_name, last_segment_size); + last_segment_size = 0; + segment_index++; + if (segment_dir) { + if (strchr("\\/", segment_name[strlen(segment_name)-1])) { + sprintf(segment_name, "%s%s_%d.ts", segment_dir, segment_prefix, segment_index); + } else { + sprintf(segment_name, "%s%c%s_%d.ts", segment_dir, GF_PATH_SEPARATOR, segment_prefix, segment_index); + } + } else { + sprintf(segment_name, "%s_%d.ts", segment_prefix, segment_index); + } + ts_output_file = fopen(segment_name, "wb"); + if (!ts_output_file) { + fprintf(stderr, "Error opening segment %s\n", segment_name); + goto exit; + } + /* delete the oldest segment */ + if (segment_number && ((s32) (segment_index - segment_number - 1) >= 0)){ + char old_segment_name[GF_MAX_PATH]; + if (segment_dir) { + if (strchr("\\/", segment_name[strlen(segment_name)-1])) { + sprintf(old_segment_name, "%s%s_%d.ts", segment_dir, segment_prefix, segment_index - segment_number - 1); + } else { + sprintf(old_segment_name, "%s/%s_%d.ts", segment_dir, segment_prefix, segment_index - segment_number - 1); + } + } else { + sprintf(old_segment_name, "%s_%d.ts", segment_prefix, segment_index - segment_number - 1); + } + gf_delete_file(old_segment_name); + fprintf(stderr, "Deleting segment %s\n", old_segment_name); + } + write_manifest(segment_manifest, segment_dir, segment_duration, segment_prefix, segment_http_prefix, + // (segment_index >= segment_number/2 ? segment_index - segment_number/2 : 0), segment_index >1 ? segment_index-1 : 0, 0); + ( (segment_index > segment_number ) ? segment_index - segment_number : 0), segment_index >1 ? segment_index-1 : 0, 0); + } + } + + //} + } + /*cpu load regulation*/ + gf_sleep(1); + } +exit: + return 0; +} diff --git a/applications/v4studio/wxGPACPanel.cpp b/applications/v4studio/wxGPACPanel.cpp index a1ae41b..1e36858 100644 --- a/applications/v4studio/wxGPACPanel.cpp +++ b/applications/v4studio/wxGPACPanel.cpp @@ -246,97 +246,16 @@ bool GPACInit(void *application, GF_Terminal **term, GF_User *user, bool quiet) #endif /*load config*/ - user->config = gf_cfg_new(abs_gpac_path.c_str(), gpac_cfg); + Bool first_launch = 0; + user->config = gf_cfg_init(NULL, &first_launch); if (!user->config) { - unsigned char config_file[GF_MAX_PATH]; - strcpy((char *) config_file, (const char *) abs_gpac_path.c_str()); - if (config_file[strlen((char *) config_file)-1] != GF_PATH_SEPARATOR) { - char szSep[2]; - szSep[0] = GF_PATH_SEPARATOR; - szSep[1] = 0; - strcat((char *) config_file, (const char *)szSep); - } - strcat((char *) config_file, gpac_cfg); - FILE *ft = fopen((const char *) config_file, "wt"); - if (!ft) { - wxMessageDialog(NULL, "Cannot create blank config file", "Init error", wxOK).ShowModal(); - return 0; - } - fclose(ft); - user->config = gf_cfg_new(abs_gpac_path.c_str(), gpac_cfg); - if (!user->config) { - wxMessageDialog(NULL, "Cannot open GPAC configuration file", "Init error", wxOK); - return 0; - } + wxMessageDialog(NULL, "Cannot create GPAC config file", "Init error", wxOK).ShowModal(); } if (!quiet) ::wxLogMessage("GPAC configuration file opened - looking for modules"); const char *str = gf_cfg_get_key(user->config, "General", "ModulesDirectory"); - Bool first_launch = 0; - if (!str) { - first_launch = 1; -#ifdef GPAC_MODULES_PATH - str = GPAC_MODULES_PATH; -#else - str = abs_gpac_path.c_str(); -#endif - } user->modules = gf_modules_new(str, user->config); - /*initial launch*/ - if (first_launch || !gf_modules_get_count(user->modules)) { - const char *sOpt; - wxDirDialog dlg(NULL, "Locate GPAC modules directory"); - if (!gf_modules_get_count(user->modules)) { - gf_modules_del(user->modules); - user->modules = NULL; - if ( dlg.ShowModal() != wxID_OK ) return false; - str = dlg.GetPath().c_str();; - - user->modules = gf_modules_new(str, user->config); - if (!user->modules || !gf_modules_get_count(user->modules) ) { - wxMessageDialog(NULL, "Cannot find any modules for GPAC", "Init error", wxOK); - gf_cfg_del(user->config); - return 0; - } - } - - gf_cfg_set_key(user->config, "General", "ModulesDirectory", (const char *) str); - - /*check audio config on windows, force config*/ - sOpt = gf_cfg_get_key(user->config, "Audio", "ForceConfig"); - if (!sOpt) { - gf_cfg_set_key(user->config, "Audio", "ForceConfig", "yes"); - gf_cfg_set_key(user->config, "Audio", "NumBuffers", "2"); - gf_cfg_set_key(user->config, "Audio", "TotalDuration", "120"); - } - -#ifdef WIN32 - sOpt = gf_cfg_get_key(user->config, "Compositor", "Raster2D"); - if (!sOpt) gf_cfg_set_key(user->config, "Compositor", "Raster2D", "gdip_rend"); - sOpt = gf_cfg_get_key(user->config, "General", "CacheDirectory"); - if (!sOpt) { - unsigned char str_path[MAX_PATH]; - sprintf((char *) str_path, "%scache", abs_gpac_path.c_str()); - gf_cfg_set_key(user->config, "General", "CacheDirectory", (const char *) str_path); - } - /*by default use GDIplus, much faster than freetype on font loading*/ - gf_cfg_set_key(user->config, "FontEngine", "FontReader", "gdip_rend"); - gf_cfg_set_key(user->config, "Video", "DriverName", "DirectX Video Output"); -#else - wxDirDialog dlg3(NULL, "Please specify a cache directory for GPAC"); - dlg3.SetPath("/tmp"); - if ( dlg3.ShowModal() == wxID_OK ) - gf_cfg_set_key(user->config, "General", "CacheDirectory", (const char *) dlg3.GetPath().c_str() ); - - wxDirDialog dlg2(NULL, "Please locate a TrueType font repository on your system for text support"); - dlg2.SetPath("/usr/share/fonts/truetype"); - if ( dlg2.ShowModal() == wxID_OK ) - gf_cfg_set_key(user->config, "FontEngine", "FontDirectory", (const char *) dlg2.GetPath().c_str() ); - - gf_cfg_set_key(user->config, "Video", "DriverName", "SDL Video Output"); -#endif - } if (! gf_modules_get_count(user->modules) ) { wxMessageDialog(NULL, "No modules available - system cannot work", "Fatal Error", wxOK).ShowModal(); gf_modules_del(user->modules); diff --git a/bin/smartphone 2003 (armv4)/release/install/archive.bat b/bin/smartphone 2003 (armv4)/release/install/archive.bat new file mode 100644 index 0000000..acad9b7 --- /dev/null +++ b/bin/smartphone 2003 (armv4)/release/install/archive.bat @@ -0,0 +1,8 @@ +set OLDDIR=%CD% +cd /d %~dp0 + +for /f "delims=" %%a in ('svnversion ') do set gpac_revision=%%a + +zip "GPAC_0.4.6-r%gpac_revision%_WindowsMobile.zip" ../*.dll ../*.exe ../*.plg + +cd /d %OLDDIR% diff --git a/bin/smartphone 2003 (armv4)/release/install/do.bat b/bin/smartphone 2003 (armv4)/release/install/build_installer.bat similarity index 90% rename from bin/smartphone 2003 (armv4)/release/install/do.bat rename to bin/smartphone 2003 (armv4)/release/install/build_installer.bat index 838e486..eb69935 100644 --- a/bin/smartphone 2003 (armv4)/release/install/do.bat +++ b/bin/smartphone 2003 (armv4)/release/install/build_installer.bat @@ -1,27 +1,33 @@ -for /f "delims=" %%a in ('svnversion') do set gpac_revision=%%a - -ECHO [Version] > gpaccab.inf -ECHO Provider = "GPAC 0.4.6-r%gpac_revision%" >> gpaccab.inf -type gpac.inf >> gpaccab.inf - -CabWiz gpaccab.inf - -ECHO off - -ECHO [CEAppManager]> gpac.ini -ECHO Version = 0.4.6-r%gpac_revision%>> gpac.ini -ECHO Component = GPAC for Windows Mobile>> gpac.ini -ECHO [GPAC for Windows Mobile]>> gpac.ini -ECHO Description = GPAC MPEG-4 Player>> gpac.ini -ECHO Uninstall = GPAC Osmophone>> gpac.ini -ECHO IconFile = ..\..\..\..\doc\osmo4.ico>> gpac.ini -ECHO IconIndex = 0 >> gpac.ini -ECHO CabFiles = gpaccab.cab >> gpac.ini - -ECHO on - -ezsetup -l english -i gpac.ini -r readme.txt -e ../../../../COPYING -o gpac.exe -rename gpac.exe "GPAC_0.4.6-r%gpac_revision%_WindowsMobile.exe" -DEL gpaccab.cab -DEL gpaccab.inf -DEL gpac.ini +set OLDDIR=%CD% +cd /d %~dp0 + +for /f "delims=" %%a in ('svnversion') do set gpac_revision=%%a + +ECHO [Version] > gpaccab.inf +ECHO Provider = "GPAC 0.4.6-r%gpac_revision%" >> gpaccab.inf +type gpac.inf >> gpaccab.inf + +CabWiz gpaccab.inf + +ECHO off + +ECHO [CEAppManager]> gpac.ini +ECHO Version = 0.4.6-r%gpac_revision%>> gpac.ini +ECHO Component = GPAC for Windows Mobile>> gpac.ini +ECHO [GPAC for Windows Mobile]>> gpac.ini +ECHO Description = GPAC MPEG-4 Player>> gpac.ini +ECHO Uninstall = GPAC Osmophone>> gpac.ini +ECHO IconFile = ..\..\..\..\doc\osmo4.ico>> gpac.ini +ECHO IconIndex = 0 >> gpac.ini +ECHO CabFiles = gpaccab.cab >> gpac.ini + +ECHO on + +ezsetup -l english -i gpac.ini -r readme.txt -e ../../../../COPYING -o gpac.exe +rename gpac.exe "GPAC_0.4.6-r%gpac_revision%_WindowsMobile.exe" +DEL gpaccab.cab +DEL gpaccab.inf +DEL gpac.ini +DEL *.tmp + +cd /d %OLDDIR% diff --git a/bin/smartphone 2003 (armv4)/release/install/gpac.inf b/bin/smartphone 2003 (armv4)/release/install/gpac.inf index 92802dc..e442453 100644 --- a/bin/smartphone 2003 (armv4)/release/install/gpac.inf +++ b/bin/smartphone 2003 (armv4)/release/install/gpac.inf @@ -38,7 +38,7 @@ msvcr80.dll = 1 libGLES_CM.dll = 1 ;comment this one if not using SpiderMonkey -js.dll = 1 +js32.dll = 1 ;uncomment if your device doesn't have GX installed (I think most do) ;gx.dll = 2 @@ -91,7 +91,7 @@ DefaultDestDir = 0, %InstallDir% ;"gx.dll" "libgpac.dll" "GPAX.dll" -"js.dll" +"js32.dll" "libGLES_CM.dll" "msvcr80.dll" diff --git a/bin/win32/release/nsis_install/gpac_installer.nsi b/bin/win32/release/nsis_install/gpac_installer.nsi index 31c2a75..128a87c 100644 --- a/bin/win32/release/nsis_install/gpac_installer.nsi +++ b/bin/win32/release/nsis_install/gpac_installer.nsi @@ -242,6 +242,9 @@ Section "Osmo4/GPAC Player" SecOsmo4 File "..\gm_dx_hw.dll" File "..\js32.dll" File "..\gm_gpac_js.dll" + File "..\libeay32.dll" + File "..\ssleay32.dll" + File "..\gm_ismacryp.dll" ;create default cache SetOutPath $INSTDIR\cache @@ -505,7 +508,9 @@ Section "Add Start Menu Shortcuts" SetShellVarContext all CreateDirectory "$SMPROGRAMS\Osmo4" CreateShortCut "$SMPROGRAMS\Osmo4\Uninstall.lnk" "$INSTDIR\uninstall.exe" "" "$INSTDIR\uninstall.exe" 0 - CreateShortCut "$SMPROGRAMS\Osmo4\Osmo4.lnk" "$INSTDIR\Osmo4.exe" "" "$INSTDIR\Osmo4.exe" 0 + CreateShortCut "$SMPROGRAMS\Osmo4\Osmo4 (Classic UI).lnk" "$INSTDIR\Osmo4.exe" "" + CreateShortCut "$SMPROGRAMS\Osmo4\Osmo4 (New UI).lnk" "$INSTDIR\MP4Client.exe" "-gui" + CreateShortCut "$SMPROGRAMS\Osmo4\Osmo4 (New UI With Console).lnk" "$INSTDIR\MP4Client.exe" "" CreateShortCut "$SMPROGRAMS\Osmo4\Readme.lnk" "$INSTDIR\ReadMe.txt" CreateShortCut "$SMPROGRAMS\Osmo4\License.lnk" "$INSTDIR\License.txt" CreateShortCut "$SMPROGRAMS\Osmo4\History.lnk" "$INSTDIR\changelog.txt" diff --git a/bin/win32/release/nsis_install/readme.txt b/bin/win32/release/nsis_install/readme.txt index 962fbc8..379aa05 100644 --- a/bin/win32/release/nsis_install/readme.txt +++ b/bin/win32/release/nsis_install/readme.txt @@ -1,13 +1,13 @@ -GPAC: NSIS installer manual -========================== - -Recommended ------------ - -Please execute the "generate_installer.bat" file at the root GPAC directory. The revision and version will be retrieved. - - -Alternative (developers only) ------------------------------ - -Launching the NSIS installer the "bin\win32\release\nsis_install" will generate an unversion installer. The DATE/HOUR will be included in the installer file. Use it in case you're making some experimental developments. +GPAC: NSIS installer manual +========================== + +Recommended +----------- + +Please execute the "generate_installer.bat" file at the root GPAC directory. The revision and version will be retrieved. + + +Alternative (developers only) +----------------------------- + +Launching the NSIS installer the "bin\win32\release\nsis_install" will generate an unversion installer. The DATE/HOUR will be included in the installer file. Use it in case you're making some experimental developments. diff --git a/build/android/AndroidManifest.xml b/build/android/AndroidManifest.xml index 2243c8a..d17445e 100644 --- a/build/android/AndroidManifest.xml +++ b/build/android/AndroidManifest.xml @@ -1,6 +1,6 @@ diff --git a/build/android/README b/build/android/README new file mode 100644 index 0000000..b9ba225 --- /dev/null +++ b/build/android/README @@ -0,0 +1,73 @@ +********************************* +* How to build GPAC for Android * +********************************* + +To compile GPAC for Android, please execute the following steps: + +1) Check out the GPAC SVN repository (but if you read this you probably already checkouted the GPAC SVN repository): + + svn co https://gpac.svn.sourceforge.net/svnroot/gpac/trunk/ + This directory will be reminded as + +2) Get the Android softwares: + + A. Download the Android SDK at http://developer.android.com/sdk/index.html and unzip it at a place of your choice (referenced as ). + + B. Download the Android NDK at http://developer.android.com/sdk/ndk/index.html and unzip it at a place of your choice (referenced as ). + + C. One of the following tools i) or ii) are needed for building the Android Package (APK): + i) GPAC provides scripts to build the APK from the shell. No IDE is needed. Get ANT (at least the 1.8 version) from http://ant.apache.org/bindownload.cgi and install it at a place of your choice (referenced as ). + You will then ignore every step in this readme that follow the ii) mark (as it concerns only people using eclipse instead of ANT). + + ii) Eclipse IDE is useful if you want to go beyond the build (ie debug, add features, use the simulator etc). Firstly get Eclipse for java at http://www.eclipse.org/downloads/?osType=linux. + Then get the ADT (Android Development Tools) plug-in in order to allow Eclipse to interact with Android tools at http://developer.android.com/sdk/eclipse-adt.html and follow the instructions. + You will then ignore every step in this readme that follow the i) mark (as it concerns only people using ANT instead of Eclipse). + + D. Get and install SDK Component for Android: + + i) If you have ANT, launch /tools/android. This opens a window. On the left panel, click on "Available packages", select "Android Repository" and then "Install Selected". + + ii) If you have Eclipse Select Window->Preferences->Android and put the SDK directory path. Then select Window > Android SDK and AVD Managergo get the packages (Android repository packages are needed. The third party ones depend on the target devices. More informations at http://developer.android.com/sdk/adding-components.html. + +3) Compile extra-libs for android + + A. Build all extra-libs + + Go to /trunk/gpac_extra_libs. Unzip the zipped package : + unzip gpac_extra_libs.zip + Go to /trunk/gpac_extra_libs/build/android. Give you the right to execute the script gpac_build_all_extra_libs (e.g. chmod u+x gpac_build_all_extra_libs ). + Run the script as follow : ./gpac_build_all_extra_libs + + B. Copy all the compiled extra lib to the right folder + + Go back to /trunk/gpac_extra_libs/ . + Copy the just compiled libs into /trunk/gpac/extra_lib/lib/android by entering this command : + cp -r lib/android/* ../gpac/extra_lib/lib/android/ + +4) Building GPAC for Android + + (optionnal) Links the Android SDK and NDK directories + + * cd /opt/ + * sudo ln -s /home/xxx/xxx/ android_sdk /* /opt/android_sdk will then become your new */ + * sudo ln -s /home/xxx/xxx/ android_ndk /* /opt/android_ndk will then become your new */ + + i) Building Osmo4.apk without Eclipse + + (optionnal)Create a link to the ANT directory + * cd /opt/ + * sudo ln -s /home/xxx/xxx/ANT_DIR ant /* /opt/ant will then cecome your new + + Then go to GPAC_DIR/build/android/jni and launch the script + ./gpac_build_android + It will generate the package Osmo4.apk. + You can find the Osmo4.apk in GPAC_DIR/applications/osmo4_android/bin + + ii)Building Osmo4.apk with Eclipse + + Go to GPAC_DIR/build/android/jni and launch the script + ./gpac_build_android + ** Warning, two messages will appear to alert you didnt provide any link to ANT and to the Android SDK . ** + ** These message inform you that the script can't build the Osmo4.apk package on it's own and that you'll need eclipse to build it.** + Start Eclipse and select File->Import->General->Existing projects into Workspace and open the directory /applications/osmo4_android. + Build the package and it is created in /applications/osmo4_android/bin. diff --git a/build/android/gen/com/artemis/gpac/R.java b/build/android/gen/com/enst/gpac/R.java similarity index 95% rename from build/android/gen/com/artemis/gpac/R.java rename to build/android/gen/com/enst/gpac/R.java index 597d21d..a280408 100644 --- a/build/android/gen/com/artemis/gpac/R.java +++ b/build/android/gen/com/enst/gpac/R.java @@ -5,7 +5,7 @@ * should not be modified by hand. */ -package com.artemis.gpac; +package com.enst.gpac; public final class R { public static final class attr { diff --git a/build/android/jni/Android.mk b/build/android/jni/Android.mk index 5053e7d..d2696ed 100755 --- a/build/android/jni/Android.mk +++ b/build/android/jni/Android.mk @@ -1 +1,3 @@ include $(call all-subdir-makefiles) + + diff --git a/build/android/jni/Application.mk b/build/android/jni/Application.mk index 4663f2f..e0f29c1 100644 --- a/build/android/jni/Application.mk +++ b/build/android/jni/Application.mk @@ -1,4 +1,4 @@ APP_ABI := armeabi armeabi-v7a -APP_OPTIM := release +APP_OPTIM := debug APP_MODULES := gpac gm_bifs_dec gm_ctx_load gm_dummy_in gm_ft_font gm_img_in gm_ismacryp gm_isom_in gm_laser_dec gm_odf_dec gm_rtp_in gm_saf_in gm_soft_raster gm_svg_in gm_timedtext libjavaenv gm_droidout gm_droidaudio gm_gpac_js gm_mp3_in gm_ffmpeg_in gm_mpegts_in gm_aac_in gm_mpd_in gm_widgetman gpacWrapper diff --git a/build/android/jni/common.mk b/build/android/jni/common.mk index 6279823..483cd5a 100644 --- a/build/android/jni/common.mk +++ b/build/android/jni/common.mk @@ -1,4 +1,4 @@ -COMMON_PATH := $(call my-dir) +OMMON_PATH := $(call my-dir) #Settings common to all JNI Builds TARGET_PLATFORM := android-4 diff --git a/build/android/jni/gpac_build_android b/build/android/jni/gpac_build_android index ee1539d..c7e88aa 100755 --- a/build/android/jni/gpac_build_android +++ b/build/android/jni/gpac_build_android @@ -1,7 +1,6 @@ -#!/bin/bash +#!/bin/bash -e -echo -e "\033[32m Note: You have to install Android NDK and setup the environment first!\033[0m" -echo -e "\033[32m Note: You have to compile extra_libs first!\033[0m" +echo -e "\033[32m If you have problem using this script, read the README in trunk/gpac/build/android \033[0m" if [ -z "$1" ] then @@ -9,36 +8,57 @@ then exit 1 fi +if [ -z "$2" ] +then + echo -e "\033[34m Usage: $0 PATH_TO_ANDROID_SDK : You have not give the directory path of SDK. Auto build of Osmo4.apk not possible. Build it with Eclipse \033[0m" +fi + +if [ -z "$3" ] +then + echo -e "\033[34m Usage: $0 PATH_TO_ANT : You have not give the directory path of ANT. Auto build of Osmo4.apk not possible. Build it with Eclipse \033[0m" +fi + export PATH="$1:$PATH" + +if [ ! -z "$3" ] && [ ! -z "$2" ] +then +export PATH="$2/tools:$3/bin:$PATH" +shift 3 +ANT=1 +else +ANT=0 shift +fi # Be sure to resolve if script not called from its directory export BUILDPATH=$(dirname "$0") -cd $BUILDPATH || exit 1 +cd $BUILDPATH export BUILDPATH=$(pwd) echo "Current Dir = $BUILDPATH" -version=$(svnversion) +version=$(svnversion ../../..) echo "*** Build path is $BUILDPATH, setting revision number $version" -grep "$version" ../../../include/gpac/version.h 1>/dev/null && echo "Version $version already set" || echo "#define GPAC_SVN_REVISION \"$version\"" > ../../../include/gpac/version.h || exit 1 +if grep "$version" ../../../include/gpac/version.h >/dev/null 2>&1 ; then + echo "Version $version already set" +else + echo "#define GPAC_SVN_REVISION \"$version\"" > ../../../include/gpac/version.h +fi echo "Building lib gpac ..." -mkdir ../../../bin/android 2>/dev/null -cd ../../../ || exit 1 +cd ../../../ BASEPATH=$(pwd) -rm -rf $BUILDPATH/../obj/local/armeabi/* || mkdir $BUILDPATH/../obj/local/armeabi -rm -rf $BUILDPATH/../obj/local/armeabi-v7a/* || mkdir $BUILDPATH/../obj/local/armeabi-v7a +#rm -rf $BUILDPATH/../obj/* - -cd $BUILDPATH || exit 1 +cd $BUILDPATH echo -n "Buiding all libs from $BUILDPATH..." -ndk-build $* && echo "[OK] build successful." || echo "Build FAILED" || exit 1 +ndk-build +echo "[OK] build successful." #echo "Copying modules to modules dir..." -cd ../libs/ || exit 1 +cd ../libs/ #for i in $(find . -name 'gm*.so') #do # echo -n "$i..." -# cp "$i" "$BASEPATH/applications/osmo4_android/res/raw/" || exit 1 +# cp "$i" "$BASEPATH/applications/osmo4_android/res/raw/" #done #echo #echo "[OK] success." @@ -47,16 +67,56 @@ LIBS_DIR="$BASEPATH/applications/osmo4_android/libs/" echo "Copying libs to libs dir $LIBS_DIR ..." for i in $(find . -name '*.so') do - echo -n "$i..." - cp "$i" "$LIBS_DIR/$i" || exit 1 + echo -n " Copy $i" + cp "$i" "$LIBS_DIR/$i" +done +echo +echo "[OK] success module for Osmo4." + + +LIBS_DIR="$BASEPATH/applications/mp4box_android/libs/" +echo "Copying libs to libs dir $LIBS_DIR ..." +for i in $(find . \( -name '*.so' \) -a \( -name "*ft2*" -o -name "*edit*" -o -name "*libgpac.so*" -o -name "*jpeg*" -o -name "*js_osmo*" -o -name "*mp4box*" -o -name "*openjpeg*" -o -name "*png*" -o -name "*libz.*" \) ) +do +echo " Copy $i" +cp "$i" "$LIBS_DIR/$i" done echo -echo "[OK] success." -cd "$BASEPATH/extra_lib/lib/android" || exit 1 +echo "[OK] success module for MP4box." + + +LIBS_DIR="$BASEPATH/applications/osmo4_android/libs/" +cd "$BASEPATH/extra_lib/lib/android" echo "Copying all extra libs to $LIBS_DIR ..." for i in $(find . -name '*.so') do - echo -n "$i..." - cp "$i" "$LIBS_DIR/$i" || exit 1 +echo " Copy $i" +cp "$i" "$LIBS_DIR/$i" +done +echo "[OK] success extra lib for Osmo4." + +LIBS_DIR="$BASEPATH/applications/mp4box_android/libs/" +cd "$BASEPATH/extra_lib/lib/android" +echo "Copying all extra libs to $LIBS_DIR ..." + +for i in $(find . \( -name '*.so' \) -a \( -name "*ft2*" -o -name "*edit*" -o -name "*libgpac.so*" -o -name "*jpeg*" -o -name "*js_osmo*" -o -name "*mp4box*" -o -name "*openjpeg*" -o -name "*png*" -o -name "*libz.*" \) ) +do +echo " Copy $i" +cp "$i" "$LIBS_DIR/$i" done -echo "[OK] success." +echo "[OK] success extra lib MP4box." + +if [ $ANT -eq 1 ] +then +echo "\nSelf-updating project" +android update project -p "$BASEPATH/applications/osmo4_android/" + +echo -e "\nBuiding Osmo4.apk" +cd $BASEPATH/applications/osmo4_android/ +ant release + +zipalign -v 4 bin/Osmo4-unaligned.apk $BASEPATH/Osmo4-$(grep "\#define GPAC_VERSION " $BASEPATH/include/gpac/tools.h | cut -d "\"" -f 2 )-r$version.apk +rm bin/Osmo4-* +echo -e "\n[OK] success." +fi + diff --git a/build/android/jni/libgpac/Android.mk b/build/android/jni/libgpac/Android.mk index 67f4816..8fd12c6 100755 --- a/build/android/jni/libgpac/Android.mk +++ b/build/android/jni/libgpac/Android.mk @@ -1,6 +1,3 @@ -#you should run gpac config first -#./configure --host=arm-eabi CC=arm-eabi-gcc CPPFLAGS="-I$NDK/build/platforms/android-3/arch-arm/usr/include/" CFLAGS="-nostdlib" LDFLAGS="-Wl,-rpath-link=$NDK/build/platforms/android-4/arch-arm/usr/lib/ -L$NDK/build/platforms/android-3/arch-arm/usr/lib/" LIBS="-lc " -#../../configure --host=arm-eabi CC=arm-eabi-gcc CPPFLAGS="-I$NDK/platforms/android-4/arch-arm/usr/include/" CFLAGS="-nostdlib" LDFLAGS="-Wl,-rpath-link=$NDK/platforms/android-4/arch-arm/usr/lib/ -L$NDK/platforms/android-4/arch-arm/usr/lib/" LIBS="-lc " LOCAL_PATH:= $(call my-dir) APP_ABI := armeabi armeabi-v7a @@ -15,13 +12,13 @@ LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../extra_lib LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../extra_lib/include LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../extra_lib/include/freetype LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../extra_lib/include/freetype/freetype -LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../extra_lib/include/jpeg/android/ +LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../extra_lib/include/jpeg/ LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../extra_lib/include/png/ LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../extra_lib/include/faad LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../extra_lib/include/js/ LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../modules -LOCAL_LDLIBS += -L$(COMMON_PATH)/../../../extra_lib/lib/android/$(TARGET_ARCH_ABI) +LOCAL_LDLIBS += -L$(LOCAL_PATH)/../../../../extra_lib/lib/android/$(TARGET_ARCH_ABI) LOCAL_LDLIBS += -lGLESv1_CM -ldl LOCAL_LDLIBS += -ljs_osmo -leditline -lft2 -ljpeg -lopenjpeg -lpng -lz #LOCAL_EXPORT_LDLIBS= -ljs_osmo -leditline -lft2 -ljpeg -lopenjpeg -lpng -lz @@ -95,6 +92,7 @@ LOCAL_SRC_FILES := \ ../../../../src/compositor/hc_flash_shape.c \ ../../../../src/compositor/svg_filters.c \ ../../../../src/media_tools/avilib.c \ + ../../../../src/media_tools/dvb.c \ ../../../../src/media_tools/filestreamer.c \ ../../../../src/media_tools/isom_tools.c \ ../../../../src/media_tools/mpeg2_ps.c \ @@ -114,6 +112,7 @@ LOCAL_SRC_FILES := \ ../../../../src/media_tools/reedsolomon.c \ ../../../../src/media_tools/mpd.c \ ../../../../src/media_tools/m3u8.c \ + ../../../../src/media_tools/carousel.c \ ../../../../src/laser/lsr_tables.c \ ../../../../src/laser/lsr_dec.c \ ../../../../src/laser/lsr_enc.c \ diff --git a/build/android/jni/libgpac/config.h b/build/android/jni/libgpac/config.h index f263e5b..9d80511 100644 --- a/build/android/jni/libgpac/config.h +++ b/build/android/jni/libgpac/config.h @@ -1,7 +1,6 @@ /* Automatically generated by configure */ #ifndef GF_CONFIG_H #define GF_CONFIG_H -#define GPAC_CONFIGURATION "--host=arm-eabi CC=arm-eabi-gcc CPPFLAGS=-I/mci/artemis/arsov/tools/android/android-ndk-r5/build/platforms/android-3/arch-arm/usr/include/ CFLAGS=-nostdlib LDFLAGS='-Wl,-rpath-link=/mci/artemis/arsov/tools/android/android-ndk-r5/build/platforms/android-3/arch-arm/usr/lib/ -L/mci/artemis/arsov/tools/android/android-ndk-r5/build/platforms/android-3/arch-arm/usr/lib/' LIBS='-lc '" #define GPAC_CONFIG_LINUX 1 diff --git a/build/android/jni/modules/base.mk b/build/android/jni/modules/base.mk index c7f9d68..2f53ccc 100644 --- a/build/android/jni/modules/base.mk +++ b/build/android/jni/modules/base.mk @@ -1,4 +1,4 @@ -LOCAL_PATH := $(call my-dir) +OCAL_PATH := $(call my-dir) include $(LOCAL_PATH)/../common.mk LOCAL_C_INCLUDES := $(LOCAL_PATH) diff --git a/build/android/jni/modules/gm_ffmpeg_in.mk b/build/android/jni/modules/gm_ffmpeg_in.mk index 6e5c7b3..a0cce7c 100644 --- a/build/android/jni/modules/gm_ffmpeg_in.mk +++ b/build/android/jni/modules/gm_ffmpeg_in.mk @@ -6,15 +6,9 @@ LOCAL_MODULE := gm_ffmpeg_in include $(LOCAL_PATH)/base.mk -LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../extra_lib/android/ffmpeg/jni/ -#LOCAL_C_INCLUDES += /home/gacon/workspace/ffmpeg/jni/ +LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../extra_lib/include/ffmpeg_android/ LOCAL_LDLIBS += -lffmpeg -#LOCAL_LDLIBS += -lavcodec -lavformat -lavutil -#LOCAL_STATIC_LIBRARIES := libavformat libavcodec libavutil libpostproc libswscale -#LOCAL_STATIC_LIBRARIES += libavformat -#LOCAL_STATIC_LIBRARIES += libavutil -#LOCAL_STATIC_LIBRARIES += libswscale LOCAL_SRC_FILES := ../../../../modules/ffmpeg_in/ffmpeg_load.c ../../../../modules/ffmpeg_in/ffmpeg_demux.c ../../../../modules/ffmpeg_in/ffmpeg_decode.c diff --git a/build/android/jni/modules/gm_ft_font.mk b/build/android/jni/modules/gm_ft_font.mk index ac4c141..d01b571 100644 --- a/build/android/jni/modules/gm_ft_font.mk +++ b/build/android/jni/modules/gm_ft_font.mk @@ -6,8 +6,7 @@ LOCAL_MODULE := gm_ft_font include $(LOCAL_PATH)/base.mk -LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../extra_lib/android/freetypedroid/jni/include -LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../../extra_lib/android/freetypedroid/jni/include/freetype +LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../extra_lib/include/freetype LOCAL_SRC_FILES := ../../../../modules/ft_font/ft_font.c diff --git a/build/android/jni/modules/gm_gpac_js.mk b/build/android/jni/modules/gm_gpac_js.mk index 885704e..f0442da 100644 --- a/build/android/jni/modules/gm_gpac_js.mk +++ b/build/android/jni/modules/gm_gpac_js.mk @@ -6,10 +6,7 @@ LOCAL_MODULE := gm_gpac_js include $(LOCAL_PATH)/base.mk -LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../extra_lib/android/js/jni -LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../extra_lib/android/js/jni/Linux_All_DBG.OBJ -LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../extra_lib/android/js/jni/editline -#LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../extra_lib/include/js/ +LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../extra_lib/include/js/ LOCAL_SRC_FILES := ../../../../modules/gpac_js/gpac_js.c diff --git a/build/android/jni/modules/gm_widgetman.mk b/build/android/jni/modules/gm_widgetman.mk index 7cd1a4b..e3e2fae 100644 --- a/build/android/jni/modules/gm_widgetman.mk +++ b/build/android/jni/modules/gm_widgetman.mk @@ -6,11 +6,7 @@ LOCAL_MODULE := gm_widgetman include $(LOCAL_PATH)/base.mk -LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../extra_lib/include/ -LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../extra_lib/android/zlibdroid/jni/ -LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../extra_lib/android/js/jni/ -LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../extra_lib/android/js/jni/Linux_All_DBG.OBJ -LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../extra_lib/android/js/jni/editline +LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../extra_lib/include/js/ LOCAL_SRC_FILES := ../../../../modules/widgetman/widgetman.c ../../../../modules/widgetman/unzip.c ../../../../modules/widgetman/widget.c ../../../../modules/widgetman/wgt_load.c diff --git a/build/android/jni/mp4box/Android.mk b/build/android/jni/mp4box/Android.mk new file mode 100644 index 0000000..dde0485 --- /dev/null +++ b/build/android/jni/mp4box/Android.mk @@ -0,0 +1,20 @@ +LOCAL_PATH := $(call my-dir) +APP_ABI := armeabi + + +LOCAL_MODULE := mp4box +LOCAL_MODULE_FILENAME := libmp4box + +LOCAL_C_INCLUDES := $(LOCAL_PATH)/../libgpac \ + $(LOCAL_PATH)/../../../../include + +LOCAL_LDLIBS += -L$(LOCAL_PATH)/../../libs/$(TARGET_ARCH_ABI) +LOCAL_LDLIBS += -lgpac -llog + +LOCAL_SRC_FILES := ../../../../applications/mp4box/filedump.c \ + ../../../../applications/mp4box/fileimport.c \ + ../../../../applications/mp4box/live.c \ + ../../../../applications/mp4box/main.c \ + ../../../../applications/mp4box/wrapper.c + +include $(BUILD_SHARED_LIBRARY) diff --git a/build/android/jni/mp4box/Application.mk b/build/android/jni/mp4box/Application.mk new file mode 100644 index 0000000..565356f --- /dev/null +++ b/build/android/jni/mp4box/Application.mk @@ -0,0 +1,4 @@ +LOCAL_PATH:= $(call my-dir) + +APP_ABI := armeabi armeabi-v7a +APP_MODULES := mp4box diff --git a/build/android/jni/wrapper/Android.mk b/build/android/jni/wrapper/Android.mk index 4df2694..68f74fd 100644 --- a/build/android/jni/wrapper/Android.mk +++ b/build/android/jni/wrapper/Android.mk @@ -1,4 +1,4 @@ -LOCAL_PATH:= $(call my-dir) +OCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) include $(LOCAL_PATH)/../common.mk diff --git a/build/android/src/com/artemis/gpac/gpac.java b/build/android/src/com/enst/gpac/gpac.java similarity index 91% rename from build/android/src/com/artemis/gpac/gpac.java rename to build/android/src/com/enst/gpac/gpac.java index 6b4a8d4..2fee76d 100644 --- a/build/android/src/com/artemis/gpac/gpac.java +++ b/build/android/src/com/enst/gpac/gpac.java @@ -1,4 +1,4 @@ -package com.artemis.gpac; +package com.enst.gpac; import android.app.Activity; import android.os.Bundle; diff --git a/build/msvc8/gpac.sln b/build/msvc8/gpac.sln index 6093655..6edff05 100644 --- a/build/msvc8/gpac.sln +++ b/build/msvc8/gpac.sln @@ -1,4 +1,3 @@ - Microsoft Visual Studio Solution File, Format Version 9.00 # Visual Studio 2005 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mp4client", "mp4client.vcproj", "{A35D99BF-D72D-4F56-99A1-97249B22BCE2}" @@ -80,7 +79,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mp3_in", "mp3_in.vcproj", " EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mp4box", "mp4box.vcproj", "{48E2C7C6-52EB-46FB-8722-00A62F46F497}" ProjectSection(ProjectDependencies) = postProject - {233014D5-F6E5-419D-8757-FA9CE7337088} = {233014D5-F6E5-419D-8757-FA9CE7337088} + {D3540754-E0CF-4604-AC11-82DE9BD4D814} = {D3540754-E0CF-4604-AC11-82DE9BD4D814} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mpegts_in", "mpegts_in.vcproj", "{B38E812D-9823-48E7-BE5F-BF09B0AD4165}" @@ -228,370 +227,659 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GPAX", "GPAX.vcproj", "{724 {D3540754-E0CF-4604-AC11-82DE9BD4D814} = {D3540754-E0CF-4604-AC11-82DE9BD4D814} EndProjectSection EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hyb_in", "hyb_in.vcproj", "{41B1DAF0-D7ED-4934-B915-05DBB0EE6B0E}" + ProjectSection(ProjectDependencies) = postProject + {D3540754-E0CF-4604-AC11-82DE9BD4D814} = {D3540754-E0CF-4604-AC11-82DE9BD4D814} + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Release|Win32 = Release|Win32 + Debug|Mixed Platforms = Debug|Mixed Platforms Debug|Smartphone 2003 (ARMV4) = Debug|Smartphone 2003 (ARMV4) + Debug|Win32 = Debug|Win32 + Release|Mixed Platforms = Release|Mixed Platforms Release|Smartphone 2003 (ARMV4) = Release|Smartphone 2003 (ARMV4) + Release|Win32 = Release|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {A35D99BF-D72D-4F56-99A1-97249B22BCE2}.Debug|Win32.Build.0 = Debug|Win32 - {A35D99BF-D72D-4F56-99A1-97249B22BCE2}.Debug|Win32.ActiveCfg = Debug|Win32 + {A35D99BF-D72D-4F56-99A1-97249B22BCE2}.Debug|Mixed Platforms.ActiveCfg = Debug|Smartphone 2003 (ARMV4) + {A35D99BF-D72D-4F56-99A1-97249B22BCE2}.Debug|Mixed Platforms.Build.0 = Debug|Smartphone 2003 (ARMV4) + {A35D99BF-D72D-4F56-99A1-97249B22BCE2}.Debug|Mixed Platforms.Deploy.0 = Debug|Smartphone 2003 (ARMV4) {A35D99BF-D72D-4F56-99A1-97249B22BCE2}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4) - {A35D99BF-D72D-4F56-99A1-97249B22BCE2}.Release|Win32.Build.0 = Release|Win32 - {A35D99BF-D72D-4F56-99A1-97249B22BCE2}.Release|Win32.ActiveCfg = Release|Win32 + {A35D99BF-D72D-4F56-99A1-97249B22BCE2}.Debug|Win32.ActiveCfg = Debug|Win32 + {A35D99BF-D72D-4F56-99A1-97249B22BCE2}.Debug|Win32.Build.0 = Debug|Win32 + {A35D99BF-D72D-4F56-99A1-97249B22BCE2}.Release|Mixed Platforms.ActiveCfg = Release|Smartphone 2003 (ARMV4) + {A35D99BF-D72D-4F56-99A1-97249B22BCE2}.Release|Mixed Platforms.Build.0 = Release|Smartphone 2003 (ARMV4) + {A35D99BF-D72D-4F56-99A1-97249B22BCE2}.Release|Mixed Platforms.Deploy.0 = Release|Smartphone 2003 (ARMV4) {A35D99BF-D72D-4F56-99A1-97249B22BCE2}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4) + {A35D99BF-D72D-4F56-99A1-97249B22BCE2}.Release|Win32.ActiveCfg = Release|Win32 + {A35D99BF-D72D-4F56-99A1-97249B22BCE2}.Release|Win32.Build.0 = Release|Win32 + {C79C2D73-06E9-4622-92CE-F166B1B51792}.Debug|Mixed Platforms.ActiveCfg = Debug|Smartphone 2003 (ARMV4) + {C79C2D73-06E9-4622-92CE-F166B1B51792}.Debug|Mixed Platforms.Build.0 = Debug|Smartphone 2003 (ARMV4) + {C79C2D73-06E9-4622-92CE-F166B1B51792}.Debug|Mixed Platforms.Deploy.0 = Debug|Smartphone 2003 (ARMV4) {C79C2D73-06E9-4622-92CE-F166B1B51792}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4) {C79C2D73-06E9-4622-92CE-F166B1B51792}.Debug|Win32.ActiveCfg = Debug|Win32 {C79C2D73-06E9-4622-92CE-F166B1B51792}.Debug|Win32.Build.0 = Debug|Win32 + {C79C2D73-06E9-4622-92CE-F166B1B51792}.Release|Mixed Platforms.ActiveCfg = Release|Smartphone 2003 (ARMV4) + {C79C2D73-06E9-4622-92CE-F166B1B51792}.Release|Mixed Platforms.Build.0 = Release|Smartphone 2003 (ARMV4) + {C79C2D73-06E9-4622-92CE-F166B1B51792}.Release|Mixed Platforms.Deploy.0 = Release|Smartphone 2003 (ARMV4) {C79C2D73-06E9-4622-92CE-F166B1B51792}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4) {C79C2D73-06E9-4622-92CE-F166B1B51792}.Release|Win32.ActiveCfg = Release|Win32 {C79C2D73-06E9-4622-92CE-F166B1B51792}.Release|Win32.Build.0 = Release|Win32 - {72486240-A124-496E-A67A-E76FEC7E99BE}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4) - {72486240-A124-496E-A67A-E76FEC7E99BE}.Debug|Smartphone 2003 (ARMV4).Build.0 = Debug|Smartphone 2003 (ARMV4) - {72486240-A124-496E-A67A-E76FEC7E99BE}.Debug|Win32.ActiveCfg = Debug|Win32 - {72486240-A124-496E-A67A-E76FEC7E99BE}.Debug|Win32.Build.0 = Debug|Win32 - {72486240-A124-496E-A67A-E76FEC7E99BE}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4) - {72486240-A124-496E-A67A-E76FEC7E99BE}.Release|Smartphone 2003 (ARMV4).Build.0 = Release|Smartphone 2003 (ARMV4) - {72486240-A124-496E-A67A-E76FEC7E99BE}.Release|Win32.ActiveCfg = Release|Win32 - {72486240-A124-496E-A67A-E76FEC7E99BE}.Release|Win32.Build.0 = Release|Win32 + {1F7CD37F-DC9A-4AC7-881B-36B263A644C7}.Debug|Mixed Platforms.ActiveCfg = Debug|Smartphone 2003 (ARMV4) + {1F7CD37F-DC9A-4AC7-881B-36B263A644C7}.Debug|Mixed Platforms.Build.0 = Debug|Smartphone 2003 (ARMV4) + {1F7CD37F-DC9A-4AC7-881B-36B263A644C7}.Debug|Mixed Platforms.Deploy.0 = Debug|Smartphone 2003 (ARMV4) {1F7CD37F-DC9A-4AC7-881B-36B263A644C7}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4) {1F7CD37F-DC9A-4AC7-881B-36B263A644C7}.Debug|Smartphone 2003 (ARMV4).Build.0 = Debug|Smartphone 2003 (ARMV4) {1F7CD37F-DC9A-4AC7-881B-36B263A644C7}.Debug|Win32.ActiveCfg = Debug|Win32 {1F7CD37F-DC9A-4AC7-881B-36B263A644C7}.Debug|Win32.Build.0 = Debug|Win32 + {1F7CD37F-DC9A-4AC7-881B-36B263A644C7}.Release|Mixed Platforms.ActiveCfg = Release|Smartphone 2003 (ARMV4) + {1F7CD37F-DC9A-4AC7-881B-36B263A644C7}.Release|Mixed Platforms.Build.0 = Release|Smartphone 2003 (ARMV4) + {1F7CD37F-DC9A-4AC7-881B-36B263A644C7}.Release|Mixed Platforms.Deploy.0 = Release|Smartphone 2003 (ARMV4) {1F7CD37F-DC9A-4AC7-881B-36B263A644C7}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4) {1F7CD37F-DC9A-4AC7-881B-36B263A644C7}.Release|Smartphone 2003 (ARMV4).Build.0 = Release|Smartphone 2003 (ARMV4) {1F7CD37F-DC9A-4AC7-881B-36B263A644C7}.Release|Win32.ActiveCfg = Release|Win32 {1F7CD37F-DC9A-4AC7-881B-36B263A644C7}.Release|Win32.Build.0 = Release|Win32 + {73CF10D0-DEC8-4D4B-AAB8-45864694CB8B}.Debug|Mixed Platforms.ActiveCfg = Debug|Smartphone 2003 (ARMV4) + {73CF10D0-DEC8-4D4B-AAB8-45864694CB8B}.Debug|Mixed Platforms.Build.0 = Debug|Smartphone 2003 (ARMV4) + {73CF10D0-DEC8-4D4B-AAB8-45864694CB8B}.Debug|Mixed Platforms.Deploy.0 = Debug|Smartphone 2003 (ARMV4) {73CF10D0-DEC8-4D4B-AAB8-45864694CB8B}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4) {73CF10D0-DEC8-4D4B-AAB8-45864694CB8B}.Debug|Smartphone 2003 (ARMV4).Build.0 = Debug|Smartphone 2003 (ARMV4) {73CF10D0-DEC8-4D4B-AAB8-45864694CB8B}.Debug|Win32.ActiveCfg = Debug|Win32 {73CF10D0-DEC8-4D4B-AAB8-45864694CB8B}.Debug|Win32.Build.0 = Debug|Win32 + {73CF10D0-DEC8-4D4B-AAB8-45864694CB8B}.Release|Mixed Platforms.ActiveCfg = Release|Smartphone 2003 (ARMV4) + {73CF10D0-DEC8-4D4B-AAB8-45864694CB8B}.Release|Mixed Platforms.Build.0 = Release|Smartphone 2003 (ARMV4) + {73CF10D0-DEC8-4D4B-AAB8-45864694CB8B}.Release|Mixed Platforms.Deploy.0 = Release|Smartphone 2003 (ARMV4) {73CF10D0-DEC8-4D4B-AAB8-45864694CB8B}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4) {73CF10D0-DEC8-4D4B-AAB8-45864694CB8B}.Release|Smartphone 2003 (ARMV4).Build.0 = Release|Smartphone 2003 (ARMV4) {73CF10D0-DEC8-4D4B-AAB8-45864694CB8B}.Release|Win32.ActiveCfg = Release|Win32 {73CF10D0-DEC8-4D4B-AAB8-45864694CB8B}.Release|Win32.Build.0 = Release|Win32 + {BAE0C03A-56E0-4D37-89F5-62DD03BFC013}.Debug|Mixed Platforms.ActiveCfg = Debug|Smartphone 2003 (ARMV4) + {BAE0C03A-56E0-4D37-89F5-62DD03BFC013}.Debug|Mixed Platforms.Build.0 = Debug|Smartphone 2003 (ARMV4) + {BAE0C03A-56E0-4D37-89F5-62DD03BFC013}.Debug|Mixed Platforms.Deploy.0 = Debug|Smartphone 2003 (ARMV4) {BAE0C03A-56E0-4D37-89F5-62DD03BFC013}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4) {BAE0C03A-56E0-4D37-89F5-62DD03BFC013}.Debug|Smartphone 2003 (ARMV4).Build.0 = Debug|Smartphone 2003 (ARMV4) {BAE0C03A-56E0-4D37-89F5-62DD03BFC013}.Debug|Win32.ActiveCfg = Debug|Win32 {BAE0C03A-56E0-4D37-89F5-62DD03BFC013}.Debug|Win32.Build.0 = Debug|Win32 + {BAE0C03A-56E0-4D37-89F5-62DD03BFC013}.Release|Mixed Platforms.ActiveCfg = Release|Smartphone 2003 (ARMV4) + {BAE0C03A-56E0-4D37-89F5-62DD03BFC013}.Release|Mixed Platforms.Build.0 = Release|Smartphone 2003 (ARMV4) + {BAE0C03A-56E0-4D37-89F5-62DD03BFC013}.Release|Mixed Platforms.Deploy.0 = Release|Smartphone 2003 (ARMV4) {BAE0C03A-56E0-4D37-89F5-62DD03BFC013}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4) {BAE0C03A-56E0-4D37-89F5-62DD03BFC013}.Release|Smartphone 2003 (ARMV4).Build.0 = Release|Smartphone 2003 (ARMV4) {BAE0C03A-56E0-4D37-89F5-62DD03BFC013}.Release|Win32.ActiveCfg = Release|Win32 {BAE0C03A-56E0-4D37-89F5-62DD03BFC013}.Release|Win32.Build.0 = Release|Win32 + {073E2381-4FDE-4C4D-A117-C489EB17C48B}.Debug|Mixed Platforms.ActiveCfg = Debug|Smartphone 2003 (ARMV4) + {073E2381-4FDE-4C4D-A117-C489EB17C48B}.Debug|Mixed Platforms.Build.0 = Debug|Smartphone 2003 (ARMV4) + {073E2381-4FDE-4C4D-A117-C489EB17C48B}.Debug|Mixed Platforms.Deploy.0 = Debug|Smartphone 2003 (ARMV4) {073E2381-4FDE-4C4D-A117-C489EB17C48B}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4) {073E2381-4FDE-4C4D-A117-C489EB17C48B}.Debug|Smartphone 2003 (ARMV4).Build.0 = Debug|Smartphone 2003 (ARMV4) {073E2381-4FDE-4C4D-A117-C489EB17C48B}.Debug|Win32.ActiveCfg = Debug|Win32 {073E2381-4FDE-4C4D-A117-C489EB17C48B}.Debug|Win32.Build.0 = Debug|Win32 + {073E2381-4FDE-4C4D-A117-C489EB17C48B}.Release|Mixed Platforms.ActiveCfg = Release|Smartphone 2003 (ARMV4) + {073E2381-4FDE-4C4D-A117-C489EB17C48B}.Release|Mixed Platforms.Build.0 = Release|Smartphone 2003 (ARMV4) + {073E2381-4FDE-4C4D-A117-C489EB17C48B}.Release|Mixed Platforms.Deploy.0 = Release|Smartphone 2003 (ARMV4) {073E2381-4FDE-4C4D-A117-C489EB17C48B}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4) {073E2381-4FDE-4C4D-A117-C489EB17C48B}.Release|Smartphone 2003 (ARMV4).Build.0 = Release|Smartphone 2003 (ARMV4) {073E2381-4FDE-4C4D-A117-C489EB17C48B}.Release|Win32.ActiveCfg = Release|Win32 {073E2381-4FDE-4C4D-A117-C489EB17C48B}.Release|Win32.Build.0 = Release|Win32 + {B64736BD-9245-4F40-961D-EB9822265764}.Debug|Mixed Platforms.ActiveCfg = Debug|Smartphone 2003 (ARMV4) + {B64736BD-9245-4F40-961D-EB9822265764}.Debug|Mixed Platforms.Build.0 = Debug|Smartphone 2003 (ARMV4) + {B64736BD-9245-4F40-961D-EB9822265764}.Debug|Mixed Platforms.Deploy.0 = Debug|Smartphone 2003 (ARMV4) {B64736BD-9245-4F40-961D-EB9822265764}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4) {B64736BD-9245-4F40-961D-EB9822265764}.Debug|Win32.ActiveCfg = Debug|Win32 {B64736BD-9245-4F40-961D-EB9822265764}.Debug|Win32.Build.0 = Debug|Win32 + {B64736BD-9245-4F40-961D-EB9822265764}.Release|Mixed Platforms.ActiveCfg = Release|Smartphone 2003 (ARMV4) + {B64736BD-9245-4F40-961D-EB9822265764}.Release|Mixed Platforms.Build.0 = Release|Smartphone 2003 (ARMV4) + {B64736BD-9245-4F40-961D-EB9822265764}.Release|Mixed Platforms.Deploy.0 = Release|Smartphone 2003 (ARMV4) {B64736BD-9245-4F40-961D-EB9822265764}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4) {B64736BD-9245-4F40-961D-EB9822265764}.Release|Win32.ActiveCfg = Release|Win32 {B64736BD-9245-4F40-961D-EB9822265764}.Release|Win32.Build.0 = Release|Win32 + {9FECAB79-BC70-4EEA-A23B-B64159F904B3}.Debug|Mixed Platforms.ActiveCfg = Debug|Smartphone 2003 (ARMV4) + {9FECAB79-BC70-4EEA-A23B-B64159F904B3}.Debug|Mixed Platforms.Build.0 = Debug|Smartphone 2003 (ARMV4) + {9FECAB79-BC70-4EEA-A23B-B64159F904B3}.Debug|Mixed Platforms.Deploy.0 = Debug|Smartphone 2003 (ARMV4) {9FECAB79-BC70-4EEA-A23B-B64159F904B3}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4) {9FECAB79-BC70-4EEA-A23B-B64159F904B3}.Debug|Smartphone 2003 (ARMV4).Build.0 = Debug|Smartphone 2003 (ARMV4) {9FECAB79-BC70-4EEA-A23B-B64159F904B3}.Debug|Win32.ActiveCfg = Debug|Win32 {9FECAB79-BC70-4EEA-A23B-B64159F904B3}.Debug|Win32.Build.0 = Debug|Win32 + {9FECAB79-BC70-4EEA-A23B-B64159F904B3}.Release|Mixed Platforms.ActiveCfg = Release|Smartphone 2003 (ARMV4) + {9FECAB79-BC70-4EEA-A23B-B64159F904B3}.Release|Mixed Platforms.Build.0 = Release|Smartphone 2003 (ARMV4) + {9FECAB79-BC70-4EEA-A23B-B64159F904B3}.Release|Mixed Platforms.Deploy.0 = Release|Smartphone 2003 (ARMV4) {9FECAB79-BC70-4EEA-A23B-B64159F904B3}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4) {9FECAB79-BC70-4EEA-A23B-B64159F904B3}.Release|Smartphone 2003 (ARMV4).Build.0 = Release|Smartphone 2003 (ARMV4) {9FECAB79-BC70-4EEA-A23B-B64159F904B3}.Release|Win32.ActiveCfg = Release|Win32 {9FECAB79-BC70-4EEA-A23B-B64159F904B3}.Release|Win32.Build.0 = Release|Win32 + {042D3628-67F3-4B5C-8BC0-CD9AFA416974}.Debug|Mixed Platforms.ActiveCfg = Debug|Smartphone 2003 (ARMV4) + {042D3628-67F3-4B5C-8BC0-CD9AFA416974}.Debug|Mixed Platforms.Build.0 = Debug|Smartphone 2003 (ARMV4) + {042D3628-67F3-4B5C-8BC0-CD9AFA416974}.Debug|Mixed Platforms.Deploy.0 = Debug|Smartphone 2003 (ARMV4) {042D3628-67F3-4B5C-8BC0-CD9AFA416974}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4) {042D3628-67F3-4B5C-8BC0-CD9AFA416974}.Debug|Smartphone 2003 (ARMV4).Build.0 = Debug|Smartphone 2003 (ARMV4) {042D3628-67F3-4B5C-8BC0-CD9AFA416974}.Debug|Win32.ActiveCfg = Debug|Win32 {042D3628-67F3-4B5C-8BC0-CD9AFA416974}.Debug|Win32.Build.0 = Debug|Win32 + {042D3628-67F3-4B5C-8BC0-CD9AFA416974}.Release|Mixed Platforms.ActiveCfg = Release|Smartphone 2003 (ARMV4) + {042D3628-67F3-4B5C-8BC0-CD9AFA416974}.Release|Mixed Platforms.Build.0 = Release|Smartphone 2003 (ARMV4) + {042D3628-67F3-4B5C-8BC0-CD9AFA416974}.Release|Mixed Platforms.Deploy.0 = Release|Smartphone 2003 (ARMV4) {042D3628-67F3-4B5C-8BC0-CD9AFA416974}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4) {042D3628-67F3-4B5C-8BC0-CD9AFA416974}.Release|Smartphone 2003 (ARMV4).Build.0 = Release|Smartphone 2003 (ARMV4) {042D3628-67F3-4B5C-8BC0-CD9AFA416974}.Release|Win32.ActiveCfg = Release|Win32 {042D3628-67F3-4B5C-8BC0-CD9AFA416974}.Release|Win32.Build.0 = Release|Win32 + {CAA5A551-006A-4119-8115-FB14692E719F}.Debug|Mixed Platforms.ActiveCfg = Debug|Smartphone 2003 (ARMV4) + {CAA5A551-006A-4119-8115-FB14692E719F}.Debug|Mixed Platforms.Build.0 = Debug|Smartphone 2003 (ARMV4) + {CAA5A551-006A-4119-8115-FB14692E719F}.Debug|Mixed Platforms.Deploy.0 = Debug|Smartphone 2003 (ARMV4) {CAA5A551-006A-4119-8115-FB14692E719F}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4) {CAA5A551-006A-4119-8115-FB14692E719F}.Debug|Win32.ActiveCfg = Debug|Win32 {CAA5A551-006A-4119-8115-FB14692E719F}.Debug|Win32.Build.0 = Debug|Win32 + {CAA5A551-006A-4119-8115-FB14692E719F}.Release|Mixed Platforms.ActiveCfg = Release|Smartphone 2003 (ARMV4) + {CAA5A551-006A-4119-8115-FB14692E719F}.Release|Mixed Platforms.Build.0 = Release|Smartphone 2003 (ARMV4) + {CAA5A551-006A-4119-8115-FB14692E719F}.Release|Mixed Platforms.Deploy.0 = Release|Smartphone 2003 (ARMV4) {CAA5A551-006A-4119-8115-FB14692E719F}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4) {CAA5A551-006A-4119-8115-FB14692E719F}.Release|Win32.ActiveCfg = Release|Win32 {CAA5A551-006A-4119-8115-FB14692E719F}.Release|Win32.Build.0 = Release|Win32 + {9F0660BC-4582-4D4E-BA83-E2BE5F6BDD45}.Debug|Mixed Platforms.ActiveCfg = Debug|Smartphone 2003 (ARMV4) + {9F0660BC-4582-4D4E-BA83-E2BE5F6BDD45}.Debug|Mixed Platforms.Build.0 = Debug|Smartphone 2003 (ARMV4) + {9F0660BC-4582-4D4E-BA83-E2BE5F6BDD45}.Debug|Mixed Platforms.Deploy.0 = Debug|Smartphone 2003 (ARMV4) {9F0660BC-4582-4D4E-BA83-E2BE5F6BDD45}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4) {9F0660BC-4582-4D4E-BA83-E2BE5F6BDD45}.Debug|Smartphone 2003 (ARMV4).Build.0 = Debug|Smartphone 2003 (ARMV4) {9F0660BC-4582-4D4E-BA83-E2BE5F6BDD45}.Debug|Win32.ActiveCfg = Debug|Win32 {9F0660BC-4582-4D4E-BA83-E2BE5F6BDD45}.Debug|Win32.Build.0 = Debug|Win32 + {9F0660BC-4582-4D4E-BA83-E2BE5F6BDD45}.Release|Mixed Platforms.ActiveCfg = Release|Smartphone 2003 (ARMV4) + {9F0660BC-4582-4D4E-BA83-E2BE5F6BDD45}.Release|Mixed Platforms.Build.0 = Release|Smartphone 2003 (ARMV4) + {9F0660BC-4582-4D4E-BA83-E2BE5F6BDD45}.Release|Mixed Platforms.Deploy.0 = Release|Smartphone 2003 (ARMV4) {9F0660BC-4582-4D4E-BA83-E2BE5F6BDD45}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4) {9F0660BC-4582-4D4E-BA83-E2BE5F6BDD45}.Release|Smartphone 2003 (ARMV4).Build.0 = Release|Smartphone 2003 (ARMV4) {9F0660BC-4582-4D4E-BA83-E2BE5F6BDD45}.Release|Win32.ActiveCfg = Release|Win32 {9F0660BC-4582-4D4E-BA83-E2BE5F6BDD45}.Release|Win32.Build.0 = Release|Win32 + {FC8F1F56-078E-470D-B252-68EDDE88AA9D}.Debug|Mixed Platforms.ActiveCfg = Debug|Smartphone 2003 (ARMV4) + {FC8F1F56-078E-470D-B252-68EDDE88AA9D}.Debug|Mixed Platforms.Build.0 = Debug|Smartphone 2003 (ARMV4) + {FC8F1F56-078E-470D-B252-68EDDE88AA9D}.Debug|Mixed Platforms.Deploy.0 = Debug|Smartphone 2003 (ARMV4) {FC8F1F56-078E-470D-B252-68EDDE88AA9D}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4) {FC8F1F56-078E-470D-B252-68EDDE88AA9D}.Debug|Smartphone 2003 (ARMV4).Build.0 = Debug|Smartphone 2003 (ARMV4) {FC8F1F56-078E-470D-B252-68EDDE88AA9D}.Debug|Win32.ActiveCfg = Debug|Win32 {FC8F1F56-078E-470D-B252-68EDDE88AA9D}.Debug|Win32.Build.0 = Debug|Win32 + {FC8F1F56-078E-470D-B252-68EDDE88AA9D}.Release|Mixed Platforms.ActiveCfg = Release|Smartphone 2003 (ARMV4) + {FC8F1F56-078E-470D-B252-68EDDE88AA9D}.Release|Mixed Platforms.Build.0 = Release|Smartphone 2003 (ARMV4) + {FC8F1F56-078E-470D-B252-68EDDE88AA9D}.Release|Mixed Platforms.Deploy.0 = Release|Smartphone 2003 (ARMV4) {FC8F1F56-078E-470D-B252-68EDDE88AA9D}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4) {FC8F1F56-078E-470D-B252-68EDDE88AA9D}.Release|Smartphone 2003 (ARMV4).Build.0 = Release|Smartphone 2003 (ARMV4) {FC8F1F56-078E-470D-B252-68EDDE88AA9D}.Release|Win32.ActiveCfg = Release|Win32 {FC8F1F56-078E-470D-B252-68EDDE88AA9D}.Release|Win32.Build.0 = Release|Win32 + {879E26B2-48DB-47B3-B82F-893696286E6F}.Debug|Mixed Platforms.ActiveCfg = Debug|Smartphone 2003 (ARMV4) + {879E26B2-48DB-47B3-B82F-893696286E6F}.Debug|Mixed Platforms.Build.0 = Debug|Smartphone 2003 (ARMV4) + {879E26B2-48DB-47B3-B82F-893696286E6F}.Debug|Mixed Platforms.Deploy.0 = Debug|Smartphone 2003 (ARMV4) {879E26B2-48DB-47B3-B82F-893696286E6F}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4) {879E26B2-48DB-47B3-B82F-893696286E6F}.Debug|Smartphone 2003 (ARMV4).Build.0 = Debug|Smartphone 2003 (ARMV4) {879E26B2-48DB-47B3-B82F-893696286E6F}.Debug|Win32.ActiveCfg = Debug|Win32 {879E26B2-48DB-47B3-B82F-893696286E6F}.Debug|Win32.Build.0 = Debug|Win32 + {879E26B2-48DB-47B3-B82F-893696286E6F}.Release|Mixed Platforms.ActiveCfg = Release|Smartphone 2003 (ARMV4) + {879E26B2-48DB-47B3-B82F-893696286E6F}.Release|Mixed Platforms.Build.0 = Release|Smartphone 2003 (ARMV4) + {879E26B2-48DB-47B3-B82F-893696286E6F}.Release|Mixed Platforms.Deploy.0 = Release|Smartphone 2003 (ARMV4) {879E26B2-48DB-47B3-B82F-893696286E6F}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4) {879E26B2-48DB-47B3-B82F-893696286E6F}.Release|Smartphone 2003 (ARMV4).Build.0 = Release|Smartphone 2003 (ARMV4) {879E26B2-48DB-47B3-B82F-893696286E6F}.Release|Win32.ActiveCfg = Release|Win32 {879E26B2-48DB-47B3-B82F-893696286E6F}.Release|Win32.Build.0 = Release|Win32 + {233014D5-F6E5-419D-8757-FA9CE7337088}.Debug|Mixed Platforms.ActiveCfg = Debug|Smartphone 2003 (ARMV4) + {233014D5-F6E5-419D-8757-FA9CE7337088}.Debug|Mixed Platforms.Build.0 = Debug|Smartphone 2003 (ARMV4) + {233014D5-F6E5-419D-8757-FA9CE7337088}.Debug|Mixed Platforms.Deploy.0 = Debug|Smartphone 2003 (ARMV4) {233014D5-F6E5-419D-8757-FA9CE7337088}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4) {233014D5-F6E5-419D-8757-FA9CE7337088}.Debug|Smartphone 2003 (ARMV4).Build.0 = Debug|Smartphone 2003 (ARMV4) {233014D5-F6E5-419D-8757-FA9CE7337088}.Debug|Win32.ActiveCfg = Debug|Win32 {233014D5-F6E5-419D-8757-FA9CE7337088}.Debug|Win32.Build.0 = Debug|Win32 + {233014D5-F6E5-419D-8757-FA9CE7337088}.Release|Mixed Platforms.ActiveCfg = Release|Smartphone 2003 (ARMV4) + {233014D5-F6E5-419D-8757-FA9CE7337088}.Release|Mixed Platforms.Build.0 = Release|Smartphone 2003 (ARMV4) + {233014D5-F6E5-419D-8757-FA9CE7337088}.Release|Mixed Platforms.Deploy.0 = Release|Smartphone 2003 (ARMV4) {233014D5-F6E5-419D-8757-FA9CE7337088}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4) {233014D5-F6E5-419D-8757-FA9CE7337088}.Release|Smartphone 2003 (ARMV4).Build.0 = Release|Smartphone 2003 (ARMV4) {233014D5-F6E5-419D-8757-FA9CE7337088}.Release|Win32.ActiveCfg = Release|Win32 {233014D5-F6E5-419D-8757-FA9CE7337088}.Release|Win32.Build.0 = Release|Win32 + {D3540754-E0CF-4604-AC11-82DE9BD4D814}.Debug|Mixed Platforms.ActiveCfg = Debug|Smartphone 2003 (ARMV4) + {D3540754-E0CF-4604-AC11-82DE9BD4D814}.Debug|Mixed Platforms.Build.0 = Debug|Smartphone 2003 (ARMV4) + {D3540754-E0CF-4604-AC11-82DE9BD4D814}.Debug|Mixed Platforms.Deploy.0 = Debug|Smartphone 2003 (ARMV4) {D3540754-E0CF-4604-AC11-82DE9BD4D814}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4) {D3540754-E0CF-4604-AC11-82DE9BD4D814}.Debug|Smartphone 2003 (ARMV4).Build.0 = Debug|Smartphone 2003 (ARMV4) {D3540754-E0CF-4604-AC11-82DE9BD4D814}.Debug|Win32.ActiveCfg = Debug|Win32 {D3540754-E0CF-4604-AC11-82DE9BD4D814}.Debug|Win32.Build.0 = Debug|Win32 + {D3540754-E0CF-4604-AC11-82DE9BD4D814}.Release|Mixed Platforms.ActiveCfg = Release|Smartphone 2003 (ARMV4) + {D3540754-E0CF-4604-AC11-82DE9BD4D814}.Release|Mixed Platforms.Build.0 = Release|Smartphone 2003 (ARMV4) + {D3540754-E0CF-4604-AC11-82DE9BD4D814}.Release|Mixed Platforms.Deploy.0 = Release|Smartphone 2003 (ARMV4) {D3540754-E0CF-4604-AC11-82DE9BD4D814}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4) {D3540754-E0CF-4604-AC11-82DE9BD4D814}.Release|Smartphone 2003 (ARMV4).Build.0 = Release|Smartphone 2003 (ARMV4) {D3540754-E0CF-4604-AC11-82DE9BD4D814}.Release|Win32.ActiveCfg = Release|Win32 {D3540754-E0CF-4604-AC11-82DE9BD4D814}.Release|Win32.Build.0 = Release|Win32 + {4AC7F65D-0DC0-49F9-8B96-AD05F11FF38E}.Debug|Mixed Platforms.ActiveCfg = Debug|Smartphone 2003 (ARMV4) + {4AC7F65D-0DC0-49F9-8B96-AD05F11FF38E}.Debug|Mixed Platforms.Build.0 = Debug|Smartphone 2003 (ARMV4) + {4AC7F65D-0DC0-49F9-8B96-AD05F11FF38E}.Debug|Mixed Platforms.Deploy.0 = Debug|Smartphone 2003 (ARMV4) {4AC7F65D-0DC0-49F9-8B96-AD05F11FF38E}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4) {4AC7F65D-0DC0-49F9-8B96-AD05F11FF38E}.Debug|Smartphone 2003 (ARMV4).Build.0 = Debug|Smartphone 2003 (ARMV4) {4AC7F65D-0DC0-49F9-8B96-AD05F11FF38E}.Debug|Win32.ActiveCfg = Debug|Win32 {4AC7F65D-0DC0-49F9-8B96-AD05F11FF38E}.Debug|Win32.Build.0 = Debug|Win32 + {4AC7F65D-0DC0-49F9-8B96-AD05F11FF38E}.Release|Mixed Platforms.ActiveCfg = Release|Smartphone 2003 (ARMV4) + {4AC7F65D-0DC0-49F9-8B96-AD05F11FF38E}.Release|Mixed Platforms.Build.0 = Release|Smartphone 2003 (ARMV4) + {4AC7F65D-0DC0-49F9-8B96-AD05F11FF38E}.Release|Mixed Platforms.Deploy.0 = Release|Smartphone 2003 (ARMV4) {4AC7F65D-0DC0-49F9-8B96-AD05F11FF38E}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4) {4AC7F65D-0DC0-49F9-8B96-AD05F11FF38E}.Release|Smartphone 2003 (ARMV4).Build.0 = Release|Smartphone 2003 (ARMV4) {4AC7F65D-0DC0-49F9-8B96-AD05F11FF38E}.Release|Win32.ActiveCfg = Release|Win32 {4AC7F65D-0DC0-49F9-8B96-AD05F11FF38E}.Release|Win32.Build.0 = Release|Win32 + {48E2C7C6-52EB-46FB-8722-00A62F46F497}.Debug|Mixed Platforms.ActiveCfg = Debug|Smartphone 2003 (ARMV4) + {48E2C7C6-52EB-46FB-8722-00A62F46F497}.Debug|Mixed Platforms.Build.0 = Debug|Smartphone 2003 (ARMV4) + {48E2C7C6-52EB-46FB-8722-00A62F46F497}.Debug|Mixed Platforms.Deploy.0 = Debug|Smartphone 2003 (ARMV4) {48E2C7C6-52EB-46FB-8722-00A62F46F497}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4) {48E2C7C6-52EB-46FB-8722-00A62F46F497}.Debug|Win32.ActiveCfg = Debug|Win32 {48E2C7C6-52EB-46FB-8722-00A62F46F497}.Debug|Win32.Build.0 = Debug|Win32 + {48E2C7C6-52EB-46FB-8722-00A62F46F497}.Release|Mixed Platforms.ActiveCfg = Release|Smartphone 2003 (ARMV4) + {48E2C7C6-52EB-46FB-8722-00A62F46F497}.Release|Mixed Platforms.Build.0 = Release|Smartphone 2003 (ARMV4) + {48E2C7C6-52EB-46FB-8722-00A62F46F497}.Release|Mixed Platforms.Deploy.0 = Release|Smartphone 2003 (ARMV4) {48E2C7C6-52EB-46FB-8722-00A62F46F497}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4) {48E2C7C6-52EB-46FB-8722-00A62F46F497}.Release|Win32.ActiveCfg = Release|Win32 {48E2C7C6-52EB-46FB-8722-00A62F46F497}.Release|Win32.Build.0 = Release|Win32 + {B38E812D-9823-48E7-BE5F-BF09B0AD4165}.Debug|Mixed Platforms.ActiveCfg = Debug|Smartphone 2003 (ARMV4) + {B38E812D-9823-48E7-BE5F-BF09B0AD4165}.Debug|Mixed Platforms.Build.0 = Debug|Smartphone 2003 (ARMV4) + {B38E812D-9823-48E7-BE5F-BF09B0AD4165}.Debug|Mixed Platforms.Deploy.0 = Debug|Smartphone 2003 (ARMV4) {B38E812D-9823-48E7-BE5F-BF09B0AD4165}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4) {B38E812D-9823-48E7-BE5F-BF09B0AD4165}.Debug|Smartphone 2003 (ARMV4).Build.0 = Debug|Smartphone 2003 (ARMV4) {B38E812D-9823-48E7-BE5F-BF09B0AD4165}.Debug|Win32.ActiveCfg = Debug|Win32 {B38E812D-9823-48E7-BE5F-BF09B0AD4165}.Debug|Win32.Build.0 = Debug|Win32 + {B38E812D-9823-48E7-BE5F-BF09B0AD4165}.Release|Mixed Platforms.ActiveCfg = Release|Smartphone 2003 (ARMV4) + {B38E812D-9823-48E7-BE5F-BF09B0AD4165}.Release|Mixed Platforms.Build.0 = Release|Smartphone 2003 (ARMV4) + {B38E812D-9823-48E7-BE5F-BF09B0AD4165}.Release|Mixed Platforms.Deploy.0 = Release|Smartphone 2003 (ARMV4) {B38E812D-9823-48E7-BE5F-BF09B0AD4165}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4) {B38E812D-9823-48E7-BE5F-BF09B0AD4165}.Release|Smartphone 2003 (ARMV4).Build.0 = Release|Smartphone 2003 (ARMV4) {B38E812D-9823-48E7-BE5F-BF09B0AD4165}.Release|Win32.ActiveCfg = Release|Win32 {B38E812D-9823-48E7-BE5F-BF09B0AD4165}.Release|Win32.Build.0 = Release|Win32 + {A86E6EF8-3683-4AD0-8878-7A0D51326088}.Debug|Mixed Platforms.ActiveCfg = Debug|Smartphone 2003 (ARMV4) + {A86E6EF8-3683-4AD0-8878-7A0D51326088}.Debug|Mixed Platforms.Build.0 = Debug|Smartphone 2003 (ARMV4) + {A86E6EF8-3683-4AD0-8878-7A0D51326088}.Debug|Mixed Platforms.Deploy.0 = Debug|Smartphone 2003 (ARMV4) {A86E6EF8-3683-4AD0-8878-7A0D51326088}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4) {A86E6EF8-3683-4AD0-8878-7A0D51326088}.Debug|Smartphone 2003 (ARMV4).Build.0 = Debug|Smartphone 2003 (ARMV4) {A86E6EF8-3683-4AD0-8878-7A0D51326088}.Debug|Win32.ActiveCfg = Debug|Win32 {A86E6EF8-3683-4AD0-8878-7A0D51326088}.Debug|Win32.Build.0 = Debug|Win32 + {A86E6EF8-3683-4AD0-8878-7A0D51326088}.Release|Mixed Platforms.ActiveCfg = Release|Smartphone 2003 (ARMV4) + {A86E6EF8-3683-4AD0-8878-7A0D51326088}.Release|Mixed Platforms.Build.0 = Release|Smartphone 2003 (ARMV4) + {A86E6EF8-3683-4AD0-8878-7A0D51326088}.Release|Mixed Platforms.Deploy.0 = Release|Smartphone 2003 (ARMV4) {A86E6EF8-3683-4AD0-8878-7A0D51326088}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4) {A86E6EF8-3683-4AD0-8878-7A0D51326088}.Release|Smartphone 2003 (ARMV4).Build.0 = Release|Smartphone 2003 (ARMV4) {A86E6EF8-3683-4AD0-8878-7A0D51326088}.Release|Win32.ActiveCfg = Release|Win32 {A86E6EF8-3683-4AD0-8878-7A0D51326088}.Release|Win32.Build.0 = Release|Win32 + {3B4108E4-C8FD-4D82-AF4A-F928CCF36A60}.Debug|Mixed Platforms.ActiveCfg = Debug|Smartphone 2003 (ARMV4) + {3B4108E4-C8FD-4D82-AF4A-F928CCF36A60}.Debug|Mixed Platforms.Build.0 = Debug|Smartphone 2003 (ARMV4) + {3B4108E4-C8FD-4D82-AF4A-F928CCF36A60}.Debug|Mixed Platforms.Deploy.0 = Debug|Smartphone 2003 (ARMV4) {3B4108E4-C8FD-4D82-AF4A-F928CCF36A60}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4) {3B4108E4-C8FD-4D82-AF4A-F928CCF36A60}.Debug|Smartphone 2003 (ARMV4).Build.0 = Debug|Smartphone 2003 (ARMV4) {3B4108E4-C8FD-4D82-AF4A-F928CCF36A60}.Debug|Win32.ActiveCfg = Debug|Win32 {3B4108E4-C8FD-4D82-AF4A-F928CCF36A60}.Debug|Win32.Build.0 = Debug|Win32 + {3B4108E4-C8FD-4D82-AF4A-F928CCF36A60}.Release|Mixed Platforms.ActiveCfg = Release|Smartphone 2003 (ARMV4) + {3B4108E4-C8FD-4D82-AF4A-F928CCF36A60}.Release|Mixed Platforms.Build.0 = Release|Smartphone 2003 (ARMV4) + {3B4108E4-C8FD-4D82-AF4A-F928CCF36A60}.Release|Mixed Platforms.Deploy.0 = Release|Smartphone 2003 (ARMV4) {3B4108E4-C8FD-4D82-AF4A-F928CCF36A60}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4) {3B4108E4-C8FD-4D82-AF4A-F928CCF36A60}.Release|Smartphone 2003 (ARMV4).Build.0 = Release|Smartphone 2003 (ARMV4) {3B4108E4-C8FD-4D82-AF4A-F928CCF36A60}.Release|Win32.ActiveCfg = Release|Win32 {3B4108E4-C8FD-4D82-AF4A-F928CCF36A60}.Release|Win32.Build.0 = Release|Win32 + {A0288B75-0D95-4106-A3A7-779A891E8FEF}.Debug|Mixed Platforms.ActiveCfg = Debug|Smartphone 2003 (ARMV4) + {A0288B75-0D95-4106-A3A7-779A891E8FEF}.Debug|Mixed Platforms.Build.0 = Debug|Smartphone 2003 (ARMV4) + {A0288B75-0D95-4106-A3A7-779A891E8FEF}.Debug|Mixed Platforms.Deploy.0 = Debug|Smartphone 2003 (ARMV4) {A0288B75-0D95-4106-A3A7-779A891E8FEF}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4) {A0288B75-0D95-4106-A3A7-779A891E8FEF}.Debug|Win32.ActiveCfg = Debug|Win32 {A0288B75-0D95-4106-A3A7-779A891E8FEF}.Debug|Win32.Build.0 = Debug|Win32 + {A0288B75-0D95-4106-A3A7-779A891E8FEF}.Release|Mixed Platforms.ActiveCfg = Release|Smartphone 2003 (ARMV4) + {A0288B75-0D95-4106-A3A7-779A891E8FEF}.Release|Mixed Platforms.Build.0 = Release|Smartphone 2003 (ARMV4) + {A0288B75-0D95-4106-A3A7-779A891E8FEF}.Release|Mixed Platforms.Deploy.0 = Release|Smartphone 2003 (ARMV4) {A0288B75-0D95-4106-A3A7-779A891E8FEF}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4) {A0288B75-0D95-4106-A3A7-779A891E8FEF}.Release|Win32.ActiveCfg = Release|Win32 {A0288B75-0D95-4106-A3A7-779A891E8FEF}.Release|Win32.Build.0 = Release|Win32 + {8162BADA-2FB6-4A71-B998-ABAFAF28E5A8}.Debug|Mixed Platforms.ActiveCfg = Debug|Smartphone 2003 (ARMV4) + {8162BADA-2FB6-4A71-B998-ABAFAF28E5A8}.Debug|Mixed Platforms.Build.0 = Debug|Smartphone 2003 (ARMV4) + {8162BADA-2FB6-4A71-B998-ABAFAF28E5A8}.Debug|Mixed Platforms.Deploy.0 = Debug|Smartphone 2003 (ARMV4) {8162BADA-2FB6-4A71-B998-ABAFAF28E5A8}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4) {8162BADA-2FB6-4A71-B998-ABAFAF28E5A8}.Debug|Smartphone 2003 (ARMV4).Build.0 = Debug|Smartphone 2003 (ARMV4) {8162BADA-2FB6-4A71-B998-ABAFAF28E5A8}.Debug|Win32.ActiveCfg = Debug|Win32 {8162BADA-2FB6-4A71-B998-ABAFAF28E5A8}.Debug|Win32.Build.0 = Debug|Win32 + {8162BADA-2FB6-4A71-B998-ABAFAF28E5A8}.Release|Mixed Platforms.ActiveCfg = Release|Smartphone 2003 (ARMV4) + {8162BADA-2FB6-4A71-B998-ABAFAF28E5A8}.Release|Mixed Platforms.Build.0 = Release|Smartphone 2003 (ARMV4) + {8162BADA-2FB6-4A71-B998-ABAFAF28E5A8}.Release|Mixed Platforms.Deploy.0 = Release|Smartphone 2003 (ARMV4) {8162BADA-2FB6-4A71-B998-ABAFAF28E5A8}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4) {8162BADA-2FB6-4A71-B998-ABAFAF28E5A8}.Release|Smartphone 2003 (ARMV4).Build.0 = Release|Smartphone 2003 (ARMV4) {8162BADA-2FB6-4A71-B998-ABAFAF28E5A8}.Release|Win32.ActiveCfg = Release|Win32 {8162BADA-2FB6-4A71-B998-ABAFAF28E5A8}.Release|Win32.Build.0 = Release|Win32 + {E2DBD151-9523-4E1A-9478-F3F825668F6E}.Debug|Mixed Platforms.ActiveCfg = Debug|Smartphone 2003 (ARMV4) + {E2DBD151-9523-4E1A-9478-F3F825668F6E}.Debug|Mixed Platforms.Build.0 = Debug|Smartphone 2003 (ARMV4) + {E2DBD151-9523-4E1A-9478-F3F825668F6E}.Debug|Mixed Platforms.Deploy.0 = Debug|Smartphone 2003 (ARMV4) {E2DBD151-9523-4E1A-9478-F3F825668F6E}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4) {E2DBD151-9523-4E1A-9478-F3F825668F6E}.Debug|Smartphone 2003 (ARMV4).Build.0 = Debug|Smartphone 2003 (ARMV4) {E2DBD151-9523-4E1A-9478-F3F825668F6E}.Debug|Win32.ActiveCfg = Debug|Win32 {E2DBD151-9523-4E1A-9478-F3F825668F6E}.Debug|Win32.Build.0 = Debug|Win32 + {E2DBD151-9523-4E1A-9478-F3F825668F6E}.Release|Mixed Platforms.ActiveCfg = Release|Smartphone 2003 (ARMV4) + {E2DBD151-9523-4E1A-9478-F3F825668F6E}.Release|Mixed Platforms.Build.0 = Release|Smartphone 2003 (ARMV4) + {E2DBD151-9523-4E1A-9478-F3F825668F6E}.Release|Mixed Platforms.Deploy.0 = Release|Smartphone 2003 (ARMV4) {E2DBD151-9523-4E1A-9478-F3F825668F6E}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4) {E2DBD151-9523-4E1A-9478-F3F825668F6E}.Release|Smartphone 2003 (ARMV4).Build.0 = Release|Smartphone 2003 (ARMV4) {E2DBD151-9523-4E1A-9478-F3F825668F6E}.Release|Win32.ActiveCfg = Release|Win32 {E2DBD151-9523-4E1A-9478-F3F825668F6E}.Release|Win32.Build.0 = Release|Win32 + {2B6AB6CD-E7D0-4706-BB4A-DDD7AE1A510D}.Debug|Mixed Platforms.ActiveCfg = Debug|Smartphone 2003 (ARMV4) + {2B6AB6CD-E7D0-4706-BB4A-DDD7AE1A510D}.Debug|Mixed Platforms.Build.0 = Debug|Smartphone 2003 (ARMV4) + {2B6AB6CD-E7D0-4706-BB4A-DDD7AE1A510D}.Debug|Mixed Platforms.Deploy.0 = Debug|Smartphone 2003 (ARMV4) {2B6AB6CD-E7D0-4706-BB4A-DDD7AE1A510D}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4) {2B6AB6CD-E7D0-4706-BB4A-DDD7AE1A510D}.Debug|Smartphone 2003 (ARMV4).Build.0 = Debug|Smartphone 2003 (ARMV4) {2B6AB6CD-E7D0-4706-BB4A-DDD7AE1A510D}.Debug|Win32.ActiveCfg = Debug|Win32 {2B6AB6CD-E7D0-4706-BB4A-DDD7AE1A510D}.Debug|Win32.Build.0 = Debug|Win32 + {2B6AB6CD-E7D0-4706-BB4A-DDD7AE1A510D}.Release|Mixed Platforms.ActiveCfg = Release|Smartphone 2003 (ARMV4) + {2B6AB6CD-E7D0-4706-BB4A-DDD7AE1A510D}.Release|Mixed Platforms.Build.0 = Release|Smartphone 2003 (ARMV4) + {2B6AB6CD-E7D0-4706-BB4A-DDD7AE1A510D}.Release|Mixed Platforms.Deploy.0 = Release|Smartphone 2003 (ARMV4) {2B6AB6CD-E7D0-4706-BB4A-DDD7AE1A510D}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4) {2B6AB6CD-E7D0-4706-BB4A-DDD7AE1A510D}.Release|Smartphone 2003 (ARMV4).Build.0 = Release|Smartphone 2003 (ARMV4) {2B6AB6CD-E7D0-4706-BB4A-DDD7AE1A510D}.Release|Win32.ActiveCfg = Release|Win32 {2B6AB6CD-E7D0-4706-BB4A-DDD7AE1A510D}.Release|Win32.Build.0 = Release|Win32 + {F346A9A7-CF8D-4409-8776-1D4244F96EF8}.Debug|Mixed Platforms.ActiveCfg = Debug|Smartphone 2003 (ARMV4) + {F346A9A7-CF8D-4409-8776-1D4244F96EF8}.Debug|Mixed Platforms.Build.0 = Debug|Smartphone 2003 (ARMV4) + {F346A9A7-CF8D-4409-8776-1D4244F96EF8}.Debug|Mixed Platforms.Deploy.0 = Debug|Smartphone 2003 (ARMV4) {F346A9A7-CF8D-4409-8776-1D4244F96EF8}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4) {F346A9A7-CF8D-4409-8776-1D4244F96EF8}.Debug|Win32.ActiveCfg = Debug|Win32 {F346A9A7-CF8D-4409-8776-1D4244F96EF8}.Debug|Win32.Build.0 = Debug|Win32 + {F346A9A7-CF8D-4409-8776-1D4244F96EF8}.Release|Mixed Platforms.ActiveCfg = Release|Smartphone 2003 (ARMV4) + {F346A9A7-CF8D-4409-8776-1D4244F96EF8}.Release|Mixed Platforms.Build.0 = Release|Smartphone 2003 (ARMV4) + {F346A9A7-CF8D-4409-8776-1D4244F96EF8}.Release|Mixed Platforms.Deploy.0 = Release|Smartphone 2003 (ARMV4) {F346A9A7-CF8D-4409-8776-1D4244F96EF8}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4) {F346A9A7-CF8D-4409-8776-1D4244F96EF8}.Release|Win32.ActiveCfg = Release|Win32 {F346A9A7-CF8D-4409-8776-1D4244F96EF8}.Release|Win32.Build.0 = Release|Win32 + {71071F01-C813-4384-BE38-0F4020BCC0EE}.Debug|Mixed Platforms.ActiveCfg = Debug|Smartphone 2003 (ARMV4) + {71071F01-C813-4384-BE38-0F4020BCC0EE}.Debug|Mixed Platforms.Build.0 = Debug|Smartphone 2003 (ARMV4) + {71071F01-C813-4384-BE38-0F4020BCC0EE}.Debug|Mixed Platforms.Deploy.0 = Debug|Smartphone 2003 (ARMV4) {71071F01-C813-4384-BE38-0F4020BCC0EE}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4) {71071F01-C813-4384-BE38-0F4020BCC0EE}.Debug|Smartphone 2003 (ARMV4).Build.0 = Debug|Smartphone 2003 (ARMV4) {71071F01-C813-4384-BE38-0F4020BCC0EE}.Debug|Win32.ActiveCfg = Debug|Win32 {71071F01-C813-4384-BE38-0F4020BCC0EE}.Debug|Win32.Build.0 = Debug|Win32 + {71071F01-C813-4384-BE38-0F4020BCC0EE}.Release|Mixed Platforms.ActiveCfg = Release|Smartphone 2003 (ARMV4) + {71071F01-C813-4384-BE38-0F4020BCC0EE}.Release|Mixed Platforms.Build.0 = Release|Smartphone 2003 (ARMV4) + {71071F01-C813-4384-BE38-0F4020BCC0EE}.Release|Mixed Platforms.Deploy.0 = Release|Smartphone 2003 (ARMV4) {71071F01-C813-4384-BE38-0F4020BCC0EE}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4) {71071F01-C813-4384-BE38-0F4020BCC0EE}.Release|Smartphone 2003 (ARMV4).Build.0 = Release|Smartphone 2003 (ARMV4) {71071F01-C813-4384-BE38-0F4020BCC0EE}.Release|Win32.ActiveCfg = Release|Win32 {71071F01-C813-4384-BE38-0F4020BCC0EE}.Release|Win32.Build.0 = Release|Win32 + {402A8794-B724-44A3-B608-84B600ECA387}.Debug|Mixed Platforms.ActiveCfg = Debug|Smartphone 2003 (ARMV4) + {402A8794-B724-44A3-B608-84B600ECA387}.Debug|Mixed Platforms.Build.0 = Debug|Smartphone 2003 (ARMV4) + {402A8794-B724-44A3-B608-84B600ECA387}.Debug|Mixed Platforms.Deploy.0 = Debug|Smartphone 2003 (ARMV4) {402A8794-B724-44A3-B608-84B600ECA387}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4) {402A8794-B724-44A3-B608-84B600ECA387}.Debug|Smartphone 2003 (ARMV4).Build.0 = Debug|Smartphone 2003 (ARMV4) {402A8794-B724-44A3-B608-84B600ECA387}.Debug|Win32.ActiveCfg = Debug|Win32 {402A8794-B724-44A3-B608-84B600ECA387}.Debug|Win32.Build.0 = Debug|Win32 + {402A8794-B724-44A3-B608-84B600ECA387}.Release|Mixed Platforms.ActiveCfg = Release|Smartphone 2003 (ARMV4) + {402A8794-B724-44A3-B608-84B600ECA387}.Release|Mixed Platforms.Build.0 = Release|Smartphone 2003 (ARMV4) + {402A8794-B724-44A3-B608-84B600ECA387}.Release|Mixed Platforms.Deploy.0 = Release|Smartphone 2003 (ARMV4) {402A8794-B724-44A3-B608-84B600ECA387}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4) {402A8794-B724-44A3-B608-84B600ECA387}.Release|Smartphone 2003 (ARMV4).Build.0 = Release|Smartphone 2003 (ARMV4) {402A8794-B724-44A3-B608-84B600ECA387}.Release|Win32.ActiveCfg = Release|Win32 {402A8794-B724-44A3-B608-84B600ECA387}.Release|Win32.Build.0 = Release|Win32 + {464697D2-BA44-446F-8223-1EB3969ED1A8}.Debug|Mixed Platforms.ActiveCfg = Debug|Smartphone 2003 (ARMV4) + {464697D2-BA44-446F-8223-1EB3969ED1A8}.Debug|Mixed Platforms.Build.0 = Debug|Smartphone 2003 (ARMV4) + {464697D2-BA44-446F-8223-1EB3969ED1A8}.Debug|Mixed Platforms.Deploy.0 = Debug|Smartphone 2003 (ARMV4) {464697D2-BA44-446F-8223-1EB3969ED1A8}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4) {464697D2-BA44-446F-8223-1EB3969ED1A8}.Debug|Smartphone 2003 (ARMV4).Build.0 = Debug|Smartphone 2003 (ARMV4) {464697D2-BA44-446F-8223-1EB3969ED1A8}.Debug|Win32.ActiveCfg = Debug|Win32 {464697D2-BA44-446F-8223-1EB3969ED1A8}.Debug|Win32.Build.0 = Debug|Win32 + {464697D2-BA44-446F-8223-1EB3969ED1A8}.Release|Mixed Platforms.ActiveCfg = Release|Smartphone 2003 (ARMV4) + {464697D2-BA44-446F-8223-1EB3969ED1A8}.Release|Mixed Platforms.Build.0 = Release|Smartphone 2003 (ARMV4) + {464697D2-BA44-446F-8223-1EB3969ED1A8}.Release|Mixed Platforms.Deploy.0 = Release|Smartphone 2003 (ARMV4) {464697D2-BA44-446F-8223-1EB3969ED1A8}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4) {464697D2-BA44-446F-8223-1EB3969ED1A8}.Release|Smartphone 2003 (ARMV4).Build.0 = Release|Smartphone 2003 (ARMV4) {464697D2-BA44-446F-8223-1EB3969ED1A8}.Release|Win32.ActiveCfg = Release|Win32 {464697D2-BA44-446F-8223-1EB3969ED1A8}.Release|Win32.Build.0 = Release|Win32 + {01183543-B182-4E32-9FD6-FC15C847316C}.Debug|Mixed Platforms.ActiveCfg = Debug|Smartphone 2003 (ARMV4) + {01183543-B182-4E32-9FD6-FC15C847316C}.Debug|Mixed Platforms.Build.0 = Debug|Smartphone 2003 (ARMV4) + {01183543-B182-4E32-9FD6-FC15C847316C}.Debug|Mixed Platforms.Deploy.0 = Debug|Smartphone 2003 (ARMV4) {01183543-B182-4E32-9FD6-FC15C847316C}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4) {01183543-B182-4E32-9FD6-FC15C847316C}.Debug|Smartphone 2003 (ARMV4).Build.0 = Debug|Smartphone 2003 (ARMV4) {01183543-B182-4E32-9FD6-FC15C847316C}.Debug|Win32.ActiveCfg = Debug|Win32 {01183543-B182-4E32-9FD6-FC15C847316C}.Debug|Win32.Build.0 = Debug|Win32 + {01183543-B182-4E32-9FD6-FC15C847316C}.Release|Mixed Platforms.ActiveCfg = Release|Smartphone 2003 (ARMV4) + {01183543-B182-4E32-9FD6-FC15C847316C}.Release|Mixed Platforms.Build.0 = Release|Smartphone 2003 (ARMV4) + {01183543-B182-4E32-9FD6-FC15C847316C}.Release|Mixed Platforms.Deploy.0 = Release|Smartphone 2003 (ARMV4) {01183543-B182-4E32-9FD6-FC15C847316C}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4) {01183543-B182-4E32-9FD6-FC15C847316C}.Release|Smartphone 2003 (ARMV4).Build.0 = Release|Smartphone 2003 (ARMV4) {01183543-B182-4E32-9FD6-FC15C847316C}.Release|Win32.ActiveCfg = Release|Win32 {01183543-B182-4E32-9FD6-FC15C847316C}.Release|Win32.Build.0 = Release|Win32 + {4258687D-4905-46A6-9407-08F4F8A81CC0}.Debug|Mixed Platforms.ActiveCfg = Debug|Smartphone 2003 (ARMV4) + {4258687D-4905-46A6-9407-08F4F8A81CC0}.Debug|Mixed Platforms.Build.0 = Debug|Smartphone 2003 (ARMV4) + {4258687D-4905-46A6-9407-08F4F8A81CC0}.Debug|Mixed Platforms.Deploy.0 = Debug|Smartphone 2003 (ARMV4) {4258687D-4905-46A6-9407-08F4F8A81CC0}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4) {4258687D-4905-46A6-9407-08F4F8A81CC0}.Debug|Smartphone 2003 (ARMV4).Build.0 = Debug|Smartphone 2003 (ARMV4) {4258687D-4905-46A6-9407-08F4F8A81CC0}.Debug|Win32.ActiveCfg = Debug|Win32 {4258687D-4905-46A6-9407-08F4F8A81CC0}.Debug|Win32.Build.0 = Debug|Win32 + {4258687D-4905-46A6-9407-08F4F8A81CC0}.Release|Mixed Platforms.ActiveCfg = Release|Smartphone 2003 (ARMV4) + {4258687D-4905-46A6-9407-08F4F8A81CC0}.Release|Mixed Platforms.Build.0 = Release|Smartphone 2003 (ARMV4) + {4258687D-4905-46A6-9407-08F4F8A81CC0}.Release|Mixed Platforms.Deploy.0 = Release|Smartphone 2003 (ARMV4) {4258687D-4905-46A6-9407-08F4F8A81CC0}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4) {4258687D-4905-46A6-9407-08F4F8A81CC0}.Release|Smartphone 2003 (ARMV4).Build.0 = Release|Smartphone 2003 (ARMV4) {4258687D-4905-46A6-9407-08F4F8A81CC0}.Release|Win32.ActiveCfg = Release|Win32 {4258687D-4905-46A6-9407-08F4F8A81CC0}.Release|Win32.Build.0 = Release|Win32 + {E08DA5C2-9D97-4CD3-BB13-6FD6BA4458D6}.Debug|Mixed Platforms.ActiveCfg = Debug|Smartphone 2003 (ARMV4) + {E08DA5C2-9D97-4CD3-BB13-6FD6BA4458D6}.Debug|Mixed Platforms.Build.0 = Debug|Smartphone 2003 (ARMV4) + {E08DA5C2-9D97-4CD3-BB13-6FD6BA4458D6}.Debug|Mixed Platforms.Deploy.0 = Debug|Smartphone 2003 (ARMV4) {E08DA5C2-9D97-4CD3-BB13-6FD6BA4458D6}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4) {E08DA5C2-9D97-4CD3-BB13-6FD6BA4458D6}.Debug|Smartphone 2003 (ARMV4).Build.0 = Debug|Smartphone 2003 (ARMV4) {E08DA5C2-9D97-4CD3-BB13-6FD6BA4458D6}.Debug|Win32.ActiveCfg = Debug|Win32 {E08DA5C2-9D97-4CD3-BB13-6FD6BA4458D6}.Debug|Win32.Build.0 = Debug|Win32 + {E08DA5C2-9D97-4CD3-BB13-6FD6BA4458D6}.Release|Mixed Platforms.ActiveCfg = Release|Smartphone 2003 (ARMV4) + {E08DA5C2-9D97-4CD3-BB13-6FD6BA4458D6}.Release|Mixed Platforms.Build.0 = Release|Smartphone 2003 (ARMV4) + {E08DA5C2-9D97-4CD3-BB13-6FD6BA4458D6}.Release|Mixed Platforms.Deploy.0 = Release|Smartphone 2003 (ARMV4) {E08DA5C2-9D97-4CD3-BB13-6FD6BA4458D6}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4) {E08DA5C2-9D97-4CD3-BB13-6FD6BA4458D6}.Release|Smartphone 2003 (ARMV4).Build.0 = Release|Smartphone 2003 (ARMV4) {E08DA5C2-9D97-4CD3-BB13-6FD6BA4458D6}.Release|Win32.ActiveCfg = Release|Win32 {E08DA5C2-9D97-4CD3-BB13-6FD6BA4458D6}.Release|Win32.Build.0 = Release|Win32 + {1DE72B1E-0DD6-4AFD-95E9-D23ACAB31812}.Debug|Mixed Platforms.ActiveCfg = Debug|Smartphone 2003 (ARMV4) + {1DE72B1E-0DD6-4AFD-95E9-D23ACAB31812}.Debug|Mixed Platforms.Build.0 = Debug|Smartphone 2003 (ARMV4) + {1DE72B1E-0DD6-4AFD-95E9-D23ACAB31812}.Debug|Mixed Platforms.Deploy.0 = Debug|Smartphone 2003 (ARMV4) {1DE72B1E-0DD6-4AFD-95E9-D23ACAB31812}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4) {1DE72B1E-0DD6-4AFD-95E9-D23ACAB31812}.Debug|Win32.ActiveCfg = Debug|Win32 {1DE72B1E-0DD6-4AFD-95E9-D23ACAB31812}.Debug|Win32.Build.0 = Debug|Win32 + {1DE72B1E-0DD6-4AFD-95E9-D23ACAB31812}.Release|Mixed Platforms.ActiveCfg = Release|Smartphone 2003 (ARMV4) + {1DE72B1E-0DD6-4AFD-95E9-D23ACAB31812}.Release|Mixed Platforms.Build.0 = Release|Smartphone 2003 (ARMV4) + {1DE72B1E-0DD6-4AFD-95E9-D23ACAB31812}.Release|Mixed Platforms.Deploy.0 = Release|Smartphone 2003 (ARMV4) {1DE72B1E-0DD6-4AFD-95E9-D23ACAB31812}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4) {1DE72B1E-0DD6-4AFD-95E9-D23ACAB31812}.Release|Win32.ActiveCfg = Release|Win32 {1DE72B1E-0DD6-4AFD-95E9-D23ACAB31812}.Release|Win32.Build.0 = Release|Win32 + {F9AF60FE-C2F2-4D94-9667-E4FCC6FAA466}.Debug|Mixed Platforms.ActiveCfg = Debug|Smartphone 2003 (ARMV4) + {F9AF60FE-C2F2-4D94-9667-E4FCC6FAA466}.Debug|Mixed Platforms.Build.0 = Debug|Smartphone 2003 (ARMV4) + {F9AF60FE-C2F2-4D94-9667-E4FCC6FAA466}.Debug|Mixed Platforms.Deploy.0 = Debug|Smartphone 2003 (ARMV4) {F9AF60FE-C2F2-4D94-9667-E4FCC6FAA466}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4) {F9AF60FE-C2F2-4D94-9667-E4FCC6FAA466}.Debug|Smartphone 2003 (ARMV4).Build.0 = Debug|Smartphone 2003 (ARMV4) {F9AF60FE-C2F2-4D94-9667-E4FCC6FAA466}.Debug|Win32.ActiveCfg = Debug|Smartphone 2003 (ARMV4) + {F9AF60FE-C2F2-4D94-9667-E4FCC6FAA466}.Release|Mixed Platforms.ActiveCfg = Release|Smartphone 2003 (ARMV4) + {F9AF60FE-C2F2-4D94-9667-E4FCC6FAA466}.Release|Mixed Platforms.Build.0 = Release|Smartphone 2003 (ARMV4) + {F9AF60FE-C2F2-4D94-9667-E4FCC6FAA466}.Release|Mixed Platforms.Deploy.0 = Release|Smartphone 2003 (ARMV4) {F9AF60FE-C2F2-4D94-9667-E4FCC6FAA466}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4) {F9AF60FE-C2F2-4D94-9667-E4FCC6FAA466}.Release|Smartphone 2003 (ARMV4).Build.0 = Release|Smartphone 2003 (ARMV4) {F9AF60FE-C2F2-4D94-9667-E4FCC6FAA466}.Release|Win32.ActiveCfg = Release|Smartphone 2003 (ARMV4) + {CAA7EF3E-C7F4-4F8A-9E17-9A06DEF9E717}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {CAA7EF3E-C7F4-4F8A-9E17-9A06DEF9E717}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {CAA7EF3E-C7F4-4F8A-9E17-9A06DEF9E717}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4) {CAA7EF3E-C7F4-4F8A-9E17-9A06DEF9E717}.Debug|Smartphone 2003 (ARMV4).Build.0 = Debug|Smartphone 2003 (ARMV4) {CAA7EF3E-C7F4-4F8A-9E17-9A06DEF9E717}.Debug|Smartphone 2003 (ARMV4).Deploy.0 = Debug|Smartphone 2003 (ARMV4) {CAA7EF3E-C7F4-4F8A-9E17-9A06DEF9E717}.Debug|Win32.ActiveCfg = Debug|Win32 + {CAA7EF3E-C7F4-4F8A-9E17-9A06DEF9E717}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {CAA7EF3E-C7F4-4F8A-9E17-9A06DEF9E717}.Release|Mixed Platforms.Build.0 = Release|Win32 {CAA7EF3E-C7F4-4F8A-9E17-9A06DEF9E717}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4) {CAA7EF3E-C7F4-4F8A-9E17-9A06DEF9E717}.Release|Smartphone 2003 (ARMV4).Build.0 = Release|Smartphone 2003 (ARMV4) {CAA7EF3E-C7F4-4F8A-9E17-9A06DEF9E717}.Release|Smartphone 2003 (ARMV4).Deploy.0 = Release|Smartphone 2003 (ARMV4) {CAA7EF3E-C7F4-4F8A-9E17-9A06DEF9E717}.Release|Win32.ActiveCfg = Release|Win32 {CAA7EF3E-C7F4-4F8A-9E17-9A06DEF9E717}.Release|Win32.Build.0 = Release|Win32 + {27F7FDF4-479B-47B5-BFEA-12E9EA41F663}.Debug|Mixed Platforms.ActiveCfg = Debug|Smartphone 2003 (ARMV4) + {27F7FDF4-479B-47B5-BFEA-12E9EA41F663}.Debug|Mixed Platforms.Build.0 = Debug|Smartphone 2003 (ARMV4) + {27F7FDF4-479B-47B5-BFEA-12E9EA41F663}.Debug|Mixed Platforms.Deploy.0 = Debug|Smartphone 2003 (ARMV4) {27F7FDF4-479B-47B5-BFEA-12E9EA41F663}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4) {27F7FDF4-479B-47B5-BFEA-12E9EA41F663}.Debug|Smartphone 2003 (ARMV4).Build.0 = Debug|Smartphone 2003 (ARMV4) {27F7FDF4-479B-47B5-BFEA-12E9EA41F663}.Debug|Win32.ActiveCfg = Debug|Win32 {27F7FDF4-479B-47B5-BFEA-12E9EA41F663}.Debug|Win32.Build.0 = Debug|Win32 + {27F7FDF4-479B-47B5-BFEA-12E9EA41F663}.Release|Mixed Platforms.ActiveCfg = Release|Smartphone 2003 (ARMV4) + {27F7FDF4-479B-47B5-BFEA-12E9EA41F663}.Release|Mixed Platforms.Build.0 = Release|Smartphone 2003 (ARMV4) + {27F7FDF4-479B-47B5-BFEA-12E9EA41F663}.Release|Mixed Platforms.Deploy.0 = Release|Smartphone 2003 (ARMV4) {27F7FDF4-479B-47B5-BFEA-12E9EA41F663}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4) {27F7FDF4-479B-47B5-BFEA-12E9EA41F663}.Release|Smartphone 2003 (ARMV4).Build.0 = Release|Smartphone 2003 (ARMV4) {27F7FDF4-479B-47B5-BFEA-12E9EA41F663}.Release|Win32.ActiveCfg = Release|Win32 {27F7FDF4-479B-47B5-BFEA-12E9EA41F663}.Release|Win32.Build.0 = Release|Win32 + {C993119B-29B1-49C8-8EA3-A9ABF633164E}.Debug|Mixed Platforms.ActiveCfg = Debug|Smartphone 2003 (ARMV4) + {C993119B-29B1-49C8-8EA3-A9ABF633164E}.Debug|Mixed Platforms.Build.0 = Debug|Smartphone 2003 (ARMV4) + {C993119B-29B1-49C8-8EA3-A9ABF633164E}.Debug|Mixed Platforms.Deploy.0 = Debug|Smartphone 2003 (ARMV4) {C993119B-29B1-49C8-8EA3-A9ABF633164E}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4) {C993119B-29B1-49C8-8EA3-A9ABF633164E}.Debug|Smartphone 2003 (ARMV4).Build.0 = Debug|Smartphone 2003 (ARMV4) {C993119B-29B1-49C8-8EA3-A9ABF633164E}.Debug|Win32.ActiveCfg = Debug|Win32 {C993119B-29B1-49C8-8EA3-A9ABF633164E}.Debug|Win32.Build.0 = Debug|Win32 + {C993119B-29B1-49C8-8EA3-A9ABF633164E}.Release|Mixed Platforms.ActiveCfg = Release|Smartphone 2003 (ARMV4) + {C993119B-29B1-49C8-8EA3-A9ABF633164E}.Release|Mixed Platforms.Build.0 = Release|Smartphone 2003 (ARMV4) + {C993119B-29B1-49C8-8EA3-A9ABF633164E}.Release|Mixed Platforms.Deploy.0 = Release|Smartphone 2003 (ARMV4) {C993119B-29B1-49C8-8EA3-A9ABF633164E}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4) {C993119B-29B1-49C8-8EA3-A9ABF633164E}.Release|Smartphone 2003 (ARMV4).Build.0 = Release|Smartphone 2003 (ARMV4) {C993119B-29B1-49C8-8EA3-A9ABF633164E}.Release|Smartphone 2003 (ARMV4).Deploy.0 = Release|Smartphone 2003 (ARMV4) {C993119B-29B1-49C8-8EA3-A9ABF633164E}.Release|Win32.ActiveCfg = Release|Win32 {C993119B-29B1-49C8-8EA3-A9ABF633164E}.Release|Win32.Build.0 = Release|Win32 + {694C765F-DFD6-467E-A813-B3F887E822D4}.Debug|Mixed Platforms.ActiveCfg = Debug|Smartphone 2003 (ARMV4) + {694C765F-DFD6-467E-A813-B3F887E822D4}.Debug|Mixed Platforms.Build.0 = Debug|Smartphone 2003 (ARMV4) + {694C765F-DFD6-467E-A813-B3F887E822D4}.Debug|Mixed Platforms.Deploy.0 = Debug|Smartphone 2003 (ARMV4) {694C765F-DFD6-467E-A813-B3F887E822D4}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4) {694C765F-DFD6-467E-A813-B3F887E822D4}.Debug|Smartphone 2003 (ARMV4).Build.0 = Debug|Smartphone 2003 (ARMV4) {694C765F-DFD6-467E-A813-B3F887E822D4}.Debug|Win32.ActiveCfg = Debug|Win32 {694C765F-DFD6-467E-A813-B3F887E822D4}.Debug|Win32.Build.0 = Debug|Win32 + {694C765F-DFD6-467E-A813-B3F887E822D4}.Release|Mixed Platforms.ActiveCfg = Release|Smartphone 2003 (ARMV4) + {694C765F-DFD6-467E-A813-B3F887E822D4}.Release|Mixed Platforms.Build.0 = Release|Smartphone 2003 (ARMV4) + {694C765F-DFD6-467E-A813-B3F887E822D4}.Release|Mixed Platforms.Deploy.0 = Release|Smartphone 2003 (ARMV4) {694C765F-DFD6-467E-A813-B3F887E822D4}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4) {694C765F-DFD6-467E-A813-B3F887E822D4}.Release|Smartphone 2003 (ARMV4).Build.0 = Release|Smartphone 2003 (ARMV4) {694C765F-DFD6-467E-A813-B3F887E822D4}.Release|Smartphone 2003 (ARMV4).Deploy.0 = Release|Smartphone 2003 (ARMV4) {694C765F-DFD6-467E-A813-B3F887E822D4}.Release|Win32.ActiveCfg = Release|Win32 {694C765F-DFD6-467E-A813-B3F887E822D4}.Release|Win32.Build.0 = Release|Win32 + {07D6FB42-0F4F-487A-BCBA-EC4BBF5CB160}.Debug|Mixed Platforms.ActiveCfg = Debug|Smartphone 2003 (ARMV4) + {07D6FB42-0F4F-487A-BCBA-EC4BBF5CB160}.Debug|Mixed Platforms.Build.0 = Debug|Smartphone 2003 (ARMV4) + {07D6FB42-0F4F-487A-BCBA-EC4BBF5CB160}.Debug|Mixed Platforms.Deploy.0 = Debug|Smartphone 2003 (ARMV4) {07D6FB42-0F4F-487A-BCBA-EC4BBF5CB160}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4) {07D6FB42-0F4F-487A-BCBA-EC4BBF5CB160}.Debug|Smartphone 2003 (ARMV4).Build.0 = Debug|Smartphone 2003 (ARMV4) {07D6FB42-0F4F-487A-BCBA-EC4BBF5CB160}.Debug|Smartphone 2003 (ARMV4).Deploy.0 = Debug|Smartphone 2003 (ARMV4) {07D6FB42-0F4F-487A-BCBA-EC4BBF5CB160}.Debug|Win32.ActiveCfg = Debug|Win32 {07D6FB42-0F4F-487A-BCBA-EC4BBF5CB160}.Debug|Win32.Build.0 = Debug|Win32 + {07D6FB42-0F4F-487A-BCBA-EC4BBF5CB160}.Release|Mixed Platforms.ActiveCfg = Release|Smartphone 2003 (ARMV4) + {07D6FB42-0F4F-487A-BCBA-EC4BBF5CB160}.Release|Mixed Platforms.Build.0 = Release|Smartphone 2003 (ARMV4) + {07D6FB42-0F4F-487A-BCBA-EC4BBF5CB160}.Release|Mixed Platforms.Deploy.0 = Release|Smartphone 2003 (ARMV4) {07D6FB42-0F4F-487A-BCBA-EC4BBF5CB160}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4) {07D6FB42-0F4F-487A-BCBA-EC4BBF5CB160}.Release|Smartphone 2003 (ARMV4).Build.0 = Release|Smartphone 2003 (ARMV4) {07D6FB42-0F4F-487A-BCBA-EC4BBF5CB160}.Release|Smartphone 2003 (ARMV4).Deploy.0 = Release|Smartphone 2003 (ARMV4) {07D6FB42-0F4F-487A-BCBA-EC4BBF5CB160}.Release|Win32.ActiveCfg = Release|Win32 {07D6FB42-0F4F-487A-BCBA-EC4BBF5CB160}.Release|Win32.Build.0 = Release|Win32 + {073E2281-4FDE-4C4D-A217-C489DB17C48C}.Debug|Mixed Platforms.ActiveCfg = Debug|Smartphone 2003 (ARMV4) + {073E2281-4FDE-4C4D-A217-C489DB17C48C}.Debug|Mixed Platforms.Build.0 = Debug|Smartphone 2003 (ARMV4) + {073E2281-4FDE-4C4D-A217-C489DB17C48C}.Debug|Mixed Platforms.Deploy.0 = Debug|Smartphone 2003 (ARMV4) {073E2281-4FDE-4C4D-A217-C489DB17C48C}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4) {073E2281-4FDE-4C4D-A217-C489DB17C48C}.Debug|Smartphone 2003 (ARMV4).Build.0 = Debug|Smartphone 2003 (ARMV4) {073E2281-4FDE-4C4D-A217-C489DB17C48C}.Debug|Win32.ActiveCfg = Debug|Win32 {073E2281-4FDE-4C4D-A217-C489DB17C48C}.Debug|Win32.Build.0 = Debug|Win32 + {073E2281-4FDE-4C4D-A217-C489DB17C48C}.Release|Mixed Platforms.ActiveCfg = Release|Smartphone 2003 (ARMV4) + {073E2281-4FDE-4C4D-A217-C489DB17C48C}.Release|Mixed Platforms.Build.0 = Release|Smartphone 2003 (ARMV4) + {073E2281-4FDE-4C4D-A217-C489DB17C48C}.Release|Mixed Platforms.Deploy.0 = Release|Smartphone 2003 (ARMV4) {073E2281-4FDE-4C4D-A217-C489DB17C48C}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4) {073E2281-4FDE-4C4D-A217-C489DB17C48C}.Release|Smartphone 2003 (ARMV4).Build.0 = Release|Smartphone 2003 (ARMV4) {073E2281-4FDE-4C4D-A217-C489DB17C48C}.Release|Smartphone 2003 (ARMV4).Deploy.0 = Release|Smartphone 2003 (ARMV4) {073E2281-4FDE-4C4D-A217-C489DB17C48C}.Release|Win32.ActiveCfg = Release|Win32 {073E2281-4FDE-4C4D-A217-C489DB17C48C}.Release|Win32.Build.0 = Release|Win32 + {073E2381-4FDE-4C4D-A117-C489DB17C48C}.Debug|Mixed Platforms.ActiveCfg = Debug|Smartphone 2003 (ARMV4) + {073E2381-4FDE-4C4D-A117-C489DB17C48C}.Debug|Mixed Platforms.Build.0 = Debug|Smartphone 2003 (ARMV4) + {073E2381-4FDE-4C4D-A117-C489DB17C48C}.Debug|Mixed Platforms.Deploy.0 = Debug|Smartphone 2003 (ARMV4) {073E2381-4FDE-4C4D-A117-C489DB17C48C}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4) {073E2381-4FDE-4C4D-A117-C489DB17C48C}.Debug|Smartphone 2003 (ARMV4).Build.0 = Debug|Smartphone 2003 (ARMV4) {073E2381-4FDE-4C4D-A117-C489DB17C48C}.Debug|Smartphone 2003 (ARMV4).Deploy.0 = Debug|Smartphone 2003 (ARMV4) {073E2381-4FDE-4C4D-A117-C489DB17C48C}.Debug|Win32.ActiveCfg = Debug|Win32 {073E2381-4FDE-4C4D-A117-C489DB17C48C}.Debug|Win32.Build.0 = Debug|Win32 + {073E2381-4FDE-4C4D-A117-C489DB17C48C}.Release|Mixed Platforms.ActiveCfg = Release|Smartphone 2003 (ARMV4) + {073E2381-4FDE-4C4D-A117-C489DB17C48C}.Release|Mixed Platforms.Build.0 = Release|Smartphone 2003 (ARMV4) + {073E2381-4FDE-4C4D-A117-C489DB17C48C}.Release|Mixed Platforms.Deploy.0 = Release|Smartphone 2003 (ARMV4) {073E2381-4FDE-4C4D-A117-C489DB17C48C}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4) {073E2381-4FDE-4C4D-A117-C489DB17C48C}.Release|Smartphone 2003 (ARMV4).Build.0 = Release|Smartphone 2003 (ARMV4) {073E2381-4FDE-4C4D-A117-C489DB17C48C}.Release|Smartphone 2003 (ARMV4).Deploy.0 = Release|Smartphone 2003 (ARMV4) {073E2381-4FDE-4C4D-A117-C489DB17C48C}.Release|Win32.ActiveCfg = Release|Win32 {073E2381-4FDE-4C4D-A117-C489DB17C48C}.Release|Win32.Build.0 = Release|Win32 + {073E2381-4FDE-4C4D-B217-C489EB17C48B}.Debug|Mixed Platforms.ActiveCfg = Debug|Smartphone 2003 (ARMV4) + {073E2381-4FDE-4C4D-B217-C489EB17C48B}.Debug|Mixed Platforms.Build.0 = Debug|Smartphone 2003 (ARMV4) + {073E2381-4FDE-4C4D-B217-C489EB17C48B}.Debug|Mixed Platforms.Deploy.0 = Debug|Smartphone 2003 (ARMV4) {073E2381-4FDE-4C4D-B217-C489EB17C48B}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4) {073E2381-4FDE-4C4D-B217-C489EB17C48B}.Debug|Win32.ActiveCfg = Debug|Win32 {073E2381-4FDE-4C4D-B217-C489EB17C48B}.Debug|Win32.Build.0 = Debug|Win32 + {073E2381-4FDE-4C4D-B217-C489EB17C48B}.Release|Mixed Platforms.ActiveCfg = Release|Smartphone 2003 (ARMV4) + {073E2381-4FDE-4C4D-B217-C489EB17C48B}.Release|Mixed Platforms.Build.0 = Release|Smartphone 2003 (ARMV4) + {073E2381-4FDE-4C4D-B217-C489EB17C48B}.Release|Mixed Platforms.Deploy.0 = Release|Smartphone 2003 (ARMV4) {073E2381-4FDE-4C4D-B217-C489EB17C48B}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4) {073E2381-4FDE-4C4D-B217-C489EB17C48B}.Release|Win32.ActiveCfg = Release|Win32 {073E2381-4FDE-4C4D-B217-C489EB17C48B}.Release|Win32.Build.0 = Release|Win32 + {B1AEFA90-318F-459C-96EE-B4DFF3318B7B}.Debug|Mixed Platforms.ActiveCfg = Debug|Smartphone 2003 (ARMV4) + {B1AEFA90-318F-459C-96EE-B4DFF3318B7B}.Debug|Mixed Platforms.Build.0 = Debug|Smartphone 2003 (ARMV4) + {B1AEFA90-318F-459C-96EE-B4DFF3318B7B}.Debug|Mixed Platforms.Deploy.0 = Debug|Smartphone 2003 (ARMV4) {B1AEFA90-318F-459C-96EE-B4DFF3318B7B}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4) {B1AEFA90-318F-459C-96EE-B4DFF3318B7B}.Debug|Win32.ActiveCfg = Debug|Win32 {B1AEFA90-318F-459C-96EE-B4DFF3318B7B}.Debug|Win32.Build.0 = Debug|Win32 + {B1AEFA90-318F-459C-96EE-B4DFF3318B7B}.Release|Mixed Platforms.ActiveCfg = Release|Smartphone 2003 (ARMV4) + {B1AEFA90-318F-459C-96EE-B4DFF3318B7B}.Release|Mixed Platforms.Build.0 = Release|Smartphone 2003 (ARMV4) + {B1AEFA90-318F-459C-96EE-B4DFF3318B7B}.Release|Mixed Platforms.Deploy.0 = Release|Smartphone 2003 (ARMV4) {B1AEFA90-318F-459C-96EE-B4DFF3318B7B}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4) {B1AEFA90-318F-459C-96EE-B4DFF3318B7B}.Release|Win32.ActiveCfg = Release|Win32 {B1AEFA90-318F-459C-96EE-B4DFF3318B7B}.Release|Win32.Build.0 = Release|Win32 + {5ED5A1C8-DB34-4089-8E53-EFB225754D02}.Debug|Mixed Platforms.ActiveCfg = Debug|Smartphone 2003 (ARMV4) + {5ED5A1C8-DB34-4089-8E53-EFB225754D02}.Debug|Mixed Platforms.Build.0 = Debug|Smartphone 2003 (ARMV4) + {5ED5A1C8-DB34-4089-8E53-EFB225754D02}.Debug|Mixed Platforms.Deploy.0 = Debug|Smartphone 2003 (ARMV4) {5ED5A1C8-DB34-4089-8E53-EFB225754D02}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4) {5ED5A1C8-DB34-4089-8E53-EFB225754D02}.Debug|Smartphone 2003 (ARMV4).Build.0 = Debug|Smartphone 2003 (ARMV4) {5ED5A1C8-DB34-4089-8E53-EFB225754D02}.Debug|Smartphone 2003 (ARMV4).Deploy.0 = Debug|Smartphone 2003 (ARMV4) {5ED5A1C8-DB34-4089-8E53-EFB225754D02}.Debug|Win32.ActiveCfg = Debug|Win32 {5ED5A1C8-DB34-4089-8E53-EFB225754D02}.Debug|Win32.Build.0 = Debug|Win32 + {5ED5A1C8-DB34-4089-8E53-EFB225754D02}.Release|Mixed Platforms.ActiveCfg = Release|Smartphone 2003 (ARMV4) + {5ED5A1C8-DB34-4089-8E53-EFB225754D02}.Release|Mixed Platforms.Build.0 = Release|Smartphone 2003 (ARMV4) + {5ED5A1C8-DB34-4089-8E53-EFB225754D02}.Release|Mixed Platforms.Deploy.0 = Release|Smartphone 2003 (ARMV4) {5ED5A1C8-DB34-4089-8E53-EFB225754D02}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4) {5ED5A1C8-DB34-4089-8E53-EFB225754D02}.Release|Smartphone 2003 (ARMV4).Build.0 = Release|Smartphone 2003 (ARMV4) {5ED5A1C8-DB34-4089-8E53-EFB225754D02}.Release|Smartphone 2003 (ARMV4).Deploy.0 = Release|Smartphone 2003 (ARMV4) {5ED5A1C8-DB34-4089-8E53-EFB225754D02}.Release|Win32.ActiveCfg = Release|Win32 {5ED5A1C8-DB34-4089-8E53-EFB225754D02}.Release|Win32.Build.0 = Release|Win32 + {5D3983BF-143F-49C3-9284-89778282AEFE}.Debug|Mixed Platforms.ActiveCfg = Debug|Smartphone 2003 (ARMV4) + {5D3983BF-143F-49C3-9284-89778282AEFE}.Debug|Mixed Platforms.Build.0 = Debug|Smartphone 2003 (ARMV4) + {5D3983BF-143F-49C3-9284-89778282AEFE}.Debug|Mixed Platforms.Deploy.0 = Debug|Smartphone 2003 (ARMV4) {5D3983BF-143F-49C3-9284-89778282AEFE}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4) {5D3983BF-143F-49C3-9284-89778282AEFE}.Debug|Smartphone 2003 (ARMV4).Build.0 = Debug|Smartphone 2003 (ARMV4) {5D3983BF-143F-49C3-9284-89778282AEFE}.Debug|Smartphone 2003 (ARMV4).Deploy.0 = Debug|Smartphone 2003 (ARMV4) {5D3983BF-143F-49C3-9284-89778282AEFE}.Debug|Win32.ActiveCfg = Debug|Win32 {5D3983BF-143F-49C3-9284-89778282AEFE}.Debug|Win32.Build.0 = Debug|Win32 + {5D3983BF-143F-49C3-9284-89778282AEFE}.Release|Mixed Platforms.ActiveCfg = Release|Smartphone 2003 (ARMV4) + {5D3983BF-143F-49C3-9284-89778282AEFE}.Release|Mixed Platforms.Build.0 = Release|Smartphone 2003 (ARMV4) + {5D3983BF-143F-49C3-9284-89778282AEFE}.Release|Mixed Platforms.Deploy.0 = Release|Smartphone 2003 (ARMV4) {5D3983BF-143F-49C3-9284-89778282AEFE}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4) {5D3983BF-143F-49C3-9284-89778282AEFE}.Release|Smartphone 2003 (ARMV4).Build.0 = Release|Smartphone 2003 (ARMV4) {5D3983BF-143F-49C3-9284-89778282AEFE}.Release|Smartphone 2003 (ARMV4).Deploy.0 = Release|Smartphone 2003 (ARMV4) {5D3983BF-143F-49C3-9284-89778282AEFE}.Release|Win32.ActiveCfg = Release|Win32 {5D3983BF-143F-49C3-9284-89778282AEFE}.Release|Win32.Build.0 = Release|Win32 + {F728CC74-A7D0-43D2-8A28-05CE9F2EF0D0}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {F728CC74-A7D0-43D2-8A28-05CE9F2EF0D0}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {F728CC74-A7D0-43D2-8A28-05CE9F2EF0D0}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Win32 {F728CC74-A7D0-43D2-8A28-05CE9F2EF0D0}.Debug|Win32.ActiveCfg = Debug|Win32 {F728CC74-A7D0-43D2-8A28-05CE9F2EF0D0}.Debug|Win32.Build.0 = Debug|Win32 + {F728CC74-A7D0-43D2-8A28-05CE9F2EF0D0}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {F728CC74-A7D0-43D2-8A28-05CE9F2EF0D0}.Release|Mixed Platforms.Build.0 = Release|Win32 {F728CC74-A7D0-43D2-8A28-05CE9F2EF0D0}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Win32 {F728CC74-A7D0-43D2-8A28-05CE9F2EF0D0}.Release|Win32.ActiveCfg = Release|Win32 {F728CC74-A7D0-43D2-8A28-05CE9F2EF0D0}.Release|Win32.Build.0 = Release|Win32 + {72486240-A124-496E-A67A-E76FEC7E99BE}.Debug|Mixed Platforms.ActiveCfg = Debug|Smartphone 2003 (ARMV4) + {72486240-A124-496E-A67A-E76FEC7E99BE}.Debug|Mixed Platforms.Build.0 = Debug|Smartphone 2003 (ARMV4) + {72486240-A124-496E-A67A-E76FEC7E99BE}.Debug|Mixed Platforms.Deploy.0 = Debug|Smartphone 2003 (ARMV4) + {72486240-A124-496E-A67A-E76FEC7E99BE}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4) + {72486240-A124-496E-A67A-E76FEC7E99BE}.Debug|Smartphone 2003 (ARMV4).Build.0 = Debug|Smartphone 2003 (ARMV4) + {72486240-A124-496E-A67A-E76FEC7E99BE}.Debug|Win32.ActiveCfg = Debug|Win32 + {72486240-A124-496E-A67A-E76FEC7E99BE}.Debug|Win32.Build.0 = Debug|Win32 + {72486240-A124-496E-A67A-E76FEC7E99BE}.Release|Mixed Platforms.ActiveCfg = Release|Smartphone 2003 (ARMV4) + {72486240-A124-496E-A67A-E76FEC7E99BE}.Release|Mixed Platforms.Build.0 = Release|Smartphone 2003 (ARMV4) + {72486240-A124-496E-A67A-E76FEC7E99BE}.Release|Mixed Platforms.Deploy.0 = Release|Smartphone 2003 (ARMV4) + {72486240-A124-496E-A67A-E76FEC7E99BE}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4) + {72486240-A124-496E-A67A-E76FEC7E99BE}.Release|Smartphone 2003 (ARMV4).Build.0 = Release|Smartphone 2003 (ARMV4) + {72486240-A124-496E-A67A-E76FEC7E99BE}.Release|Win32.ActiveCfg = Release|Win32 + {72486240-A124-496E-A67A-E76FEC7E99BE}.Release|Win32.Build.0 = Release|Win32 + {41B1DAF0-D7ED-4934-B915-05DBB0EE6B0E}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {41B1DAF0-D7ED-4934-B915-05DBB0EE6B0E}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {41B1DAF0-D7ED-4934-B915-05DBB0EE6B0E}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4) + {41B1DAF0-D7ED-4934-B915-05DBB0EE6B0E}.Debug|Win32.ActiveCfg = Debug|Win32 + {41B1DAF0-D7ED-4934-B915-05DBB0EE6B0E}.Debug|Win32.Build.0 = Debug|Win32 + {41B1DAF0-D7ED-4934-B915-05DBB0EE6B0E}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {41B1DAF0-D7ED-4934-B915-05DBB0EE6B0E}.Release|Mixed Platforms.Build.0 = Release|Win32 + {41B1DAF0-D7ED-4934-B915-05DBB0EE6B0E}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Win32 + {41B1DAF0-D7ED-4934-B915-05DBB0EE6B0E}.Release|Win32.ActiveCfg = Release|Win32 + {41B1DAF0-D7ED-4934-B915-05DBB0EE6B0E}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/build/msvc8/hyb_in.vcproj b/build/msvc8/hyb_in.vcproj new file mode 100644 index 0000000..69d04d6 --- /dev/null +++ b/build/msvc8/hyb_in.vcproj @@ -0,0 +1,358 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/build/msvc8/libgpac.vcproj b/build/msvc8/libgpac.vcproj index c8097f6..e0c6669 100644 --- a/build/msvc8/libgpac.vcproj +++ b/build/msvc8/libgpac.vcproj @@ -28,7 +28,7 @@ > + + @@ -3717,6 +3722,18 @@ RelativePath="..\..\include\gpac\internal\avilib.h" > + + + + + + @@ -6529,6 +6546,10 @@ RelativePath="..\..\include\gpac\utf.h" > + + diff --git a/build/msvc8/libgpac_dll.vcproj b/build/msvc8/libgpac_dll.vcproj index cbe341c..850a717 100644 --- a/build/msvc8/libgpac_dll.vcproj +++ b/build/msvc8/libgpac_dll.vcproj @@ -78,11 +78,11 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -625,11 +470,11 @@ Filter="h;hpp;hxx;hm;inl" > - - diff --git a/build/msvc8/rvc_dec.vcproj b/build/msvc8/rvc_dec.vcproj new file mode 100644 index 0000000..06e89cb --- /dev/null +++ b/build/msvc8/rvc_dec.vcproj @@ -0,0 +1,453 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/build/msvc9/GPAX.vcproj b/build/msvc9/GPAX.vcproj index fbe50a1..f630067 100644 --- a/build/msvc9/GPAX.vcproj +++ b/build/msvc9/GPAX.vcproj @@ -118,9 +118,9 @@ /> - + + + - - + + + + + + + + + + + + + + @@ -4406,6 +4447,18 @@ RelativePath="..\..\include\gpac\internal\avilib.h" > + + + + + + diff --git a/build/msvc9/libgpac_dll.vcproj b/build/msvc9/libgpac_dll.vcproj index b1843b9..9a7c960 100644 --- a/build/msvc9/libgpac_dll.vcproj +++ b/build/msvc9/libgpac_dll.vcproj @@ -79,7 +79,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -634,23 +478,18 @@ Filter="h;hpp;hxx;hm;inl" > - - - + diff --git a/build/msvc9/platinum.vcproj b/build/msvc9/platinum.vcproj index cea8c12..982bc6d 100644 --- a/build/msvc9/platinum.vcproj +++ b/build/msvc9/platinum.vcproj @@ -117,7 +117,7 @@ /> - + + + - - CFBundleShortVersionString - 0.4.5 + 9.9.9 CFBundleSignature gpac CFBundleURLTypes @@ -550,7 +550,7 @@ CFBundleVersion - 2200 + 9999 LSMinimumSystemVersion 10.5.0 NSMainNibFile diff --git a/build/xcode/README_IOS.txt b/build/xcode/README_IOS.txt index e4efeb1..7b74101 100644 --- a/build/xcode/README_IOS.txt +++ b/build/xcode/README_IOS.txt @@ -1,16 +1,36 @@ How to build GPAC for iOS +========================= -Tested revision: 2264 -Tested XCode (SDK): 3.2.4 (4.1) +Tested revision: 3239 +Tested XCode (SDK): 3.2.6 (4.3) -You have to have GPAC extra_libs in your extra_lib/lib/gcc directory -Be careful when building SDL in Release, I never made it work +To compile GPAC in command-line mode, please execute the following steps: -1) Open the XCode project. -2) Build libgpac_dynamic via XCode (should end on link error) -3) Execute "script_libgpac.sh Debug" (or Release) -4) Build libgpac_dynamic via XCode (should succeed) -5) Build all modules on one click via XCode (should end on link error) -6) Execute "script_libgpac.sh Debug" (or Release) -7) Build all modules via XCode (should succeed) -8) Build osmo4ios via XCode +1) Check out the GPAC SVN repository: + "svn co https://gpac.svn.sourceforge.net/svnroot/gpac/trunk/" + +2) Unzip the "gpac_extra_libs/gpac_extra_libs.zip" file in its current directory (ie not a subfolder). + You should have the following directory tree: + trunk/ + gpac/ + ... + gpac_extra_libs/ + a52dec/ + AMR_NB/ + ... + +3) Compile gpac dependencies (zlib, faad, libpng etc): + execute "gpac_extra_libs/build/xcode_ios/generate_extra_libs.sh" script. + +4) Check all gpac dependencies have been successfully compiled: + $> ls gpac_extra_libs/lib/iOS + libSDL.a libfaad.a libfreetype.a libjpeg.a libjs.a libmad.a libpng.a + +5) Copy the extra_libs to the right place: + if you checked out as mentionned in 1), execute the "gpac_extra_libs/CopyLibs2Public4iOS.sh" script. + Otherwise copy manually the libs to the gpac/extra_lib/lib/ios directory. + +6) Compile GPAC: + execute the "gpac/build/xcode/generate_ios.sh" script. + The script checks that all files have been compiled, print an error message if needed. + Otherwise it generats a .tar.gz archive into the gpac/bin/iOS directory. diff --git a/build/xcode/build/Release-iphonesimulator/libgpac_dynamic.dylib b/build/xcode/build/Release-iphonesimulator/libgpac_dynamic.dylib new file mode 100644 index 0000000000000000000000000000000000000000..ea0eca76bd7de92a6a9d0c46086a87620320a23f GIT binary patch literal 4168 zcmeHKyGjF55S_&M03!ymP!tJPR!Itl)M6kZB7za@hHQ2<3ucvMg9##}5x>C7pYRv* z1%h8;W3LwCnf2~wSroLNfph0^=g!@GwmMHAub;C-sVO3w0p@^en&_5th=^8!7l64@ zIcZ2GVc%_&qRBCnrU8r!jM;YvzDeMc^Bxx`dlE?=o(*;~Gzz>~nET$9>)Gsjrx&RG zHm_>>WnLyeAQ8(urI&fXc2KYE)xx)i?@Rb_uDml9o3((r1gs?L=dN{j*=(^r^qL*F zRj`Mspl8kWj_alR-Syk?vvXg5*jXBH5{+ceUro4@JLR`YoQL0np9c;BG5OB$TjO!C znONlfPnJco49Hz_Pbz&QD;4{_ZV^us91VNE(<$smk3@%>GN2471ImChpbRJj%78MU z3@8K2!2cK!-L`Iy#Jy-Sv2BBQqo*YoZJ&ik%SGxB1!Hn.*<\/string>/'"$version"'<\/string>/' ../../applications/osmo4_ios/osmo4ios-Info.plist > ../../applications/osmo4_ios/osmo4ios-Info.plist.new + sed 's/.*<\/string>/'"$rev"'<\/string>/' ../../applications/osmo4_ios/osmo4ios-Info.plist.new > ../../applications/osmo4_ios/osmo4ios-Info.plist + rm ../../applications/osmo4_ios/osmo4ios-Info.plist.new +fi + +echo "*** Clean previous build files ***" +xcodebuild -alltargets -sdk iphoneos -configuration Debug -project gpac4ios.xcodeproj clean +xcodebuild -alltargets -sdk iphoneos -configuration Release -project gpac4ios.xcodeproj clean echo "*** Compile libgpac for iOS (arm) ***" xcodebuild -target libgpac_dynamic -sdk iphoneos -configuration Release -project gpac4ios.xcodeproj ./script_libgpac.sh Release #xcodebuild -target libgpac_dynamic -sdk iphoneos -configuration Release -project gpac4ios.xcodeproj -#echo "*** Compile modules and osmo4ios for Simulator (i386) ***" -#xcodebuild -alltargets -parallelizeTargets -sdk iphonesimulator -configuration Release -project gpac4ios.xcodeproj - echo "*** Compile modules for iOS (arm) ***" xcodebuild -alltargets -parallelizeTargets -sdk iphoneos -configuration Release -project gpac4ios.xcodeproj ./script_modules.sh Release @@ -32,21 +43,32 @@ then exit 1 fi -echo "*** Generate an archive and clean ***" +#echo "*** Build archive name ***" cd ../.. -version=`grep '#define GPAC_VERSION ' include/gpac/tools.h | cut -d '"' -f 2` -rev=`LANG=en_US svn info | grep Revision | tr -d 'Revision: '` if [ "$rev" != "" ] then full_version="$version-r$rev" else - #if no revision can be extracted from SVN, use date + #if no revision can be extracted from SVN, use date full_version="$version-$(date +%Y%m%d)" fi + +echo "*** Generate an archive and clean ***" cd bin/iOS -rm -rf osmo4ios.app/.svn +mkdir osmo4ios.app/gui +mkdir osmo4ios.app/gui/icons +mkdir osmo4ios.app/gui/extensions +cp ../../applications/osmo4_ios/Resources/icon.png osmo4ios.app/ +cp ../../gui/gui*.bt osmo4ios.app/gui/ +cp ../../gui/gui*.js osmo4ios.app/gui/ +cp ../../gui/gwlib.js osmo4ios.app/gui/ +cp ../../gui/mpegu-core.js osmo4ios.app/gui/ +cp -r ../../gui/icons osmo4ios.app/gui/ +cp -r ../../gui/extensions osmo4ios.app/gui/ +find osmo4ios.app | fgrep .svn | fgrep -v svn/ | xargs rm -rf tar -czf "osmo4ios-$full_version.tar.gz" osmo4ios.app/ rm -rf osmo4ios.app +svn up -r $rev cd ../../build/xcode/ echo "*** Extra Libs generation for iOS completed (full_version)! ***" diff --git a/build/xcode/gpac4ios.xcodeproj/project.pbxproj b/build/xcode/gpac4ios.xcodeproj/project.pbxproj index 7b67b24..296cd00 100755 --- a/build/xcode/gpac4ios.xcodeproj/project.pbxproj +++ b/build/xcode/gpac4ios.xcodeproj/project.pbxproj @@ -429,6 +429,7 @@ 71CCF3FD12770A8C00339E12 /* user.h in Headers */ = {isa = PBXBuildFile; fileRef = 71CCF3AE12770A8C00339E12 /* user.h */; }; 71CCF3FE12770A8C00339E12 /* utf.h in Headers */ = {isa = PBXBuildFile; fileRef = 71CCF3AF12770A8C00339E12 /* utf.h */; }; 71CCF3FF12770A8C00339E12 /* xml.h in Headers */ = {isa = PBXBuildFile; fileRef = 71CCF3B012770A8C00339E12 /* xml.h */; }; + 71EC88E11396273B004DCB6A /* osmo.icns in Resources */ = {isa = PBXBuildFile; fileRef = 71EC88E01396273B004DCB6A /* osmo.icns */; }; 71F2A45E12830B5300C384DE /* libjs.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 71F2A45412830B1400C384DE /* libjs.a */; }; 71F2A46E12830BE200C384DE /* libjpeg.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 71F2A45312830B1400C384DE /* libjpeg.a */; }; 71F2A46F12830BE800C384DE /* libpng.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 71F2A45612830B1400C384DE /* libpng.a */; }; @@ -489,9 +490,19 @@ 970A28621344632F0007362C /* libgpac_dynamic.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 970A28521344632F0007362C /* libgpac_dynamic.dylib */; }; 970A28631344632F0007362C /* libgpac_dynamic.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 970A28521344632F0007362C /* libgpac_dynamic.dylib */; }; 970A28641344632F0007362C /* libgpac_dynamic.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 970A28521344632F0007362C /* libgpac_dynamic.dylib */; }; + 97FBAAE913BB61D700800B2F /* dvb.c in Sources */ = {isa = PBXBuildFile; fileRef = 97FBAAE813BB61D700800B2F /* dvb.c */; }; + 97FF0660138CE4C400D6C707 /* os_config_init.c in Sources */ = {isa = PBXBuildFile; fileRef = 97FF065F138CE4C400D6C707 /* os_config_init.c */; }; + 97FF0662138CE4E400D6C707 /* carousel.c in Sources */ = {isa = PBXBuildFile; fileRef = 97FF0661138CE4E400D6C707 /* carousel.c */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ + 713FD6E31393868200E8102E /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = 718478371278647200917298; + remoteInfo = dummy_in; + }; 718477D4127814D600917298 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; @@ -928,6 +939,7 @@ 71CCF3AE12770A8C00339E12 /* user.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = user.h; sourceTree = ""; }; 71CCF3AF12770A8C00339E12 /* utf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = utf.h; sourceTree = ""; }; 71CCF3B012770A8C00339E12 /* xml.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = xml.h; sourceTree = ""; }; + 71EC88E01396273B004DCB6A /* osmo.icns */ = {isa = PBXFileReference; explicitFileType = image.icns; name = osmo.icns; path = ../../applications/osmo4_ios/Resources/osmo.icns; sourceTree = SOURCE_ROOT; }; 71F2A45012830B1400C384DE /* libfaad.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libfaad.a; path = ../../extra_lib/lib/iOS/libfaad.a; sourceTree = SOURCE_ROOT; }; 71F2A45112830B1400C384DE /* libfreetype.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libfreetype.a; path = ../../extra_lib/lib/iOS/libfreetype.a; sourceTree = SOURCE_ROOT; }; 71F2A45312830B1400C384DE /* libjpeg.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libjpeg.a; path = ../../extra_lib/lib/iOS/libjpeg.a; sourceTree = SOURCE_ROOT; }; @@ -947,6 +959,9 @@ 970A270D1343540C0007362C /* libgcc_s.1.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libgcc_s.1.dylib; path = usr/lib/libgcc_s.1.dylib; sourceTree = SDKROOT; }; 970A283F134462AE0007362C /* libgpac_dynamic.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libgpac_dynamic.dylib; path = "build/Release-iphonesimulator/libgpac_dynamic.dylib"; sourceTree = ""; }; 970A28521344632F0007362C /* libgpac_dynamic.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libgpac_dynamic.dylib; path = ../../bin/iOS/osmo4ios.app/libgpac_dynamic.dylib; sourceTree = SOURCE_ROOT; }; + 97FBAAE813BB61D700800B2F /* dvb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = dvb.c; sourceTree = ""; }; + 97FF065F138CE4C400D6C707 /* os_config_init.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = os_config_init.c; sourceTree = ""; }; + 97FF0661138CE4E400D6C707 /* carousel.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = carousel.c; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -1443,6 +1458,7 @@ 71A19B1412796AC700ACFF58 /* osmo4iOS */ = { isa = PBXGroup; children = ( + 71EC88E01396273B004DCB6A /* osmo.icns */, 71A19B43127971C700ACFF58 /* libgpac_symbols.h */, 71A19B411279713300ACFF58 /* extract.c */, 71A19B2012796B6F00ACFF58 /* main.c */, @@ -1693,6 +1709,8 @@ 71CCF1CD1277045100339E12 /* media_tools */ = { isa = PBXGroup; children = ( + 97FBAAE813BB61D700800B2F /* dvb.c */, + 97FF0661138CE4E400D6C707 /* carousel.c */, 970A26C713434D2C0007362C /* m3u8.c */, 970A26C813434D2C0007362C /* mpd.c */, 71CCF1CE1277045100339E12 /* av_parsers.c */, @@ -1822,6 +1840,7 @@ 71CCF2291277045100339E12 /* utils */ = { isa = PBXGroup; children = ( + 97FF065F138CE4C400D6C707 /* os_config_init.c */, 970A26D513434DAC0007362C /* ringbuffer.c */, 970A26D613434DAC0007362C /* unicode.c */, 7147425F12B918C900DB5A59 /* cache.c */, @@ -2271,6 +2290,7 @@ buildRules = ( ); dependencies = ( + 713FD6E41393868200E8102E /* PBXTargetDependency */, ); name = soft_raster; productName = soft_raster; @@ -2634,6 +2654,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 71EC88E11396273B004DCB6A /* osmo.icns in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3090,12 +3111,20 @@ 970A26CA13434D2C0007362C /* mpd.c in Sources */, 970A26D713434DAC0007362C /* ringbuffer.c in Sources */, 970A26D813434DAC0007362C /* unicode.c in Sources */, + 97FF0660138CE4C400D6C707 /* os_config_init.c in Sources */, + 97FF0662138CE4E400D6C707 /* carousel.c in Sources */, + 97FBAAE913BB61D700800B2F /* dvb.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ + 713FD6E41393868200E8102E /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 718478371278647200917298 /* dummy_in */; + targetProxy = 713FD6E31393868200E8102E /* PBXContainerItemProxy */; + }; 718477D5127814D600917298 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 71CCF1301277037A00339E12 /* libgpac_static */; @@ -3381,6 +3410,7 @@ GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( GPAC_CONFIG_DARWIN, + GPAC_IPHONE, XP_UNIX, GPAC_HAS_FAAD, ); @@ -3415,6 +3445,7 @@ GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_PREPROCESSOR_DEFINITIONS = ( GPAC_CONFIG_DARWIN, + GPAC_IPHONE, XP_UNIX, GPAC_HAS_FAAD, ); @@ -3505,6 +3536,7 @@ GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( GPAC_CONFIG_DARWIN, + GPAC_IPHONE, XP_UNIX, GPAC_HAS_MAD, ); @@ -3539,6 +3571,7 @@ GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_PREPROCESSOR_DEFINITIONS = ( GPAC_CONFIG_DARWIN, + GPAC_IPHONE, XP_UNIX, GPAC_HAS_MAD, ); @@ -3573,10 +3606,6 @@ EXECUTABLE_PREFIX = gm_; GCC_DYNAMIC_NO_PIC = NO; GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - GPAC_CONFIG_DARWIN, - XP_UNIX, - ); HEADER_SEARCH_PATHS = ../../include; LIBRARY_SEARCH_PATHS = ( "$(inherited)", @@ -3603,10 +3632,6 @@ EXECUTABLE_EXTENSION = dylib; EXECUTABLE_PREFIX = gm_; GCC_ENABLE_FIX_AND_CONTINUE = NO; - GCC_PREPROCESSOR_DEFINITIONS = ( - GPAC_CONFIG_DARWIN, - XP_UNIX, - ); HEADER_SEARCH_PATHS = ../../include; LIBRARY_SEARCH_PATHS = ( "$(inherited)", @@ -3690,9 +3715,11 @@ GCC_DYNAMIC_NO_PIC = NO; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( + GPAC_CONFIG_DARWIN, + GPAC_IPHONE, + XP_UNIX, GPAC_HAS_SPIDERMONKEY, MOZILLA_1_8_BRANCH, - XP_UNIX, ); HEADER_SEARCH_PATHS = ( ../../include, @@ -3724,9 +3751,11 @@ EXECUTABLE_PREFIX = gm_; GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_PREPROCESSOR_DEFINITIONS = ( + GPAC_CONFIG_DARWIN, + GPAC_IPHONE, + XP_UNIX, GPAC_HAS_SPIDERMONKEY, MOZILLA_1_8_BRANCH, - XP_UNIX, ); HEADER_SEARCH_PATHS = ( ../../include, @@ -4213,7 +4242,6 @@ GCC_OPTIMIZATION_LEVEL = 0; GCC_PRECOMPILE_PREFIX_HEADER = NO; GCC_PREFIX_HEADER = ""; - GCC_PREPROCESSOR_DEFINITIONS = GPAC_IPHONE; HEADER_SEARCH_PATHS = ( ../../include, ../../extra_lib/include/SDL, @@ -4244,7 +4272,6 @@ GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_PRECOMPILE_PREFIX_HEADER = NO; GCC_PREFIX_HEADER = ""; - GCC_PREPROCESSOR_DEFINITIONS = GPAC_IPHONE; HEADER_SEARCH_PATHS = ( ../../include, ../../extra_lib/include/SDL, @@ -4273,11 +4300,6 @@ EXECUTABLE_PREFIX = ""; GCC_DYNAMIC_NO_PIC = NO; GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - XP_UNIX, - GPAC_CONFIG_DARWIN, - GPAC_IPHONE, - ); GCC_THUMB_SUPPORT = NO; HEADER_SEARCH_PATHS = ( ../../include, @@ -4308,11 +4330,6 @@ COPY_PHASE_STRIP = YES; EXECUTABLE_PREFIX = ""; GCC_ENABLE_FIX_AND_CONTINUE = NO; - GCC_PREPROCESSOR_DEFINITIONS = ( - XP_UNIX, - GPAC_CONFIG_DARWIN, - GPAC_IPHONE, - ); GCC_THUMB_SUPPORT = NO; HEADER_SEARCH_PATHS = ( ../../include, @@ -4351,6 +4368,7 @@ GCC_OBJC_CALL_CXX_CDTORS = NO; GCC_PREPROCESSOR_DEFINITIONS = ( GPAC_CONFIG_DARWIN, + GPAC_IPHONE, XP_UNIX, ); GCC_THUMB_SUPPORT = NO; @@ -4377,6 +4395,7 @@ GCC_OBJC_CALL_CXX_CDTORS = NO; GCC_PREPROCESSOR_DEFINITIONS = ( GPAC_CONFIG_DARWIN, + GPAC_IPHONE, XP_UNIX, ); GCC_THUMB_SUPPORT = NO; diff --git a/build/xcode/libgpac_symbols.h b/build/xcode/libgpac_symbols.h index 1b6e331..92e6e7d 100644 --- a/build/xcode/libgpac_symbols.h +++ b/build/xcode/libgpac_symbols.h @@ -58,7 +58,7 @@ #define gf_cfg_del _gf_cfg_del #define gf_term_get_channel_net_info _gf_term_get_channel_net_info #define gf_term_process_shortcut _gf_term_process_shortcut -#define gf_cfg_new _gf_cfg_new +#define gf_cfg_init _gf_cfg_init #define gf_term_get_download_info _gf_term_get_download_info #define gf_sys_clock _gf_sys_clock #define gf_term_get_object _gf_term_get_object @@ -211,8 +211,8 @@ extern void (*gf_cfg_del)(GF_Config *iniFile); extern Bool (*gf_term_get_channel_net_info)(GF_Terminal *term, GF_ObjectManager *odm, u32 *d_enum, u32 *chid, NetStatCommand *netcom, GF_Err *ret_code); #undef gf_term_process_shortcut extern void (*gf_term_process_shortcut)(GF_Terminal *term, GF_Event *ev); -#undef gf_cfg_new -extern GF_Config *(*gf_cfg_new)(const char *filePath, const char *fileName); +#undef gf_cfg_init +extern GF_Config *(*gf_cfg_init)(const char *fileName, Bool *is_new); #undef gf_term_get_download_info extern Bool (*gf_term_get_download_info)(GF_Terminal *term, GF_ObjectManager *odm, u32 *d_enum, const char **server, const char **path, u32 *bytes_done, u32 *total_bytes, u32 *bytes_per_sec); #undef gf_sys_clock diff --git a/configure b/configure index cf0b5cd..dbe7d88 100755 --- a/configure +++ b/configure @@ -43,6 +43,7 @@ ar="ar" ranlib="ranlib" make="make" strip="strip" +readelf="readelf" install="${INSTALL:=install}" instflags="${INSTFLAGS:=-p}" cpu=`uname -m` @@ -57,6 +58,7 @@ libdir="lib" #GPAC module config js_flags="XP_UNIX" js_lib="-ljs" +lm_lib="" has_mingw_directx="no" has_js="no" has_ft="no" @@ -77,6 +79,7 @@ has_pulseaudio="no" has_oss_audio="no" has_alsa="no" has_jack="no" +has_directfb="no" has_x11="no" has_x11_shm="no" has_x11_xv="no" @@ -161,193 +164,192 @@ is_64="no" #Configure Usage if test x"$1" = x"-h" -o x"$1" = x"--help" ; then -cat << EOF + cat << EOF Usage: configure [options] Options: [defaults in brackets after descriptions] +GPAC configuration options: + --help print this message + --prefix=PREFIX install in PREFIX [$prefix] + --mandir=DIR man documentation in DIR [PREFIX/man] + + --source-path=PATH path of source code [$source_path] + --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix] + --cc =CC use C compiler CC [$cc] + --cpp=CPP use C++ compiler CPP [$cpp] + --make=MAKE use specified make [$make] + --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS] + --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS] + --extra-libs=ELIBS add ELIBS [$ELIBS] + --cpu=CPU force cpu to CPU [$cpu] + --sdl-cfg=SDL_PATH specify path to sdl-config for local install [$sdl_path] + --enable-sdl-static use static SDL linking [default=no] + --X11-path=X11_PATH specify path for X11 includes and libraries [$X11_PATH] + --dxsdk-path=DX_PATH specify directX SDK for MinGW [$dxsdk_path] + --xulsdk-path=XUL_PATH specify Mozilla XUL (Gecko) SDK include path [$xulsdk_path] + --mozdir=MOZ_PATH specify mozilla main directory path for system install + + --enable-debug produce debug version + --enable-gprof enable profiling + --enable-pic enable Position Independant Code for shared objects + --strip enable strip + --std-allocator uses standard lib memory allocator + --track-memory enable tracking of all memory allocated by gpac + --disable-opt disable GCC optimizations + --disable-ipv6 disable IPV6 support + --disable-wx disable wxWidgets support + --disable-oss-audio disable OSS audio + --disable-x11-shm disable X11 shared memory support + --disable-x11-xv disable X11 Xvideo support + --enable-fixed-point enable fixed-point math + --force-fixed-point force fixed-point math without changing gpac math.h header + --enable-tinygl enable TinyGL support + --enable-joystick enable joystick support + --disable-ssl disable OpenSSL support + --enable-amr-nb-fixed enable AMR NB fixed-point decoder + --enable-amr-nb enable AMR NB library + --enable-amr-wb enable AMR WB library + --enable-amr enable both AMR NB and WB libraries + --static-mp4box configure for static linking of MP4Box. + --enable-depth enables depth handling in the compositor + +Configuration options for libgpac - all options can be enabled with --enable-optname + --disable-all disables all features in libgpac + --disable-3d disable 3D rendering + --disable-svg disable SVG + --disable-vrml disable MPEG-4/VRML/X3D + --disable-x3d disable X3D only + --disable-odf disable full support of MPEG-4 OD Framework + --disable-bifs disable BIFS coder + --disable-laser disable LASeR coder + --disable-beng disable scene encoder engine + --disable-qtvr disable import of Cubic QTVR files + --disable-avi disable AVI + --disable-ogg disable OGG + --disable-m2ps disable MPEG2 PS + --disable-m2ts disable MPEG2 TS + --disable-m2ts-mux disable MPEG2 TS Multiplexer + --disable-parsers disable AV parsers + --disable-import disable media importers + --disable-export disable media exporters + --disable-swf disable SWF import + --disable-scene-stats disable scene graph statistics + --disable-scene-dump disable scene graph dump + --disable-od-dump disable OD dump + --disable-mcrypt disable mcrypt + --disable-scene-encode disable BIFS & LASeR to ISO File Format encoding + --disable-loader-isoff disable scene loading from ISO File Format + --disable-loader-bt disable scene loading from ISO File Format + --disable-loader-xmt disable scene loading from ISO File Format + --disable-isoff disable ISO File Format + --disable-isoff-write disable ISO File Format edit/write + --disable-isoff-hint disable ISO File Format hinting + --disable-isoff-frag disable fragments in ISO File Format + --disable-streaming disable RTP/RTSP/SDP + +Extra libraries configuration. You can turn a libray off or force using the local version in gpac/extra_lib/ + --use-js=OPT force SpiderMonkey ECMAScript OPT=[no,local] + --use-ft=OPT force FreeType OPT=[no,local] + --use-jpeg=OPT force JPEG OPT=[no,local] + --use-png=OPT force PNG OPT=[no,local] + --use-faad=OPT force FAAD OPT=[no,local] + --use-mad=OPT force MAD OPT=[no,local] + --use-xvid=OPT force XVID OPT=[no,local] + --use-ffmpeg=OPT force FFMPEG OPT=[no,local] + --use-ogg=OPT force OGG OPT=[no,system,local] + --use-vorbis=OPT force vorbis OPT=[no,system,local] + --use-theora=OPT force theora OPT=[no,system,local] + --use-openjpeg=OPT force openjpeg OPT=[no,system,local] + +NOTE: The object files are build at the place where configure is launched EOF -echo "GPAC configuration options:" -echo " --help print this message" -echo " --prefix=PREFIX install in PREFIX [$prefix]" -echo " --mandir=DIR man documentation in DIR [PREFIX/man]" -echo "" -echo " --source-path=PATH path of source code [$source_path]" -echo " --cross_prefix=PREFIX use PREFIX for compile tools [$cross_prefix]" -echo " --cc =CC use C compiler CC [$cc]" -echo " --cpp=CPP use C++ compiler CPP [$cpp]" -echo " --make=MAKE use specified make [$make]" -echo " --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]" -echo " --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]" -echo " --extra-libs=ELIBS add ELIBS [$ELIBS]" -echo " --cpu=CPU force cpu to CPU [$cpu]" -echo " --sdl-cfg=SDL_PATH specify path to sdl-config for local install [$sdl_path]" -echo " --enable-sdl-static use static SDL linking [default=no]" -echo " --X11-path=X11_PATH specify path for X11 includes and libraries [$X11_PATH]" -echo " --dxsdk-path=DX_PATH specify directX SDK for MinGW [$dxsdk_path]" -echo " --xulsdk-path=XUL_PATH specify Mozilla XUL (Gecko) SDK include path [$xulsdk_path]" -echo " --mozdir=MOZ_PATH specify mozilla main directory path for system install" -echo "" -echo " --enable-debug produce debug version" -echo " --enable-gprof enable profiling" -echo " --enable-pic enable Position Independant Code for shared objects" -echo " --strip enable strip" -echo " --std-allocator uses standard lib memory allocator" -echo " --track-memory enable tracking of all memory allocated by gpac" -echo " --disable-opt disable GCC optimizations" -echo " --disable-ipv6 disable IPV6 support" -echo " --disable-wx disable wxWidgets support" -echo " --disable-oss-audio disable OSS audio" -echo " --disable-x11-shm disable X11 shared memory support" -echo " --disable-x11-xv disable X11 Xvideo support" -echo " --enable-fixed-point enable fixed-point math" -echo " --force-fixed-point force fixed-point math without changing gpac math.h header" -echo " --enable-tinygl enable TinyGL support" -echo " --enable-joystick enable joystick support" -echo " --disable-ssl disable OpenSSL support" -echo " --enable-amr-nb-fixed enable AMR NB fixed-point decoder" -echo " --enable-amr-nb enable AMR NB library" -echo " --enable-amr-wb enable AMR WB library" -echo " --enable-amr enable both AMR NB and WB libraries" -echo " --static-mp4box configure for static linking of MP4Box." -echo " --enable-depth enables depth handling in the compositor" - -echo "" -echo "Configuration options for libgpac - all options can be enabled with --enable-optname" -echo " --disable-all disables all features in libgpac" -echo " --disable-3d disable 3D rendering" -echo " --disable-svg disable SVG" -echo " --disable-vrml disable MPEG-4/VRML/X3D" -echo " --disable-x3d disable X3D only" -echo " --disable-odf disable full support of MPEG-4 OD Framework" -echo " --disable-bifs disable BIFS coder" -echo " --disable-laser disable LASeR coder" -echo " --disable-beng disable scene encoder engine" -echo " --disable-qtvr disable import of Cubic QTVR files" -echo " --disable-avi disable AVI" -echo " --disable-ogg disable OGG" -echo " --disable-m2ps disable MPEG2 PS" -echo " --disable-m2ts disable MPEG2 TS" -echo " --disable-m2ts-mux disable MPEG2 TS Multiplexer" -echo " --disable-parsers disable AV parsers" -echo " --disable-import disable media importers" -echo " --disable-export disable media exporters" -echo " --disable-swf disable SWF import" -echo " --disable-scene-stats disable scene graph statistics" -echo " --disable-scene-dump disable scene graph dump" -echo " --disable-od-dump disable OD dump" -echo " --disable-mcrypt disable mcrypt" -echo " --disable-scene-encode disable BIFS & LASeR to ISO File Format encoding" -echo " --disable-loader-isoff disable scene loading from ISO File Format" -echo " --disable-loader-bt disable scene loading from ISO File Format" -echo " --disable-loader-xmt disable scene loading from ISO File Format" -echo " --disable-isoff disable ISO File Format" -echo " --disable-isoff-write disable ISO File Format edit/write" -echo " --disable-isoff-hint disable ISO File Format hinting" -echo " --disable-isoff-frag disable fragments in ISO File Format" -echo " --disable-streaming disable RTP/RTSP/SDP" -echo "" -echo "Extra libraries configuration. You can turn a libray off or force using the local version in gpac/extra_lib/" -echo " --use-js=OPT force SpiderMonkey ECMAScript OPT=[no,local]" -echo " --use-ft=OPT force FreeType OPT=[no,local]" -echo " --use-jpeg=OPT force JPEG OPT=[no,local]" -echo " --use-png=OPT force PNG OPT=[no,local]" -echo " --use-faad=OPT force FAAD OPT=[no,local]" -echo " --use-mad=OPT force MAD OPT=[no,local]" -echo " --use-xvid=OPT force XVID OPT=[no,local]" -echo " --use-ffmpeg=OPT force FFMPEG OPT=[no,local]" -echo " --use-ogg=OPT force OGG OPT=[no,system,local]" -echo " --use-vorbis=OPT force vorbis OPT=[no,system,local]" -echo " --use-theora=OPT force theora OPT=[no,system,local]" -echo " --use-openjpeg=OPT force openjpeg OPT=[no,system,local]" -echo "" -echo "NOTE: The object files are build at the place where configure is launched" exit 1 fi for opt do - case "$opt" in - --prefix=*) prefix=`echo $opt | cut -d '=' -f 2` - ;; - --mandir=*) mandir=`echo $opt | cut -d '=' -f 2` - ;; - --source-path=*) source_path=`echo $opt | cut -d '=' -f 2` - ;; - --cross-prefix=*) cross_prefix=`echo $opt | cut -d '=' -f 2` - ;; - --cc=*) cc=`echo $opt | cut -d '=' -f 2` - ;; - --make=*) make=`echo $opt | cut -d '=' -f 2` - ;; - --extra-cflags=*) CFLAGS="$CFLAGS ${opt#--extra-cflags=}" - ;; - --extra-ldflags=*) LDFLAGS="$LDFLAGS ${opt#--extra-ldflags=}" - ;; - --extra-libs=*) extralibs=${opt#--extra-libs=} - ;; - --cpu=*) cpu=`echo $opt | cut -d '=' -f 2` - ;; - esac + case "$opt" in + --prefix=*) prefix=`echo $opt | cut -d '=' -f 2` + ;; + --mandir=*) mandir=`echo $opt | cut -d '=' -f 2` + ;; + --source-path=*) source_path=`echo $opt | cut -d '=' -f 2` + ;; + --cross-prefix=*) cross_prefix=`echo $opt | cut -d '=' -f 2` && echo "cross-prefix detected: $cross_prefix" + ;; + --cc=*) cc=`echo $opt | cut -d '=' -f 2` + ;; + --make=*) make=`echo $opt | cut -d '=' -f 2` + ;; + --extra-cflags=*) CFLAGS="$CFLAGS ${opt#--extra-cflags=}" + ;; + --extra-ldflags=*) LDFLAGS="$LDFLAGS ${opt#--extra-ldflags=}" + ;; + --extra-libs=*) extralibs=${opt#--extra-libs=} + ;; + --cpu=*) cpu=`echo $opt | cut -d '=' -f 2` + ;; + esac done case "$cpu" in - i386|i486|i586|i686|i86pc|BePC) - cpu="x86" - ;; - x86_64|amd64) - cpu="x86" - if test "$linux" = "yes" ; then - is_64="yes" - fi - case `uname -s` in - SunOS) - canon_arch=`isainfo -n` - ;; - *) - canon_arch="`$cc -dumpmachine | sed -e 's,\([^-]*\)-.*,\1,'`" - ;; - esac - - if [ x"$canon_arch" = x"x86_64" -o x"$canon_arch" = x"amd64" ]; then - if [ -z "`echo $CFLAGS | grep -- -m32`" ]; then - cpu="x86_64" - if test "$linux" = "yes" ; then - libdir="lib64" + i386|i486|i586|i686|i86pc|BePC) + cpu="x86" + ;; + x86_64|amd64) + cpu="x86" + if [ "$linux" = "yes" -o "$darwin" = "yes" ] ; then + is_64="yes" fi - want_pic="yes" - fi - fi - ;; - armv4l|arm) - cpu="armv4l" - ;; - alpha) - cpu="alpha" - ;; - ppc64) - cpu="powerpc" - libdir="lib64" - ;; - "Power Macintosh"|ppc) - cpu="powerpc" - ;; - mips) - cpu="mips" - ;; - sh4|sh4a|sh) - cpu="sh4" - ;; - sun4u|sun4v) - cpu="sparc" - if [ -z "`echo $CFLAGS | grep -- -m32`" ]; then - is_64="yes" - PIC_CFLAGS="-fPIC -DPIC" - want_pic="yes" - fi - ;; - *) - cpu="unknown" - ;; + case `uname -s` in + SunOS) + canon_arch=`isainfo -n` + ;; + *) + canon_arch="`$cc -dumpmachine | sed -e 's,\([^-]*\)-.*,\1,'`" + ;; + esac + + if [ x"$canon_arch" = x"x86_64" -o x"$canon_arch" = x"amd64" ]; then + if [ -z "`echo $CFLAGS | grep -- -m32`" ]; then + cpu="x86_64" + if test "$linux" = "yes" ; then + libdir="lib64" + fi + want_pic="yes" + fi + fi + ;; + armv4l|arm) + cpu="armv4l" + ;; + alpha) + cpu="alpha" + ;; + ppc64) + cpu="powerpc" + libdir="lib64" + ;; + "Power Macintosh"|ppc) + cpu="powerpc" + ;; + mips) + cpu="mips" + ;; + sh4|sh4a|sh) + cpu="sh4" + ;; + sun4u|sun4v) + cpu="sparc" + if [ -z "`echo $CFLAGS | grep -- -m32`" ]; then + is_64="yes" + PIC_CFLAGS="-fPIC -DPIC" + want_pic="yes" + fi + ;; + *) + cpu="unknown" + ;; esac # Checking for CFLAGS @@ -366,6 +368,7 @@ fi cc="${cross_prefix}${cc}" #for ccache cc="${cc}" +cpp="${cross_prefix}${cpp}" ar="${cross_prefix}${ar}" ranlib="${cross_prefix}${ranlib}" strip="${cross_prefix}${strip}" @@ -383,137 +386,151 @@ fi # OS specific targetos=`uname -s` case $targetos in -BeOS) -js_flags=-DXP_BEOS -xul_flags=-DXP_BEOS -prefix="/boot/home/config" -CFLAGS="$CFLAGS -DPIC -fomit-frame-pointer" -# 3 gcc releases known for BeOS, each with ugly bugs -gcc_version="$($cc -v 2>&1 | grep version | cut -d ' ' -f3-)" -case "$gcc_version" in -2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc" -;; -*20010315*) echo "BeBits gcc" -CFLAGS="$CFLAGS -fno-expensive-optimizations" -;; -esac + BeOS) + js_flags=-DXP_BEOS + xul_flags=-DXP_BEOS + prefix="/boot/home/config" + CFLAGS="$CFLAGS -DPIC -fomit-frame-pointer" + # 3 gcc releases known for BeOS, each with ugly bugs + gcc_version="$($cc -v 2>&1 | grep version | cut -d ' ' -f3-)" + case "$gcc_version" in + 2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc" + ;; + *20010315*) echo "BeBits gcc" + CFLAGS="$CFLAGS -fno-expensive-optimizations" + ;; + esac + + SHFLAGS=-nostart + # no need for libm, but the inet stuff + # Check for BONE + if (echo $BEINCLUDES|grep 'headers/be/bone' >/dev/null); then + extralibs="-lbind -lsocket" + else + need_inet_aton="yes" + extralibs="-lnet" + fi + ;; -SHFLAGS=-nostart -# no need for libm, but the inet stuff -# Check for BONE -if (echo $BEINCLUDES|grep 'headers/be/bone' >/dev/null); then -extralibs="-lbind -lsocket" -else -need_inet_aton="yes" -extralibs="-lnet" -fi ;; - -SunOS) -make="gmake" -LDFLAGS="${opt#--extra-ldflags=}" -instflags="" -if test "$is_64" = "yes"; then - if test "$cpu" = "x86_64"; then - libdir=lib/amd64 - elif test "$cpu" = "sparc"; then - libdir=lib/sparcv9 - fi -fi -sunos="yes" -need_inet_aton="yes" -extralibs="$extralibs -lsocket -lnsl" -;; - -FreeBSD) -make="gmake" -LDFLAGS="$LDFLAGS -export-dynamic" -CFLAGS="$CFLAGS -pthread" -GPAC_SH_FLAGS=-pthread -freebsd="yes" -js_flags="-DXP_UNIX -I/usr/include/js" -;; - -BSD/OS) -extralibs="-lpoll -lgnugetopt -lm" -make="gmake" -;; - -Darwin) -js_flags=-DXP_MAC -xul_flags=-DXP_MAC -if test -d /sw/bin ; then - alt_macosx_dir="/sw" - CFLAGS="-I/sw/include $CFLAGS" - LDFLAGS="-L/sw/lib $LDFLAGS" -elif test -d /opt/local/bin ; then - alt_macosx_dir="/opt/local" - CFLAGS="-I/opt/local/include $CFLAGS" - LDFLAGS="-L/opt/local/lib $LDFLAGS" -fi -cc="cc" -Mac_Applications="/Applications" -SHFLAGS="-dynamiclib" -DYN_LIB_SUFFIX="dylib" -extralibs="" -GPAC_SH_FLAGS="" -strip="strip -x" -LDFLAGS="$LDFLAGS -read_only_relocs warning" -darwin="yes" -gcc_version=`$cc -v 2>&1 | grep version | cut -d ' ' -f3` -case "$gcc_version" in -*2.95*) -CFLAGS="$CFLAGS -no-cpp-precomp -pipe -fomit-frame-pointer" -;; -3.*) -CFLAGS="$CFLAGS -no-cpp-precomp -pipe -fomit-frame-pointer -mdynamic-no-pic -fno-common" -;; -4.*) -CFLAGS="$CFLAGS -pipe -fomit-frame-pointer -fno-common" -;; -esac -;; - -MINGW32*) -js_flags="-DXP_PC -D_declspec=__declspec" -mingw32="yes" -win32="yes" -extralibs="$extralibs -lws2_32 -lwinmm" -;; - -CYGWIN*) -js_flags=-DXP_PC -extralibs="$extralibs -lws2_32 -lwinmm" -cygwin="yes" -win32="yes" -;; - -Linux) -js_flags="-DXP_UNIX -I/usr/include/js" -LDFLAGS="$LDFLAGS -Wl,--warn-common" -#OSS_LDFLAGS="-laoss" -linux="yes" -case "$cpu" in -sh4) -CFLAGS="$CFLAGS -isystem \"$prefix/include\"" -#LDFLAGS="$LDFLAGS -L$prefix/lib" -;; -esac -;; -*) ;; + SunOS) + make="gmake" + readelf="greadelf" + LDFLAGS="${opt#--extra-ldflags=}" + instflags="" + # check for 64-bit +cat > $TMPC << EOF +#include +int main( void ) { return 0; } +EOF + CFLAGS_NO_LTO=$(echo ${CFLAGS} | sed -e 's/\ -flto[-A-Za-z0-9=]*//g') + $cc ${CFLAGS_NO_LTO} -o $TMPO $TMPC 2>/dev/null && $($readelf -h $TMPO | grep "Class:.*ELF64$" >/dev/null 2>&1) + if test $? -eq 0; then + is_64="yes" + fi + if test "$is_64" = "yes"; then + if test "$cpu" = "x86_64"; then + libdir=lib/amd64 + elif test "$cpu" = "sparc"; then + libdir=lib/sparcv9 + fi + fi + sunos="yes" + need_inet_aton="yes" + extralibs="$extralibs -lsocket -lnsl" + ;; + + FreeBSD) + make="gmake" + LDFLAGS="$LDFLAGS -export-dynamic" + CFLAGS="$CFLAGS -pthread" + GPAC_SH_FLAGS=-pthread + freebsd="yes" + js_flags="-DXP_UNIX -I/usr/include/js" + ;; + + BSD/OS) + extralibs="-lpoll -lgnugetopt -lm" + make="gmake" + ;; + + Darwin) + js_flags=-DXP_MAC + xul_flags=-DXP_MAC + if test -d /sw/bin ; then + alt_macosx_dir="/sw" + CFLAGS="-I/sw/include $CFLAGS" + LDFLAGS="-L/sw/lib $LDFLAGS" + elif test -d /opt/local/bin ; then + alt_macosx_dir="/opt/local" + CFLAGS="-I/opt/local/include $CFLAGS" + LDFLAGS="-L/opt/local/lib $LDFLAGS" + fi + cc="cc" + Mac_Applications="/Applications" + SHFLAGS="-dynamiclib" + DYN_LIB_SUFFIX="dylib" + extralibs="" + GPAC_SH_FLAGS="" + strip="strip -x" + if test "$is_64" = "yes" ; then + LDFLAGS="$LDFLAGS -read_only_relocs warning" + fi + darwin="yes" + gcc_version=`$cc -v 2>&1 | grep version | cut -d ' ' -f3` + case "$gcc_version" in + *2.95*) + CFLAGS="$CFLAGS -no-cpp-precomp -pipe -fomit-frame-pointer" + ;; + 3.*) + CFLAGS="$CFLAGS -no-cpp-precomp -pipe -fomit-frame-pointer -mdynamic-no-pic -fno-common" + ;; + 4.*) + CFLAGS="$CFLAGS -pipe -fomit-frame-pointer -fno-common" + ;; + esac + ;; + + MINGW32*) + js_flags="-DXP_PC -D_declspec=__declspec" + mingw32="yes" + win32="yes" + extralibs="$extralibs -lws2_32 -lwinmm" + ;; + + CYGWIN*) + js_flags=-DXP_PC + extralibs="$extralibs -lws2_32 -lwinmm" + cygwin="yes" + win32="yes" + ;; + + Linux) + js_flags="-DXP_UNIX -I/usr/include/js" + LDFLAGS="$LDFLAGS -Wl,--warn-common" + #OSS_LDFLAGS="-laoss" + linux="yes" + case "$cpu" in + sh4) + CFLAGS="$CFLAGS -isystem \"$prefix/include\"" + #LDFLAGS="$LDFLAGS -L$prefix/lib" + ;; + esac + ;; + *) ;; esac # Defines directory for binaries and libs (ex. for TinyGL) target_bin_dir="" if test "$cross_prefix" = "" ; then -target_bin_dir=`${cc} -v 2>&1 | sed -n '2p' | awk ' {print $2}'`-${cc_orig} + target_bin_dir=`${cc} -v 2>&1 | sed -n '2p' | awk ' {print $2}'`-${cc_orig} else -target_bin_dir=${cross_prefix}${cc_orig} + target_bin_dir=${cross_prefix}${cc_orig} fi #if test "$source_path_used" = "yes" ; then - mkdir -p extra_lib - mkdir -p extra_lib/lib - mkdir -p extra_lib/lib/gcc +mkdir -p extra_lib +mkdir -p extra_lib/lib +mkdir -p extra_lib/lib/gcc #fi #OK check for all local & systems lib @@ -527,11 +544,11 @@ cat > $TMPC << EOF int main( void ) { return 0; } EOF if $cc -o $TMPO $TMPC -fno-strict-aliasing 2> /dev/null ; then -CFLAGS="$CFLAGS -fno-strict-aliasing" + CFLAGS="$CFLAGS -fno-strict-aliasing" fi CPPFLAGS="$CFLAGS" if $cc -o $TMPO $TMPC -lz -Wno-pointer-sign 2> /dev/null ; then -CFLAGS="$CFLAGS -Wno-pointer-sign" + CFLAGS="$CFLAGS -Wno-pointer-sign" fi #look for zlib @@ -541,12 +558,12 @@ int main( void ) { if (zlibVersion() != ZLIB_VERSION) { puts("zlib version diffe EOF has_zlib="no" if $cc -o $TMPO $TMPC -lz 2> /dev/null ; then - has_zlib="system" + has_zlib="system" elif $cc -o $TMPO $TMPC -I"$local_inc/zlib" -L$local_lib -lz 2> /dev/null ; then - has_zlib="local" + has_zlib="local" else - echo "error: zlib not found on system or in local libs" - exit 1 + echo "error: zlib not found on system or in local libs" + exit 1 fi @@ -557,14 +574,14 @@ int main( void ) { return (int) dlopen("foo", 0); } EOF if $cc -o $TMPE $TMPC > /dev/null 2>&1 ; then -dlopen="yes" + dlopen="yes" elif $cc -o $TMPE $TMPC -ldl > /dev/null 2>&1 ; then -GPAC_SH_FLAGS="$GPAC_SH_FLAGS -ldl" + GPAC_SH_FLAGS="$GPAC_SH_FLAGS -ldl" else - if test "$win32" = "no"; then - echo "error: dlopen not found on system" - exit 1 - fi + if test "$win32" = "no"; then + echo "error: dlopen not found on system" + exit 1 + fi fi @@ -573,150 +590,153 @@ fi #spidermonkey test for new API if test "$has_js" = "no" ; then - cat > $TMPCPP << EOF - #include - int main( void ) { JSContext *cx; jsval *rp; return JS_AddValueRoot(cx, rp); } + cat > $TMPCPP << EOF +#include +int main( void ) { JSContext *cx; jsval *rp; return JS_AddValueRoot(cx, rp); } EOF - #try local - js_inc="$local_inc/js" - js_flags="-DXP_UNIX -I$local_inc/js" - if $cpp -o $TMPO $TMPCPP $js_flags -L$local_lib -ljs -lpthread 2> /dev/null ; then - has_js="local" - #dc added - else + #try local + js_inc="$local_inc/js" + js_flags="-DXP_UNIX -I$local_inc/js" + if $cpp -o $TMPO $TMPCPP $js_flags -L$local_lib -ljs -lpthread 2> /dev/null ; then + has_js="local" + #dc added + else -if pkg-config --exists mozilla-js 2> /dev/null ; then - js_flags=`pkg-config --cflags mozilla-js` - js_lib_pkg=`pkg-config --libs mozilla-js` - if $cpp -o $TMPO $TMPCPP $js_flags $js_lib_pkg -lpthread 2> /dev/null ; then - has_js="system" - js_lib=`pkg-config --libs mozilla-js` - fi -fi + if pkg-config --exists mozilla-js 2> /dev/null ; then + js_flags=`pkg-config --cflags mozilla-js` + js_lib_pkg=`pkg-config --libs mozilla-js` + if $cpp -o $TMPO $TMPCPP $js_flags $js_lib_pkg -lpthread 2> /dev/null ; then + has_js="system" + js_lib=`pkg-config --libs mozilla-js` + fi + fi -if test "$has_js" = "no" ; then - #try prefix (DC) - js_inc="$prefix/include/js" - js_flags="-DXP_UNIX -I$prefix/include/js" - if $cpp -o $TMPO $TMPCPP $js_flags -L$prefix/lib -ljs -lpthread 2> /dev/null ; then - has_js="prefix" - #dc added end - else - if $cpp -o $TMPO $TMPCPP $js_flags -ljs -lpthread 2> /dev/null ; then - js_inc="/usr/include" - has_js="system" - elif $cpp -o $TMPO $TMPCPP -DXP_UNIX -I$alt_macosx_dir/include/js -L$alt_macosx_dir/lib -ljs -lpthread 2> /dev/null ; then - has_js="system" - js_flags="-DXP_UNIX -I$alt_macosx_dir/include/js" - js_lib="-L$alt_macosx_dir/lib -ljs" - js_inc="$alt_macosx_dir/include/js" - else - #debian spidermonkey (smjs) - js_flags="-DXP_UNIX -I/usr/include/smjs" - js_inc="/usr/include/smjs" - if $cpp -o $TMPO $TMPCPP $js_flags -lsmjs -lpthread 2> /dev/null ; then - has_js="system" - js_lib="-lsmjs" - else - #debian spidermonkey (mozjs) - js_flags="-DXP_UNIX -I/usr/include/mozjs" - js_inc="/usr/include/mozjs" - if $cpp -o $TMPO $TMPCPP $js_flags -lmozjs -lpthread 2> /dev/null ; then - has_js="system" - js_lib="-lmozjs" - fi + if test "$has_js" = "no" ; then + #try prefix (DC) + js_inc="$prefix/include/js" + js_flags="-DXP_UNIX -I$prefix/include/js" + if $cpp -o $TMPO $TMPCPP $js_flags -L$prefix/lib -ljs -lpthread 2> /dev/null ; then + has_js="prefix" + #dc added end + else + if $cpp -o $TMPO $TMPCPP $js_flags -ljs -lpthread 2> /dev/null ; then + js_inc="/usr/include" + has_js="system" + elif $cpp -o $TMPO $TMPCPP -DXP_UNIX -I$alt_macosx_dir/include/js -L$alt_macosx_dir/lib -ljs -lpthread 2> /dev/null ; then + has_js="system" + js_flags="-DXP_UNIX -I$alt_macosx_dir/include/js" + js_lib="-L$alt_macosx_dir/lib -ljs" + js_inc="$alt_macosx_dir/include/js" + else + #debian spidermonkey (smjs) + js_flags="-DXP_UNIX -I/usr/include/smjs" + js_inc="/usr/include/smjs" + if $cpp -o $TMPO $TMPCPP $js_flags -lsmjs -lpthread 2> /dev/null ; then + has_js="system" + js_lib="-lsmjs" + else + #debian spidermonkey (mozjs) + js_flags="-DXP_UNIX -I/usr/include/mozjs" + js_inc="/usr/include/mozjs" + if $cpp -o $TMPO $TMPCPP $js_flags -lmozjs -lpthread 2> /dev/null ; then + has_js="system" + js_lib="-lmozjs" + fi + fi + fi + fi + fi fi - fi - fi - fi -fi fi if test "$has_js" != "no" ; then -js_flags="-DSPIDERMONKEY_NEW_API $js_flags" -echo "SpiderMonkey new API detected" # (version > 1.8.0rc1) + js_flags="-DSPIDERMONKEY_NEW_API $js_flags" + echo "SpiderMonkey new API detected" # (version > 1.8.0rc1) fi #spidermonkey test for regular API if test "$has_js" = "no" ; then - cat > $TMPC << EOF - #include - int main( void ) { return 0; } + cat > $TMPC << EOF +#include +int main( void ) { return 0; } EOF - #try local - js_inc="$local_inc/js" - js_flags="-DXP_UNIX -I$local_inc/js" - if $cc -o $TMPO $TMPC $js_flags -L$local_lib -ljs 2> /dev/null ; then - has_js="local" - #dc added - else - #try prefix (DC) - js_inc="$prefix/include/js" - js_flags="-DXP_UNIX -I$prefix/include/js" - if $cc -o $TMPO $TMPC $js_flags -L$prefix/lib -ljs 2> /dev/null ; then - has_js="prefix" - #dc added end - else - if pkg-config --exists mozilla-js 2> /dev/null ; then - js_flags=`pkg-config --cflags mozilla-js` - js_lib_pkg=`pkg-config --libs mozilla-js` - if $cc -o $TMPO $TMPC $js_flags $js_lib_pkg -lpthread 2> /dev/null ; then - has_js="system" - js_lib=`pkg-config --libs mozilla-js` + #try local + js_inc="$local_inc/js" + js_flags="-DXP_UNIX -I$local_inc/js" + if test "$cpu" = "sh4" ; then + lm_lib="-lm" fi - fi - if test "$has_js" = "no" ; then - if $cc -o $TMPO $TMPC $js_flags -ljs 2> /dev/null ; then - js_inc="/usr/include" - has_js="system" - elif $cc -o $TMPO $TMPC -DXP_UNIX -I$alt_macosx_dir/include/js -L$alt_macosx_dir/lib -ljs 2> /dev/null ; then - has_js="system" - js_flags="-DXP_UNIX -I$alt_macosx_dir/include/js" - js_lib="-L$alt_macosx_dir/lib -ljs" - js_inc="$alt_macosx_dir/include/js" + if $cc -o $TMPO $TMPC $js_flags $lm_lib -L$local_lib -ljs 2> /dev/null ; then + has_js="local" + #dc added else - #debian spidermonkey (smjs) - js_flags="-DXP_UNIX -I/usr/include/smjs" - js_inc="/usr/include/smjs" - if $cc -o $TMPO $TMPC $js_flags -lsmjs 2> /dev/null ; then - has_js="system" - js_lib="-lsmjs" - else - #debian spidermonkey (mozjs) - js_flags="-DXP_UNIX -I/usr/include/mozjs" - js_inc="/usr/include/mozjs" - if $cc -o $TMPO $TMPC $js_flags -lmozjs 2> /dev/null ; then - has_js="system" - js_lib="-lmozjs" - fi - fi + #try prefix (DC) + js_inc="$prefix/include/js" + js_flags="-DXP_UNIX -I$prefix/include/js" + if $cc -o $TMPO $TMPC $js_flags -L$prefix/lib -ljs 2> /dev/null ; then + has_js="prefix" + #dc added end + else + if pkg-config --exists mozilla-js 2> /dev/null ; then + js_flags=`pkg-config --cflags mozilla-js` + js_lib_pkg=`pkg-config --libs mozilla-js` + if $cc -o $TMPO $TMPC $js_flags $js_lib_pkg -lpthread 2> /dev/null ; then + has_js="system" + js_lib=`pkg-config --libs mozilla-js` + fi + fi + if test "$has_js" = "no" ; then + if $cc -o $TMPO $TMPC $js_flags -ljs 2> /dev/null ; then + js_inc="/usr/include" + has_js="system" + elif $cc -o $TMPO $TMPC -DXP_UNIX -I$alt_macosx_dir/include/js -L$alt_macosx_dir/lib -ljs 2> /dev/null ; then + has_js="system" + js_flags="-DXP_UNIX -I$alt_macosx_dir/include/js" + js_lib="-L$alt_macosx_dir/lib -ljs" + js_inc="$alt_macosx_dir/include/js" + else + #debian spidermonkey (smjs) + js_flags="-DXP_UNIX -I/usr/include/smjs" + js_inc="/usr/include/smjs" + if $cc -o $TMPO $TMPC $js_flags -lsmjs 2> /dev/null ; then + has_js="system" + js_lib="-lsmjs" + else + #debian spidermonkey (mozjs) + js_flags="-DXP_UNIX -I/usr/include/mozjs" + js_inc="/usr/include/mozjs" + if $cc -o $TMPO $TMPC $js_flags -lmozjs 2> /dev/null ; then + has_js="system" + js_lib="-lmozjs" + fi + fi + fi + fi + fi fi - fi - fi - fi fi if test "$has_js" != "no" ; then -if test "$linux" = "yes" ; then -if test "$cpu" != "sh4"; then + if test "$linux" = "yes" ; then + if test "$cpu" != "sh4"; then -#WARNING: there is a bug in MOZJS packages, the MOZILLA_1_8_BRANCH macro is not signaled, there is no way of knowing -#if the lib has been compiled with or without the macro. We currently just decide that if the macro is present -#in the header, it was enabled in the build -if grep "MOZILLA_1_8_BRANCH" $js_inc/jsapi.h > /dev/null 2>&1 ; then -js_flags="-DMOZILLA_1_8_BRANCH $js_flags" -echo "WARNING: Turning on MOZILLA_1_8_BRANCH SpiderMonkey macro" -echo "If you have troubles with scripts in GPAC, disable this macro and recompile" -fi + #WARNING: there is a bug in MOZJS packages, the MOZILLA_1_8_BRANCH macro is not signaled, there is no way of knowing + #if the lib has been compiled with or without the macro. We currently just decide that if the macro is present + #in the header, it was enabled in the build + if grep "MOZILLA_1_8_BRANCH" $js_inc/jsapi.h > /dev/null 2>&1 ; then + js_flags="-DMOZILLA_1_8_BRANCH $js_flags" + echo "WARNING: Turning on MOZILLA_1_8_BRANCH SpiderMonkey macro" + echo "If you have troubles with scripts in GPAC, disable this macro and recompile" + fi -fi -fi + fi + fi fi #fi @@ -734,31 +754,31 @@ cat > $TMPC << EOF int main( void ) { return 0; } EOF if test "$cross_prefix" != "" ; then - ft_cflags="-I$prefix/include " - ft_lflags="-L$prefix/lib -lfreetype" - if $cc -o $TMPO $TMPC $ft_cflags $ft_lflags 2> /dev/null ; then - has_ft="system" - else - ft_cflags="-I$local_inc/freetype" - ft_lflags="-L$local_lib -lfreetype" - if $cc -o $TMPO $TMPC $ft_cflags $ft_lflags 2> /dev/null ; then - has_ft="local" - fi - fi -else - if test "`which freetype-config`" != ""; then - ft_cflags="`freetype-config --cflags`" - ft_lflags="`freetype-config --libs`" + ft_cflags="-I$prefix/include " + ft_lflags="-L$prefix/lib -lfreetype" if $cc -o $TMPO $TMPC $ft_cflags $ft_lflags 2> /dev/null ; then - has_ft="system" + has_ft="system" else - ft_cflags="-I$local_inc/freetype" - ft_lflags="-L$local_lib -lfreetype" - if $cc -o $TMPO $TMPC $ft_cflags $ft_lflags 2> /dev/null ; then - has_ft="local" - fi + ft_cflags="-I$local_inc/freetype" + ft_lflags="-L$local_lib -lfreetype" + if $cc -o $TMPO $TMPC $ft_cflags $ft_lflags 2> /dev/null ; then + has_ft="local" + fi + fi +else + if test "`which freetype-config`" != ""; then + ft_cflags="`freetype-config --cflags`" + ft_lflags="`freetype-config --libs`" + if $cc -o $TMPO $TMPC $ft_cflags $ft_lflags 2> /dev/null ; then + has_ft="system" + else + ft_cflags="-I$local_inc/freetype" + ft_lflags="-L$local_lib -lfreetype" + if $cc -o $TMPO $TMPC $ft_cflags $ft_lflags 2> /dev/null ; then + has_ft="local" + fi + fi fi - fi fi #end freetype test @@ -774,13 +794,13 @@ int main( void ) { return 0; } EOF if test "$win32" = "yes" ; then -LINK_SSL="-lssleay32 -leay32" + LINK_SSL="-lssleay32 -leay32" else -LINK_SSL="-lssl -lcrypto" + LINK_SSL="-lssl -lcrypto" fi if $cc -o $TMPO $TMPC $LINK_SSL 2> /dev/null ; then -has_ssl="yes" + has_ssl="yes" fi @@ -792,41 +812,41 @@ int main( void ) { return 0; } EOF if test "$cross_prefix" != "" ; then - if test "`which $prefix/bin/jpeg-config`" != ""; then - jpeg_cflags="`$prefix/bin/jpeg-config --cflags`" - jpeg_lflags="`$prefix/bin/jpeg-config --libs`" - if $cc -o $TMPO $TMPC $jpeg_cflags $jpeg_lflags 2> /dev/null ; then - has_jpeg="system" - else - jpeg_cflags="-I$local_inc/jpeg" - jpeg_lflags="-L$local_lib -ljpeg" - if $cc -o $TMPO $TMPC $jpeg_cflags $jpeg_lflags 2> /dev/null ; then - has_jpeg="local" - fi - fi - else - jpeg_cflags="-I$prefix/include" - jpeg_lflags="-L$prefix/lib -ljpeg" - if $cc -o $TMPO $TMPC $jpeg_cflags $jpeg_lflags 2> /dev/null ; then - has_jpeg="system" + if test "`which $prefix/bin/jpeg-config`" != ""; then + jpeg_cflags="`$prefix/bin/jpeg-config --cflags`" + jpeg_lflags="`$prefix/bin/jpeg-config --libs`" + if $cc -o $TMPO $TMPC $jpeg_cflags $jpeg_lflags 2> /dev/null ; then + has_jpeg="system" + else + jpeg_cflags="-I$local_inc/jpeg" + jpeg_lflags="-L$local_lib -ljpeg" + if $cc -o $TMPO $TMPC $jpeg_cflags $jpeg_lflags 2> /dev/null ; then + has_jpeg="local" + fi + fi else - jpeg_cflags="-I$local_inc/jpeg" - jpeg_lflags="-L$local_lib -ljpeg" - if $cc -o $TMPO $TMPC $jpeg_cflags $jpeg_lflags 2> /dev/null ; then - has_jpeg="local" - fi + jpeg_cflags="-I$prefix/include" + jpeg_lflags="-L$prefix/lib -ljpeg" + if $cc -o $TMPO $TMPC $jpeg_cflags $jpeg_lflags 2> /dev/null ; then + has_jpeg="system" + else + jpeg_cflags="-I$local_inc/jpeg" + jpeg_lflags="-L$local_lib -ljpeg" + if $cc -o $TMPO $TMPC $jpeg_cflags $jpeg_lflags 2> /dev/null ; then + has_jpeg="local" + fi + fi fi - fi else - if $cc -o $TMPO $TMPC -ljpeg 2> /dev/null ; then - has_jpeg="system" - elif test "$alt_macosx_dir" != "" ; then - if cc -o $TMPO $TMPC -I$alt_macosx_dir/include -L$alt_macosx_dir/lib -ljpeg 2> /dev/null ; then - has_jpeg="system" - fi - elif $cc -o $TMPO $TMPC -I$local_inc/jpeg -L$local_lib -ljpeg 2> /dev/null ; then - has_jpeg="local" - fi + if $cc -o $TMPO $TMPC -ljpeg 2> /dev/null ; then + has_jpeg="system" + elif test "$alt_macosx_dir" != "" ; then + if cc -o $TMPO $TMPC -I$alt_macosx_dir/include -L$alt_macosx_dir/lib -ljpeg 2> /dev/null ; then + has_jpeg="system" + fi + elif $cc -o $TMPO $TMPC -I$local_inc/jpeg -L$local_lib -ljpeg 2> /dev/null ; then + has_jpeg="local" + fi fi #look for OpenJPEG support @@ -837,13 +857,13 @@ int main( void ) { return 0; } EOF if $cc -o $TMPO $TMPC -lopenjpeg 2> /dev/null ; then -has_openjpeg="system" + has_openjpeg="system" elif test "$alt_macosx_dir" != "" ; then - if cc -o $TMPO $TMPC -I$alt_macosx_dir/include -L$alt_macosx_dir/lib -ljpeg 2> /dev/null ; then - has_openjpeg="system" - fi + if cc -o $TMPO $TMPC -I$alt_macosx_dir/include -L$alt_macosx_dir/lib -ljpeg 2> /dev/null ; then + has_openjpeg="system" + fi elif $cc -o $TMPO $TMPC -I$local_inc/openjpeg -L$local_lib -lopenjpeg 2> /dev/null ; then -has_openjpeg="local" + has_openjpeg="local" fi #look for PNG support @@ -853,29 +873,29 @@ int main( void ) { return 0; } EOF if test "$cross_prefix" != "" ; then - png_cflags="-I$prefix/include" - png_lflags="-L$prefix/lib -lpng -lz" - #-nostdlib prevents from searching standard compiler libraries - #if $cc -o $TMPO $TMPC -nostdlib $png_cflags $png_lflags 2> /dev/null ; then - if $cc -o $TMPO $TMPC $png_cflags $png_lflags 2> /dev/null ; then - has_png="system" - else - png_cflags="-I$local_inc/png" - png_lflags="-L$local_lib -lpng" - if $cc -o $TMPO $TMPC $png_cflags $png_lflags 2> /dev/null ; then - has_png="local" - fi - fi + png_cflags="-I$prefix/include" + png_lflags="-L$prefix/lib -lpng -lz" + #-nostdlib prevents from searching standard compiler libraries + #if $cc -o $TMPO $TMPC -nostdlib $png_cflags $png_lflags 2> /dev/null ; then + if $cc -o $TMPO $TMPC $png_cflags $png_lflags 2> /dev/null ; then + has_png="system" + else + png_cflags="-I$local_inc/png" + png_lflags="-L$local_lib -lpng" + if $cc -o $TMPO $TMPC $png_cflags $png_lflags 2> /dev/null ; then + has_png="local" + fi + fi else - if $cc -o $TMPO $TMPC -lpng -lz 2> /dev/null ; then - has_png="system" - elif test "$alt_macosx_dir" != "" ; then - if $cc -o $TMPO $TMPC -I$alt_macosx_dir/include -L$alt_macosx_dir/lib -lpng 2> /dev/null ; then - has_png="system" - fi - elif $cc -o $TMPO $TMPC -I$local_inc/png -L$local_lib -lpng 2> /dev/null ; then - has_png="local" - fi + if $cc -o $TMPO $TMPC -lpng -lz 2> /dev/null ; then + has_png="system" + elif test "$alt_macosx_dir" != "" ; then + if $cc -o $TMPO $TMPC -I$alt_macosx_dir/include -L$alt_macosx_dir/lib -lpng 2> /dev/null ; then + has_png="system" + fi + elif $cc -o $TMPO $TMPC -I$local_inc/png -L$local_lib -lpng 2> /dev/null ; then + has_png="local" + fi fi #look for MAD support @@ -885,13 +905,13 @@ int main( void ) { return 0; } EOF if $cc -o $TMPO $TMPC -lmad 2> /dev/null ; then -has_mad="system" + has_mad="system" elif test "$alt_macosx_dir" != "" ; then - if $cc -o $TMPO $TMPC -I$alt_macosx_dir/include -L$alt_macosx_dir/lib -lmad 2> /dev/null ; then - has_mad="system" - fi + if $cc -o $TMPO $TMPC -I$alt_macosx_dir/include -L$alt_macosx_dir/lib -lmad 2> /dev/null ; then + has_mad="system" + fi elif $cc -o $TMPO $TMPC -I$local_inc/mad -L$local_lib -lmad 2> /dev/null ; then -has_mad="local" + has_mad="local" fi #look for A52DEC support @@ -904,13 +924,13 @@ int main( void ) { return 0; } EOF if $cc -o $TMPO $TMPC -la52 2> /dev/null ; then -has_a52="system" + has_a52="system" elif test "$alt_macosx_dir" != "" ; then - if $cc -o $TMPO $TMPC -I$alt_macosx_dir/include -L$alt_macosx_dir/lib -la52 2> /dev/null ; then - has_a52="system" - fi + if $cc -o $TMPO $TMPC -I$alt_macosx_dir/include -L$alt_macosx_dir/lib -la52 2> /dev/null ; then + has_a52="system" + fi elif $cc -o $TMPO $TMPC -I$local_inc -L$local_lib -la52 2> /dev/null ; then -has_a52="local" + has_a52="local" fi #look for XVID support @@ -920,21 +940,21 @@ int main( void ) { return 0; } EOF if test "$cross_prefix" != "" ; then - if $cc -o $TMPO $TMPC -I$prefix/include -L$prefix/lib -lxvidcore -lpthread 2> /dev/null ; then - has_xvid="system" - elif $cc -o $TMPO $TMPC -I$local_inc/xvid -L$local_lib -lxvidcore -lpthread 2> /dev/null ; then - has_xvid="local" - fi + if $cc -o $TMPO $TMPC -I$prefix/include -L$prefix/lib -lxvidcore -lpthread 2> /dev/null ; then + has_xvid="system" + elif $cc -o $TMPO $TMPC -I$local_inc/xvid -L$local_lib -lxvidcore -lpthread 2> /dev/null ; then + has_xvid="local" + fi else - if $cc -o $TMPO $TMPC -lxvidcore -lpthread 2> /dev/null ; then - has_xvid="system" - elif test "$alt_macosx_dir" != "" ; then - if $cc -o $TMPO $TMPC -I$alt_macosx_dir/include -L$alt_macosx_dir/lib -lxvidcore -lpthread 2> /dev/null ; then - has_xvid="system" - fi - elif $cc -o $TMPO $TMPC -I$local_inc/xvid -L$local_lib -lxvidcore -lpthread 2> /dev/null ; then - has_xvid="local" - fi + if $cc -o $TMPO $TMPC -lxvidcore -lpthread 2> /dev/null ; then + has_xvid="system" + elif test "$alt_macosx_dir" != "" ; then + if $cc -o $TMPO $TMPC -I$alt_macosx_dir/include -L$alt_macosx_dir/lib -lxvidcore -lpthread 2> /dev/null ; then + has_xvid="system" + fi + elif $cc -o $TMPO $TMPC -I$local_inc/xvid -L$local_lib -lxvidcore -lpthread 2> /dev/null ; then + has_xvid="local" + fi fi #look for FAAD support @@ -944,75 +964,69 @@ int main( void ) { return 0; } EOF if $cc -o $TMPO $TMPC -lfaad -lm 2> /dev/null ; then -has_faad="system" + has_faad="system" elif test "$alt_macosx_dir" != "" ; then - if $cc -o $TMPO $TMPC -I$alt_macosx_dir/include -L$alt_macosx_dir/lib -lfaad 2> /dev/null ; then - has_faad="system" - fi + if $cc -o $TMPO $TMPC -I$alt_macosx_dir/include -L$alt_macosx_dir/lib -lfaad 2> /dev/null ; then + has_faad="system" + fi elif $cc -o $TMPO $TMPC -I$local_inc/faad -L$local_lib -lfaad -lm 2> /dev/null ; then -has_faad="local" + has_faad="local" fi #look for FFMPEG support if pkg-config --exists libavcodec libavformat libswscale 2> /dev/null ; then - - ffmpeg_cflags=`pkg-config --cflags libavcodec libavformat libswscale libavutil` - ffmpeg_lflags=`pkg-config --libs libavcodec libavformat libswscale libavutil` - has_ffmpeg="system" - -else + ffmpeg_cflags=`pkg-config --cflags libavcodec libavformat libswscale libavutil` + ffmpeg_lflags=`pkg-config --libs libavcodec libavformat libswscale libavutil` + has_ffmpeg="system" +fi cat > $TMPC << EOF #include int main( void ) { return 0; } EOF -if $cc -o $TMPO $TMPC 2> /dev/null ; then -old_ffmpeg_inc="no" +if $cc -o $TMPO $TMPC $ffmpeg_cflags $ffmpeg_lflags 2> /dev/null ; then + old_ffmpeg_inc="no" else + old_ffmpeg_inc="yes" -old_ffmpeg_inc="yes" - -cat > $TMPC << EOF + cat > $TMPC << EOF #include int main( void ) { return 0; } EOF - fi - -if test "$cross_prefix" != "" ; then - if $cc -o $TMPO $TMPC -I$prefix/include -L$prefix/lib -lz -lavcodec -lavformat -lavutil 2> /dev/null ; then - has_ffmpeg="system" - ffmpeg_cflags="-I$prefix/include" - ffmpeg_lflags="-L$prefix/lib -lz -lavcodec -lavformat -lavutil" - else - if $cc -o $TMPO $TMPC -I$local_inc -L$local_lib -lz -lavcodec -lavformat 2> /dev/null ; then - has_ffmpeg="local" - ffmpeg_cflags="-I$local_inc/include" - ffmpeg_lflags="-L$local_lib/lib -lz -lavcodec -lavformat -lavutil" - echo OK - fi - fi +if test "$cross_prefix" != "" ; then + if $cc -o $TMPO $TMPC -I$prefix/include -L$prefix/lib -lz -lavcodec -lavformat -lavutil 2> /dev/null ; then + has_ffmpeg="system" + ffmpeg_cflags="-I$prefix/include" + ffmpeg_lflags="-L$prefix/lib -lz -lavcodec -lavformat -lavutil" + else + if $cc -o $TMPO $TMPC -I$local_inc -L$local_lib -lz -lavcodec -lavformat 2> /dev/null ; then + has_ffmpeg="local" + ffmpeg_cflags="-I$local_inc/include" + ffmpeg_lflags="-L$local_lib/lib -lz -lavcodec -lavformat -lavutil" + echo OK + fi + fi else - if $cc -o $TMPO $TMPC -lz -lavcodec -lavformat 2> /dev/null ; then - has_ffmpeg="system" - elif test "$alt_macosx_dir" != "" ; then - if $cc -o $TMPO $TMPC -I$alt_macosx_dir/include -L$alt_macosx_dir/lib -lz -lavcodec -lavformat 2> /dev/null ; then - has_ffmpeg="system" - ffmpeg_cflags="-I$alt_macosx_dir/include" - ffmpeg_lflags="-L$alt_macosx_dir/lib -lz -lavcodec -lavformat" + if $cc -o $TMPO $TMPC -lz -lavcodec -lavformat 2> /dev/null ; then + has_ffmpeg="system" + elif test "$alt_macosx_dir" != "" ; then + if $cc -o $TMPO $TMPC -I$alt_macosx_dir/include -L$alt_macosx_dir/lib -lz -lavcodec -lavformat 2> /dev/null ; then + has_ffmpeg="system" + ffmpeg_cflags="-I$alt_macosx_dir/include" + ffmpeg_lflags="-L$alt_macosx_dir/lib -lz -lavcodec -lavformat" + fi + elif $cc -o $TMPO $TMPC -I$local_inc -L$local_lib -lz -lavcodec -lavformat 2> /dev/null ; then + has_ffmpeg="local" + ffmpeg_cflags="-I$local_inc" + ffmpeg_lflags="-L$local_lib -lz -lavcodec -lavformat -lavutil" fi - elif $cc -o $TMPO $TMPC -I$local_inc -L$local_lib -lz -lavcodec -lavformat 2> /dev/null ; then - has_ffmpeg="local" - ffmpeg_cflags="-I$local_inc" - ffmpeg_lflags="-L$local_lib -lz -lavcodec -lavformat -lavutil" - fi fi -fi #look for vorbis support cat > $TMPC << EOF @@ -1021,13 +1035,13 @@ int main( void ) { return 0; } EOF if $cc -o $TMPO $TMPC -lvorbis 2> /dev/null ; then -has_vorbis="system" + has_vorbis="system" elif test "$alt_macosx_dir" != "" ; then - if $cc -o $TMPO $TMPC -I$alt_macosx_dir/include -L$alt_macosx_dir/lib -lvorbis 2> /dev/null ; then - has_vorbis="system" - fi + if $cc -o $TMPO $TMPC -I$alt_macosx_dir/include -L$alt_macosx_dir/lib -lvorbis 2> /dev/null ; then + has_vorbis="system" + fi elif $cc -o $TMPO $TMPC -I$local_inc -L$local_lib -lvorbis -lm 2> /dev/null ; then -has_vorbis="local" + has_vorbis="local" fi #look for theora support @@ -1037,13 +1051,13 @@ int main( void ) { return 0; } EOF if $cc -o $TMPO $TMPC -ltheora 2> /dev/null ; then -has_theora="system" + has_theora="system" elif test "$alt_macosx_dir" != "" ; then - if $cc -o $TMPO $TMPC -I$alt_macosx_dir/include -L$alt_macosx_dir/lib -ltheora -logg 2> /dev/null ; then - has_theora="system" - fi + if $cc -o $TMPO $TMPC -I$alt_macosx_dir/include -L$alt_macosx_dir/lib -ltheora -logg 2> /dev/null ; then + has_theora="system" + fi elif $cc -o $TMPO $TMPC -I$local_inc -L$local_lib -ltheora -logg -lm 2> /dev/null ; then -has_theora="local" + has_theora="local" fi #look for OGG support @@ -1053,16 +1067,16 @@ int main( void ) { return 0; } EOF if $cc -o $TMPO $TMPC -logg 2> /dev/null ; then -has_ogg="system" + has_ogg="system" elif test "$alt_macosx_dir" != "" ; then - if $cc -o $TMPO $TMPC -I$alt_macosx_dir/include -L$alt_macosx_dir/lib -logg 2> /dev/null ; then - has_ogg="system" - fi + if $cc -o $TMPO $TMPC -I$alt_macosx_dir/include -L$alt_macosx_dir/lib -logg 2> /dev/null ; then + has_ogg="system" + fi elif $cc -o $TMPO $TMPC -I$local_inc -L$local_lib -logg -lm 2> /dev/null ; then -has_ogg="local" + has_ogg="local" else -has_vorbis=no -has_theora=no + has_vorbis=no + has_theora=no fi @@ -1070,19 +1084,19 @@ fi if test "$darwin" = "yes" ; then -cat > $TMPC << EOF + cat > $TMPC << EOF #include int main( void ) { return 0; } EOF -if $cc -o $TMPO $TMPC -DLIBOSS_INTERNAL -I$alt_macosx_dir/include/ -I$alt_macosx_dir/include/liboss -L$alt_macosx_dir/lib -loss 2> /dev/null ; then -has_oss_audio="SYS" -OSS_CFLAGS="-DLIBOSS_INTERNAL -I$alt_macosx_dir/include/ -I$alt_macosx_dir/include/liboss" -OSS_LDFLAGS="-L$alt_macosx_dir/lib -loss" -fi + if $cc -o $TMPO $TMPC -DLIBOSS_INTERNAL -I$alt_macosx_dir/include/ -I$alt_macosx_dir/include/liboss -L$alt_macosx_dir/lib -loss 2> /dev/null ; then + has_oss_audio="SYS" + OSS_CFLAGS="-DLIBOSS_INTERNAL -I$alt_macosx_dir/include/ -I$alt_macosx_dir/include/liboss" + OSS_LDFLAGS="-L$alt_macosx_dir/lib -loss" + fi else -cat > $TMPC << EOF + cat > $TMPC << EOF #include #include #include @@ -1090,20 +1104,20 @@ cat > $TMPC << EOF int main( void ) { return 0; } EOF -if $cc -o $TMPO $TMPC 2> /dev/null ; then -has_oss_audio="SYS" -else -cat > $TMPC << EOF + if $cc -o $TMPO $TMPC 2> /dev/null ; then + has_oss_audio="SYS" + else + cat > $TMPC << EOF #include #include #include #include int main( void ) { return 0; } EOF -if $cc -o $TMPO $TMPC 2> /dev/null ; then -has_oss_audio="YES" -fi -fi + if $cc -o $TMPO $TMPC 2> /dev/null ; then + has_oss_audio="YES" + fi + fi fi @@ -1114,53 +1128,53 @@ wx_too_old="no" if type wx-config >/dev/null 2>&1; then -wx_version=`wx-config --version | sed 's/[^0-9]//g'` + wx_version=`wx-config --version | sed 's/[^0-9]//g'` -if test "$wx_version" -lt 250 ; then -wx_too_old="yes" -has_wx="yes" -else -if test "$wx_version" -lt 260 ; then -has_wx="yes" -wx_cflags=`wx-config --cppflags` -wx_lflags=`wx-config --libs` -else -has_wx="yes" -wx_cflags=`wx-config --cppflags core, base` -wx_lflags=`wx-config --libs core, base` -fi + if test "$wx_version" -lt 250 ; then + wx_too_old="yes" + has_wx="yes" + else + if test "$wx_version" -lt 260 ; then + has_wx="yes" + wx_cflags=`wx-config --cppflags` + wx_lflags=`wx-config --libs` + else + has_wx="yes" + wx_cflags=`wx-config --cppflags core, base` + wx_lflags=`wx-config --libs core, base` + fi -if test "$darwin" = "yes" ; then -wx_lflags="-Wl,-bind_at_load $wx_lflags -lstdc++" #10.4 needs it, not sure about 10.3 -fi + if test "$darwin" = "yes" ; then + wx_lflags="-Wl,-bind_at_load $wx_lflags -lstdc++" #10.4 needs it, not sure about 10.3 + fi -fi + fi -cat > $TMPCPP << EOF + cat > $TMPCPP << EOF #include int main( void ) { return 0; } EOF -if $cc $wx_cflags -o $TMPO $TMPCPP $wx_lflags > /dev/null 2>&1 ; then -wx_version=`wx-config --version | sed 's/[^0-9]//g'` -if test "$wx_version" -lt 254 ; then -wx_too_old="yes" -else -has_wx="yes" -fi -fi + if $cc $wx_cflags -o $TMPO $TMPCPP $wx_lflags > /dev/null 2>&1 ; then + wx_version=`wx-config --version | sed 's/[^0-9]//g'` + if test "$wx_version" -lt 254 ; then + wx_too_old="yes" + else + has_wx="yes" + fi + fi fi #end wx test # If svg isn't disabled if test "$disable_svg" != "yes"; then -# Then we check libxm2 presence via pkg-config - if pkg-config libxml-2.0 --exists > /dev/null 2>&1 ; then - libxml2_cflags=`pkg-config libxml-2.0 --cflags` - libxml2_lib_flags=`pkg-config libxml-2.0 --libs` - has_libxml2="yes" - fi + # Then we check libxm2 presence via pkg-config + if pkg-config libxml-2.0 --exists > /dev/null 2>&1 ; then + libxml2_cflags=`pkg-config libxml-2.0 --cflags` + libxml2_lib_flags=`pkg-config libxml-2.0 --libs` + has_libxml2="yes" + fi fi @@ -1171,16 +1185,16 @@ cat > $TMPC << EOF #include #include int main( void ) { - struct sockaddr_storage saddr; - struct ipv6_mreq mreq6; - getaddrinfo(0,0,0,0); - getnameinfo(0,0,0,0,0,0,0); - IN6_IS_ADDR_MULTICAST( (struct in6_addr *) 0); +struct sockaddr_storage saddr; +struct ipv6_mreq mreq6; +getaddrinfo(0,0,0,0); +getnameinfo(0,0,0,0,0,0,0); +IN6_IS_ADDR_MULTICAST( (struct in6_addr *) 0); } EOF if $cc -o $TMPE $TMPC > /dev/null 2>&1 ; then -has_ipv6="yes" + has_ipv6="yes" fi # look for DVB4linux @@ -1192,7 +1206,7 @@ int main( void ) { EOF if $cc -o $TMPE $TMPC > /dev/null 2>&1 ; then -has_dvb4linux="yes" + has_dvb4linux="yes" fi # look for XMLRPC @@ -1205,7 +1219,7 @@ int main( void ) { EOF if $cc -o $TMPE $TMPC > /dev/null 2>&1 ; then -has_xmlrpc="yes" + has_xmlrpc="yes" fi # look for alsa @@ -1216,7 +1230,7 @@ int main( void ) { EOF if $cc -o $TMPE $TMPC > /dev/null 2>&1 ; then -has_alsa="yes" + has_alsa="yes" fi # look for pulseaudio @@ -1226,7 +1240,7 @@ int main( void ) { } EOF if $cc -o $TMPE $TMPC > /dev/null 2>&1 ; then -has_pulseaudio="yes" + has_pulseaudio="yes" fi #look for jack @@ -1236,7 +1250,18 @@ int main( void ) { } EOF if $cc -o $TMPE $TMPC > /dev/null 2>&1 ; then -has_jack="yes" + has_jack="yes" +fi + +#look for directfb support +cat > $TMPC << EOF +#include +int main( void ) { return 0; } +EOF +directfb_inc="/opt/STM/STLinux-2.3/devkit/sh4/target/usr/include/directfb" +directfb_lib="-ldirectfb -lfusion -ldirect" +if $cc -o $TMPO $TMPC -I$directfb_inc -L$directfb_lib 2> /dev/null ; then + has_directfb="yes" fi #look for X11 shared memory support @@ -1245,10 +1270,10 @@ cat > $TMPC << EOF int main( void ) { return 0; } EOF if $cc -o $TMPO $TMPC -I$X11_PATH/include -L$X11_PATH/lib 2> /dev/null ; then -has_x11="yes" + has_x11="yes" -#look for X11 shared memory support -cat > $TMPC << EOF + #look for X11 shared memory support + cat > $TMPC << EOF #include #include #include @@ -1256,271 +1281,271 @@ cat > $TMPC << EOF int main( void ) { return 0; } EOF -if $cc -o $TMPO $TMPC -I$X11_PATH/include -L$X11_PATH/lib 2> /dev/null ; then -has_x11_shm="yes" -fi + if $cc -o $TMPO $TMPC -I$X11_PATH/include -L$X11_PATH/lib 2> /dev/null ; then + has_x11_shm="yes" + fi -#look for XVideo support -cat > $TMPC << EOF + #look for XVideo support + cat > $TMPC << EOF #include #include #include int main( void ) { return 0; } EOF -if $cc -o $TMPO $TMPC -I$X11_PATH/include -L$X11_PATH/lib 2> /dev/null ; then -has_x11_xv="yes" -fi + if $cc -o $TMPO $TMPC -I$X11_PATH/include -L$X11_PATH/lib 2> /dev/null ; then + has_x11_xv="yes" + fi fi for opt do - case "$opt" in - --sdl-cfg=*) sdl_path=`echo $opt | cut -d '=' -f 2`; sdl_local="yes" - ;; - --enable-sdl-static=*) sdl_static="yes" - ;; - --enable-jack=*) has_jack="yes" - ;; - --X11-path=*) X11_PATH=`echo $opt | cut -d '=' -f 2` - ;; - --dxsdk-path=*) dxsdk_path=`echo $opt | cut -d '=' -f 2` - ;; - --xulsdk-path=*) xulsdk_path=`echo $opt | cut -d '=' -f 2` - ;; - --mozdir=*) moz_path=`echo $opt | cut -d '=' -f 2` - ;; - --enable-amr-nb-fixed) has_amr_nb_fixed="yes" - ;; - --disable-pulseaudio=*) has_pulseaudio="no" - ;; - --enable-amr-nb) has_amr_nb="yes" - ;; - --enable-amr-wb) has_amr_wb="yes" - ;; - --enable-amr) has_amr_wb="yes"; has_amr_nb="yes" - ;; - --disable-oggvorbis) has_oggvorbis="no" - ;; - --disable-jack=*) has_jack="no" - ;; - --disable-alsa=*) has_alsa="no" - ;; - --enable-debug) debuginfo="yes"; no_gcc_opt="yes" - ;; - --enable-gprof) gprof_build="yes"; - ;; - --enable-static-bin) static_build="yes"; - ;; - --enable-pic) want_pic="yes"; - ;; - --disable-opt) no_gcc_opt="yes" - ;; - --disable-ipv6) has_ipv6="no" - ;; - --disable-wx) has_wx="no" - ;; - --disable-oss-audio) has_oss_audio="no" - ;; - --disable-x11-shm) has_x11_shm="no" - ;; - --disable-x11-xv) has_x11_xv="no" - ;; - --enable-fixed-point) use_fixed_point="yes" - ;; - --strip) INSTFLAGS="-s $INSTFLAGS" - ;; - --std-allocator) use_std_alloc="yes" - ;; - --track-memory) use_memory_tracking="yes" - ;; - --enable-tinygl) enable_tinygl="yes" - ;; - --disable-ssl) has_ssl="no" - ;; - --enable-depth) enable_depth_compositor="yes" - ;; - --static-mp4box) static_mp4box="yes" - ;; - --use-faad=*) has_faad=${opt#--use-faad=} - ;; - --use-js=*) has_js=${opt#--use-js=} - ;; - --use-ft=*) has_ft=${opt#--use-ft=} - ;; - --use-mad=*) has_mad=${opt#--use-mad=} - ;; - --use-a52=*) has_a52=${opt#--use-a52=} - ;; - --use-xvid=*) has_xvid=${opt#--use-xvid=} - ;; - --use-jpeg=*) has_jpeg=${opt#--use-jpeg=} - ;; - --use-ffmpeg=*) has_ffmpeg=${opt#--use-ffmpeg=} - ;; - --use-png=*) tmp_has_png=${opt#--use-png=} -if test "$tmp_has_png" = "system" ; then - if test "$has_png" != "system" ; then - if test "$cross_prefix" != "" ; then - echo - echo "WARNING: PNG has been forced to system, but we are cross-compiling, it will have to be on target" - echo - else - echo - echo "WARNING!! : PNG has been forced to system even though it hasn't been found in this host" - echo - fi - fi -fi -has_png=$tmp_has_png - ;; - --use-ogg=*) has_ogg=${opt#--use-ogg=} - ;; - --use-vorbis=*) has_vorbis=${opt#--use-vorbis=} - ;; - --use-theora=*) has_theora=${opt#--use-theora=} - ;; - --use-openjpeg=*) has_openjpeg=${opt#--use-openjpeg=} - ;; - --enable-joystick) enable_joystick="yes" - ;; - --enable-pulseaudio=*) has_pulseaudio="yes" - ;; - - --disable-all) has_pulseaudio="no"; disable_3d="yes"; disable_svg="yes"; disable_vrml="yes"; disable_od="yes"; disable_bifs="yes"; disable_bifs_enc="yes"; disable_laser="yes"; disable_beng="yes"; disable_qtvr="yes"; disable_avi="yes"; disable_ogg="yes"; disable_m2ps="yes"; disable_m2ts="yes"; disable_m2ts_mux="yes"; disable_parsers="yes"; disable_import="yes"; disable_export="yes"; disable_swf="yes"; disable_scene_stats="yes"; disable_scene_dump="yes"; disable_scene_encode="yes"; disable_loader_isoff="yes"; disable_od_dump="yes"; disable_mcrypt="yes"; disable_isoff="yes"; disable_isoff_write="yes"; disable_isoff_hint="yes"; disable_isoff_frag="yes"; disable_streaming="yes"; disable_x3d="yes"; disable_loader_bt="yes"; disable_loader_xmt="yes" - ;; - - --disable-3d) disable_3d="yes" - ;; - --enable-3d) disable_3d="no" - ;; - --disable-svg) disable_svg="yes" - ;; - --enable-svg) disable_svg="no" - ;; - --disable-vrml) disable_vrml="yes" - ;; - --enable-vrml) disable_vrml="no" - ;; - --disable-x3d) disable_x3d="yes" - ;; - --enable-x3d) disable_x3d="no" - ;; - --disable-odf) disable_od="yes" - ;; - --enable-odf) disable_od="no" - ;; - --disable-bifs) disable_bifs="yes" - ;; - --enable-bifs) disable_bifs="no" - ;; - --disable-bifs-enc) disable_bifs_enc="yes" - ;; - --enable-bifs-enc) disable_bifs_enc="no" - ;; - --disable-laser) disable_laser="yes" - ;; - --enable-laser) disable_laser="no" - ;; - --disable-beng) disable_beng="yes" - ;; - --enable-beng) disable_beng="no" - ;; - --disable-qtvr) disable_qtvr="yes" - ;; - --enable-qtvr) disable_qtvr="no" - ;; - --disable-avi) disable_avi="yes" - ;; - --enable-avi) disable_avi="no" - ;; - --disable-ogg) disable_ogg="yes" - ;; - --enable-ogg) disable_ogg="no" - ;; - --disable-m2ps) disable_m2ps="yes" - ;; - --enable-m2ps) disable_m2ps="no" - ;; - --disable-m2ts) disable_m2ts="yes" - ;; - --enable-m2ts) disable_m2ts="no" - ;; - --disable-m2ts-mux) disable_m2ts_mux="yes" - ;; - --enable-m2ts-mux) disable_m2ts_mux="no" - ;; - --disable-parsers) disable_parsers="yes" - ;; - --enable-parsers) disable_parsers="no" - ;; - --disable-import) disable_import="yes" - ;; - --enable-import) disable_import="no" - ;; - --disable-export) disable_export="yes" - ;; - --enable-export) disable_export="no" - ;; - --disable-swf) disable_swf="yes" - ;; - --enable-swf) disable_swf="no" - ;; - --disable-scene-stats) disable_scene_stats="yes" - ;; - --enable-scene-stats) disable_scene_stats="no" - ;; - --disable-scene-dump) disable_scene_dump="yes" - ;; - --enable-scene-dump) disable_scene_dump="no" - ;; - --disable-scene-encode) disable_scene_encode="yes" - ;; - --enable-scene-encode) disable_scene_encode="no" - ;; - --disable-loader-isoff) disable_loader_isoff="yes" - ;; - --enable-loader-isoff) disable_loader_isoff="no" - ;; - --disable-loader-bt) disable_loader_bt="yes" - ;; - --enable-loader-bt) disable_loader_bt="no" - ;; - --disable-loader-xmt) disable_loader_xmt="yes" - ;; - --enable-loader-xmt) disable_loader_xmt="no" - ;; - --disable-od-dump) disable_od_dump="yes" - ;; - --enable-od-dump) disable_od_dump="no" - ;; - --disable-mcrypt) disable_mcrypt="yes" - ;; - --enable-mcrypt) disable_mcrypt="no" - ;; - --disable-isoff) disable_isoff="yes" - ;; - --enable-isoff) disable_isoff="no" - ;; - --disable-isoff-write) disable_isoff_write="yes" - ;; - --enable-isoff-write) disable_isoff_write="no" - ;; - --disable-isoff-hint) disable_isoff_hint="yes" - ;; - --enable-isoff-hint) disable_isoff_hint="no" - ;; - --disable-isoff-frag) disable_isoff_frag="yes" - ;; - --enable-isoff-frag) disable_isoff_frag="no" - ;; - --disable-streaming) disable_streaming="yes" - ;; - --enable-streaming) disable_streaming="no" - ;; - - - esac + case "$opt" in + --sdl-cfg=*) sdl_path=`echo $opt | cut -d '=' -f 2`; sdl_local="yes" + ;; + --enable-sdl-static=*) sdl_static="yes" + ;; + --enable-jack=*) has_jack="yes" + ;; + --X11-path=*) X11_PATH=`echo $opt | cut -d '=' -f 2` + ;; + --dxsdk-path=*) dxsdk_path=`echo $opt | cut -d '=' -f 2` + ;; + --xulsdk-path=*) xulsdk_path=`echo $opt | cut -d '=' -f 2` + ;; + --mozdir=*) moz_path=`echo $opt | cut -d '=' -f 2` + ;; + --enable-amr-nb-fixed) has_amr_nb_fixed="yes" + ;; + --disable-pulseaudio=*) has_pulseaudio="no" + ;; + --enable-amr-nb) has_amr_nb="yes" + ;; + --enable-amr-wb) has_amr_wb="yes" + ;; + --enable-amr) has_amr_wb="yes"; has_amr_nb="yes" + ;; + --disable-oggvorbis) has_oggvorbis="no" + ;; + --disable-jack=*) has_jack="no" + ;; + --disable-alsa=*) has_alsa="no" + ;; + --enable-debug) debuginfo="yes"; no_gcc_opt="yes" + ;; + --enable-gprof) gprof_build="yes"; + ;; + --enable-static-bin) static_build="yes"; + ;; + --enable-pic) want_pic="yes"; + ;; + --disable-opt) no_gcc_opt="yes" + ;; + --disable-ipv6) has_ipv6="no" + ;; + --disable-wx) has_wx="no" + ;; + --disable-oss-audio) has_oss_audio="no" + ;; + --disable-x11-shm) has_x11_shm="no" + ;; + --disable-x11-xv) has_x11_xv="no" + ;; + --enable-fixed-point) use_fixed_point="yes" + ;; + --strip) INSTFLAGS="-s $INSTFLAGS" + ;; + --std-allocator) use_std_alloc="yes" + ;; + --track-memory) use_memory_tracking="yes" + ;; + --enable-tinygl) enable_tinygl="yes" + ;; + --disable-ssl) has_ssl="no" + ;; + --enable-depth) enable_depth_compositor="yes" + ;; + --static-mp4box) static_mp4box="yes" + ;; + --use-faad=*) has_faad=${opt#--use-faad=} + ;; + --use-js=*) has_js=${opt#--use-js=} + ;; + --use-ft=*) has_ft=${opt#--use-ft=} + ;; + --use-mad=*) has_mad=${opt#--use-mad=} + ;; + --use-a52=*) has_a52=${opt#--use-a52=} + ;; + --use-xvid=*) has_xvid=${opt#--use-xvid=} + ;; + --use-jpeg=*) has_jpeg=${opt#--use-jpeg=} + ;; + --use-ffmpeg=*) has_ffmpeg=${opt#--use-ffmpeg=} + ;; + --use-png=*) tmp_has_png=${opt#--use-png=} + if test "$tmp_has_png" = "system" ; then + if test "$has_png" != "system" ; then + if test "$cross_prefix" != "" ; then + echo + echo "WARNING: PNG has been forced to system, but we are cross-compiling, it will have to be on target" + echo + else + echo + echo "WARNING!! : PNG has been forced to system even though it hasn't been found in this host" + echo + fi + fi + fi + has_png=$tmp_has_png + ;; + --use-ogg=*) has_ogg=${opt#--use-ogg=} + ;; + --use-vorbis=*) has_vorbis=${opt#--use-vorbis=} + ;; + --use-theora=*) has_theora=${opt#--use-theora=} + ;; + --use-openjpeg=*) has_openjpeg=${opt#--use-openjpeg=} + ;; + --enable-joystick) enable_joystick="yes" + ;; + --enable-pulseaudio=*) has_pulseaudio="yes" + ;; + + --disable-all) has_pulseaudio="no"; disable_3d="yes"; disable_svg="yes"; disable_vrml="yes"; disable_od="yes"; disable_bifs="yes"; disable_bifs_enc="yes"; disable_laser="yes"; disable_beng="yes"; disable_qtvr="yes"; disable_avi="yes"; disable_ogg="yes"; disable_m2ps="yes"; disable_m2ts="yes"; disable_m2ts_mux="yes"; disable_parsers="yes"; disable_import="yes"; disable_export="yes"; disable_swf="yes"; disable_scene_stats="yes"; disable_scene_dump="yes"; disable_scene_encode="yes"; disable_loader_isoff="yes"; disable_od_dump="yes"; disable_mcrypt="yes"; disable_isoff="yes"; disable_isoff_write="yes"; disable_isoff_hint="yes"; disable_isoff_frag="yes"; disable_streaming="yes"; disable_x3d="yes"; disable_loader_bt="yes"; disable_loader_xmt="yes"; has_dvb4linux="no" + ;; + + --disable-3d) disable_3d="yes" + ;; + --enable-3d) disable_3d="no" + ;; + --disable-svg) disable_svg="yes" + ;; + --enable-svg) disable_svg="no" + ;; + --disable-vrml) disable_vrml="yes" + ;; + --enable-vrml) disable_vrml="no" + ;; + --disable-x3d) disable_x3d="yes" + ;; + --enable-x3d) disable_x3d="no" + ;; + --disable-odf) disable_od="yes" + ;; + --enable-odf) disable_od="no" + ;; + --disable-bifs) disable_bifs="yes" + ;; + --enable-bifs) disable_bifs="no" + ;; + --disable-bifs-enc) disable_bifs_enc="yes" + ;; + --enable-bifs-enc) disable_bifs_enc="no" + ;; + --disable-laser) disable_laser="yes" + ;; + --enable-laser) disable_laser="no" + ;; + --disable-beng) disable_beng="yes" + ;; + --enable-beng) disable_beng="no" + ;; + --disable-qtvr) disable_qtvr="yes" + ;; + --enable-qtvr) disable_qtvr="no" + ;; + --disable-avi) disable_avi="yes" + ;; + --enable-avi) disable_avi="no" + ;; + --disable-ogg) disable_ogg="yes" + ;; + --enable-ogg) disable_ogg="no" + ;; + --disable-m2ps) disable_m2ps="yes" + ;; + --enable-m2ps) disable_m2ps="no" + ;; + --disable-m2ts) disable_m2ts="yes" + ;; + --enable-m2ts) disable_m2ts="no" + ;; + --disable-m2ts-mux) disable_m2ts_mux="yes" + ;; + --enable-m2ts-mux) disable_m2ts_mux="no" + ;; + --disable-parsers) disable_parsers="yes" + ;; + --enable-parsers) disable_parsers="no" + ;; + --disable-import) disable_import="yes" + ;; + --enable-import) disable_import="no" + ;; + --disable-export) disable_export="yes" + ;; + --enable-export) disable_export="no" + ;; + --disable-swf) disable_swf="yes" + ;; + --enable-swf) disable_swf="no" + ;; + --disable-scene-stats) disable_scene_stats="yes" + ;; + --enable-scene-stats) disable_scene_stats="no" + ;; + --disable-scene-dump) disable_scene_dump="yes" + ;; + --enable-scene-dump) disable_scene_dump="no" + ;; + --disable-scene-encode) disable_scene_encode="yes" + ;; + --enable-scene-encode) disable_scene_encode="no" + ;; + --disable-loader-isoff) disable_loader_isoff="yes" + ;; + --enable-loader-isoff) disable_loader_isoff="no" + ;; + --disable-loader-bt) disable_loader_bt="yes" + ;; + --enable-loader-bt) disable_loader_bt="no" + ;; + --disable-loader-xmt) disable_loader_xmt="yes" + ;; + --enable-loader-xmt) disable_loader_xmt="no" + ;; + --disable-od-dump) disable_od_dump="yes" + ;; + --enable-od-dump) disable_od_dump="no" + ;; + --disable-mcrypt) disable_mcrypt="yes" + ;; + --enable-mcrypt) disable_mcrypt="no" + ;; + --disable-isoff) disable_isoff="yes" + ;; + --enable-isoff) disable_isoff="no" + ;; + --disable-isoff-write) disable_isoff_write="yes" + ;; + --enable-isoff-write) disable_isoff_write="no" + ;; + --disable-isoff-hint) disable_isoff_hint="yes" + ;; + --enable-isoff-hint) disable_isoff_hint="no" + ;; + --disable-isoff-frag) disable_isoff_frag="yes" + ;; + --enable-isoff-frag) disable_isoff_frag="no" + ;; + --disable-streaming) disable_streaming="yes" + ;; + --enable-streaming) disable_streaming="no" + ;; + + + esac done #look for OpenGL support or for TinyGL support @@ -1530,13 +1555,13 @@ INCL3D="" DarwinGL="no" if test "$darwin" = "yes" ; then -cat > $TMPC << EOF + cat > $TMPC << EOF #include #include int main( void ) { glEnable(GL_NORMALIZE); return 0; } EOF else -cat > $TMPC << EOF + cat > $TMPC << EOF #include #include int main( void ) { glEnable(GL_NORMALIZE); return 0; } @@ -1544,28 +1569,28 @@ EOF fi if test "$disable_3d" = "no" ; then - if test "$win32" = "yes" ; then - if test "$cygwin" = "yes" ; then - LINK3D="-lw32api/opengl32 -lw32api/glu32" + if test "$win32" = "yes" ; then + if test "$cygwin" = "yes" ; then + LINK3D="-lw32api/opengl32 -lw32api/glu32" + else + LINK3D="-lopengl32 -lglu32" + fi + elif test "$darwin" = "yes" ; then + LINK3D="-framework OpenGL -framework GLUT" + DarwinGL="yes" else - LINK3D="-lopengl32 -lglu32" + LINK3D="-lGL -lGLU -lX11" + fi + if $cc -o $TMPO $TMPC $LINK3D 2> /dev/null ; then + has_opengl="yes" + elif $cc -o $TMPO $TMPC -I$X11_PATH/include -L$X11_PATH/lib 2> /dev/null ; then + has_opengl="yes" + INCL3D="-I$X11_PATH/include" + LINK3D="-L$X11_PATH/lib $LINK3D" + fi + if test "$has_opengl" = "no" ; then + LINK3D="" fi - elif test "$darwin" = "yes" ; then - LINK3D="-framework OpenGL -framework GLUT" - DarwinGL="yes" - else - LINK3D="-lGL -lGLU -lX11" - fi - if $cc -o $TMPO $TMPC $LINK3D 2> /dev/null ; then - has_opengl="yes" - elif $cc -o $TMPO $TMPC -I$X11_PATH/include -L$X11_PATH/lib 2> /dev/null ; then - has_opengl="yes" - INCL3D="-I$X11_PATH/include" - LINK3D="-L$X11_PATH/lib $LINK3D" - fi - if test "$has_opengl" = "no" ; then - LINK3D="" - fi fi cat > $TMPC << EOF @@ -1573,36 +1598,36 @@ cat > $TMPC << EOF int main( void ) { int a ; a = TINYGL ; } EOF if test "$enable_tinygl" = "yes" ;then - if $cc -o $TMPO $TMPC -lTinyGL 2> /dev/null ; then - has_tinygl="yes" - has_opengl="yes" - LINK3D="-lTinyGL" -fi + if $cc -o $TMPO $TMPC -lTinyGL 2> /dev/null ; then + has_tinygl="yes" + has_opengl="yes" + LINK3D="-lTinyGL" + fi fi #look for GECKO support cat > $TMPCPP << EOF -#include +#include int main( void ) { return 0; } EOF -if $cc -o $TMPO $TMPCPP -I$xulsdk_path 2> /dev/null ; then -has_xul="system" -xul_flags="-I$xulsdk_path $xul_flags" -else -if $cc -o $TMPO $TMPCPP $xul_flags -I$local_inc/gecko-sdk/include 2> /dev/null ; then -has_xul="local" -xul_flags="-I$local_inc/gecko-sdk/include $xul_flags" +if $cc -o $TMPO $TMPCPP -I$xulsdk_path $CFLAGS $LDFLAGS 2> /dev/null ; then + has_xul="system" + xul_flags="-I$xulsdk_path $xul_flags" else -#xulrunner directories are sometimes included through js packages -if test "$has_js" = "system" ;then - if $cpp -o $TMPO $TMPCPP $js_flags $js_lib_pkg 2> /dev/null ; then - xul_flags=`pkg-config --cflags mozilla-js` - has_xul="system" - fi -fi -fi + if $cc -o $TMPO $TMPCPP $xul_flags -I$local_inc/gecko-sdk/include 2> /dev/null ; then + has_xul="local" + xul_flags="-I$local_inc/gecko-sdk/include $xul_flags" + else + #xulrunner directories are sometimes included through js packages + if test "$has_js" = "system" ;then + if $cpp -o $TMPO $TMPCPP $js_flags $js_lib_pkg 2> /dev/null ; then + xul_flags=`pkg-config --cflags mozilla-js` + has_xul="system" + fi + fi + fi fi @@ -1613,20 +1638,20 @@ int main( void ) { return 0; } EOF if test "$enable_joystick" = "yes" ;then if $cc -o $TMPO $TMPC 2> /dev/null ; then - has_joystick="yes" + has_joystick="yes" fi fi #GCC opt if test "$no_gcc_opt" = "no"; then -if $cc --version | grep 'sbox-arm-linux-gcc (GCC) 3.4.4' -then - echo "Detected buggy arm GCC (diablo), using -O2" - CFLAGS="-O2 $CFLAGS" -else - CFLAGS="-O3 $CFLAGS" -fi + if $cc --version | grep 'sbox-arm-linux-gcc (GCC) 3.4.4' + then + echo "Detected buggy arm GCC (diablo), using -O2" + CFLAGS="-O2 $CFLAGS" + else + CFLAGS="-O3 $CFLAGS" + fi fi #look for DX support @@ -1634,19 +1659,19 @@ dx_path="system" has_mingw_directx="no" if test "$win32" = "yes" ; then -cat > $TMPC << EOF + cat > $TMPC << EOF #include int main( void ) { return 0; } EOF -if $cc -o $TMPO $TMPC 2> /dev/null ; then -has_mingw_directx="yes" -else -dx_path="$dxsdk_path" -if $cc -o $TMPO $TMPC -I$dxsdk_path/include -L$dxsdk_path/lib -lddraw 2> /dev/null ; then -has_mingw_directx="yes" -fi -fi + if $cc -o $TMPO $TMPC 2> /dev/null ; then + has_mingw_directx="yes" + else + dx_path="$dxsdk_path" + if $cc -o $TMPO $TMPC -I$dxsdk_path/include -L$dxsdk_path/lib -lddraw 2> /dev/null ; then + has_mingw_directx="yes" + fi + fi fi @@ -1656,33 +1681,33 @@ sdl_too_old=no has_sdl=no sdl_config="sdl-config" if test "$sdl_local" = "yes"; then -sdl_config="$sdl_path/sdl-config" -sdl_static="yes" + sdl_config="$sdl_path/sdl-config" + sdl_static="yes" fi if type $sdl_config >/dev/null 2>&1; then -cat > $TMPC << EOF + cat > $TMPC << EOF #include #undef main int main( void ) { return SDL_Init (SDL_INIT_VIDEO); } EOF -if test "$sdl_static" = "yes"; then -sdl_lib_flags=`$sdl_config --static-libs` -else -sdl_lib_flags=`$sdl_config --libs` -fi -sdl_cflags=`$sdl_config --cflags` - -if $cc -o $TMPO $sdl_cflags $TMPC $sdl_lib_flags > /dev/null 2>&1 ; then -_sdlversion=`$sdl_config --version | sed 's/[^0-9]//g'` -if test "$_sdlversion" -lt 121 ; then -sdl_too_old=yes -else -has_sdl=yes -fi -fi + if test "$sdl_static" = "yes"; then + sdl_lib_flags=`$sdl_config --static-libs` + else + sdl_lib_flags=`$sdl_config --libs` + fi + sdl_cflags=`$sdl_config --cflags` + + if $cc -o $TMPO $sdl_cflags $TMPC $sdl_lib_flags > /dev/null 2>&1 ; then + _sdlversion=`$sdl_config --version | sed 's/[^0-9]//g'` + if test "$_sdlversion" -lt 121 ; then + sdl_too_old=yes + else + has_sdl=yes + fi + fi fi #end SDL check @@ -1690,48 +1715,49 @@ fi if test -z "$cross_prefix" ; then -# big/little endian test -cat > $TMPC << EOF + # big/little endian test + cat > $TMPC << EOF #include int main(int argc, char ** argv){ - volatile uint32_t i=0x01234567; - return (*((uint8_t*)(&i))) == 0x67; +volatile uint32_t i=0x01234567; +return (*((uint8_t*)(&i))) == 0x67; } EOF -if $cc -o $TMPO $TMPC 2>/dev/null ; then -$TMPO && bigendian="yes" -else -echo big/little endian test failed -fi + if $cc -o $TMPO $TMPC 2>/dev/null ; then + $TMPO && bigendian="yes" + else + echo big/little endian test failed + fi else -# if cross compiling, cannot launch a program, so make a static guess -if test "$cpu" = "powerpc" -o "$cpu" = "mips" ; then - bigendian="yes" -fi + # if cross compiling, cannot launch a program, so make a static guess + if test "$cpu" = "powerpc" -o "$cpu" = "mips" ; then + bigendian="yes" + fi fi + if test x"$mandir" = x""; then -mandir="${prefix}/man" + mandir="${prefix}/man" fi if test "$static_mp4box" = "yes"; then -has_opengl="no" -has_ssl="no" -has_js="no" -has_jpeg="no" -has_png="no" + has_opengl="no" + has_ssl="no" + has_js="no" + has_jpeg="no" + has_png="no" fi if test "$cpu" = "sh4"; then -viren_dir="`ls \"$source_path/modules\" | grep viren_out`" -if test "$viren_dir" = "viren_out"; then -enable_depth_compositor="yes" -enable_renoir="yes" -fi + viren_dir="`ls \"$source_path/modules\" | grep viren_out`" + if test "$viren_dir" = "viren_out"; then + enable_depth_compositor="yes" + enable_renoir="yes" + fi fi #prepare for config.h writing @@ -1746,10 +1772,10 @@ version="`grep '#define GPAC_VERSION ' \"$source_path/include/gpac/tools.h\" | c if which svnversion >/dev/null then - revision="`svnversion \"$source_path\"`" - echo "#define GPAC_SVN_REVISION \"$revision\"" > $source_path/include/gpac/version.h + revision="`svnversion \"$source_path\"`" + echo "#define GPAC_SVN_REVISION \"$revision\"" > $source_path/include/gpac/version.h else - echo "Cannot find SVN revision" + echo "Cannot find SVN revision" fi echo "" @@ -1762,7 +1788,7 @@ echo "make: $make" echo "CPU: $cpu" echo "Big Endian: $bigendian" if test $cpu = "mips"; then -echo "MMI enabled: $mmi" + echo "MMI enabled: $mmi" fi echo "" echo "** GPAC $version rev$revision Core Configuration **" @@ -1776,133 +1802,133 @@ echo "IPV6 Support: $has_ipv6" if test "$disable_svg" = "yes" ; then -echo "SVG disabled" -echo "#define GPAC_DISABLE_SVG" >> $TMPH + echo "SVG disabled" + echo "#define GPAC_DISABLE_SVG" >> $TMPH fi if test "$disable_vrml" = "yes" ; then -echo "MPEG-4/VRML/X3D disabled" -echo "#define GPAC_DISABLE_VRML" >> $TMPH + echo "MPEG-4/VRML/X3D disabled" + echo "#define GPAC_DISABLE_VRML" >> $TMPH fi if test "$disable_x3d" = "yes" ; then -echo "X3D disabled" -echo "#define GPAC_DISABLE_X3D" >> $TMPH + echo "X3D disabled" + echo "#define GPAC_DISABLE_X3D" >> $TMPH fi if test "$disable_od" = "yes" ; then -echo "OD Full support disabled" -echo "#define GPAC_MINIMAL_ODF" >> $TMPH + echo "OD Full support disabled" + echo "#define GPAC_MINIMAL_ODF" >> $TMPH fi if test "$disable_bifs" = "yes" ; then -echo "BIFS coder disabled" -echo "#define GPAC_DISABLE_BIFS" >> $TMPH + echo "BIFS coder disabled" + echo "#define GPAC_DISABLE_BIFS" >> $TMPH fi if test "$disable_bifs_enc" = "yes" ; then -echo "BIFS encoder disabled" -echo "#define GPAC_DISABLE_BIFS_ENC" >> $TMPH + echo "BIFS encoder disabled" + echo "#define GPAC_DISABLE_BIFS_ENC" >> $TMPH fi if test "$disable_laser" = "yes" ; then -echo "LASeR coder disabled" -echo "#define GPAC_DISABLE_LASER" >> $TMPH + echo "LASeR coder disabled" + echo "#define GPAC_DISABLE_LASER" >> $TMPH fi if test "$disable_beng" = "yes" ; then -echo "Scene encoder engine disabled" -echo "#define GPAC_DISABLE_SENG" >> $TMPH + echo "Scene encoder engine disabled" + echo "#define GPAC_DISABLE_SENG" >> $TMPH fi if test "$disable_qtvr" = "yes" ; then -echo "Cubic QTVR import disabled" -echo "#define GPAC_DISABLE_QTVR" >> $TMPH + echo "Cubic QTVR import disabled" + echo "#define GPAC_DISABLE_QTVR" >> $TMPH fi if test "$disable_avi" = "yes" ; then -echo "AVI disabled" -echo "#define GPAC_DISABLE_AVILIB" >> $TMPH + echo "AVI disabled" + echo "#define GPAC_DISABLE_AVILIB" >> $TMPH fi if test "$disable_ogg" = "yes" ; then -echo "OGG disabled" -echo "#define GPAC_DISABLE_OGG" >> $TMPH + echo "OGG disabled" + echo "#define GPAC_DISABLE_OGG" >> $TMPH fi if test "$disable_m2ps" = "yes" ; then -echo "MPEG-2 PS disabled" -echo "#define GPAC_DISABLE_MPEG2PS" >> $TMPH + echo "MPEG-2 PS disabled" + echo "#define GPAC_DISABLE_MPEG2PS" >> $TMPH fi if test "$disable_m2ts" = "yes" ; then -echo "MPEG-2 TS disabled" -echo "#define GPAC_DISABLE_MPEG2TS" >> $TMPH + echo "MPEG-2 TS disabled" + echo "#define GPAC_DISABLE_MPEG2TS" >> $TMPH fi if test "$disable_m2ts_mux" = "yes" ; then -echo "MPEG-2 TS Multiplexer disabled" -echo "#define GPAC_DISABLE_MPEG2TS_MUX" >> $TMPH + echo "MPEG-2 TS Multiplexer disabled" + echo "#define GPAC_DISABLE_MPEG2TS_MUX" >> $TMPH fi if test "$disable_parsers" = "yes" ; then -echo "AV Parsers disabled" -echo "#define GPAC_DISABLE_AV_PARSERS" >> $TMPH + echo "AV Parsers disabled" + echo "#define GPAC_DISABLE_AV_PARSERS" >> $TMPH fi if test "$disable_import" = "yes" ; then -echo "Media importers disabled" -echo "#define GPAC_DISABLE_MEDIA_IMPORT" >> $TMPH + echo "Media importers disabled" + echo "#define GPAC_DISABLE_MEDIA_IMPORT" >> $TMPH fi if test "$disable_export" = "yes" ; then -echo "Media exmporters disabled" -echo "#define GPAC_DISABLE_MEDIA_EXPORT" >> $TMPH + echo "Media exmporters disabled" + echo "#define GPAC_DISABLE_MEDIA_EXPORT" >> $TMPH fi if test "$disable_swf" = "yes" ; then -echo "SWF import disabled" -echo "#define GPAC_DISABLE_SWF_IMPORT" >> $TMPH + echo "SWF import disabled" + echo "#define GPAC_DISABLE_SWF_IMPORT" >> $TMPH fi if test "$disable_scene_stats" = "yes" ; then -echo "Scene statistics disabled" -echo "#define GPAC_DISABLE_SCENE_STATS" >> $TMPH + echo "Scene statistics disabled" + echo "#define GPAC_DISABLE_SCENE_STATS" >> $TMPH fi if test "$disable_scene_dump" = "yes" ; then -echo "Scene dump disabled" -echo "#define GPAC_DISABLE_SCENE_DUMP" >> $TMPH + echo "Scene dump disabled" + echo "#define GPAC_DISABLE_SCENE_DUMP" >> $TMPH fi if test "$disable_scene_encode" = "yes" ; then -echo "Scene encoder to ISO FF disabled" -echo "#define GPAC_DISABLE_SCENE_ENCODER" >> $TMPH + echo "Scene encoder to ISO FF disabled" + echo "#define GPAC_DISABLE_SCENE_ENCODER" >> $TMPH fi if test "$disable_loader_isoff" = "yes" ; then -echo "Scene loader from ISO FF disabled" -echo "#define GPAC_DISABLE_LOADER_ISOM" >> $TMPH + echo "Scene loader from ISO FF disabled" + echo "#define GPAC_DISABLE_LOADER_ISOM" >> $TMPH fi if test "$disable_loader_bt" = "yes" ; then -echo "BT/WRL Scene loader disabled" -echo "#define GPAC_DISABLE_LOADER_BT" >> $TMPH + echo "BT/WRL Scene loader disabled" + echo "#define GPAC_DISABLE_LOADER_BT" >> $TMPH fi if test "$disable_loader_xmt" = "yes" ; then -echo "XMT/X3D Scene loader disabled" -echo "#define GPAC_DISABLE_LOADER_XMT" >> $TMPH + echo "XMT/X3D Scene loader disabled" + echo "#define GPAC_DISABLE_LOADER_XMT" >> $TMPH fi if test "$disable_od_dump" = "yes" ; then -echo "OD dump disabled" -echo "#define GPAC_DISABLE_OD_DUMP" >> $TMPH + echo "OD dump disabled" + echo "#define GPAC_DISABLE_OD_DUMP" >> $TMPH fi if test "$disable_mcrypt" = "yes" ; then -echo "MCrypt disabled" -echo "#define GPAC_DISABLE_MCRYPT" >> $TMPH + echo "MCrypt disabled" + echo "#define GPAC_DISABLE_MCRYPT" >> $TMPH fi if test "$disable_isoff" = "yes" ; then -echo "ISO File Format disabled" -echo "#define GPAC_DISABLE_ISOM" >> $TMPH + echo "ISO File Format disabled" + echo "#define GPAC_DISABLE_ISOM" >> $TMPH fi if test "$disable_isoff_write" = "yes" ; then -echo "ISO File Format write disabled" -echo "#define GPAC_DISABLE_ISOM_WRITE" >> $TMPH + echo "ISO File Format write disabled" + echo "#define GPAC_DISABLE_ISOM_WRITE" >> $TMPH fi if test "$disable_isoff_hint" = "yes" ; then -echo "ISO File Format hinting disabled" -echo "#define GPAC_DISABLE_ISOM_HINTING" >> $TMPH + echo "ISO File Format hinting disabled" + echo "#define GPAC_DISABLE_ISOM_HINTING" >> $TMPH fi if test "$disable_isoff_frag" = "yes" ; then -echo "ISO File Format fragments disabled" -echo "#define GPAC_DISABLE_ISOM_FRAGMENTS" >> $TMPH + echo "ISO File Format fragments disabled" + echo "#define GPAC_DISABLE_ISOM_FRAGMENTS" >> $TMPH fi if test "$disable_streaming" = "yes" ; then -echo "RTP/RTSP/SDP streaming disabled" -echo "#define GPAC_DISABLE_STREAMING" >> $TMPH + echo "RTP/RTSP/SDP streaming disabled" + echo "#define GPAC_DISABLE_STREAMING" >> $TMPH fi if test "$enable_depth_compositor" = "yes" ; then -echo "Depth Compositor enabled" -echo "#define GF_SR_USE_DEPTH" >> $TMPH + echo "Depth Compositor enabled" + echo "#define GF_SR_USE_DEPTH" >> $TMPH fi echo "" @@ -1911,17 +1937,18 @@ echo "** Detected libraries **" echo "zlib: $has_zlib" if test "$win32" != "yes" ; then -echo "OSS Audio: $has_oss_audio" -echo "ALSA Audio: $has_alsa" -echo "Jack Audio: $has_jack" -echo "PulseAudio Audio: $has_pulseaudio" -echo "X11 Shared Memory support: $has_x11_shm (path: $X11_PATH)" -echo "X11 XVideo support: $has_x11_xv" + echo "OSS Audio: $has_oss_audio" + echo "ALSA Audio: $has_alsa" + echo "Jack Audio: $has_jack" + echo "PulseAudio Audio: $has_pulseaudio" + echo "DirectFB support: $has_directfb" + echo "X11 Shared Memory support: $has_x11_shm (path: $X11_PATH)" + echo "X11 XVideo support: $has_x11_xv" fi echo "SDL Support: $has_sdl" if test "$sdl_too_old" = "yes" ; then -echo "SDL Version too old - please upgrade for SDL support" + echo "SDL Version too old - please upgrade for SDL support" fi echo "OpenGL support: $has_opengl" echo "TinyGL support: $has_tinygl" @@ -1930,22 +1957,22 @@ echo "OpenSSL support: $has_ssl" echo "Mozilla XUL/GECKO support: $has_xul" if test "$win32" = "yes" ; then -echo "DirectX Support: $has_mingw_directx" + echo "DirectX Support: $has_mingw_directx" fi if test "$linux" = "yes" ; then -echo "DVB Support: $has_dvb4linux" + echo "DVB Support: $has_dvb4linux" fi echo "XMLPRC Support: $has_xmlrpc" if test "$wx_too_old" = "yes" ; then -has_wx="no" -echo "wxWidgets Version too old - please upgrade to 2.6.0 for wxWidgets support" + has_wx="no" + echo "wxWidgets Version too old - please upgrade to 2.6.0 for wxWidgets support" fi if test "$has_wx" = "yes" ; then -echo "wxWidgets support: Version $wx_version" + echo "wxWidgets support: Version $wx_version" else -echo "wxWidgets support: no" + echo "wxWidgets support: no" fi @@ -1962,66 +1989,66 @@ echo "XVID: $has_xvid" echo "FFMPEG: $has_ffmpeg" echo "Xiph OGG: $has_ogg" if test "$has_ogg" = "no"; then -has_ogg="no" + has_ogg="no" else -echo "Xiph Vorbis: $has_vorbis" -echo "Xiph Theora: $has_theora" + echo "Xiph Vorbis: $has_vorbis" + echo "Xiph Theora: $has_theora" fi echo "A52 (AC3): $has_a52" if test "$enable_renoir" = "yes" ; then -echo "Renoir enabled - make sure the driver libraries are present in modules/viren_out directory" + echo "Renoir enabled - make sure the driver libraries are present in modules/viren_out directory" fi echo "" if test "$has_amr_nb_fixed" = "yes" ; then - echo "*** AMR NB FIXED-POINT NOTICE ***" - echo "Make sure you have downloaded TS26.073 from:" - echo "http://www.3gpp.org/ftp/Specs/archive/26_series/26.073/26073-*.zip" - echo "or through gpac_extra_libs and extracted src to modules/amr_dec/amr_nb" - echo "without overwriting typedefs.h file" - echo "" + echo "*** AMR NB FIXED-POINT NOTICE ***" + echo "Make sure you have downloaded TS26.073 from:" + echo "http://www.3gpp.org/ftp/Specs/archive/26_series/26.073/26073-*.zip" + echo "or through gpac_extra_libs and extracted src to modules/amr_dec/amr_nb" + echo "without overwriting typedefs.h file" + echo "" fi echo "" if test "$has_amr_nb" = "yes" ; then - echo "*** AMR NB NOTICE ***" - echo "Make sure you have downloaded TS26.104 from:" - echo "http://www.3gpp.org/ftp/Specs/archive/26_series/26.104/26104-*.zip" - echo "or through gpac_extra_libs and extracted src to modules/amr_float_dec/amr_nb_ft" - echo "without overwriting typedefs.h file" - echo "" + echo "*** AMR NB NOTICE ***" + echo "Make sure you have downloaded TS26.104 from:" + echo "http://www.3gpp.org/ftp/Specs/archive/26_series/26.104/26104-*.zip" + echo "or through gpac_extra_libs and extracted src to modules/amr_float_dec/amr_nb_ft" + echo "without overwriting typedefs.h file" + echo "" fi echo "" if test "$has_amr_wb" = "yes" ; then - echo "*** AMR WB NOTICE ***" - echo "Make sure you have downloaded TS26.204 from:" - echo "http://www.3gpp.org/ftp/Specs/archive/26_series/26.204/26204-*.zip" - echo "or through gpac_extra_libs and extracted src to modules/amr_float_dec/amr_wb_ft" - echo "without overwriting typedefs.h file" - echo "" + echo "*** AMR WB NOTICE ***" + echo "Make sure you have downloaded TS26.204 from:" + echo "http://www.3gpp.org/ftp/Specs/archive/26_series/26.204/26204-*.zip" + echo "or through gpac_extra_libs and extracted src to modules/amr_float_dec/amr_wb_ft" + echo "without overwriting typedefs.h file" + echo "" fi if test "$use_memory_tracking" = "yes"; then -echo "!! WARNING: GPAC Memory tracking is enabled !!" -echo "!! This may corrupt third-party tools using libgpac !!" -echo "!! Use at your own risk, and only for GPAC benchmarking !!" -echo "" + echo "!! WARNING: GPAC Memory tracking is enabled !!" + echo "!! This may corrupt third-party tools using libgpac !!" + echo "!! Use at your own risk, and only for GPAC benchmarking !!" + echo "" fi #needs gmon for win32 gprof if test "$gprof_build" = "yes"; then -if test "$win32" = "yes"; then -extralibs="$extralibs -lgmon" -fi + if test "$win32" = "yes"; then + extralibs="$extralibs -lgmon" + fi fi if test "$want_pic" = "yes" ; then -CFLAGS="$CFLAGS -fPIC -DPIC" -CPPFLAGS="$CPPFLAGS -fPIC -DPIC" + CFLAGS="$CFLAGS -fPIC -DPIC" + CPPFLAGS="$CPPFLAGS -fPIC -DPIC" fi ldir=`pwd` @@ -2056,76 +2083,76 @@ echo "libdir=$libdir" >> config.mak #for cross-compilation if test "$cross_prefix" != "" ; then -echo "CROSS_COMPILING=yes" >> config.mak + echo "CROSS_COMPILING=yes" >> config.mak fi if test "$cpu" = "x86" ; then - echo "TARGET_ARCH_X86=yes" >> config.mak + echo "TARGET_ARCH_X86=yes" >> config.mak elif test "$cpu" = "armv4l" ; then - echo "TARGET_ARCH_ARMV4L=yes" >> config.mak + echo "TARGET_ARCH_ARMV4L=yes" >> config.mak elif test "$cpu" = "alpha" ; then - echo "TARGET_ARCH_ALPHA=yes" >> config.mak + echo "TARGET_ARCH_ALPHA=yes" >> config.mak elif test "$cpu" = "sparc64" ; then - echo "TARGET_ARCH_SPARC64=yes" >> config.mak + echo "TARGET_ARCH_SPARC64=yes" >> config.mak elif test "$cpu" = "powerpc" ; then - echo "TARGET_ARCH_POWERPC=yes" >> config.mak + echo "TARGET_ARCH_POWERPC=yes" >> config.mak elif test "$cpu" = "mips" ; then - echo "TARGET_ARCH_MIPS=yes" >> config.mak + echo "TARGET_ARCH_MIPS=yes" >> config.mak fi if test "$bigendian" = "yes" ; then - echo "IS_BIGENDIAN=yes" >> config.mak - echo "#define GPAC_BIG_ENDIAN" >> $TMPH + echo "IS_BIGENDIAN=yes" >> config.mak + echo "#define GPAC_BIG_ENDIAN" >> $TMPH fi echo "EXTRALIBS=$extralibs" >> config.mak echo "VERSION=$version" >>config.mak if test "$use_fixed_point" = "yes"; then -echo "#define GPAC_FIXED_POINT" >> $TMPH + echo "#define GPAC_FIXED_POINT" >> $TMPH fi if test "$use_memory_tracking" = "yes"; then -echo "#define GPAC_MEMORY_TRACKING" >> $TMPH + echo "#define GPAC_MEMORY_TRACKING" >> $TMPH elif test "$use_std_alloc" = "yes"; then -echo "#define GPAC_STD_ALLOCATOR" >> $TMPH + echo "#define GPAC_STD_ALLOCATOR" >> $TMPH fi if test "$win32" = "yes" ; then - echo "CONFIG_WIN32=yes" >> config.mak - echo "CONFIG_OS=CONFIG_WIN32" >> config.mak - echo "#define GPAC_CONFIG_WIN32" >> $TMPH + echo "CONFIG_WIN32=yes" >> config.mak + echo "CONFIG_OS=CONFIG_WIN32" >> config.mak + echo "#define GPAC_CONFIG_WIN32" >> $TMPH elif test "$linux" = "yes" ; then - echo "CONFIG_LINUX=yes" >> config.mak - echo "CONFIG_OS=CONFIG_LINUX" >> config.mak - echo "#define GPAC_CONFIG_LINUX" >> $TMPH + echo "CONFIG_LINUX=yes" >> config.mak + echo "CONFIG_OS=CONFIG_LINUX" >> config.mak + echo "#define GPAC_CONFIG_LINUX" >> $TMPH elif test "$freebsd" = "yes" ; then - echo "CONFIG_FREEBSD=yes" >> config.mak - echo "CONFIG_OS=CONFIG_FREEBSD" >> config.mak - echo "#define GPAC_CONFIG_FREEBSD" >> $TMPH + echo "CONFIG_FREEBSD=yes" >> config.mak + echo "CONFIG_OS=CONFIG_FREEBSD" >> config.mak + echo "#define GPAC_CONFIG_FREEBSD" >> $TMPH elif test "$darwin" = "yes" ; then - echo "CONFIG_DARWIN=yes" >> config.mak - echo "CONFIG_OS=CONFIG_DARWIN" >> config.mak - echo "#define GPAC_CONFIG_DARWIN" >> $TMPH - if test "$DarwinGL" = "yes" ; then - echo "#define CONFIG_DARWIN_GL" >> $TMPH - fi - echo "mac_apps=$Mac_Applications" >> config.mak + echo "CONFIG_DARWIN=yes" >> config.mak + echo "CONFIG_OS=CONFIG_DARWIN" >> config.mak + echo "#define GPAC_CONFIG_DARWIN" >> $TMPH + if test "$DarwinGL" = "yes" ; then + echo "#define CONFIG_DARWIN_GL" >> $TMPH + fi + echo "mac_apps=$Mac_Applications" >> config.mak elif test "$sunos" = "yes" ; then - echo "CONFIG_SUNOS=yes" >> config.mak - echo "CONFIG_OS=CONFIG_SUNOS" >> config.mak - echo "#define GPAC_CONFIG_SUNOS" >> $TMPH + echo "CONFIG_SUNOS=yes" >> config.mak + echo "CONFIG_OS=CONFIG_SUNOS" >> config.mak + echo "#define GPAC_CONFIG_SUNOS" >> $TMPH else - echo "CONFIG_OS=CONFIG_GEN" >> config.mak - echo "#define GPAC_CONFIG_GENERIC" >> $TMPH + echo "CONFIG_OS=CONFIG_GEN" >> config.mak + echo "#define GPAC_CONFIG_GENERIC" >> $TMPH fi if test "$win32" = "no" ; then - echo "GPAC_SH_FLAGS=$GPAC_SH_FLAGS" >> config.mak - echo "DYN_LIB_SUFFIX=$DYN_LIB_SUFFIX" >> config.mak + echo "GPAC_SH_FLAGS=$GPAC_SH_FLAGS" >> config.mak + echo "DYN_LIB_SUFFIX=$DYN_LIB_SUFFIX" >> config.mak else - echo "DYN_LIB_SUFFIX=dll" >> config.mak + echo "DYN_LIB_SUFFIX=dll" >> config.mak fi @@ -2133,23 +2160,23 @@ echo "INSTFLAGS=$INSTFLAGS" >> config.mak echo "CONFIG_JS=$has_js" >> config.mak if test "$has_js" = "no" ; then - has_js="no" + has_js="no" else -echo "JS_FLAGS=$js_flags" >> config.mak -echo "JS_LIBS=$js_lib" >> config.mak -echo "#define GPAC_HAS_SPIDERMONKEY" >> $TMPH + echo "JS_FLAGS=$js_flags" >> config.mak + echo "JS_LIBS=$js_lib" >> config.mak + echo "#define GPAC_HAS_SPIDERMONKEY" >> $TMPH fi echo "CONFIG_ZLIB=$has_zlib" >> config.mak echo "CONFIG_FT=$has_ft" >> config.mak echo "CONFIG_JPEG=$has_jpeg" >> config.mak if test "$has_jpeg" != "no" ; then -echo "#define GPAC_HAS_JPEG" >> $TMPH + echo "#define GPAC_HAS_JPEG" >> $TMPH fi echo "CONFIG_PNG=$has_png" >> config.mak if test "$has_png" != "no" ; then -echo "#define GPAC_HAS_PNG" >> $TMPH + echo "#define GPAC_HAS_PNG" >> $TMPH fi echo "CONFIG_JP2=$has_openjpeg" >> config.mak @@ -2162,8 +2189,8 @@ echo "CONFIG_THEORA=$has_theora" >> config.mak echo "CONFIG_FFMPEG=$has_ffmpeg" >> config.mak if test "$has_ffmpeg" != "no" then - echo "ffmpeg_cflags=$ffmpeg_cflags" >> config.mak - echo "ffmpeg_lflags=$ffmpeg_lflags" >> config.mak + echo "ffmpeg_cflags=$ffmpeg_cflags" >> config.mak + echo "ffmpeg_lflags=$ffmpeg_lflags" >> config.mak fi echo "CONFIG_FFMPEG_OLD=$old_ffmpeg_inc" >> config.mak @@ -2176,8 +2203,8 @@ echo "CONFIG_PULSEAUDIO=$has_pulseaudio" >> config.mak echo "DISABLE_SVG=$disable_svg" >> config.mak echo "HAS_LIBXML2=$has_libxml2" >> config.mak if test "$has_libxml2" = "yes"; then - echo "XML2_CFLAGS=$libxml2_cflags" >> config.mak - echo "XML2_LIBS=$libxml2_lib_flags" >> config.mak + echo "XML2_CFLAGS=$libxml2_cflags" >> config.mak + echo "XML2_LIBS=$libxml2_lib_flags" >> config.mak fi @@ -2189,33 +2216,33 @@ echo "DISABLE_ISOFF=$disable_isoff" >> config.mak echo "HAS_OPENGL=$has_opengl" >> config.mak if test "$has_opengl" = "yes" ; then - echo "OGL_LIBS=$LINK3D" >> config.mak + echo "OGL_LIBS=$LINK3D" >> config.mak else - echo "#define GPAC_DISABLE_3D" >> $TMPH + echo "#define GPAC_DISABLE_3D" >> $TMPH fi if test "$has_tinygl" = "yes" ; then -echo "#define GPAC_USE_TINYGL" >> $TMPH + echo "#define GPAC_USE_TINYGL" >> $TMPH fi echo "ENABLE_JOYSTICK=$has_joystick" >> config.mak echo "HAS_OPENSSL=$has_ssl" >> config.mak if test "$has_ssl" = "yes" ; then - echo "SSL_LIBS=$LINK_SSL" >> config.mak - echo "#define GPAC_HAS_SSL" >> $TMPH + echo "SSL_LIBS=$LINK_SSL" >> config.mak + echo "#define GPAC_HAS_SSL" >> $TMPH fi echo "CONFIG_SDL=$has_sdl" >> config.mak if test "$has_sdl" = "yes" ; then - echo "SDL_CFLAGS=$sdl_cflags" >> config.mak - echo "SDL_LIBS=$sdl_lib_flags" >> config.mak + echo "SDL_CFLAGS=$sdl_cflags" >> config.mak + echo "SDL_LIBS=$sdl_lib_flags" >> config.mak fi if test "$has_ft" = "no" ; then - has_ft="no" + has_ft="no" else - echo "FT_CFLAGS=$ft_cflags" >> config.mak - echo "FT_LIBS=$ft_lflags" >> config.mak + echo "FT_CFLAGS=$ft_cflags" >> config.mak + echo "FT_LIBS=$ft_lflags" >> config.mak fi echo "CONFIG_AMR_NB=$has_amr_nb_fixed" >> config.mak echo "CONFIG_AMR_NB_FT=$has_amr_nb" >> config.mak @@ -2226,52 +2253,59 @@ echo "STATICBUILD=$static_build" >> config.mak echo "CONFIG_IPV6=$has_ipv6" >> config.mak if test "$has_ipv6" = "yes" ; then - echo "#define GPAC_HAS_IPV6" >> $TMPH + echo "#define GPAC_HAS_IPV6" >> $TMPH fi if test "$win32" = "yes" ; then -echo "CONFIG_DIRECTX=$has_mingw_directx" >> config.mak -if test "$has_mingw_directx" = "yes" ; then -echo "DX_PATH=$dx_path" >> config.mak -fi + echo "CONFIG_DIRECTX=$has_mingw_directx" >> config.mak + if test "$has_mingw_directx" = "yes" ; then + echo "DX_PATH=$dx_path" >> config.mak + fi fi echo "USE_WXWIDGETS=$has_wx" >> config.mak if test "$has_wx" = "yes"; then -echo "WX_CFLAGS=$wx_cflags" >> config.mak -echo "WX_LFLAGS=$wx_lflags" >> config.mak + echo "WX_CFLAGS=$wx_cflags" >> config.mak + echo "WX_LFLAGS=$wx_lflags" >> config.mak fi echo "MOZILLA_DIR=$moz_path" >> config.mak echo "CONFIG_XUL=$has_xul" >> config.mak if test "$has_xul" != "no"; then -echo "XUL_CFLAGS=$xul_flags" >> config.mak + echo "XUL_CFLAGS=$xul_flags" >> config.mak fi echo "LINUX_DVB=$has_dvb4linux" >> config.mak +if test "$has_dvb4linux" = "yes"; then + echo "#define GPAC_HAS_LINUX_DVB" >> $TMPH +fi echo "XMLRPC_INC=$has_xmlrpc" >> config.mak if test "$has_oss_audio" != "no"; then -echo "OSS_INC_TYPE=$has_oss_audio" >> config.mak -echo "OSS_CFLAGS=$OSS_CFLAGS" >> config.mak -echo "OSS_LDFLAGS=$OSS_LDFLAGS" >> config.mak + echo "OSS_INC_TYPE=$has_oss_audio" >> config.mak + echo "OSS_CFLAGS=$OSS_CFLAGS" >> config.mak + echo "OSS_LDFLAGS=$OSS_LDFLAGS" >> config.mak fi +echo "CONFIG_DIRECTFB=$has_directfb" >> config.mak +echo "DIRECTFB_INC_PATH=$directfb_inc" >> config.mak +echo "DIRECTFB_LIB=$directfb_lib" >> config.mak + echo "CONFIG_X11=$has_x11" >> config.mak if test "$has_x11_shm" = "yes"; then -echo "USE_X11_SHM=$has_x11_shm" >> config.mak + echo "USE_X11_SHM=$has_x11_shm" >> config.mak fi if test "$has_x11_xv" = "yes"; then -echo "USE_X11_XV=$has_x11_xv" >> config.mak + echo "USE_X11_XV=$has_x11_xv" >> config.mak fi if test "$is_64" = "yes"; then -echo "X11_LIB_PATH=$X11_PATH/lib64" >> config.mak + echo "X11_LIB_PATH=$X11_PATH/lib64" >> config.mak else -echo "X11_LIB_PATH=$X11_PATH/lib" >> config.mak + echo "X11_LIB_PATH=$X11_PATH/lib" >> config.mak fi echo "X11_INC_PATH=$X11_PATH/include" >> config.mak @@ -2283,22 +2317,22 @@ GPAC_ENST_INC=no GPAC_ENST=no enst_dir="`ls \"$source_path/src/\" | grep enst`" if test "$enst_dir" = "enst"; then -echo "GPAC Proprietary Extensions enabled" -GPAC_ENST_INC=yes -#we need libiconv for eit & co -cat > $TMPC << EOF + echo "GPAC Proprietary Extensions enabled" + GPAC_ENST_INC=yes + #we need libiconv for eit & co + cat > $TMPC << EOF #include int main( void ) { } EOF -if $cc -o $TMPE $TMPC -L$local_lib -liconv > /dev/null 2>&1 ; then -GPAC_ENST=yes -echo "LIBGPAC_ENST=`cd src; ls enst/*.c | sed -e 's/\.c/.o/' | tr -s '\r\n' ' ' ; cd ..`" >> config.mak -else -echo "Couldn't find libiconv - disabling GPAC ENST extensions" -GPAC_ENST="no" -fi + if $cc -o $TMPE $TMPC -L$local_lib -liconv > /dev/null 2>&1 ; then + GPAC_ENST=yes + echo "LIBGPAC_ENST=`cd src; ls enst/*.c | sed -e 's/\.c/.o/' | tr -s '\r\n' ' ' ; cd ..`" >> config.mak + else + echo "Couldn't find libiconv - disabling GPAC ENST extensions" + GPAC_ENST="no" + fi fi echo "GPAC_ENST=$GPAC_ENST" >> config.mak echo "GPAC_ENST_INC=$GPAC_ENST" >> config.mak @@ -2309,11 +2343,11 @@ if test "$source_path_used" = "yes" ; then echo "Creating compilation tree image" SRC_DIRS="src src/utils src/isomedia src/ietf src/odf src/bifs src/scenegraph src/terminal src/mcrypt src/media_tools src/scene_manager src/compositor src/laser" - + APP_DIRS="applications/mp4box applications/mp4client applications/osmozilla applications/osmo4_wx applications/mp42ts" for dir in $SRC_DIRS ; do - mkdir -p "$dir" + mkdir -p "$dir" done ln -sf "$source_path/Makefile" Makefile ln -sf "$source_path/src/Makefile" src/Makefile @@ -2323,8 +2357,8 @@ if test "$source_path_used" = "yes" ; then mkdir -p applications/testapps for dir in $APP_DIRS ; do - mkdir -p "$dir" - ln -sf "$source_path/$dir/Makefile" "$dir/Makefile" + mkdir -p "$dir" + ln -sf "$source_path/$dir/Makefile" "$dir/Makefile" done @@ -2332,10 +2366,10 @@ if test "$source_path_used" = "yes" ; then cd "$source_path/" MOD_DIRS="`ls -d modules/*/`" cd "$cur_dir" - + mkdir -p modules ln -sf "$source_path/modules/Makefile" modules/Makefile - + for dir in $MOD_DIRS ; do if ls "$source_path/$dir/Makefile" > /dev/null 2>&1; then mkdir -p "$dir" @@ -2343,8 +2377,8 @@ if test "$source_path_used" = "yes" ; then fi done if test "$has_mingw_directx" = "yes"; then - ln -sf "$source_path/modules/dx_hw/hand.cur" modules/dx_hw/hand.cur - ln -sf "$source_path/modules/dx_hw/collide.cur" modules/dx_hw/collide.cur + ln -sf "$source_path/modules/dx_hw/hand.cur" modules/dx_hw/hand.cur + ln -sf "$source_path/modules/dx_hw/collide.cur" modules/dx_hw/collide.cur fi cd "$cur_dir" @@ -2362,22 +2396,22 @@ echo "#endif" >> $TMPH # Do not overwrite config.h if unchanged to avoid superfluous rebuilds. if ! cmp -s $TMPH config.h; then - rm -f config.h - mv -f $TMPH config.h + rm -f config.h + mv -f $TMPH config.h else - echo "config.h is unchanged" + echo "config.h is unchanged" fi rm -f $TMPO $TMPC $TMPE $TMPS $TMPCPP $TMPH if [ ! -d "./bin" ]; then - mkdir ./bin + mkdir ./bin fi if [ ! -d "./bin/gcc" ]; then - mkdir ./bin/gcc + mkdir ./bin/gcc fi if [ ! -d "./bin/gcc/temp" ]; then - mkdir ./bin/gcc/temp + mkdir ./bin/gcc/temp fi echo '%.opic : %.c' >> config.mak diff --git a/doc/configuration.html b/doc/configuration.html index 8b970a1..5ec69ff 100644 --- a/doc/configuration.html +++ b/doc/configuration.html @@ -10,7 +10,7 @@
    GPAC Configuration file documentation
    Version 0.4.5

    -Last Modified $Date: 2010-04-09 16:44:04 $ +Last Modified $LastChangedDate: 2011-06-14 10:39:53 -0400 (Tue, 14 Jun 2011) $