diff options
author | Martin Storsjo <martin@martin.st> | 2013-11-01 10:46:40 +0200 |
---|---|---|
committer | Martin Storsjo <martin@martin.st> | 2013-11-01 10:46:40 +0200 |
commit | 321233ee92e138f44294c7bb9a375eadad9d24fa (patch) | |
tree | 1de928ad26325302f64c56603157f50095dcf2b1 | |
parent | fcb5f1b692cb8343de35e69f9084328c652cf690 (diff) | |
parent | fa3eba16446cc8f2f5e2dfc20d86a49dbd37299e (diff) | |
download | fdk-aac-321233ee92e138f44294c7bb9a375eadad9d24fa.tar.gz fdk-aac-321233ee92e138f44294c7bb9a375eadad9d24fa.tar.bz2 fdk-aac-321233ee92e138f44294c7bb9a375eadad9d24fa.zip |
Merge remote-tracking branch 'aosp/kitkat-release' into kitkat-merge
Conflicts:
libAACenc/src/quantize.cpp
306 files changed, 7861 insertions, 6930 deletions
diff --git a/documentation/aacEncoder.pdf b/documentation/aacEncoder.pdf index 84100eb..e8420b1 100644 --- a/documentation/aacEncoder.pdf +++ b/documentation/aacEncoder.pdf @@ -109,552 +109,514 @@ endobj (\376\377\000A\000u\000d\000i\000o\000\040\000Q\000u\000a\000l\000i\000t\000y\000\040\000C\000o\000n\000s\000i\000d\000e\000r\000a\000t\000i\000o\000n\000s) endobj 73 0 obj -<< /S /GoTo /D (section.2.10) >> +<< /S /GoTo /D (subsection.2.9.4) >> endobj 76 0 obj -(\376\377\000A\000u\000d\000i\000o\000\040\000C\000h\000a\000n\000n\000e\000l\000\040\000C\000o\000n\000f\000i\000g\000u\000r\000a\000t\000i\000o\000n) +(\376\377\000E\000L\000D\000\040\000A\000u\000t\000o\000\040\000C\000o\000n\000f\000i\000g\000u\000r\000a\000t\000i\000o\000n\000\040\000M\000o\000d\000e) endobj 77 0 obj -<< /S /GoTo /D (section.2.11) >> +<< /S /GoTo /D (section.2.10) >> endobj 80 0 obj -(\376\377\000S\000u\000p\000p\000o\000r\000t\000e\000d\000\040\000B\000i\000t\000r\000a\000t\000e\000s) +(\376\377\000A\000u\000d\000i\000o\000\040\000C\000h\000a\000n\000n\000e\000l\000\040\000C\000o\000n\000f\000i\000g\000u\000r\000a\000t\000i\000o\000n) endobj 81 0 obj -<< /S /GoTo /D (section.2.12) >> +<< /S /GoTo /D (section.2.11) >> endobj 84 0 obj -(\376\377\000R\000e\000c\000o\000m\000m\000e\000n\000d\000e\000d\000\040\000S\000a\000m\000p\000l\000i\000n\000g\000\040\000R\000a\000t\000e\000\040\000a\000n\000d\000\040\000B\000i\000t\000r\000a\000t\000e\000\040\000C\000o\000m\000b\000i\000n\000a\000t\000i\000o\000n\000s) +(\376\377\000S\000u\000p\000p\000o\000r\000t\000e\000d\000\040\000B\000i\000t\000r\000a\000t\000e\000s) endobj 85 0 obj -<< /S /GoTo /D (subsection.2.12.1) >> +<< /S /GoTo /D (section.2.12) >> endobj 88 0 obj -(\376\377\000A\000A\000C\000-\000L\000C\000,\000\040\000H\000E\000-\000A\000A\000C\000,\000\040\000H\000E\000-\000A\000A\000C\000v\0002\000.) +(\376\377\000R\000e\000c\000o\000m\000m\000e\000n\000d\000e\000d\000\040\000S\000a\000m\000p\000l\000i\000n\000g\000\040\000R\000a\000t\000e\000\040\000a\000n\000d\000\040\000B\000i\000t\000r\000a\000t\000e\000\040\000C\000o\000m\000b\000i\000n\000a\000t\000i\000o\000n\000s) endobj 89 0 obj -<< /S /GoTo /D (subsection.2.12.2) >> +<< /S /GoTo /D (subsection.2.12.1) >> endobj 92 0 obj -(\376\377\000A\000A\000C\000-\000L\000D\000,\000\040\000A\000A\000C\000-\000E\000L\000D\000,\000\040\000A\000A\000C\000-\000E\000L\000D\000\040\000w\000i\000t\000h\000\040\000S\000B\000R\000.) +(\376\377\000A\000A\000C\000-\000L\000C\000,\000\040\000H\000E\000-\000A\000A\000C\000,\000\040\000H\000E\000-\000A\000A\000C\000v\0002\000\040\000i\000n\000\040\000D\000u\000a\000l\000r\000a\000t\000e\000\040\000S\000B\000R\000\040\000m\000o\000d\000e\000.) endobj 93 0 obj -<< /S /GoTo /D (chapter.3) >> +<< /S /GoTo /D (subsection.2.12.2) >> endobj 96 0 obj -(\376\377\000E\000n\000c\000o\000d\000e\000r\000\040\000B\000e\000h\000a\000v\000i\000o\000u\000r) +(\376\377\000A\000A\000C\000-\000L\000D\000,\000\040\000A\000A\000C\000-\000E\000L\000D\000,\000\040\000A\000A\000C\000-\000E\000L\000D\000\040\000w\000i\000t\000h\000\040\000S\000B\000R\000\040\000i\000n\000\040\000D\000u\000a\000l\000r\000a\000t\000e\000\040\000S\000B\000R\000\040\000m\000o\000d\000e\000.) endobj 97 0 obj -<< /S /GoTo /D (section.3.1) >> +<< /S /GoTo /D (subsection.2.12.3) >> endobj 100 0 obj -(\376\377\000B\000a\000n\000d\000w\000i\000d\000t\000h) +(\376\377\000A\000A\000C\000-\000E\000L\000D\000\040\000w\000i\000t\000h\000\040\000S\000B\000R\000\040\000i\000n\000\040\000D\000o\000w\000n\000s\000a\000m\000p\000l\000e\000d\000\040\000S\000B\000R\000\040\000m\000o\000d\000e\000.) endobj 101 0 obj -<< /S /GoTo /D (section.3.2) >> +<< /S /GoTo /D (chapter.3) >> endobj 104 0 obj -(\376\377\000F\000r\000a\000m\000e\000\040\000S\000i\000z\000e\000s\000\040\000\046\000\040\000B\000i\000t\000\040\000R\000e\000s\000e\000r\000v\000o\000i\000r) +(\376\377\000E\000n\000c\000o\000d\000e\000r\000\040\000B\000e\000h\000a\000v\000i\000o\000u\000r) endobj 105 0 obj -<< /S /GoTo /D (subsection.3.2.1) >> +<< /S /GoTo /D (section.3.1) >> endobj 108 0 obj -(\376\377\000E\000s\000t\000i\000m\000a\000t\000i\000n\000g\000\040\000A\000v\000e\000r\000a\000g\000e\000\040\000F\000r\000a\000m\000e\000\040\000S\000i\000z\000e\000s) +(\376\377\000B\000a\000n\000d\000w\000i\000d\000t\000h) endobj 109 0 obj -<< /S /GoTo /D (section.3.3) >> +<< /S /GoTo /D (section.3.2) >> endobj 112 0 obj -(\376\377\000E\000n\000c\000o\000d\000e\000r\000\040\000T\000o\000o\000l\000s) +(\376\377\000F\000r\000a\000m\000e\000\040\000S\000i\000z\000e\000s\000\040\000\046\000\040\000B\000i\000t\000\040\000R\000e\000s\000e\000r\000v\000o\000i\000r) endobj 113 0 obj -<< /S /GoTo /D (chapter.4) >> +<< /S /GoTo /D (subsection.3.2.1) >> endobj 116 0 obj -(\376\377\000C\000o\000m\000m\000a\000n\000d\000-\000l\000i\000n\000e\000\040\000U\000s\000a\000g\000e) +(\376\377\000E\000s\000t\000i\000m\000a\000t\000i\000n\000g\000\040\000A\000v\000e\000r\000a\000g\000e\000\040\000F\000r\000a\000m\000e\000\040\000S\000i\000z\000e\000s) endobj 117 0 obj -<< /S /GoTo /D (section.4.1) >> +<< /S /GoTo /D (section.3.3) >> endobj 120 0 obj -(\376\377\000A\000r\000g\000u\000m\000e\000n\000t\000s) +(\376\377\000E\000n\000c\000o\000d\000e\000r\000\040\000T\000o\000o\000l\000s) endobj 121 0 obj -<< /S /GoTo /D (subsection.4.1.1) >> +<< /S /GoTo /D (chapter.4) >> endobj 124 0 obj -(\376\377\000M\000a\000n\000d\000a\000t\000o\000r\000y\000\040\000A\000r\000g\000u\000m\000e\000n\000t\000s) +(\376\377\000C\000l\000a\000s\000s\000\040\000I\000n\000d\000e\000x) endobj 125 0 obj -<< /S /GoTo /D (subsection.4.1.2) >> +<< /S /GoTo /D (section.4.1) >> endobj 128 0 obj -(\376\377\000O\000p\000t\000i\000o\000n\000a\000l\000\040\000A\000r\000g\000u\000m\000e\000n\000t\000s) +(\376\377\000C\000l\000a\000s\000s\000\040\000L\000i\000s\000t) endobj 129 0 obj << /S /GoTo /D (chapter.5) >> endobj 132 0 obj -(\376\377\000C\000l\000a\000s\000s\000\040\000I\000n\000d\000e\000x) +(\376\377\000F\000i\000l\000e\000\040\000I\000n\000d\000e\000x) endobj 133 0 obj << /S /GoTo /D (section.5.1) >> endobj 136 0 obj -(\376\377\000C\000l\000a\000s\000s\000\040\000L\000i\000s\000t) +(\376\377\000F\000i\000l\000e\000\040\000L\000i\000s\000t) endobj 137 0 obj << /S /GoTo /D (chapter.6) >> endobj 140 0 obj -(\376\377\000F\000i\000l\000e\000\040\000I\000n\000d\000e\000x) +(\376\377\000C\000l\000a\000s\000s\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 141 0 obj << /S /GoTo /D (section.6.1) >> endobj 144 0 obj -(\376\377\000F\000i\000l\000e\000\040\000L\000i\000s\000t) +(\376\377\000A\000A\000C\000E\000N\000C\000\137\000B\000u\000f\000D\000e\000s\000c\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e) endobj 145 0 obj -<< /S /GoTo /D (chapter.7) >> +<< /S /GoTo /D (subsection.6.1.1) >> endobj 148 0 obj -(\376\377\000C\000l\000a\000s\000s\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) +(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n) endobj 149 0 obj -<< /S /GoTo /D (section.7.1) >> +<< /S /GoTo /D (subsection.6.1.2) >> endobj 152 0 obj -(\376\377\000A\000A\000C\000E\000N\000C\000\137\000B\000u\000f\000D\000e\000s\000c\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e) +(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 153 0 obj -<< /S /GoTo /D (subsection.7.1.1) >> +<< /S /GoTo /D (subsubsection.6.1.2.1) >> endobj 156 0 obj -(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n) +(\376\377\000b\000u\000f\000E\000l\000S\000i\000z\000e\000s) endobj 157 0 obj -<< /S /GoTo /D (subsection.7.1.2) >> +<< /S /GoTo /D (subsubsection.6.1.2.2) >> endobj 160 0 obj -(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) +(\376\377\000b\000u\000f\000f\000e\000r\000I\000d\000e\000n\000t\000i\000f\000i\000e\000r\000s) endobj 161 0 obj -<< /S /GoTo /D (subsubsection.7.1.2.1) >> +<< /S /GoTo /D (subsubsection.6.1.2.3) >> endobj 164 0 obj -(\376\377\000b\000u\000f\000E\000l\000S\000i\000z\000e\000s) +(\376\377\000b\000u\000f\000s) endobj 165 0 obj -<< /S /GoTo /D (subsubsection.7.1.2.2) >> +<< /S /GoTo /D (subsubsection.6.1.2.4) >> endobj 168 0 obj -(\376\377\000b\000u\000f\000f\000e\000r\000I\000d\000e\000n\000t\000i\000f\000i\000e\000r\000s) +(\376\377\000b\000u\000f\000S\000i\000z\000e\000s) endobj 169 0 obj -<< /S /GoTo /D (subsubsection.7.1.2.3) >> +<< /S /GoTo /D (subsubsection.6.1.2.5) >> endobj 172 0 obj -(\376\377\000b\000u\000f\000s) +(\376\377\000n\000u\000m\000B\000u\000f\000s) endobj 173 0 obj -<< /S /GoTo /D (subsubsection.7.1.2.4) >> +<< /S /GoTo /D (section.6.2) >> endobj 176 0 obj -(\376\377\000b\000u\000f\000S\000i\000z\000e\000s) +(\376\377\000A\000A\000C\000E\000N\000C\000\137\000I\000n\000A\000r\000g\000s\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e) endobj 177 0 obj -<< /S /GoTo /D (subsubsection.7.1.2.5) >> +<< /S /GoTo /D (subsection.6.2.1) >> endobj 180 0 obj -(\376\377\000n\000u\000m\000B\000u\000f\000s) +(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n) endobj 181 0 obj -<< /S /GoTo /D (section.7.2) >> +<< /S /GoTo /D (subsection.6.2.2) >> endobj 184 0 obj -(\376\377\000A\000A\000C\000E\000N\000C\000\137\000I\000n\000A\000r\000g\000s\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e) +(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 185 0 obj -<< /S /GoTo /D (subsection.7.2.1) >> +<< /S /GoTo /D (subsubsection.6.2.2.1) >> endobj 188 0 obj -(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n) +(\376\377\000n\000u\000m\000A\000n\000c\000B\000y\000t\000e\000s) endobj 189 0 obj -<< /S /GoTo /D (subsection.7.2.2) >> +<< /S /GoTo /D (subsubsection.6.2.2.2) >> endobj 192 0 obj -(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) +(\376\377\000n\000u\000m\000I\000n\000S\000a\000m\000p\000l\000e\000s) endobj 193 0 obj -<< /S /GoTo /D (subsubsection.7.2.2.1) >> +<< /S /GoTo /D (section.6.3) >> endobj 196 0 obj -(\376\377\000n\000u\000m\000A\000n\000c\000B\000y\000t\000e\000s) +(\376\377\000A\000A\000C\000E\000N\000C\000\137\000I\000n\000f\000o\000S\000t\000r\000u\000c\000t\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e) endobj 197 0 obj -<< /S /GoTo /D (subsubsection.7.2.2.2) >> +<< /S /GoTo /D (subsection.6.3.1) >> endobj 200 0 obj -(\376\377\000n\000u\000m\000I\000n\000S\000a\000m\000p\000l\000e\000s) +(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n) endobj 201 0 obj -<< /S /GoTo /D (section.7.3) >> +<< /S /GoTo /D (subsection.6.3.2) >> endobj 204 0 obj -(\376\377\000A\000A\000C\000E\000N\000C\000\137\000I\000n\000f\000o\000S\000t\000r\000u\000c\000t\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e) +(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 205 0 obj -<< /S /GoTo /D (subsection.7.3.1) >> +<< /S /GoTo /D (subsubsection.6.3.2.1) >> endobj 208 0 obj -(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n) +(\376\377\000c\000o\000n\000f\000B\000u\000f) endobj 209 0 obj -<< /S /GoTo /D (subsection.7.3.2) >> +<< /S /GoTo /D (subsubsection.6.3.2.2) >> endobj 212 0 obj -(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) +(\376\377\000c\000o\000n\000f\000S\000i\000z\000e) endobj 213 0 obj -<< /S /GoTo /D (subsubsection.7.3.2.1) >> +<< /S /GoTo /D (subsubsection.6.3.2.3) >> endobj 216 0 obj -(\376\377\000c\000o\000n\000f\000B\000u\000f) +(\376\377\000e\000n\000c\000o\000d\000e\000r\000D\000e\000l\000a\000y) endobj 217 0 obj -<< /S /GoTo /D (subsubsection.7.3.2.2) >> +<< /S /GoTo /D (subsubsection.6.3.2.4) >> endobj 220 0 obj -(\376\377\000c\000o\000n\000f\000S\000i\000z\000e) +(\376\377\000f\000r\000a\000m\000e\000L\000e\000n\000g\000t\000h) endobj 221 0 obj -<< /S /GoTo /D (subsubsection.7.3.2.3) >> +<< /S /GoTo /D (subsubsection.6.3.2.5) >> endobj 224 0 obj -(\376\377\000e\000n\000c\000o\000d\000e\000r\000D\000e\000l\000a\000y) +(\376\377\000i\000n\000B\000u\000f\000F\000i\000l\000l\000L\000e\000v\000e\000l) endobj 225 0 obj -<< /S /GoTo /D (subsubsection.7.3.2.4) >> +<< /S /GoTo /D (subsubsection.6.3.2.6) >> endobj 228 0 obj -(\376\377\000f\000r\000a\000m\000e\000L\000e\000n\000g\000t\000h) +(\376\377\000i\000n\000p\000u\000t\000C\000h\000a\000n\000n\000e\000l\000s) endobj 229 0 obj -<< /S /GoTo /D (subsubsection.7.3.2.5) >> +<< /S /GoTo /D (subsubsection.6.3.2.7) >> endobj 232 0 obj -(\376\377\000i\000n\000B\000u\000f\000F\000i\000l\000l\000L\000e\000v\000e\000l) +(\376\377\000m\000a\000x\000A\000n\000c\000B\000y\000t\000e\000s) endobj 233 0 obj -<< /S /GoTo /D (subsubsection.7.3.2.6) >> +<< /S /GoTo /D (subsubsection.6.3.2.8) >> endobj 236 0 obj -(\376\377\000i\000n\000p\000u\000t\000C\000h\000a\000n\000n\000e\000l\000s) +(\376\377\000m\000a\000x\000O\000u\000t\000B\000u\000f\000B\000y\000t\000e\000s) endobj 237 0 obj -<< /S /GoTo /D (subsubsection.7.3.2.7) >> +<< /S /GoTo /D (section.6.4) >> endobj 240 0 obj -(\376\377\000m\000a\000x\000A\000n\000c\000B\000y\000t\000e\000s) +(\376\377\000A\000A\000C\000E\000N\000C\000\137\000M\000e\000t\000a\000D\000a\000t\000a\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e) endobj 241 0 obj -<< /S /GoTo /D (subsubsection.7.3.2.8) >> +<< /S /GoTo /D (subsection.6.4.1) >> endobj 244 0 obj -(\376\377\000m\000a\000x\000O\000u\000t\000B\000u\000f\000B\000y\000t\000e\000s) +(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n) endobj 245 0 obj -<< /S /GoTo /D (section.7.4) >> +<< /S /GoTo /D (subsection.6.4.2) >> endobj 248 0 obj -(\376\377\000A\000A\000C\000E\000N\000C\000\137\000M\000e\000t\000a\000D\000a\000t\000a\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e) +(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 249 0 obj -<< /S /GoTo /D (subsection.7.4.1) >> +<< /S /GoTo /D (subsubsection.6.4.2.1) >> endobj 252 0 obj -(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n) +(\376\377\000c\000e\000n\000t\000e\000r\000M\000i\000x\000L\000e\000v\000e\000l) endobj 253 0 obj -<< /S /GoTo /D (subsection.7.4.2) >> +<< /S /GoTo /D (subsubsection.6.4.2.2) >> endobj 256 0 obj -(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) +(\376\377\000c\000o\000m\000p\000\137\000p\000r\000o\000f\000i\000l\000e) endobj 257 0 obj -<< /S /GoTo /D (subsubsection.7.4.2.1) >> +<< /S /GoTo /D (subsubsection.6.4.2.3) >> endobj 260 0 obj -(\376\377\000c\000e\000n\000t\000e\000r\000M\000i\000x\000L\000e\000v\000e\000l) +(\376\377\000c\000o\000m\000p\000\137\000T\000a\000r\000g\000e\000t\000R\000e\000f\000L\000e\000v\000e\000l) endobj 261 0 obj -<< /S /GoTo /D (subsubsection.7.4.2.2) >> +<< /S /GoTo /D (subsubsection.6.4.2.4) >> endobj 264 0 obj -(\376\377\000c\000o\000m\000p\000\137\000p\000r\000o\000f\000i\000l\000e) +(\376\377\000d\000o\000l\000b\000y\000S\000u\000r\000r\000o\000u\000n\000d\000M\000o\000d\000e) endobj 265 0 obj -<< /S /GoTo /D (subsubsection.7.4.2.3) >> +<< /S /GoTo /D (subsubsection.6.4.2.5) >> endobj 268 0 obj -(\376\377\000c\000o\000m\000p\000\137\000T\000a\000r\000g\000e\000t\000R\000e\000f\000L\000e\000v\000e\000l) +(\376\377\000d\000r\000c\000\137\000p\000r\000o\000f\000i\000l\000e) endobj 269 0 obj -<< /S /GoTo /D (subsubsection.7.4.2.4) >> +<< /S /GoTo /D (subsubsection.6.4.2.6) >> endobj 272 0 obj -(\376\377\000d\000o\000l\000b\000y\000S\000u\000r\000r\000o\000u\000n\000d\000M\000o\000d\000e) +(\376\377\000d\000r\000c\000\137\000T\000a\000r\000g\000e\000t\000R\000e\000f\000L\000e\000v\000e\000l) endobj 273 0 obj -<< /S /GoTo /D (subsubsection.7.4.2.5) >> +<< /S /GoTo /D (subsubsection.6.4.2.7) >> endobj 276 0 obj -(\376\377\000d\000r\000c\000\137\000p\000r\000o\000f\000i\000l\000e) +(\376\377\000E\000T\000S\000I\000\137\000D\000m\000x\000L\000v\000l\000\137\000p\000r\000e\000s\000e\000n\000t) endobj 277 0 obj -<< /S /GoTo /D (subsubsection.7.4.2.6) >> +<< /S /GoTo /D (subsubsection.6.4.2.8) >> endobj 280 0 obj -(\376\377\000d\000r\000c\000\137\000T\000a\000r\000g\000e\000t\000R\000e\000f\000L\000e\000v\000e\000l) +(\376\377\000P\000C\000E\000\137\000m\000i\000x\000d\000o\000w\000n\000\137\000i\000d\000x\000\137\000p\000r\000e\000s\000e\000n\000t) endobj 281 0 obj -<< /S /GoTo /D (subsubsection.7.4.2.7) >> +<< /S /GoTo /D (subsubsection.6.4.2.9) >> endobj 284 0 obj -(\376\377\000E\000T\000S\000I\000\137\000D\000m\000x\000L\000v\000l\000\137\000p\000r\000e\000s\000e\000n\000t) +(\376\377\000p\000r\000o\000g\000\137\000r\000e\000f\000\137\000l\000e\000v\000e\000l) endobj 285 0 obj -<< /S /GoTo /D (subsubsection.7.4.2.8) >> +<< /S /GoTo /D (subsubsection.6.4.2.10) >> endobj 288 0 obj -(\376\377\000P\000C\000E\000\137\000m\000i\000x\000d\000o\000w\000n\000\137\000i\000d\000x\000\137\000p\000r\000e\000s\000e\000n\000t) +(\376\377\000p\000r\000o\000g\000\137\000r\000e\000f\000\137\000l\000e\000v\000e\000l\000\137\000p\000r\000e\000s\000e\000n\000t) endobj 289 0 obj -<< /S /GoTo /D (subsubsection.7.4.2.9) >> +<< /S /GoTo /D (subsubsection.6.4.2.11) >> endobj 292 0 obj -(\376\377\000p\000r\000o\000g\000\137\000r\000e\000f\000\137\000l\000e\000v\000e\000l) +(\376\377\000s\000u\000r\000r\000o\000u\000n\000d\000M\000i\000x\000L\000e\000v\000e\000l) endobj 293 0 obj -<< /S /GoTo /D (subsubsection.7.4.2.10) >> +<< /S /GoTo /D (section.6.5) >> endobj 296 0 obj -(\376\377\000p\000r\000o\000g\000\137\000r\000e\000f\000\137\000l\000e\000v\000e\000l\000\137\000p\000r\000e\000s\000e\000n\000t) +(\376\377\000A\000A\000C\000E\000N\000C\000\137\000O\000u\000t\000A\000r\000g\000s\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e) endobj 297 0 obj -<< /S /GoTo /D (subsubsection.7.4.2.11) >> +<< /S /GoTo /D (subsection.6.5.1) >> endobj 300 0 obj -(\376\377\000s\000u\000r\000r\000o\000u\000n\000d\000M\000i\000x\000L\000e\000v\000e\000l) +(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n) endobj 301 0 obj -<< /S /GoTo /D (section.7.5) >> +<< /S /GoTo /D (subsection.6.5.2) >> endobj 304 0 obj -(\376\377\000A\000A\000C\000E\000N\000C\000\137\000O\000u\000t\000A\000r\000g\000s\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e) +(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 305 0 obj -<< /S /GoTo /D (subsection.7.5.1) >> +<< /S /GoTo /D (subsubsection.6.5.2.1) >> endobj 308 0 obj -(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n) +(\376\377\000n\000u\000m\000A\000n\000c\000B\000y\000t\000e\000s) endobj 309 0 obj -<< /S /GoTo /D (subsection.7.5.2) >> +<< /S /GoTo /D (subsubsection.6.5.2.2) >> endobj 312 0 obj -(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) +(\376\377\000n\000u\000m\000I\000n\000S\000a\000m\000p\000l\000e\000s) endobj 313 0 obj -<< /S /GoTo /D (subsubsection.7.5.2.1) >> +<< /S /GoTo /D (subsubsection.6.5.2.3) >> endobj 316 0 obj -(\376\377\000n\000u\000m\000A\000n\000c\000B\000y\000t\000e\000s) +(\376\377\000n\000u\000m\000O\000u\000t\000B\000y\000t\000e\000s) endobj 317 0 obj -<< /S /GoTo /D (subsubsection.7.5.2.2) >> +<< /S /GoTo /D (chapter.7) >> endobj 320 0 obj -(\376\377\000n\000u\000m\000I\000n\000S\000a\000m\000p\000l\000e\000s) +(\376\377\000F\000i\000l\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 321 0 obj -<< /S /GoTo /D (subsubsection.7.5.2.3) >> +<< /S /GoTo /D (section.7.1) >> endobj 324 0 obj -(\376\377\000n\000u\000m\000O\000u\000t\000B\000y\000t\000e\000s) +(\376\377\000a\000a\000c\000e\000n\000c\000\137\000l\000i\000b\000.\000h\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e) endobj 325 0 obj -<< /S /GoTo /D (chapter.8) >> +<< /S /GoTo /D (subsection.7.1.1) >> endobj 328 0 obj -(\376\377\000F\000i\000l\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) +(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n) endobj 329 0 obj -<< /S /GoTo /D (section.8.1) >> +<< /S /GoTo /D (subsection.7.1.2) >> endobj 332 0 obj -(\376\377\000a\000a\000c\000e\000n\000c\000\137\000l\000i\000b\000.\000h\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e) +(\376\377\000T\000y\000p\000e\000d\000e\000f\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 333 0 obj -<< /S /GoTo /D (subsection.8.1.1) >> +<< /S /GoTo /D (subsubsection.7.1.2.1) >> endobj 336 0 obj -(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n) +(\376\377\000H\000A\000N\000D\000L\000E\000\137\000A\000A\000C\000E\000N\000C\000O\000D\000E\000R) endobj 337 0 obj -<< /S /GoTo /D (subsection.8.1.2) >> +<< /S /GoTo /D (subsection.7.1.3) >> endobj 340 0 obj -(\376\377\000T\000y\000p\000e\000d\000e\000f\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) +(\376\377\000E\000n\000u\000m\000e\000r\000a\000t\000i\000o\000n\000\040\000T\000y\000p\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 341 0 obj -<< /S /GoTo /D (subsubsection.8.1.2.1) >> +<< /S /GoTo /D (subsubsection.7.1.3.1) >> endobj 344 0 obj -(\376\377\000H\000A\000N\000D\000L\000E\000\137\000A\000A\000C\000E\000N\000C\000O\000D\000E\000R) +(\376\377\000A\000A\000C\000E\000N\000C\000\137\000B\000u\000f\000f\000e\000r\000I\000d\000e\000n\000t\000i\000f\000i\000e\000r) endobj 345 0 obj -<< /S /GoTo /D (subsection.8.1.3) >> +<< /S /GoTo /D (subsubsection.7.1.3.2) >> endobj 348 0 obj -(\376\377\000E\000n\000u\000m\000e\000r\000a\000t\000i\000o\000n\000\040\000T\000y\000p\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) +(\376\377\000A\000A\000C\000E\000N\000C\000\137\000C\000T\000R\000L\000F\000L\000A\000G\000S) endobj 349 0 obj -<< /S /GoTo /D (subsubsection.8.1.3.1) >> +<< /S /GoTo /D (subsubsection.7.1.3.3) >> endobj 352 0 obj -(\376\377\000A\000A\000C\000E\000N\000C\000\137\000B\000u\000f\000f\000e\000r\000I\000d\000e\000n\000t\000i\000f\000i\000e\000r) +(\376\377\000A\000A\000C\000E\000N\000C\000\137\000E\000R\000R\000O\000R) endobj 353 0 obj -<< /S /GoTo /D (subsubsection.8.1.3.2) >> +<< /S /GoTo /D (subsubsection.7.1.3.4) >> endobj 356 0 obj -(\376\377\000A\000A\000C\000E\000N\000C\000\137\000C\000T\000R\000L\000F\000L\000A\000G\000S) +(\376\377\000A\000A\000C\000E\000N\000C\000\137\000M\000E\000T\000A\000D\000A\000T\000A\000\137\000D\000R\000C\000\137\000P\000R\000O\000F\000I\000L\000E) endobj 357 0 obj -<< /S /GoTo /D (subsubsection.8.1.3.3) >> +<< /S /GoTo /D (subsubsection.7.1.3.5) >> endobj 360 0 obj -(\376\377\000A\000A\000C\000E\000N\000C\000\137\000E\000R\000R\000O\000R) +(\376\377\000A\000A\000C\000E\000N\000C\000\137\000P\000A\000R\000A\000M) endobj 361 0 obj -<< /S /GoTo /D (subsubsection.8.1.3.4) >> +<< /S /GoTo /D (subsection.7.1.4) >> endobj 364 0 obj -(\376\377\000A\000A\000C\000E\000N\000C\000\137\000M\000E\000T\000A\000D\000A\000T\000A\000\137\000D\000R\000C\000\137\000P\000R\000O\000F\000I\000L\000E) +(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 365 0 obj -<< /S /GoTo /D (subsubsection.8.1.3.5) >> +<< /S /GoTo /D (subsubsection.7.1.4.1) >> endobj 368 0 obj -(\376\377\000A\000A\000C\000E\000N\000C\000\137\000P\000A\000R\000A\000M) +(\376\377\000a\000a\000c\000E\000n\000c\000C\000l\000o\000s\000e) endobj 369 0 obj -<< /S /GoTo /D (subsection.8.1.4) >> +<< /S /GoTo /D (subsubsection.7.1.4.2) >> endobj 372 0 obj -(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) +(\376\377\000a\000a\000c\000E\000n\000c\000E\000n\000c\000o\000d\000e) endobj 373 0 obj -<< /S /GoTo /D (subsubsection.8.1.4.1) >> +<< /S /GoTo /D (subsubsection.7.1.4.3) >> endobj 376 0 obj -(\376\377\000a\000a\000c\000E\000n\000c\000C\000l\000o\000s\000e) +(\376\377\000a\000a\000c\000E\000n\000c\000G\000e\000t\000L\000i\000b\000I\000n\000f\000o) endobj 377 0 obj -<< /S /GoTo /D (subsubsection.8.1.4.2) >> +<< /S /GoTo /D (subsubsection.7.1.4.4) >> endobj 380 0 obj -(\376\377\000a\000a\000c\000E\000n\000c\000E\000n\000c\000o\000d\000e) +(\376\377\000a\000a\000c\000E\000n\000c\000I\000n\000f\000o) endobj 381 0 obj -<< /S /GoTo /D (subsubsection.8.1.4.3) >> +<< /S /GoTo /D (subsubsection.7.1.4.5) >> endobj 384 0 obj -(\376\377\000a\000a\000c\000E\000n\000c\000G\000e\000t\000L\000i\000b\000I\000n\000f\000o) +(\376\377\000a\000a\000c\000E\000n\000c\000o\000d\000e\000r\000\137\000G\000e\000t\000P\000a\000r\000a\000m) endobj 385 0 obj -<< /S /GoTo /D (subsubsection.8.1.4.4) >> +<< /S /GoTo /D (subsubsection.7.1.4.6) >> endobj 388 0 obj -(\376\377\000a\000a\000c\000E\000n\000c\000I\000n\000f\000o) +(\376\377\000a\000a\000c\000E\000n\000c\000o\000d\000e\000r\000\137\000S\000e\000t\000P\000a\000r\000a\000m) endobj 389 0 obj -<< /S /GoTo /D (subsubsection.8.1.4.5) >> +<< /S /GoTo /D (subsubsection.7.1.4.7) >> endobj 392 0 obj -(\376\377\000a\000a\000c\000E\000n\000c\000o\000d\000e\000r\000\137\000G\000e\000t\000P\000a\000r\000a\000m) -endobj -393 0 obj -<< /S /GoTo /D (subsubsection.8.1.4.6) >> -endobj -396 0 obj -(\376\377\000a\000a\000c\000E\000n\000c\000o\000d\000e\000r\000\137\000S\000e\000t\000P\000a\000r\000a\000m) -endobj -397 0 obj -<< /S /GoTo /D (subsubsection.8.1.4.7) >> -endobj -400 0 obj (\376\377\000a\000a\000c\000E\000n\000c\000O\000p\000e\000n) endobj -401 0 obj -<< /S /GoTo /D (section.8.2) >> -endobj -404 0 obj -(\376\377\000m\000a\000i\000n\000.\000c\000p\000p\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e) -endobj -405 0 obj -<< /S /GoTo /D (subsection.8.2.1) >> -endobj -408 0 obj -(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n) -endobj -409 0 obj -<< /S /GoTo /D (subsection.8.2.2) >> -endobj -412 0 obj -(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) -endobj -413 0 obj -<< /S /GoTo /D (subsubsection.8.2.2.1) >> -endobj -416 0 obj -(\376\377\000m\000a\000i\000n) -endobj -417 0 obj -<< /S /GoTo /D [418 0 R /Fit ] >> +393 0 obj +<< /S /GoTo /D [394 0 R /Fit ] >> endobj -422 0 obj << -/Length 929 +398 0 obj << +/Length 931 /Filter /FlateDecode >> stream -xÚ}UM“Ł6˝űWp„Ş1Ém2ăÝLj“Úd|KrA% !Ć;ůői}€ń®“r•iµşűużnI(8(ř¸A˙ńMŕI˘$&A^”q™ ę7oPŚ2śÚý•h·BČ9fI9«w/}<ËÍ/đ›Ăn]Üí*đ÷ÇÍîĆÎâb_$Á± J}“$Žuđ[řXżE -©¨Xm1AácSÍĄ[>Éš‹ł“˘’5SŃÇ -Źi•™ÇŚ2€u‹O2Â$Ľlźd?t,JHř…ë÷('áĂśNˇÜUlć~n·‡Ć¸˙Ž®8•ńżň†o‚݉víŠ"ź•[<łŽ~ôŰĚŘ•9Ű‘}\ćyćéIHă¬p–ťD+0¶1_Ĩąž´[5ÓUŻŮYq¦4sŠ×ŞĄťžÄ™ ońňş” ¸$ĺ˙#ř8–2yBő\ůWQ˛«‰ëqAYş~[Ő -˛Őzřn·»\.¦u1çcÜ\ł ŞŮŽöý}~J“ŇGzćcŐQŢ/\~Ťš -î@ćSxě:§WpĹčŃËldęÍ@ZbŤÝĎŢ} JßT›ŻŞĹxžFś„Ătęx5§[–k#®Ť…bm—ô¶XĐOšwüźYË˝;3W`bÎÂÚ ‚úť•@2*Ě´¦p“±ŽÁť M“‚W·ľ=ó +xÚ}UM“Ł6˝űWp„Ş1–Â&·ÉŚw3©Mj“ń-ÉAa”€D„ďäקő¶wť”«L«ŐÝŻűuKBŃ)BŃÇúŹ/†á(C8ĄQ±-ÓÓ¨ęWŻPŠr’ąý+ŃmQ„wĚq9«7/=ŽžŐęřÍa×>îú*đ÷‡Őć!ÉÓín‹ŁC•(˘»2Ą¸uô[üXż%ĹLVĽNÖ„˘ř1ż©Ę/źT-äÉË{Y©šëäŹĂŹ +˛5fřnł9źĎ¶u©cÚ\˛ Şů†őý}~J”Ň2DzcŐ1Ń/\~ŤŠ•zŰŮ(Ý3#0’młX„ŻiĹčĄZUSĎĄ űA;NÇ?y”Fů/Đ›ŕčőËł0š‚ŤTFT<Měá‹í¬2)řř¬s”Ç’ő‹ě&>Ű’¸f†yßiäőmz~ΙťřqiŕU]-×\¸&Óiî7äĐGˇ¦Ńk& ţAVśÎbĆ/Ż!ÝŚńgę©2!ś?‘4®””m|p°5x±÷ÓNăcŘ3šŐĽgúŻKűŻvuśÄh ßúŰ;…©Ćűl˝XÍdZrw8>´<śb»ëŞ·Â…ÄFOĎâĐ1ąL +x<É6…wÖ'ý+·7ᛸ endstream endobj -418 0 obj << +394 0 obj << /Type /Page -/Contents 422 0 R -/Resources 421 0 R +/Contents 398 0 R +/Resources 397 0 R /MediaBox [0 0 595.276 841.89] -/Parent 426 0 R -/Group 420 0 R +/Parent 402 0 R +/Group 396 0 R >> endobj -419 0 obj << +395 0 obj << /Type /XObject /Subtype /Image /Width 5000 /Height 1419 /BitsPerComponent 8 /ColorSpace /DeviceRGB -/SMask 427 0 R +/SMask 403 0 R /Length 111531 /Filter /FlateDecode >> @@ -1052,7 +1014,7 @@ i›©u©xą ]* endstream endobj -427 0 obj << +403 0 obj << /Type /XObject /Subtype /Image /Width 5000 @@ -1149,18 +1111,18 @@ t8߀ŹŹ%jYç¬0îî3nÓ-śöŰĘŢM:ś3ŮŇázŢÉÍ_ŐűŐGŕďFǵŞA‡sVw÷™·éŽűq]Ď&ΙěuŹAŐC ëpďül endstream endobj -420 0 obj +396 0 obj <</Type/Group /S/Transparency /CS/DeviceRGB /I true>> endobj -423 0 obj << -/D [418 0 R /XYZ 90 739.935 null] +399 0 obj << +/D [394 0 R /XYZ 90 739.935 null] >> endobj -421 0 obj << -/Font << /F22 424 0 R /F23 425 0 R >> -/XObject << /Im1 419 0 R >> +397 0 obj << +/Font << /F22 400 0 R /F23 401 0 R >> +/XObject << /Im1 395 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj -430 0 obj << +406 0 obj << /Length 19 /Filter /FlateDecode >> @@ -1168,843 +1130,794 @@ stream xÚ3PHW0Ppç2ŔA endstream endobj -429 0 obj << +405 0 obj << /Type /Page -/Contents 430 0 R -/Resources 428 0 R +/Contents 406 0 R +/Resources 404 0 R /MediaBox [0 0 595.276 841.89] -/Parent 426 0 R +/Parent 402 0 R >> endobj -428 0 obj << +404 0 obj << /ProcSet [ /PDF ] >> endobj -461 0 obj << -/Length 988 +437 0 obj << +/Length 991 /Filter /FlateDecode >> stream -xÚíY]o›0}ďŻŕiiPŰŚ“,Ý:µZ×fOۼখČŔdÚ~ý64 ô¶ÚG’'Ŕ’1śsî˝ÇľŔšYŔz{Ěu89:>AČBŘ#ÖäÚ˘Ŕ -1öB€¬Il}¶Gi"y"sçë佚,heĺäňćňžN=˘°ś
,7$!TO†Ž -VŁÔëŕâTŻx"ćĽ%…âCś>#NýÇĆ)Şy©ătÄćs‘Ě47Wü{Á“i+©†Ä?0ńR4ˇáwĄĘÓ$—¬¤ zĚç锵ފ÷ -˙"V$ě`Éű[ý®J}»-~Óđ:)·&(Ä/U2«ŰWM–®wâ9ĎVv*Z Ă`Čxî]µ@ßlÇąUůęR9p¶WĺţO™í™!¦ĹQ«)€vÖížÖću<9ú
S˘!2 +xÚí™Ár›:†÷y +–öLˇ’-cÇiÓI¦iě»ę˝Ő(ŽflpA$Ó>}Řâ;s3µ˝4#ß˙źŁX3XźÎ€9&g/˛vH@ 5ą·(°|Ś kZß{Ă8’<’i˙żÉ5XĐJňÉůÉÝ'=ť:ÔG~>X¶OB¨žű6 +ńáěO{9Ű{ 8B…xÓ޸ČýHÝö6‰űĐë=ŠĐŘzÝ÷‘×»/MÁÓi"–2N"`ŹľĄ˝î–.x+Üí.×#×"•-ő÷·ô_h·{Ô3™á’ópŤ^ĂĄkzţ©2Ů[’†§}#ĆşuB¦2ála“¬Y;zÇŠ/îUĂý†+¸+ĚĹŮ0Žţ +! +ĎüxxNž´Ôáč PÝÍ[U{ĂE|®±ÝÄeÍ÷BšF$8`kť“/-ľ˝sžçY(bÍđ[ĆćBţŞ€¦Ş˘Ö8[*ĺăąfLl@Ž®/ĚÇF&ăvS®<»±8…ä v§ Ű×HeKÔ]˝š)kńţB”»éćD;BŤzś-—q"ËŻ?őąˇŘ6˙OÓż$ţďvGystNŔiüyÁ»Xđ(,łĹrő?úNiˇĎTńPS¨Ĺ=—Łý÷CŘŠ îö
M’oVç}¬^Úľ~Đď˙yd›±ĆŔ#Ň#Âäݵ»ŔŤwúdˇŇqăq˝7I$[<µžĺuQŤĚ…QŚÚFôŔ“4v‚ĺű»ŘÁş9Ü:‚W˝_ś˙ŘzŠŇ<ÚŞĐŰţš˝CjĄ„:6C]â^`šˇAŮŐÔÍĐz›š?°ĚŁł¤ą»új€Żl‡–
ŘuĂşU3t ŇŮ“•>¸…żW´đĆf®~MÎţ endstream endobj -460 0 obj << +436 0 obj << /Type /Page -/Contents 461 0 R -/Resources 459 0 R +/Contents 437 0 R +/Resources 435 0 R /MediaBox [0 0 595.276 841.89] -/Parent 426 0 R -/Annots [ 431 0 R 432 0 R 433 0 R 434 0 R 435 0 R 436 0 R 437 0 R 438 0 R 439 0 R 440 0 R 441 0 R 442 0 R 443 0 R 444 0 R 445 0 R 446 0 R 447 0 R 448 0 R 449 0 R 450 0 R 451 0 R 452 0 R 453 0 R 454 0 R 455 0 R 456 0 R 457 0 R ] +/Parent 402 0 R +/Annots [ 407 0 R 408 0 R 409 0 R 410 0 R 411 0 R 412 0 R 413 0 R 414 0 R 415 0 R 416 0 R 417 0 R 418 0 R 419 0 R 420 0 R 421 0 R 422 0 R 423 0 R 424 0 R 425 0 R 426 0 R 427 0 R 428 0 R 429 0 R 430 0 R 431 0 R 432 0 R 433 0 R ] >> endobj -431 0 obj << +407 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 575.708 160.007 584.684] /A << /S /GoTo /D (chapter.1) >> >> endobj -432 0 obj << +408 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 555.978 153.203 566.882] /A << /S /GoTo /D (section.1.1) >> >> endobj -433 0 obj << +409 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 540.343 190.552 549.189] /A << /S /GoTo /D (section.1.2) >> >> endobj -434 0 obj << +410 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 510.492 167.648 521.371] /A << /S /GoTo /D (chapter.2) >> >> endobj -435 0 obj << +411 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 494.722 166.772 503.569] /A << /S /GoTo /D (section.2.1) >> >> endobj -436 0 obj << +412 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 474.973 198.861 485.877] /A << /S /GoTo /D (section.2.2) >> >> endobj -437 0 obj << +413 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 459.337 242.288 468.184] /A << /S /GoTo /D (section.2.3) >> >> endobj -438 0 obj << +414 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 439.588 226.916 450.492] /A << /S /GoTo /D (section.2.4) >> >> endobj -439 0 obj << +415 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 421.895 268.24 432.799] /A << /S /GoTo /D (subsection.2.4.1) >> >> endobj -440 0 obj << +416 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 404.203 310.123 415.107] /A << /S /GoTo /D (subsection.2.4.2) >> >> endobj -441 0 obj << +417 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 386.51 199.987 397.414] /A << /S /GoTo /D (section.2.5) >> >> endobj -442 0 obj << +418 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 368.818 219.065 379.722] /A << /S /GoTo /D (section.2.6) >> >> endobj -443 0 obj << +419 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 351.125 228.47 362.029] /A << /S /GoTo /D (section.2.7) >> >> endobj -444 0 obj << +420 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 333.433 228.739 344.337] /A << /S /GoTo /D (section.2.8) >> >> endobj -445 0 obj << +421 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 317.678 227.473 326.644] /A << /S /GoTo /D (section.2.9) >> >> endobj -446 0 obj << +422 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 298.048 286.741 308.952] /A << /S /GoTo /D (subsection.2.9.1) >> >> endobj -447 0 obj << +423 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 280.355 277.516 291.259] /A << /S /GoTo /D (subsection.2.9.2) >> >> endobj -448 0 obj << +424 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 262.663 280.285 273.567] /A << /S /GoTo /D (subsection.2.9.3) >> >> endobj -449 0 obj << +425 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.862 244.97 286.094 255.874] +/A << /S /GoTo /D (subsection.2.9.4) >> +>> endobj +426 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [103.948 244.97 247.299 255.874] +/Rect [103.948 227.278 247.299 238.182] /A << /S /GoTo /D (section.2.10) >> >> endobj -450 0 obj << +427 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [103.948 227.278 203.294 238.182] +/Rect [103.948 209.585 203.294 220.489] /A << /S /GoTo /D (section.2.11) >> >> endobj -451 0 obj << +428 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [103.948 209.585 354.944 220.489] +/Rect [103.948 191.893 354.944 202.797] /A << /S /GoTo /D (section.2.12) >> >> endobj -452 0 obj << +429 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [126.862 192.61 294.293 202.797] +/Rect [126.862 174.917 387.274 185.104] /A << /S /GoTo /D (subsection.2.12.1) >> >> endobj -453 0 obj << +430 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [126.862 174.917 338.577 185.104] +/Rect [126.862 157.225 431.557 167.412] /A << /S /GoTo /D (subsection.2.12.2) >> >> endobj -454 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [89.004 148.31 188.44 157.286] -/A << /S /GoTo /D (chapter.3) >> ->> endobj -455 0 obj << +431 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [103.948 130.637 172.58 139.484] -/A << /S /GoTo /D (section.3.1) >> +/Rect [126.862 138.815 364.051 149.719] +/A << /S /GoTo /D (subsection.2.12.3) >> >> endobj -456 0 obj << +432 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [103.948 112.945 243.772 121.791] -/A << /S /GoTo /D (section.3.2) >> +/Rect [89.004 112.925 188.44 121.901] +/A << /S /GoTo /D (chapter.3) >> >> endobj -457 0 obj << +433 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [126.862 93.195 290.726 104.099] -/A << /S /GoTo /D (subsection.3.2.1) >> +/Rect [103.948 95.252 172.58 104.099] +/A << /S /GoTo /D (section.3.1) >> >> endobj -462 0 obj << -/D [460 0 R /XYZ 90 604.454 null] +438 0 obj << +/D [436 0 R /XYZ 90 604.454 null] >> endobj -459 0 obj << -/Font << /F22 424 0 R /F23 425 0 R >> +435 0 obj << +/Font << /F22 400 0 R /F23 401 0 R >> /ProcSet [ /PDF /Text ] >> endobj -499 0 obj << -/Length 982 +476 0 obj << +/Length 996 /Filter /FlateDecode >> stream -xÚíš]sÚ8†ďůş´/¬ęÓ’.“@vŇI“iaŻ˛ťŽ‚zĆYc¶Mý -üĽśôbc_9ĚQžóę=G¬ - _ -ä:Śô©ú ¸“>J#đk}<Çl“—˛·ňxE•ÔÉz‰J„m#ătľsě`kĺvź$…ďÚˇO*]D<÷I.3‘'wW_.7˱^Ď‹ Lól3Ď‹ż?éĄÎt2·6Eĺ˙=ÓIĄgµ7´fZ·7cťfů-ĘdŞYřŘ–J_ů=XGÝ #›oŐâ|Đń×jÓ7ňŕ„E#‘ě'FŠˇ”-(wbĄŰW×ěŽ7ËI4
ęµ](D|˙e -%M¬d«K¸cěófa„ţ…Ń™˝ĂQbŔŮľŕw=
ś;Ĺd_»”W¤Ěö)·: ~·˛eť—l“M|Ů"`&é€ő8VŹ3(”Őo»‡˝IĘóŽő9m,‘oąŃbÝşY2tłŻ Ů|‡nö|ŚÍn–4PÖݬqŮ‹d~ů”ŰĚr0ŐŁ‚¬›WCń&™ńcdcdCmúum˘mµi™6ëŃIµ‰Jň&ŰÔNż ¬=+J/úŤđł=€E©ĆÖ#Ú(Jó4YšŢß&hĎw«ťZW©-ÖíVŐZň÷|KĹĎŢ©ŇĆY‹.Şë(x˛4ËÄ€ń¸<«Ă”eÄúV'«ü›˝éç&O‚Yťž„‰1Đë0ŠnőöHősGGWĹ Çą_}ÜäWß‚$Ńös>!ýáčw¦(9ĆÁŹ˙Úp -ĘŠÇ)ĘgŠ÷›Ü,ńVŞ_čŠëáC¶’BŠČąĎŘţV»¤r +xÚíšM“š0Çď~Šś:p€&O’uu;ŰŮn§»Ţ¶ťŐh™Ü"öíÓ7 +şh¨şÖvábÂďů?o!MFo:˝açő% + @Ă R‰€řŽŃ˝Eî§á[Dé‡VW/Ţß7Ă»ĺ˝Î`ŘůÖ!ćFdő<ľ Ť’Îý'ŚĆćú[„}Ş$ú±úU‚PsŚŃ]çC—s)žĎ¦ĺÝ®gG+ł#ůŠ1$Ŕ\PL†úŕzsě\fa˘]Ěé]ô[Ď‹ÓWšĺĹÉžëě»Ř™EŮę
ÖS@÷^pÇw=Žńó=0ĄüdçĄ ěşuŮ6đaČ#Ćľđß'?˙Ěó( ó(ť »®`Îw—pGgá´4ŚeŁťą0Ď–n-Vv«·Ĺ•®ąŇRÔt4ë¬@6tĄ‘í,¶±~öş=§ÂĎ`ťČč‘"öx },Da&¶4’â"çe¸ąJÇúçöŚPS±Žž„—·kF¬F;Ď„L+şíqlĺoKeT˝Žćůî[ +
’Ä?@x)Ë(ÖGëCü‹>řFŹcÖÉKŮXyśS%â* ě0ŇźŤ‰Ns“OgéîČK8D§“őŐülTŇíşĚŚ<¸ąřÜ[Lúz>*łsž-F›’i˘3ťŽôîD•ĎÝҵFU§ÔB†é¦ęë<4î7.Ťi¨fŃCť)4µŕ<Ű|ˇäűN'_ÖEQ?ĚĂ#śFbŮLŚ”řRZî_îÔ`ű˛l†“A\[‘s)÷ϧЕF+X]஠źWc#Ěč#Ć łąD‹ó/8é6N‹ťb˛©UĘżQŢŠl›rm$4q[Ŕ')—lÓEŇ«0“´Ĺz`Ť„3_(«Ţ»†˝J»™K¤3ť?ĄŚů‚ĂxëV ‚ĘĘ^[ÍţŹĐ endstream endobj -498 0 obj << +475 0 obj << /Type /Page -/Contents 499 0 R -/Resources 497 0 R +/Contents 476 0 R +/Resources 474 0 R /MediaBox [0 0 595.276 841.89] -/Parent 426 0 R -/Annots [ 458 0 R 463 0 R 464 0 R 465 0 R 466 0 R 467 0 R 468 0 R 469 0 R 470 0 R 471 0 R 472 0 R 473 0 R 474 0 R 475 0 R 476 0 R 477 0 R 478 0 R 479 0 R 480 0 R 481 0 R 482 0 R 483 0 R 484 0 R 485 0 R 486 0 R 487 0 R 488 0 R 489 0 R 490 0 R 491 0 R 492 0 R 493 0 R 494 0 R 495 0 R ] +/Parent 402 0 R +/Annots [ 434 0 R 439 0 R 440 0 R 441 0 R 442 0 R 443 0 R 444 0 R 445 0 R 446 0 R 447 0 R 448 0 R 449 0 R 450 0 R 451 0 R 452 0 R 453 0 R 454 0 R 455 0 R 456 0 R 457 0 R 458 0 R 459 0 R 460 0 R 461 0 R 462 0 R 463 0 R 464 0 R 465 0 R 466 0 R 467 0 R 468 0 R 469 0 R 470 0 R 471 0 R 472 0 R ] >> endobj -458 0 obj << +434 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [103.948 728.876 186.438 737.723] -/A << /S /GoTo /D (section.3.3) >> +/Rect [103.948 728.876 243.772 737.723] +/A << /S /GoTo /D (section.3.2) >> >> endobj -463 0 obj << +439 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [89.004 698.125 197.536 709.004] -/A << /S /GoTo /D (chapter.4) >> +/Rect [126.862 709.097 290.726 720] +/A << /S /GoTo /D (subsection.3.2.1) >> >> endobj -464 0 obj << +440 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [103.948 680.117 172.949 691.021] -/A << /S /GoTo /D (section.4.1) >> +/Rect [103.948 693.431 186.438 702.278] +/A << /S /GoTo /D (section.3.3) >> >> endobj -465 0 obj << +441 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [126.862 662.245 251.035 673.149] -/A << /S /GoTo /D (subsection.4.1.1) >> +/Rect [89.004 665.335 155.484 674.311] +/A << /S /GoTo /D (chapter.4) >> >> endobj -466 0 obj << +442 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [126.862 644.372 242.188 655.276] -/A << /S /GoTo /D (subsection.4.1.2) >> +/Rect [103.948 647.632 168.435 656.479] +/A << /S /GoTo /D (section.4.1) >> >> endobj -467 0 obj << +443 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [89.004 617.581 155.484 626.557] +/Rect [89.004 619.535 148.839 628.511] /A << /S /GoTo /D (chapter.5) >> >> endobj -468 0 obj << +444 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [103.948 599.608 168.435 608.574] +/Rect [103.948 601.833 162.348 610.679] /A << /S /GoTo /D (section.5.1) >> >> endobj -469 0 obj << +445 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [89.004 570.879 148.839 579.855] +/Rect [89.004 573.736 196.43 582.712] /A << /S /GoTo /D (chapter.6) >> >> endobj -470 0 obj << +446 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [103.948 553.026 162.348 561.873] +/Rect [103.948 554.952 278.412 564.88] /A << /S /GoTo /D (section.6.1) >> >> endobj -471 0 obj << +447 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [89.004 524.178 196.43 533.154] -/A << /S /GoTo /D (chapter.7) >> +/Rect [126.862 536.254 243.463 547.158] +/A << /S /GoTo /D (subsection.6.1.1) >> >> endobj -472 0 obj << +448 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [103.948 505.244 278.412 515.171] -/A << /S /GoTo /D (section.7.1) >> +/Rect [126.862 520.469 279.707 529.435] +/A << /S /GoTo /D (subsection.6.1.2) >> >> endobj -473 0 obj << +449 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [126.862 486.395 243.463 497.299] -/A << /S /GoTo /D (subsection.7.1.1) >> +/Rect [158.742 502.747 244.55 511.713] +/A << /S /GoTo /D (subsubsection.6.1.2.1) >> >> endobj -474 0 obj << +450 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [126.862 470.579 279.707 479.426] -/A << /S /GoTo /D (subsection.7.1.2) >> +/Rect [158.742 485.024 265.87 493.991] +/A << /S /GoTo /D (subsubsection.6.1.2.2) >> >> endobj -475 0 obj << +451 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 452.707 244.55 461.553] -/A << /S /GoTo /D (subsubsection.7.1.2.1) >> +/Rect [158.742 467.302 218.538 476.268] +/A << /S /GoTo /D (subsubsection.6.1.2.3) >> >> endobj -476 0 obj << +452 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 434.834 265.87 443.681] -/A << /S /GoTo /D (subsubsection.7.1.2.2) >> +/Rect [158.742 449.699 235.693 458.546] +/A << /S /GoTo /D (subsubsection.6.1.2.4) >> >> endobj -477 0 obj << +453 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 416.961 218.538 425.808] -/A << /S /GoTo /D (subsubsection.7.1.2.3) >> +/Rect [158.742 431.977 238.114 440.824] +/A << /S /GoTo /D (subsubsection.6.1.2.5) >> >> endobj -478 0 obj << +454 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 399.088 235.693 407.935] -/A << /S /GoTo /D (subsubsection.7.1.2.4) >> +/Rect [103.948 412.197 271.04 423.101] +/A << /S /GoTo /D (section.6.2) >> >> endobj -479 0 obj << +455 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 381.216 238.114 390.062] -/A << /S /GoTo /D (subsubsection.7.1.2.5) >> +/Rect [126.862 394.475 243.463 405.379] +/A << /S /GoTo /D (subsection.6.2.1) >> >> endobj -480 0 obj << +456 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [103.948 361.286 271.04 372.19] -/A << /S /GoTo /D (section.7.2) >> +/Rect [126.862 378.81 279.707 387.657] +/A << /S /GoTo /D (subsection.6.2.2) >> >> endobj -481 0 obj << +457 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [126.862 343.413 243.463 354.317] -/A << /S /GoTo /D (subsection.7.2.1) >> +/Rect [158.742 359.03 258.587 369.934] +/A << /S /GoTo /D (subsubsection.6.2.2.1) >> >> endobj -482 0 obj << +458 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [126.862 327.598 279.707 336.444] -/A << /S /GoTo /D (subsection.7.2.2) >> +/Rect [158.742 341.308 261.357 352.212] +/A << /S /GoTo /D (subsubsection.6.2.2.2) >> >> endobj -483 0 obj << +459 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 307.668 258.587 318.572] -/A << /S /GoTo /D (subsubsection.7.2.2.1) >> +/Rect [103.948 324.562 283.951 334.49] +/A << /S /GoTo /D (section.6.3) >> >> endobj -484 0 obj << +460 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 289.795 261.357 300.699] -/A << /S /GoTo /D (subsubsection.7.2.2.2) >> +/Rect [126.862 305.863 243.463 316.767] +/A << /S /GoTo /D (subsection.6.3.1) >> >> endobj -485 0 obj << +461 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [103.948 272.898 283.951 282.826] -/A << /S /GoTo /D (section.7.3) >> +/Rect [126.862 290.198 279.707 299.045] +/A << /S /GoTo /D (subsection.6.3.2) >> >> endobj -486 0 obj << +462 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [126.862 254.049 243.463 264.953] -/A << /S /GoTo /D (subsection.7.3.1) >> +/Rect [158.742 272.476 234.229 281.322] +/A << /S /GoTo /D (subsubsection.6.3.2.1) >> >> endobj -487 0 obj << +463 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [126.862 238.234 279.707 247.081] -/A << /S /GoTo /D (subsection.7.3.2) >> +/Rect [158.742 254.753 236.44 263.6] +/A << /S /GoTo /D (subsubsection.6.3.2.2) >> >> endobj -488 0 obj << +464 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 220.361 234.229 229.208] -/A << /S /GoTo /D (subsubsection.7.3.2.1) >> +/Rect [158.742 234.974 256.904 245.878] +/A << /S /GoTo /D (subsubsection.6.3.2.3) >> >> endobj -489 0 obj << +465 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 202.489 236.44 211.335] -/A << /S /GoTo /D (subsubsection.7.3.2.2) >> +/Rect [158.742 217.251 253.038 228.155] +/A << /S /GoTo /D (subsubsection.6.3.2.4) >> >> endobj -490 0 obj << +466 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 182.559 256.904 193.462] -/A << /S /GoTo /D (subsubsection.7.3.2.3) >> +/Rect [158.742 201.586 260.41 210.433] +/A << /S /GoTo /D (subsubsection.6.3.2.5) >> >> endobj -491 0 obj << +467 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 164.686 253.038 175.59] -/A << /S /GoTo /D (subsubsection.7.3.2.4) >> +/Rect [158.742 181.807 259.145 192.711] +/A << /S /GoTo /D (subsubsection.6.3.2.6) >> >> endobj -492 0 obj << +468 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 148.87 260.41 157.717] -/A << /S /GoTo /D (subsubsection.7.3.2.5) >> +/Rect [158.742 164.084 258.029 174.988] +/A << /S /GoTo /D (subsubsection.6.3.2.7) >> >> endobj -493 0 obj << +469 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 128.94 259.145 139.844] -/A << /S /GoTo /D (subsubsection.7.3.2.6) >> +/Rect [158.742 146.362 271.319 157.266] +/A << /S /GoTo /D (subsubsection.6.3.2.8) >> >> endobj -494 0 obj << +470 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 111.068 258.029 121.972] -/A << /S /GoTo /D (subsubsection.7.3.2.7) >> +/Rect [103.948 129.616 282.835 139.544] +/A << /S /GoTo /D (section.6.4) >> >> endobj -495 0 obj << +471 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 93.195 271.319 104.099] -/A << /S /GoTo /D (subsubsection.7.3.2.8) >> +/Rect [126.862 110.917 243.463 121.821] +/A << /S /GoTo /D (subsection.6.4.1) >> >> endobj -497 0 obj << -/Font << /F22 424 0 R /F23 425 0 R >> +472 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.862 95.252 279.707 104.099] +/A << /S /GoTo /D (subsection.6.4.2) >> +>> endobj +474 0 obj << +/Font << /F22 400 0 R /F23 401 0 R >> /ProcSet [ /PDF /Text ] >> endobj -538 0 obj << -/Length 1079 +514 0 obj << +/Length 1121 /Filter /FlateDecode >> stream -xÚíš]s˘H†ďý} ˛ý ÍĄQĚ:ĄIVąËNQÚ,U.âLňď·ůđu”rgF´*U&Ňť‡÷ś÷ôŢŹŤ»ńGc`j¦Žu`O€ ˇ#ŤalĽ*íç'Űz˛GęWű jş‰äWłsľď§Ă
ËnüŰHG!@١„wÚxý -'Çż -2TOýĐŞĆHcě.BwíŠG}a~;Ő^Ń*éĘ*ĺ6Î -ÝvÍŵľDqIĄębś®Ě4‡)öĽbÁ˝c<Ž‘la|Ißë…“¨(O†gT‚G·ŕíĂF¨qŤ—˝Hw[můq÷l.«=Ď}˙ú?ĽL| +xÚíš]s˘H†ďý\Â…lBsiłNiĚ*wŮ)Š@›ĄŠu&ů÷Ó|hPÔ(“©ÔŞTˇm¤;OŢÓď9‡Ň‹¤űÖťŐú«Źd¨††4ÉšIt
ŞAÉň¤'ą;~°ĚkŞ|µľHU3 řjö™ďűépË´Z˙·ŇQ ÁěTWuL%7l=}’'ĆżH@Ĺ“ľgżJaq
¤iëź(“?y)n4Y/—–©!nÍ$‰1ĺëĐT˘"*m)]-y2ň_‡\ATţ¦@*ó [čz&é©Í +Ĺîéě#Í +„PÎěޤk?ćXűˇY!‹Éo4ŁV Ń*…GĹ@rgŇU‚^¦~ŚłŚ±$"Rcąď®xÔ)bW“ŤaTÓ*ÉĆ*EgFn7Ľá§(>C©Őq˛1Ó¦řŮsĆ‚Âëém`\Ă0ČĆjsŚ÷|9ôźŃ,ľ”'Ă#µ4H¶ŕíƉ~Ť—źCşĄGş…TÄtbQ>¦$ťÄ +ŹĚ(ş¨Sg5©iUjÓ#Ôd—EŤÖ +_}‹ÚxΫ‰Ťqu'G+,óëîÉi&Ş4€Î=8ýą« endstream endobj -537 0 obj << +513 0 obj << /Type /Page -/Contents 538 0 R -/Resources 536 0 R +/Contents 514 0 R +/Resources 512 0 R /MediaBox [0 0 595.276 841.89] -/Parent 426 0 R -/Annots [ 496 0 R 500 0 R 501 0 R 502 0 R 503 0 R 504 0 R 505 0 R 506 0 R 507 0 R 508 0 R 509 0 R 510 0 R 511 0 R 512 0 R 513 0 R 514 0 R 515 0 R 516 0 R 517 0 R 518 0 R 519 0 R 520 0 R 521 0 R 522 0 R 523 0 R 524 0 R 525 0 R 526 0 R 527 0 R 528 0 R 529 0 R 530 0 R 531 0 R 532 0 R 533 0 R 534 0 R ] +/Parent 402 0 R +/Annots [ 473 0 R 477 0 R 478 0 R 479 0 R 480 0 R 481 0 R 482 0 R 483 0 R 484 0 R 485 0 R 486 0 R 487 0 R 488 0 R 489 0 R 490 0 R 491 0 R 492 0 R 493 0 R 494 0 R 495 0 R 496 0 R 497 0 R 498 0 R 499 0 R 500 0 R 501 0 R 502 0 R 503 0 R 504 0 R 505 0 R 506 0 R 507 0 R 508 0 R 509 0 R 510 0 R 511 0 R ] >> endobj -496 0 obj << +473 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [103.948 727.795 282.835 737.723] -/A << /S /GoTo /D (section.7.4) >> +/Rect [158.742 728.876 264.814 737.723] +/A << /S /GoTo /D (subsubsection.6.4.2.1) >> >> endobj -500 0 obj << +477 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [126.862 709.02 243.463 719.924] -/A << /S /GoTo /D (subsection.7.4.1) >> +/Rect [158.742 709.195 254.712 720.098] +/A << /S /GoTo /D (subsubsection.6.4.2.2) >> >> endobj -501 0 obj << +478 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [126.862 693.278 279.707 702.125] -/A << /S /GoTo /D (subsection.7.4.2) >> +/Rect [158.742 691.57 290.398 702.474] +/A << /S /GoTo /D (subsubsection.6.4.2.3) >> >> endobj -502 0 obj << +479 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 675.479 264.814 684.326] -/A << /S /GoTo /D (subsubsection.7.4.2.1) >> +/Rect [158.742 673.946 284.6 684.85] +/A << /S /GoTo /D (subsubsection.6.4.2.4) >> >> endobj -503 0 obj << +480 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 655.623 254.712 666.527] -/A << /S /GoTo /D (subsubsection.7.4.2.2) >> +/Rect [158.742 656.321 245.297 667.225] +/A << /S /GoTo /D (subsubsection.6.4.2.5) >> >> endobj -504 0 obj << +481 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 637.824 290.398 648.728] -/A << /S /GoTo /D (subsubsection.7.4.2.3) >> +/Rect [158.742 638.697 280.983 649.601] +/A << /S /GoTo /D (subsubsection.6.4.2.6) >> >> endobj -505 0 obj << +482 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 620.025 284.6 630.929] -/A << /S /GoTo /D (subsubsection.7.4.2.4) >> +/Rect [158.742 621.073 295.11 631.977] +/A << /S /GoTo /D (subsubsection.6.4.2.7) >> >> endobj -506 0 obj << +483 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 602.226 245.297 613.13] -/A << /S /GoTo /D (subsubsection.7.4.2.5) >> +/Rect [158.742 603.448 313.69 614.352] +/A << /S /GoTo /D (subsubsection.6.4.2.8) >> >> endobj -507 0 obj << +484 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 584.427 280.983 595.331] -/A << /S /GoTo /D (subsubsection.7.4.2.6) >> +/Rect [158.742 585.824 259.833 596.728] +/A << /S /GoTo /D (subsubsection.6.4.2.9) >> >> endobj -508 0 obj << +485 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 566.628 295.11 577.532] -/A << /S /GoTo /D (subsubsection.7.4.2.7) >> +/Rect [158.742 568.2 293.586 579.103] +/A << /S /GoTo /D (subsubsection.6.4.2.10) >> >> endobj -509 0 obj << +486 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 548.829 313.69 559.733] -/A << /S /GoTo /D (subsubsection.7.4.2.8) >> +/Rect [158.742 552.632 275.892 561.479] +/A << /S /GoTo /D (subsubsection.6.4.2.11) >> >> endobj -510 0 obj << +487 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 531.031 259.833 541.934] -/A << /S /GoTo /D (subsubsection.7.4.2.9) >> +/Rect [103.948 532.951 277.685 543.855] +/A << /S /GoTo /D (section.6.5) >> >> endobj -511 0 obj << +488 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 513.232 293.586 524.136] -/A << /S /GoTo /D (subsubsection.7.4.2.10) >> +/Rect [126.862 515.326 243.463 526.23] +/A << /S /GoTo /D (subsection.6.5.1) >> >> endobj -512 0 obj << +489 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 497.49 275.892 506.337] -/A << /S /GoTo /D (subsubsection.7.4.2.11) >> +/Rect [126.862 499.759 279.707 508.606] +/A << /S /GoTo /D (subsection.6.5.2) >> >> endobj -513 0 obj << +490 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [103.948 477.634 277.685 488.538] -/A << /S /GoTo /D (section.7.5) >> +/Rect [158.742 480.078 258.587 490.982] +/A << /S /GoTo /D (subsubsection.6.5.2.1) >> >> endobj -514 0 obj << +491 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [126.862 459.835 243.463 470.739] -/A << /S /GoTo /D (subsection.7.5.1) >> +/Rect [158.742 462.453 261.357 473.357] +/A << /S /GoTo /D (subsubsection.6.5.2.2) >> >> endobj -515 0 obj << +492 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [126.862 444.093 279.707 452.94] -/A << /S /GoTo /D (subsection.7.5.2) >> +/Rect [158.742 444.829 256.933 455.733] +/A << /S /GoTo /D (subsubsection.6.5.2.3) >> >> endobj -516 0 obj << +493 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 424.237 258.587 435.141] -/A << /S /GoTo /D (subsubsection.7.5.2.1) >> +/Rect [89.004 419.279 189.785 428.256] +/A << /S /GoTo /D (chapter.7) >> >> endobj -517 0 obj << +494 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 406.438 261.357 417.342] -/A << /S /GoTo /D (subsubsection.7.5.2.2) >> +/Rect [103.948 400.594 239.389 410.522] +/A << /S /GoTo /D (section.7.1) >> >> endobj -518 0 obj << +495 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 388.639 256.933 399.543] -/A << /S /GoTo /D (subsubsection.7.5.2.3) >> +/Rect [126.862 381.993 243.463 392.897] +/A << /S /GoTo /D (subsection.7.1.1) >> >> endobj -519 0 obj << +496 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [89.004 362.216 189.785 371.193] -/A << /S /GoTo /D (chapter.8) >> +/Rect [126.862 364.369 257.053 375.273] +/A << /S /GoTo /D (subsection.7.1.2) >> >> endobj -520 0 obj << +497 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [103.948 343.356 239.389 353.284] -/A << /S /GoTo /D (section.8.1) >> +/Rect [158.742 347.721 315.185 357.648] +/A << /S /GoTo /D (subsubsection.7.1.2.1) >> >> endobj -521 0 obj << +498 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [126.862 324.581 243.463 335.485] -/A << /S /GoTo /D (subsection.8.1.1) >> +/Rect [126.862 329.12 298.288 340.024] +/A << /S /GoTo /D (subsection.7.1.3) >> >> endobj -522 0 obj << +499 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [126.862 306.782 257.053 317.686] -/A << /S /GoTo /D (subsection.8.1.2) >> +/Rect [158.742 312.472 309.396 322.4] +/A << /S /GoTo /D (subsubsection.7.1.3.1) >> >> endobj -523 0 obj << +500 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 289.96 315.185 299.887] -/A << /S /GoTo /D (subsubsection.8.1.2.1) >> +/Rect [158.742 294.848 303.738 304.775] +/A << /S /GoTo /D (subsubsection.7.1.3.2) >> >> endobj -524 0 obj << +501 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [126.862 271.184 298.288 282.088] -/A << /S /GoTo /D (subsection.8.1.3) >> +/Rect [158.742 277.223 279.937 287.151] +/A << /S /GoTo /D (subsubsection.7.1.3.3) >> >> endobj -525 0 obj << +502 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 254.362 309.396 264.289] -/A << /S /GoTo /D (subsubsection.8.1.3.1) >> +/Rect [158.742 259.599 370.109 269.527] +/A << /S /GoTo /D (subsubsection.7.1.3.4) >> >> endobj -526 0 obj << +503 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 236.563 303.738 246.49] -/A << /S /GoTo /D (subsubsection.8.1.3.2) >> +/Rect [158.742 241.975 281.631 251.902] +/A << /S /GoTo /D (subsubsection.7.1.3.5) >> >> endobj -527 0 obj << +504 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 218.764 279.937 228.691] -/A << /S /GoTo /D (subsubsection.8.1.3.3) >> +/Rect [126.862 225.431 260.081 234.278] +/A << /S /GoTo /D (subsection.7.1.4) >> >> endobj -528 0 obj << +505 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 200.965 370.109 210.893] -/A << /S /GoTo /D (subsubsection.8.1.3.4) >> +/Rect [158.742 207.807 253.038 216.653] +/A << /S /GoTo /D (subsubsection.7.1.4.1) >> >> endobj -529 0 obj << +506 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 183.166 281.631 193.094] -/A << /S /GoTo /D (subsubsection.8.1.3.5) >> +/Rect [158.742 190.182 260.221 199.029] +/A << /S /GoTo /D (subsubsection.7.1.4.2) >> >> endobj -530 0 obj << +507 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [126.862 166.448 260.081 175.295] -/A << /S /GoTo /D (subsection.8.1.4) >> +/Rect [158.742 172.558 275.165 181.405] +/A << /S /GoTo /D (subsubsection.7.1.4.3) >> >> endobj -531 0 obj << +508 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 148.649 253.038 157.496] -/A << /S /GoTo /D (subsubsection.8.1.4.1) >> +/Rect [158.742 154.934 246.941 163.78] +/A << /S /GoTo /D (subsubsection.7.1.4.4) >> >> endobj -532 0 obj << +509 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 130.85 260.221 139.697] -/A << /S /GoTo /D (subsubsection.8.1.4.2) >> +/Rect [158.742 136.228 292.719 146.156] +/A << /S /GoTo /D (subsubsection.7.1.4.5) >> >> endobj -533 0 obj << +510 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 113.051 275.165 121.898] -/A << /S /GoTo /D (subsubsection.8.1.4.3) >> +/Rect [158.742 118.604 291.065 128.532] +/A << /S /GoTo /D (subsubsection.7.1.4.6) >> >> endobj -534 0 obj << +511 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 95.252 246.941 104.099] -/A << /S /GoTo /D (subsubsection.8.1.4.4) >> +/Rect [158.742 100.003 251.922 110.907] +/A << /S /GoTo /D (subsubsection.7.1.4.7) >> >> endobj -536 0 obj << -/Font << /F22 424 0 R /F23 425 0 R >> +512 0 obj << +/Font << /F22 400 0 R /F23 401 0 R >> /ProcSet [ /PDF /Text ] >> endobj -547 0 obj << -/Length 419 +517 0 obj << +/Length 19 /Filter /FlateDecode >> stream -xÚíÖOo‚0 -ş),겓n§BK_?M)ĚB׹Źś»"h˘%Jf )„’˘)ŚÝÔcÔ}ó&Q¸T„ii'–#~ÔîGŁíÓŽś‡Ů! -¬Ś!BrIćŚ'¦¶ż”pŕ˝|* -ą±U`YÚ[ßÎ&OJÎĘw™l2“Żăď„ŞÓOSÎRÍş*—ď6ŤF‘ -zcűÂĹć)Wmýئ8ázjű +xÚ3PHW0Ppç2ŔA endstream endobj -546 0 obj << +516 0 obj << /Type /Page -/Contents 547 0 R -/Resources 545 0 R +/Contents 517 0 R +/Resources 515 0 R /MediaBox [0 0 595.276 841.89] -/Parent 426 0 R -/Annots [ 535 0 R 539 0 R 540 0 R 541 0 R 542 0 R 543 0 R 544 0 R ] ->> endobj -535 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 727.795 292.719 737.723] -/A << /S /GoTo /D (subsubsection.8.1.4.5) >> ->> endobj -539 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 710.171 291.065 720.098] -/A << /S /GoTo /D (subsubsection.8.1.4.6) >> ->> endobj -540 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 691.57 251.922 702.474] -/A << /S /GoTo /D (subsubsection.8.1.4.7) >> ->> endobj -541 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [103.948 673.946 226.517 684.85] -/A << /S /GoTo /D (section.8.2) >> ->> endobj -542 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [126.862 656.321 243.463 667.225] -/A << /S /GoTo /D (subsection.8.2.1) >> +/Parent 402 0 R >> endobj -543 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [126.862 640.754 260.081 649.601] -/A << /S /GoTo /D (subsection.8.2.2) >> ->> endobj -544 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [158.742 623.13 221.507 631.977] -/A << /S /GoTo /D (subsubsection.8.2.2.1) >> ->> endobj -545 0 obj << -/Font << /F22 424 0 R /F23 425 0 R >> -/ProcSet [ /PDF /Text ] +515 0 obj << +/ProcSet [ /PDF ] >> endobj -550 0 obj << +520 0 obj << /Length 1520 /Filter /FlateDecode >> @@ -2018,39 +1931,39 @@ vëárT96qť‡
°ˇŃë&ĂĂżŹzĺ ů¨¨ŰŞŞ·U<2ÉÉ;Ýb´˛Ă1ĆNöH[#a´ t˝ŘúprÝ6ö'äâŇÍÉČÎY·AWzw8
pťßđČnޡ©X¦†ç›…7ižĺţčUÚ3ž˙7FľÂża]®ßüĘ®ŃŃ endstream endobj -549 0 obj << +519 0 obj << /Type /Page -/Contents 550 0 R -/Resources 548 0 R +/Contents 520 0 R +/Resources 518 0 R /MediaBox [0 0 595.276 841.89] -/Parent 555 0 R +/Parent 525 0 R >> endobj -551 0 obj << -/D [549 0 R /XYZ 89 770.89 null] +521 0 obj << +/D [519 0 R /XYZ 89 770.89 null] >> endobj 2 0 obj << -/D [549 0 R /XYZ 90 739.935 null] +/D [519 0 R /XYZ 90 739.935 null] >> endobj -552 0 obj << -/D [549 0 R /XYZ 90 553.953 null] +522 0 obj << +/D [519 0 R /XYZ 90 553.953 null] >> endobj -553 0 obj << -/D [549 0 R /XYZ 90 553.953 null] +523 0 obj << +/D [519 0 R /XYZ 90 553.953 null] >> endobj 6 0 obj << -/D [549 0 R /XYZ 90 553.953 null] +/D [519 0 R /XYZ 90 553.953 null] >> endobj -554 0 obj << -/D [549 0 R /XYZ 118.403 407.688 null] +524 0 obj << +/D [519 0 R /XYZ 118.403 407.688 null] >> endobj 10 0 obj << -/D [549 0 R /XYZ 90 389.84 null] +/D [519 0 R /XYZ 90 389.84 null] >> endobj -548 0 obj << -/Font << /F22 424 0 R /F23 425 0 R >> +518 0 obj << +/Font << /F22 400 0 R /F23 401 0 R >> /ProcSet [ /PDF /Text ] >> endobj -558 0 obj << +528 0 obj << /Length 146 /Filter /FlateDecode >> @@ -2061,22 +1974,22 @@ xÚ•Ž± l4xĽŐc-‹ň†‰?—ľůăňj”ĺ_Őŕ1f endstream endobj -557 0 obj << +527 0 obj << /Type /Page -/Contents 558 0 R -/Resources 556 0 R +/Contents 528 0 R +/Resources 526 0 R /MediaBox [0 0 595.276 841.89] -/Parent 555 0 R +/Parent 525 0 R >> endobj -559 0 obj << -/D [557 0 R /XYZ 89 770.89 null] +529 0 obj << +/D [527 0 R /XYZ 89 770.89 null] >> endobj -556 0 obj << -/Font << /F22 424 0 R >> +526 0 obj << +/Font << /F22 400 0 R >> /ProcSet [ /PDF /Text ] >> endobj -571 0 obj << -/Length 1628 +540 0 obj << +/Length 1625 /Filter /FlateDecode >> stream @@ -2085,121 +1998,113 @@ xÚťWKsŰ6ľűW°—”j,ß“éAQäÔŤb{,ĄÓ™´ă(Čâ"Y>âşýóÝĹ‚%ËŽëĹîbźß‚–qkXĆÇKß/NFgśÜ áP‹Ôz€EGë"<×e0śMhOAC¦6–}otw‰óčđüýµňŤ.!I•)|ŃĄjYNłxÖ÷¦•BopÝ÷÷ť7¸ˇšBÝk@ëw:慌법|ß™y-‹R}43XÓú,ĐLWňŐśľ¨ö ó, ‰d]&1Ńç€~2ß nóU=Ěž@5'dač·¨Ć5ŞM Ş’ěVk”5Iů¸i“ĎĐ•WŔ•&ĄÄŔ!!ő|~9ú|5ý8ä#—(]ż#Ű2©«ş” -Op^Ä´/!9I©®Rď»áálžö¬čż¦eO!ök[€Ĺdë $«¶]p”
—€Í«v$AžG”n¶/ls5ęŤ9\×…Í/đtŁ|w˛ -ł©öŮO뛞ż§Ö©J3A0ňţ e(H7—ź:őšáß˝č`ě°
»c1Űď Ż¨Fxć‰ÎĚ›ą¬»ůńdişľm +EŚ%¤‚fŽÔŞx¬@ö•¬ÁÔâń}1\óTźcëş@)JE„lf2TůĆi"dQ)S-éRÂĽţ°Çć)E@[ÖzűPČÝ[đŮ®Ř
‹×ô1›‡PvđőB2ęůzéß˝_7ÄŘĹV￉´‘›w/*e‹îMçEâđÖV2ë©Ęp¸1%°ŠÖ™_Ń ÔĆ3wáďLR'"Mţ‘Źoč ±¶ -ß4°ÁP}‡‹"Bcéă%Ě´;RCęl‚ -TŹ»MjzŹ +Op^Ä´/!9I©®Rď»áálžö¬čż¦eÇüŘ>°¸(Ú#«¶pR
— +ćC\6cĺ6YŹ„źésńe6{‡Âf¤Čý€‘idN¤çOę^mľkôȲŻq-’*Ě1›Ž}D>ęx_]9t<‡…d8b®ŻŹ Ε^LÓn5-ËĽśCÝ5Őž#űi}Óó÷Ô:Ui&„EŢ´éćňS§^3ü»ý¶aw,fűÝűňŐŻ8Ń™y3—u7ž,M×דdĄ±ä€TĐH‘ú@/†Ŕľ’5## +ŁáŕţGUŁŰ\ç˙Mnô’äîö8« ď._žeÂO††÷5P`ŮÚčólť?ŮýŔĄzŰâ0eŕ)ń%đ
AuĐçp¸("4–>^ÂL»#5¤Î&¨@őغۤ¦çrő´˛ôż)H,ˇE>]xŕ‰ôµ÷fß1¸ßȬ} tĎŐëł Ľ6,Ú´ż˘H´lżýŹĽĂ?y endstream endobj -570 0 obj << +539 0 obj << /Type /Page -/Contents 571 0 R -/Resources 569 0 R +/Contents 540 0 R +/Resources 538 0 R /MediaBox [0 0 595.276 841.89] -/Parent 555 0 R -/Annots [ 560 0 R 561 0 R 562 0 R 563 0 R 564 0 R 565 0 R 566 0 R 567 0 R 568 0 R ] +/Parent 525 0 R +/Annots [ 530 0 R 531 0 R 532 0 R 533 0 R 534 0 R 535 0 R 536 0 R 537 0 R ] >> endobj -560 0 obj << +530 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [429.414 487.604 481.08 498.508] /A << /S /GoTo /D (aacenc__lib_8h) >> >> endobj -561 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [89.004 331.427 127.798 342.331] -/A << /S /GoTo /D (main_8cpp) >> ->> endobj -562 0 obj << +531 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.008 306.101 191.977 317.005] /A << /S /GoTo /D (aacenc__lib_8h_a04ddaeecd6dc422bb72175b9e0ab3fea) >> >> endobj -563 0 obj << +532 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.24 306.101 416.363 317.005] /A << /S /GoTo /D (LIBUSE_encOpen) >> >> endobj -564 0 obj << +533 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.963 245.775 231.074 256.678] /A << /S /GoTo /D (aacenc__lib_8h_a5743dca1ec3746f9c5ecb839a132ba7e) >> >> endobj -565 0 obj << +534 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [202.995 236.31 247.598 247.214] /A << /S /GoTo /D (LIBUSE_encParams) >> >> endobj -566 0 obj << +535 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.71 197.993 200.978 208.897] /A << /S /GoTo /D (aacenc__lib_8h_a6ccf4948de12c1cde8ca22a1216c5d3e) >> >> endobj -567 0 obj << +536 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [310.678 197.993 347.539 208.897] /A << /S /GoTo /D (LIBUSE_encReconf) >> >> endobj -568 0 obj << +537 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.522 140.747 186.51 151.651] /A << /S /GoTo /D (aacenc__lib_8h_a9b64b2026a1475eb5c7a67fc1364ed94) >> >> endobj -572 0 obj << -/D [570 0 R /XYZ 89 770.89 null] +541 0 obj << +/D [539 0 R /XYZ 89 770.89 null] >> endobj 14 0 obj << -/D [570 0 R /XYZ 90 739.935 null] +/D [539 0 R /XYZ 90 739.935 null] >> endobj -573 0 obj << -/D [570 0 R /XYZ 90 549.218 null] +542 0 obj << +/D [539 0 R /XYZ 90 549.218 null] >> endobj -574 0 obj << -/D [570 0 R /XYZ 90 549.218 null] +543 0 obj << +/D [539 0 R /XYZ 90 549.218 null] >> endobj 18 0 obj << -/D [570 0 R /XYZ 90 549.218 null] +/D [539 0 R /XYZ 90 549.218 null] >> endobj -575 0 obj << -/D [570 0 R /XYZ 258.088 437.267 null] +544 0 obj << +/D [539 0 R /XYZ 258.088 437.267 null] >> endobj 22 0 obj << -/D [570 0 R /XYZ 90 420.2 null] +/D [539 0 R /XYZ 90 420.2 null] >> endobj -576 0 obj << -/D [570 0 R /XYZ 90 322.585 null] +545 0 obj << +/D [539 0 R /XYZ 90 322.585 null] >> endobj -578 0 obj << -/D [570 0 R /XYZ 90 261.925 null] +547 0 obj << +/D [539 0 R /XYZ 90 261.925 null] >> endobj -579 0 obj << -/D [570 0 R /XYZ 90 212.916 null] +548 0 obj << +/D [539 0 R /XYZ 90 212.916 null] >> endobj -580 0 obj << -/D [570 0 R /XYZ 90 156.897 null] +549 0 obj << +/D [539 0 R /XYZ 90 156.897 null] >> endobj -569 0 obj << -/Font << /F22 424 0 R /F23 425 0 R /F37 577 0 R >> +538 0 obj << +/Font << /F22 400 0 R /F23 401 0 R /F37 546 0 R >> /ProcSet [ /PDF /Text ] >> endobj -598 0 obj << +566 0 obj << /Length 1742 /Filter /FlateDecode >> @@ -2213,194 +2118,203 @@ $Š¤›
)e3«Î¶šß`F$4RŚJ“^.ëÍ&/”ĺwÇ‹l=˝#0]ߨŘC]@=ĆǨmMŽäJAĄN*ÉŮ47ęRFu!i€ ^M9‘ĄŔm©ĚŁąÍw›^ ôŰŕQŘ˙;u,‡Ů?úö?úŮŇ endstream endobj -597 0 obj << +565 0 obj << /Type /Page -/Contents 598 0 R -/Resources 596 0 R +/Contents 566 0 R +/Resources 564 0 R /MediaBox [0 0 595.276 841.89] -/Parent 555 0 R -/Annots [ 590 0 R 591 0 R 592 0 R 593 0 R 594 0 R 595 0 R ] +/Parent 525 0 R +/Annots [ 558 0 R 559 0 R 560 0 R 561 0 R 562 0 R 563 0 R ] >> endobj -590 0 obj << +558 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.768 668.546 184.625 679.45] /A << /S /GoTo /D (LIBUSE_feedInBuf) >> >> endobj -591 0 obj << +559 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [368.743 668.546 412.06 679.45] /A << /S /GoTo /D (LIBUSE_bufDes) >> >> endobj -592 0 obj << +560 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [422.8 668.546 490.067 679.45] /A << /S /GoTo /D (aacenc__lib_8h_a6ccf4948de12c1cde8ca22a1216c5d3e) >> >> endobj -593 0 obj << +561 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [139.086 581.879 185.631 592.783] /A << /S /GoTo /D (LIBUSE_writeOutData) >> >> endobj -594 0 obj << +562 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.008 533.07 193.092 543.974] /A << /S /GoTo /D (aacenc__lib_8h_a2a5f6ec334fff553f0fd9e36d9408e94) >> >> endobj -595 0 obj << +563 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [179.762 437.019 238.731 447.923] /A << /S /GoTo /D (aacenc__lib_8h_a04ddaeecd6dc422bb72175b9e0ab3fea) >> >> endobj -599 0 obj << -/D [597 0 R /XYZ 89 770.89 null] +567 0 obj << +/D [565 0 R /XYZ 89 770.89 null] >> endobj -600 0 obj << -/D [597 0 R /XYZ 90 739.935 null] +568 0 obj << +/D [565 0 R /XYZ 90 739.935 null] >> endobj -601 0 obj << -/D [597 0 R /XYZ 90 549.323 null] +569 0 obj << +/D [565 0 R /XYZ 90 549.323 null] >> endobj -584 0 obj << -/D [597 0 R /XYZ 90 498.871 null] +552 0 obj << +/D [565 0 R /XYZ 90 498.871 null] >> endobj 26 0 obj << -/D [597 0 R /XYZ 90 491.71 null] +/D [565 0 R /XYZ 90 491.71 null] >> endobj -596 0 obj << -/Font << /F22 424 0 R /F23 425 0 R /F37 577 0 R >> +564 0 obj << +/Font << /F22 400 0 R /F23 401 0 R /F37 546 0 R >> /ProcSet [ /PDF /Text ] >> endobj -610 0 obj << -/Length 2003 +578 0 obj << +/Length 2006 /Filter /FlateDecode >> stream -xÚĄXYsŰF~çŻŔ“Üđ`p—ťJf¦,ˑ臔íRA(ˇ -‡o˛˙}»§gpK–˝Oěé™ééóë™v§1í×ĹŮ~ńňεŔ\îjűŁ0ÍsMĂᦶŹ´Ź:7ěĺš;Lß姦~yŮÔđCśMą4™~×dq^WŔ -\—ëÎňóţ÷Ĺvżř÷„'f -‘Žgx–Ł˛ĹÇĎL‹€˙»Ć+đµq*ÓlnÁoŞ]/ţX0©ŢřW¨kyšg3Q]Ó6
—ąšÇÁŹ“ÎaxŘć‡ËSśb{qżë"ŠË[qŕ™BI%uäµižmĂ/č̤>qîŽ/Y}·!âđ&Š’:)ň0Mż‚_|GŻďc"˛đŻ$k2ZäMv—DGúšÓ©(ë8˘ĺá>Ěó8h•äřëvâ®Ď®¤Ü"jRÉ<„9·’ĹyAPqmšFŕ8¤jźÂ2¬cPÔutŁwIJĄé»\ŮTô|Ľ4ýŻ0;©[}brłŇ¶ŞĂüÓĄSYŕµ/IKk‰KÜÖ
îśů…ČĽŢ©‡űäpOds’®)hÍ•)a»ŇŘNšĹĺiZ€#
˘öÂL2»5Ůť1¸.F¬ŠĹ=ňđŔA(Ę1Ly‘T Ĺfł´™~ľ~{ŢWÖ–‘©Ë8ĚĐrF—Úž^-M˝ŽË¸ ĺo۵”AÇ0ÝżP‚‹µ”!-źJ!‘5iťÄV?ä'ňuČ"NEU%·"ę¨LBÁEýrH ©Ă9EˇCÄ
~]úéEVm<pńXĄbŚ'Â%gútn,/Ea•ĹYQvY<ÁŽp@ŤűÝ1Ň=‰î?ČäŻ_űč]!9 -é€ôďöÝůÍöę -éË+Ú‘éçSĆuSć诏ő»aPiDˇ©ç‘ɧŚhvĎ~°ůsŁ5Ă:9@QáŚňn#rÜĹC¤ Í}ÓsŤ -¨»r’’¨pÔŹ†ëG„‡e~ţĎÄřR$ôéŔ>łf 0¸Řc'ątáçĺÚöAĆĎ$ęoúé%׊8ŁČKî‹A‰÷_J+Ë2lϤ…L8înŔŤ6¤9$‰/´ ÇvQ…zZl˘çîÝÍćĂ›ÝĺÍ›Í~łęxďÎwoß^ý)Ůřj˙Q©ĽŘî7xććz»˙đ^ę˙Łj^ܞč‰\zžEXŤ÷G~¦3˘ş]Ď°ĽˇÝµAč+łoËŕňłŚŮ¦ĘQŻŹ™#1iÖQ¶Ď5`O`úđŃ<ł -ěů*ě˘E,©ť}°j㺸Ţ3üŮ>!“x&9.?ěoÎvűëýŐvs!RvđÖăĐ:óJ4˙‰ őÍš8š}ŹQ]–¸OĽ×&B˙ˇo"¶†GÎÇ>*AO>űáS˝ˇ2ĺŔüWŔ'—sλ@®hoŚ¬Z«gű¶írř¶ -S1ĄŤúĆÓ†ţ ťMń@V˛•ţ<Ŧ.'^v춰¸VŘü9ŠhqĆn<Ů©t+ôń{U1x’Ş~ÔŇéiřćeB
5őJhđ¸¨Ě8Ż“c">f{yÜk?Ż®˙…î[†Ĺř÷ţţ?Ý4Q +xÚĄXYsŰ8~ׯŕSŠÚ‘Ľ+3˛Ł™ŃTgmĺa+Iąh‘˛YĹCË#žěńß·
đ–ăÉ>©Ń +XërÝY~Ů˙±Řî˙\đÓL!ŇńĎr´C¶řô…iđ˙Đaľö$NešÍ-řMµŰĹßLŞ7ţęZžćÇLT×´MĂe®ćq0Áă¤s¶ůáúçź™Ă^=nÄşârĹVx¦PRIy`mÚ†gŰđ:3é†Ďś»ăKVßmHÁ†8Ľ‰˘¤NŠ<LÓoŕßŃëÇ,ü3ÉšŚy“ÝÇ%ŃĹ‘~«ćt*Ę:Žhyxó<N+Z%9ţşť¸Ű‹)·šT2aNÄ˝dDq^ DĐT\›¦8©Zŧ°ëuÝč±liú.W6$=/MG˙3ĚNęĹVźÜ¬´ę0?ÄtéTxíkĹŇšpâ·u;g~!2Żwęé19<Ůś¤k +ZseJ`Ř®4¶“f±@yšŕH¨˝0Ó‚ĚnŤAvg®„‹‘ +Br +e'Đ÷¸ć¸äŽęUt),cÚŤ„˘÷±Ľř”ÔŹ2„Ř>ĘŮGn~[hźfÄ‘´hhmw°
óň•*ďgńáq=‡ažT€D–蔦>đ„h`ŮVČţĚEĺM…€[ĆQšät“ąŇ'BúyĘ'Čśř™h{A'@Bv +ň4âň„Ë…ĚCÝ„)1ExZ ş1gÝő‰ş:ÍÄÄ TLžÇ‡¸ŞÂňńcă˝hIĂ€†IšŇ —*qĄÜKE¨ň„m•!Ŕl´m’ÖmÂŔ™™„a*Of#'¬—0—Ç2ĚZN‡˘be +n.~’¨¤ęĺćę§Îo€Ž–„âŤh¶žĆa%É"Ź‰PQrś•Č“-ҧ‰’br…Tű"E:ÉN—+ß}źÔôc™YŁÔ˝—ÚbR ÝGĆZďEj9ĽUĐ1§Ăv•üK¤6Ç$#¤ź¦˘ł&„ +†çXÚ¸!:
uEŘ•âHAB
DýÍVŢöČD*đĂĺíĆO›éd*N¨ä @‘§D +š|9Ě +¨»r’’¨pÔŹ†ëG„‡e~«ţĎÄřZ$ôéŔ>łf 0¸Řc'ątá—ĺÚöAĆ/$ęßôÓK®qF‘—ÜW8ďż”V–eŘž3H™pÜ7Ü€źŤ6¤9$‰/´ ÇvQ…zZl˘çîýÝćăŰÝőÝŰÍ~łęxď/wďŢÝüC˛ńŐţŁR8xµÝođĚÝív˙ńÔ˙GŐĽÜE=ą=Ń!ą8".ô<‹±ďŹüLgDu»žayCşk8ĐWfß–ÁĺłM•9˘^Ď™#1iÖQ¶/5`Ď`úđŃĽ° +ěů*ě˘E,©ť}°j㺸ŢüŮ>!“x&9®?îď.vűŰýÍvs%RvđÖyhťyĄ
š˙LĐúfMÍţŠQ]–¸ĎĽ×&B˙ˇď"¶†Ď#繏Ę3čiÂg?|Ş÷!T¦X‚źă +řKe›uÎś endstream endobj -609 0 obj << +577 0 obj << /Type /Page -/Contents 610 0 R -/Resources 608 0 R +/Contents 578 0 R +/Resources 576 0 R /MediaBox [0 0 595.276 841.89] -/Parent 555 0 R -/Annots [ 606 0 R 607 0 R ] +/Parent 525 0 R +/Annots [ 574 0 R 575 0 R ] >> endobj -606 0 obj << +574 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [390.616 548.752 462.827 559.656] /A << /S /GoTo /D (structAACENC__BufDesc) >> >> endobj -607 0 obj << +575 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 450.804 156.271 461.334] /A << /S /GoTo /D (aacenc__lib_8h_a6ccf4948de12c1cde8ca22a1216c5d3e) >> >> endobj -611 0 obj << -/D [609 0 R /XYZ 89 770.89 null] +579 0 obj << +/D [577 0 R /XYZ 89 770.89 null] >> endobj -603 0 obj << -/D [609 0 R /XYZ 90 635.872 null] +571 0 obj << +/D [577 0 R /XYZ 90 635.872 null] >> endobj 30 0 obj << -/D [609 0 R /XYZ 90 627.792 null] +/D [577 0 R /XYZ 90 627.792 null] >> endobj -612 0 obj << -/D [609 0 R /XYZ 90 592.959 null] +580 0 obj << +/D [577 0 R /XYZ 90 592.959 null] >> endobj 34 0 obj << -/D [609 0 R /XYZ 90 592.959 null] +/D [577 0 R /XYZ 90 592.959 null] >> endobj -608 0 obj << -/Font << /F22 424 0 R /F37 577 0 R /F23 425 0 R >> +576 0 obj << +/Font << /F22 400 0 R /F37 546 0 R /F23 401 0 R >> /ProcSet [ /PDF /Text ] >> endobj -618 0 obj << -/Length 1597 +586 0 obj << +/Length 1607 /Filter /FlateDecode >> stream -xÚťYoŰ6řÝżBOťĽEŚHÝ6ŔIÓÂ]ÚuŤ·=dE [”C@‡«#i6ěżď#?겕ˇ`€×w߲mě
Űx˝¸Ř,Î_1fD$ň™olR#˛ŤŔ§ÄcÔŘ$Ćé/?nŢ\±ŽşĽŰ*®ž–óló·:Ţs µ¸Ú,>-( -ŤG•.s`ÍŚ›ĹŻ{,”‰›Jˇ¨ĘB#` hŔPQ\´éK^ďȶMoÄ_Ľ^ZľmŰćŹjĹ÷”Wň饅mXq}o˙*ÓÜđ”>*`-gd-‹˘`–ăćůHx]FÄ Ę¶9´
î·Kf›mşdž „ń.*qhĘJY±3C·ŰBsd "9‡N—˘Ía+MáŠÔ K™ţi{6Bk8Đóáţˇ‰˛}14?iK}«^\„Ž1ş–$Đ°‹( ě -7uSµ»¦xMţoĆV—Wď.ďÖĹŞÚ†ŽĘE‡ąŇĐŕg.şĽ‡GW»Äqý©«=(—WÚŐžvô+Y?x§čzđĆĐ3ž sý±'ý¨÷$lOJÜŐ÷e›I6”.Ťr.Ďo8ĵ^qÉˤÍĘYzžg0”šď¸Ľ{Ôm"4B7q'®M'fZV9JˇânmVsKF‰5°¶:ŰcÖ ®YÜ(iŔ¬ăüÉÔ“]ď/ߪ -CMłÚü(ŔĆ]YÁ^ě8đęz1|ZĹ9żćĹľąG™Ěrž;jGFja$H[śĎ´ÖE ·´%ôlrĘhl"‰
ůÄö§’߬޾żľş»Xon$cbýt<2ę -
Ăr<âE]+H•ínWÝ`ĂU·«ľ‘5˛Ć+QôĆť)ÍBCb±qeÚ4÷ň®Ě±Š¸C…u»ÔŻĎ†”yľKĚ/éĹ -.€ÂăP¬î|rÁž)CV'„×}e"úź)Ů›ObŔôâË\š|Ŕ=SYa¨>čľFÖÖü3;uÎťbľÄĆcő4°FÍš<ÎńęĄl”óĂ|eyz–\Ë‘†Q9CČ?áaµ’q{‰‡"Ťdá¨%Ř©" QeÔ>Č ŤEo3.žůćc%dwW
®j&µź×aŻć -
'ű˛b‚ó…Řq˘ć[':n»¸Đriś¤,:ěb§wXÝ`“–$—Ě}™w§qí8C#:ŻaFçÓô;ţ{!tŔ%ěk˙]ř´T€y +xÚťX[oŰ6~÷ŻĐS'o±"R÷
ŕ¤Iá.íşĆ۲"-Ę& ‹«KҬčß!©‹í€ +ň+p<c›Ďî>ŘFçŻ
Űr˘Đx”TąáRÖ̸ťý>ł‡F9XQ`a±#‹ĐĐ(P4‚mú’Ő[kÓ¦·üVĎľmŰćĎrĹű”Uâę'é…m,"Ëő˝ ţ«LIpĂS x)e@´śA´
[8ŽE=Ż +Ţđ8PŮ6‡¶ÁýfNmłMçÔ3A0ž%`CĹMYÉ(ę0čő8J#u¬ rP#hĐľm[ +żw¤[ĘôoŰł‘TĂ9ďĎJžČŃĐ·"ę‚gđN*RßË× +BÇŘŤŘĆ×=1j#- +Ýޢ‘NP‹xŢX'*Ť,ä)}ŃyˇÔ“Ô“hôĽcő@»JXŃ𔳠+˘Mé„’z„“I?&€Ö xic “PëdŚ±F
B¬Čóčl®gQ[ĺ'µ\‹ÎDŘ󮚓Đ,çÄ6x˘Đ·* +RŠŮ©‹x–ˇŕZŽëŹˇŕA9…ĽSPđ®E}a:«ţµcĎĽthQ׾´u/
Ű“Ňgőľl3ˇ&€Ň¦Xö +tصĄěŐŽ·®72ħUśłVěš=ÚDaÖóÜ‘Qý¸2p‘ bq>Ńz{@AľP‘PłË©˘a +pä[¶?¶üvůćÝÍŐýĹj}‹Ňp` +ëƤăŮ‘Ď"ĐPŽgy‘n
i#łÝŐŐ
6LvĂę;Q#k<âEWa܉Ň,(%W¤Mł×ĚŰ2Ç*âöÖŐ©_źő)ó|Żś_Ó«îP•[V×Úá×éK]Ő˘(Ú|°óĽ‰Ť•
/*–ÇĽ@ŹDďĘř`< +—k›JAÍóÚA'(ĆĄëZ'Ľ?~SÖ‹ůA˙xIűLVŤ”żŘ=®?+ôaÇ„L$)ËóňőaZř
ć„Ţ‘ŁŞ0Ą]•…ŻH%I@áqÖwşôą`O”ˇ…6BŤó>Ś2ůĎ”ě§~‚Ŕôâ‹\ýŔ{¦˛.úˇű„B˙˘D[YđerÓŹ;Ä|5
Çîh`ŤśEYśăŃKŃ(§‡1řć©Ys%FJÄčÂŹĺRŕö?6R4Š…O5(ÁNÁ*Pű @ó,ŢdL +E'ú˛T‚óß2KÎż0Nhm۸Pv)ž¤,4w±U;¬n°IË’KäľČ»SÜA;NxßąĘkáŮ8ýŽ˙ý:đ$ô[˙űđ/7‡‡“ endstream endobj -617 0 obj << +585 0 obj << /Type /Page -/Contents 618 0 R -/Resources 616 0 R +/Contents 586 0 R +/Resources 584 0 R /MediaBox [0 0 595.276 841.89] -/Parent 555 0 R -/Annots [ 614 0 R 615 0 R ] +/Parent 525 0 R +/Annots [ 582 0 R 583 0 R ] >> endobj -614 0 obj << +582 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [241.292 555.078 308.559 565.982] /A << /S /GoTo /D (aacenc__lib_8h_a6ccf4948de12c1cde8ca22a1216c5d3e) >> >> endobj -615 0 obj << +583 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [390.31 269.964 457.577 280.868] /A << /S /GoTo /D (aacenc__lib_8h_a6ccf4948de12c1cde8ca22a1216c5d3e) >> >> endobj -619 0 obj << -/D [617 0 R /XYZ 89 770.89 null] +587 0 obj << +/D [585 0 R /XYZ 89 770.89 null] >> endobj -620 0 obj << -/D [617 0 R /XYZ 90 607.477 null] +588 0 obj << +/D [585 0 R /XYZ 90 607.477 null] >> endobj 38 0 obj << -/D [617 0 R /XYZ 90 600.016 null] +/D [585 0 R /XYZ 90 600.016 null] >> endobj -602 0 obj << -/D [617 0 R /XYZ 90 506.851 null] +570 0 obj << +/D [585 0 R /XYZ 90 506.851 null] >> endobj 42 0 obj << -/D [617 0 R /XYZ 90 498.269 null] +/D [585 0 R /XYZ 90 498.269 null] >> endobj -604 0 obj << -/D [617 0 R /XYZ 90 164.95 null] +572 0 obj << +/D [585 0 R /XYZ 90 164.95 null] >> endobj 46 0 obj << -/D [617 0 R /XYZ 90 156.368 null] +/D [585 0 R /XYZ 90 156.368 null] >> endobj -616 0 obj << -/Font << /F22 424 0 R /F37 577 0 R /F23 425 0 R >> +584 0 obj << +/Font << /F22 400 0 R /F37 546 0 R /F23 401 0 R >> /ProcSet [ /PDF /Text ] >> endobj -638 0 obj << +606 0 obj << /Length 2105 /Filter /FlateDecode >> @@ -2412,1592 +2326,1457 @@ U†¦= Ť_ŃőtÖ×U#ŰŐ7 üţ Š‚ŞÎ%Ŕ汣4Đ<ď—‡k®'”?ďÖđQĆŚ'‘oćz ę®I"uZł~¤ÔĆí6ŁµV:|¸Gßi81ü®pś0ŕ©ž_ß]Ďźź¨5Q—úňDܧďbČđ•Żî]c?†c.ş1Gž,„Ě4ŻőŚ'Ŕ‚6âHTŰ\*p,MPT*°E_ł€t<4žĎ˝ÓPśmäËZI)M•ÂľűrsĂú2áqD ňÎ`úĎ€éP[Ë\őĆÖ!?#¨¶~‚T.éÜ`éá»Ţ!óú(Ű^ŔŽ‹‡6Ca×Őűňţnţx9>ťĎz[óÇ›O7ÓĎOÝ{řńw=VŕxjI†¦–=:ëDŞÔĎś[¦ćj›‚˛6Gëö#*Îľž>Ś`˘ť>No‡űT/˛G-ˇw…6Ľ˛k¤™Ž×˙¶űŽďŠý´˙@€= endstream endobj -637 0 obj << +605 0 obj << /Type /Page -/Contents 638 0 R -/Resources 636 0 R +/Contents 606 0 R +/Resources 604 0 R /MediaBox [0 0 595.276 841.89] -/Parent 643 0 R -/Annots [ 621 0 R 622 0 R 623 0 R 641 0 R 624 0 R 625 0 R 626 0 R 627 0 R 628 0 R 629 0 R 630 0 R 631 0 R 632 0 R 633 0 R 634 0 R 635 0 R ] +/Parent 611 0 R +/Annots [ 589 0 R 590 0 R 591 0 R 609 0 R 592 0 R 593 0 R 594 0 R 595 0 R 596 0 R 597 0 R 598 0 R 599 0 R 600 0 R 601 0 R 602 0 R 603 0 R ] >> endobj -621 0 obj << +589 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [326.079 530.217 364.036 541.121] /A << /S /GoTo /D (LIBUSE_encOpen) >> >> endobj -622 0 obj << +590 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [261.854 520.753 396.229 531.657] /A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a0ee251ffa58317c7ea29364d344c4660) >> >> endobj -623 0 obj << +591 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [457.239 520.753 513.996 531.657] /A << /S /GoTo /D (aacenc__lib_8h_a5743dca1ec3746f9c5ecb839a132ba7e) >> >> endobj -641 0 obj << +609 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 511.662 135.668 522.192] /A << /S /GoTo /D (aacenc__lib_8h_a5743dca1ec3746f9c5ecb839a132ba7e) >> >> endobj -624 0 obj << +592 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [410.852 457.354 497.666 468.258] /A << /S /GoTo /D (structAACENC__MetaData) >> >> endobj -625 0 obj << +593 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [170.965 439.73 257.778 450.633] /A << /S /GoTo /D (structAACENC__MetaData) >> >> endobj -626 0 obj << +594 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 427.774 194.448 438.678] /A << /S /GoTo /D (aacenc__lib_8h_a68ca23c646df4d306e2412b926292a47a510ae495f7636503ecfe111f75f66d50) >> >> endobj -627 0 obj << +595 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.194 374.284 296.714 385.188] /A << /S /GoTo /D (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1) >> >> endobj -628 0 obj << +596 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [341.853 374.284 477.921 385.188] /A << /S /GoTo /D (structAACENC__MetaData_a06cce4e89d53d956d27fb20892461aa0) >> >> endobj -629 0 obj << +597 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 362.329 234.487 373.233] /A << /S /GoTo /D (structAACENC__MetaData_a9274bda31c82bd154ddb3767b74be6b2) >> >> endobj -630 0 obj << +598 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [395.735 283.901 493.846 294.805] /A << /S /GoTo /D (aacenc__lib_8h_a5743dca1ec3746f9c5ecb839a132ba7e) >> >> endobj -631 0 obj << +599 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [336.762 271.946 436.527 282.85] /A << /S /GoTo /D (aacenc__lib_8h_aac28c7c3724b8bc87558bc35a22bf23c) >> >> endobj -632 0 obj << +600 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [257.591 230.411 324.858 241.315] /A << /S /GoTo /D (aacenc__lib_8h_a6ccf4948de12c1cde8ca22a1216c5d3e) >> >> endobj -633 0 obj << +601 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [244.351 218.456 344.116 229.36] /A << /S /GoTo /D (aacenc__lib_8h_aac28c7c3724b8bc87558bc35a22bf23c) >> >> endobj -634 0 obj << +602 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.52 206.501 372.788 217.405] /A << /S /GoTo /D (aacenc__lib_8h_a6ccf4948de12c1cde8ca22a1216c5d3e) >> >> endobj -635 0 obj << +603 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [189.167 93.195 271.208 104.099] /A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4) >> >> endobj -639 0 obj << -/D [637 0 R /XYZ 89 770.89 null] +607 0 obj << +/D [605 0 R /XYZ 89 770.89 null] >> endobj -640 0 obj << -/D [637 0 R /XYZ 90 621.169 null] +608 0 obj << +/D [605 0 R /XYZ 90 621.169 null] >> endobj 50 0 obj << -/D [637 0 R /XYZ 90 611.997 null] +/D [605 0 R /XYZ 90 611.997 null] >> endobj -588 0 obj << -/D [637 0 R /XYZ 90 363.326 null] +556 0 obj << +/D [605 0 R /XYZ 90 363.326 null] >> endobj 54 0 obj << -/D [637 0 R /XYZ 90 348.39 null] +/D [605 0 R /XYZ 90 348.39 null] >> endobj -586 0 obj << -/D [637 0 R /XYZ 90 157.162 null] +554 0 obj << +/D [605 0 R /XYZ 90 157.162 null] >> endobj 58 0 obj << -/D [637 0 R /XYZ 90 146.838 null] +/D [605 0 R /XYZ 90 146.838 null] >> endobj -642 0 obj << -/D [637 0 R /XYZ 447.844 96.348 null] +610 0 obj << +/D [605 0 R /XYZ 447.844 96.348 null] >> endobj -636 0 obj << -/Font << /F22 424 0 R /F37 577 0 R /F23 425 0 R >> +604 0 obj << +/Font << /F22 400 0 R /F37 546 0 R /F23 401 0 R >> /ProcSet [ /PDF /Text ] >> endobj -659 0 obj << -/Length 1739 +629 0 obj << +/Length 1813 /Filter /FlateDecode >> stream -xÚ˝X[sÓ:~ĎŻđÎ1–|IsŇ L[JÎ0ĹVŽ|ˇ”3çżź]śŘNÚ¦0s^âŐjőiµÚ›bKĂ6ŢöNf˝o87+đąoĚF`CźYgĆ,2>›Łţ×Ů{Ă8¬QĚłxž‹ü®?ŕžm~*ÄR˘To:ë}ď1˛
¦€Ľˇ5t<#\÷>µŤřď
Űr‚‘q«¤Ö†Ëř&ĆuďcĎî(ĹxŻµâ ä“Ü -,Ö0۶Ís‘F˘Ěju¦iE2§ÁeźŮ¦ČĹZ–2/PI@vǵŤgÖČîl%iá"K’¬Ď=ó6N—ÄÚěpÔx]%Qs˝¨ŘČ0ţbŰ\Fĸ]É”¨˛–Mőâ´(E꩸¨ąq‹$ţ%#Kٵ6Lý}ńĆC°†Íę3pËçťAPŰŕćZ–—¨őŰłWă-˙yŕáĆăÉôbr3ţ0ÓŚ"©$ȲWęŇ7°\ßű=Ř“ÓŮŐx6}Úý=čëńůĺŮôQôßT|ňn|q1=;˙đú0üjX˙Dö™gŢe)¸€pń˘$ -Żż"Őă|)‰ćVeFÔT"ęv÷™®h´ÉĄňŚ_äEŤ/µŹ`ĐĺK}Wo{Ćg%0÷]ŰÜ]Iź1fΦ-ÇҢ[× -.Z[t.!Ě}׼U‘VĐ Í02|Ç,dIśEž‰Röů‰G· -N¤4ˇ÷ľQţ©f(ÂT(´Ś˛Ě¬Ĺf#ő¤ÎńŔ-ë·W -´şRµ
])ÂŐyy˙úânăt #Łšs×÷=ó¨{aĐ4BşmY©}X4t¸"ç@ú/úŕäÍéĹßăłÓ×ŰŤ¬ F)Ŕ›±N×0Ő ŞPA¦Ř˙¨uĺÁ ›aŠBo†Ů’ń4€«Çxj.Ĺ·CťÔŚ?ĆďŰÓĚyT3玎ÓÍ=NÖńŹÓĎ;߸§ˇ Ň‘»éÉ…¨’ňĺöň˝öŽÇřÚ@ůmĐÂý÷€úą,«<m:ń«CeuP‡ëXžë튫Ł‹ë¸±EEŁěcýfy·°EŮJŐ×űT®ĺ¸Í$Äěš*ZÁÄŘ–„ťÂ¨XŔ̢Z.%$óŘXmđ;×ČPuŕť4ŕAăíGrYRYTśH Í™]\¸JmČą$>5°Řv’đ#p˙:ň•1é€ó»ş+lśŻŐ7*<z×QĂźč%pč2‡¬V7’8 -ů@‘ß{ŢÎú#ŰTÇl×q„bۢČ<‹9îö>”:ŁŐŃP˝Gp,˘(Făă‹ůß·÷“ÍsŘ#=îŃ–4žń›ŮôęíóéębzŐŐÖ"ĐSĄ|`´m -3á~׉rĄŽ8
őaPçg¤kHî_°šËPP+Ň%}UÉŞDË4$°} ô(Ëż%™Đ2qBZ¨Ĺŕ1Wk°Ž—«˛ŢK+/SUŚˇÂ¶Űíg§‹FÍŰmÓx—čć̦UEµu˝N5…˛ťÄˇ6…«'rfk詢Ú+KťşĆŞëíR@ú‘˙WD.ĄÜIO°fsłĎ›Ý‘‰oä× ŹŮ‡ó]ëmq܋·|×iľ( 3=żśľEjhb׉<"~.ę/$śÉ%ţA„lőúgÔĺ+F‘
t”©áV+ęhńă1¶VŻ”G„I".řfR|“;ĐlĺDŕóÇsMř©ÔZ`·ÎÁ› )5|hŔ˘N´$ĚC
ťK"6ąŚ$J¦5şzň 0٨†
=ý‚G¶Ň¸épÝż GŽĺŘü©˙@ţ˛[Š¨ +xÚ˝X_“Ú8çSä0SŇŘ!„´sě.m·ł˙ʲ÷ŇvvLb ÓpIčŢöćľűI–
„]¶ťą"˲,ËŇO2Ž5·ëCëdŇzóžs+°>ď[“™8–ßg¶Ç™5‰¬/íAçŰä“ĺ‹Ö(ćE<ÍEţŘérĎißb.QŞ5š´ţj1r,¦yľí»ž.[_ľ9VüO–c»ÁŔzPRK«Ç]ř&ÖmësËŮ1Š1;đ<n¬â`¤ĎÉ +±\%ßű!©
l$éJzFxčeśš$Ĺ.d/J[íOľîĹ)Ć'¤ĺ=đî/N1ňŢŇ +¤˙ NŢź_ý9Ľ8?Ű4?l`\cSŃŚ„AŔTTˇ’L±˙QëŰ + ŔÄŘ”„;Mb"˛€µ‹ő|.ˇPDÄĆJ†ß©Ö
^‡]T^Ľ$—%‘Ĺ)ˇ9“«[R®`97ÄÁG˛V,6ý3üÜß Šr&púhzáĘůjݲŇGŻYzć$z şĚ1MűŚ TČ'˝Gý¤3pÚęőU±MÁežÍÜmÁQćTcľz…áXDQŚÎÇwň˙ÚÜ;LVëĚa˙Aţ8`),©4SĂ÷“Ńřýs7ľŤwµIéą6„Ę 0ę>…™pżwÜÉrˇŽ¸óa`°i#ÉýVS +j“Pş¤ŻŞcŮ:Ń2 lŤýěËňďI&´Lś† +)Nz‚UŻ:âéýÔKe°ĽžĽŃŝϜx÷Ą˛}Č„=}÷ŘĂgާâZ;{ Ç}Š+2-#4 endstream endobj -658 0 obj << +628 0 obj << /Type /Page -/Contents 659 0 R -/Resources 657 0 R +/Contents 629 0 R +/Resources 627 0 R /MediaBox [0 0 595.276 841.89] -/Parent 643 0 R -/Annots [ 652 0 R 653 0 R 654 0 R 662 0 R 655 0 R 656 0 R ] +/Parent 611 0 R +/Annots [ 620 0 R 621 0 R 622 0 R 632 0 R 623 0 R 624 0 R 625 0 R 626 0 R 635 0 R ] >> endobj -652 0 obj << +620 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [355.495 631.309 443.983 642.213] +/Rect [355.495 638.078 443.983 648.982] /A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a02f49b93eaadb6a903b87670849255a5) >> >> endobj -653 0 obj << +621 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [262.824 514.884 387.276 525.788] +/Rect [262.824 516.334 387.276 527.238] /A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4aef811ce5aab93dcba6584109d266b579) >> >> endobj -654 0 obj << +622 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [457.239 514.884 513.996 525.788] +/Rect [457.239 516.334 513.996 527.238] /A << /S /GoTo /D (aacenc__lib_8h_a5743dca1ec3746f9c5ecb839a132ba7e) >> >> endobj -662 0 obj << +632 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [89.004 505.419 135.668 516.323] +/Rect [89.004 506.869 135.668 517.773] /A << /S /GoTo /D (aacenc__lib_8h_a5743dca1ec3746f9c5ecb839a132ba7e) >> >> endobj -655 0 obj << +623 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [265.141 225.181 324.718 236.085] +/Rect [265.141 228.08 324.718 238.984] /A << /S /GoTo /D (ENCODERBEHAVIOUR_BEHAVIOUR_TOOLS) >> >> endobj -656 0 obj << +624 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [279.485 210.047 398.877 220.951] +/Rect [279.485 212.947 398.877 223.851] /A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a443da990a60343083e72726a65f4509b) >> >> endobj -660 0 obj << -/D [658 0 R /XYZ 89 770.89 null] +625 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [344.529 105.15 445.201 116.054] +/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a730a1ba1041f8671a11ca824fcd0455d) >> +>> endobj +626 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [463.147 105.15 513.996 116.054] +/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4ab381330bdc59b0213ad3dedcb4f2f0f7) >> +>> endobj +635 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.004 93.195 144.137 104.099] +/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4ab381330bdc59b0213ad3dedcb4f2f0f7) >> +>> endobj +630 0 obj << +/D [628 0 R /XYZ 89 770.89 null] >> endobj 62 0 obj << -/D [658 0 R /XYZ 90 739.935 null] +/D [628 0 R /XYZ 90 739.935 null] >> endobj -661 0 obj << -/D [658 0 R /XYZ 90 565.253 null] +631 0 obj << +/D [628 0 R /XYZ 90 569.326 null] >> endobj 66 0 obj << -/D [658 0 R /XYZ 90 558.285 null] +/D [628 0 R /XYZ 90 559.735 null] >> endobj -663 0 obj << -/D [658 0 R /XYZ 90 291.223 null] +633 0 obj << +/D [628 0 R /XYZ 90 296.746 null] >> endobj 70 0 obj << -/D [658 0 R /XYZ 90 284.255 null] +/D [628 0 R /XYZ 90 287.155 null] >> endobj -664 0 obj << -/D [658 0 R /XYZ 90 163.099 null] +634 0 obj << +/D [628 0 R /XYZ 90 172.768 null] >> endobj 74 0 obj << -/D [658 0 R /XYZ 90 155.01 null] +/D [628 0 R /XYZ 90 163.176 null] >> endobj -657 0 obj << -/Font << /F22 424 0 R /F23 425 0 R /F37 577 0 R >> +627 0 obj << +/Font << /F22 400 0 R /F23 401 0 R /F37 546 0 R >> /ProcSet [ /PDF /Text ] >> endobj -672 0 obj << -/Length 2059 +645 0 obj << +/Length 1942 /Filter /FlateDecode >> stream -xÚĹYÝoŰ6÷_ˇG«5‰ú˛÷–zNסił.ŘşˇP$Ú&K%/°?~wĽŁľ,§IÓaR‘Gň>Éăďh×ÚY®őjöňföíĄÖĘYE"˛n¶ÖʵâČsBáY7™őÁŽçÎ"tí‹9üwĚňŠşë»¤,eÁťŞüÍuĹ&ŻJ ĆbŘ«ůď7?Î67ł?gČs-Oóc'öC+ÝĎ>üîZĐ´\Ç_-{=ko‡oaý<űićtőGş -čĆ‚tÝVjľđĎÎ÷‡"Oó{®]ç»2)ŠĽÜŃč}ŢÜĺ%µ›;I“d™V™Ěz›7uŁd˛wć‹p)ěËąÚ†ů±–ŠÖdŤ.ÍŞ‘jšÄĽÎa<wÎË+'B˛`äÄĄoç5~»–
šŠľ.Ń“2c:ĘAJ ^%‡6;űcÝĐś[I‰†}:śUüM´LÖ©ĘoeFSŃ[4°JŔRU•'
KĽVŐN%űľ=Ůc\F{ľ˝)ä^–
:Őuíí ”¬Ěstu0Žz ;iY%Ńł^`—ŻŕVsÚ÷ÔmcŽ”GNĂoÚ†HŘ 5
·ťĺts‹ŘŢŞjO-ňa#U †ů® Ăp¤µE%Ű2÷ěÎ$×ÇáRMM+PÎ'䧽„.Đąn<ńţ.O神(·‡ŔŔşÓ(4Ź;˛@Ljún«ÖĄQh;ú›shľß^ú±Ăés=<Ś RxŽąř -˙´%/Ĺ0d:ý
;éźů"rŃĽővš':D©l>n -ę1±Î3©iý™·IúÇ ±ŘꉨǢ§Č9ż9i|¶9±Ý®Ţ}żů謲Ź_o`ÁĎë
Ó‰Đ˙ž†_3#†bŔp}ý(†
‘eôXúc_ô?IYŕŤDŹ{đ4îť7Ť ź(¦ďą¬ŃöÍŞ§GϤ o.7†ýĎě÷VŐď¸7K!ÍáăÜ‚ť6ŃOč×ZóÝÄÂë$W΄ODż©î©q©äźG¸Ľ˙>•<Bć‹Ŕń|F7W•’ćŰżtŇUs¸°!"|źFpOÍ—oîšë±¦.Ü=ԦmŁV/^¤ -6d˘łx¸Î¦Ü†-“çQ’bZR#˘1btrGŞq›ç9«˝]dňÇÜsm}a‚W*)wćö=ľ†GCDČË´8ŇŤr*}AmĚ ÜÄĽÉë5 uÖdÄx-g´‘öb'ęş‘cˇď3m±gW["2Olv€ -Ć;ă±đ
É%}Ż®7ŻhBÝ€Ú‰âqcÖ=CŢ"ĎEq¨=7áóÎԕϱbźBź"ż&3x/0-śŁ1éUÚ•Đ`˛Gk4\i\ĂăŚBVţAăâýë—4ÝŘęţĘľ(Šş©[ÁJŢé €Ą}Ááě9łŹęăn'ëĆs†čăÉ -ł_°Á±IuKd™ŐĽ¤-]!Ó†ŕűŚJeµăšůý«™őAĎş¸Ŕj˝y»ţ¸ţáâíŰÍ›wďżßĽŕó±9ć -ÁžđἕÝ!ĄVĹ9ŕ×9 -B“¬y@ńü,Żß˘#y¬Ú*ěc
CŁšŽyCßĆČÖ%é¤4Şź /łţň “".d;hXŹźsŞónÔ!¸Ž† zëq"‡¤Ź…t€ËTŞ6J=”őq;ň-łţ+q_×)Ëd[eë:˙şşŕŇ%›”#äµ=Ĺlô®ť "ˇ®´HT®*Ť©
©|GD1)·!Ćüš3Ě@HáźpCGßńžuľĎ<,ż¦:ađ(Őp[Wýó2<|ýýĽ*śsC—79vS§T@ô&aÎÖŻžz.i¨'źúŞ·˘Ű ö"8ÉÂ8Ů«y.–<zĚÖ×›±,¶Ą·\ĺ»»ĎŘŇł\ŕ~¬06,2¬>*UËŚĄ‰“kcŇ´VüyÓÂIÓ†âN/°Iےƶő”}sI“ÚR w#öÇÇű3ü’ŁŇéńąKßůÔßq˙ł{Ô +xÚŐYÝsŰ6÷_ˇGůZk"őÝ·Äuşíš4s˛§.—SlÚŃŐ–<I^ŇÝţř(K¶ś6mÖ»ĺ!A?" »ÖŇrwÓëÁOgRZ‰“„2´®VâZQ(ś@ +ëzn}´Ą#ÜáH®}2„ŰyVĐp|źćąZń Č˙p]ąÜ–iť90#űv2Ľąţu0ąü9`ϵ„ÖDNäÖl=řxăZsŕ˙jąŽ—ÄÖ–Z[ľô๲®ż
ÜŽŻŢžŻ†‘$_OÓJÍÉ!í<«t˝Yeů’Fŕť"*ÍYpv_TŠ…ď˛z'±QĄ‘hš˛"•VEžŢXřętĘÂ@ +–´śżTUV4S,j,_]ÄŞÍúŞÍŇ•>ĺ8lĽBˇ=ŻśáҦłęËÂ$’wCľŐxö˘(‰Hńáۨŕq(Űě,Ŕŕ<Ýl +7B‘0°hŻśŞHXŚ"V]*"6Ąš+”ĚŤvÜŻZ1aTCЬ@dkŹ_~äľ/ěëŁYVăęÉl™¤ş`Âه¬ľ×¦€&ÜAHĺłb®.•U
őâ!ŽĄ}†ĺ`Ľ¤5m÷ab|8±ŃÂŽdG=©Ř«Cc36²ĽR51pÇŕÓ%>ĹČG;ČŮmä¸É
ÖŰŞ&]ÓGa`Źp© +{˛«ífS”uE+:»dÂŕ´±ŕĂ}6»'R($ÖŢsQ]ű‡REĎEŃ@öłşńýďńcťĐa Á!0đ +Ű-Đx±ěvE±Ľľťŕl VŮ\if[ô.ť}:`®ZP_\‡óż_»ú_=MödńüĂŰÉŔË‹ťŇaN•x5žtph?7¶Ö(÷5ĘŽĆńĺWiěř:·ĄŇŰwňuKą÷,wA9‚Ĺ-őţ3ŐL<q<Łc'x®ťöÄńčĆZ<üKšńţlňdhd4đ[FŁăFŰćżÁúŹ=#D8ťśLoŻ~źN?ü~ńvWăÓýlűă?făÄŮôĂĹőíxrq=™îŢ%_râ;±öČű×d´ń˙
SPl¬TĎg¨ćîďqµ ěMĎÂË4+ťľÍ´oú}ń@ÄY©ţÜB=÷ůĐň^oŢăŇs<Ź/®ó˘T^Áé{¸B
)‘ˇä+„ŇeĂ]I_C·©*¦úË!ÝŰ<l_Ŕaă/ҵ+*Ő{tĄéŠCĘ\ýh©d^Za‘kĚčűą6!ś$`ÜŞŤJ?
…k›oĄiY¦ůŇTfžŕĘloŠY>[m© řF}ÍmáeoĎ˝/¶pwňé#
—ŁÉ´śP6Í•.Ň"©KŞă#m1Y'’»ćw +„šxś+Ć4á¦K&ŇĽśĹk,#}ľťńŇ«4”@0[ĐÝ$Ü‘:*LÓ +XYö~ŻĚľŕt¶Ŕl—ŹŐvąTUmŘW—qo‚Á$@1<K+E”Îl·´2jŁS.K–ô|(łš¶Öi]fŹLgŹsŞesR3+ÔǨk–áAÄý,é›&Ö+ý›AEŮ3ŢöŔhÚ˘‘mß%ôáĽ5i +šMµZĐ„Fxí&űöśŘŕŘĺxâ“Ž©z~Ŕ€Yިź9_áOOćĂ&Đ4ő}“hÂLš›·b7ǬçTá+‚đm€î¤·Ĺ“aç”_‘gÚ $ ›ÜU¦ßΨ‰N0Jđ{B"$›-+ž§uĘű˘Ű¶AX7ź:<×3
^Ľ×ť56ď_iölI˛¨)µQůĽâ%ůŢŘjVSG7 _âĘ%˙$7}7°>j©“Ľˇ Čߎ>ą¸Ľ˙0};™ö¶lűżęĹpďąňą?ęý_óü˛ endstream endobj -671 0 obj << +644 0 obj << /Type /Page -/Contents 672 0 R -/Resources 670 0 R +/Contents 645 0 R +/Resources 643 0 R /MediaBox [0 0 595.276 841.89] -/Parent 643 0 R -/Annots [ 669 0 R ] +/Parent 611 0 R +/Annots [ 642 0 R ] >> endobj -669 0 obj << +642 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [385.11 405.012 513.996 415.916] +/Rect [385.11 93.195 513.996 104.099] /A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4ad2accfe182077bfe80ba43a3f22cf7bb) >> >> endobj -673 0 obj << -/D [671 0 R /XYZ 89 770.89 null] ->> endobj -674 0 obj << -/D [671 0 R /XYZ 90 88.215 null] ->> endobj -670 0 obj << -/Font << /F22 424 0 R /F23 425 0 R /F37 577 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -678 0 obj << -/Length 1998 -/Filter /FlateDecode ->> -stream -xÚĺYYsŰ6~÷Żŕ#5©h<7镶iě>Ąy $Ęb#’ -IYq§?ľ»ŘQn“(I;SĎx -ÜčBŔU¤ô’ ¤«°f´€rWŮ.+W
-Ş’ĆvĂÜÇűU^ŃôçĹďٲĄůÍ,îý.Cl2tźám«š·YćĎŻŽtőŔ5Ć7G˘#n»I۱\ť˝ÝçőŃĺŘO+ÝCť“aՂ骦%Ň"mň%É„6Ý’ŔÚ/ÝćĚ@M[gian¬ÜďXϲ*›Ľi’2žŘmŁĺşŞ‹”wn˛”âčyIśěâJ„0ŽÝ -ă–8q›Ä——đҶ2ÉCE†pČŰM^ŇBÄ>pa±Kď·Uş‚{ůpcŠ2îăéxĂşN‹¬É˙`Á‡bŤ±/ -(ĆMZ춬k’ÉaËŠč‘ĹsÖmbtK>•őĂCĐíj.»5ĂŞŃ=›śgÉ$vš§ŃH˛¬:äo#qčOd+˘sÔÜ)•č>xšáâ]·?~čVUÉĺ~ąIË2ŰRǤ<rč ®±Ľeĺϸ?~Lă›o˙@—¨“DşT;y¸ű%?EĆ[Ŕ‹Ô1jár“gZwx¸}Ľ €5Uib÷Tu˛O„čĚ,Öô QžôţńđÇY‰k -D?0LÂH÷‡‰- ¦ÂĂzW5MNéŰ-H`äĺnĎ2»ĂęŘî(ŰĐvŇěN“E¶L!u;'ë6cÓă'Ń÷áŐ¨™“um«]FÍa™ś†qµ7µřśź@+ŞĎL*/oyŰŘţČztc}tc.pÝĂ&_nECjâSs÷PŚÝ3(üRs±k >e•-“䬢}Ác–ŽŁÄ§Ł^l!±ÂGŇ-«–gÔŕ…㨬ĂÚ”ű ť -endstream -endobj -677 0 obj << -/Type /Page -/Contents 678 0 R -/Resources 676 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 643 0 R +646 0 obj << +/D [644 0 R /XYZ 89 770.89 null] >> endobj -679 0 obj << -/D [677 0 R /XYZ 89 770.89 null] +647 0 obj << +/D [644 0 R /XYZ 90 533.064 null] >> endobj 78 0 obj << -/D [677 0 R /XYZ 90 739.935 null] ->> endobj -680 0 obj << -/D [677 0 R /XYZ 240.275 493.236 null] ->> endobj -82 0 obj << -/D [677 0 R /XYZ 90 474.897 null] ->> endobj -681 0 obj << -/D [677 0 R /XYZ 285.086 410.994 null] ->> endobj -86 0 obj << -/D [677 0 R /XYZ 90 391.718 null] +/D [644 0 R /XYZ 90 523.588 null] >> endobj -676 0 obj << -/Font << /F22 424 0 R /F23 425 0 R /F37 577 0 R >> +643 0 obj << +/Font << /F22 400 0 R /F23 401 0 R /F37 546 0 R >> /ProcSet [ /PDF /Text ] >> endobj -684 0 obj << -/Length 1081 +651 0 obj << +/Length 2196 /Filter /FlateDecode >> stream -xÚŐZKs9ľó+t„JF‘ZŇH:ÚN6[©Tv7ććňě
ŕ`R©M폏Fš™‘1á˘qKLý©Ő‚îAoçăÁ«? -—×2RĚ—döĄ™˝l˘1OE¨-ZJU@é˝Ęk2O9wĘ˙ó˘“Č—t5ŃbŁŢÖzÝ"§€Čą¦Ą= ©oşťŻ™Ó÷îb´JďUž¶(oe„Ż\W”çÄíX -(!ÓĂśVŔ(GĺrL¬Ź®žhéÉ·C`Úg÷ű(¤Žę’
čÚ8塳’ɬť»$ţ'Ób«“´exŁ”hJîŞlN -sJ†W7óÍ«ÇëÝ÷ąU·-hŹ»Ůér+pÍ‹O“%Đ‘ÍU:ţW˙ţůăşÍąČ?NĺwP¦Jľ_}Yöͤlđ/
ŚÖQ3k^¸Áx©}h®¨x%4qµ7ĄQO?űňdč´·Ă2GŞĄ¦Ú«cú¦±¨¶R^ •=`ťVŃ}ńâŕ=i^:»ŠđJ+ -*ćž„ŠŞ#ďIgăĄoĽßřśíŚg'lĽ_éHcĎOÓxçă$ŘQÄ3^<›ń¶ŢĘ X$4§+Şý”÷ŐeĎŕÝşďP^hŔ¤ýŢ'ÔqÔ1îK
xť7ŕÉ[ü<]ófáăI9#·<RyŃ€'ősâ1sXO~”8rü~ľ‚˘iü3)şxĹA7Fí^!ý¨˘eL/…~ühĺyÇ®´Âxśr/Ń2Ĺczé3”Xv!p‘Čbz)ë·”{xxÓKYg~śré•_„ĹôŇ~ü +xÚĺYsŰ6óÝż‚ŹÔ4˘ "Ő7ב{%qę8íCŰÉP$l±–H… ˘¸óýřo»ŕ!QŠŹfúPÍh +CŰŃÂşÖX„ŽđÚěb$B»\.Ë‘ÚŰĽ¸ĄEףص“ů’idRĄU>—Š†ő‚áiąZ/emF‹¤(ä’«d˝nČÝnçe͢ťw'_j™dń‡ëz·›*©ó˛PšëF{¦=˝đ#+ťąUByˇ3ńX¨ń×ůýMť`ŇN,Ĺë2DžëÚ˙Ť¶h©1ŁÉ}üogżöŃâÇĹřć™˙1^_ľś}Ŕ™Ë,N q©A†ă§µĎ˘˛ŻÍĄwKlÄ“yţhŇ+ň<użĽ
6ŢŁčŻz†ěŁkDńcŔĆ°8ăAtŰń\a° ľ(ÚSE:Jý•´ť&“R4l‚>NŔCTíyĚ~$h|=A±™ôFŃšÇf>]!˙z>@ŰWłł«ďŢ_]]ľóňÁ‚}}•Űý•ÇŞĽQÄĹŐĺ›ëçł7׳+Îŕ˙
ßżzIµSc-;BđĆ׺Öô"¨A‹˛–
ÚęŇ‹í\0_ËŞNŠš†TtB'-«J¦M6Y^Ňş¶^E¸Rům±’főv!ęmď™ňzD;Ţ+ż5 +Ë9€6'Kg˛<@ËŤŔgɦ€ Ž¦=`d„.3¨Qńü,W5Tă¸Ĺ†4@fmvË€«:©ę–xMmmöľ©Ę˘ÜČś,˛îň‘jc˘y’ޱʙę»^Ç]ÖˇĽGč¤1ŕFű&Ęť.Od“tŻ'ÚŔE*«ĆJíŐ–śó}‚éĽÂ>÷x’L.%z„Túv)Ĺ—%ĺÎečf˙%ńvő9ÁKŇÎE(]&UŽL¤úšóŕ[NěÄQDĚÍđ·thwŞ +CVlÂ/fźPÉ2g0‰U&+-±g˙X7Żi +R®˘YÚ’Ý
›e4„ě´JxĺB&ü&' íö€HÄaŰ%Ć%ńËŽ:OOW€KęRż¦Â„.!
ŘćőB'uXB\°u\¬“űe™dX3Ääe0ąő§Ý7U˛’*˙›'~É×€3Ę„z$l¤Ť}ýt`?D9@‚*#L&!ŕ‚đŘ ¶6Kv|m–vKŤmܱş@hëa7Eěłq#–&Zd
˘'Č„iu€ŢáQ›á΋vŽIŁ0~´,Ë»ńfÍ~ŃľřćüÔ‹%Yűpµo¬g€‡Ęî¶,3ęm±č,«;*~\ß^—ą.-§M-jOQWű"Ě2ĺ.€>nŔˇëűŃ$´_ +ť®;âř“‡N«ŰŘíÖ»‘h×—Sl/]0ŔăĎlŃüŽÁqw¤˛H‘ęýd& 1µw?üýb§*7‰‹ďŞ\íĚŮOÍGŤ’ÚČŰÇ%é"—¨đOČŠůS•E{fŚˇk\ą_ôwO|÷H…Ýo187čź“Ý‚pˇĎ:´$1tLđŃąĆ뮶Ä$,7Lx›ŇĹ:v;z‡Q_ď4WŃr1ˇ1hš:s™&%ŠĂ7D¸óö’oŕŐś1˛)P endstream endobj -683 0 obj << +650 0 obj << /Type /Page -/Contents 684 0 R -/Resources 682 0 R +/Contents 651 0 R +/Resources 649 0 R /MediaBox [0 0 595.276 841.89] -/Parent 643 0 R +/Parent 611 0 R >> endobj -685 0 obj << -/D [683 0 R /XYZ 89 770.89 null] ->> endobj -686 0 obj << -/D [683 0 R /XYZ 90 587.506 null] ->> endobj -90 0 obj << -/D [683 0 R /XYZ 90 582.899 null] +652 0 obj << +/D [650 0 R /XYZ 89 770.89 null] >> endobj -682 0 obj << -/Font << /F22 424 0 R /F37 577 0 R >> -/ProcSet [ /PDF /Text ] +653 0 obj << +/D [650 0 R /XYZ 90 364.929 null] >> endobj -689 0 obj << -/Length 150 -/Filter /FlateDecode ->> -stream -xÚ•Ž1Â0F÷űßŘĆËĹ$Í*¨P\Ä8•µŐ"ŘÁ:˙ŢXtptúŕńîqŚŚ
-#Í×"*8qg†wZYŃŞLK^Ç&1 ’Ž&ş˝Çf|ć3±śîMz[´Št#ť$†žJÖ+o,ÚŞšŃ%^‚• “5`!&í{ÚľúîO«0Ę°ü›zd1± -endstream -endobj -688 0 obj << -/Type /Page -/Contents 689 0 R -/Resources 687 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 643 0 R +82 0 obj << +/D [650 0 R /XYZ 90 357.31 null] >> endobj -690 0 obj << -/D [688 0 R /XYZ 89 770.89 null] +654 0 obj << +/D [650 0 R /XYZ 240.275 96.348 null] >> endobj -687 0 obj << -/Font << /F22 424 0 R >> +649 0 obj << +/Font << /F22 400 0 R /F23 401 0 R /F37 546 0 R >> /ProcSet [ /PDF /Text ] >> endobj -694 0 obj << -/Length 2326 +657 0 obj << +/Length 1137 /Filter /FlateDecode >> stream -xÚŤË’ă¶ńľ_ˇšCŠŞZŃ$ř’Ş’ĂÚŢGśJě˛g+‡$ÄČđ!ŕNĆ_ď~âěr“Th4ş[čwÉî˛Kvď_%˛~{˙ę›wJíT—Ą*v÷»S˛+óS\łÝ}łűGô]«ŻŢLű*’(Ű˙ëţćČăęXĄČ‘ěEçGĹo‡zlĂ·¦Ő{UDźě8OsšÇY^*a.ł8/ä߲8ÝŇ$N=4ű´žlă[áĚv§řTŞRŐ1®˛3Ţ·fČ*˝űţ/¤Ń›7ű<‰ľăŤ —B’ŮÍşëžů¤Ťcô0zFÍNdyšFs×1ęa2żÎ
Ż&&=\„a|`”·±Ău©Î^Ý˝ŢňDEç˝J">QŃdśźlíŞ‰ŠĄi|* -VŚEťŠčacĐV×ő85v¸đÖŹĽÖfňÚĽéěyŇÓóÁŕAřsĆ:ă=đąx¨ň‚,'Ę żŢłümݢz
o‚ŕĺR^ź;ďđ‚‡-ţŽŽŔ›ßďŹI„wŔr<±8XY -ÉB˙Ńý•BNň#<~řŤśEŚ¤#‡Úa©âŔé|ĺ•ü*ç=ČAßÇUťXČ*©O@ď[+’¨@m>Ô&Ą8ŮTŃŐ`ŻçĆŽŚşUGµ®Ž°‘ę4m€ęőă>K3Ú—T’éăš“súsáqš÷â?áélo=ĹRô㉹ˇ:Dť˛čl)¨ -7•Ďµ†«NÚ“ŁŠ’3Kő%ćI(MW“PQĆiRbţăƬTĹU~ -b±Ç„×%ŠB,Č% -”ů’~_ô <ÄŔć“®•€•žąyϲżNc
UÇ4Ż%¸Z[·ÚAXći¸X{mř+oď<‹axoo%oďw“îEČ/ö· řň¤·2€˙ĄbÂ˙řDd§˙ýJ‡:Ó]d«zAÉL¦Ľ…‰É1¨yi,‡PUF(¶O†Ę`ÁćžMGČ€ž8‹ -)8_R>°˘xĐ™áB‰čf$MÜEfáĆ”¦ůJßĆÉd`™Očd´ -ˇĽ©ŰÁBĐ0”.Ĺwh7'¤<™>Zvä•Ë -•—ŹiF¨Ĺě1żü~¤PWř9„†GşyçF†n/wýëOoßoŮ€rŮrdäkçÉęSCľôLÁš©ôCýě-¶™k#»U¸ÁnéH§ëG} t,ůâŰĎo@žĄ)![ŹěÜ•×_ +xÚíYKsŰ6ľëWđ(Ť#oG[qšÉdÚ4ŇÍő’h›HŞeO2ýńP" ęMÉé4ž±/–Ŕ·ß>¸‚ óä@ç—Îí¨sýcG +âi0Ő‚ˇÍgaüd–ý,Đ3?6 +·a–®¤$‡±ź…IĽčőĂPtę=Ś>uîFťż;H‚R +y®ú%
4‹M€žHźćŕ”Ťj„R“Q©q?łëĹĂúyŞŽ[eUm±ÖŔ´Đ +¦…mśn§ň/Á6¶şĚÂĆNĹfsHD›–ĺ8‡”´š{6fµ~N>ĄSë‡e‡cööăůĚ ±3ô2€Ť2zĆGG“tÁ?Ť±ő‰Lr$vOc˛• +W‰mwsň”´ +HNË •gî˙U
ł©Đ"ŃjPĺjEýcŕ´<uˇĺ8Ön1Ů‚öny‘ŻU´˛Ń6„;–ŇM y» U÷ÝĚĺ´¸®·ý
^µ]Q„ +(ćňăţ± +ƦF¦–űFâk¦6 +÷býô.ŽÔ‡ś*:%éźŮYďł÷ąÝÇőŰý÷ć2żÜ5I´ŕ5Ěžk7ú?/ü^ř˙‡.ü
JŃ
7ľ[Żě0Ô0ęëR©ÔßS‡tŕ»aÉśÚŃ|m‚ĺŃąVC[f.UŽ€őĆÝůŞBŐż*÷ úMůż/ö´/ endstream endobj -693 0 obj << +656 0 obj << /Type /Page -/Contents 694 0 R -/Resources 692 0 R +/Contents 657 0 R +/Resources 655 0 R /MediaBox [0 0 595.276 841.89] -/Parent 700 0 R -/Annots [ 691 0 R ] ->> endobj -691 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [89.004 462.89 178.158 473.794] -/A << /S /GoTo /D (CommandLineUsage) >> +/Parent 611 0 R >> endobj -695 0 obj << -/D [693 0 R /XYZ 89 770.89 null] ->> endobj -94 0 obj << -/D [693 0 R /XYZ 90 739.935 null] +658 0 obj << +/D [656 0 R /XYZ 89 770.89 null] >> endobj -696 0 obj << -/D [693 0 R /XYZ 90 553.953 null] +86 0 obj << +/D [656 0 R /XYZ 90 739.935 null] >> endobj -697 0 obj << -/D [693 0 R /XYZ 90 553.953 null] +659 0 obj << +/D [656 0 R /XYZ 285.086 690.081 null] >> endobj -98 0 obj << -/D [693 0 R /XYZ 90 553.953 null] +90 0 obj << +/D [656 0 R /XYZ 90 673.878 null] >> endobj -699 0 obj << -/D [693 0 R /XYZ 326.66 252.084 null] +660 0 obj << +/D [656 0 R /XYZ 90 229.999 null] >> endobj -102 0 obj << -/D [693 0 R /XYZ 90 230.219 null] +94 0 obj << +/D [656 0 R /XYZ 90 223.004 null] >> endobj -692 0 obj << -/Font << /F22 424 0 R /F23 425 0 R /F11 698 0 R >> +655 0 obj << +/Font << /F22 400 0 R /F23 401 0 R /F37 546 0 R >> /ProcSet [ /PDF /Text ] >> endobj -704 0 obj << -/Length 2474 +663 0 obj << +/Length 915 /Filter /FlateDecode >> stream -xÚÝ]oă¸ń=żÂP@Fc-II–t@’Ýě]»×íĹow‡‚¶›]YňŠrrą_ßÎP–-°Űn´Or†Ăá|‘3“ÍDLľż¸Y\Ľz«Ô¤ŚËąšO“RLňąŚ3%'‹őä—H¦Óß?N’TÄ,ńs·őŞY›v:S™nĚVOU=ÚćĐ"íĹíââÓ…b1‘ž_–Çy’MV»‹_~“5Ě˙8qR“'Oµ›¤*o5ążřŰ…8‘-9“MÁ0W$‡>¬mRČčÓAW¶{ĆŠž¦RD͡Znič»jjgAn˝¬ži†§3µS9CËťWĽ¤Ű2°´![ăLű8U°Î¶LdVŰÚ~:!SŢ]E¨=Ne¦ÍP.ŘďÉv+Ř‹‚ -ô×°¬ĚŁÝl˝qʂņÉVw† ˇx@q&xńp-ŹÎ¬O1Ă\I= ->˛ą»;ŽwgPéO“Žá‚F¤ ĐŁm»ËĂ>ü(8}o/7šţĐIYrŇj-'˛7Dö!°î}yܧ)l - @’ƲČI€$V±„ËZ@¸uťÝéÎR(ŔĘ{¸ @6oCD‰čŢţao2|ÜŔ*Ť“´¤=ŕ2OÄ<úávvĽż`ü(ńKIŢŹ}ůÚE0@°`§míh¤DZĐęŻßÓx;Ľ#ż7Ě”Ż`ny
–Z&Ö•ăýššwŰUň><˛T‚´ĐoŚ}H`ýĆ/˘‚ÇߦńĐđrr7^ľ?´űĆ…-ÜaĹÁĽă
jőúćĎě!vc»°´Ő LĘóŁ!Ĺ–¬»e -řÚëšdn)ć–‰Ś…,“ú§Ź(cQĘ@đ÷i\=Á[pȤŚ~žÎŠčú=zgÝÂ=•G÷#Ľ3çYż{o -Ç,Ś×–:Š†k~lż@52¨ŠPxTA<öz_Lß-UŞ ®^* -}Ęgçň -e -ZfPś$}“l䄬×Ů»7Żnß˝9Ď+ě¶Ű×H1ě{(“śűHĘĎ:çĐá˝=lěQŠĺŕĽ/@ËXÁ#‹Đ$”źĂVübZިiŞĎ•—y\&óa“Ę+ÁŔôÜ`ŕű}ÓúW Ś?Ýű枊>0$Ł÷¸«;S;ęő¦ˇ[„ŔŞăţö(´Rß~rĽ}çĹőŕÚěMM˝665m×ICgEł›Ůýj_ÁĄó AVχGË°.ć0Ęť6˘B×Ćľy$|’o6@5Ľî{E…-¸
Ř»Ž°ŢC`ě»!8ѸäZź:`Ú·šN6gî˝:˛Ł:°‡]Sóg~Ţíćëě€ÝŹ"˛»}Ű SS*ńŤÇ’ĚťËâŘ‹Ç•Îq»´ŚV¦ĹNÍňٶ9ăSPŢ®ŁďNô]ŢĎ0žżçć'Â^n/Ćů zĹP±eDߎtgýÄŕ. -RĘ0ŇÇj(‘$2?Ő¸];É˙
໦.@úĐ5ŘpâΦ'ň˙µ*d~txTvŮę6ü,ʤVw°Ž˙Ăś˛Ě_˛ëÁó”*BjŁďű·ßĎTčŹő!tšWWۦqˇa×˙‚Á"«{Č5i§>ÝApŤÍÝ]÷7?#Ŕ}z8÷ŐőŐđđ@xÔ'Rźđk3’í–4Ť[a“ż>Ćô,Í”b~%ň ĐŔ€î›a§ÝhŻąŞŘ××Wgĺż^Łź¨<Üň”#ý#áôř»7üŻ=˙í[Ŕ-%Ô×ţőý'Ś€ľ_ +xÚÝYIsÚ0ľűWč“ZŃľłµťL¦KBO” ˇ
K ™L:ýńŐb#9Á¦fJˉç‡ő˝Oź%˝g† +Ż*Z6©RRŹ"UPľíf9?xtÎ Š5©R˛‹{M|şÂ6©RZY~páa˘I•ŇzŞ`2: Ú¤JëńCPÄ—bk©Ŕ¬ĄĹTŻ¨ +Ž›T)«§Š’lTó&UĘęńS’#ÉF“özü8a•Bý9Ű+ł ˘|+ݤJyMU”$Ź¬I•ňzŞ`Ń9–囫´?”EüčfË*ĽÚZú§;Š«Fb5çÄţĚ ÔŕVŇŹJ &xęÁA›óÖQ걅ȇŃâĆ÷\n;Ł‰oŹ§ml&wýńě6^ăé ®‚ą,A.Ű iŕW[%! úŕ~0šúűxů-»Zř~çq–=O”kGůµóţ"[ö&Ă‚›ÎĹýl6ť/,
¸ ¤Oóě:›ĎCó‡)ôťéµ§‘!@ŻÓxr[č^Žűw˝‚đÜp–óŃdří.(`8stÓźŔ:ěu¤ĽŁz«űýýĎ^ YO@nŠź¦â=0UýŻŢĚţ3-Ěw«¨U”V©Äâ‹ +«%ŤŔöRŠüq4žĄ›±ă` ŹK.|ÓÇË%—’zz§‹‚mZpą¨‘–<[ZžÖ¦đm‹˘"R÷eËo$NCg endstream endobj -703 0 obj << +662 0 obj << /Type /Page -/Contents 704 0 R -/Resources 702 0 R +/Contents 663 0 R +/Resources 661 0 R /MediaBox [0 0 595.276 841.89] -/Parent 700 0 R ->> endobj -705 0 obj << -/D [703 0 R /XYZ 89 770.89 null] ->> endobj -706 0 obj << -/D [703 0 R /XYZ 270.681 581.458 null] +/Parent 611 0 R >> endobj -106 0 obj << -/D [703 0 R /XYZ 90 564.73 null] +664 0 obj << +/D [662 0 R /XYZ 89 770.89 null] >> endobj -667 0 obj << -/D [703 0 R /XYZ 389.265 262.19 null] +665 0 obj << +/D [662 0 R /XYZ 90 369.823 null] >> endobj -110 0 obj << -/D [703 0 R /XYZ 90 244.342 null] +98 0 obj << +/D [662 0 R /XYZ 90 365.215 null] >> endobj -702 0 obj << -/Font << /F22 424 0 R /F23 425 0 R /F11 698 0 R /F8 707 0 R >> +661 0 obj << +/Font << /F22 400 0 R /F37 546 0 R >> /ProcSet [ /PDF /Text ] >> endobj -714 0 obj << -/Length 1378 +669 0 obj << +/Length 2253 /Filter /FlateDecode >> stream -xÚĄVKsŰ6ľűWđŇ9S1$DRdzR;qlj3ŽÚśŚ‡˘@
E°$Tíôż‹]PĘM§=ŘŘÇ·űíBłvçŐE@ß‹‹g׌9,đ“„Ĺ΢t˛ŔI˘ĚŹÓ©łX9îĺ&oo˝ ‹7ň>-~BŤČźĄł4gÇ~”2RŰm^Ż&•¨9jýÜĺkNšS'ół„%VqćGłoj¸ŁcśĐi!@XÜżşp&q”şŰ\Ô~Ń4tĐ™ÚđV{enꫮčŘ6ßňZĺĘ]!ëĺ˛ü¶ÓŹAčżđścŤ
xĂ땨×d·öl`öüc°švóűË׏Ľîüq†!ačgq‚Ůx{wůćĺíÍŰ+o2
"—€k V̢įÚČŽD˘Ăo^(á±Řý˙rĹW¤A&ľN,+ŇQŇš1‚Ř-䶕u×ň®áą0vyµó’Řő˝I4cîKfĂuíŘâ=„e®ř‡şĂůSuźjj5„ľďĐZŽ¬}ű9oe%Ô‘b0ĺ4ÂҤD›˛Im±Jcî[kö+–Ä5ĐtZËsx‹ăNČN;Ç’*×€Ncw^uo…ßc` 1Ő1G˛ÓĹ•P;:1şˇŰö5 -4ŽˇVm^ˇpM‘WĎ{%·ą ڝòÜa/Dą3Őf&k|‹+Qă7§îW¸Š -Fs -ŹŢ8¸ á;dîTbŮćĐzpRČę´î[“Ť"f©{
i4cW_ŮĘ–śŠZĎâ-%LÉúš
fî{G|4l‰`zqţô[c¦ĚÜ‹÷ňęíĺă;OĎĹůýüÍÉ»ăú˙a>|×aë>P™>ávC»€,ˇ$ˇě•‘Ô6Y¨ů%µrżŃ4Ę•´ÓoÄőoENS„…~§h~óăüdęf~ČŇŁ™67t®Ám,'¤Üß\_?ű0˙ĺĘÇ˝é-XÔýv e2ŔÉ]±ÉëšW¤jć,´:.–BiJŞ
îťtyĎťq8pÁ—Ë3Ź˘1ŠÝi\÷+!mĄšž0u0 †;eËëµÁmĽ-ëú¦‘-¤ĺ ¤wî(ë™b|Ž»?ź_˙Ał_s `ńHĘF’äTÂŚYt*™š§02SôX%E™ŚĚ¦©?Š1ŰÇřoŘ°OăiMžŚó[äôÄ®DYZ‹“N)s\ -ýÔŔďŻŐQaÎ’Ç<ż¶ÂÔĎXFťc f·%ö®W±4Ż;Őrř]bőÄ°ÔO2FŁ ŢŹFŁŕÎóđ˙N‹''8ó}öď–żęźĘTŔ]G¶ŻÎĚÉ +xÚ}XKŹŰ8ľçW9,d V$ęecwťGO2d“Ěav1 %v‹Ű˛ä©îÍüúe9Qö`°Xd•X¬Żt˛yŘ$›^$2ľą{ńúV©ŤJâ˛TĹćî~sH6e~‹}¶ąk6żEo[}öfÜîT‘DŮößw?˛DWű*E‰dł+Š8ß+xß×CŢVoU=Ůagá4ŹłĽT"\fq^Čײ8ÝîŇ$IÝ7Ű´žmă[‘Ě6‡řPŞRU˛’ďZłÝe•Šnßý‰4şąŮćIô–'& +·LnŇ]÷…WšÁ8f÷gÖäD—gĄit?ułîGóÇÚđh˘aÔý÷Ěňá4¶?O˘Őه^wŻ¶»<QŃq«’WT4çG[{‡f˘aiŠ‚
cU‡":Â…đeĐT×ő06¶ŕ©x¬ÍčµíyŇŮă¨Ç/;ŰáăĚuĆ{sńvWĺÝśňZdŹňŮşEóžĹóˇĽ>vBľÄîÖLř'żŰî“%^2:PŽ¤‰%‰ę„žíŤëó9,‰˝gZă
>!¶´íP',¦ńüů"Nł|
1KdŢüô‘‰ó8 ýO¶A „〒d“nF$~ţáĹć7–eh˝˙ôö÷7۬n>˝ŰfIôëÇwwD’ăKöźő¨OfŽ"ô™Đügrţ«+X¸™ÎŚgűďąłµő +1áxÎńÄhęát2}C0fX`ě1
ä„ +]XÉ÷ĽđřáOfp@bč%ťŔrČ}–2&¬NgÉ_°Aĺ<=č›bżČsó¶Jň+ě÷M”`W.>äVĄ8÷¨,˘ŁÁ\OŤuÉîj™Ýa"Ůö0Ú€uŇŹŰ‹ŘĽd +o‡ý˛|*8’ábT°N]cŹÎÝĘćv:!$4Zv[oőŘđí©+ŐĹdťÍX{ÉS˛Ż§Â§¦ŘC,'Ydĺ ÚËŘu +în¬ +€'…(÷hĎĽ(ęsęOŔŇŠ÷Ťě¬qÍápÔQ{®¦%#SőCĚő#MőŁ(ă4©@ ˙mĄÂTq•Â†żłÚ}ÂăE!7Ě9€¦X($ą!qE’s±lJđ'eh‡Ü4AŔ:ægaw'á9>^ŃaŹ»P\_S¨[*Űł^ů
OBGúŮR°e‡Ĺ‡€˝DR#˘-A’ČÎ8'«Ł#®k/,IŞúu5čő-źč@ńşv–Ç·öˇĄL™—Wíj^- +ANŢ3ű4P…ÎŃ+ŇĚÎiçÄe]Ź45ă°o‘0…X©¸¬+ą¤)šu=ŤĽ®eĹşiĽZbşR!nYŚTz±7lˇŇ ÇFPËěňđş k?gÁ‹®tSy¬ aúaâ3(I*J@$˛ë…ő:źBŻńl0ť4żôV~ęÁzŞŤű +@s2LťÍŔ]ĐhF7i¸sGłĐŃĐ$4e@RS†úŔÉö4.1SŞ˝0âQńĄŇ¬€oĂ(űôj+Ç Ř9Ëa¦;fŤˇ±z\ç6lnŢ +B»—28`Ô2ÎWŚ1%¤-Äo
AźĽ”Zµ]áaDoľ"‘Ąex)˘µűÂ,~…†® +4Ě'ďŔÔ…Ô ,ix½"®…łÓYĎBú’;–{żßKŁŰ@ăPaq!0,/Iôńó»OLHďNJ)UŚ"ć®
»śŚfücŞeŚ&Ădq.|"kŽŽPşGž†´ÚÄň…ŠÓă«˙R˝ż{ń?ň€— endstream endobj -713 0 obj << +668 0 obj << /Type /Page -/Contents 714 0 R -/Resources 712 0 R +/Contents 669 0 R +/Resources 667 0 R /MediaBox [0 0 595.276 841.89] -/Parent 700 0 R -/Annots [ 708 0 R 709 0 R 710 0 R 711 0 R ] +/Parent 675 0 R +/Annots [ 666 0 R ] >> endobj -708 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [102.761 533.473 141.555 544.376] -/A << /S /GoTo /D (main_8cpp) >> ->> endobj -709 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [293.957 533.473 322.51 544.376] -/A << /S /GoTo /D (main_8cpp_adacbe0175a79dff748855d8c9839f82b) >> ->> endobj -710 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [183.861 509.562 222.656 520.466] -/A << /S /GoTo /D (main_8cpp) >> ->> endobj -711 0 obj << +666 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [222.662 305.783 304.703 316.687] -/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4) >> ->> endobj -715 0 obj << -/D [713 0 R /XYZ 89 770.89 null] ->> endobj -114 0 obj << -/D [713 0 R /XYZ 90 739.935 null] +/Rect [210.866 460.515 319.169 471.419] +/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4aab4d4c3cfcad7bd7bdebfd947fea8e75) >> >> endobj -701 0 obj << -/D [713 0 R /XYZ 90 549.218 null] +670 0 obj << +/D [668 0 R /XYZ 89 770.89 null] >> endobj -716 0 obj << -/D [713 0 R /XYZ 511.624 400.033 null] +102 0 obj << +/D [668 0 R /XYZ 90 739.935 null] >> endobj -118 0 obj << -/D [713 0 R /XYZ 90 382.227 null] +671 0 obj << +/D [668 0 R /XYZ 90 553.953 null] >> endobj -717 0 obj << -/D [713 0 R /XYZ 90 273.114 null] +672 0 obj << +/D [668 0 R /XYZ 90 553.953 null] >> endobj -122 0 obj << -/D [713 0 R /XYZ 90 268.316 null] +106 0 obj << +/D [668 0 R /XYZ 90 553.953 null] >> endobj -718 0 obj << -/D [713 0 R /XYZ 90 141.394 null] +674 0 obj << +/D [668 0 R /XYZ 326.66 222.876 null] >> endobj -126 0 obj << -/D [713 0 R /XYZ 90 136.596 null] +110 0 obj << +/D [668 0 R /XYZ 90 205.505 null] >> endobj -712 0 obj << -/Font << /F22 424 0 R /F23 425 0 R /F37 577 0 R >> +667 0 obj << +/Font << /F22 400 0 R /F23 401 0 R /F37 546 0 R /F11 673 0 R >> /ProcSet [ /PDF /Text ] >> endobj -722 0 obj << -/Length 1234 +679 0 obj << +/Length 2621 /Filter /FlateDecode >> stream -xÚĄW[sÚ8~çWř1™ÖŽlÁŮŮsI“.YX í̦™aË ±‰,—¦ż~eKňdHg_‚äťËwľst´Ť´ťáŞssgYšk¸Žĺh«PsÖwLŁg™Ú*Đž®LçZ·-Ëé]Ť’ÝĆá]ëV\}Já]?Ż>v&«ÎKÇd*f*z}Ło÷4×yzZŔľÔ€a»íPHí´®ełßH[vţꀺ;v_ëną;¦90×Ňús±oqź¬ŰkÝŕęq>ů wůÚóF|1M|ÁüÝG覯|˙ô -{=çŤgëűůRp˘kŘ]§‰–ľć2O)zćd’5·'±ź%„4ßข’ŻöHä E~߬¶â@€BET࣬üľGq tČ:˘ň”—X°}¶ţ—•˝ ŐëUaZ -QŐíE$
ÓÉ€;‚^˛j(}möÔ{DčĎăQK6ČčőŘŞk‰D ţî©lĆ_M»KP(FĄÉ˝÷ůaöińĎĐűsüĺaĽş?ę˘Géą>÷"€†!3˛ÎHŚČĹzť…áEđŽ -wźńAh{ -óq)BńF•îú%&áđ"Ç›ü(_rŞáĆV·dKíţjôPŐhă:ečű\FÎÜ”hçČŘĺ +xÚÝ]Źă¶ń}…±@]ëH}+@vďö’
î’kÖoIPĐ6mł'K>QŢÍć×g†3”e[\ÚköE’Ăáp>ɡl&bňíŐÝüęŐŰ(š”a™EŮdľž”b’g2L#9™Ż&?2™ţ:˙~'"LaŠë»Ż—ÍJ·ÓY”ŠŕNoŐ4J'ÓZÄ˝şź_}ş’€,&ŇŃKó0ŹÓÉrwőóŻb˛‚ţď'"ŚËbňě°v“$Šá_MŻţ~%Nx‹Ďx‹ ™GÄ.,‚§©L
ĚDE č·2kdi[]wÔUézÓmÎSSßâĄÓ–A¤t`Ü)Ů–z:łăă<›Ş"jVË-Łm«SíTÁF3öÂtęt8ťĹ"~¬5M]6‡jĹśW¶!h§>NĄčwÄĽľ˙p˙ӄ̤Ë4%,›Ýľ2 +· : +no§đ}M
íő„ŤçA6T.đŚőb©oß6«ĂRskŮÔ¶ë‰zŮ9<µü¨6oÝ0u’ÁëVíô
ŔY|1 ¤FvŁ+bHeđé *Ó˝`#"^YX0¶ĐôG6
ěP-Şę!ÄéL €ŔjšnM˝ä)¤"¤á4 ¶ş}BćÓ2’^nkóé ‡DyőčÜěżňë=›n ëo‘
+r§śVmŘ/ŢzŹÁŁůÎC´Čđ¸ +kDI'%q‹‡ż,řî~vĚ_Đ~’ř§ ďÚý9í"čŐ + h°S¦¶ÔŠDRĐěŻßSX;ś#x|Ż™(§j`lôq
¦F¦(BMÍ«í@+9Ńś,#ARčĆĆŢ°~áŻ`çEíńż©˝c¬žNćĆÓ÷‡vßXż„=,ŮYĽuĽA©ŢŢý•-ÄlL秶 +„Iq~ÔĄX“őa·đśăA˙C}]“Ô-ĺ@Ý2–ˇ…ż$ý0be(Jéţ1B# ˢGx—ÁOÓYÜľGë,{ČSyđ8B;ažö«÷ +°NjvďI‚ĆŽĐÇď~÷:řf„ťY.B7·Y”…‘(˙k+†ű©Ć‰źú7ŚËě +1,{ •úËĎŢsơüq{Xףű'Ţłţţ g¬4÷÷ĎŘß>‡o+óiMS}îv™‡eś
ď0‰4ú endstream endobj -721 0 obj << +678 0 obj << /Type /Page -/Contents 722 0 R -/Resources 720 0 R +/Contents 679 0 R +/Resources 677 0 R /MediaBox [0 0 595.276 841.89] -/Parent 700 0 R ->> endobj -723 0 obj << -/D [721 0 R /XYZ 89 770.89 null] +/Parent 675 0 R >> endobj -720 0 obj << -/Font << /F22 424 0 R /F37 577 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -726 0 obj << -/Length 929 -/Filter /FlateDecode ->> -stream -xÚµWkoŰ6ýî_ÁŹ66±|čaŘ -×€^‚OĂKLúîű¶çqŠ1ö¨{rÜ˙†É}Z§“"ĎÔ®1šóR ?ŰČ Jhq:rYů2{oî„î–ů^}¤yTŰ–N§ĐŢŕrVŰ̦ĘořÉĽôĘŚ`rśŠţ€¬<sŹ=†»˛ÇGŮś-LŮŚ±ąŤÓGŮÜ>čEŁlng3ccl‘}Čłěôzý ëµnʲhňô+ćýjDZFި$¬Z2şţĂ{Ăă˙9Çś°—ţüĘ™Ax -endstream -endobj -725 0 obj << -/Type /Page -/Contents 726 0 R -/Resources 724 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 700 0 R +680 0 obj << +/D [678 0 R /XYZ 89 770.89 null] >> endobj -727 0 obj << -/D [725 0 R /XYZ 89 770.89 null] +681 0 obj << +/D [678 0 R /XYZ 270.681 557.547 null] >> endobj -724 0 obj << -/Font << /F22 424 0 R /F37 577 0 R /F23 425 0 R >> -/ProcSet [ /PDF /Text ] +114 0 obj << +/D [678 0 R /XYZ 90 541.456 null] >> endobj -730 0 obj << -/Length 149 -/Filter /FlateDecode ->> -stream -xÚ•Î1Â0ŕýýŠŰˇńĺŤɪ¨ĐMŚSéPl-BS˙ľĄčŕčtpÇŔ8Đ&Ňj/‚ ‚‡xE`”N++±CťiźFÄŮl{O©ťşbĽM}^ĺěül‡>obE»HŇ3ÉĐaKU‹K˘şats_• Że•°3ç‰?wľůcyŁËżÔB-0‚ -endstream -endobj -729 0 obj << -/Type /Page -/Contents 730 0 R -/Resources 728 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 700 0 R +638 0 obj << +/D [678 0 R /XYZ 389.265 260.122 null] >> endobj -731 0 obj << -/D [729 0 R /XYZ 89 770.89 null] +118 0 obj << +/D [678 0 R /XYZ 90 242.91 null] >> endobj -728 0 obj << -/Font << /F22 424 0 R >> +677 0 obj << +/Font << /F22 400 0 R /F23 401 0 R /F11 673 0 R /F8 682 0 R >> /ProcSet [ /PDF /Text ] >> endobj -744 0 obj << -/Length 384 +695 0 obj << +/Length 382 /Filter /FlateDecode >> stream -xÚí”]O0†ď÷+z ‰Ô~C˝Ű—sĆŹDą[ŚA(‰a”čĎl·ą‘ĹĹé•\ő=Đ÷´ç<&=d×AŘ;ż$… „)&!(0s†‹hĄUáz„#‡»Oáµq0č>nxśCkxŤĘŇlźć‰zßX0” b-‚BĆíb×áŻć›¬ÔÖK„Rać’ -c˝R…2űŁµĐ+â&™*ĎLTꢊő:Şňl™Ű“˘<1"ËëJS׏be_ľezaÔK‘©ÔČD•q‘t“㢹䦣ۊ&hÄä×ÔŹ} -<ěCAą~żď˛şęńÝđyPĄŁ:íN60ó0]ŹŁż0)·ŃnÓ[Í®Gß!ô +xÚí”]O0†ď÷+z ‰Ô~C˝Ű—sĆŹDą[ŚA(‰a”čĎl·ą‘Ĺ%Óx!W}ô=í9ć +$‚IČ +ÂĚśá"ZiU¸áČaîSxmúŹçÄ^Ł˛4ۧy˘Ţ7Ě e‚X‹ q{Řő0Bč«ů&+µőR ˇDX+ńˇ¤ÂXŻTˇĚţh-ôŠ¸I¦Ę3•ş¨b˝ŽŞ<[ćö¤(OŚČňşŇÔĹőŁXŮ—o™^őRd*52Qe\d+Ýä¸h.ąéčvE endstream endobj -743 0 obj << +694 0 obj << /Type /Page -/Contents 744 0 R -/Resources 742 0 R +/Contents 695 0 R +/Resources 693 0 R /MediaBox [0 0 595.276 841.89] -/Parent 746 0 R -/Annots [ 732 0 R 733 0 R 734 0 R 735 0 R 736 0 R 737 0 R 738 0 R 739 0 R 740 0 R 741 0 R ] +/Parent 675 0 R +/Annots [ 683 0 R 684 0 R 685 0 R 686 0 R 687 0 R 688 0 R 689 0 R 690 0 R 691 0 R 692 0 R ] >> endobj -732 0 obj << +683 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.177 482.911 185.567 492.839] /A << /S /GoTo /D (structAACENC__BufDesc) >> >> endobj -733 0 obj << +684 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [502.041 483.992 513.996 492.839] -/A << /S /GoTo /D (section.7.1) >> +/Rect [502.041 483.873 513.996 492.839] +/A << /S /GoTo /D (section.6.1) >> >> endobj -734 0 obj << +685 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.177 469.98 178.195 480.884] /A << /S /GoTo /D (structAACENC__InArgs) >> >> endobj -735 0 obj << +686 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [502.041 472.137 513.996 480.884] -/A << /S /GoTo /D (section.7.2) >> +/Rect [502.041 472.037 513.996 480.884] +/A << /S /GoTo /D (section.6.2) >> >> endobj -736 0 obj << +687 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.177 459.001 191.107 468.929] /A << /S /GoTo /D (structAACENC__InfoStruct) >> >> endobj -737 0 obj << +688 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [502.041 460.082 513.996 468.929] -/A << /S /GoTo /D (section.7.3) >> +/A << /S /GoTo /D (section.6.3) >> >> endobj -738 0 obj << +689 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.177 447.046 189.991 456.973] /A << /S /GoTo /D (structAACENC__MetaData) >> >> endobj -739 0 obj << +690 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [502.041 448.127 513.996 456.973] -/A << /S /GoTo /D (section.7.4) >> +/Rect [502.041 448.226 513.996 456.973] +/A << /S /GoTo /D (section.6.4) >> >> endobj -740 0 obj << +691 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.177 434.114 184.84 445.018] /A << /S /GoTo /D (structAACENC__OutArgs) >> >> endobj -741 0 obj << +692 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [502.041 436.172 513.996 445.018] -/A << /S /GoTo /D (section.7.5) >> +/A << /S /GoTo /D (section.6.5) >> >> endobj -745 0 obj << -/D [743 0 R /XYZ 89 770.89 null] +696 0 obj << +/D [694 0 R /XYZ 89 770.89 null] >> endobj -130 0 obj << -/D [743 0 R /XYZ 90 739.935 null] +122 0 obj << +/D [694 0 R /XYZ 90 739.935 null] >> endobj -134 0 obj << -/D [743 0 R /XYZ 90 553.953 null] +126 0 obj << +/D [694 0 R /XYZ 90 553.953 null] >> endobj -742 0 obj << -/Font << /F22 424 0 R /F23 425 0 R >> +693 0 obj << +/Font << /F22 400 0 R /F23 401 0 R >> /ProcSet [ /PDF /Text ] >> endobj -752 0 obj << +702 0 obj << /Length 147 /Filter /FlateDecode >> stream xÚ•Ž±Â0C÷ű Źí@¸Ü‘¤YA€č†ČVu@XZ$Ô>źPÁŔČdÉz~2ă -Ć––‰ćD˝x¤"#xkśX¤M!\¶©†5çóhjWýqË™8.v·îü|3´Nt'›†ť<. §š–Ń徍5`!šłÇöÄźOßüqUj”ĺ_ŐşÓ0Ů +Ć––‰ćD˝x¤"#xkśX¤Ma}٦Ô,śĎŁ©]őÇq,gâ¸ŘÝşóóÍĐ:ŃťlFvň¸`‚:śjZF—űl4VxLÔ€…hÎÚ>}óÇU©Q–U/ľ~0Ţ endstream endobj -751 0 obj << +701 0 obj << /Type /Page -/Contents 752 0 R -/Resources 750 0 R +/Contents 702 0 R +/Resources 700 0 R /MediaBox [0 0 595.276 841.89] -/Parent 746 0 R +/Parent 675 0 R >> endobj -753 0 obj << -/D [751 0 R /XYZ 89 770.89 null] +703 0 obj << +/D [701 0 R /XYZ 89 770.89 null] >> endobj -750 0 obj << -/Font << /F22 424 0 R >> +700 0 obj << +/Font << /F22 400 0 R >> /ProcSet [ /PDF /Text ] >> endobj -760 0 obj << -/Length 354 +708 0 obj << +/Length 314 /Filter /FlateDecode >> stream -xÚŐ’OO„0Ĺď|Š9Â:-mˇŢÖuwýw2ÜVcXčJd ¨ß^°Ý]Wc44žŢ4Ľ×Îü„{@Xxčô$őŽćŚC"%®A!H®H"HXúÓ2kzÝ!čËŕ6˝° Nâ$¦c!‚đ„ŮŔÜTÚşĎëB?픓Kć2"\¸'$ˇAHńMöĘt˝‹F ’Lş$‹‰Š¤MžéÖůMg5łRŤń×jłvŞĘ7¬ŇÎţhúŇV«Öhg-t—·¦éͦîŽÇ&vĽöŠ@ˇcq˝đĆńhAHc"·íeY®ëü®2«€ŁOĘ»`éÚ8?˝´/O&Łqjł:ß[ňĂmÖ>»aëa#ë€SĺnţRg;Żťp[‹®P‰O˙ľü +xÚ˝‘ÍN„0…÷<Ĺ]‚z[ÚîĆqfü[vhEšőíĄ¶3:1n]ťÓpľöŢÂ+ ěôzU[Ć€!‘’ (ZČ$ωČ((ĂuWfe˘ Eô\Ü9‚“4K©%b!϶şW.};4ęýDPN.™'dB¸đOBŁ"âöAOłGČI.™ô$KIžHGŢ(ăózrZ9é-ţĺĆÖč{gžYŻ|üMĎťs{Ł•Ź6jŞŤ>Ěz¦K;Ä©ŻoE `ěÁšÇ]`ףi1M‰dÜŤWUµę—^ď#Ž!éÎî‚ŇŹ#p{}ď^^lp훡›có˦2~Ůaů#mD—jż§ŞSÖmxôb)WäYHY*ţ9/đWqeLY&C&ţhú\7Eđ Őšˇ endstream endobj -759 0 obj << +707 0 obj << /Type /Page -/Contents 760 0 R -/Resources 758 0 R +/Contents 708 0 R +/Resources 706 0 R /MediaBox [0 0 595.276 841.89] -/Parent 746 0 R -/Annots [ 754 0 R 755 0 R 756 0 R 757 0 R ] +/Parent 675 0 R +/Annots [ 704 0 R 705 0 R ] >> endobj -754 0 obj << +704 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.177 481.935 154.843 492.839] /A << /S /GoTo /D (aacenc__lib_8h) >> >> endobj -755 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [502.041 483.873 513.996 492.839] -/A << /S /GoTo /D (section.8.1) >> ->> endobj -756 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [103.177 469.98 141.971 480.884] -/A << /S /GoTo /D (main_8cpp) >> ->> endobj -757 0 obj << +705 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [502.041 472.037 513.996 480.884] -/A << /S /GoTo /D (section.8.2) >> +/Rect [502.041 483.992 513.996 492.839] +/A << /S /GoTo /D (section.7.1) >> >> endobj -761 0 obj << -/D [759 0 R /XYZ 89 770.89 null] +709 0 obj << +/D [707 0 R /XYZ 89 770.89 null] >> endobj -138 0 obj << -/D [759 0 R /XYZ 90 739.935 null] +130 0 obj << +/D [707 0 R /XYZ 90 739.935 null] >> endobj -142 0 obj << -/D [759 0 R /XYZ 90 553.953 null] +134 0 obj << +/D [707 0 R /XYZ 90 553.953 null] >> endobj -758 0 obj << -/Font << /F22 424 0 R /F23 425 0 R >> +706 0 obj << +/Font << /F22 400 0 R /F23 401 0 R >> /ProcSet [ /PDF /Text ] >> endobj -764 0 obj << -/Length 144 +712 0 obj << +/Length 145 /Filter /FlateDecode >> stream -xÚ•Ž» -Â@DűűS&…ëݻNÜ.¤rŁ‰`Ąźď&hai50ś9ă -Ćž¶‰ÖŤ˘ŠNŇ‘áťVV4RFW‰Ô}ja+ÍşŚ–¶ąŤC˝ËŐជ׌Đ.Ńf‚ˇŤőĘ‹óD]ĎČĄoÁĘÄ€çBMŘ)9âDGâĎĄoţ¸‚Q†ĺ_ŐWŇ0V +xÚ•Ž1Â0„÷÷+nlăË‹I“U°b71[édŞŕ¤?ß4čŕčtp|÷qŚ+{ÚFZ·"*8qFă´˛˘úJűzŚgĄYçQiŰŰ4Ö+±\îi|-í"=h!şhlŁcqž©)÷X™ŕń,ÔŚŤśNt$ţ\úćŹËeXţU˝[x0[ endstream endobj -763 0 obj << +711 0 obj << /Type /Page -/Contents 764 0 R -/Resources 762 0 R +/Contents 712 0 R +/Resources 710 0 R /MediaBox [0 0 595.276 841.89] -/Parent 746 0 R +/Parent 675 0 R >> endobj -765 0 obj << -/D [763 0 R /XYZ 89 770.89 null] +713 0 obj << +/D [711 0 R /XYZ 89 770.89 null] >> endobj -762 0 obj << -/Font << /F22 424 0 R >> +710 0 obj << +/Font << /F22 400 0 R >> /ProcSet [ /PDF /Text ] >> endobj -775 0 obj << -/Length 750 +723 0 obj << +/Length 723 /Filter /FlateDecode >> stream -xÚÍV]o›0}ﯰ´xŔó'†jšÔ6ŮÔI«Ş6oíTpK*b*mż~6„DŐ¤}HA ¸÷úřśësŔ3@ŕór÷ËŐŮűO„ -ČąB}LavH&(}Â=Ӫי9 -Ę”"˛:Üô"ń˙ü^ýoBJţ5Ňe~őŕÔqY(ƇÎXNo:©•ËĚ™—1ťJ˝¬‹NĚ…ANťsµÁkéŚOoeű Š—ÚŮUR¸Âeű—ăqŮ›˛ęRNWăDËÂţĘL>"ŽĚ…§ü۸4És8gDčâČř*wëÎö‰NN9ú!-lP°çwľ
Ěě@‚NŰ`Rw¤ůáp8??ě‰`AH g|,›
v˘lÚ»LŇíś4îk.íî;m]ŕwcŃ
˝ŤE -ŘLR[ľ™Pv:e]d{ß%Şčô‚ó,šq8d‘ü=çĚę$ťNîaŇoĐ -ý€b3ăĄ<Ýö9C=ňwťśo,űâP'ΫŹŹ
?Ł§dnřMOş2Íë"`Mtą-UŃ˙‡Óe{7Pą'SÝ™MZšc -U<*ɲJî÷®Ý¦Âruöo€ë +xÚŐV]kŰ0}ďŻěĹ~đť>-«ŚAŰdŁ•Ňćű•FŕÚűۯźËně8!6ÄŘŘ÷ž{îŃŐQ0zF}=Ăî~ą8űř…RD1„!h±B +Ł+C‹=xWëřµŇĄP˝Đ˙±řÖfp‘$MFŔ#ę˛xłiĂgERżčĽŠ+Sä}*áŔxH]jČ€W+âcě]\řBxW󛫧Ëz5Ó›¤EĽŻĘ:©Úç;˝˛ĽHäé<Ń-:“H +ičŔiŠE-ř“'YťşHBv"©"›°
ü4%ArŐÄqbK>ef ë 4I@2Ň~bŰw@*#0DÉ6ô¶^fĆ5zQUĄYú{uĄ7
FżhŚí”#!pŰŁÍ‚H9!)ô+ëőÍÂ˝Ć ˛ůÖ<Ümš˛yýbőÖë1¬ D +»ÉLnňçĂzÇiZęÍĆ
ßžGĎgż×˝c1 endstream endobj -774 0 obj << +722 0 obj << /Type /Page -/Contents 775 0 R -/Resources 773 0 R +/Contents 723 0 R +/Resources 721 0 R /MediaBox [0 0 595.276 841.89] -/Parent 746 0 R -/Annots [ 766 0 R 767 0 R 768 0 R 769 0 R 770 0 R 771 0 R 772 0 R ] +/Parent 731 0 R +/Annots [ 714 0 R 715 0 R 716 0 R 717 0 R 718 0 R 719 0 R 720 0 R ] >> endobj -766 0 obj << +714 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [132.999 443.064 171.524 451.911] +/Rect [132.999 435.524 171.524 444.37] /A << /S /GoTo /D (structAACENC__BufDesc_a324387bb8e5f44650c6e17c209bb05a9) >> >> endobj -767 0 obj << +715 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [146.369 429.703 165.317 438.55] +/Rect [146.369 420.346 165.317 429.192] /A << /S /GoTo /D (structAACENC__BufDesc_ab13b6a5c10505c3defd8bb1c19eac81d) >> >> endobj -768 0 obj << +716 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [140.471 416.342 206.751 425.188] +/Rect [140.471 405.168 206.751 414.014] /A << /S /GoTo /D (structAACENC__BufDesc_a2c09424d3a61cdbdb80c8d9ebb42ce71) >> >> endobj -769 0 obj << +717 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [140.471 402.981 176.575 411.827] +/Rect [140.471 389.99 176.575 398.836] /A << /S /GoTo /D (structAACENC__BufDesc_ace97d9ab9ad2f7b24041ee253ad7372f) >> >> endobj -770 0 obj << +718 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [140.471 389.62 185.432 398.466] +/Rect [140.471 374.811 185.432 383.658] /A << /S /GoTo /D (structAACENC__BufDesc_ac32946f846b95272038017687a96f2c1) >> >> endobj -771 0 obj << +719 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [269.505 327.92 336.772 338.824] +/Rect [269.505 308.206 336.772 319.11] /A << /S /GoTo /D (aacenc__lib_8h_a6ccf4948de12c1cde8ca22a1216c5d3e) >> >> endobj -772 0 obj << +720 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [239.926 169.446 349.733 179.373] +/Rect [239.926 156.727 349.733 166.655] /A << /S /GoTo /D (aacenc__lib_8h_a68ca23c646df4d306e2412b926292a47) >> >> endobj -776 0 obj << -/D [774 0 R /XYZ 89 770.89 null] +724 0 obj << +/D [722 0 R /XYZ 89 770.89 null] >> endobj -146 0 obj << -/D [774 0 R /XYZ 90 739.935 null] +138 0 obj << +/D [722 0 R /XYZ 90 739.935 null] >> endobj -613 0 obj << -/D [774 0 R /XYZ 90 553.953 null] +581 0 obj << +/D [722 0 R /XYZ 90 553.953 null] +>> endobj +142 0 obj << +/D [722 0 R /XYZ 90 553.953 null] +>> endobj +725 0 obj << +/D [722 0 R /XYZ 90 454.643 null] +>> endobj +146 0 obj << +/D [722 0 R /XYZ 90 356.227 null] >> endobj 150 0 obj << -/D [774 0 R /XYZ 90 553.953 null] +/D [722 0 R /XYZ 90 289.622 null] >> endobj -777 0 obj << -/D [774 0 R /XYZ 90 460.366 null] +727 0 obj << +/D [722 0 R /XYZ 90 264.292 null] >> endobj 154 0 obj << -/D [774 0 R /XYZ 90 375.124 null] +/D [722 0 R /XYZ 90 264.292 null] +>> endobj +728 0 obj << +/D [722 0 R /XYZ 238.442 221.46 null] >> endobj 158 0 obj << -/D [774 0 R /XYZ 90 313.424 null] +/D [722 0 R /XYZ 90 199.722 null] >> endobj -779 0 obj << -/D [774 0 R /XYZ 90 288.911 null] +729 0 obj << +/D [722 0 R /XYZ 354.316 158.904 null] >> endobj 162 0 obj << -/D [774 0 R /XYZ 90 288.911 null] ->> endobj -780 0 obj << -/D [774 0 R /XYZ 90 227.116 null] ->> endobj -166 0 obj << -/D [774 0 R /XYZ 90 211.623 null] +/D [722 0 R /XYZ 90 138.143 null] >> endobj -781 0 obj << -/D [774 0 R /XYZ 90 151.841 null] ->> endobj -170 0 obj << -/D [774 0 R /XYZ 90 136.349 null] +730 0 obj << +/D [722 0 R /XYZ 273.44 96.348 null] >> endobj -773 0 obj << -/Font << /F22 424 0 R /F37 577 0 R /F11 698 0 R /F23 425 0 R /F14 778 0 R >> +721 0 obj << +/Font << /F22 400 0 R /F37 546 0 R /F11 673 0 R /F23 401 0 R /F14 726 0 R >> /ProcSet [ /PDF /Text ] >> endobj -792 0 obj << -/Length 843 +745 0 obj << +/Length 827 /Filter /FlateDecode >> stream -xÚŐVßOŰ0~ď_ai/ÉC=˙“M“€˛ ¤ˇŤö
r·µä8,?†¶ż~Ně”$-hŚń0 äbîÎ÷}÷Ý]Ř +xÚíV[OŰ0~ĎŻ°´—äˇĆ—8iŃ4 (L
m´o€›¸%Çaą±_?'vJRBÚÓ¤IŇşçö}ç;ÇE`řęť.˝ŁBŔÎ"ĺĚ#Á`™‚[ź `B Ť#˙Lń˛&„!ž'u&tĹ+™ëŕ~yĺť/˝ź61ŔmĂ2dŢí=©9żŇŮ<µV 5Oެ‡Ż1±őDCĂ`‚Bţĺő˛ItĂžcĹMđÖă!jŤcšÎćä$`Ě?;ż>{8×sQ&ÇÇ«€ ż^/äoQ:ÚóźD˛Cd‘
ÓŘZ†ňµ} +žlí'. Ě_‹ÂžImźÓÉJVÎěą%© ťBÂ<°ű]gćó4¨ţşÎV]e]ýĂŞmaŤŽaDő[nčt ‹öhť»€ŐV:ń”UQ'íS€‘ĎݡEÁ+‘:×"Ď:_ŃES*ojy’zcŹLw‰Ç;ÁN
8CŘÔˇ»#„
¬¬V‹ŤíŤń»ť0C&ç‰ĐÉ’« D>ÜĽÚ®ŕŇ0"ş\!”u˝!®/˝v\ꓢA»qh=nD# <őM^aűDă˝>Í c˙“Ô‰ŞSg‰q_úĆfĆś¬?ŹÄ2sÎ:¨ć^´›!Ćťń—ť*1†3Ć~J!‰$ahMż×+%'ÉŞ*¤ŐQe'©Of_Ž»¶EF“Ó7Úćšä&Ľ‹MZŁúK˝ŕŮŁÚKşÔČÁ(¤źéD'§Ď#čö¨ę¤ŇcĘhb§–ą¨¸Tťţ›á-äc·bß]·¦ç˘-Ę˝‰‘ú±v"ăÂ6í„–{ÓÉőaF'çşyĺ©IÄyă}®»„+Çd‚^Łîfä›xY;s^ń7®×ë°·şÚx;ǶáËřµ±ß°ĂĚŽmE®©/žÝŢŰUÝnoׂܹN–ĽôĐjÇ}0äý`:˙đŠ˙Ő,T®dúZ1u*ŠŇ%p;—ˇ¬V•4GĂX=çd˵Şl¤ň˙ÚxßµAÇ®ŤöňÍű×Ĺ?zuěČŘ˙ł8Ą"ňŃ˙Š endstream endobj -791 0 obj << +744 0 obj << /Type /Page -/Contents 792 0 R -/Resources 790 0 R +/Contents 745 0 R +/Resources 743 0 R /MediaBox [0 0 595.276 841.89] -/Parent 746 0 R -/Annots [ 785 0 R 786 0 R 787 0 R 788 0 R 789 0 R ] +/Parent 731 0 R +/Annots [ 734 0 R 735 0 R 736 0 R 737 0 R 738 0 R ] >> endobj -785 0 obj << +734 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 528.724 165.576 538.651] +/Rect [113.91 592.512 165.576 602.44] /A << /S /GoTo /D (aacenc__lib_8h) >> >> endobj -786 0 obj << +735 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [132.999 396.15 194.766 407.054] +/Rect [132.999 450.227 194.766 461.131] /A << /S /GoTo /D (structAACENC__InArgs_aefc45c133d4f9775d8d0aadf56302ae4) >> >> endobj -787 0 obj << +736 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [132.999 382.024 191.997 392.928] +/Rect [132.999 434.584 191.997 445.488] /A << /S /GoTo /D (structAACENC__InArgs_aa33d59e07bbd49bfe4dd6793763c6d48) >> >> endobj -788 0 obj << +737 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [229.386 320.317 296.653 331.221] +/Rect [229.386 368.779 296.653 379.683] /A << /S /GoTo /D (aacenc__lib_8h_a6ccf4948de12c1cde8ca22a1216c5d3e) >> >> endobj -789 0 obj << +738 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 95.352 165.576 105.279] +/Rect [113.91 168.668 165.576 178.596] /A << /S /GoTo /D (aacenc__lib_8h) >> >> endobj -793 0 obj << -/D [791 0 R /XYZ 89 770.89 null] +746 0 obj << +/D [744 0 R /XYZ 89 770.89 null] >> endobj -783 0 obj << -/D [791 0 R /XYZ 90 727.815 null] +166 0 obj << +/D [744 0 R /XYZ 90 739.935 null] >> endobj -174 0 obj << -/D [791 0 R /XYZ 90 710.602 null] +732 0 obj << +/D [744 0 R /XYZ 225.72 704.412 null] >> endobj -782 0 obj << -/D [791 0 R /XYZ 90 650.476 null] +170 0 obj << +/D [744 0 R /XYZ 90 681.628 null] >> endobj -178 0 obj << -/D [791 0 R /XYZ 90 633.263 null] +697 0 obj << +/D [744 0 R /XYZ 90 582.846 null] +>> endobj +174 0 obj << +/D [744 0 R /XYZ 90 571.761 null] >> endobj 747 0 obj << -/D [791 0 R /XYZ 90 520.575 null] +/D [744 0 R /XYZ 90 471.869 null] +>> endobj +178 0 obj << +/D [744 0 R /XYZ 90 414.953 null] >> endobj 182 0 obj << -/D [791 0 R /XYZ 90 511.386 null] +/D [744 0 R /XYZ 90 349.148 null] >> endobj -794 0 obj << -/D [791 0 R /XYZ 90 416.275 null] +748 0 obj << +/D [744 0 R /XYZ 90 323.609 null] >> endobj 186 0 obj << -/D [791 0 R /XYZ 90 365.808 null] +/D [744 0 R /XYZ 90 323.609 null] +>> endobj +749 0 obj << +/D [744 0 R /XYZ 276.798 280.567 null] >> endobj 190 0 obj << -/D [791 0 R /XYZ 90 304.101 null] +/D [744 0 R /XYZ 90 257.784 null] >> endobj -795 0 obj << -/D [791 0 R /XYZ 90 279.244 null] +698 0 obj << +/D [744 0 R /XYZ 90 159.002 null] >> endobj 194 0 obj << -/D [791 0 R /XYZ 90 279.244 null] ->> endobj -796 0 obj << -/D [791 0 R /XYZ 90 217.104 null] ->> endobj -198 0 obj << -/D [791 0 R /XYZ 90 199.891 null] ->> endobj -748 0 obj << -/D [791 0 R /XYZ 90 87.204 null] +/D [744 0 R /XYZ 90 147.916 null] >> endobj -790 0 obj << -/Font << /F22 424 0 R /F23 425 0 R /F14 778 0 R /F37 577 0 R /F11 698 0 R >> +743 0 obj << +/Font << /F22 400 0 R /F14 726 0 R /F23 401 0 R /F37 546 0 R /F11 673 0 R >> /ProcSet [ /PDF /Text ] >> endobj -807 0 obj << +756 0 obj << /Length 1110 /Filter /FlateDecode >> stream -xÚ˝WÝoŰ6÷_!`/03$%YV1pěfKŃ$]â=ĄAAK”A5‰Jëţő;~Č–=Ďk°f©ă}˙îŽ4vÖv~].GW”:1Š'tâ,3'ĆN4!(¤ÄY¦ÎŁ!ßÓ»ł™†îüííüÓu•y4tĹlşDšăáţžgĽńČÔĺUÂäűqčŇĐ{Zľ˝]Žţ0Ž˘Ť…ŠüĐIĘŃăvR żs0ňă©óYs•N@}XçaôŰ9NäÚ{N!<'˙×Áá‹+?¤;cˇŘź?äURt©ĺ$dŔú(‚ °aüé„.<{Ć0ů©ČWhsB[D K¤gţŮp¨ř ŠĂPÇ?&ľŹh4uĆ°†ˇáüĐŠ<±JŮä+Źb·“ĽŐhôé]ţŔ™ ŔETiźM©E°—qÇ!$÷÷ëŰĄĄ+H›µĹö^s(»%űr×ÉË.»ÜŰÝé‚ĽŠh|cł*ů?,ĺ„t•Ĺ{®JęŮ#ˇË‹W7ZwrľaUĹ‹×0kXÉßój-7Żl *_¤ĽYđ‚mĎ› -˙ĹÔü×Ůýy[‰¨2 -w91źżˇŢĽ± ÷ -‰łgyĹšˇe˘)™4tÖł|ł.ÍĹCÍ“\éOz;ćPXĄŕ2gĺM÷ĺđ%‰hŇĽZ.)YÁéBŐZ^đDö•"Vµµhzh·5G;©M¨•Ň—źşř¬ÜjëŮ™š+!†A§ňáÉĐß sÝß‚OßçÁąíö%$2ł>+]¬ČwnËľČB¦?Ś:x…¨ý—D}<öNGöU™ru‘ľ›j˝ŐÂúa~c6-+ë‚·‰ą#” žÂ¬¨y•¶†EX=ß3ß5U©Ůh—ďĽ -\d¨ˇÓn%doŢ<vútî}<Qš™°č©â. -# -ůUÚtc‹)«?xbí«–ßYÔSe| -›áXŐáľáC‹č‡¶ó\W’7+ ¦;4Ôöoł|Jl5šóâŕAgĄÍşCOÉÔF»űf‹0q—›Ľ5ôš)eĎö9ď-°N -¸&ň„ĹÖ:ōҤŕ¬QIÖfł“Ó]9ĐZö’î{Ę:˘đ¸.ş¸k •2űă5oŃÁ+äřŮÔG>¦/ýCö6Á +xÚµWKsŰ6ľëWđHÎT4 +ś[cW+ËDU`i帶2ěöMš”‰‡’¦ő“ÖŽ]N©r™âbŢĽu—1!˘J_Ů]RX±¦I2™j(°jšS"ŰL‘ću)Ş–ÚMIĂăqŽ "®ç–:“ăç„ąMóÓ1ľmv™ 2ű}ŃşpÎś×KÓÄ]†űĹ{¶óŃ%Îvˇ%IJőĹG~jNˇqT}żNçvPă˘Ěi}ElĎk`¤J·¤<íáÎ~›Ű~k§v`|ľbŕ/‚aě‡V:&<qěs![ó$oRşÓgňeçă‘LÉ„cAçZžŰjÚ”GĘßÂjď!GS·0”§gÓ_BĎÁutšťI!n‚âŇ+ŢůCëB´RGť¨üŞU+JíŚb˛¶#cŰKĄĂ1ú›ž!_ͨ7pś‚}Cbů%Îľ®ŔESäýcÜ|×eĎä’xîż_ yż +Ő|ÁyľqNQ«”äWšXc6;Ú3µŠAtwőµĄáy «b¸ş«TE¨Ü-Żh}6MËh:xń]ŢW÷Š•´Šlmk.ŢĘ˝›˘m´¦ę·˝ ¬ˇőů +«”ÁŠ9Qé`nc=M·ŹŚ˝ŰäuÍLaëx`xą}Ő´Ú‡t/Ł%“µąť +&×m¬wgM—;OĽĂ?˝QFęatáŹŢHŞżM endstream endobj -806 0 obj << +755 0 obj << /Type /Page -/Contents 807 0 R -/Resources 805 0 R +/Contents 756 0 R +/Resources 754 0 R /MediaBox [0 0 595.276 841.89] -/Parent 816 0 R -/Annots [ 797 0 R 798 0 R 799 0 R 800 0 R 801 0 R 802 0 R 803 0 R 804 0 R ] +/Parent 731 0 R +/Annots [ 739 0 R 740 0 R 741 0 R 742 0 R 750 0 R 751 0 R 752 0 R 753 0 R ] >> endobj -797 0 obj << +739 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [140.192 643.375 211.922 654.279] +/Rect [140.192 704.694 211.922 715.598] /A << /S /GoTo /D (structAACENC__InfoStruct_a06f045f69acad8125b1fb814d565549c) >> >> endobj -798 0 obj << +740 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [140.192 631.131 198.632 642.035] +/Rect [140.192 692.282 198.632 703.186] /A << /S /GoTo /D (structAACENC__InfoStruct_a5187acfd8fb7585377ebf162fbb9db39) >> >> endobj -799 0 obj << +741 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [140.192 620.944 201.013 629.791] +/Rect [140.192 681.928 201.013 690.775] /A << /S /GoTo /D (structAACENC__InfoStruct_ab919b721d3ef5d4dd56c46614cdf0047) >> >> endobj -800 0 obj << +742 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [140.192 606.643 199.748 617.547] +/Rect [140.192 667.459 199.748 678.363] /A << /S /GoTo /D (structAACENC__InfoStruct_ac786a4ebf4dc7f2357cbc142265f5dd8) >> >> endobj -801 0 obj << +750 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [140.192 594.399 193.641 605.302] +/Rect [140.192 655.048 193.641 665.952] /A << /S /GoTo /D (structAACENC__InfoStruct_a993149bc5985d79c40d6e96a2d90a228) >> >> endobj -802 0 obj << +751 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [140.192 582.154 197.506 593.058] +/Rect [140.192 642.636 197.506 653.54] /A << /S /GoTo /D (structAACENC__InfoStruct_ab5c902598267b09b625e440b53937c76) >> >> endobj -803 0 obj << +752 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [151.27 570.468 185.91 580.814] +/Rect [151.27 630.782 185.91 641.128] /A << /S /GoTo /D (structAACENC__InfoStruct_a5bb3228c5af5584f97c54bdf8ed946e3) >> >> endobj -804 0 obj << +753 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [140.192 559.723 177.043 568.57] +/Rect [140.192 619.87 177.043 628.717] /A << /S /GoTo /D (structAACENC__InfoStruct_a3356592232c6536392a58a6c9e185cb6) >> >> endobj -808 0 obj << -/D [806 0 R /XYZ 89 770.89 null] +757 0 obj << +/D [755 0 R /XYZ 89 770.89 null] +>> endobj +758 0 obj << +/D [755 0 R /XYZ 90 723.104 null] +>> endobj +198 0 obj << +/D [755 0 R /XYZ 90 606.782 null] >> endobj 202 0 obj << -/D [806 0 R /XYZ 90 739.935 null] +/D [755 0 R /XYZ 90 546.674 null] >> endobj -809 0 obj << -/D [806 0 R /XYZ 90 661.618 null] +759 0 obj << +/D [755 0 R /XYZ 90 522.346 null] >> endobj 206 0 obj << -/D [806 0 R /XYZ 90 546.786 null] +/D [755 0 R /XYZ 90 522.346 null] +>> endobj +760 0 obj << +/D [755 0 R /XYZ 185.222 468.561 null] >> endobj 210 0 obj << -/D [806 0 R /XYZ 90 486.829 null] +/D [755 0 R /XYZ 90 452.32 null] >> endobj -810 0 obj << -/D [806 0 R /XYZ 90 462.501 null] +761 0 obj << +/D [755 0 R /XYZ 230.083 412.503 null] >> endobj 214 0 obj << -/D [806 0 R /XYZ 90 462.501 null] +/D [755 0 R /XYZ 90 396.262 null] >> endobj -811 0 obj << -/D [806 0 R /XYZ 90 388.934 null] +762 0 obj << +/D [755 0 R /XYZ 252.31 344.49 null] >> endobj 218 0 obj << -/D [806 0 R /XYZ 90 375.001 null] +/D [755 0 R /XYZ 90 328.249 null] >> endobj -812 0 obj << -/D [806 0 R /XYZ 90 315.403 null] +763 0 obj << +/D [755 0 R /XYZ 123.803 276.477 null] >> endobj 222 0 obj << -/D [806 0 R /XYZ 90 301.469 null] +/D [755 0 R /XYZ 90 262.293 null] >> endobj -813 0 obj << -/D [806 0 R /XYZ 252.31 249.697 null] +764 0 obj << +/D [755 0 R /XYZ 281.769 208.464 null] >> endobj 226 0 obj << -/D [806 0 R /XYZ 90 233.607 null] +/D [755 0 R /XYZ 90 192.223 null] >> endobj -814 0 obj << -/D [806 0 R /XYZ 90 162.054 null] +765 0 obj << +/D [755 0 R /XYZ 318.71 152.406 null] >> endobj 230 0 obj << -/D [806 0 R /XYZ 90 148.12 null] +/D [755 0 R /XYZ 90 136.165 null] >> endobj -815 0 obj << -/D [806 0 R /XYZ 281.769 96.348 null] +766 0 obj << +/D [755 0 R /XYZ 477.971 96.348 null] >> endobj -805 0 obj << -/Font << /F22 424 0 R /F37 577 0 R /F11 698 0 R /F23 425 0 R >> +754 0 obj << +/Font << /F22 400 0 R /F23 401 0 R >> /ProcSet [ /PDF /Text ] >> endobj -836 0 obj << -/Length 1178 +784 0 obj << +/Length 1249 /Filter /FlateDecode >> stream -xÚÍW[oâ8~çWDÚ—D;x}‰¨V+µ@w;j;ÝÂ<µ#d‘ragJçׯ۶…eVÚâË9ßůüťsč,čüŢąšt~ąĆŘé~€g2wúĐ (FÎ$vž\x]‚I¸”U•×ĹşĂ"Ş3ž&’"÷ľL>vF“Î_$mB56hBBť(ë<}N,Ç?:~ĎyiVeŽŹ‰|¦Î¸ógľ‰Ë×k<! -AÝĎ7÷
éňŇŁÔŚîÓ›|îaęcQÖ‘¸¸HňU-K–ç<Zé‚´\@§‹}@˘=Ü×ŮŚ—Új1×ĎĆ„ţYCÍ÷u×+ ŰĄf&ŹŠ8ÉúmUŻ* Ü+‡(öµĂG>çĄ\n-Ě^ő3cIţ)”?nĽ‹›ŕ~›™đf2¶ľĚŁ«WÁŹŕ厓¬Î´Ńü -€OzRt@´ŻQ>cLwVéJ\.LI~”űžşTjž±Hžâ4MfŠU°ÜŮŐ$ňń¬¤Ýµľ|h°)ÁľÉźVÖÜqÁ†›Ś·XhĘ›‡zJ<\§ ÷ҧ ä§$ŹŇ:6j-¤„˛@˝đצdĎńűvÁ6P䞵Ʌěâß6ĄC焉^–Ęđ ľ•ĐC=K“Č”
!JI$†nmjC›Ęv‘Řš,F=ręˇI˘ĺai˘GŻOÜKťBČŐÓáă`úđ¨†?]ß܎޷ܨşŚ¦˛9iˇím1zS A +xÚÍW[sÚF~çWh¦/Ň4lö˘L§36ŕÖ;q<Ů)łH¨ŁŐĹĆýő=«]É‚BϤ/H¬vĎůÎw®‹ŤµŤßz—óŢŰ+JŤ¸Ô5ć+c€
Ď%ȡćƽI©Őg”y®9ŠyQX}ę`sśU"Ň’—Q–Zźćďz“yďď™Ř µÇCsŚ éÝÂFëďŚŘŔ7žę]‰aSĎŘőţčá“x(üő¨Âă"†(ň>Á›ŻßϤ‹ËqĚŃäýhqť®,ę٬̫ ľűP•—Őęňą…„:XG6úÔFľç*·|%Uv3f¦U˛ą|§f¶Rk"
˛°Y\FeQć‚ëýËZGýĺ)*7QŞ–łT¨ĹUάľăřć,úG¨ĎˇŘŠ4Ôç2}&yÁA;8ÄFHŘ„ ă(ŘEµÝfy)B ÄvÍ`ĂÓTÄŇc¶gJrµ…®‹’§„Ă°o^YXÓß@šČ%Ř(]«ŁŘÁ\‹« +a3TVę—v<ŮĆb_ëزÁC—?ňFËŻm—o%Ô5ËL=—ú?feRĹe¤€×ydyăgËuLÔžđKmubľŃ›Ă˝¨—txOéŘ.ę¨QďOúĂZ¤"çŠ_y4Ď’ć¬h¤Ĺq&CďI‘KÓXëi‚Ü .˛™Aç"ĎŐv=PęěíR©”ŻuNMáÜ}ßç< +őNB:;†<¨ +tÝ(ˤجtqčrŮ×€]—|«×€iđ–bz2·ĚĽPYaBLµ°OG‹»©\ţpu}3ůşä:¬ó`±Í3iGtŔÉŚ°ˇ˙#ÔA–lĎ…Mż endstream endobj -835 0 obj << +783 0 obj << /Type /Page -/Contents 836 0 R -/Resources 834 0 R +/Contents 784 0 R +/Resources 782 0 R /MediaBox [0 0 595.276 841.89] -/Parent 816 0 R -/Annots [ 819 0 R 820 0 R 821 0 R 822 0 R 823 0 R 824 0 R 825 0 R 826 0 R 827 0 R 828 0 R 829 0 R 830 0 R 831 0 R 832 0 R ] +/Parent 731 0 R +/Annots [ 767 0 R 768 0 R 769 0 R 770 0 R 771 0 R 772 0 R 773 0 R 774 0 R 775 0 R 776 0 R 777 0 R 778 0 R 779 0 R 780 0 R 781 0 R ] >> endobj -819 0 obj << +767 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 501.74 165.576 511.668] +/Rect [113.91 634.621 165.576 644.548] /A << /S /GoTo /D (aacenc__lib_8h) >> >> endobj -820 0 obj << +768 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 373.073 284.43 383.977] +/Rect [113.91 502.077 284.43 512.981] /A << /S /GoTo /D (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1) >> >> endobj -821 0 obj << +769 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [284.928 373.073 330.637 383.977] +/Rect [284.928 502.077 330.637 512.981] /A << /S /GoTo /D (structAACENC__MetaData_a06cce4e89d53d956d27fb20892461aa0) >> >> endobj -822 0 obj << +770 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 359.557 284.43 370.461] +/Rect [113.91 487.956 284.43 498.859] /A << /S /GoTo /D (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1) >> >> endobj -823 0 obj << +771 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [284.928 359.557 340.051 370.461] +/Rect [284.928 487.956 340.051 498.859] /A << /S /GoTo /D (structAACENC__MetaData_a9274bda31c82bd154ddb3767b74be6b2) >> >> endobj -824 0 obj << +772 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [132.999 346.042 214.393 356.946] +/Rect [132.999 473.834 214.393 484.738] /A << /S /GoTo /D (structAACENC__MetaData_a77fd2ae629044c75369a51760a00d57f) >> >> endobj -825 0 obj << +773 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [132.999 332.526 223.807 343.43] +/Rect [132.999 459.713 223.807 470.617] /A << /S /GoTo /D (structAACENC__MetaData_af001f70f58df01e7e65105bf752a44bd) >> >> endobj -826 0 obj << +774 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [132.999 319.01 226.995 329.914] +/Rect [132.999 445.592 226.995 456.496] /A << /S /GoTo /D (structAACENC__MetaData_aeb0d2d7748c98809112088d0bd997f61) >> >> endobj -827 0 obj << +775 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [132.999 305.495 193.242 316.399] +/Rect [132.999 431.471 193.242 442.375] /A << /S /GoTo /D (structAACENC__MetaData_aa2fbd6a3c66ac05e69e42782807e7ba4) >> >> endobj -828 0 obj << +776 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [151.27 291.979 265.371 302.883] +/Rect [151.27 417.349 265.371 428.253] /A << /S /GoTo /D (structAACENC__MetaData_a47e42d88c7abcaaa2fa9a72f6b6eaa24) >> >> endobj -829 0 obj << +777 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [151.27 278.464 246.791 289.368] +/Rect [151.27 403.228 246.791 414.132] /A << /S /GoTo /D (structAACENC__MetaData_ace0f370c1026d179ea122c0820e1d17c) >> >> endobj -830 0 obj << +778 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [149.616 267.005 214.841 275.852] +/Rect [149.616 391.164 214.841 400.011] /A << /S /GoTo /D (structAACENC__MetaData_a1e67ac741a9080f11325d0c02223f046) >> >> endobj -831 0 obj << +779 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [149.616 253.49 225.919 262.336] +/Rect [149.616 377.043 225.919 385.89] /A << /S /GoTo /D (structAACENC__MetaData_ad2646dc407b31f38dbf71178b6780916) >> >> endobj -832 0 obj << +780 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [151.27 237.917 236.281 248.821] +/Rect [151.27 360.864 236.281 371.768] /A << /S /GoTo /D (structAACENC__MetaData_a0ad6337da83fa3a43a22f87d4ee8b192) >> >> endobj -837 0 obj << -/D [835 0 R /XYZ 89 770.89 null] +781 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [239.926 152.897 410.446 163.801] +/A << /S /GoTo /D (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1) >> +>> endobj +785 0 obj << +/D [783 0 R /XYZ 89 770.89 null] >> endobj 234 0 obj << -/D [835 0 R /XYZ 90 739.935 null] +/D [783 0 R /XYZ 90 739.935 null] >> endobj -818 0 obj << -/D [835 0 R /XYZ 90 685.588 null] +613 0 obj << +/D [783 0 R /XYZ 90 626.477 null] >> endobj 238 0 obj << -/D [835 0 R /XYZ 90 669.748 null] +/D [783 0 R /XYZ 90 617.294 null] >> endobj -817 0 obj << -/D [835 0 R /XYZ 477.971 629.678 null] +786 0 obj << +/D [783 0 R /XYZ 90 522.197 null] >> endobj 242 0 obj << -/D [835 0 R /XYZ 90 611.681 null] ->> endobj -645 0 obj << -/D [835 0 R /XYZ 90 494.202 null] +/D [783 0 R /XYZ 90 344.658 null] >> endobj 246 0 obj << -/D [835 0 R /XYZ 90 485.776 null] +/D [783 0 R /XYZ 90 282.964 null] >> endobj -838 0 obj << -/D [835 0 R /XYZ 90 392.587 null] +787 0 obj << +/D [783 0 R /XYZ 90 258.109 null] >> endobj 250 0 obj << -/D [835 0 R /XYZ 90 223.074 null] +/D [783 0 R /XYZ 90 258.109 null] +>> endobj +617 0 obj << +/D [783 0 R /XYZ 283.313 215.753 null] >> endobj 254 0 obj << -/D [835 0 R /XYZ 90 163.014 null] +/D [783 0 R /XYZ 90 196.393 null] >> endobj -839 0 obj << -/D [835 0 R /XYZ 90 138.432 null] +788 0 obj << +/D [783 0 R /XYZ 414.431 156.05 null] >> endobj 258 0 obj << -/D [835 0 R /XYZ 90 138.432 null] +/D [783 0 R /XYZ 90 136.691 null] >> endobj -649 0 obj << -/D [835 0 R /XYZ 283.313 96.348 null] +790 0 obj << +/D [783 0 R /XYZ 336.891 96.348 null] >> endobj -834 0 obj << -/Font << /F22 424 0 R /F23 425 0 R /F37 577 0 R /F11 698 0 R >> +782 0 obj << +/Font << /F22 400 0 R /F23 401 0 R /F37 546 0 R /F11 673 0 R /F14 726 0 R /F13 789 0 R >> /ProcSet [ /PDF /Text ] >> endobj -852 0 obj << -/Length 994 +802 0 obj << +/Length 1123 /Filter /FlateDecode >> stream -xÚŐWŰrŰ6}çWŕ‘ś©P\^Üé"É®3vęČĘ““rh’ŮáE%)[É× -îlşÎ€0d‡cöhňi]ó6Çm¬Ü¶ő*iŐý”ĎyíŕŔćeÂ…‰2ŘÄwľÍ>Z“™őŹ…űŕîćCź2ÖÝ7Ra˙¤a -Ďdv{©B>đŘ!Č~ü®–2XÍ›&«JeXÖ:(t‹Ôň.ĽĄrV/tň¦¸3]´AŽJrÂ2t0ƶ2v®a§"Şl -xP3 }Ô‡!u73JuF/?ÍeHśLěX¤ ŮŢ -U\q3űQx~8eĂôďUŁ5•gEÖ -Uu‹¶RW•GůSe©2Uúfó:ŻâÔä0‰s®]ž˛öAÝaO]ďłVű*ěn "‰Nŕ:P˘4tt†6>DGˇŔ‚¤Á‹…fĘéŻQ<_dýĹ{»*#z -Cꆺ@lł@®.Đ—ŃĂ鞥U~˙ývU+ŻĘôşJŹĐńe™fIÜ>«u^颌e<=DTQ&eRĄYąP+y -ě«OptE’$€ŘŐ\ľÂ¶4:`‚:S…ző´B˛čîĘJk'SEý{1Düý'b}"$Z6ń*Í´—qmi¶NÝ@Řôr™Ź×ŔűÁÓŔa[Z¦n -¸LşĎ˛#UÉîf4‰ŠlťVRpOe”Ąëwa)âśČRtő˘Ž‹‚›®/ĄŽőë…çĽxs}xTęŃ´ßy”źÖ{7/)vŐ÷±ú6¦ÚWý>“ż«'ă,ΫĹJoëů‰>t©o‹ĐgéĺE×1„m¤¶óojŮ´|Ůd?¸ŢŠ yŢhÚYŢ«v–d;KK×΂¤¤…1™§híjîŢwĐŰ[Ű;޵˝ýŤ`€ń®ęcôĺsH=Gµ -»=pÍ‹\ľ×tüçwÍö_©€BŠČ©˙¤~˙…tj +xÚÍWK“â6ľó+\•‹]=,OU,0›ŮšŮť +˛ ¦&eÖ—ů‡ŢdŢűŁG@36H‰»ČeÜÓŢÓlD0˙ÁŔyc[ďJ
›2ř&Ƭ÷[źµšÂŻK«mD‘mő ĆŘü<úu8ýŠQă +nn˘<Yü9۵Ůů&‹ňHHAkiÁŔAĚŐJî˛(*Î3%{™j0–ň´g@Ş”¨ţ&YGq¶RRŞýŇ +”Ŕ"öy…D+¤ýđE‰6Qś«á:(ĺ‘Ň–eÇ@!Ýń5[ČycčuĆ\bĂQNő›`Ř测ëÄjgÓdny03¶7‡–ÇMő#˙qj1l~ş˝»źśKĂ:˙Bňđcš\†Ź“÷ät¤až®Q–űÔ\ZR^› ˇť*™X¬4%§µ{µ6n!cĚ-B©&hv&ťp*ŘÎâi»ÓŃîĽű8żŔ= śšŞ?˘‚rs/,ÂÍW9!’·ýőą:ö•N—HHçdš,µ´ÝZ„Uł˘@k\*ĐGuţÍ iömăJç"qÔwWÚă;epě`%9¶ŞTÇť0ßFŢ€6{¨ĂŞd§Ţ@†â¨MżźÂŃŔqÁů‡]ާ˛ž2‚l×ÓqęÔS÷Âz:™Ďîüqş»Mt2‹RdŐ™Đh5·I°ú^w©c“îúÉ«özů’oíě…׶«JdM}Ó…,čY(í9“…tŃ=Ž&~ď˘\&Ü6óăh÷MP‚ś+Q«WE¦˘a}&óXß."éÁś7Ń{qP—¦•Żđ.ýä:î=,fÄV˝‚ęać}—grÇĎjeIľÚčcť}ŔC›ą&, —GďÔ¬ăXo¦Tże%Öeü—ĐG1˘ű
ťĺXŃYt–35ť¤„Eň8W°N‘[±ň˙EmŚ„śŠ>Áß ü˙™2źýB‰=.¸ÍE.ďµ+Ňš
lö«Ëvűď.˝S´˛năĄĚßfP%ľz<cčbB®öA†yqč
›«© + ÜNśěÓÎ:íć/˘Qn$ŮO5ŁŐK㺲եo%˛@/¬D&Š`Ý-‹<mΊFZ’(P{U?qó/úדM‡ěé‚ „bŕ'ńBöčĄsŞŽ6±łe„ŰíFŽÓz¬wfWĽVę83÷(ÎŔ˘Űżďâ,L6Íă endstream endobj -851 0 obj << +801 0 obj << /Type /Page -/Contents 852 0 R -/Resources 850 0 R +/Contents 802 0 R +/Resources 800 0 R /MediaBox [0 0 595.276 841.89] -/Parent 816 0 R -/Annots [ 833 0 R 848 0 R ] +/Parent 731 0 R +/Annots [ 797 0 R 798 0 R ] >> endobj -833 0 obj << +797 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [239.926 701.322 410.446 712.226] +/Rect [243.463 566.951 413.983 577.855] /A << /S /GoTo /D (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1) >> >> endobj -848 0 obj << +798 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [243.463 422.307 413.983 433.211] -/A << /S /GoTo /D (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1) >> +/Rect [113.91 163.04 165.576 172.968] +/A << /S /GoTo /D (aacenc__lib_8h) >> >> endobj -853 0 obj << -/D [851 0 R /XYZ 89 770.89 null] +803 0 obj << +/D [801 0 R /XYZ 89 770.89 null] >> endobj 262 0 obj << -/D [851 0 R /XYZ 90 739.935 null] +/D [801 0 R /XYZ 90 739.935 null] >> endobj -841 0 obj << -/D [851 0 R /XYZ 414.431 704.475 null] +616 0 obj << +/D [801 0 R /XYZ 90 626.132 null] >> endobj 266 0 obj << -/D [851 0 R /XYZ 90 682.008 null] +/D [801 0 R /XYZ 90 610.195 null] >> endobj -847 0 obj << -/D [851 0 R /XYZ 336.891 641.044 null] +791 0 obj << +/D [801 0 R /XYZ 417.968 570.104 null] >> endobj 270 0 obj << -/D [851 0 R /XYZ 90 618.577 null] +/D [801 0 R /XYZ 90 552.01 null] >> endobj -648 0 obj << -/D [851 0 R /XYZ 90 486.734 null] +795 0 obj << +/D [801 0 R /XYZ 337.021 511.92 null] >> endobj 274 0 obj << -/D [851 0 R /XYZ 90 466.425 null] +/D [801 0 R /XYZ 90 493.826 null] >> endobj -840 0 obj << -/D [851 0 R /XYZ 417.968 425.46 null] +794 0 obj << +/D [801 0 R /XYZ 296.703 453.736 null] >> endobj 278 0 obj << -/D [851 0 R /XYZ 90 402.993 null] +/D [801 0 R /XYZ 90 435.642 null] >> endobj -845 0 obj << -/D [851 0 R /XYZ 337.021 362.029 null] +793 0 obj << +/D [801 0 R /XYZ 349.285 395.552 null] >> endobj 282 0 obj << -/D [851 0 R /XYZ 90 339.562 null] +/D [801 0 R /XYZ 90 377.457 null] >> endobj -844 0 obj << -/D [851 0 R /XYZ 296.703 298.597 null] +792 0 obj << +/D [801 0 R /XYZ 126.353 325.412 null] >> endobj 286 0 obj << -/D [851 0 R /XYZ 90 276.13 null] +/D [801 0 R /XYZ 90 309.375 null] >> endobj -843 0 obj << -/D [851 0 R /XYZ 349.285 235.166 null] +796 0 obj << +/D [801 0 R /XYZ 222.412 267.228 null] >> endobj 290 0 obj << -/D [851 0 R /XYZ 90 212.699 null] +/D [801 0 R /XYZ 90 249.134 null] >> endobj -842 0 obj << -/D [851 0 R /XYZ 126.353 159.779 null] +699 0 obj << +/D [801 0 R /XYZ 90 155.459 null] >> endobj 294 0 obj << -/D [851 0 R /XYZ 90 139.37 null] +/D [801 0 R /XYZ 90 146.979 null] >> endobj -846 0 obj << -/D [851 0 R /XYZ 222.412 96.348 null] ->> endobj -850 0 obj << -/Font << /F22 424 0 R /F23 425 0 R /F14 778 0 R /F13 854 0 R >> +800 0 obj << +/Font << /F22 400 0 R /F23 401 0 R /F14 726 0 R /F13 789 0 R /F37 546 0 R /F11 673 0 R >> /ProcSet [ /PDF /Text ] >> endobj -863 0 obj << -/Length 859 +811 0 obj << +/Length 628 /Filter /FlateDecode >> stream -xÚÍVËnŰ8Ýű+ĚFj–Q˛Ś˘€§ť“´Ť˝KŠ‚–hG -čĎ +xÚUŃn›0}ç+üxö5†Đ·4é¦VZ·®ĽµU倓"čŔ¬ęßĎ€IšvŠ2 „1ćŢsÎ=ľ&húćś'ΗŻ +)ć@Q’ˇ;ĎgŔ˘Đ](Ń4žś¸Ë*mYjˇóŞô’+ç"q~;ÔÄ$ö1x„#ĆQZ8wefţ +ĚâzéW( +Ý:7™ŕˇÇśĂľ@?Ű•ĘÓÇ\ë:_y@ÜV˦2F2aŘ-â€Í€Ă‘îřŢ?čÎ焸—׉ťîČÔËęWż K[¶ĹŹVźżNsnăäS0čé‰.Ë[Q<«e‚Ó3ÍËô=Ąi5üQH`:‹†¬!ćz>%&ÓRj‘+™YŁČ&óçŃ&“˘đ`ÄCĄĽ'JiM¦źä0¨ZýÜęa,jŹÎÜMď>»n]Őö[ů9G!Ň‹˛»ŞĚdâÄÜt*V·.JawŹ<yO,íď˛XI‹c)´ř`źL6ŰD€>ŕVÉ®fËççîââzńhl77 +wÓśťMjvX\ëőëö
_µőJsĄDý:Ľf[Ř«>ä EU6†B6~”FöbÖ>|3„â`—ÁoĎýź»çĂĽ|3N›ĺŐ0llČ˙HďdGÜí#Çóűăw…ĘGôąnt-Eń®ŚYĘZč‘fÖÖyą9y·’ô=(Â!Ř*'ŁvŮžű÷÷Ş~Ę-4¸Mm‘^:eÄaĚëş*&ĹYWJUť/›~Şë JžíÝ6ŽyüQó?(D×;ŤĆŹĘ4qńÓÁF<=˙f3Çţ…ă endstream endobj -862 0 obj << +810 0 obj << /Type /Page -/Contents 863 0 R -/Resources 861 0 R +/Contents 811 0 R +/Resources 809 0 R /MediaBox [0 0 595.276 841.89] -/Parent 816 0 R -/Annots [ 849 0 R 855 0 R 856 0 R 857 0 R 858 0 R 859 0 R 860 0 R ] ->> endobj -849 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 660.227 165.576 670.155] -/A << /S /GoTo /D (aacenc__lib_8h) >> +/Parent 731 0 R +/Annots [ 799 0 R 804 0 R 805 0 R 806 0 R 807 0 R 808 0 R ] >> endobj -855 0 obj << +799 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [132.999 535.17 190.343 546.074] +/Rect [132.999 704.154 190.343 715.058] /A << /S /GoTo /D (structAACENC__OutArgs_aa08d19137d0dbd54d3d86f88a85eb149) >> >> endobj -856 0 obj << +804 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [132.999 522.219 194.766 533.123] +/Rect [132.999 691.202 194.766 702.106] /A << /S /GoTo /D (structAACENC__OutArgs_ad4d8784f4d5504a5f87ef44af1e7b6db) >> >> endobj -857 0 obj << +805 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [132.999 509.267 191.997 520.171] +/Rect [132.999 678.251 191.997 689.155] /A << /S /GoTo /D (structAACENC__OutArgs_a7d481a0e52142dcdbdfa34677b111d7e) >> >> endobj -858 0 obj << +806 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [234.367 450.731 301.635 461.635] +/Rect [234.367 619.715 301.635 630.619] /A << /S /GoTo /D (aacenc__lib_8h_a6ccf4948de12c1cde8ca22a1216c5d3e) >> >> endobj -859 0 obj << +807 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [289.908 219.509 357.176 230.413] +/Rect [289.908 423.742 357.176 434.646] /A << /S /GoTo /D (aacenc__lib_8h_a6ccf4948de12c1cde8ca22a1216c5d3e) >> >> endobj -860 0 obj << +808 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 159.642 165.576 169.57] +/Rect [113.91 381.499 165.576 391.427] /A << /S /GoTo /D (aacenc__lib_8h) >> >> endobj -864 0 obj << -/D [862 0 R /XYZ 89 770.89 null] +812 0 obj << +/D [810 0 R /XYZ 89 770.89 null] >> endobj -298 0 obj << -/D [862 0 R /XYZ 90 739.935 null] +813 0 obj << +/D [810 0 R /XYZ 90 723.104 null] >> endobj -749 0 obj << -/D [862 0 R /XYZ 90 653.253 null] +298 0 obj << +/D [810 0 R /XYZ 90 664.677 null] >> endobj 302 0 obj << -/D [862 0 R /XYZ 90 645.532 null] +/D [810 0 R /XYZ 90 606.141 null] >> endobj -865 0 obj << -/D [862 0 R /XYZ 90 554.12 null] +814 0 obj << +/D [810 0 R /XYZ 90 581.812 null] >> endobj 306 0 obj << -/D [862 0 R /XYZ 90 495.693 null] +/D [810 0 R /XYZ 90 581.812 null] +>> endobj +815 0 obj << +/D [810 0 R /XYZ 322.456 539.982 null] >> endobj 310 0 obj << -/D [862 0 R /XYZ 90 437.157 null] +/D [810 0 R /XYZ 90 523.255 null] >> endobj -866 0 obj << -/D [862 0 R /XYZ 90 412.829 null] +816 0 obj << +/D [810 0 R /XYZ 324.688 483.439 null] >> endobj 314 0 obj << -/D [862 0 R /XYZ 90 412.829 null] +/D [810 0 R /XYZ 90 466.711 null] >> endobj -867 0 obj << -/D [862 0 R /XYZ 90 351.217 null] ->> endobj -318 0 obj << -/D [862 0 R /XYZ 90 336.647 null] ->> endobj -868 0 obj << -/D [862 0 R /XYZ 90 277.049 null] ->> endobj -322 0 obj << -/D [862 0 R /XYZ 90 262.479 null] ->> endobj -861 0 obj << -/Font << /F22 424 0 R /F23 425 0 R /F37 577 0 R /F11 698 0 R >> +809 0 obj << +/Font << /F22 400 0 R /F23 401 0 R >> /ProcSet [ /PDF /Text ] >> endobj - -875 0 obj << -/Length 357 +828 0 obj << +/Length 558 /Filter /FlateDecode >> stream -xÚu’;OĂ0…÷ü -–d¨ëW›ô -( Ę8N)/˘tčżÇ©ÝP -Číä~çÜseö +xÚ˝TMs›0Ľó+4é(úôć§M?’©Ë-éxT636¸€ů÷H¸6™¦=x:> endstream endobj -874 0 obj << +827 0 obj << /Type /Page -/Contents 875 0 R -/Resources 873 0 R +/Contents 828 0 R +/Resources 826 0 R /MediaBox [0 0 595.276 841.89] -/Parent 816 0 R -/Group 870 0 R +/Parent 832 0 R +/Group 818 0 R +/Annots [ 819 0 R 820 0 R 821 0 R 822 0 R 823 0 R 824 0 R ] >> endobj -869 0 obj << +817 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./aacenc__lib_8h__incl.pdf) /PTEX.PageNumber 1 -/PTEX.InfoDict 877 0 R +/PTEX.InfoDict 833 0 R /BBox [0 0 256 164] -/Group 870 0 R +/Group 818 0 R /Resources << /ExtGState << /a0 << /CA 1 /ca 1 >> ->>/Font << /f-0-0 878 0 R>> +>>/Font << /f-0-0 834 0 R>> >> /Length 495 /Filter /FlateDecode @@ -4009,23 +3788,23 @@ xśTMk1˝űWč¬#ůS‚2‡…Rôv ‡Ă6ɦ”¤ôĐż_ÉăÉL6›fe‘l=Ů~z?şxt±@Ě@śA"<ÝÂ7řĺěyş ů/ę–ęIo(“Ż]TU“Č‹ĽTČ““ëtŹ˝JÚ¶»ôÂýv> endstream endobj -877 0 obj +833 0 obj << /Creator (cairo 1.8.10 \(http://cairographics.org\)) /Producer (cairo 1.8.10 \(http://cairographics.org\)) >> endobj -878 0 obj +834 0 obj << /Type /Font /Subtype /Type0 /BaseFont /FreeSans /Encoding /Identity-H -/DescendantFonts [ 879 0 R] -/ToUnicode 880 0 R +/DescendantFonts [ 835 0 R] +/ToUnicode 836 0 R >> endobj -879 0 obj +835 0 obj << /Type /Font /Subtype /CIDFontType2 @@ -4035,20 +3814,20 @@ endobj /Ordering (Identity) /Supplement 0 >> -/FontDescriptor 881 0 R +/FontDescriptor 837 0 R /W [ 0 [ 500 556 500 556 556 556 222 222 556 278 556 833 278 500 556 611 722 667 556 556 556]] >> endobj -880 0 obj +836 0 obj << -/Length 882 0 R +/Length 838 0 R /Filter /FlateDecode >> stream xś]ŇÍj„0đ{žbŽŰâqÝ/ˇl/úAm@“qW¨1ÄěÁ·oĚ_¶Đ€ÂĎ™ N&ÉĄz©Lď)ůpŁŞŮS×íxďN1µ|íŤé^ůUń†ĆŠ$×óäy¨L7Š˘ ä3'ďfÚ<ë±ĺ'ADÉ»ÓězsĄÍ÷ĄĆ§úníl<Ą˘,Is¶{mě[30%±x[éďýĽ
e_łeʢ%~IŤš'Ű(vŤą˛(Ň°J*ş°JÁF˙‹g)ĘÚNÝÓeHOÓ,Ł2hí =”CíŁöt@LAGčť :Geë.
b'¨…4¤˘Ž9¤ˇuO†R¨‹ĘQ2…P'Ń_ŢBčďŽäÚßšąö‡[Oh9ÂeŢŹů¨»sa4ńRÄ™,Óč
?îŤíRź_ŽűĄÖ endstream endobj -881 0 obj +837 0 obj << /Type /FontDescriptor /FontName /FreeSans @@ -4060,15 +3839,15 @@ endobj /CapHeight 1050 /StemV 80 /StemH 80 -/FontFile2 883 0 R +/FontFile2 839 0 R >> endobj -882 0 obj +838 0 obj 309 endobj -883 0 obj +839 0 obj << -/Length 884 0 R +/Length 840 0 R /Filter /FlateDecode /Length1 2464 >> @@ -4080,3089 +3859,2823 @@ AíD 5—~ňÓ‹ď-NĺrS‹tů7ŇâoG/_ĽTXűÚľŚ¶Únž¸KŤ,ŽŹ“ÉSŇ]â–ňĎceHNHwĄ™‘ízń|Šśáţ°Ú ú'„˙«77 endstream endobj -884 0 obj +840 0 obj 1825 endobj -870 0 obj +818 0 obj << /Type /Group /S /Transparency /CS /DeviceRGB >>endobj -876 0 obj << -/D [874 0 R /XYZ 89 770.89 null] ->> endobj -326 0 obj << -/D [874 0 R /XYZ 90 739.935 null] ->> endobj -581 0 obj << -/D [874 0 R /XYZ 90 553.953 null] ->> endobj -330 0 obj << -/D [874 0 R /XYZ 90 553.953 null] ->> endobj -873 0 obj << -/Font << /F22 424 0 R /F23 425 0 R /F37 577 0 R >> -/XObject << /Im2 869 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -910 0 obj << -/Length 703 -/Filter /FlateDecode ->> -stream -xÚ˝VŰn›@}ç+ö¤zł–KĄ>SŇřRL*UIdYŰH6N0VUý÷.°´@›"«~đŢfΙ93»@ŕJşôĄ‹!Ŕ„¦F4ŕ/‰€®aČţÜÉ)ţ5 Ô„1î”ď˘M¨ôC˛˝Ű0Nçi´‹3SÉńĄ' sKpÇt¨S‚t÷€Ŕ‚ď_©i€çÜjTBů¸Sé«„jˇŃFh„/uRᯣ}Ä*™?®‹é~˝S“źĹÉó: -ÄÉ=BdŠýE”„Aşy-V»¤Ł¸ľĹÁć°™¦żé -¤Źy¶e¸Í‘«Pj@u0Ć“Vq¦Ă“„ ij”ĺŐy~X:ŠŤwK˝ăÚüQ§4é đ^˝,*ĆĐdŚé˘PÓŚBşţfľßs-Ş4ÔĆT)&*$fáuO«ą€»C\ó49©8ɢJV"</·É4ł,EErßőgnĽÜM«.uĺř_«éô¬¬—‡Ąî˙IéĆV˘`C^폳’ł˛Ži;Úó&;Óą=OçÍžŞőaŻě*Ę»VĽ0ľ˘«ňëc¸—íŹ=-đÄ“P$Ňxl;^ćz1Ŕj•…2¨Q\>tüŞÓw$h„§C•R¸}¶FöŤ3{ËvDfBĆ/pU'ćok’?çş«!‡l]SÇó˛ůŘk"ev?Ţ1 Ş™<!"M´vµ=żü
ěSQô‚řďĂ{ČH â7¨îč›ÂK'[7®=+Ô?ACNÓĽ
~čą“ż×¦Ę;¤s;šŢN&’}ÇžM“Č–g
ß9IH:$VÓŻ?
Ü«S4´S™\żµr*ę”gëöL¸k.ÓKŻ=随?iOŇą,Ľ·“ĘV{*µUń¶ćĐşô@É1ś@7P1˙Yłk~ŔRDţőűő;‘" -endstream -endobj -909 0 obj << -/Type /Page -/Contents 910 0 R -/Resources 908 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 816 0 R -/Group 872 0 R -/Annots [ 885 0 R 886 0 R 887 0 R 888 0 R 889 0 R 890 0 R 891 0 R 892 0 R 893 0 R 894 0 R 895 0 R 896 0 R 897 0 R 898 0 R 899 0 R 900 0 R 901 0 R 902 0 R 903 0 R ] ->> endobj -871 0 obj << -/Type /XObject -/Subtype /Form -/FormType 1 -/PTEX.FileName (./aacenc__lib_8h__dep__incl.pdf) -/PTEX.PageNumber 1 -/PTEX.InfoDict 915 0 R -/BBox [0 0 150 164] -/Group 872 0 R -/Resources << -/ExtGState << -/a0 << -/CA 1 -/ca 1 ->> ->>/Font << /f-0-0 916 0 R>> ->> -/Length 329 -/Filter /FlateDecode ->> -stream -xśŤSMKĂ@˝ĎŻ?íLös@r(PđP
x(=Ôh+Ň -˙ľł›´i‹¨„ä˝ÝyĽ™·Kö0Ç=Ř€Öc‹‡W|Â`ĚĎa“áćsX?ÜéçgúľĂb‰d_€ ď±wŮeä:á™ýÓÚßਚ™č„jĽFmJĺŃnVŚzgŰBk[ěčš«¤¸ŹzmP\ÔnÚ‚‰>”ÓÂĹ,×éŰLÖU¤ůÚ5,nËçX7Uí3±Ă†».řa#4•Í{JCATY*«fŮÎŕ¶ĎůŮEty~ĹP’‰ëc5˙Éč=úź>7é<ß0í)V¶ľČ×
•î8˝Ţľ$˛’/odNCÎ= -ᤳ*Ol‚Î,˛a’Ě‚5Ö9ěđńw·|DucÓ÷“Đ÷cę[Śi,弔NË_0‡otµží -endstream -endobj -915 0 obj -<< -/Creator (cairo 1.8.10 \(http://cairographics.org\)) -/Producer (cairo 1.8.10 \(http://cairographics.org\)) ->> -endobj -916 0 obj -<< -/Type /Font -/Subtype /Type0 -/BaseFont /FreeSans -/Encoding /Identity-H -/DescendantFonts [ 917 0 R] -/ToUnicode 918 0 R ->> -endobj -917 0 obj -<< -/Type /Font -/Subtype /CIDFontType2 -/BaseFont /FreeSans -/CIDSystemInfo << -/Registry (Adobe) -/Ordering (Identity) -/Supplement 0 ->> -/FontDescriptor 919 0 R -/W [ 0 [ 500 556 500 556 556 556 222 222 556 278 556 833 556]] ->> -endobj -918 0 obj -<< -/Length 920 0 R -/Filter /FlateDecode ->> -stream -xś]ŃÍj„0 -rÎWŇŁÁÉ+ŤAąE™ĄUAŮĄU tć_<µCem§żU ô<ĄgŮ)ŻHëŔ:°Ž¬G˛Ž¤cÇ:qLłÎ¬+ëÂ*XWR±ť˘8vaµ,ĂҤsFŤl7^[Zçź—žCHŁ˘G˘Ó±ďďčGżVŃ÷Č -Ź„ -endstream -endobj -919 0 obj -<< -/Type /FontDescriptor -/FontName /FreeSans -/Flags 4 -/FontBBox [ -958 -462 1632 1050] -/ItalicAngle 0 -/Ascent 1000 -/Descent -300 -/CapHeight 1050 -/StemV 80 -/StemH 80 -/FontFile2 921 0 R ->> -endobj -920 0 obj -277 -endobj -921 0 obj -<< -/Length 922 0 R -/Filter /FlateDecode -/Length1 1864 ->> -stream -xśeTmLSW~Ďi{ŰÚý -uK:ý)ˇl›ż}GÜ·Á·-;PcGMUT(íÜ*żH†ĽÁčFů›%›Ő¤5qd5)4űlOD1ŻÔ¤kÓHúČË©Đ{Š$ńŘuzkGň׎ťí–˙ˇź®Đ„eU)Ö -D±~PŹVŤ2Ś™ŽÉ ÁA©bó”}łőjĐ «čńÖ1€Óé¨h7úŐĐĂg§˝ź$$%$°tJUŃ„Ô1)JŕÚR$qŐ‰&QᎉüĽD,Š<xţzŤ¤îKđüVW$uOđ{ëN§čpŠ‰ -ť=‰6—čôH*a¨—BŃ„S -ˇG-°”N—óĄÄ
ÇŃq‰EÇ߸LŇT'¤Č¤¨đ˘e4B^_ŻGâ„Ůr›âOöő9$Ŕ,Za¶TˇBË”NXmć7Öx « -i~cÎ~éťgQę“çÇ?é’]Ë^®_˝ˇ–tÄQuGž‡^îüBxá,ןăźüňČChˇTˇ]ŹÖŤo„ -™{p˙c7!Ś8@ě°›ńŞfć@n-^Lđadž_(ů -ß_đ˝ŹgcĹ?|Š÷?ý»pł{^©žG.Ŕ -endstream -endobj -922 0 obj -1373 -endobj -872 0 obj -<< -/Type /Group -/S /Transparency -/CS /DeviceRGB ->>endobj -885 0 obj << +819 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [138.538 477.201 226.467 487.128] +/Rect [138.538 203.393 226.467 213.321] /A << /S /GoTo /D (structAACENC__InfoStruct) >> >> endobj -886 0 obj << +820 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [138.538 463.128 220.928 473.056] +/Rect [138.538 190.712 220.928 200.639] /A << /S /GoTo /D (structAACENC__BufDesc) >> >> endobj -887 0 obj << +821 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [138.538 448.079 213.556 458.983] +/Rect [138.538 177.054 213.556 187.958] /A << /S /GoTo /D (structAACENC__InArgs) >> >> endobj -888 0 obj << +822 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [138.538 434.007 220.201 444.91] +/Rect [138.538 164.373 220.201 175.276] /A << /S /GoTo /D (structAACENC__OutArgs) >> >> endobj -889 0 obj << +823 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [138.538 420.91 225.351 430.838] +/Rect [138.538 152.667 225.351 162.595] /A << /S /GoTo /D (structAACENC__MetaData) >> >> endobj -890 0 obj << +824 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [248.544 358.933 364.141 369.837] +/Rect [248.544 95.352 364.141 106.256] /A << /S /GoTo /D (aacenc__lib_8h_a079ac614039555edf1d131e5fb87573b) >> >> endobj -891 0 obj << +829 0 obj << +/D [827 0 R /XYZ 89 770.89 null] +>> endobj +318 0 obj << +/D [827 0 R /XYZ 90 739.935 null] +>> endobj +550 0 obj << +/D [827 0 R /XYZ 90 553.953 null] +>> endobj +322 0 obj << +/D [827 0 R /XYZ 90 553.953 null] +>> endobj +830 0 obj << +/D [827 0 R /XYZ 90 221.097 null] +>> endobj +831 0 obj << +/D [827 0 R /XYZ 90 111.748 null] +>> endobj +826 0 obj << +/Font << /F22 400 0 R /F23 401 0 R /F37 546 0 R /F14 726 0 R >> +/XObject << /Im2 817 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +886 0 obj << +/Length 755 +/Filter /FlateDecode +>> +stream +xÚ˝ëo›0ŔżóWř#H
ó“đa„Ž×°™´µšÚ´ŞÔ‡–µÚ¤i˙űĚ#SŰ5<V¤(Ů÷»;ßť ¸¬´ĄĐŢÇtllq ć62)F@\€ŰĆ™8„8&˘T.Şź×7c†)ÔýűóÇŰÍÝĂׇëű»jŞĆ„öMCr&¨GçćśPp~«ťśAp!źhg~Ôłn…‰üż\ű¨ÁŞ!d:”âťnXŞ:ÇŤěN˘·5ů{ŤŢ•É›mZdf›óÖ¬SŚéł%ŕdF!Ô7RdűĽR{ŐÚ‘×3*]×° î±Ä+YžW÷iţRR5ď×>1Ó˛0CTŇjóDfúá5aďgĂźP^Gű$Ă˝RĂä“ŐÝ(ô˵›řëÁ`LĚbé›ęź»}ó”8E‹,«PPĚ/3ĂÁş›»1¬őź—&A¸ęĂ%L({΂ބv<ś„TI|™§`UŠČ†C”·EĆ–áÝŽ˛Pň—úl0Æ0Ň Gú6÷żźĎ›í*6ťž°ž./
LőËÍ6ĽGĘő©LŁÍöĐâ&ĄkPŞ~–~s
„Ţlg—†ú¶"$^EmíA# »üG~É™(˛ĘŕÔJQ.CÁEÎÜx”!d˘Ů’‡_ďi˝müí÷Żź{eÖ¤dľ~v*ž÷ÝĚ$MŘ:(‹y3Nšą?EôŽR +Wk1E4¦Ć˝v“˙ŁAźáÖäXž1ć;´?É„)č‰< +˘zĽâ¦Y}„÷e“zw-…ę +ˇz'Őŕz˙:‹fÍQďĄr7á»Öş“‚Ôś•3yXIÖŇ@P/‚ §aÇl‰Eť˛y˝í ó÷EeÂĐ®ĎŇ´vďDJž”Ý@ľ»>ůč@ů±ěKű*‘ÍÝ8‹Ř`3TŞ{ő¦3D}•ľ’9YD¬ŚX˛ë>=z6ăĺç1 ÄcżĆüÚn˙ą +endstream +endobj +885 0 obj << +/Type /Page +/Contents 886 0 R +/Resources 884 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 832 0 R +/Annots [ 825 0 R 842 0 R 843 0 R 844 0 R 845 0 R 846 0 R 847 0 R 848 0 R 849 0 R 850 0 R 851 0 R 852 0 R 853 0 R 854 0 R 855 0 R 856 0 R 857 0 R 858 0 R 859 0 R 860 0 R 861 0 R 862 0 R 863 0 R 864 0 R 865 0 R 866 0 R 867 0 R 868 0 R 869 0 R 870 0 R 871 0 R 872 0 R 873 0 R 874 0 R 875 0 R 876 0 R 877 0 R 878 0 R 879 0 R 880 0 R ] +>> endobj +825 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [138.538 298.306 218.886 308.836] +/Rect [138.538 704.483 218.886 715.013] /A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483e) >> >> endobj -892 0 obj << +842 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 281.588 175.828 291.775] +/Rect [113.91 688.856 175.828 699.042] /A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea98f5f419028ff1b93551adb910ca0281) >> >> endobj -893 0 obj << +843 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 264.527 247.519 274.713] +/Rect [113.91 672.885 247.519 683.071] /A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea10b93e7c1f1def31f634b6fb7a894409) >> >> endobj -894 0 obj << +844 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 247.465 243.424 257.652] +/Rect [113.91 656.914 243.424 667.1] /A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483eaf35935e997b3321eda6d083c9322f347) >> >> endobj -895 0 obj << +845 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 230.404 296.644 240.591] +/Rect [113.91 640.942 296.644 651.129] /A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea1a79b7f1cefc5f89ba7c10cfa020116f) >> >> endobj -896 0 obj << +846 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 213.342 243.653 223.529] +/Rect [113.91 624.971 243.653 635.158] /A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea47979433239c09930ed98e85f5b81971) >> >> endobj -897 0 obj << +847 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 196.281 219.155 206.468] +/Rect [113.91 609 219.155 619.187] /A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea189c4a7532530a89ab214aba35b1e982) >> >> endobj -898 0 obj << +848 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 179.22 244.769 189.406] +/Rect [113.91 593.029 244.769 603.216] /A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea5af1b153eb8f1a28a543419d10562cbf) >> >> endobj -899 0 obj << +849 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 162.158 242.966 172.345] +/Rect [113.91 577.058 242.966 587.245] /A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483eae9b8c1b6153a63fbf152a60e422ca433) >> >> endobj -900 0 obj << +850 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 145.097 235.763 155.283] +/Rect [113.91 561.087 235.763 571.274] /A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea51de868cffa67ffe361085555a6e5ea2) >> >> endobj -901 0 obj << +851 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 128.035 251.434 138.222] +/Rect [113.91 545.116 251.434 555.303] /A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea8e8c0fd770036a2bc58fc062f5044454) >> >> endobj -902 0 obj << +852 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 110.974 239.638 121.16] +/Rect [113.91 529.145 239.638 539.332] /A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea5a631fa755a8d02a97a8184725da4b57) >> >> endobj -903 0 obj << +853 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 93.569 225.641 104.099] +/Rect [113.91 512.831 225.641 523.361] /A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea3b7906c278268857fa6f8d7e39b2b5c3) >> >> endobj -911 0 obj << -/D [909 0 R /XYZ 89 770.89 null] ->> endobj -912 0 obj << -/D [909 0 R /XYZ 90 496.296 null] ->> endobj -913 0 obj << -/D [909 0 R /XYZ 90 376.721 null] ->> endobj -914 0 obj << -/D [909 0 R /XYZ 90 318.004 null] ->> endobj -908 0 obj << -/Font << /F22 424 0 R /F23 425 0 R /F14 778 0 R >> -/XObject << /Im3 871 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -978 0 obj << -/Length 845 -/Filter /FlateDecode ->> -stream -xÚ˝XŰnÚ0ľç)|™HkęCÂĹ.BpŔSHc´C[EŚ¦RaŁÚ¤iď>'†ő°’—•ÇĆůľ˙ü;†ŕ@0ěôeç4Âôśž‡= Ż@‚®‡Š—ŕĚňdź` -Ůl^¬ćůÍâ“íBËů¬WŁĹMˇźDqU¬mä[jWąäL-‚ěů¦Ădç[)FPĹ@»N—P0_vÎ. ¸Tëo -endstream -endobj -977 0 obj << -/Type /Page -/Contents 978 0 R -/Resources 976 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 981 0 R -/Annots [ 904 0 R 905 0 R 906 0 R 907 0 R 937 0 R 938 0 R 939 0 R 940 0 R 941 0 R 942 0 R 943 0 R 944 0 R 945 0 R 946 0 R 947 0 R 948 0 R 949 0 R 950 0 R 951 0 R 952 0 R 953 0 R 954 0 R 955 0 R 956 0 R 957 0 R 958 0 R 959 0 R 960 0 R 961 0 R 962 0 R 963 0 R 964 0 R 965 0 R 966 0 R 967 0 R 968 0 R 969 0 R 970 0 R 971 0 R 972 0 R ] ->> endobj -904 0 obj << +854 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [138.538 727.192 248.345 737.723] +/Rect [138.538 499.848 248.345 510.379] /A << /S /GoTo /D (aacenc__lib_8h_a68ca23c646df4d306e2412b926292a47) >> >> endobj -905 0 obj << +855 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 711.72 193.153 721.907] +/Rect [113.91 484.221 193.153 494.408] /A << /S /GoTo /D (aacenc__lib_8h_a68ca23c646df4d306e2412b926292a47aea749d078297e7079337d6d47171a8b6) >> >> endobj -906 0 obj << +856 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 695.905 211.325 706.091] +/Rect [113.91 468.25 211.325 478.437] /A << /S /GoTo /D (aacenc__lib_8h_a68ca23c646df4d306e2412b926292a47a857575621d11cca83fab4d5c70b55181) >> >> endobj -907 0 obj << +857 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 680.089 219.355 690.276] +/Rect [113.91 452.279 219.355 462.466] /A << /S /GoTo /D (aacenc__lib_8h_a68ca23c646df4d306e2412b926292a47a510ae495f7636503ecfe111f75f66d50) >> >> endobj -937 0 obj << +858 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 664.273 228.032 674.46] +/Rect [113.91 436.308 228.032 446.495] /A << /S /GoTo /D (aacenc__lib_8h_a68ca23c646df4d306e2412b926292a47a6a362853fb508e259718dabe65c7a57e) >> >> endobj -938 0 obj << +859 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 648.114 186.747 658.644] +/Rect [113.91 419.993 186.747 430.524] /A << /S /GoTo /D (aacenc__lib_8h_a68ca23c646df4d306e2412b926292a47a51cb08659a6af422761d58090766faa8) >> >> endobj -939 0 obj << +860 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [138.538 635.287 309.058 645.817] +/Rect [138.538 407.011 309.058 417.542] /A << /S /GoTo /D (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1) >> >> endobj -940 0 obj << +861 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 619.815 272.087 630.002] +/Rect [113.91 391.384 272.087 401.571] /A << /S /GoTo /D (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1a7560bc907e827954b0b55f87751fdbeb) >> >> endobj -941 0 obj << +862 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 603.999 321.132 614.186] +/Rect [113.91 375.413 321.132 385.6] /A << /S /GoTo /D (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1af88950dea139037d728aefe7722191ec) >> >> endobj -942 0 obj << +863 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 588.184 298.099 598.37] +/Rect [113.91 359.442 298.099 369.629] /A << /S /GoTo /D (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1a95efe9f7b6df0a6628ec7e2c61646fe9) >> >> endobj -943 0 obj << +864 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 572.368 328.883 582.555] +/Rect [113.91 343.471 328.883 353.658] /A << /S /GoTo /D (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1af4a650d61726dd5bbbb560042bb0b8a2) >> >> endobj -944 0 obj << +865 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 556.552 305.85 566.739] +/Rect [113.91 327.5 305.85 337.686] /A << /S /GoTo /D (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1aa9315468e85d31968b147a4080e352a7) >> >> endobj -945 0 obj << +866 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 540.393 281.511 550.923] +/Rect [113.91 311.185 281.511 321.715] /A << /S /GoTo /D (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1aa0dc03a5dc38b25ac1ea9d8ddf892fb5) >> >> endobj -946 0 obj << +867 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [138.538 527.566 242.687 538.096] +/Rect [138.538 298.203 242.687 308.733] /A << /S /GoTo /D (aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846) >> >> endobj -947 0 obj << +868 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 512.094 214.005 522.281] +/Rect [113.91 282.576 214.005 292.762] /A << /S /GoTo /D (aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846ab97edc65b5ed3be8c11f3ba9bcca22f3) >> >> endobj -948 0 obj << +869 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 496.278 223.419 506.465] +/Rect [113.91 266.605 223.419 276.791] /A << /S /GoTo /D (aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846a96d66031cde3d5d89d8457e45036bd94) >> >> endobj -949 0 obj << +870 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 480.463 220.839 490.649] +/Rect [113.91 250.634 220.839 260.82] /A << /S /GoTo /D (aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846afcd151f12c441417e69746762d34ea33) >> >> endobj -950 0 obj << +871 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 464.647 243.862 474.834] +/Rect [113.91 234.663 243.862 244.849] /A << /S /GoTo /D (aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846a82028e22ad9293b97d10ee57abf67bdf) >> >> endobj -951 0 obj << +872 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 448.831 244.928 459.018] +/Rect [113.91 218.692 244.928 228.878] /A << /S /GoTo /D (aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846abcbfac74b1bcd90099e3cf6b1fcd19f3) >> >> endobj -952 0 obj << +873 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 432.672 205.706 443.202] +/Rect [113.91 202.377 205.706 212.907] /A << /S /GoTo /D (aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846a08acd30267f5bd8c4047259fbc40fd98) >> >> endobj -953 0 obj << +874 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [138.538 419.845 220.58 430.375] +/Rect [138.538 189.395 220.58 199.925] /A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4) >> >> endobj -954 0 obj << +875 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 404.373 180.969 414.56] +/Rect [113.91 173.767 180.969 183.954] /A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a5e46c726aadf91189ccb4f1ec3e4b52f) >> >> endobj -955 0 obj << +876 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 388.557 202.398 398.744] +/Rect [113.91 157.796 202.398 167.983] /A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a02f49b93eaadb6a903b87670849255a5) >> >> endobj -956 0 obj << +877 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 372.742 231.728 382.928] +/Rect [113.91 141.825 231.728 152.012] /A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a80b535c275f9f60c644d91263f0638a5) >> >> endobj -957 0 obj << +878 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 356.926 225.651 367.113] +/Rect [113.91 125.854 225.651 136.041] /A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a8a8be3fdebec2693c86e3e63f35ee228) >> >> endobj -958 0 obj << +879 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 341.11 214.582 351.297] +/Rect [113.91 109.883 214.582 120.07] /A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a730a1ba1041f8671a11ca824fcd0455d) >> >> endobj -959 0 obj << +880 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 325.295 253.855 335.481] +/Rect [113.91 93.912 253.855 104.099] /A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a2e2b4d3e563dc169c06d590d8c833243) >> >> endobj -960 0 obj << +887 0 obj << +/D [885 0 R /XYZ 89 770.89 null] +>> endobj +888 0 obj << +/D [885 0 R /XYZ 90 723.09 null] +>> endobj +884 0 obj << +/Font << /F22 400 0 R /F23 401 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +962 0 obj << +/Length 1257 +/Filter /FlateDecode +>> +stream +xÚÍX[s˘H~÷WđU±Ó®ű€ + SłHjwË™˛bb•bFqvöa˙űž¦Ű™ŔlRó"mŰśŰ÷ťK‹•'+7NÜşö)UäÔTâ™â`Ĺ2 2(Qâ©2R-D´65°š$“4›ŚóGMÇ*z»ţ|‘ŠU”ÎҵFlNń-›QCĄ–ö%ţÔňâÖ׍X!…ĂB3”ɲ5ú‚•)ěR0bŽü]śZ*:eđ\(ĂÖď-,ﯟ¤ hg?{e?!:r°ĄXö,*śp]ns×»ăî†^˙nĐó +Óv˛•QáĹoÂül^Éeđl1ó”ôAÔó˘*ńVsńĂN4Ž\Ť˘ĆÁ JÝ\ëÇ^ÔŃV˘°ĘŠqs
ŤŞö4†Ő?‚^|[Ą5×Gn8Ľ{řóĽhv‰ů·žĐŽď˝(ôŞä“nÂ"Bý ĽWł”azA|î‡?rďĽa•ô˘ńĺ€Ä^xV)ą ŃÜ°ôűn¤™†ú׸Ļ´¨—q čw^¬9Lu{|Gę)6j +4ŐzEńe“ćů<{_^č †š,Óś÷řťĐ=‹äĺ*ŰĚAŘVÚş‰°#—żÍ&ů|•mö$”»…‰t/R†¨Ą‹?Sj”´sÔ"˝˘ Ľ˘ę7™ăđfęe“ÁKš•#ŻÜĎ@ÓS0ŽTh1˝ľ7ţ©|Pn6×>Ń_9IM±á'áĆŚ/…Ú¦Mwg^žÝÂÂ'PsĄµuf©g®<a,V +endstream +endobj +961 0 obj << +/Type /Page +/Contents 962 0 R +/Resources 960 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 832 0 R +/Annots [ 881 0 R 882 0 R 883 0 R 923 0 R 924 0 R 925 0 R 926 0 R 927 0 R 928 0 R 929 0 R 930 0 R 931 0 R 932 0 R 933 0 R 934 0 R 935 0 R 936 0 R 937 0 R 938 0 R 939 0 R 940 0 R 941 0 R 942 0 R 943 0 R 944 0 R 945 0 R 946 0 R 947 0 R 948 0 R 949 0 R 950 0 R 966 0 R 951 0 R 952 0 R 953 0 R 954 0 R 955 0 R 956 0 R 957 0 R 967 0 R 958 0 R 959 0 R ] +>> endobj +881 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 309.479 238.363 319.666] +/Rect [113.91 727.536 238.363 737.723] /A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4aef811ce5aab93dcba6584109d266b579) >> >> endobj -961 0 obj << +882 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 293.663 242.796 303.85] +/Rect [113.91 711.176 242.796 721.363] /A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4ad2accfe182077bfe80ba43a3f22cf7bb) >> >> endobj -962 0 obj << +883 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.91 694.816 214.582 705.003] +/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4ab381330bdc59b0213ad3dedcb4f2f0f7) >> +>> endobj +923 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 277.847 233.302 288.034] +/Rect [113.91 678.456 233.302 688.643] /A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a443da990a60343083e72726a65f4509b) >> >> endobj -963 0 obj << +924 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 262.032 222.214 272.218] +/Rect [113.91 662.096 222.214 672.283] /A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4aab4d4c3cfcad7bd7bdebfd947fea8e75) >> >> endobj -964 0 obj << +925 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 246.216 217.342 256.403] +/Rect [113.91 645.736 217.342 655.923] /A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a955c106558ebb10a74a555a38b45ae1c) >> >> endobj -965 0 obj << +926 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 230.4 242.796 240.587] +/Rect [113.91 629.376 242.796 639.563] /A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a017e2a6349d3ae944338a6f0ba892947) >> >> endobj -966 0 obj << +927 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 214.585 249.631 224.771] +/Rect [113.91 613.016 249.631 623.203] /A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a39b30031d8438b4018173388aead5bdf) >> >> endobj -967 0 obj << +928 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 198.769 232.306 208.956] +/Rect [113.91 596.656 232.306 606.843] /A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a87c7912a645d479132465e6d8e694b36) >> >> endobj -968 0 obj << +929 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 182.953 222.632 193.14] +/Rect [113.91 580.296 222.632 590.483] /A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a3869e3bae5904258eff0b77d2ebed3b1) >> >> endobj -969 0 obj << +930 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 167.138 264.286 177.324] +/Rect [113.91 563.936 264.286 574.123] /A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a3923cb84146e101030271772fe33ea5a) >> >> endobj -970 0 obj << +931 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 151.322 248.286 161.509] +/Rect [113.91 547.576 248.286 557.763] /A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a0ee251ffa58317c7ea29364d344c4660) >> >> endobj -971 0 obj << +932 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 135.506 242.029 145.693] +/Rect [113.91 531.216 242.029 541.403] /A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4ae6283b321f75b769e9306c6482f2acd5) >> >> endobj -972 0 obj << +933 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 119.347 189.108 129.877] +/Rect [113.91 514.513 189.108 525.043] /A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4aaf0644b51fd01b31c73eb2ebc140a1a1) >> >> endobj -979 0 obj << -/D [977 0 R /XYZ 89 770.89 null] ->> endobj -976 0 obj << -/Font << /F22 424 0 R /F23 425 0 R /F44 980 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1039 0 obj << -/Length 1338 -/Filter /FlateDecode ->> -stream -xÚÍXIsâ8ľó+|´«‚F‹ĺ%7H†ž$dsJş(‹ŕ*chŰôňďçÉ’›ÍL&©ľÄŠŢö}zďIŘx3°qŰşµţ¸ˇÔđ‘ďPÇM
®C§Ä…ƳɨőuôĹ`ĚG„sŘTĚŢD±°Ú”cł»¬ć"É<Z$ri«7j}kX‰
Ră.r7&óÖóWl„0˙ĹŔůžńŁX57lĘŕOż[¸f!Čçś–¶Q0ŐĄÚŠU2‘jłBoąv±-‡lćmJ‘O|µń…R^ŮŁŚMß´ŐĂŰ–ńÜ曝Žecóş÷p=î
‡r<žŢÉ|ß‚I/™–"©¬‡_mű‚9Öó»űÍ?;Ý»ŢxŁ|Đí
kN{ËIę8Ż„çc&—×Ba#ߣĺšĺ¬SX¸E*Ő\Xm›ąć™[…˙ôFj$’I» A›:qFŚ¶‚E‰ş_„«XdŠZ‚* r4~^Ď‚$q®“ZKźlŰđŔZÇ.€łqhâhŔ‹hňýŤ@WL4SőÍgzBh˙!&Ú«ô -’!bäÜ`•ć4>ó»`RIŕúd¨L· -Ł…†AüţéŮÁeUď'ÓEý8:79ŢrYŁă-µíďbÝŞWŞZď9éŇň§<]Mňc±)‚4tV7!7¦cČńÝ -3:“o«(µ eňźjvŻ@?5\Ş4śW/>«Úűž¦“ô`ü$ňGixóťĘď7*rY#nÉ…»ĄüžĘńhůÔě;÷űú–ĄtëXřݢŕ{Ľďh!„şL4‰˛(y+o*`*S÷đf)shź‹üăzEÍ•Âă2iƆ·G8ÁÓ„Rb#NHy{8ÁNFą±Ię9ÍŹw@ű;C˙a×đú.zÝWŤĘ»Â]˙jܸ¨ü]íý!|¶KÎëăÎHňÄw‘GŞ-˙&))ť«Gz’Ż -ˇô—šxµ(6WQ˘VTßŕţ -Čm¸€p[żix "[e€ +ň ŠE¨_3 LŁeů–Q‹.p¶©§źşYŰ-ú§W·~my” -endstream -endobj -1038 0 obj << -/Type /Page -/Contents 1039 0 R -/Resources 1037 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 981 0 R -/Annots [ 973 0 R 974 0 R 975 0 R 1013 0 R 1014 0 R 1015 0 R 1016 0 R 1017 0 R 1018 0 R 1019 0 R 1020 0 R 1021 0 R 1022 0 R 1023 0 R 1024 0 R 1025 0 R 1026 0 R 1042 0 R 1027 0 R 1028 0 R 1029 0 R 1030 0 R 1031 0 R 1032 0 R 1033 0 R 1043 0 R 1034 0 R 1035 0 R 1036 0 R 1044 0 R ] ->> endobj -973 0 obj << +934 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 703.9 194.259 714.804] +/Rect [113.91 429.411 194.259 440.315] /A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483e) >> >> endobj -974 0 obj << +935 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [196.243 703.9 248.576 714.804] +/Rect [196.243 429.411 248.576 440.315] /A << /S /GoTo /D (aacenc__lib_8h_a04ddaeecd6dc422bb72175b9e0ab3fea) >> >> endobj -975 0 obj << +936 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [253.88 703.9 369.476 714.804] +/Rect [253.88 429.411 369.476 440.315] /A << /S /GoTo /D (aacenc__lib_8h_a079ac614039555edf1d131e5fb87573b) >> >> endobj -1013 0 obj << +937 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 652.74 194.259 663.644] +/Rect [113.91 377.762 194.259 388.666] /A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483e) >> >> endobj -1014 0 obj << +938 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [194.757 652.74 248.206 663.644] +/Rect [194.757 377.762 248.206 388.666] /A << /S /GoTo /D (aacenc__lib_8h_a2a5f6ec334fff553f0fd9e36d9408e94) >> >> endobj -1015 0 obj << +939 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [252.021 652.74 367.617 663.644] +/Rect [252.021 377.762 367.617 388.666] /A << /S /GoTo /D (aacenc__lib_8h_a079ac614039555edf1d131e5fb87573b) >> >> endobj -1016 0 obj << +940 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 613.909 194.259 624.439] +/Rect [113.91 338.442 194.259 348.973] /A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483e) >> >> endobj -1017 0 obj << +941 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [201.106 613.909 261.738 624.439] +/Rect [201.106 338.442 261.738 348.973] /A << /S /GoTo /D (aacenc__lib_8h_a6ccf4948de12c1cde8ca22a1216c5d3e) >> >> endobj -1018 0 obj << +942 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [301.786 613.909 417.382 624.439] +/Rect [301.786 338.442 417.382 348.973] /A << /S /GoTo /D (aacenc__lib_8h_a079ac614039555edf1d131e5fb87573b) >> >> endobj -1019 0 obj << +943 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 601.58 196.301 612.484] +/Rect [113.91 326.113 196.301 337.017] /A << /S /GoTo /D (structAACENC__BufDesc) >> >> endobj -1020 0 obj << +944 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [273.953 601.58 356.344 612.484] +/Rect [273.953 326.113 356.344 337.017] /A << /S /GoTo /D (structAACENC__BufDesc) >> >> endobj -1021 0 obj << +945 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [438.978 601.58 513.996 612.484] +/Rect [438.978 326.113 513.996 337.017] /A << /S /GoTo /D (structAACENC__InArgs) >> >> endobj -1022 0 obj << +946 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [148.042 589.625 229.705 600.529] +/Rect [148.042 314.158 229.705 325.062] /A << /S /GoTo /D (structAACENC__OutArgs) >> >> endobj -1023 0 obj << +947 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 550.793 194.259 561.324] +/Rect [113.91 274.838 194.259 285.368] /A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483e) >> >> endobj -1024 0 obj << +948 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [198.337 550.793 245.689 561.324] +/Rect [198.337 274.838 245.689 285.368] /A << /S /GoTo /D (aacenc__lib_8h_a9b64b2026a1475eb5c7a67fc1364ed94) >> >> endobj -1025 0 obj << +949 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [280.194 550.793 395.79 561.324] +/Rect [280.194 274.838 395.79 285.368] /A << /S /GoTo /D (aacenc__lib_8h_a079ac614039555edf1d131e5fb87573b) >> >> endobj -1026 0 obj << +950 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [463.147 550.793 513.996 561.324] +/Rect [463.147 274.838 513.996 285.368] /A << /S /GoTo /D (structAACENC__InfoStruct) >> >> endobj -1042 0 obj << +966 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 538.465 156.301 549.369] +/Rect [113.91 262.509 156.301 273.413] /A << /S /GoTo /D (structAACENC__InfoStruct) >> >> endobj -1027 0 obj << +951 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 499.633 194.259 510.164] +/Rect [113.91 223.189 194.259 233.719] /A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483e) >> >> endobj -1028 0 obj << +952 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [195.234 499.633 286.711 510.164] +/Rect [195.234 223.189 286.711 233.719] /A << /S /GoTo /D (aacenc__lib_8h_a5743dca1ec3746f9c5ecb839a132ba7e) >> >> endobj -1029 0 obj << +953 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [315.004 499.633 430.6 510.164] +/Rect [315.004 223.189 430.6 233.719] /A << /S /GoTo /D (aacenc__lib_8h_a079ac614039555edf1d131e5fb87573b) >> >> endobj -1030 0 obj << +954 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 487.305 195.952 498.209] +/Rect [113.91 210.86 195.952 221.764] /A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4) >> >> endobj -1031 0 obj << +955 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [140.843 448.473 233.973 459.004] +/Rect [140.843 171.54 233.973 182.07] /A << /S /GoTo /D (aacenc__lib_8h_aac28c7c3724b8bc87558bc35a22bf23c) >> >> endobj -1032 0 obj << +956 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [262.614 448.473 378.21 459.004] +/Rect [262.614 171.54 378.21 182.07] /A << /S /GoTo /D (aacenc__lib_8h_a079ac614039555edf1d131e5fb87573b) >> >> endobj -1033 0 obj << +957 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [463.147 448.473 513.996 459.004] +/Rect [463.147 171.54 513.996 182.07] /A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4) >> >> endobj -1043 0 obj << +967 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 436.145 150.413 447.048] +/Rect [113.91 159.211 150.413 170.115] /A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4) >> >> endobj -1034 0 obj << +958 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [113.91 397.313 194.259 407.844] +/Rect [113.91 119.891 194.259 130.422] /A << /S /GoTo /D (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483e) >> >> endobj -1035 0 obj << +959 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [194.757 397.313 270.333 407.844] +/Rect [194.757 119.891 270.333 130.422] /A << /S /GoTo /D (aacenc__lib_8h_a28cbc417258c73ad55d613526df8fad5) >> >> endobj -1036 0 obj << +963 0 obj << +/D [961 0 R /XYZ 89 770.89 null] +>> endobj +965 0 obj << +/D [961 0 R /XYZ 90 448.781 null] +>> endobj +960 0 obj << +/Font << /F22 400 0 R /F23 401 0 R /F44 964 0 R /F14 726 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +981 0 obj << +/Length 1455 +/Filter /FlateDecode +>> +stream +xÚXŮrŁF}×WđUQ‡¦YçM–°ŁYšHř!™L©°hIT!PXĆ™ůúÜ^@€elgňbӷϹ˹Ťtĺ čĘÝč&ýzkŠ‡<Ű°•`ŻxşâŘYV‚Hů˘®ö5ř¨â!lYđź˝ŤŞŤ
KWgŮ®:Ń´Ë8KŮÖ‘ŚţaŘ©+›łäKŮťF_ľęJóĎUžř®“bţ'ĘfôűHďAĂy–eÔŘ€ę…0ÂÚë:ŕ e "‰Š»<>×ŔiqÔ•±a"bz’Ěě“xk2ŃL]ťŠźî˛ćbÄŹy8-iľ×°®†;é…#
›˝éş‘P$Ďí€ A®E.ř
‰?ĐSý~¦ÝżŕŘ^ z$¸ĆeŰRQćŐ®l(Z–:ő—ÓŐĚ_łŘl™Ĺ¶‡lnČ+‡;Č„ Č=żM–ł…ż˝fşăö1v¤{VxÇé´íôcFŻ8ŇĽ'’şź‚Űrá5n¦öěv+iÜJÁvߏۛjż§ů<Ł1‹=Ŕ5ĺŇ“i6xÔ]öša©űz.’Ůśĺ…ۇ¤ŤMĎSc|mź s*Ş‚ {zŠËcśľíXVآ˘ó,íőÝHůÂ7J6Ěc®ŔVK°±‚üđˇ{JŰeő ˘öáÔ™či¬#ĎłÁĄ:ÂXć@÷,˙Đyőb´[&(@é"˝®ĆůrAŐŐ‡Ů|µť1Ś<Ćű3éŁiÇÖµi +fREqVëÄą’e×s/xë—––$4dëß4l©µ‚Í—Áöóô^Vpx:'´čű¤Ch,`Ś±…°ç\(-§óĹbaWýă]¬°n ś[óJwq’4…e(žJÉöQ==Ň(Şi +ĺ +™%QŃsŻfUŮ$ßPËcžˇ±ÝĚ˙ô7C8yÄĽ +“¸ę.˝ŤÓBŚŠř収šíĹ
wGńîv´«4.AŮnKec“q +a:Őň6ę…”˛7E‚ÂP“Wť”—¦±ĺ!KwşµĎĂ„]éc¸řŘĂäŰnwc¨+LőâvÁÇw›w4„g]9/Ď’ćnA®˛4k)€sî"$%ÜŐ2¸Î‹ĄňH_Vr¶µĄäÓŐ2XłŃj±Ýš2ŻaŚŐŔďI5·|Á…´Ą8Z–ł˘ůťfą$Ŕě–5äNP
5|ĚŞ˛ąßS8Ë4żĂVc
«-qÄ?¤6}Î3–DdĘĽdłĹVäČÄĚ›/ĺlĆôXrţ”Çe˝|¤ŇNBW +ą°Ďł“¤ěíŘ6±ňt¤O×n·”ÉĹsضŢŘáÎçŕźí€F“„¶Lßůrl—«Ą?Ü"ld6Â:“BźfRwĘ<>ę4Ž;áyp»5ęcôĽťß
뾍ŕm˝®yľű0I®Ű)‹Ş„Mĺ±ËɡĘß‚Yś6y#źI˙°žbLí6—Š5-hůfÜ •ßŻŢ<¬çyŐç!N$¬'ËÍçŐZ#ěz=ÄŘ^ŢKA(ó0-ÎY^6_YâA*K&Ę?‰A#2ŻÜ„ęS_â°öáŇ +endstream +endobj +980 0 obj << +/Type /Page +/Contents 981 0 R +/Resources 979 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 832 0 R +/Annots [ 977 0 R 983 0 R 978 0 R ] +>> endobj +977 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [463.147 144.977 513.996 155.881] +/Rect [463.147 537.367 513.996 548.271] /A << /S /GoTo /D (structAACENC__BufDesc_a2c09424d3a61cdbdb80c8d9ebb42ce71) >> >> endobj -1044 0 obj << +983 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [89.004 135.079 195.682 143.926] +/Rect [89.004 527.469 195.682 536.316] /A << /S /GoTo /D (structAACENC__BufDesc_a2c09424d3a61cdbdb80c8d9ebb42ce71) >> >> endobj -1040 0 obj << -/D [1038 0 R /XYZ 89 770.89 null] +978 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [179.07 334.18 307.189 345.084] +/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4ae6283b321f75b769e9306c6482f2acd5) >> >> endobj -1041 0 obj << -/D [1038 0 R /XYZ 90 723.025 null] +982 0 obj << +/D [980 0 R /XYZ 89 770.89 null] +>> endobj +326 0 obj << +/D [980 0 R /XYZ 90 739.935 null] +>> endobj +330 0 obj << +/D [980 0 R /XYZ 90 689.23 null] +>> endobj +841 0 obj << +/D [980 0 R /XYZ 90 662.618 null] >> endobj 334 0 obj << -/D [1038 0 R /XYZ 90 359.05 null] +/D [980 0 R /XYZ 90 662.618 null] >> endobj 338 0 obj << -/D [1038 0 R /XYZ 90 297.884 null] +/D [980 0 R /XYZ 90 608.736 null] >> endobj -923 0 obj << -/D [1038 0 R /XYZ 90 271.193 null] +733 0 obj << +/D [980 0 R /XYZ 90 580.067 null] >> endobj 342 0 obj << -/D [1038 0 R /XYZ 90 271.193 null] +/D [980 0 R /XYZ 90 580.067 null] +>> endobj +902 0 obj << +/D [980 0 R /XYZ 107.713 490.398 null] +>> endobj +903 0 obj << +/D [980 0 R /XYZ 107.713 475.201 null] +>> endobj +614 0 obj << +/D [980 0 R /XYZ 107.713 460.003 null] +>> endobj +904 0 obj << +/D [980 0 R /XYZ 107.713 444.805 null] +>> endobj +905 0 obj << +/D [980 0 R /XYZ 107.713 429.607 null] +>> endobj +912 0 obj << +/D [980 0 R /XYZ 90 409.01 null] >> endobj 346 0 obj << -/D [1038 0 R /XYZ 90 216.503 null] +/D [980 0 R /XYZ 90 394.774 null] >> endobj -784 0 obj << -/D [1038 0 R /XYZ 90 187.756 null] +913 0 obj << +/D [980 0 R /XYZ 107.713 273.198 null] +>> endobj +914 0 obj << +/D [980 0 R /XYZ 107.713 258.001 null] +>> endobj +915 0 obj << +/D [980 0 R /XYZ 107.713 242.803 null] +>> endobj +916 0 obj << +/D [980 0 R /XYZ 107.713 227.605 null] +>> endobj +917 0 obj << +/D [980 0 R /XYZ 107.713 212.407 null] +>> endobj +918 0 obj << +/D [980 0 R /XYZ 107.713 197.21 null] +>> endobj +889 0 obj << +/D [980 0 R /XYZ 90 189.509 null] >> endobj 350 0 obj << -/D [1038 0 R /XYZ 90 187.756 null] +/D [980 0 R /XYZ 90 175.273 null] >> endobj -982 0 obj << -/D [1038 0 R /XYZ 107.713 96.348 null] +890 0 obj << +/D [980 0 R /XYZ 107.713 96.348 null] >> endobj -1037 0 obj << -/Font << /F22 424 0 R /F23 425 0 R /F14 778 0 R /F44 980 0 R /F46 1045 0 R >> +979 0 obj << +/Font << /F22 400 0 R /F23 401 0 R /F14 726 0 R /F46 984 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1050 0 obj << -/Length 1551 +992 0 obj << +/Length 1605 /Filter /FlateDecode >> stream -xÚX]sŁ6}÷Żŕ¬ - 0ôÍIHÖ[ÇN1éL›îx‘mf0¸|lÚýő˝ú -˙Sm1ř}€Z|ŚÚrŽP›&F[Ú@ßHč“Ůr<»ťL§‡őçňÎ -íĐÉ®3†Í¶Cs„<L[;} ůÔ„ĺÂźźz
1 <;Ť!VŐ{ đÔ«Ş.ňu^›dŮܱĆVnőřj3 _…aţ.o&á"üńă÷`dÚ^ý¦^óÉśfĎ6OăňÄ˝˛™×Őľ®®F¶é8ťŁX^.&ů‹>ś#yÔú&uőUžUQ’•˛U&ßxéůZv±hµ•OŃjĹJőbť%2†;z¸MTg’AvQ•ä™\ŁČź) -MLľ]˝ëCn€6´=dăŹňl[^ŃÂ-śt˘Cę!‡šÚĐrmŃVEÄ -š ëđ#ˇ[?=˛]ZbäyŽŕczr˘<„ČWyńkgę™SOLD`gaű@BGŃw2›„ËŮ|ć÷§Y°Ţ)ˇĎrĄ;U‘l6
Ť“Nx.ĺ -I/ÉĆÓiź5Ţ\c÷śŠ“ ;îQ‘Éq¤}YĐGćAO¤—2 +ŠĽM†1+ŻFŠlÇüQa|ďăůo}Ţu€xiĽ;Ëß°Ťö{–±×5@ľqzHě$cýáW‹ź?™.ČËtr·ü4žÝMűµęę¶âý)Ęâ泏ʲ©ß›ę}]gMEÁĂĐŞĐ?BQŮP›‡đ+ç3p*ľtH%€sd~ôçęÚÂYd5,:oÂŐÖ Źl×j ÍWŃţZ€†{ŰErÉsźg‹ç§Fý»ĺ“đ0†»ĘIń0Âfëü'®GÔqŤ¸FH—&i5ĘČjĺkHrE -!uĚQó¶›OB±% -¦$ľěWąlŻŽ]t(śÓl +xÚŐX[oâ8~çWä1‘ŻăÜçŤBJ™-—…tĄŃĚĄÁ”¬B†0—ýő{Ű!P´íh±cţÎ=XyR°ŇoÝßn Q<äŮÄV‚Ąâaűud] Ę'ŐAşÖ&VĂ0˘i4OâGÍÄ*ZńŮŰ8ˇüiJ—4×tW…UlĘ5ĄOű|hůAëď–'bE/O°ä–[źľ`eóŚĎUľ•«ÖŠIřO”YëŹhqµi×Pë:F›ŠC`Î!z§ŁŮ–ÚőGÝů`ô§ćZjç~Đ›ßuF˝{żÄ%F]šá!õáU)ç.Lň–›p»Ąţ\düąKŁ"ÎR>ŠÂ$áOß4hŰňAś2Úľj@JÄttţÁmÚ@[·Mśg×úĂń”qýqîO§L0/d"Ű5ĺ…†tťĺ?„Z“$‹Â=üe ´z"yâĂhö0™ +é&ĎŘ=ľĆ‹ËĽr±çA‚+•®ë I— +eĘĚiDŘ;*6ĘDgb°–đ<§*9LcĚHŰą @iU 0Đ<é1sîhžĄňńĽ7íÎ'eŇßx–?‚Ž•61‘azÇ6Ő«lŞ›79¨¦˛ˇIžńmŹÉ=ĽFž—!†df·†°[důűťgÔCtD€a‹śČúÜwz,ă•\_b—ŤGÍ5Ťm [RcŁ,˝”-ņó5Hŕ~8ăă_0í5ˇ#şOĺčPU +ťo(ľÂüBŇ”Ű_Ťő~Đżš«pĂ{0‰źVĹĄşď}şáĂlĐ}•ŞĂ¨bćnG/âRě=Ú+ČtĘŃ=Ä«Řtk…§ý2|ł‰ďwď±9&r˝ŠľŮ†Ňhu:vyDRGÄ.·»¬¦Ř5Ńł¬„/§Z¨Ě˛ŢҢŘgYóđĤčcr)[*nĚÚŻüIôaÓ~KůÔ6lŹµv>>źŃ˘Ş¸?cĂO? «ÜâÖz&€uBl6ŞŠ`úf<W…”T®Ř˝ +Ŕš Ă1ăht4dXU–îě±hYłÇż t·ý±TĐ6 +«:«›PÖBSşIâzkÍlůÎo‹sUż<ńzÓŰŁcߣ‡Á˝s=,čᩆީĐĂü!zć ĺXSëČóXÓŐOĎŔ'hV:ś‹LŰ=tşĂ»s>ľÎA©‰`/ŚNuŇ‘,}……îŞĎ0Yš<ÓÉ–»ŮÉ{`ıÝJÜ×čŔ¸Ň‚Ú=š„o°T)Ű´IuAěýAl৫0Ťltâضe8ę,.?˱%ŢrńČ8g˙i&źö{öj ˇüXą"űú÷=¸ł©óŘ`Páú1NĄúŕ…Đ<ńnÖ,(ÓrJďŘŘ€ôĆľŕ,ŇUŃć€%Ć-Ő;ˇ:›JŘ&Á‹“¬§B?óśúšmV!ýy÷ô"›ĐącJŁ ˙U0–î-çţęp¦[6Ŕ'žł‡Ď*· +>1kđáď|X ŕĂŰ|đáé>űd(ßÄłHHůżłă/î.4HĐŻżđűżŰ㎠endstream endobj -1049 0 obj << +991 0 obj << /Type /Page -/Contents 1050 0 R -/Resources 1048 0 R +/Contents 992 0 R +/Resources 990 0 R /MediaBox [0 0 595.276 841.89] -/Parent 981 0 R -/Annots [ 1047 0 R ] +/Parent 832 0 R +/Annots [ 985 0 R 986 0 R 987 0 R ] >> endobj -1047 0 obj << +985 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [179.07 571.756 307.189 582.66] -/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4ae6283b321f75b769e9306c6482f2acd5) >> ->> endobj -1051 0 obj << -/D [1049 0 R /XYZ 89 770.89 null] ->> endobj -983 0 obj << -/D [1049 0 R /XYZ 107.713 729.972 null] ->> endobj -646 0 obj << -/D [1049 0 R /XYZ 107.713 712.069 null] +/Rect [108.167 306.217 206.279 317.121] +/A << /S /GoTo /D (aacenc__lib_8h_a5743dca1ec3746f9c5ecb839a132ba7e) >> >> endobj -984 0 obj << -/D [1049 0 R /XYZ 107.713 694.167 null] +986 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [329.268 306.217 429.033 317.121] +/A << /S /GoTo /D (aacenc__lib_8h_aac28c7c3724b8bc87558bc35a22bf23c) >> >> endobj -985 0 obj << -/D [1049 0 R /XYZ 107.713 676.264 null] +987 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [413.324 158.478 513.996 169.382] +/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a730a1ba1041f8671a11ca824fcd0455d) >> >> endobj -992 0 obj << -/D [1049 0 R /XYZ 90 652.219 null] +993 0 obj << +/D [991 0 R /XYZ 89 770.89 null] >> endobj -354 0 obj << -/D [1049 0 R /XYZ 90 633.234 null] +891 0 obj << +/D [991 0 R /XYZ 107.713 729.972 null] >> endobj -993 0 obj << -/D [1049 0 R /XYZ 107.713 507.328 null] +892 0 obj << +/D [991 0 R /XYZ 107.713 714.345 null] >> endobj -994 0 obj << -/D [1049 0 R /XYZ 107.713 489.425 null] +893 0 obj << +/D [991 0 R /XYZ 107.713 698.718 null] >> endobj -995 0 obj << -/D [1049 0 R /XYZ 107.713 471.522 null] +894 0 obj << +/D [991 0 R /XYZ 107.713 683.091 null] >> endobj -996 0 obj << -/D [1049 0 R /XYZ 107.713 453.62 null] +895 0 obj << +/D [991 0 R /XYZ 107.713 667.464 null] >> endobj -997 0 obj << -/D [1049 0 R /XYZ 107.713 435.717 null] +896 0 obj << +/D [991 0 R /XYZ 107.713 651.838 null] >> endobj -998 0 obj << -/D [1049 0 R /XYZ 107.713 417.814 null] +897 0 obj << +/D [991 0 R /XYZ 107.713 636.211 null] >> endobj -924 0 obj << -/D [1049 0 R /XYZ 90 406.666 null] +898 0 obj << +/D [991 0 R /XYZ 107.713 620.584 null] >> endobj -358 0 obj << -/D [1049 0 R /XYZ 90 387.681 null] +899 0 obj << +/D [991 0 R /XYZ 107.713 604.957 null] >> endobj -925 0 obj << -/D [1049 0 R /XYZ 107.713 304.425 null] +900 0 obj << +/D [991 0 R /XYZ 107.713 589.33 null] >> endobj -926 0 obj << -/D [1049 0 R /XYZ 107.713 286.523 null] +901 0 obj << +/D [991 0 R /XYZ 107.713 573.703 null] >> endobj -927 0 obj << -/D [1049 0 R /XYZ 107.713 268.62 null] +615 0 obj << +/D [991 0 R /XYZ 90 565.144 null] >> endobj -928 0 obj << -/D [1049 0 R /XYZ 107.713 250.717 null] +354 0 obj << +/D [991 0 R /XYZ 90 550.715 null] >> endobj -929 0 obj << -/D [1049 0 R /XYZ 107.713 232.815 null] +906 0 obj << +/D [991 0 R /XYZ 107.713 468.875 null] >> endobj -930 0 obj << -/D [1049 0 R /XYZ 107.713 214.912 null] +907 0 obj << +/D [991 0 R /XYZ 107.713 453.248 null] >> endobj -931 0 obj << -/D [1049 0 R /XYZ 107.713 197.009 null] +908 0 obj << +/D [991 0 R /XYZ 107.713 437.621 null] >> endobj -932 0 obj << -/D [1049 0 R /XYZ 107.713 179.107 null] +909 0 obj << +/D [991 0 R /XYZ 107.713 421.994 null] >> endobj -933 0 obj << -/D [1049 0 R /XYZ 107.713 161.204 null] +910 0 obj << +/D [991 0 R /XYZ 107.713 406.367 null] >> endobj -934 0 obj << -/D [1049 0 R /XYZ 107.713 143.301 null] +911 0 obj << +/D [991 0 R /XYZ 107.713 390.741 null] >> endobj -935 0 obj << -/D [1049 0 R /XYZ 107.713 125.399 null] +619 0 obj << +/D [991 0 R /XYZ 90 381.24 null] >> endobj -936 0 obj << -/D [1049 0 R /XYZ 107.713 107.496 null] +358 0 obj << +/D [991 0 R /XYZ 90 366.811 null] >> endobj -647 0 obj << -/D [1049 0 R /XYZ 90 96.348 null] +919 0 obj << +/D [991 0 R /XYZ 107.713 256.333 null] >> endobj -1048 0 obj << -/Font << /F22 424 0 R /F46 1045 0 R /F23 425 0 R >> +990 0 obj << +/Font << /F22 400 0 R /F46 984 0 R /F23 401 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1060 0 obj << -/Length 1858 +998 0 obj << +/Length 2435 /Filter /FlateDecode >> stream -xÚŐYYoŰ:~÷ŻĐŁÔ,QKŢ’XMÓ‰“Lěb0h‹@‘čDS[ňHr{óďďá˘Ő±łĚC"’"żłź#cëŢÂÖŮčd1úř‰R+@K]k±´ly.Aśk‘XßlćŚ,ľXŚp‡Ôę§t%Ćʱ=ÍăíZdUTĄy&·ŽÂĹčż#;±E9î!Źq+^ŹľýŔVë_,ŚXŕ[żŐ®µĺPĎ•5ýs„BŁ0ő¨á#‚rĆ‚1¶E¶]kHÇÇcÎíÓđňôv.ƬLÇŚŰÇă€Űz~;˝9˝˝ľ3l_}:ż%p¸ŤunĂÖ„:Č!L_6Ud8ŽęŃiľŢ˘,%çjáşČżcLW˘DJ5/F&ôň‚@Óľ(˘*/ŽzG[ŽŰ!A ˘Ö„řs¸v;\€k*ąć’k9W\_^]†Cp]ľ‰ËŹM_ć™2ÓC2©Ŕ -í„é#×wž€ř"ięĂo’ćü:O?Äć9ČńÍ7BÄČÚÂ<kâ`äRżĽřˇŕu=öPâńěůč§Gš„Čâ<…ŃĄ¨Ş4»×“MTDkQ‰BÇ'I…x€‰k*_Ka8–ˇ»¸71üćld}›07°Ł(5ńŰą¨®Ç„Ű’âwĚ1ü‘ž¸Ôß^nłXĄE ĘÇj5Î3(ď·…ř -đ‚\wŕ˘ß)ĺC-rđz¤Żž]‡g§ń–Öî/´ÚÜ5 -XÇ_iő(Ĺ1¸[*ŰA‡oĺďąUýN«=‚WEmP'dőčFlVi¬+(µ Ťůs81÷Hł~xHôNТkoŃäEď=6ô0ę ÷ô°ŢG/=T˝=ŤsŠŞHÇÄŽőňśBäĘă|ä¸~ßëúĽkyü˘ZJ‹‡Ô¸aE:˛‹#3¸3 -ĹČ9ĎV;:)5c°›1ő¨ő€ę˝ˇÝÖ¸_˘öBšLĹ*z‡Ą2©lÇĄÍEŚşíErfQKiČŮ×N8óěy -{ôo…J™Ëg–ÂOű˝|µ„XľGąáĹxvŽ
®ďҬVĽ0šŃüäFďI„Ôr&’rÎ żEwŞýh7[›´Ä´JÍpňîq.‘‡ŚtdśB·ł«i¸+úü&¦KćßaD;fmôO3Âč{îý_‡3Â]€OŻ…/K·>u:đá±6řđ¶Ö
|őáĂĆćM/žĹ†Ę˙{0–ÍLÖžŞ'ăíÔ'ç‹],ě"1ěÖőÄběŕJĘšsÚ¨rr—‚*YWJ<#ů˘u65—ײ7ŇčQO•r8gşZ‹âĘlSBŮăüYş{A_UťX y$„ -°…¤ShíŹaŇ·›M^TµY˛ĺđr]Ąš¦ U”®Ęgú» -űÓ6ýôyÖSoY}0°zŞŇz®iş»ťëµĎšŔąÚ+~É! -C˝\/ď(|“®ků+/VrÚŹ«ńňMklÚ]Ô$NV®SőéňQ`7ĚŹg×áK2!âÜ´Śřu¦’ĂD}[•Ł2‚Ü]f&CpmX'µKżRĎ]xŹŚňű +xÚ]wÚ¸ň=ż‚GsNp-a÷- $Mošt ˝={Ú=9ÂÁ·ţ ¶i–ýőwF#c Íľ i4ÍŚćSX˝ÇžŐ»:9źžĽ»´í^h†ľí÷¦ó^hő†>3=›ő¦qď›áXýż¦{ŽšĚóŕ# ˝LRŃŘžeŚŠh•‰ĽćuRäz2žžü<a€iő$ç
͡ăő˘ěäŰ_V/řÇže:aĐ{’XYϵÓŢýÉ'–bÍjłčú-łLŰr{C`C›8:;ëűžq1ľ˝x8żžNÎúžgLÇ’!M $uÚ’ş¦cůZ˘i?°Ś˘ćiŕy¶!ň¨EI‹YR—ĽfŔl64¦‹¤˘Ť%/y&jŤ§ÁĎc^ĺ—Ž+µź*Źj…ö”ÔĹ ŞŞ|T:›\ťôC׆aoŔ‚޵Ś®Ő–‘1B~şm +¨ć6 +« 4V•ŘÓ‚GQQĆIţKfÔĹóŽčĎꮑJěď–gĹbŢSâ«´†%Łcľ"p4=DĚ‹\ZZ/0]?ŘöŤ›Ń»ńÍoÉ2äť]ß=Üť_L¦~źŇ^˝@‘,†fNĽ^5ă? °Lą$UŔŻÇů*Mécž¦^ńÚ4nˇ¶D%Ę_}đ“9¶˛nńyÜnô[Ő§´ä5Ť7Dv0)_hŻ4´%…QNą}<ąlE#IµTGüę3ĎĄ˘^e K'Z´~3´‚Ă6Ľ§ ő/ťXęéyľ'_ňxS¬ÍxĄ('Ż˛¤ŞŔäŹÎN¸?űôůfüš„Ŕ€‚ç:śâ¤@á}ËUMSěśfĎ–)ą¬T‚đ@·cť;$ĹľŠVóBNóaCFş}ĚaŰ&#ĄRs`Y–2H¶§çvîoć¶
ľĄçîî´đ]—mć-ú~?ěf"ý7ÂBÓµ‡Ű٦}#瓇ă±ĺ™!&ę.6qWĽmÜŁ÷Ú\!®ŠĄ€źĽN×´'#,ŚĘ;#Z•Č ¨n§wł˙‰¨&™ţ×KE}ăr*ľé†Ţöµ´ĽŃ$ÍPa@†ÝmGlżq®Ů÷hŘëW¬ +ň~ b—\EŚsY-ál"Ŕ/"™gď4-÷8ĂaG–W“łŰ/7㇛ńíŐôĂAw=Hđ-/‹Mé©UŻ˛)ĺĹŽŃĚŃÎhšŠü +ĘbMŃ-ŔŚ}“
ť×Őf\}o#ص–ßľ'ŹŮĎŃog•×ť5<|8uÖÝ©hKاĽW~dFşřpv{;ľy1:Đć™6{™$Ŕż˙FsM$$„řĆó\¤´ŞU׆jµ'ô¬Ď ¶QßfĽŽ„!ű ĚWŮ, +Q5ënÇ> +±–NŚRCtXő†Î
†ĘŔµ[:ΩŁŤďÓçńŐÖQ´@ąTxtźˇ2U%”k(ŤSÖŮşăËѤ;™‹ăNď&ŁńäđĄBY˝«Ą«ÁF-§¦cGR¨ŔE)ë)\´™ŘńlČ›ŚyŻn(vű8DB5|Źj„Ł‰Ąń5NÔxŻ÷rs9¦üń\fyS¨˙Ú‡JŇ7ëżc}†eëđ 8ăő…í +y±mWěÝdylý +Ő’Ş^Żď^,™śvÉT—EŠ…'ř6ŹęëÎ_řŁzW„ËÖĆŞŇśFL@8Ú¤™îÄ#źŇë.]5yV§jŠUcc!ŢČ6f˛q¶ˇ†Č´ +•4…›”>ďŘŞÄŹ‰"Óµn>•5·"ňsĹÓ¤VĄ„/űŁTŃŰ‘±nÚÓŰĺBĨoŁ-¦sÇ
ĺ{ Áę>ŕ,†SŞ»ĄgwKĎî>=ň©¦'hÖâ„Ć-šň¤b9C+ĘD|`˙Dж•~›µ›€+–Î+‚¨O•’ŮśPt¤ +>Oņ€rDíئ”TŠ‡Íó‚ń†÷0ŻŞ¤Á¦´ÖIäĂx 6±·d']¤ěXD»’îD´Ýş˙÷«ç¦JÚXĎGo´pdHÚ-rĎ.§ăÉ9žóerűBľłˇĘő†Í++uH!Űę`5Ń +Wä¨!Ł'śČ‚Ł˝ĂçđíźVe®©ĚŻˇEÄňÇžnQ›·5ßtśí§µ6)Gµl8rrjČ #¦4/ž®+Ť6[ÓXs`‘ŔčgécQ‚?g´ű´H°Ř’ôó¨Ľę{ĺˡ.ÖÄ&y€äŻVg§UńĽ©”âç*)Ąq†ˇ±,‹HTą1ě.ŐŰ•Ż®×5á&•¦Y†Ťµ"‚
"n@Ĺ/Ă _+äNvŘ-ôk›¦—̉ŹăDŢňÍMdřPľG0‰j•-Ő;ëĐW=nÉyäö·Ňć`Ě‹š0¸ú®, 1ĚLzůĽžÓ¦ľ™>}ř§s<°<ŘÇpAoj¬Ă +gJË8+ZM
ĂŇxĄ+ĚM +» q&ö !6÷®xófĎű endstream endobj -1059 0 obj << +997 0 obj << /Type /Page -/Contents 1060 0 R -/Resources 1058 0 R +/Contents 998 0 R +/Resources 996 0 R /MediaBox [0 0 595.276 841.89] -/Parent 981 0 R -/Annots [ 1052 0 R 1053 0 R 1054 0 R 1055 0 R 1056 0 R 1057 0 R ] ->> endobj -1052 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [108.167 497.475 206.279 508.379] -/A << /S /GoTo /D (aacenc__lib_8h_a5743dca1ec3746f9c5ecb839a132ba7e) >> ->> endobj -1053 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [329.268 497.475 429.033 508.379] -/A << /S /GoTo /D (aacenc__lib_8h_aac28c7c3724b8bc87558bc35a22bf23c) >> +/Parent 832 0 R +/Annots [ 988 0 R 989 0 R 994 0 R 995 0 R ] >> endobj -1054 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [413.324 347.6 513.996 358.504] -/A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a730a1ba1041f8671a11ca824fcd0455d) >> ->> endobj -1055 0 obj << +988 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [128.635 252.507 246.453 262.435] +/Rect [128.635 715.84 246.453 725.768] /A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a80b535c275f9f60c644d91263f0638a5) >> >> endobj -1056 0 obj << +989 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [279.597 235.448 356.029 246.352] +/Rect [279.597 699.003 356.029 709.907] /A << /S /GoTo /D (LIBUSE_suppBitrates) >> >> endobj -1057 0 obj << +994 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [331.363 189.264 419.851 200.168] +/Rect [331.363 653.375 419.851 664.279] /A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a02f49b93eaadb6a903b87670849255a5) >> >> endobj -1061 0 obj << -/D [1059 0 R /XYZ 89 770.89 null] ->> endobj -362 0 obj << -/D [1059 0 R /XYZ 90 739.935 null] ->> endobj -986 0 obj << -/D [1059 0 R /XYZ 107.713 663.707 null] ->> endobj -987 0 obj << -/D [1059 0 R /XYZ 107.713 647.625 null] +995 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [370.764 123.167 416.483 134.071] +/A << /S /GoTo /D (ENCODERBEHAVIOUR_BEHAVIOUR_BANDWIDTH) >> >> endobj -988 0 obj << -/D [1059 0 R /XYZ 107.713 631.542 null] +999 0 obj << +/D [997 0 R /XYZ 89 770.89 null] >> endobj -989 0 obj << -/D [1059 0 R /XYZ 107.713 615.459 null] +636 0 obj << +/D [997 0 R /XYZ 107.713 729.972 null] >> endobj -990 0 obj << -/D [1059 0 R /XYZ 107.713 599.376 null] +920 0 obj << +/D [997 0 R /XYZ 107.713 684.344 null] >> endobj -991 0 obj << -/D [1059 0 R /XYZ 107.713 583.294 null] +921 0 obj << +/D [997 0 R /XYZ 107.713 600.897 null] >> endobj -651 0 obj << -/D [1059 0 R /XYZ 90 573.024 null] +640 0 obj << +/D [997 0 R /XYZ 107.713 573.081 null] >> endobj -366 0 obj << -/D [1059 0 R /XYZ 90 558.133 null] +922 0 obj << +/D [997 0 R /XYZ 107.713 499.638 null] >> endobj -999 0 obj << -/D [1059 0 R /XYZ 107.713 446.822 null] +637 0 obj << +/D [997 0 R /XYZ 107.713 438.149 null] >> endobj -665 0 obj << -/D [1059 0 R /XYZ 107.713 266.639 null] +648 0 obj << +/D [997 0 R /XYZ 107.713 392.52 null] >> endobj -1000 0 obj << -/D [1059 0 R /XYZ 107.713 220.455 null] +641 0 obj << +/D [997 0 R /XYZ 107.713 344.939 null] >> endobj -1001 0 obj << -/D [1059 0 R /XYZ 107.713 136.341 null] +639 0 obj << +/D [997 0 R /XYZ 107.713 249.538 null] >> endobj -1002 0 obj << -/D [1059 0 R /XYZ 107.713 108.303 null] +676 0 obj << +/D [997 0 R /XYZ 107.713 142.181 null] >> endobj -1058 0 obj << -/Font << /F22 424 0 R /F23 425 0 R /F46 1045 0 R >> +996 0 obj << +/Font << /F22 400 0 R /F46 984 0 R /F23 401 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1065 0 obj << -/Length 2099 +1002 0 obj << +/Length 2168 /Filter /FlateDecode >> stream -xÚWsâHúÝżBŹRŐ w+¦j0ÁöžÓs{W3[”PŁ06űëďű:6NűB·:|96D[iD»<»ťťŹ-KóMßł<m¶Ô|˘u=jşŐf‘ö]ď™ÔčX.Ń dY8Oâ…áÝ\‹Őqś01›°%+ÚÓá.őlËŐm×řsöűŮhvöóŚF˘QŽÁíš]ŰŐÂôěűźD‹`ýwŤ¶ßÓů©Ts,ĆD›žýűŚHjI‹j{Źjjűf×·µ®k]KţòzuOűŢq ŃÉWŁcS˘ă2X(ň§VEŻ‹ ‹[›$*Î3ł
Śhę -tĚ.q”Żw˛Úóß(¨‚g8Í -tJőŮíîůB6šŘĐŐO©Ç‡‚•MŠűMëşHé5ô9]IźăíÓËĎч$}0{–>¸ř›Ř&_Äg^Ëu^7ŔĆBÔ°2ĺ"żĺp:GaC5Äŕ0Čco0#r¬é˘¦íéśó{Źžßźľs^I’WŁ>ôżó‡Ńäú~xş
†žŔkĎX<Xą -–7Ä”íjŔó‰§ň4EXŘGUyGľ&ÁgÔz˛óĐĹW#Nfłůí3ÇHôĄµ˛'mŹ¨’|·«34noT19´xŚUaKĚ»S&˝iĽ{Y•†ŠSˇ‡O•—ÓëË;Ăw˝ąľ»śżúčP€Ö¸Ď4^Á5Ré4OrM˙ Ţ +–•±ęúh˝÷XÖÎř<~ŮúţűŇâuÚ<Eň4üKt°E¤d—nŔI›b˝TH}ó«Đű‚§}r¦ŐFMWµ·˙0="ę3ɶŤ|3(=ÂuŞWćĐţEŤ€M¬÷ţCóČź› +xÚíYës۸˙îż‚ßJMM$ř3“:[Îů.ŽUKí´“Üh ‘˛8ˇH…ŹÚţﻋřu:_rçNgú‰‹ĹXěă·K’÷3Ţźý°8{sĺşFdG‹Ť1#ŰwcźĚĐvF–ë3Su’Ż—YşyĚ´·Ä˝Jł„¨»d“”#gl‚˛ĆÜőMîŚ~Yüt6]ś}=sŕDf8ň?´CîëÝ٧_˙'Ů<Rjgx.‡gfĚĎţvĆ”¶¬Żµô´vf»Ě3BxˇKŞO&ŁŔ7/¦/–‹»ÉÇůÍß˙)µŃŰŔÍyÚĚĂ”\˝qß,E^틲YNä™őÓ>AŠ›uAśUBϦJb.9ć<Q2ňĚŮíÝ(`ćbąř×lJ˛iNĎ«Ëź—˘‰ÓÂŢŞĄW#Ç7‹ĚB-
kÚsËqěČ÷I©¬UŇüžŚŽUD®ENÄJ9d]äźsď›2‰‰“* đPłä +TĐáŘŹUÄK[«Ké^LŔz&—=0â;Ł«'z&“˙ĆIJĹ‚ĺ‘yŃ_T˘…1Ç\Ö_‘·`úÂ:X.¬"—Ŕ¦S›U§Lg‘!ľĂv ¶çZ«Vd‚Xt°ć@Ć +ú-Ú×=Pň]@rs›ÄčłâëW7m×N>AZ9°wRBžv6đ•^ż˙!÷̇&řÝ;çĹ˙„jôGˇ|ňYĐ+BÜ›Ű4)EąŢ¦k‘§ŹŮ0Äv°)F”Bę7ć0MŤ9mS´nĘ<Ö”›šňţzŮ3 ŃőżŇ¬šrŞJ묉[Ľúďőé< +ş2ůşŚW•Q Ę(p\€{ô\ +zć +Mˇ…^šŞ#R}~[ ŽN~…‚ńŁ¶ +đU˛U¨€ŇX׋«ĂŐĎ‹ń 8d¬ď솆Ž|Hí·›o©'†Ĺ}ŰÂÁGž®‡ą_(C endstream endobj -1064 0 obj << +1001 0 obj << /Type /Page -/Contents 1065 0 R -/Resources 1063 0 R +/Contents 1002 0 R +/Resources 1000 0 R /MediaBox [0 0 595.276 841.89] -/Parent 981 0 R -/Annots [ 1062 0 R ] ->> endobj -1062 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [370.764 402.701 416.483 413.605] -/A << /S /GoTo /D (ENCODERBEHAVIOUR_BEHAVIOUR_BANDWIDTH) >> ->> endobj -1066 0 obj << -/D [1064 0 R /XYZ 89 770.89 null] +/Parent 1004 0 R >> endobj 1003 0 obj << -/D [1064 0 R /XYZ 107.713 696.32 null] ->> endobj -666 0 obj << -/D [1064 0 R /XYZ 107.713 631.453 null] +/D [1001 0 R /XYZ 89 770.89 null] >> endobj -675 0 obj << -/D [1064 0 R /XYZ 107.713 583.41 null] ->> endobj -668 0 obj << -/D [1064 0 R /XYZ 107.713 532.933 null] ->> endobj -1004 0 obj << -/D [1064 0 R /XYZ 107.713 422.68 null] ->> endobj -1005 0 obj << -/D [1064 0 R /XYZ 107.713 360.247 null] +968 0 obj << +/D [1001 0 R /XYZ 107.713 729.972 null] >> endobj -1006 0 obj << -/D [1064 0 R /XYZ 107.713 228.298 null] +969 0 obj << +/D [1001 0 R /XYZ 107.713 602.45 null] >> endobj -1007 0 obj << -/D [1064 0 R /XYZ 107.713 141.955 null] +970 0 obj << +/D [1001 0 R /XYZ 107.713 518.764 null] >> endobj -1063 0 obj << -/Font << /F22 424 0 R /F23 425 0 R /F46 1045 0 R >> +1000 0 obj << +/Font << /F22 400 0 R /F46 984 0 R /F23 401 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1072 0 obj << -/Length 2034 +1010 0 obj << +/Length 2375 /Filter /FlateDecode >> stream -xÚµXŰrâH}÷WčQD4ꪒJ—yĂ€{=Á‹ŮŤčžpČ’ŔŠ‰ŃĄ=ţűͬ,$0m÷ÄřÁŞ{fež<™363ľ\]Ż®>ßaVŕ -×XŤ€žË-)¸±ŠŤŻ¦íţXýjŘv`q)a“˝I·É`($3'yTď’¬ -«4ĎpéŐtuő燕Ěŕę8éYž-ŤhwőőfÄ0ţ«Á,;đŤµjg8†ďÖx¸ú÷ë¨f·Tă"°\›|O&«gPÄfܬKŐ`fľ¦§0úßË€33,âa”ďö âÓVŻNwűmĄm)ÓMnÓlŁ'Kú lËĹILëR}tŐZč#öI”FávűJ3aş+•ĺ1äÜ -ŔvJßEzą/ŘűťdzľŮ(nÓę•–Ľ¤Ő3µbP$NŠ’zy¦„ŕ¦pŇ•pxÝZ|8w48Ěgc‹¦ |ń’–zšíŚšYž
ß6 íšÉ€KóŻaä`D$ÝŔĽN«˛*’pGÓëĽŘ…UIťŃdő@0‹›ˇŰjEa†
Żą(ĹyGI—”<:‘Ř’Ź0lpôůĆq[ ňŔr„_Çň}É•ćx:?®îţs}łÝMzÇô°Ű%oâa^ďž ‚űĘ‚{fY?ŃŔşwIIí4ŁÉşUfĺ>/*U+ő¦\7[liŽ>ĎFÎąąşŁµÍĽ2%gČ™´látmôŤI'kĺĆz«MĹa”wÍdpfqWtíňMŮ]őu(ě(ó:ę.ü+ÝŐ;ędŤ$…ˇr‹24f€6€ż*ҨÂŔÂ~•Ó×é)…·-[ňËúśÚčŃN\FĐ’ôĐص¸cź ë~‰‘¸Ŕ«éxu»_—óü`ă<űĆŘÔ…ćÝ}‘WI¤HWőSýEDíKBt·ákRüҵŮĐ—–ŁEW{—MËŔ’6€gž÷ĺZ4Ń"ë§|ȵ ńrL’B2ŇüŽLŁoMQ!™&l=iFŻ -”ęĐ…·Ů¨@÷mĘžaĚľEÁď@h˛-
Ň[mť‹ÎĄüX‹Śß†Q´ß? -a9š`BU˙ńn1ąU‡YŚ9g©…¶y—ŕ
xคą¸ů$o[wµ¬ŹŕÖľq™Š`<{]KŤaGş-űDĹ!)9\~Ś©&š© -ZŞźE3”Gh -$>t±(yVď -XBÇxŢąÂv›cHżhÚ˲”‹—"TiŻ&t.Ü$Őq‚JćYUäpĺŞ.»ĄOĄôŃ9} úĹHďńěxµśÝĚT˙ËĂeŞ˝X‡{'(ś/ćç38Ľ
Ő®WĎY2§ 9ŚY.´á_Zî[Ür8ĹĚ›:k•Q'ĎŮŢó|•żí,®Ź©@QęO—Ë
!´ÔFÓ,oóR{«¦ŠçŤć“Ůôń¸Ř{I’ąÓ’l3ß’öáĹ µiUǬز›5űç‘’«Ŕz×ĎŁşgfH莀"ťk·.rŔ[˘ĺčTMAf -ĂZNˇÇ|xĆŃPÇéńXúu·'Mčź%aţIOץŞŰB›%É1'ôË;ů"A{ť”šťZ¬Í€ýźÔ}x'0ńŃ_Ô˙ŤŽ ě +xÚµYKoŰHľűWčHĂć›ć ËrÖ[öJÚÉŔh“m‹‰THj˙ű©ęަ(ZV’Y¬f?ëůUuuË<śÁ§ł‹ĺه+×$vşá`ů4HśA +;pĹ`™
>[ž;ücůűŔó[lŇŁWůZ
GnŕX—eşŰ¨˘‘M^¸ôlş<űv&`Ą3š\Ů‘ŇÍŮç?śAăżŰKâÁ‹^µř®ßő`qöĎ3ç@4Ż#šp;ôÄ ‚oą$IĄŇrd*˘ČjJüĆ–*Ň2S4ö’7+jĺ›í:Oó†z‹‹9-®óˇ°žąÎ‹g{8ň×ÓL¦LEëSą•Źk&Z>Ńw<úŽ5ÝLhGY¬_
ŰőZ[ĎŚ„°°ź–ąY©‚¬ÇkˇE|¨
óÔ`ŇÔŮĘŞ9§ćË*OWÔÜ(YÔ˝mD+ŁŽÜeyÉŰPÝŞË]ÁóŹ˛ČFë|“7*ł[i}ŰsBöőPVYŃęŰű駑Ëü*`˝-«†»Ż[Ĺ’|qg|ą\śŹ/ŻŻ #Îűęvü€âäl{žd2۲®s°÷i±<7¶nî†^`ŤŘ‹,‰şéáńPa-oĎiBážď†3®x”é×—ˇ +Ą˛şK'˛ľ%Jđ˛§ÚU‹ +ş“$»đLđÁÜq m~uĄŔťĽ_Ľé$FJÇí :-h‘jG0rŽřŇj3I“Â>´I‹Ćë’Ŕ†wS€ 3×µaCN†q:ő2#áďĺGŮ?˛2‚dQKHßtŔčCôśZ˝D‡‰ťó|7ˇeSVŻĂ0°0!x&ç±Îy:ájŘ íŇ [PKuů7ިąé+®ĺ&i€ńSĄľíŔ`¸ë•†đŕ2‡+t5ŻĐ‡ÄGýT˘Ó°ĄřR
Gx|;ŕA[ýýŽ–¦<-
3ćŞńvD›GŐ==ÍyźsiŃw” +€Śř8 +[đOo.Ďi„…—KááA j^j˛Uc!IÓĄd[•ć_ÇMihRŘÓgPě¶ĹM‡,†Z`ĽăLě=}C!ń˛4á~Ţ+jĄó$—¸Ş_0äĐuř8 ‘‚‹*ő„1ń¤ŇĆÔ8µÚQ˝-l?\ůa§Ş‰ÄöÝľˇGč#c2ťM–÷‹]\ÍÇ·ÓEŹLŻ8öí(¦@źí6Źşjtţ¸‚q÷HO•ÜčR
ÚÚA0)©Űé`TŻäM%“;–¨p™ÇÂO;i$śŔö\˙ĐWb
ó×nÍFűC3
„c‹Đ=´Ë×
W}ŽŁy~ä +U~Ď7»
;É! ŁN;[› ])ČłyÚ(jŘ»~O¨^äĽ'Ď[ý_¤sO#îIAśh„9Î[dÝϡwřo9ť,Żďf'&ۉb0Z;+ŰŞl r“‡QŰş˝%¬ĺ«Ş>Úl¶Żý W;)geź/Gy`:ˇőapš‘`F“9_Ŕ$pŮ…ě%s1Ҩ§UŢ3›W@¦üGĹo5žM®onĆó!D×.®—óń0Ŕi'ý€żD×_u#ö‚,RHm˛2—OŮČVřJ6ęĐ…¨Ń‡jť"ë…ĂH¸ŕ:׸.ü±ë×µ¦9ß“@ LŁ^v%Â.I„’ćED8Fg›LąkâH/˘ĺŹŻŤŇ{Ś×¨ČtQćL8/¶;& +1ž¶…ĎŃť&ag¦>Wć–¸*ÍŻ!µi_5zXéę9rě$ AĐŽ@9-Ă=˝ÔRXV ď VÄvä`ÚŚm'đŽř=´jK·®»/uv;Ľ\·#dšĚhkV>¶ż;3öęÄţOB±ÇŠű«żýäác endstream endobj -1071 0 obj << +1009 0 obj << /Type /Page -/Contents 1072 0 R -/Resources 1070 0 R +/Contents 1010 0 R +/Resources 1008 0 R /MediaBox [0 0 595.276 841.89] -/Parent 981 0 R -/Annots [ 1067 0 R 1068 0 R 1069 0 R ] +/Parent 1004 0 R +/Annots [ 1005 0 R 1006 0 R 1007 0 R ] >> endobj -1067 0 obj << +1005 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [217.003 549.068 292.021 559.972] +/Rect [217.003 380.925 292.021 391.829] /A << /S /GoTo /D (structAACENC__InArgs) >> >> endobj -1068 0 obj << +1006 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [353.899 519.575 440.713 530.568] +/Rect [353.899 347.612 440.713 358.606] /A << /S /GoTo /D (structAACENC__MetaData) >> >> endobj -1069 0 obj << +1007 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [397.095 438.073 501.244 448.977] +/Rect [397.095 259.426 501.244 270.33] /A << /S /GoTo /D (aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846) >> >> endobj -1073 0 obj << -/D [1071 0 R /XYZ 89 770.89 null] ->> endobj -1008 0 obj << -/D [1071 0 R /XYZ 107.713 679.36 null] ->> endobj -1009 0 obj << -/D [1071 0 R /XYZ 107.713 623.164 null] +1011 0 obj << +/D [1009 0 R /XYZ 89 770.89 null] >> endobj -1010 0 obj << -/D [1071 0 R /XYZ 107.713 578.923 null] +971 0 obj << +/D [1009 0 R /XYZ 107.713 524.585 null] >> endobj -644 0 obj << -/D [1071 0 R /XYZ 107.713 522.728 null] +972 0 obj << +/D [1009 0 R /XYZ 107.713 462.66 null] >> endobj -1011 0 obj << -/D [1071 0 R /XYZ 107.713 465.136 null] +973 0 obj << +/D [1009 0 R /XYZ 107.713 412.69 null] >> endobj -1012 0 obj << -/D [1071 0 R /XYZ 107.713 426.479 null] +612 0 obj << +/D [1009 0 R /XYZ 107.713 350.765 null] >> endobj -370 0 obj << -/D [1071 0 R /XYZ 90 411.23 null] +974 0 obj << +/D [1009 0 R /XYZ 107.713 286.49 null] >> endobj -605 0 obj << -/D [1071 0 R /XYZ 90 385.961 null] +975 0 obj << +/D [1009 0 R /XYZ 107.713 245.923 null] >> endobj -374 0 obj << -/D [1071 0 R /XYZ 90 385.961 null] +362 0 obj << +/D [1009 0 R /XYZ 90 228.525 null] >> endobj -587 0 obj << -/D [1071 0 R /XYZ 90 203.688 null] +573 0 obj << +/D [1009 0 R /XYZ 90 202.933 null] >> endobj -378 0 obj << -/D [1071 0 R /XYZ 90 189.655 null] +366 0 obj << +/D [1009 0 R /XYZ 90 202.933 null] >> endobj -1070 0 obj << -/Font << /F22 424 0 R /F23 425 0 R /F46 1045 0 R /F14 778 0 R >> +1008 0 obj << +/Font << /F22 400 0 R /F23 401 0 R /F46 984 0 R /F14 726 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1081 0 obj << -/Length 1970 +1019 0 obj << +/Length 2076 /Filter /FlateDecode >> stream -xÚÍYKsŰ6ľűWđHÍD,ř&ss;uëÚ©«ö’v<IčP¤ -’qť_ß],Ŕ—NšéL`±Ďo2ł6łŢ_ĽY\|wíyVꤑY‹µ•2+Ž\'ô\k±˛>Ú‰ăÎć^Čě,Ëy™?b9íl‰z- -NŁľćrć&6ěBRâ{ˇíÇł??\\-.ţşpáFfąę†0vb?´ňÝĹÇ?µúsü4±žÔ®ťx>|ë—‹ź/––Ť¤öR»,r?±bh±G˘˙îyˇşŢśł>ÎCĆěošÍý0µEąo&ö*k2">‰˘ Ń’ÓšäŤ|ę|šąˇÍW´Ľ–ŐŽFÉ7\–YAG:ÎŔeć1»]ăq4˘µe#ôÎfˉö;cžąąÜ¦÷eEQ!ń©Öw–yµĺ†fęi%NĄÖÜuť4É5lAůg;îĚćaÚ‹¨5µ-óFT şhž‰4ş+đě¬$úDOX9Pv=‰fK«’ŻÚ\™Čµř¬ĺ%-çŐnźIQWš}SM‚ę°±*——xo)Ú*IßďŻć#zÖ®DECĄ.
^nš3†ą1Wę$ćŽS!słFF!yźPĺ¬hő´Ż& -ŢÝOpŠ…ŰW9v™ĂBÎDĎĄ.I:Të˝Ű8Ńl=ËăĚ©ZNüä -ÁöŃ5~Gâ}ŞâH¶ąľaî†NŢŇ^2ńrF´ -/üR3ůÇW&î´»Ú[®#đň%8pĺÝo3ׇ·ÍíÍ»Çď/ďŢÝ^aÇ°cŹ…‡$Ý?č(~ת4Š˘Ĺ¶ B/ôí/Î Kśw
B˘„$=˘ËÜlű…ŢŢß]߼qŚ7Ý,Fę$,<X×óáľ©ô‡ď*uň—7#î®/Źé¦Ĺ‡éžř`ĎOW‹YęŰ—ŹócĎąáńalŚüAµâH—0~çś1~üŶ?*µTúáŁá/Jζ+pP×ň˘]é¤ÂŤ°‹ťŔ5‰Šż®äÔGw™€Ţ/dđçŞÓ“¬e -=‘›ůE× ÎHř0ÔÂ5}´f÷/4jďys+–7ĄÂôʨ˛™Rýöć
řéúžnuÁ4X ‹jˇę´k„8ňÍQ*ÇUGt€J$iĎ,tő&Ô¶¦ľă…ŕ5tĘĽ7O`_ÉÝ =Ζ•ŇQ`b)»vJš(´c0cčµô+ôşë°uO±ýO·úšÎH„[Ťló¦‹ĚľMÝJdÝÉ:ţ<D3'MŁ˙˘sz縣›:/}¨Ô«gü^4-ţĆśgŤ‰ĺc6ë9ýBâ;>óľö_˙ +xÚÍŰr۶ňÝ_ÁGj&ÂxgŢ”ÄnݦvŽŞs^’Ž‡– ‰ŠTy‰ë|ýŮĹĽ‰–ťăN§3š!°Xě}[;‹[?\Ľ[]üëĘq¬ĹX«s+óa6Ög;db6w|n'ÉZćë»,˝źyÜf{‚^Ą™¤ŃRne9‘
XŠ\Ç·]wöŰ꧋ËŐĹ8rK(~ČB×·Ö‡‹Ďżqkđź,ÎÜ8˛ÖÁňľ™őëĹż/¸––?)u3Î=+t]ĆC|)ëäńíĽR2Ś‰ +Üö4-†Aă:Ś‡Ł éš3Qă»,"5Đ4ý#ÂŇ;ŕńËÂćSY [ż¦ćŤ˘
šâm¶¦Öµ•Ť˛Ő´
¦~żíé)čśÝ]Á ›žČÖ~_ý¦GČŢMtľgŐ Ć!ô¬ř®äMĹĎH‘—ĘßëăźS`x4řbO
î?řý;|ĺű·çń©{Ăr‰ ŰĄĆ@YđŰ{!'@ŞşNgĐ0ÎŰ!˝8źę27hŻxĐ{suýqot˝¨q˙d]ĎűxOH?Ţůë»ĺ€şpÂŕiőiŚžŕürąšĹ®˝¸›OÝěúŰźřÇÂśťÂđĘó×xÁÔbéK<ŚúŻJЦ=ĺŕp[gÍf| +Ť˙ŃŠ\ćrç{˙ĐúSěů3 endstream endobj -1080 0 obj << +1018 0 obj << /Type /Page -/Contents 1081 0 R -/Resources 1079 0 R +/Contents 1019 0 R +/Resources 1017 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1083 0 R -/Annots [ 1074 0 R 1075 0 R 1076 0 R 1077 0 R 1078 0 R ] +/Parent 1004 0 R +/Annots [ 1012 0 R 1013 0 R 1014 0 R 1015 0 R 1016 0 R ] >> endobj -1074 0 obj << +1012 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [133.245 627.334 275.8 638.238] +/Rect [133.245 462.905 275.8 473.809] /A << /S /GoTo /D (structAACENC__OutArgs_aa08d19137d0dbd54d3d86f88a85eb149) >> >> endobj -1075 0 obj << +1013 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [264.962 460.556 347.353 471.55] +/Rect [264.962 305.639 347.353 316.633] /A << /S /GoTo /D (structAACENC__BufDesc) >> >> endobj -1076 0 obj << +1014 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [276.588 414.905 358.979 425.898] +/Rect [276.588 263.646 358.979 274.64] /A << /S /GoTo /D (structAACENC__BufDesc) >> >> endobj -1077 0 obj << +1015 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [222.761 383.166 297.779 394.159] +/Rect [222.761 234.834 297.779 245.828] /A << /S /GoTo /D (structAACENC__InArgs) >> >> endobj -1078 0 obj << +1016 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [219.174 367.296 300.838 378.2] +/Rect [219.174 220.428 300.838 231.332] /A << /S /GoTo /D (structAACENC__OutArgs) >> >> endobj -1082 0 obj << -/D [1080 0 R /XYZ 89 770.89 null] +1020 0 obj << +/D [1018 0 R /XYZ 89 770.89 null] >> endobj -1046 0 obj << -/D [1080 0 R /XYZ 90 213.884 null] +555 0 obj << +/D [1018 0 R /XYZ 90 693.046 null] >> endobj -382 0 obj << -/D [1080 0 R /XYZ 90 199.346 null] +370 0 obj << +/D [1018 0 R /XYZ 90 679.166 null] >> endobj -1079 0 obj << -/Font << /F22 424 0 R /F23 425 0 R /F46 1045 0 R /F14 778 0 R >> +976 0 obj << +/D [1018 0 R /XYZ 90 96.348 null] +>> endobj +1017 0 obj << +/Font << /F22 400 0 R /F23 401 0 R /F46 984 0 R /F14 726 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1093 0 obj << -/Length 1512 +1028 0 obj << +/Length 1528 /Filter /FlateDecode >> stream -xÚĺXYoŰF~ׯŕ# DĚ\ŹŞ-§J}URű’M®l˘©đ›ţúÎî,ĹòŁ —»łsĎ|CëÁ"Ö»É/ëÉŰƬȍ|ć[ëŤ+đ©+µÖ©őÁćˇóiýŢâ<r©pIď^d[éL™ öy‘4;™×qťą"ťĚ×“Ď -”ĢšťÜ€+ŮM>|"V -űď-âň(´ž4ŐÎň‡çÖZM~źŁyQĹ0r ń¬€s—¨ĎRÖMéPaç•ÖaĚ8đÎŔČšŇĐ%‚!‹ŹŚ‰Á]ëĂTbĎfŽGěłůőŮÝÍooĐh°T?«&IdUąĂ{7¤§3^\˙éP.ěŮĺâüî×ŮőůĺÜH-ÖwóĺRmÜ,GšlJě8Ű6ĄÔÚXSN]ęskĘ—ů~릍,ežČoÝĹç.ÎňŹDřQ}}äq°HąŚo‡.u=×s¦” B ŠJ;®´¶ˇgÇq2Ď“Eľq°µ'l%Ć™ -?´“"ŻjÜD“ď:N7çó%ęáůý¸Ě÷Ú,|śiE*KÇö›#šOYäądË”R7‚Ö{*·Úę˛Ijä@˝~ApW°ů‘~D1µâ-Í^ń„pGôhŔď¸ júé9Ą~čz" -ßž˛í‰îÍÍRő˘\¦`ަ®‘#xWŰ„4™ą-3Xâů¬Iłâ1«˝L2eG˘™}f¬Â·,ÇgWWhł—±rݾܪućBbĘZ‹§v]Ćyµ/Ęi:
I‰O¨ď®šżO•zyă¨N¶z{9s(ĄöúęM=ÉLřF˛NŽ=¦vź…OmbřÔĘ„O-1ű>Ëăňk{;Ĺ>çŰq…ĎŞőd{¦‹ŐÍŰĹü™PĎ‹ü)ÇŐŻ®nçď¦ŢŔÓPc3UŦצ*ďMť6UŰjS¨Ý¤Ţš†»)LeÖzÝę… -– †îň†zyqĆ őźoú1í`żßf‰v×–ĆŤ‘¸QäC‡.g!Zs«A¤ŚwĘě% ô= -ô›Ţˇ“ĎPű/Şŕăm–ŔďHC{Śót+ÇT›˘€:óKŠé´šÝşé‹ŐhS>g©!}ŚÖĐĂ:Léaż˛śęhoŰähQ[Çëqó|—…8FÄO0ţ|‡éççl„lţX\ŻŤß2*ýîŢÉúP&xh&ÖM4°yňDOşl;a˘ń9@wÔ^@‘čC50iŇąuĎž-gWGÔC3CÎ^÷\4x^@ľ|kxyź™ŮĹ‹ĽÖ†Ő´¸ - ´mw/×ůľíFĘŠáô"úÓ§aozQoí.:
ŔS»ýVîÓŐÁ+µ¬Î{1_éó6›ŽTµ ŕߍnJ`74 -µň6˝Ű¤EťÇĂXŘÍGDĎGM…ë$·ČTÜ×P‡´1ÎŹ“DZç!4FÎ> ęjGĽu"vČżˇëNĹ©č˙‚SmľŘÁ•xHNŮGŞA¸{C©ź•”?:nĐŤO
NyŻăÔČ:-:ÖbŮGĂCP9Liť´›6c»´ţ>ćëfŔ#ÂQđŕČý;;Šž·Şž8\3đdžÔćÉđ¸|„(§A٢Z·ž‚F”27 -ý“Ă;˝cr4r?ç+ +xÚíXIsŰ6ľëWđHÎX4 +—ÄîUš1kN(2/‹¸9°ĽŽę´Č9éląť}™a Dě¨oű5âĂěăgd$°˙Á@¶Ćł :.qŕ736ł_fčUŐ|úD*áŰŘvmÇšc„ąXX”šËŰ‹‡ĺzm9ČĽ[KŁ(^ćń{V_§»Uľ·5yň QdÍ)Üľ^˝{XÝ^ÝqÎŻ°ŰKŔň´éźr$•ëő••ŁiR‚Ht#č„3Š‘Ó#š“б
`ľ$¤ÚŔľ(ŇăŇÂ]Ѩ3–ÇEÂJů‘Ą»2*˙”;‹ łIłÄEĆű¶GhŃL1“?Ź)wÔWSŕ)·Z'‰ŻŞ.›¸nJ•Ďiý4!U2(«VמňB‘6ŕ#GÍ‘†x€ÚľŻ<pĎ˝•ŃŐŔrp»ă2l…`j`#J^F§/Ý…©ŤŇ}‘ćµöir'Ҿϲ"Žj–śöŃëvşČĆa(ő´ŠkŽĺžËOY9ĐÖ!Pś#+?BwŤŹ"ÓˇN\$ëäîç3©¦ŽMŐÄ1«Şˇľ"S<qQodĽşýÍÂ5׫ˇź·—×K%i@´ÚŠRuy©Ž4ŠŇŇËž¨˘ąmő6w‰íú^Ü×ń pô ĽŔŚ‹ĽŞĺ¦Ôüˇătwą\OÔľţ'ž«Óĺi!2ô¨y6Ą? ];D.xŰ!U5ŘSYk· 4J +:Ä>Ąŕę(ŹŮ‘\Éxű”VśŚšű&Ź5ŘąfÉę2e8)˘(şf±—ő“=Ń”‡śF›RAŃÜ!ŽąĘĺi”$iÇI–|OD'\xČŁL’M5«ÎZ›zlu€~$śoR3‰juĽDů]nr#ř–0B\mĘR8“ź¶ń“ŠŐuš?VňëYŕ9'Ú©›%Ç”śüĎ=0u+9‚w…M’&U·€ąäEÜ$i10FŐŰćČâ”ŰsBb^(«äWšËß8Ş\I[ąŽ¸ëžĺÇ=_G`.d&«…xlÖe”WǢ¬%M§!0)ĺ/‹7Ío•z}gqDÚś_/,Ś±ą˝™ +PO2ˇž’,’#”ă»/ÂÇ7eřřJ…Ź/eűć.ÍUGä·Ů,<3ŞäoĄ=©RĹtµą;_-/$캡7wä ¬›űĺűą;™g<fĽŚĎ†Mk§ę´©tżJ vă:SÝz_¨ĘT¬Ĺşö®x°T0Z+ęőŐ…°÷rÓs‘‚ă1Kcá®ę_jű}X~ĄóĂ´ç¶PľĐC|”ĄÉ ‰M +UĘŻ«Ű-đňô@Âłčfü6Ű塚LH7™Ŕć›'čÔ¨Kš7L&ž¸ť|ĄH0€ˇđfć§&–{ËwÍĹzq3ˇFŘN7¬…q/EË(„ý[C<'‰âeTä +©*脵N—ëQ +·bňY$‡˝!„é]Ů—±ž:3v™ĽR’üĽóŤ91çŃÖ–ŹŠ“bđď^Ô<Řő~ŕV˛4‡ ꯨSR>Éř +đ^Q&l>Ő0xóÉuŮëIB7Ź§vşëĆ$Ćś¦’ëXż†t)vu”¶ĺ(Ώ⧱ç!4JΨŞ'ĺ[íŢ +I›C×ýßnFíFŕI Tb›śěĹ#X‡»7[ň˛a쟎 ńđŰÚÍČ:-<ÖjŮó]”†
SZ$í^gl—Ö?Řüńźjc;|ďj`üb endstream endobj -1092 0 obj << +1027 0 obj << /Type /Page -/Contents 1093 0 R -/Resources 1091 0 R +/Contents 1028 0 R +/Resources 1026 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1083 0 R -/Annots [ 1084 0 R 1085 0 R 1086 0 R 1087 0 R 1088 0 R ] +/Parent 1004 0 R +/Annots [ 1021 0 R 1022 0 R 1023 0 R 1024 0 R 1025 0 R ] >> endobj -1084 0 obj << +1021 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [175.807 475.832 263.737 486.701] +/Rect [175.807 377.254 263.737 388.123] /A << /S /GoTo /D (structAACENC__InfoStruct) >> >> endobj -1085 0 obj << +1022 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [234.747 303.307 332.859 314.211] +/Rect [234.747 220.956 332.859 231.86] /A << /S /GoTo /D (aacenc__lib_8h_a5743dca1ec3746f9c5ecb839a132ba7e) >> >> endobj -1086 0 obj << +1023 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [418.694 291.352 500.736 302.256] +/Rect [418.694 209.001 500.736 219.905] /A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4) >> >> endobj -1087 0 obj << +1024 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [258.786 232.284 340.827 243.063] +/Rect [258.786 149.271 340.827 160.051] /A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4) >> >> endobj -1088 0 obj << +1025 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [308.429 188.903 390.471 217.968] +/Rect [308.429 105.442 390.471 134.508] /A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4) >> >> endobj -1094 0 obj << -/D [1092 0 R /XYZ 89 770.89 null] +1029 0 obj << +/D [1027 0 R /XYZ 89 770.89 null] >> endobj -589 0 obj << -/D [1092 0 R /XYZ 90 669.783 null] +374 0 obj << +/D [1027 0 R /XYZ 90 739.935 null] >> endobj -386 0 obj << -/D [1092 0 R /XYZ 90 655.27 null] +557 0 obj << +/D [1027 0 R /XYZ 90 572.871 null] >> endobj -650 0 obj << -/D [1092 0 R /XYZ 90 390.369 null] +378 0 obj << +/D [1027 0 R /XYZ 90 558.11 null] >> endobj -390 0 obj << -/D [1092 0 R /XYZ 90 375.856 null] +618 0 obj << +/D [1027 0 R /XYZ 90 309.023 null] >> endobj -585 0 obj << -/D [1092 0 R /XYZ 90 162.632 null] +382 0 obj << +/D [1027 0 R /XYZ 90 294.261 null] >> endobj -394 0 obj << -/D [1092 0 R /XYZ 90 148.12 null] +553 0 obj << +/D [1027 0 R /XYZ 90 96.348 null] >> endobj -1091 0 obj << -/Font << /F22 424 0 R /F23 425 0 R /F46 1045 0 R /F14 778 0 R >> +1026 0 obj << +/Font << /F22 400 0 R /F14 726 0 R /F46 984 0 R /F23 401 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1099 0 obj << -/Length 1897 +1036 0 obj << +/Length 1949 /Filter /FlateDecode >> stream -xÚÍYëoŰ6˙îżBe`ćHJÔŁč7u»lËcŽ3`h‡@–™X,y’Ľ¶űëwäQĎ(jZlĹ€")ň^Ľ»ßťL‹ZogŻ6łďßpn…$ô¸gmîZľÇŕĚÚě¬wv@Ř|ÁµŁ(–Y|—&ŰąKm˛ÇŐ7I*q´–÷˛łŔ†]j)p¸°ťpţűćÇŮj3űsĆ€#µć |â;ŠłwżSkë?Z”8a`}Đ»–Ëx¦ÖÍě—íIë¤ĺ0ő9J»Ů'%đfž}Ęâ*É3śEišĎAžúoÇyöžRţp*˘vS~ßlĆh’ď@)}äŃAV˛0ĘŁŚEDîp!É´®¨dń`´]żťYďôűĺRîluyvw=ą˝\//Ě Tä'ČkĹ{$Şą.Ô6ز`Ś„B ŞJefjNe…ŁÄg9gđÇ’jŹŁČĽ”Šhe¶věłtś0´—f)É€QĄ8űKY1J“]ÔŇvóC»ÚšŹŰž<™=E”=ČZB0ř†Z›Đłwy¦Gp<ŰáR”áł#Ľ.äcΰIÓףˇS&pHî@U×őÁk§(®N‘Ů;B -ŘĺÇ–°ö5X{V¸˘MOeŠ®FjTž¶Ąüó$łjÂU0ÖV™ú÷{O…6p˝Ż«űbÍJÂĐłŔ•HHMŚ\Ďphśą{şĄâz*, >
A•€Pá •ý22Cş -©ÄuBxŁ-1U4N„S8ic&{¸đT5ěɶ0Ě%®k’–Žš)±Čp‚×bEDcä\ĺřÜšěVĘJĹXîFĘéË{^śO©d¤C•ĚýĄCgB%îĆ‚ •š -ó‘XBqŹ¸ś
Püëę«Ź—µźŚÂ¸†ťóĆ~»~Š*TÂĎ>ö(H/·‘5ĄDŚ6vŁŠ÷űO#˛©ń*ŕt<ćEUKždµű'ĺ„3ĽčCĹ‚sâC{˘ĐŹôÚ
-¦ ťŰsĂ5óď“4Ú¦ňiEG€Î!±I± Ó€ZPę:PF¤2®°[i¤2-WÜé® -©Ŕüa®Ę’]’=`§Ói±ĽV$ ŘoÔţĽnÜĚ O'ůčÁôqQ!Mź”—e‚Š*ŢĐ'<•qíˇőťĆůa›dŞAZL×&lLăM9ś5 ×Čę{ěV»¨ńtô#ˇáµ|onx߼ZSľ®á{}óulżÎÔ¬™YEШFßNgíăŁĂ1ĹđtQŁn¤z`M}đÇ(Cžđ‚î5Ža0äâsTüîĄ<EĹű*{RČe˘Žtť4qŠ6•ňşuçĐ4Ž—8„V8QÁm:Őë˝:íÂłŹš° -Źdá@2™K„ţ0ܶ4»Ůg{C‹u[3FSo˝|9BŚ â†M¬*ˇ(ׂN°‰ß|Ró}cXčx -,cřćŰ,˝^é ó;Ö~L¶čĽ†D„ażd(M9©Ý¸]TđRůßX4Şâ˙ô…ă?úŔÁ¸tw]¬.Ôç
a˙¦»Wu˙#ŰzÄžüĚń-ľl4łâPţĄ?YüĆiT +xÚÍYIsŰ6ľëWđHÎT(\:ą(ŽśşMlWVzI2Š‚-v(Ňĺ’Ążľ7Ń´“Îdz"oĂ{ďű aëŢÂÖëĹËíâçsB¬E>ńíťa+đ]Äkm÷Ö{;@®ł$Űqśđ<ąÍŇťăaÔěyšqő¶áwĽtÜІUb*¤„Ů”9·ż-ÖŰĹß4bË•X€Ę¬ä¸x˙[{˙ÍÂFˇőY®:Zˇđ̬›Ĺ<k-a@Zk‘‡|gébŚíŐĘaĚ>[_žÝ®7‡bűj–E‘pfť'Ĺž—·7Ľľv\𯌏Β¶agÉ`YRäU&]]ľzłľíD^˝Zo„s?ź{~Ď" ę[K×EcʨêŐćřĚţIířáSDBNĘ
ZjĎ…k'đěŐfővB«ë…ľđ ś™ŇC=„˝)=ď..·r™‡ËĚúOqÖđ ©Âî†f„ĎŐ‹hoŃ’ÂAQL%ńő"µ˘Ż(rťGUšß›śď!×ÎÔ€ëĘô×0„đ ˇÔ/Ý +!|Ż&Ň\¦˝Ę÷ň^'ţćőÂz/żkżÔ©F¤=Ő6ÓÁ~¤tăä „JËÖŐ^‚É8@ĹaűŘČ…·WĎĘqm®ç>§őA˝Ĺú#Bk˝´'%ŕ;Ř@ˇVz*ÍAQgjôID1ÎŇ}Üm’q"»>h™§Ńív6zMç÷ÜXźđPzůö^ĄIŰ󽚊sőěźK~ŞIůňm§ĺTé=lâ{pŐóČ)Nę&Ök'Dűâˇ,s
f!žµš‘ˇ€§Ĺ„GUł«řß
Ďë™TQmz‡j˘1™ęꥊ\§Ž«˙aT¤KŚ˘:ˇ˛@Ń6>•ĚýÝť”aŁ Q€#p%DŃÓţ62 ß +„ČóĂaW(;»ş<żx=rëN–|š5ĄŞ¦ń ĐůÔ•OϸbUÁ<«ň=Ý«®¸ĐĺSC¤H0Çž\Żx8B€u•ŔtŠí`D(mÉÎsřU|<â="„KĘ0ň#wĹGČđ—0lÚÓŰbßdĽšR—„Ţ÷cüĺ:^ÎłjĘ‚0ž˘[Äsˇ +ŐőCĽ8ÄŕvšĹ»Ś?îč`Qä…ŃĽYĐiŔ- ¬č@Ć“ZÝ9Z«ôĹ)éÝ‘J.@ůŢôb—6u_é]”üÎ$Úçb}a®_z‡/›||ŻocqÉőm§¨ŞT9*tŰCž®ŕÄd¨9Ó¤8îŇ\0ú™ôQx'ˇńçNĽµ Çčšsě“Vĺń|ő+A˙I7Ńşo^nľKďwŞő´Úë›ék*ć-Żc¸mĆ?NąLń/ńń!SŐJN#‚Ľ +(’°ŃŤ[b®€}Ť·;Ý+! +6"ăůµ:#qřÁ3áhŚâ/é±9ŞA>á÷ ç©T`˝n4K\M‚9Á–kf鮌m|fOŘ–›3źöěw•`„^`WkőÖ:&Ć1ń.ĎÎrꅚôÁ>YRŽ!şđ.NH<ŰČ
€Ą{¶g[Kłă ť/ ŔÄ/Ęł}„Éů»[ÎovĺŮAËrű·2 +͢ĄZ/^L\ó˘¶TBŃLDfÁ%°-›@˙&:0ŃKVečç`bśôđIÖXĐ‹ö©X"ŰJ!EŁźÝ4“‚¶®ł®(ęPOŇo*î¨ĚüHţ~¤š;ţł%3áîűŤ˙µü‚Rv endstream endobj -1098 0 obj << +1035 0 obj << /Type /Page -/Contents 1099 0 R -/Resources 1097 0 R +/Contents 1036 0 R +/Resources 1034 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1083 0 R -/Annots [ 1089 0 R 1090 0 R 1095 0 R 1096 0 R ] +/Parent 1004 0 R +/Annots [ 1030 0 R 1031 0 R 1032 0 R 1033 0 R ] >> endobj -1089 0 obj << +1030 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [377.026 726.819 459.068 737.723] +/Rect [377.026 672.89 459.068 683.794] /A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4) >> >> endobj -1090 0 obj << +1031 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [135.768 690.953 203.035 701.857] +/Rect [135.768 637.025 203.035 647.929] /A << /S /GoTo /D (aacenc__lib_8h_a6ccf4948de12c1cde8ca22a1216c5d3e) >> >> endobj -1095 0 obj << +1032 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [236.659 636.681 318.7 647.46] +/Rect [236.659 580.716 318.7 591.496] /A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4) >> >> endobj -1096 0 obj << +1033 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [319.676 622.115 401.718 633.108] +/Rect [319.676 565.568 401.718 576.562] /A << /S /GoTo /D (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4) >> >> endobj -1100 0 obj << -/D [1098 0 R /XYZ 89 770.89 null] +1037 0 obj << +/D [1035 0 R /XYZ 89 770.89 null] >> endobj -583 0 obj << -/D [1098 0 R /XYZ 90 532.918 null] +386 0 obj << +/D [1035 0 R /XYZ 90 739.935 null] >> endobj -398 0 obj << -/D [1098 0 R /XYZ 90 519.022 null] +551 0 obj << +/D [1035 0 R /XYZ 90 491.223 null] >> endobj -582 0 obj << -/D [1098 0 R /XYZ 90 94.191 null] +390 0 obj << +/D [1035 0 R /XYZ 90 477.065 null] >> endobj -1097 0 obj << -/Font << /F22 424 0 R /F23 425 0 R /F46 1045 0 R /F14 778 0 R /F11 698 0 R >> +1034 0 obj << +/Font << /F22 400 0 R /F46 984 0 R /F23 401 0 R /F14 726 0 R /F11 673 0 R >> /ProcSet [ /PDF /Text ] >> endobj - -1107 0 obj << -/Length 1252 +1040 0 obj << +/Length 276 /Filter /FlateDecode >> stream -xÚ•W]“˘:}÷WP{_ jÍ$ľ|CĹYvť‹Ní˝5»e±•*Ep?ť@ff÷Á"$çtw:§›•‚•ŰŢpŮ»™čşâ"×Ň-eąQ\¬ŘA¦N”ĺZyT)Öľ.?*†á"bš@ł“dĎ´ľnbu|ŚĎ–Q‘SíůËŢSŹ -F†ë(?ę PÝ€ç^YôţîáVh„"ZşŚM‡Pm˝ŚÂAşÖ'cő%)ŠO§2¦kt!Ű°L#ŽĘŇńčn&†]Ű-VúşŤ\Ă*
ţ•¤ńţĽ˛FßEQĽŐ>ů†vďD -ö{”ř°ŢŻNQ–ł¬M0; ?˘ď«
řř=ó[–˛,‰Ĺ:˙=óń1ýľĘ‹,I·Áhf¬î/lží5;±t
)Ó©ţ*ç¶YtÚ•ĂÍ1+ň´B/ňŔŰOĐ‘TÁ:Ň©Pę ›.Ą§F¦KmW@ęc±(™ŐÄMp Ęřňş -LBúŇzżfţ˘>‚\Ó”ęŁ"đSŐŔ9ŤąčóĆ.Zé"˘†*ď‹®›
ŠňŘ7!÷IZTÓ<Şl[… -€L[›Čçż`s˛x‰â÷ĺ ŢEYy~„ÖëŰ@–ăČ:ţ‚±ŃqČ°K‡HL¤éXýţ•fŮęWpF*F#;}BLD0dŃ0cK…"RŐčw]ő
–ÇYr’]ăąĘt^÷niĆKKăÂúN˛ľŹ›ňą;jş©ţ(_Šců<çŞŘUÉřS9đ<ŤbuTľři|\łJ›Ţ}€ĘŃ‚±K&OË^?śQ´ßCŃHęÓYvśöi]Ş`-ň‘Ł®lâ*Ť×FwiuRv/´ßV;o%RşśČE4BY-iu9ŢL¨U×3ĆZĆE ¶çNAôŽmIĚBÔ rĚ!6ÜńŃŐŮE„>ˇŔ¬«fk*Ë -Zx… -o$E|$řqĺ`Ţ°m©6Zy“Ą5‚Ő‡pć‡ďÂi fŁ@#ętę…šEŐW€Veči„uéwQ4ÓTçüu©ŮT}éËB -č÷ĽGYtč6 `Ýyy‹m·âÎáîŃXqç0<oř'g0řĆ?g獿_$˙±\ÚxÉż,Đ ¸Ř ô)ťeů›%۲ÁýX¦őD†Ó‚ńś.Šě\Î6@{ę,¤6“;ŕwB_t°ě˛)K·Ĺî
d’žÎĹhĄ)Űż™ŤůąđÄ-|›éůŕĄńđW!vk[-/íÎěj(ňűg!éB\#rq[˘Ć+A´ TŤR~‡ÁŽůvWiy…w±Ô¸´˙092°ţ§˙—ţëkzć +xÚ•MkÂ@†ďű+ć¸f;3›Ý$ÇTŁU4ˇi(”TDü(‚´(ýű]×´ôŇÓŔË;3 Ä}#îúĚé̱f
BâH[&h–ĐJăÔ´1™&kýRHű›íJElQö‹Ónµ?ÎŹ›Ăţ\E#Ţů&…s6щ±°Ř‰vŠ°ôůP›,…ĎĐÚAĚĆĎ-<‰Gßhxh®‰I“3°Ďľ˝2ŰđţgÚČ"Ę<W1ĘnQvgĂňY‘±2{ł‡ĽěŤ‹ŽŠ]zÝš“ŞVÎĘ—YQ×縪˙¨Ý‹‚ŁTÇ.…HgŢT ęVe8č\Ty?a®ˇśo¶§Ź•ľAţm.5Ú ˙WÜ`ujő endstream endobj -1106 0 obj << +1039 0 obj << /Type /Page -/Contents 1107 0 R -/Resources 1105 0 R +/Contents 1040 0 R +/Resources 1038 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1083 0 R -/Group 1102 0 R -/Annots [ 1103 0 R 1104 0 R ] +/Parent 1004 0 R >> endobj -1101 0 obj << -/Type /XObject -/Subtype /Form -/FormType 1 -/PTEX.FileName (./main_8cpp__incl.pdf) -/PTEX.PageNumber 1 -/PTEX.InfoDict 1110 0 R -/BBox [0 0 670 224] -/Group 1102 0 R -/Resources << -/ExtGState << -/a0 << -/CA 1 -/ca 1 ->> ->>/Font << /f-0-0 1111 0 R>> ->> -/Length 1160 -/Filter /FlateDecode ->> -stream -xśĎnÜ6Ćďz -ľ€gř(ö` ( ‡´zrpě8E‘Hzčë÷›©Őj»®ě.G#‰Éů}3úŰôÎ}›8;N.µć(±űţÉýćţśČéĎ÷ĎîÍ}pź˙ę÷żü„˙ţž‚{‹ß?¦÷\đÁ=NÜĎnţÎW˝Rî‹Ë¸=Zř÷Ĺý>ŤV·SđEZn{Ĺ Á~0Kt”IżŞVe|[][xkß]ZâËÖßą˝›šo•”íŃrĂ)8*ÁÝ}ťŢ<Ý„Üą»§éý!:T˝Ä“^ůpĂz•~ź71Ş‘a$5JSîŢN?Ţť·¬Ł%_ťŢlFť?張üšUű=ˡŔÚžţ}Ac%ăşLĽö˛}Ńúűľöî)|\9ÁŢ<Ś5CnĘńh .”g’äkRFÉs0ť„â|Ę>gqQ‚o©8Ň+zSÉ^ŞŚâYÜűőůAÔß˙1 *ŇŃÄŕk-„ącEňĄ(†‚éEÁb“Rç˝nW/¨XG«Ňše#D·˛:îcË]´Ő9XwńIÂŹýúé@'˘€G»'ĽoJšÂăŞ%Ń}ÝĆÁ$Ŕp2Ăç -8«ŕvb OäOb>”Ěđ>|3ăK3
’t
Ä,¸•‚/U}˘GŠ=ŃŮ€MĆ|ărđ‘gś÷ۧ¬©ł5ËŘsÎk««ŕŘrŹ -"üuIK Ďr ¸‰ç¶d¬“Ě Đ
6÷ţ“Ň«7ŻˇžŁ':ˇŽ€ŹřŃ×Đ ‹ęCĹ=R„Äh©‚‚Ş€L× ®Ú«Aé5<ť'đlĆ“E3WŚ‹'=PěŰʶß>ęĽD4/±/rbuęü˘Řç˱Or˛¦™6éśň€w)üÝéxŕ•5Ý*x Gş-‚ęŠnk>©ęŻHWBôi'E´`oÉłăÜ–}“d Eşţ¬Ű>¶‚ě0vçnŐýlěÎxÝceÉí™ýüq“Üĺô~‰ŐAyd*‡›şÎĺÓHđů•ńÝ!ŞçEȜȚղzŞjG‹hI˝1Ö†×vÓbş¸ -˙Ś}#Íů:…ŞsŔ>^ó:§‹ŃŞ HłcŮvŰ'€”ŽĺY·
zÖďśÚ] -Ý\¬ÚV|óŞ€ 6•/ű>·¦8k™ců¬ÓýăÝôĚ<h÷ -endstream -endobj -1110 0 obj -<< -/Creator (cairo 1.8.10 \(http://cairographics.org\)) -/Producer (cairo 1.8.10 \(http://cairographics.org\)) ->> -endobj -1111 0 obj -<< -/Type /Font -/Subtype /Type0 -/BaseFont /FreeSans -/Encoding /Identity-H -/DescendantFonts [ 1112 0 R] -/ToUnicode 1113 0 R ->> -endobj -1112 0 obj -<< -/Type /Font -/Subtype /CIDFontType2 -/BaseFont /FreeSans -/CIDSystemInfo << -/Registry (Adobe) -/Ordering (Identity) -/Supplement 0 ->> -/FontDescriptor 1114 0 R -/W [ 0 [ 500 833 556 222 556 278 500 556 556 556 222 556 556 556 611 944 333 278 556 500 722 500 278 667 556 500 722 667 556]] ->> -endobj -1113 0 obj -<< -/Length 1115 0 R -/Filter /FlateDecode ->> -stream -xś]ŇMn0ŕ=§e»ŔâDBHUşaŃ5íŔR¤b,CÜľĆĎJĄ"%Ň—ńŘĽxŇsóÜaˇôÝMęÂőŃŽçéćSÇ×Á$"'=¨%*|«±µIę›/ëĽđŘ~JŞŠŇ_ś·ŇĂ“ž:~L(}sšÝ`®ôđuľŕ§ËÍÚŮ,”%uMš{żÝKk_Ű‘)
Í»Fűú°¬;ßö·âsµLy°Ŕ+©Iól[Ĺ®5WNŞĚ?5U˝ę„ŤţWĎŹhëzőÝş°\řĺYvĐuP hť b¨ĘŁ¨í!$3čZ ť‚ĘjQSPĺ‚Ž†$ÄAĹę±'j"ĂéŘE ź, / -ů$ŢZ źŚ» źÄ "ć‹Bľ2öĹ|H$Oâ?ČWÄóŻč ä“e¸¨x#Ű•móuźusÎŹBÂ0Űí†ďsj'»u…Ď/×î»ę -endstream -endobj -1114 0 obj -<< -/Type /FontDescriptor -/FontName /FreeSans -/Flags 4 -/FontBBox [ -958 -462 1632 1050] -/ItalicAngle 0 -/Ascent 1000 -/Descent -300 -/CapHeight 1050 -/StemV 80 -/StemH 80 -/FontFile2 1116 0 R ->> -endobj -1115 0 obj -345 -endobj -1116 0 obj -<< -/Length 1117 0 R -/Filter /FlateDecode -/Length1 3180 ->> -stream -xśeV}L[׿÷ú°ů0Ć6`6Źo›Źđ0&6¶ Śť`1á3&` ]JHRňµ$K“lŤš¤I—¬S·ik«hzlëmÓŇÓV©´l‘"ŞµŰŞĄ
٦tjňOĎ;÷=‡0
sď}çĽsÎ=çwÎ=ď"ŚJAÇGcĂsčË˙ĽŽPŇ
ŕ.ŚÎď7J{ĺgJ.şhbnOLvî”čí@˙~ĎôÁ ŰĘżÁ3Č'ˇčřđŘ—ÇWoÁŕŐG!˙ś°@Sů˘hl˙BSˇžS¦Ţ?=;:ŰśšÚX
/ĚáëT^Ú8÷ÜřśćLä@/ -[nĆÂN -Mm}3N“déěň†Ç*““]Yą,éLVći*ł›ňŠ6—4746Éü®`ÎxgS=Ţ÷V‡›˙ ślK..ë´ëKňs2Ň)R™<7WWRVYĂ˙¦Ł"˘ĘPUú,Ô'Gü+ô -Y1Ň@Ś6-c}ĹďůÚc˘úóä$€)â?ß5ëřčţfGcWżż±¶Ő8m5^;żOU7űřż‚~XąŤ˘°˘;܎µ[_ÁÝl *Leé -s~ĎjŘ&sak/č×ŔyŠ‘ű¨Nzm±ÖUăDŇŻ·'‰4 SX%)eµY›ŢŐŕ-N?ýöK玜ÇAéëŐ;nvîH/kŮc/÷xŠqPcŢą5·˘\ďgjŠOŤ~íŔT{·ÓVQ“ą9kw[ţ–ćŞM©Ś-Ü$+¨Ż+űNä…‡Ľ¤ĐŞÁ‰s
-G˙ě\ăŚ}‹GgćŹĚş}>·kG1\>süŇeśtą;öëX,<<#bžçńŔľµ•Đ,Z©‰mXÂjđÉţ•ňHAŽAť»Ii\ -ť&޵ÓÓ©ą>ĎOŇř(ő%Ó5¨=µŔŞMµş9S*:aĆ!śsîµďžýŐŤéąąédů·üŤw{/ś=wAŘ»t_]ĄXű¬łÉÁ7ńÔ[fř8ŠÇˇĽ„÷ń÷xžôě˙§ŕł†ć;Qě -Ć®fń§žb_c× -j¨5
ŘÖBŃĂ÷+ĺ"ÚďQ‘C´^Đ—BŻčD~ří¬í„_E8dáĆĂUř‚\ç|C̶lNn6‡ŢbČx—ĂšŞěJ[ŚĆŹŞ9…94Ű÷đ^cĐ86Ň`0™BS¨’#OoĐĹ„L•śÄ2™mäZ}A× -o¤jŇÄ?6|2€\pÍđoPădć çž üP¶‘YRĂý•śÜ˛TĎ€SĆ3á°C`EaY*Xë¬$K¦Ú¸Ąş‰¨aű‹‹Ď‘ăCéMORň€Â÷‡ż7‘§ëŞŻ•ď–ć"zé{Š3Ě’ü]Ô/kŐ±zEľ;Áö—ŹŁ6‰ą‰U OV7Öˇ>ŕŔs=Ś2b‰?„wÎMeóÉ(ę—pH‡»‘äÓ€—:…äOHk -đ2É5Tü" ł€şh{bo¸!¨\ýwÁ8î• ŤÜG Ü_É{0ţQ4ŔxĽ“BmIá.*yéá;_>4.}†÷r¸őÉßAH}Ovg`Ľ#Ŕ‚…oˇ1ô<D “`%!é-?…<\’/¸„ń·BKnšX.Ş%«Ž…ň!Őá â¤F'1;ą$Łë'Ňoł@(€HjLr Y BftýP™G :™ŞL)ôeňŃxâ%ć” ă© ĄĚ$ć%‰{H•K•\Dëś4ĘQ -š N:ĺ¤mäd€‘ôÖuRM26„ţüÉČ -endstream -endobj -1117 0 obj -2364 -endobj -1102 0 obj -<< -/Type /Group -/S /Transparency -/CS /DeviceRGB ->>endobj -1103 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [126.921 379.897 148.839 390.428] -/A << /S /GoTo /D (main_8cpp_adacbe0175a79dff748855d8c9839f82b) >> ->> endobj -1104 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [361.57 321.343 433.569 332.247] -/A << /S /GoTo /D (LIBUSE_CallingSequence) >> ->> endobj -1108 0 obj << -/D [1106 0 R /XYZ 89 770.89 null] ->> endobj -402 0 obj << -/D [1106 0 R /XYZ 90 739.935 null] ->> endobj -1109 0 obj << -/D [1106 0 R /XYZ 90 398.078 null] ->> endobj -406 0 obj << -/D [1106 0 R /XYZ 90 366.679 null] ->> endobj -410 0 obj << -/D [1106 0 R /XYZ 90 308.125 null] ->> endobj -719 0 obj << -/D [1106 0 R /XYZ 90 283.797 null] ->> endobj -414 0 obj << -/D [1106 0 R /XYZ 90 283.797 null] +1041 0 obj << +/D [1039 0 R /XYZ 89 770.89 null] >> endobj -1105 0 obj << -/Font << /F22 424 0 R /F37 577 0 R /F23 425 0 R /F14 778 0 R /F46 1045 0 R >> -/XObject << /Im4 1101 0 R >> +1038 0 obj << +/Font << /F22 400 0 R /F23 401 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1181 0 obj << -/Length 689 +1105 0 obj << +/Length 702 /Filter /FlateDecode >> stream -xÚÍMŹ›0†ďů>‚ÔP0„#‡¸uLdśVŐŞBŰÝí‡Tíˇ§ţüšÂn!ÄQ ä%D™×OfĆć ř Čđč}-o7®\ß W!ň+ BĎľä#¸łčóăÓoűł|÷¤"<9QŕU -"h,ioP -ü1˘Ő@`L¸5dË@{j0'ŞĆőYxĆÖܢzčcźnL¸kĽŤ%ąă¤Ť©ž¶ĆĆrńâuÍ -Ö7łšWúď}{9N?ÔŰEłŔ˙gXşkčĚŠ·šaĺ¶ĺ2(ÝsL×Ń®-1íťşÇ5†Â|ľ_vKZ}Ó4J˝}R‘”ĘvŚf[}ÚµüůG{C–=÷Ź‡]Ń5ÎëX‘ţ×SGsh»CA“ó™›Čd˛Âh—ś›ľ™®-ö„$Ű »Ä'^ěë/IĐĹbůűa'Äń;‘‹?áŐ° +xÚÍ—MŹ›0†ďů>‚ÔPbGqKLdśVŐŞBŰÝí‡Tíˇ§ţüšB¶!ŠłłaQB”?yglżŃ7„Q:Ă'ď+5{»v]ä.ś`¤ľ˘#?đĽđşG7ĽřmVďž‚t„‡B'ô]ż +ŔhN±CHýó(˛ŘŠ™Ëh\Ů[{)¬r ˘ă\Šć„čřer{{÷đxWţüńĄ +uľżiVĂ _Ő’Ő™ÎĐÍÜĄŘňp‹Fç:“óCÄ<Ë"iűÔúT®¸’‘M±#r
‰lJĽzT]„ŕ"74CXٵ"‘ض>ňDm¦ŞÎ‹ÔăŰ<aPE1ĺ7‘,;Ź°Ľ&B.“é6lś%«§<+e‡žŐß ÁU6¬~éš”,_Cibş_˛F^‡#čp¤2űŚ•ét‡Ć†Eş?Ë“<OŔ \•Íóô…©i˛lýĺjčť»ć餯Ł[Vź[×ĆéEä‚MZ•b%_IeÚJ1©*j÷JúCŰQě4„ßXŇÎ €\Ďw8@Ôőş¤€"ů
[x†íM*źšń¤s¶ś„Č4E{¤$c`(CŞôř›ŢµűÇ/Ă+÷ç흧]×Ŕ˙$Ă:öçěL<`‚HpQŇj +x˝»%©ľiĄŢ>‰ŚË5϶O7ýE8vĐÔŻÓŰlS†yÇýÓĆaWtM‡‹:V&Ďš endstream endobj -1180 0 obj << +1104 0 obj << /Type /Page -/Contents 1181 0 R -/Resources 1179 0 R +/Contents 1105 0 R +/Resources 1103 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1083 0 R -/Annots [ 1118 0 R 1119 0 R 1120 0 R 1121 0 R 1122 0 R 1123 0 R 1124 0 R 1125 0 R 1126 0 R 1127 0 R 1128 0 R 1129 0 R 1130 0 R 1131 0 R 1132 0 R 1133 0 R 1134 0 R 1135 0 R 1136 0 R 1137 0 R 1138 0 R 1139 0 R 1140 0 R 1141 0 R 1142 0 R 1143 0 R 1144 0 R 1145 0 R 1146 0 R 1147 0 R 1148 0 R 1149 0 R 1150 0 R 1151 0 R 1152 0 R 1153 0 R 1154 0 R 1155 0 R 1156 0 R 1157 0 R 1158 0 R 1159 0 R 1160 0 R 1161 0 R 1162 0 R 1163 0 R 1164 0 R 1165 0 R 1166 0 R 1167 0 R 1168 0 R 1169 0 R 1170 0 R 1171 0 R 1172 0 R 1173 0 R 1174 0 R 1175 0 R 1176 0 R 1177 0 R ] +/Parent 1107 0 R +/Annots [ 1042 0 R 1043 0 R 1044 0 R 1045 0 R 1046 0 R 1047 0 R 1048 0 R 1049 0 R 1050 0 R 1051 0 R 1052 0 R 1053 0 R 1054 0 R 1055 0 R 1056 0 R 1057 0 R 1058 0 R 1059 0 R 1060 0 R 1061 0 R 1062 0 R 1063 0 R 1064 0 R 1065 0 R 1066 0 R 1067 0 R 1068 0 R 1069 0 R 1070 0 R 1071 0 R 1072 0 R 1073 0 R 1074 0 R 1075 0 R 1076 0 R 1077 0 R 1078 0 R 1079 0 R 1080 0 R 1081 0 R 1082 0 R 1083 0 R 1084 0 R 1085 0 R 1086 0 R 1087 0 R 1088 0 R 1089 0 R 1090 0 R 1091 0 R 1092 0 R 1093 0 R 1094 0 R 1095 0 R 1096 0 R 1097 0 R 1098 0 R 1099 0 R 1100 0 R 1101 0 R ] >> endobj -1118 0 obj << +1042 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [163.584 608.529 175.539 618.716] -/A << /S /GoTo /D (page.35) >> +/A << /S /GoTo /D (page.30) >> >> endobj -1119 0 obj << +1043 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [163.584 584.593 175.539 594.78] -/A << /S /GoTo /D (page.36) >> +/A << /S /GoTo /D (page.32) >> >> endobj -1120 0 obj << +1044 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [163.584 560.658 175.539 570.844] -/A << /S /GoTo /D (page.34) >> +/A << /S /GoTo /D (page.29) >> >> endobj -1121 0 obj << +1045 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [163.584 536.722 175.539 546.909] -/A << /S /GoTo /D (page.35) >> +/A << /S /GoTo /D (page.30) >> >> endobj -1122 0 obj << +1046 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [163.584 512.786 175.539 522.973] -/A << /S /GoTo /D (page.34) >> +/A << /S /GoTo /D (page.30) >> >> endobj -1123 0 obj << +1047 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [163.584 488.851 175.539 499.037] -/A << /S /GoTo /D (page.34) >> +/A << /S /GoTo /D (page.30) >> >> endobj -1124 0 obj << +1048 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [163.584 464.915 175.539 475.102] -/A << /S /GoTo /D (page.35) >> +/A << /S /GoTo /D (page.30) >> >> endobj -1125 0 obj << +1049 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [163.584 440.979 175.539 451.166] -/A << /S /GoTo /D (page.35) >> +/A << /S /GoTo /D (page.30) >> >> endobj -1126 0 obj << +1050 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [163.584 417.044 175.539 427.23] -/A << /S /GoTo /D (page.36) >> +/A << /S /GoTo /D (page.32) >> >> endobj -1127 0 obj << +1051 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [163.584 393.108 175.539 403.295] -/A << /S /GoTo /D (page.33) >> +/A << /S /GoTo /D (page.29) >> >> endobj -1128 0 obj << +1052 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [163.584 369.172 175.539 379.359] -/A << /S /GoTo /D (page.33) >> +/A << /S /GoTo /D (page.29) >> >> endobj -1129 0 obj << +1053 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [163.584 345.237 175.539 355.423] -/A << /S /GoTo /D (page.35) >> +/A << /S /GoTo /D (page.30) >> >> endobj -1130 0 obj << +1054 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [163.584 321.301 175.539 331.488] -/A << /S /GoTo /D (page.35) >> +/A << /S /GoTo /D (page.31) >> >> endobj -1131 0 obj << +1055 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [163.584 297.365 175.539 307.552] -/A << /S /GoTo /D (page.33) >> +/A << /S /GoTo /D (page.29) >> >> endobj -1132 0 obj << +1056 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [163.584 273.43 175.539 283.616] -/A << /S /GoTo /D (page.33) >> +/A << /S /GoTo /D (page.28) >> >> endobj -1133 0 obj << +1057 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [163.584 249.494 175.539 259.681] -/A << /S /GoTo /D (page.33) >> +/A << /S /GoTo /D (page.28) >> >> endobj -1134 0 obj << +1058 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [163.584 225.558 175.539 235.745] -/A << /S /GoTo /D (page.33) >> +/A << /S /GoTo /D (page.29) >> >> endobj -1135 0 obj << +1059 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [163.584 201.623 175.539 211.809] -/A << /S /GoTo /D (page.33) >> +/A << /S /GoTo /D (page.29) >> >> endobj -1136 0 obj << +1060 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [163.584 177.687 175.539 187.874] -/A << /S /GoTo /D (page.33) >> +/A << /S /GoTo /D (page.28) >> >> endobj -1137 0 obj << +1061 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [163.584 153.751 175.539 163.938] -/A << /S /GoTo /D (page.33) >> +/A << /S /GoTo /D (page.29) >> >> endobj -1138 0 obj << +1062 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [163.584 129.816 175.539 140.002] -/A << /S /GoTo /D (page.33) >> +/A << /S /GoTo /D (page.28) >> >> endobj -1139 0 obj << +1063 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [163.584 105.88 175.539 116.067] -/A << /S /GoTo /D (page.33) >> +/A << /S /GoTo /D (page.29) >> >> endobj -1140 0 obj << +1064 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [380.065 620.497 392.02 630.684] -/A << /S /GoTo /D (page.33) >> +/A << /S /GoTo /D (page.28) >> >> endobj -1141 0 obj << +1065 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [380.065 596.559 392.02 606.745] -/A << /S /GoTo /D (page.33) >> +/A << /S /GoTo /D (page.29) >> >> endobj -1142 0 obj << +1066 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [380.065 572.621 392.02 582.807] -/A << /S /GoTo /D (page.33) >> +/A << /S /GoTo /D (page.28) >> >> endobj -1143 0 obj << +1067 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [447.791 548.682 459.746 558.869] -/A << /S /GoTo /D (page.35) >> +/A << /S /GoTo /D (page.30) >> >> endobj -1144 0 obj << +1068 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [478.774 536.713 490.73 546.9] -/A << /S /GoTo /D (page.36) >> +/A << /S /GoTo /D (page.32) >> >> endobj -1145 0 obj << +1069 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [395.458 524.744 407.413 534.931] -/A << /S /GoTo /D (page.34) >> +/A << /S /GoTo /D (page.29) >> >> endobj -1146 0 obj << +1070 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [436.703 512.775 448.658 522.962] -/A << /S /GoTo /D (page.35) >> +/A << /S /GoTo /D (page.30) >> >> endobj -1147 0 obj << +1071 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [416.887 500.806 428.842 510.993] -/A << /S /GoTo /D (page.34) >> +/A << /S /GoTo /D (page.30) >> >> endobj -1148 0 obj << +1072 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [446.217 488.837 458.172 499.024] -/A << /S /GoTo /D (page.34) >> +/A << /S /GoTo /D (page.30) >> >> endobj -1149 0 obj << +1073 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [452.852 476.868 464.807 487.054] -/A << /S /GoTo /D (page.35) >> +/A << /S /GoTo /D (page.30) >> >> endobj -1150 0 obj << +1074 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [457.285 464.899 469.24 475.085] -/A << /S /GoTo /D (page.35) >> +/A << /S /GoTo /D (page.30) >> >> endobj -1151 0 obj << +1075 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [456.518 452.93 468.473 463.116] -/A << /S /GoTo /D (page.36) >> +/A << /S /GoTo /D (page.32) >> >> endobj -1152 0 obj << +1076 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [440.13 440.96 452.085 451.147] -/A << /S /GoTo /D (page.33) >> +/A << /S /GoTo /D (page.29) >> >> endobj -1153 0 obj << +1077 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [454.127 428.991 466.082 439.178] -/A << /S /GoTo /D (page.33) >> +/A << /S /GoTo /D (page.29) >> >> endobj -1154 0 obj << +1078 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [468.344 417.022 480.299 427.209] -/A << /S /GoTo /D (page.35) >> +/A << /S /GoTo /D (page.30) >> >> endobj -1155 0 obj << +1079 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [457.285 405.053 469.24 415.24] -/A << /S /GoTo /D (page.35) >> +/A << /S /GoTo /D (page.31) >> >> endobj -1156 0 obj << +1080 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [459.258 393.084 471.213 403.271] -/A << /S /GoTo /D (page.33) >> +/A << /S /GoTo /D (page.29) >> >> endobj -1157 0 obj << +1081 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [420.195 381.115 432.15 391.302] -/A << /S /GoTo /D (page.33) >> +/A << /S /GoTo /D (page.28) >> >> endobj -1158 0 obj << +1082 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [437.908 369.146 449.863 379.332] -/A << /S /GoTo /D (page.33) >> +/A << /S /GoTo /D (page.28) >> >> endobj -1159 0 obj << +1083 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [433.644 357.177 445.599 367.363] -/A << /S /GoTo /D (page.33) >> +/A << /S /GoTo /D (page.29) >> >> endobj -1160 0 obj << +1084 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [465.923 345.208 477.878 355.394] -/A << /S /GoTo /D (page.33) >> +/A << /S /GoTo /D (page.29) >> >> endobj -1161 0 obj << +1085 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [428.493 333.239 440.449 343.425] -/A << /S /GoTo /D (page.33) >> +/A << /S /GoTo /D (page.28) >> >> endobj -1162 0 obj << +1086 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [457.454 321.269 469.41 331.456] -/A << /S /GoTo /D (page.33) >> +/A << /S /GoTo /D (page.29) >> >> endobj -1163 0 obj << +1087 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [435.328 309.3 447.283 319.487] -/A << /S /GoTo /D (page.33) >> +/A << /S /GoTo /D (page.28) >> >> endobj -1164 0 obj << +1088 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [450.252 297.331 462.207 307.518] -/A << /S /GoTo /D (page.33) >> +/A << /S /GoTo /D (page.29) >> >> endobj -1165 0 obj << +1089 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [458.351 285.362 470.306 295.549] -/A << /S /GoTo /D (page.33) >> +/A << /S /GoTo /D (page.28) >> >> endobj -1166 0 obj << +1090 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [458.142 273.393 470.097 283.58] -/A << /S /GoTo /D (page.33) >> +/A << /S /GoTo /D (page.29) >> >> endobj -1167 0 obj << +1091 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [462.008 261.424 473.963 271.611] -/A << /S /GoTo /D (page.33) >> +/A << /S /GoTo /D (page.28) >> >> endobj -1168 0 obj << +1092 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [457.913 249.455 469.868 259.641] -/A << /S /GoTo /D (page.33) >> +/A << /S /GoTo /D (page.29) >> >> endobj -1169 0 obj << +1093 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [345.336 226.871 357.291 235.717] -/A << /S /GoTo /D (page.34) >> +/Rect [345.336 226.751 357.291 235.717] +/A << /S /GoTo /D (page.29) >> >> endobj -1170 0 obj << +1094 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [427.029 201.606 438.984 211.793] -/A << /S /GoTo /D (page.34) >> +/A << /S /GoTo /D (page.29) >> >> endobj -1171 0 obj << +1095 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [411.746 177.682 423.701 187.869] -/A << /S /GoTo /D (page.34) >> +/A << /S /GoTo /D (page.29) >> >> endobj -1172 0 obj << +1096 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [434.78 153.758 446.735 163.944] -/A << /S /GoTo /D (page.34) >> +/A << /S /GoTo /D (page.29) >> >> endobj -1173 0 obj << +1097 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [486.575 141.789 498.531 151.975] -/A << /S /GoTo /D (page.34) >> +/A << /S /GoTo /D (page.29) >> >> endobj -1174 0 obj << +1098 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [496 129.82 507.955 140.006] -/A << /S /GoTo /D (page.34) >> +/A << /S /GoTo /D (page.29) >> >> endobj -1175 0 obj << +1099 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [462.775 117.85 474.73 128.037] -/A << /S /GoTo /D (page.36) >> +/A << /S /GoTo /D (page.32) >> >> endobj -1176 0 obj << +1100 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [403.597 105.881 415.552 116.068] -/A << /S /GoTo /D (page.36) >> +/A << /S /GoTo /D (page.32) >> >> endobj -1177 0 obj << +1101 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [390.317 93.912 402.272 104.099] -/A << /S /GoTo /D (page.33) >> +/A << /S /GoTo /D (page.28) >> >> endobj -1182 0 obj << -/D [1180 0 R /XYZ 89 770.89 null] +1106 0 obj << +/D [1104 0 R /XYZ 89 770.89 null] >> endobj -1179 0 obj << -/Font << /F22 424 0 R /F23 425 0 R >> +1103 0 obj << +/Font << /F22 400 0 R /F23 401 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1268 0 obj << -/Length 1146 +1193 0 obj << +/Length 1147 /Filter /FlateDecode >> stream -xÚ͚ے˘H†ď}Šş„•BP.J›Y.`ÄĚöN´–¶.âŚ=OżŇ•ĐęµoDľúł2++“sŔa«ď·ľ -§ČPţ(<čĘ'AřSpĎt űĂ˙ -D…ç^ ĺW
[G߲ZČoýŰĘ®ó@Č–ş\W”ŔdŮş˙Á)ąţđś¨ôŔŻü®%č@‘#ŕµţjńBÄ7Bž|‡čBrěÂý¸ŞĘvxFC¶ŚÜě«“}řHó
Çţ#´W’ĚIî°îŰPâQ.~ߏH>Ú‚Ŕ)’t‚v‘‡üŔ°ű¬Ŕ3ăÁ -,jmV”Ő4ěa-´T폼qŕŞň¨ąĚwUŰłĆߨ‰ŰŢx4r\VÎâKF¬5íź !‹Yůzí›ä稶f&Pbľz&¤VµĘ0xÖ°ĎJ3Ö
çŘdRrĐ 9 i<şnő8cżO‚ňďꩦő
ßó]¤Zͧ˘Ô—Ň»Qd!Ë)<ŠÜ}Âró|zđ\a8Áń$ŮŤÜ#u-ď9Iwµ``–iďüSyŇeň:´ĺyűs{‡«NĄÖŘ3´wfRţúÚĹ~Îő$á‘+/ťävY^»©¶cŁĎ9żŢ!íîóĹf¶…SS%7SEŐ[
Çvţ¤fuĂ„{ZˇŢjţOÚ[mBGőď–Ésą|łńOŞkj‘š)ySŚß*:źkwjăźťąY©«äŃßÎtĽ™TPáµúŔBžŮÎPä-~ăMC _ĘbˇÄĚpbLqś.ţáy“†ŕă#€‚ĚuzȢČÉ°s0ѵĚ?ßpÇŰeż†śÎą†ŻÔŐ%úxWÖ]°™ÍwÍ™ź=j"ęôŔoD”4K)ŕtŚXMXˇÇĚ›:»ŚKÂFŤ'ý§ôâř{±.צ„F<[yi˛ť¤U`éŚÁ…''«xF˘ş!éČŘ’Ůë($HVSśč8 -ź®#Í’p‰MĎÓÇë@‹ĚÍ`E&ÎÖýOV]Ë\oSí1Ścm.DÎ[†»şŃzţő9Ű”Řz ‹FË •ęµY™‡Ż{9ö^bĄöBů%S^H”¶·ES30LD͆—‚ëş·×$:P<ѢŐ_÷^yByć AâÔ\<d¶ŠÖ=ë¤=§WCU–"m”ĺź$7jPŹ2ÔY㸊ŁśĺÜ©¶n˘ŕ5ćHÇĺR.ś,ś†z†
]éţIŇN¬Ĺ®Ń!Wl§Ëu°NVYV‹0–ĎöxââĽJ©‹gŤÄvĎ0]EOŢ6IVŰxjU/Ă*\2©oz5ęC,/\Ź|ĎôĺÎüÉxC"á:Á#
ËĹnşĘ$ţŠĹtGL&t$xDôü^ΤŁwóN
—U·a¨»}ž¶6ň˙ŇÚš¬noÓŁÚŰô¨ő6•¤¬îĽ@RU[úR¨<vüžČ‰<lú˙ +xÚÍšßs˘HÇßý+x„Ş7”G„Ń°Ç°jws[Ń1± +1‡¸›Ü_’Í*D Ěj^D>óťîžžnJŔÝs€÷†AďĎ„ś*Ş +T¸`Á©€ë+’ Äs·ŕ'«@TDÚ]5Îčá ÷o/ż8i÷0ę‹}qłUďöŕćôú'˛:ŕ~ěîZq×P¦Çó{÷Ŕů! ß!âúűp?®¦ ×€×±Ł‡/˙ęćÖÓuţŘ Ú+IďI޸ÇÝ^AxżďG¤W’$Ş•ĐöqšÎP +ń4(żÖĆLÚĐüŔĂšÝŮ{_˘7W»Ťm·đ(ööyĐŰĄéç +iQ4#É,Ś—wůŤâCťő”Tˇĺ-'žŽL˶ĚńMđqĺůűsg‡gśG©ŇR©=őMý[ňŞ(Ä’;ĺ•F®LYµ˛ă:řcÚן`¬ß|<můÎJŐńľ\çK–Ţ:=vŮ"î_Ě|1h7rąđ˝”ýËuňĄlrTV33h)Ł¨ÂĎ3ľRS´_Ě +Ąź™©ť’_Z‚˛ĺ,y⥸”3N6żi;9>Ň!Q+˛,*đş$r¸]d3«E:Ú´ŞŞ‡;~»Ŕ±żüŹlZŹÚë‚%@Ä/HjÎI’-˙ endstream endobj -1267 0 obj << +1192 0 obj << /Type /Page -/Contents 1268 0 R -/Resources 1266 0 R +/Contents 1193 0 R +/Resources 1191 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1083 0 R -/Annots [ 1178 0 R 1183 0 R 1184 0 R 1185 0 R 1186 0 R 1187 0 R 1188 0 R 1189 0 R 1190 0 R 1191 0 R 1192 0 R 1193 0 R 1194 0 R 1195 0 R 1196 0 R 1197 0 R 1198 0 R 1199 0 R 1200 0 R 1201 0 R 1202 0 R 1203 0 R 1204 0 R 1205 0 R 1206 0 R 1207 0 R 1208 0 R 1209 0 R 1210 0 R 1211 0 R 1212 0 R 1213 0 R 1214 0 R 1215 0 R 1216 0 R 1217 0 R 1218 0 R 1219 0 R 1220 0 R 1221 0 R 1222 0 R 1223 0 R 1224 0 R 1225 0 R 1226 0 R 1227 0 R 1228 0 R 1229 0 R 1230 0 R 1231 0 R 1232 0 R 1233 0 R 1234 0 R 1235 0 R 1236 0 R 1237 0 R 1238 0 R 1239 0 R 1240 0 R 1241 0 R 1242 0 R 1243 0 R 1244 0 R 1245 0 R 1246 0 R 1247 0 R 1248 0 R 1249 0 R 1250 0 R 1251 0 R 1252 0 R 1253 0 R 1254 0 R 1255 0 R 1256 0 R 1257 0 R 1258 0 R 1259 0 R 1260 0 R 1261 0 R 1262 0 R 1263 0 R 1264 0 R ] +/Parent 1107 0 R +/Annots [ 1102 0 R 1108 0 R 1109 0 R 1110 0 R 1111 0 R 1112 0 R 1113 0 R 1114 0 R 1115 0 R 1116 0 R 1117 0 R 1118 0 R 1119 0 R 1120 0 R 1121 0 R 1122 0 R 1123 0 R 1124 0 R 1125 0 R 1126 0 R 1127 0 R 1128 0 R 1129 0 R 1130 0 R 1131 0 R 1132 0 R 1133 0 R 1134 0 R 1135 0 R 1136 0 R 1137 0 R 1138 0 R 1139 0 R 1140 0 R 1141 0 R 1142 0 R 1143 0 R 1144 0 R 1145 0 R 1146 0 R 1147 0 R 1148 0 R 1149 0 R 1150 0 R 1151 0 R 1152 0 R 1153 0 R 1154 0 R 1155 0 R 1156 0 R 1157 0 R 1158 0 R 1159 0 R 1160 0 R 1161 0 R 1162 0 R 1163 0 R 1164 0 R 1165 0 R 1166 0 R 1167 0 R 1168 0 R 1169 0 R 1170 0 R 1171 0 R 1172 0 R 1173 0 R 1174 0 R 1175 0 R 1176 0 R 1177 0 R 1178 0 R 1179 0 R 1180 0 R 1181 0 R 1182 0 R 1183 0 R 1184 0 R 1185 0 R 1186 0 R 1187 0 R 1188 0 R 1189 0 R ] >> endobj -1178 0 obj << +1102 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [220.64 727.536 232.595 737.723] -/A << /S /GoTo /D (page.36) >> +/A << /S /GoTo /D (page.32) >> >> endobj -1183 0 obj << +1108 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [242.936 715.581 254.891 725.768] -/A << /S /GoTo /D (page.33) >> +/A << /S /GoTo /D (page.28) >> >> endobj -1184 0 obj << +1109 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [223.658 703.626 235.613 713.812] -/A << /S /GoTo /D (page.34) >> +/A << /S /GoTo /D (page.30) >> >> endobj -1185 0 obj << +1110 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [212.59 691.671 224.545 701.857] -/A << /S /GoTo /D (page.34) >> +/A << /S /GoTo /D (page.30) >> >> endobj -1186 0 obj << +1111 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [247.638 679.715 259.593 689.902] -/A << /S /GoTo /D (page.35) >> +/Rect [212.59 679.715 224.545 689.902] +/A << /S /GoTo /D (page.30) >> >> endobj -1187 0 obj << +1112 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [230.313 667.76 242.268 677.947] -/A << /S /GoTo /D (page.36) >> +/Rect [247.638 667.76 259.593 677.947] +/A << /S /GoTo /D (page.31) >> >> endobj -1188 0 obj << +1113 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [215.349 655.805 227.305 665.992] -/A << /S /GoTo /D (page.35) >> +/Rect [230.313 655.805 242.268 665.992] +/A << /S /GoTo /D (page.32) >> >> endobj -1189 0 obj << +1114 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [128.854 633.235 140.809 642.081] -/A << /S /GoTo /D (page.33) >> +/Rect [215.349 643.85 227.305 654.037] +/A << /S /GoTo /D (page.30) >> >> endobj -1190 0 obj << +1115 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [209.332 619.94 221.287 630.126] -/A << /S /GoTo /D (page.32) >> +/Rect [128.854 621.16 140.809 630.126] +/A << /S /GoTo /D (page.29) >> >> endobj -1191 0 obj << +1116 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [191.161 607.984 203.116 618.171] -/A << /S /GoTo /D (page.32) >> +/Rect [209.332 607.984 221.287 618.171] +/A << /S /GoTo /D (page.28) >> >> endobj -1192 0 obj << +1117 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [217.362 596.029 229.317 606.216] -/A << /S /GoTo /D (page.33) >> +/Rect [191.161 596.029 203.116 606.216] +/A << /S /GoTo /D (page.28) >> >> endobj -1193 0 obj << +1118 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [184.754 584.074 196.71 594.261] -/A << /S /GoTo /D (page.33) >> +/Rect [217.362 584.074 229.317 594.261] +/A << /S /GoTo /D (page.28) >> >> endobj -1194 0 obj << +1119 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [226.039 572.119 237.995 582.306] -/A << /S /GoTo /D (page.33) >> +/Rect [184.754 572.119 196.71 582.306] +/A << /S /GoTo /D (page.28) >> >> endobj -1195 0 obj << +1120 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 548.209 175.539 558.395] -/A << /S /GoTo /D (page.33) >> +/Rect [226.039 560.164 237.995 570.35] +/A << /S /GoTo /D (page.28) >> >> endobj -1196 0 obj << +1121 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 524.298 175.539 534.485] -/A << /S /GoTo /D (page.34) >> +/Rect [163.584 536.253 175.539 546.44] +/A << /S /GoTo /D (page.29) >> >> endobj -1197 0 obj << +1122 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 500.388 175.539 510.575] -/A << /S /GoTo /D (page.34) >> +/Rect [163.584 512.343 175.539 522.53] +/A << /S /GoTo /D (page.29) >> >> endobj -1198 0 obj << +1123 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 476.478 175.539 486.664] -/A << /S /GoTo /D (page.34) >> +/Rect [163.584 488.433 175.539 498.619] +/A << /S /GoTo /D (page.29) >> >> endobj -1199 0 obj << +1124 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 440.612 175.539 450.799] -/A << /S /GoTo /D (page.34) >> +/Rect [163.584 464.522 175.539 474.709] +/A << /S /GoTo /D (page.29) >> >> endobj -1200 0 obj << +1125 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 416.702 175.539 426.888] -/A << /S /GoTo /D (page.34) >> +/Rect [163.584 428.657 175.539 438.844] +/A << /S /GoTo /D (page.29) >> >> endobj -1201 0 obj << +1126 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 392.791 175.539 402.978] -/A << /S /GoTo /D (page.34) >> +/Rect [163.584 404.747 175.539 414.933] +/A << /S /GoTo /D (page.29) >> >> endobj -1202 0 obj << +1127 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 368.881 175.539 379.068] -/A << /S /GoTo /D (page.36) >> +/Rect [163.584 380.836 175.539 391.023] +/A << /S /GoTo /D (page.29) >> >> endobj -1203 0 obj << +1128 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 344.971 175.539 355.157] -/A << /S /GoTo /D (page.36) >> +/Rect [163.584 356.926 175.539 367.113] +/A << /S /GoTo /D (page.32) >> >> endobj -1204 0 obj << +1129 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 321.06 175.539 331.247] -/A << /S /GoTo /D (page.33) >> +/Rect [163.584 333.016 175.539 343.202] +/A << /S /GoTo /D (page.32) >> >> endobj -1205 0 obj << +1130 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 297.15 175.539 307.337] -/A << /S /GoTo /D (page.36) >> +/Rect [163.584 309.105 175.539 319.292] +/A << /S /GoTo /D (page.28) >> >> endobj -1206 0 obj << +1131 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 273.24 175.539 283.426] -/A << /S /GoTo /D (page.33) >> +/Rect [163.584 285.195 175.539 295.382] +/A << /S /GoTo /D (page.32) >> >> endobj -1207 0 obj << +1132 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 249.329 175.539 259.516] -/A << /S /GoTo /D (page.34) >> +/Rect [163.584 261.285 175.539 271.471] +/A << /S /GoTo /D (page.28) >> >> endobj -1208 0 obj << +1133 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 225.419 175.539 235.606] -/A << /S /GoTo /D (page.34) >> +/Rect [163.584 237.374 175.539 247.561] +/A << /S /GoTo /D (page.30) >> >> endobj -1209 0 obj << +1134 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 201.509 175.539 211.695] -/A << /S /GoTo /D (page.35) >> +/Rect [163.584 213.464 175.539 223.651] +/A << /S /GoTo /D (page.30) >> >> endobj -1210 0 obj << +1135 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 177.598 175.539 187.785] -/A << /S /GoTo /D (page.36) >> +/Rect [163.584 189.554 175.539 199.74] +/A << /S /GoTo /D (page.30) >> >> endobj -1211 0 obj << +1136 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 153.688 175.539 163.875] -/A << /S /GoTo /D (page.35) >> +/Rect [163.584 165.643 175.539 175.83] +/A << /S /GoTo /D (page.31) >> >> endobj -1212 0 obj << +1137 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 129.778 175.539 139.964] -/A << /S /GoTo /D (page.33) >> +/Rect [163.584 141.733 175.539 151.92] +/A << /S /GoTo /D (page.32) >> >> endobj -1213 0 obj << +1138 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [174.383 117.823 186.338 128.009] -/A << /S /GoTo /D (page.23) >> +/Rect [163.584 117.823 175.539 128.009] +/A << /S /GoTo /D (page.30) >> >> endobj -1214 0 obj << +1139 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [156.879 105.867 168.834 116.054] -/A << /S /GoTo /D (page.23) >> +/Rect [163.584 93.912 175.539 104.099] +/A << /S /GoTo /D (page.29) >> >> endobj -1215 0 obj << +1140 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [178.199 93.912 190.154 104.099] -/A << /S /GoTo /D (page.23) >> +/Rect [390.864 727.536 402.819 737.723] +/A << /S /GoTo /D (page.19) >> >> endobj -1216 0 obj << +1141 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [347.348 727.536 359.303 737.723] -/A << /S /GoTo /D (page.23) >> +/Rect [373.36 715.581 385.315 725.768] +/A << /S /GoTo /D (page.19) >> >> endobj -1217 0 obj << +1142 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [364.503 715.581 376.458 725.768] -/A << /S /GoTo /D (page.24) >> +/Rect [394.68 703.626 406.635 713.812] +/A << /S /GoTo /D (page.19) >> >> endobj -1218 0 obj << +1143 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [366.924 703.626 378.879 713.812] -/A << /S /GoTo /D (page.24) >> +/Rect [347.348 691.671 359.303 701.857] +/A << /S /GoTo /D (page.19) >> >> endobj -1219 0 obj << +1144 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [380.065 679.715 392.02 689.902] -/A << /S /GoTo /D (page.32) >> +/Rect [364.503 679.715 376.458 689.902] +/A << /S /GoTo /D (page.19) >> >> endobj -1220 0 obj << +1145 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [380.065 655.805 392.02 665.992] -/A << /S /GoTo /D (page.33) >> +/Rect [366.924 667.76 378.879 677.947] +/A << /S /GoTo /D (page.20) >> >> endobj -1221 0 obj << +1146 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [380.065 631.895 392.02 642.081] -/A << /S /GoTo /D (page.33) >> +/Rect [380.065 643.85 392.02 654.037] +/A << /S /GoTo /D (page.28) >> >> endobj -1222 0 obj << +1147 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [383.492 619.222 395.447 630.126] -/A << /S /GoTo /D (page.24) >> +/Rect [380.065 619.94 392.02 630.126] +/A << /S /GoTo /D (page.28) >> >> endobj -1223 0 obj << +1148 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [387.397 607.267 399.352 618.171] -/A << /S /GoTo /D (page.24) >> +/Rect [380.065 596.029 392.02 606.216] +/A << /S /GoTo /D (page.28) >> >> endobj -1224 0 obj << +1149 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [390.167 595.312 402.122 606.216] -/A << /S /GoTo /D (page.24) >> +/Rect [383.492 583.357 395.447 594.261] +/A << /S /GoTo /D (page.20) >> >> endobj -1225 0 obj << +1150 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [396.403 584.074 408.359 594.261] -/A << /S /GoTo /D (page.25) >> +/Rect [387.397 571.402 399.352 582.306] +/A << /S /GoTo /D (page.20) >> >> endobj -1226 0 obj << +1151 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [363.039 572.119 374.994 582.306] -/A << /S /GoTo /D (page.25) >> +/Rect [390.167 559.447 402.122 570.35] +/A << /S /GoTo /D (page.20) >> >> endobj -1227 0 obj << +1152 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [365.251 560.164 377.206 570.35] -/A << /S /GoTo /D (page.25) >> +/Rect [396.403 548.209 408.359 558.395] +/A << /S /GoTo /D (page.20) >> >> endobj -1228 0 obj << +1153 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [385.714 547.491 397.669 558.395] -/A << /S /GoTo /D (page.25) >> +/Rect [363.039 536.253 374.994 546.44] +/A << /S /GoTo /D (page.21) >> >> endobj -1229 0 obj << +1154 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [381.848 535.536 393.803 546.44] -/A << /S /GoTo /D (page.25) >> +/Rect [365.251 524.298 377.206 534.485] +/A << /S /GoTo /D (page.21) >> >> endobj -1230 0 obj << +1155 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [389.22 524.298 401.175 534.485] -/A << /S /GoTo /D (page.25) >> +/Rect [385.714 511.626 397.669 522.53] +/A << /S /GoTo /D (page.21) >> >> endobj -1231 0 obj << +1156 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [387.955 511.626 399.91 522.53] -/A << /S /GoTo /D (page.25) >> +/Rect [381.848 499.671 393.803 510.575] +/A << /S /GoTo /D (page.21) >> >> endobj -1232 0 obj << +1157 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [386.839 499.671 398.795 510.575] -/A << /S /GoTo /D (page.26) >> +/Rect [389.22 488.433 401.175 498.619] +/A << /S /GoTo /D (page.21) >> >> endobj -1233 0 obj << +1158 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [400.129 487.716 412.085 498.619] -/A << /S /GoTo /D (page.26) >> +/Rect [387.955 475.76 399.91 486.664] +/A << /S /GoTo /D (page.21) >> >> endobj -1234 0 obj << +1159 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [360.14 476.478 372.095 486.664] -/A << /S /GoTo /D (page.29) >> +/Rect [386.839 463.805 398.795 474.709] +/A << /S /GoTo /D (page.21) >> >> endobj -1235 0 obj << +1160 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [438.206 464.522 450.162 474.709] -/A << /S /GoTo /D (page.32) >> +/Rect [400.129 451.85 412.085 462.754] +/A << /S /GoTo /D (page.21) >> >> endobj -1236 0 obj << +1161 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [432.548 452.567 444.503 462.754] -/A << /S /GoTo /D (page.33) >> +/Rect [360.14 440.612 372.095 450.799] +/A << /S /GoTo /D (page.25) >> >> endobj -1237 0 obj << +1162 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [408.747 440.612 420.703 450.799] -/A << /S /GoTo /D (page.33) >> +/Rect [438.206 428.657 450.162 438.844] +/A << /S /GoTo /D (page.28) >> >> endobj -1238 0 obj << +1163 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [498.919 428.657 510.874 438.844] -/A << /S /GoTo /D (page.33) >> +/Rect [432.548 416.702 444.503 426.888] +/A << /S /GoTo /D (page.28) >> >> endobj -1239 0 obj << +1164 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [410.441 416.702 422.396 426.888] -/A << /S /GoTo /D (page.34) >> +/Rect [408.747 404.747 420.703 414.933] +/A << /S /GoTo /D (page.28) >> >> endobj -1240 0 obj << +1165 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [381.848 404.747 393.803 414.933] -/A << /S /GoTo /D (page.36) >> +/Rect [498.919 392.791 510.874 402.978] +/A << /S /GoTo /D (page.29) >> >> endobj -1241 0 obj << +1166 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [389.031 392.791 400.987 402.978] -/A << /S /GoTo /D (page.36) >> +/Rect [410.441 380.836 422.396 391.023] +/A << /S /GoTo /D (page.29) >> >> endobj -1242 0 obj << +1167 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [403.975 380.836 415.93 391.023] -/A << /S /GoTo /D (page.37) >> +/Rect [381.848 368.881 393.803 379.068] +/A << /S /GoTo /D (page.32) >> >> endobj -1243 0 obj << +1168 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [375.751 368.881 387.706 379.068] -/A << /S /GoTo /D (page.38) >> +/Rect [389.031 356.926 400.987 367.113] +/A << /S /GoTo /D (page.33) >> >> endobj -1244 0 obj << +1169 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [421.529 356.926 433.484 367.113] -/A << /S /GoTo /D (page.38) >> +/Rect [403.975 344.971 415.93 355.157] +/A << /S /GoTo /D (page.33) >> >> endobj -1245 0 obj << +1170 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [419.875 344.971 431.83 355.157] -/A << /S /GoTo /D (page.38) >> +/Rect [375.751 333.016 387.706 343.202] +/A << /S /GoTo /D (page.34) >> >> endobj -1246 0 obj << +1171 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [380.733 332.298 392.688 343.202] -/A << /S /GoTo /D (page.39) >> +/Rect [421.529 321.06 433.484 331.247] +/A << /S /GoTo /D (page.34) >> >> endobj -1247 0 obj << +1172 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [443.995 321.06 455.95 331.247] -/A << /S /GoTo /D (page.32) >> +/Rect [419.875 309.105 431.83 319.292] +/A << /S /GoTo /D (page.34) >> >> endobj -1248 0 obj << +1173 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [395.288 309.105 407.243 319.292] -/A << /S /GoTo /D (page.26) >> +/Rect [380.733 296.433 392.688 307.337] +/A << /S /GoTo /D (page.35) >> >> endobj -1249 0 obj << +1174 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [393.624 297.15 405.579 307.337] -/A << /S /GoTo /D (page.26) >> +/Rect [443.995 285.195 455.95 295.382] +/A << /S /GoTo /D (page.28) >> >> endobj -1250 0 obj << +1175 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [383.522 284.478 395.477 295.382] -/A << /S /GoTo /D (page.26) >> +/Rect [395.288 273.24 407.243 283.426] +/A << /S /GoTo /D (page.22) >> >> endobj -1251 0 obj << +1176 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [419.208 272.522 431.163 283.426] -/A << /S /GoTo /D (page.27) >> +/Rect [393.624 261.285 405.579 271.471] +/A << /S /GoTo /D (page.22) >> >> endobj -1252 0 obj << +1177 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [413.41 260.567 425.365 271.471] -/A << /S /GoTo /D (page.27) >> +/Rect [383.522 248.612 395.477 259.516] +/A << /S /GoTo /D (page.22) >> >> endobj -1253 0 obj << +1178 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [374.107 248.612 386.062 259.516] -/A << /S /GoTo /D (page.27) >> +/Rect [419.208 236.657 431.163 247.561] +/A << /S /GoTo /D (page.22) >> >> endobj -1254 0 obj << +1179 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [409.793 236.657 421.748 247.561] -/A << /S /GoTo /D (page.27) >> +/Rect [413.41 224.702 425.365 235.606] +/A << /S /GoTo /D (page.22) >> >> endobj -1255 0 obj << +1180 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [423.92 224.702 435.875 235.606] -/A << /S /GoTo /D (page.27) >> +/Rect [374.107 212.747 386.062 223.651] +/A << /S /GoTo /D (page.23) >> >> endobj -1256 0 obj << +1181 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [442.5 212.747 454.456 223.651] -/A << /S /GoTo /D (page.27) >> +/Rect [409.793 200.791 421.748 211.695] +/A << /S /GoTo /D (page.23) >> >> endobj -1257 0 obj << +1182 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [388.643 200.791 400.598 211.695] -/A << /S /GoTo /D (page.27) >> +/Rect [423.92 188.836 435.875 199.74] +/A << /S /GoTo /D (page.23) >> >> endobj -1258 0 obj << +1183 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [422.396 188.836 434.351 199.74] -/A << /S /GoTo /D (page.27) >> +/Rect [442.5 176.881 454.456 187.785] +/A << /S /GoTo /D (page.23) >> >> endobj -1259 0 obj << +1184 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [404.702 177.598 416.658 187.785] -/A << /S /GoTo /D (page.27) >> +/Rect [388.643 164.926 400.598 175.83] +/A << /S /GoTo /D (page.23) >> >> endobj -1260 0 obj << +1185 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [380.065 153.688 392.02 163.875] -/A << /S /GoTo /D (page.33) >> +/Rect [422.396 152.971 434.351 163.875] +/A << /S /GoTo /D (page.23) >> >> endobj -1261 0 obj << +1186 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [390.137 141.016 402.092 151.92] -/A << /S /GoTo /D (page.28) >> +/Rect [404.702 141.733 416.658 151.92] +/A << /S /GoTo /D (page.23) >> >> endobj -1262 0 obj << +1187 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [387.397 129.06 399.352 139.964] -/A << /S /GoTo /D (page.28) >> +/Rect [380.065 117.823 392.02 128.009] +/A << /S /GoTo /D (page.29) >> >> endobj -1263 0 obj << +1188 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [390.167 117.105 402.122 128.009] -/A << /S /GoTo /D (page.28) >> +/Rect [390.137 105.15 402.092 116.054] +/A << /S /GoTo /D (page.23) >> >> endobj -1264 0 obj << +1189 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [385.743 105.15 397.699 116.054] -/A << /S /GoTo /D (page.28) >> +/Rect [387.397 93.195 399.352 104.099] +/A << /S /GoTo /D (page.24) >> >> endobj -1269 0 obj << -/D [1267 0 R /XYZ 89 770.89 null] +1194 0 obj << +/D [1192 0 R /XYZ 89 770.89 null] >> endobj -1266 0 obj << -/Font << /F22 424 0 R /F23 425 0 R >> +1191 0 obj << +/Font << /F22 400 0 R /F23 401 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1317 0 obj << -/Length 879 +1241 0 obj << +/Length 867 /Filter /FlateDecode >> stream -xÚÝŰn›@†ďyŠ˝©ˇË.'_Ú†¦T>¤†HmÓ -X$X»§Nźľ‹qSśxăb*U˛„Ĺaľţć -đ"p#:Ëţ$}ó> -’Ź“Í”ţß—MORcRVPÇTđ<ńÂE¶ô—ů˘¬zJ:Ł5ş'™Ýî’bŠsRĚH|ÄódI—$ł*ó8Q>ŞÝ"_‡Ĺ1°ĆU şíĂnČőNŚéí»ÎóĹšFă—fnŰžďRŹňđ<=ČSđţď[p[ŹÝRŽTŁĐ"iđŔĂn©w~ŘžëřV¶Ý§¬(dĹS]”¤Ţ1›ýdD輸ë&˙:ü}bŤl˙Oü©eĎZ[‰ ÎÄďO†Îh4“tMüě[e辤(ŠčI=ĚţÖc<ĆBX—Uh +xÚÝmo˘@Çßó)ö%$Wnw—(´ÇŧšÜ]Ż!‹%ôZ{źţ±V©Ř*&—!ŔÎď?łĂ̲L7LÇb>_c^‘°,(ČâEŚ€ĺ;ÖhúwîŢú +ZHࡠÓq«‚’_et‹ůÍ z´,ĘĽ,ŔŤ»{<zý+€Ľ ´ÁÓę©´°@Ź!0™oÜ"”„ HϱdLŹ2. q±éDó,>ř8™®Śopw…EČâÖú~ WńŠ(n,
ł´óśmč +¶̩*ׂlWtí§`V«ýUÔ¶–Š‡Ç%±k‡Á$Ä? Ô@mę±Ű
g˛ËßĹpm.ýÍĽÓ…Úŕ’ö‚‰űłSEűř~ě;}nŐĆŇH'6u|Ä!‘u'ş”óM
Ňą5ç$>™ëbS›¨]Řśp˛™Ż‡fđ‡,*ŃĄZĐÉ|Ť,ÜpTç_Ă9,˛>IŹÄiđBL’)YTNůY±MĹľ<ń4•R’ôeŹäńĚ“ž„uDôIęhNę*ńuJ;‹ćö<™ĺł’ĆčR‰nqmH_wµŮ)IÇÄżp@bźÎrl^ŞÍ4ÉÜôŐçyŘąś‰Ţ,ś<›Y’̲ŘëżŐsĎ”^âž'ë´ÝŢ\ + +5ćP#ˇóÜ|ę–iŘZ´ě=†tRČ‚–©¦ŕÓŢOz$ž¦Íż
_ÔÖÓíö‡š>Ţ·Ź‰oAH‚ŔK¸őľ…x{ź&i[“1°ŐA×čőĆś$˛?l-7r!ÖâžnÂ$}hÉR©¦l3WÉ"{«Ă:R¤łJéëwGmęÖí¨ŃČ1m×AVÔé\9ĽŁcžĄÝ'ŽI¸¨ś“âWé*†#g©Ćîę;¸xŮw +Ď?Â3ż‚/žËůöf Úů}pµč;·ŕ›{%“Ôýş6[5JęlĚĄ.Ź_{rµ/?Ę»2˙M_v‡ę8tz9-‡·ÖşjۦńS7‹9ĽcX¦5ÖŐţZFą8ŤşşKo–Wč§ŘĽĺî:§şX}hťó*,tÍ;µâŰá±íâü*Şcrz5ĺ<]Ľ|‡T~źZÇËńő®s[ŕŹÝtţŇßs endstream endobj -1316 0 obj << +1240 0 obj << /Type /Page -/Contents 1317 0 R -/Resources 1315 0 R +/Contents 1241 0 R +/Resources 1239 0 R /MediaBox [0 0 595.276 841.89] -/Parent 1319 0 R -/Annots [ 1265 0 R 1270 0 R 1271 0 R 1272 0 R 1273 0 R 1274 0 R 1275 0 R 1276 0 R 1277 0 R 1278 0 R 1279 0 R 1280 0 R 1281 0 R 1282 0 R 1283 0 R 1284 0 R 1285 0 R 1286 0 R 1287 0 R 1288 0 R 1289 0 R 1290 0 R 1291 0 R 1292 0 R 1293 0 R 1294 0 R 1295 0 R 1296 0 R 1297 0 R 1298 0 R 1299 0 R 1300 0 R 1301 0 R 1302 0 R 1303 0 R 1304 0 R 1305 0 R 1306 0 R 1307 0 R 1308 0 R 1309 0 R 1310 0 R 1311 0 R 1312 0 R 1313 0 R 1314 0 R ] +/Parent 1107 0 R +/Annots [ 1190 0 R 1195 0 R 1196 0 R 1197 0 R 1198 0 R 1199 0 R 1200 0 R 1201 0 R 1202 0 R 1203 0 R 1204 0 R 1205 0 R 1206 0 R 1207 0 R 1208 0 R 1209 0 R 1210 0 R 1211 0 R 1212 0 R 1213 0 R 1214 0 R 1215 0 R 1216 0 R 1217 0 R 1218 0 R 1219 0 R 1220 0 R 1221 0 R 1222 0 R 1223 0 R 1224 0 R 1225 0 R 1226 0 R 1227 0 R 1228 0 R 1229 0 R 1230 0 R 1231 0 R 1232 0 R 1233 0 R 1234 0 R 1235 0 R 1236 0 R 1237 0 R 1238 0 R ] >> endobj -1265 0 obj << +1190 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 727.536 175.539 737.723] -/A << /S /GoTo /D (page.34) >> +/Rect [173.686 726.819 185.641 737.723] +/A << /S /GoTo /D (page.24) >> >> endobj -1270 0 obj << +1195 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 703.601 175.539 713.788] -/A << /S /GoTo /D (page.36) >> +/Rect [169.262 714.864 181.217 725.768] +/A << /S /GoTo /D (page.24) >> >> endobj -1271 0 obj << +1196 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 679.667 175.539 689.853] -/A << /S /GoTo /D (page.36) >> +/Rect [163.584 691.671 175.539 701.857] +/A << /S /GoTo /D (page.29) >> >> endobj -1272 0 obj << +1197 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 655.732 175.539 665.919] -/A << /S /GoTo /D (page.37) >> +/Rect [163.584 667.76 175.539 677.947] +/A << /S /GoTo /D (page.32) >> >> endobj -1273 0 obj << +1198 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 631.797 175.539 641.984] -/A << /S /GoTo /D (page.38) >> +/Rect [163.584 643.85 175.539 654.037] +/A << /S /GoTo /D (page.33) >> >> endobj -1274 0 obj << +1199 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 607.863 175.539 618.049] -/A << /S /GoTo /D (page.38) >> +/Rect [163.584 619.94 175.539 630.126] +/A << /S /GoTo /D (page.33) >> >> endobj -1275 0 obj << +1200 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 583.928 175.539 594.115] -/A << /S /GoTo /D (page.38) >> +/Rect [163.584 596.029 175.539 606.216] +/A << /S /GoTo /D (page.34) >> >> endobj -1276 0 obj << +1201 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 559.993 175.539 570.18] -/A << /S /GoTo /D (page.39) >> +/Rect [163.584 572.119 175.539 582.306] +/A << /S /GoTo /D (page.34) >> >> endobj -1277 0 obj << +1202 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [194.308 525.893 206.263 536.08] -/A << /S /GoTo /D (page.23) >> +/Rect [163.584 548.209 175.539 558.395] +/A << /S /GoTo /D (page.34) >> >> endobj -1278 0 obj << +1203 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [194.308 501.958 206.263 512.145] -/A << /S /GoTo /D (page.23) >> +/Rect [163.584 524.298 175.539 534.485] +/A << /S /GoTo /D (page.35) >> >> endobj -1279 0 obj << +1204 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [194.308 478.024 206.263 488.21] -/A << /S /GoTo /D (page.23) >> +/Rect [194.308 490.425 206.263 500.612] +/A << /S /GoTo /D (page.19) >> >> endobj -1280 0 obj << +1205 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [194.308 454.089 206.263 464.276] -/A << /S /GoTo /D (page.24) >> +/Rect [194.308 466.515 206.263 476.702] +/A << /S /GoTo /D (page.19) >> >> endobj -1281 0 obj << +1206 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [198.731 419.989 210.687 430.176] -/A << /S /GoTo /D (page.26) >> +/Rect [194.308 442.605 206.263 452.791] +/A << /S /GoTo /D (page.19) >> >> endobj -1282 0 obj << +1207 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [198.731 396.054 210.687 406.241] -/A << /S /GoTo /D (page.26) >> +/Rect [194.308 418.694 206.263 428.881] +/A << /S /GoTo /D (page.19) >> >> endobj -1283 0 obj << +1208 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [198.731 372.119 210.687 382.306] -/A << /S /GoTo /D (page.27) >> +/Rect [198.731 384.821 210.687 395.008] +/A << /S /GoTo /D (page.22) >> >> endobj -1284 0 obj << +1209 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [199.847 348.185 211.803 358.371] -/A << /S /GoTo /D (page.25) >> +/Rect [198.731 360.911 210.687 371.098] +/A << /S /GoTo /D (page.22) >> >> endobj -1285 0 obj << +1210 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [199.847 324.25 211.803 334.437] -/A << /S /GoTo /D (page.25) >> +/Rect [198.731 337.001 210.687 347.187] +/A << /S /GoTo /D (page.22) >> >> endobj -1286 0 obj << +1211 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [198.731 290.15 210.687 300.337] -/A << /S /GoTo /D (page.27) >> +/Rect [199.847 313.09 211.803 323.277] +/A << /S /GoTo /D (page.21) >> >> endobj -1287 0 obj << +1212 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [198.731 266.215 210.687 276.402] -/A << /S /GoTo /D (page.27) >> +/Rect [199.847 289.18 211.803 299.367] +/A << /S /GoTo /D (page.21) >> >> endobj -1288 0 obj << +1213 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [198.731 242.281 210.687 252.467] -/A << /S /GoTo /D (page.27) >> +/Rect [198.731 255.307 210.687 265.494] +/A << /S /GoTo /D (page.22) >> >> endobj -1289 0 obj << +1214 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [199.847 208.18 211.803 218.367] -/A << /S /GoTo /D (page.25) >> +/Rect [198.731 231.397 210.687 241.583] +/A << /S /GoTo /D (page.23) >> >> endobj -1290 0 obj << +1215 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [198.731 184.246 210.687 194.432] -/A << /S /GoTo /D (page.27) >> +/Rect [198.731 207.486 210.687 217.673] +/A << /S /GoTo /D (page.23) >> >> endobj -1291 0 obj << +1216 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [199.847 150.145 211.803 160.332] -/A << /S /GoTo /D (page.25) >> +/Rect [199.847 173.613 211.803 183.8] +/A << /S /GoTo /D (page.21) >> >> endobj -1292 0 obj << +1217 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.584 116.045 175.539 126.232] -/A << /S /GoTo /D (page.32) >> +/Rect [198.731 149.703 210.687 159.89] +/A << /S /GoTo /D (page.23) >> >> endobj -1293 0 obj << +1218 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [380.065 727.536 392.02 737.723] -/A << /S /GoTo /D (page.32) >> +/Rect [199.847 115.83 211.803 126.017] +/A << /S /GoTo /D (page.21) >> >> endobj -1294 0 obj << +1219 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [380.065 703.626 392.02 713.812] -/A << /S /GoTo /D (page.32) >> +/Rect [380.065 727.536 392.02 737.723] +/A << /S /GoTo /D (page.28) >> >> endobj -1295 0 obj << +1220 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [380.065 679.715 392.02 689.902] -/A << /S /GoTo /D (page.33) >> +/Rect [380.065 693.663 392.02 703.85] +/A << /S /GoTo /D (page.28) >> >> endobj -1296 0 obj << +1221 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [416.329 655.805 428.284 665.992] -/A << /S /GoTo /D (page.25) >> +/Rect [380.065 669.753 392.02 679.939] +/A << /S /GoTo /D (page.28) >> >> endobj -1297 0 obj << +1222 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [416.329 631.895 428.284 642.081] -/A << /S /GoTo /D (page.25) >> +/Rect [380.065 645.843 392.02 656.029] +/A << /S /GoTo /D (page.28) >> >> endobj -1298 0 obj << +1223 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [367.193 597.305 379.148 608.208] -/A << /S /GoTo /D (page.40) >> +/Rect [416.329 621.932 428.284 632.119] +/A << /S /GoTo /D (page.21) >> >> endobj -1299 0 obj << +1224 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [347.268 585.349 359.223 596.253] -/A << /S /GoTo /D (page.40) >> +/Rect [416.329 598.022 428.284 608.208] +/A << /S /GoTo /D (page.21) >> >> endobj -1300 0 obj << +1225 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [350.317 574.112 362.272 584.298] -/A << /S /GoTo /D (page.40) >> +/Rect [416.329 564.149 428.284 574.336] +/A << /S /GoTo /D (page.21) >> >> endobj -1301 0 obj << +1226 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [416.329 550.201 428.284 560.388] -/A << /S /GoTo /D (page.26) >> +/Rect [416.329 540.239 428.284 550.425] +/A << /S /GoTo /D (page.21) >> >> endobj -1302 0 obj << +1227 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [416.329 526.291 428.284 536.477] -/A << /S /GoTo /D (page.26) >> +/Rect [403.417 505.648 415.373 516.552] +/A << /S /GoTo /D (page.20) >> >> endobj -1303 0 obj << +1228 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [403.417 491.701 415.373 502.605] +/Rect [410.062 493.693 422.018 504.597] /A << /S /GoTo /D (page.24) >> >> endobj -1304 0 obj << +1229 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [410.062 479.745 422.018 490.649] -/A << /S /GoTo /D (page.28) >> +/Rect [410.79 470.5 422.745 480.687] +/A << /S /GoTo /D (page.20) >> >> endobj -1305 0 obj << +1230 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [410.79 456.552 422.745 466.739] -/A << /S /GoTo /D (page.24) >> +/Rect [403.417 445.872 415.373 456.776] +/A << /S /GoTo /D (page.20) >> >> endobj -1306 0 obj << +1231 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [403.417 431.925 415.373 442.829] +/Rect [410.062 433.917 422.018 444.821] /A << /S /GoTo /D (page.24) >> >> endobj -1307 0 obj << +1232 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [410.062 419.97 422.018 430.873] -/A << /S /GoTo /D (page.28) >> +/Rect [410.062 410.007 422.018 420.911] +/A << /S /GoTo /D (page.24) >> >> endobj -1308 0 obj << +1233 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [410.062 396.059 422.018 406.963] +/Rect [380.065 376.851 392.02 387.038] /A << /S /GoTo /D (page.28) >> >> endobj -1309 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [380.065 362.904 392.02 373.09] -/A << /S /GoTo /D (page.33) >> ->> endobj -1310 0 obj << +1234 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [380.065 338.993 392.02 349.18] -/A << /S /GoTo /D (page.33) >> +/Rect [380.065 352.941 392.02 363.128] +/A << /S /GoTo /D (page.28) >> >> endobj -1311 0 obj << +1235 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [415.213 305.12 427.168 315.307] -/A << /S /GoTo /D (page.27) >> +/Rect [415.213 319.068 427.168 329.255] +/A << /S /GoTo /D (page.23) >> >> endobj -1312 0 obj << +1236 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [415.213 281.21 427.168 291.397] -/A << /S /GoTo /D (page.27) >> +/Rect [415.213 295.158 427.168 305.344] +/A << /S /GoTo /D (page.23) >> >> endobj -1313 0 obj << +1237 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [415.213 257.3 427.168 267.486] -/A << /S /GoTo /D (page.27) >> +/Rect [415.213 271.247 427.168 281.434] +/A << /S /GoTo /D (page.23) >> >> endobj -1314 0 obj << +1238 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] -/Rect [415.213 223.427 427.168 233.613] -/A << /S /GoTo /D (page.27) >> +/Rect [415.213 237.374 427.168 247.561] +/A << /S /GoTo /D (page.23) >> >> endobj -1318 0 obj << -/D [1316 0 R /XYZ 89 770.89 null] +1242 0 obj << +/D [1240 0 R /XYZ 89 770.89 null] >> endobj -1315 0 obj << -/Font << /F22 424 0 R /F23 425 0 R >> +1239 0 obj << +/Font << /F22 400 0 R /F23 401 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1321 0 obj +1244 0 obj [250 333 250 278 500 500 500 500 500 500 500 500 500 500 333 333 570 570 570 500 832 667 667 667 722 667 667 722 778 389 500 667 611 889 722 722 611 722 667 556 611 722 667 889 667 611 611 333 278 333 570 500 333 500 500 444 500 444 333 500 556 278 278 500 278 778 556 500 500 500 389 389 278 556 444 667 500] endobj -1322 0 obj +1245 0 obj [250 278 500 500 500 500 500 500 500 500 500 500 333 333 675 675 675 500 920 611 611 667 722 611 611 722 722 333 444 667 556 833 667 722 611 722 611 500 556 722 611 833 611 556 556 389 278 389 422 500 333 500 500 444 500 444 278 500 500 278 278 444 278 722 500 500 500 500 389 389 278 500 444 667 444 444] endobj -1323 0 obj +1246 0 obj [769.8] endobj -1324 0 obj +1247 0 obj [500 777.8 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 500 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 1000 777.8 777.8 1000 1000 500 500 1000 1000 1000 777.8 1000 1000 611.1 611.1 1000 1000 1000 777.8 275 1000 666.7 666.7 888.9 888.9 0 0 555.6 555.6 666.7 500 722.2 722.2 777.8 777.8 611.1 798.5 656.8 526.5 771.4 527.8 718.7 594.9 844.5 544.5 677.8 762 689.7 1200.9 820.5 796.1 695.6 816.7 847.5 605.6 544.6 625.8 612.8 987.8 713.3 668.3 724.7 666.7 666.7 666.7 666.7 666.7 611.1 611.1 444.4 444.4 444.4 444.4 500 500 388.9 388.9 277.8] endobj -1325 0 obj +1248 0 obj [500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8] endobj -1326 0 obj +1249 0 obj [277.8 277.8 777.8 500 777.8 500 530.9 750 758.5 714.7 827.9 738.2 643.1 786.3 831.3 439.6 554.5 849.3 680.6 970.1 803.5 762.8 642 790.6 759.3 613.2 584.4] endobj -1327 0 obj +1250 0 obj [600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600] endobj -1328 0 obj +1251 0 obj [556 556 167 333 611 278 333 333 0 333 564 0 611 444 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 180 250 333 408 500 500 833 778 333 333 333 500 564 250 333 250 278 500 500 500 500 500 500 500 500 500 500 278 278 564 564 564 444 921 722 667 667 722 611 556 722 722 333 389 722 611 889 722 722 556 722 667 556 611 722 722 944 722 722 611 333 278 333 469 500 333 444 500 444 500 444 333 500 500 278 278 500 278 778 500 500 500 500 333 389 278 500 500 722 500 500 444 480 200 480 541 0 0 0 333 500 444 1000 500 500 333 1000 556 333 889 0 0 0 0 0 0 444 444 350 500 1000 333 980 389 333 722 0 0 722 0 333 500 500 500 500 200 500 333 760 276 500 564 333 760 333 400 564 300 300 333 500 453 250 333 300 310 500 750 750 750 444 722 722 722 722 722 722 889 667 611 611 611 611 333 333 333 333 722 722 722 722 722 722 722 564 722 722 722 722 722 722 556 500 444 444 444 444 444] endobj -1329 0 obj +1252 0 obj [556 556 167 333 667 278 333 333 0 333 570 0 667 444 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 278 250 333 555 500 500 1000 833 333 333 333 500 570 250 333 250 278 500 500 500 500 500 500 500 500 500 500 333 333 570 570 570 500 930 722 667 722 722 667 611 778 778 389 500 778 667 944 722 778 611 778 722 556 667 722 722 1000 722 722 667 333 278 333 581 500 333 500 556 444 556 444 333 500 556 278 333 556 278 833 556 500 556 556 444 389 333 556 500 722 500 500 444 394 220 394 520 0 0 0 333 500 500 1000 500 500 333 1000 556 333 1000 0 0 0 0 0 0 500 500 350 500] endobj -1330 0 obj << +1253 0 obj << /Length1 1629 /Length2 9022 /Length3 0 @@ -7205,7 +6718,7 @@ FSÜ°#"0ÁŞccË-ÝĚöQÔ†
úw´/[_
ŻŔŃ°Í“^%đ§Fôb;ŘOxťsľăű.~í)Ą\2oĺ´ë’KffżA˝ 4®ZĐJ†˘ endstream endobj -1331 0 obj << +1254 0 obj << /Type /FontDescriptor /FontName /AIRNDP+CMMI10 /Flags 4 @@ -7217,9 +6730,9 @@ endobj /StemV 72 /XHeight 431 /CharSet (/A/B/E/F/I/M/N/P/R/S/T/greater/less/period/slash) -/FontFile 1330 0 R +/FontFile 1253 0 R >> endobj -1332 0 obj << +1255 0 obj << /Length1 1542 /Length2 8229 /Length3 0 @@ -7261,7 +6774,7 @@ TTś(Lőg;‰tĚĚŻ#ús»žŃŕ00qę@Ó‰ŤŞ|Íćłň‹¤Z®şüÍ"dçŞ6áśîŃô]h3+mÇęî*˘±~Éę^ µ@Ď‹ÉřĚÇmW”Źů=j5Ľ,[ă˙ endstream endobj -1333 0 obj << +1256 0 obj << /Type /FontDescriptor /FontName /VYDKHY+CMR10 /Flags 4 @@ -7273,9 +6786,9 @@ endobj /StemV 69 /XHeight 431 /CharSet (/eight/equal/five/four/one/seven/six/three/two/zero) -/FontFile 1332 0 R +/FontFile 1255 0 R >> endobj -1334 0 obj << +1257 0 obj << /Length1 1425 /Length2 6103 /Length3 0 @@ -7309,7 +6822,7 @@ MqjĺLíeAßú| oö‡|šě€$Żî+lťĹéůŚ#»ŮŢ*”łnäľ*.qĐďŤf!-«+~ôIŰŞqhŤŮ6ŇÖÜŚoĘlĆę8H c˘"ąŠŔ«
Ą„gŞĆ:|ą#}^ćJĘ„xM=l^ŕšNĐJ–Zp!ő?}Áw endstream endobj -1335 0 obj << +1258 0 obj << /Type /FontDescriptor /FontName /NBBWCW+CMSY10 /Flags 4 @@ -7321,9 +6834,9 @@ endobj /StemV 40 /XHeight 431 /CharSet (/asteriskmath/bar) -/FontFile 1334 0 R +/FontFile 1257 0 R >> endobj -1336 0 obj << +1259 0 obj << /Length1 1399 /Length2 5955 /Length3 0 @@ -7363,7 +6876,7 @@ P5CöÝg.ŘA›ý˝µOźb?+á@Ü9ŕě·ü$ŤshŚĆMeŢů>,ő<č1Î'˘yŕžŕŁjŮ/>•XĘ<súrQ›™şkÁ¤‚Zㇲ çÔ_WçI‘”bŻ'꽲I¤Ż‹pŰ'ró©Ů}ćÝ!ńË=›šŐDLÎQTŃ>śĺKńnoęÉđ5ˇÔV5Čă
Ě·řÖG¸F#2ÍvĽŮ2*ľDzV?f04Á_h–-ąs$Ďślot*!ĹĹĽ"äŤůĚśµ%Ó[ŔVĽŢ$±ÜDÜĘőiEÉŃQ/bsfĂĎ®“43:¤ś€öE˘ţÚG”sW%Ý`Ť3q‘zĆŘ9śzN§źőş¶Ř—*Á">’őÎő\N‹jmśy89¬ń}E9wÚnYµ:’ř'¸HČßml$ú¬äer endstream endobj -1337 0 obj << +1260 0 obj << /Type /FontDescriptor /FontName /LAJUWJ+CMSY7 /Flags 4 @@ -7375,93 +6888,110 @@ endobj /StemV 49 /XHeight 431 /CharSet (/logicaland) -/FontFile 1336 0 R +/FontFile 1259 0 R >> endobj -1338 0 obj << +1261 0 obj << /Length1 1612 -/Length2 18157 +/Length2 17771 /Length3 0 -/Length 18996 +/Length 18612 /Filter /FlateDecode >> stream -xÚ¬·ctf]°.›Ű¶Ń±m[olŁc'۶m۶m''·żoźsöűžűçÜýcŤ±fUͧžŞ§ćk‘)(Ó šŘÄělťéčą ĺ,lŚ\śdíleč” -7´±°öř?lřŻę€˙ ů˙#élř·‚¶fa¤güŁ…“…;ŔDÁÂŮŘśĐÔĐúo§ţµ«Úš -‡fÚĺÝĺ”Ä8HO(xŹw‚ňVZţFđ¨™Â»3kóˇ[In0bZ ĄŠ;‹ÝĽßč -žji“Xąő%yrN‚ťż*8&ěűÖđns÷:f‰˙ÄŔÁEľ3áD‚ۉ{6ęŽÁ®˛,z‰e®Gýą…ÖŇ»ĆV3Â×Ňţ±,&3}ťŁß\w(Őlán'Źx÷ 1¶ŕ@aëÓZŢoÍ6ś¸7¨ĹaÎgJçÄ`
‘‚(ÜpČ/‘ÝŇ -hgeŻŤÖ€@(áˆćöŤĚÖý—"ýC˝Á쉬>žtFѧ7%“X[&(•™KíWB\Kń 5ä÷UZ+eeÇ©‘oŢvâ‰YP€ś,îńĐ-_‘CFŁÚ\…ź”e6ÔÚěV§Řý·¤<$čGŰź^ŹŁ~)Ż¦B»ě—('†śĆ9ěDRűÝ2ťŔyPáP›đO›†j‚c Ö‰@B@+háčµ°S@đhŤĆŹÁmĎ”şóSe´1É_P4”i$t® ą–Ű -.oD>/¶+Ań¸‡P¨ĹIôđăYŃhŮżř%g¶1ŔőB’âYÝZpd SŤBőČÔm>¸9Uúfôť€¤SÖ -¶opv«űâA…yůäýôÖ©űü2@ -éř·łăEąIŚ<wű¤ő¬ęd.Ě’m3ěä·ľŤNiĐ'Ëże3DHlogĄ}vĐ/ ZćRŤnľÂš“g Şż{ć0©Uó4]Áö™‰b¬ăcꡀ¬É[uť)”?&ă‹őÁ3ŁĽh)*…AĄŔqD˙\i#ěs?4č§Y5ëܧîéĄÎS–`퍙ź,Í–heL˝4
ć±O§é&>m@Văw7Ů|B›˙¬öÝ\â8ä©3ćvěÄw,z
J!¶w\5Ţ>‹5…C±7yyću_*JŢüF*“ăÉú†§i…ʦEŃHŞoę6ĺŢŔyČf";ö4PZ\ď—ň—,F·~qNx6]ł·E)hv¤óŢŢqűĄ»ĺŽTŚ7ŃÚk]C,ö59lm×^ţB -hŇW…” ѵĆ˙˝řĄßŇwŁ!ä…Š2d1˙†AMÇ|„č,đ8‘ŚÇúőá93 -9WĆIőX
!Y[źýD‹ćĺÜżÝgí4>¬v]~Ţe×עîGA€ó%üPÇÔ)´˘ů‰Îź•–2ELVŔ7Üý„"X]ÓöÔŐň0u´XŐ„Üg¤YgE%‚¸: Ľu:ůxÚ#;ÄŤOŢKř‚2^ëł®¨çÍĄ,qŮóŰÓ®¨%ÖUyťźI“šC:™+ -µÇŕcčŮ€íG÷ĘiźˇRĽ¦[R-†J3žVy‹Pwơ2Ýf·U’ky’â÷R´$#a0ŐŞjČÝ^ĘV¸]Üí°Ě)ěb0ÖK_O¦şmŐÚDGʉQ„É«•9úP-M[‰ď~I -°čľ»gŃŤ@ĂŢŻJ®0đ/×N¬Ĺ -cÜ)°s7t±ú·ý.‹ˇż ŚŕŹˇŔ+«á‘ -„@cąd2rÚ"ő8l´˝lG'ŽOt,¨=‘O_«CutO"yä~Ęęć‰díěMG×Ă˝%CןVÍ×et˛_XŞVMfL¨cá*&%Îí§LgŰ<Č»ŔÁ ňÎéęŘ|%«ÓđĘŰőówPIWI•á/I–żNˇ•mcC'Kˇ‘,…Š1ز†ý‡bµH»ˇľ… [H¸čůcb]=-Ź˝ĽT‹ˇ—2ł°Ň^ť>38ÄÖk;˛Ń]ĘŰţ8°3: –k2G˛k>i‰‹"ÇFł“Ů.r«{ą˝ŕTĄŇňBLĺ‘Í®Ó1‚Š*ËČ-?JˇVą&l±cˇ„Pç‰J s«ţTŐxY—×?š<µ}iľąŞ+zĂžńŹC:ţjIÄ}|*đŔřMçűRő!댖8Ź"ć~ňęžłBšŞĚ:íŁL -éŁäDF9t˛’!BŽĂ´¬ç«x°łŁáV®ŔcżÇ×Ö…óÁ’áß·a”ŃVńí«ˇĐEj©Ż5°Ű‚>03´6ŢŃ´”ÖžŻ\bă čłhhi@Ç(č;s‘P‰ç•ŞŰMMĄIňH*ôku‹†édžË$rŽóm«Eß0vúÚw¨¬ˇ\ćEqĽ|–vćŤJFäË -źć™zćN˛.DzžŻvJ˘>Ä -Aů?˝|¶Y^Čn–W#&‡_Ő+f—ę߸‘ş
đn(ĹB¨ßb~»§‘‹ŹmDK€LŔ[¸ÖM đNvŞ˙|çĽŰHę^\KYhA˝lg嶻» -ßÜß«äÜĐKBÄfâH‚M/3¬őŽ9µŇ-ôL±ďĄáĂZ5#kěj$Q—)ŇAËY
ä™fÉ+1ÉŹ@nĂľ^gC,‚*'bŃĹ“V=ąy«qź$Ăý^ĆĐ©Wuv㨥0÷P15Ŕ˛uöüöő7ŢöďÜXŚäřŃ;/ďěťş4·žDwp‘9ÁŤBD4›AwČ°'čuÎÄ(ÜT݇ՏϨQJÚ]8úőµZ‰ĚAR…?îÇţ3äz¤C·Źä×TÝ{š7aŘl*ŔA§ű3ÖŔľ‹81ĽÓL•€‰BgĽn:decéĐÝ5.ŁQ -—‘ß·i”ýąĺ„+މż“şx~L4Ŕä-<7l†ÝĎ‘$ÓE±ą\+EŻ5ďI¶îś}2&öýô”][ŕžD||‘–iú 9w9ňëŐM~Ĺ*…ńLűŇÂňFí5Žd#€QzŘhuŃŠ•^[‘Ţ[Xźz›e
ŰŽůő’ą3µ6Svp =‚~Yj@)[Źłřwů¨TS ~MÍ5H*ěËę‡="6ĐŹ$“Ą›)y÷d×÷IkËedJMŤą_táÓ㍠Cż…wŇ·R]/ĺóDemÖŢÁ”¦—&菉h€ÉŕŔOAö;ÎT×:d?MţÖô0hą.iśĐB%ďžk%Ę“uĚíÖ¨öŰ¶Ý µŰ˘î$ăű¸éUĄ -ß.ŚK÷Đłť¨”H€ś&I\ěro–:¤PP± -Aá±˙ĄCeĺ|×É&ůZŕ‰‡RÁYׯů -ßE’Räô=¶Ł¤%+—¦†Yä/aţK'1µ74ťÄ(¨Čˇ¨ ä#q‚vč™Ů7Ţ"Í–4đlđžÚź·ˇťs -ÔRT–E%ĺ‰ k·-řŐÉp S©ĐÍŃa+ÔúĘ`!ó)ď§cB•Ń.bÍ~F›kçś÷™Đ!şi:…yíáű±˝öĺˇyM´^)§OŹVÚ8€|óČŻ——Ç_V©NîĺĐłKer‹íĄ -ťŕT{łq”y_]†JîµČą—(…yŔCĆăućr
†Ř;KŐČçHUŰîń†&®Ă4ąáĹŇU‡čđ?WäG•Zźa[b›x٨ąš‘ú•ś{Ż‚W2ś=ŤěkŇÝ™‘µýŽ4›!ŰĘ˙“ĄşËVk_9N/ŁÔ‰DdňÄZ§ČˇýrvI1}ČíI2™?$F_FCH—]~¸Îţ˛c1!^+]p|ś_ áĘ{ąD–TŹ§,qđçýÍM?2ŚFž“Ą¨kŢMľ´_mÖ,ô¸ňJř‡´ßüxŚÉzB[Ľą_=n%Ű>ń`3¤U}C›ś ?Ř<´{LźŔ#OlÁŔŰÓÇ$ÍOr•]Ś»C(J¬íí8˛[¨6ö|áú‹`xh Q -I§]ź>,˝ _;&H3‡Őd”4ÂĽ˘ˇ(VĐBô{ỦßOr‰clč,a>Q>Ĺ/1ą›6ÔâŘîŻŃ]ýe!(’é~_u¦… -ŤWŕ“7őę˘wß”ńŘ๤Úo» Şq@L ŕŰ&·%-ZŽ7wl\×3*ß°Łľ6Ž«%B3 -NĺωÔ(žő÷Nű$qUxđ—Y5KŃĂÁĘÝúÇ vÇž!Ź—`:÷‰yľéG~äź%@`´O=U•ĽžŻ=Íô]šbidgŐ›go—Ë«_§dš·aQωżTZÁA¬/đěCW#nŹfÂXÍy®ë…Hžš@” ě̦%ŹB.I3ŢŃ ešŚ¬îŐ±ůMjEšĘMł0H¶«I•ż@n1{"ü„g–yť…ĂúhG…á -Ń~ůź -—lzňŰaźgcôB`Ť'MŤśc -ęÍyĐ$WßËWR®Âéß©Őňµ—zě?}’ę_|é - -śĹ™_őW~*nĂ}ŁžŹré¨h‰ ű])lǸ"wđôţćĹÁöäšZ8R@YM&Ů98^¬ş,ÚŘT#˝ă—«k_°rkh(ŚżĚ!N€VRšš |*Gĺ‚!µiY_ką%±^umćÝÔ?“í˛Ú‡ĘG®ř‘"¦lľĽôA8=Iżr85÷fŁs!řĐ
äÔ¶ňއlşýP˛š3qňŤNIŹč‰›…Eߣ±z«^P(c.[›Ť»ŁIt/ľŔ*çËKĘ6uĺp")óŘ”NZiÚ+¶ŕăÉĚČźŠg¶lÝ€ÓE¤P-ČŚ€čÄŽeďŐĽ™Ăš
_őşjoŻń¤ bęĘ>Ż›sđkÂń:nËŁ¸oýX;Iü”Ľ·őDÉ]I`ç&LxöwüŽĂEš -Ţeü|S*ĚÝ"(”ęCjÁqÁä]ne‡™ë–ć»ř(…OÝ/Ö×»«™ćHR°\—jč20”͡µŽÖ7Ůřžh'§µŇ®ú™oqłKŁú„uŁö dy9;?a×CÂý˲I…ž?pö,$WÚ§gDü7
§+ś]ó’`‡…}IçulxŹÉSĚ*G+D€Ă]CFŇë”…X]“˘@W†ź»ę«f,Ęť†Ę©lóŢôU˘ÍĽ§ Ę`ć,ëŢáyŇOŢüéęĹ/±Ń;nĐܵ3ب?űc -˝ -é÷ĹĄËż2˝ŕF6Žë(ŇoŘX®Rh¦(”TáĚ›|&m‡ˇĎ‘
şŁMb”dé’Ç :ňvę,˙đÉ#u{‰qiOTCB©›KÇ3ţäKĂ7®r]‡%ňĎ&Ě~WÄ”®yřŕK»*ńGóŹ’Ę{Ża˙žJီ„#™ŢŹ¸Ą2ž×lü11śJeʢ‰{üÁ¬Ci,k)+ˇ)Z$šľvŽJŞť<IĎĺ1âIşôáÖ6đFž¬«* Ş5;0VŐÖăcŐ•w,ÁRg§=;ńěF碤¶™F.]Ö}l`E±f¬´Â>㡸EÎŤś&zuŐ;éÉ[ž€‰q¶muăl›ý}‚„A -ťÂDŮV_´\A|–ĺžIŃŃÓeüRŹŃyUk™¦dp–V|"`;M#ë`Ek6ś2â¨Tîˇć…“éü’Bw¨ś1UţÎ\Á6ĽŮ“‡®˙V¤öP -‡ĂúŃJ[U8ĽŐ°X™?ćlIî65WŐG~Iš±&ťŞ` 3•;•<›űGmĆŰł?ő‹ď’)ŐŻ·4nü“¤‰˛{męů”4/ÉÓ¤ ŕ@dwšÇŢX'pä]Ůiţ
&UÍśŠ!ë#…~řpůąŽewXDáĂ/y&ŕŢLÓýłůÂéŐE<í˛šÖĘUHĘD*‰Ăčő°ţ -Š%‰ŐvĆ0$kł¨|Ĺ|>Ũޙ_nž—©!
,>M\ÖéáÇŰY‰M`üÖcđýćŚÖąă§ůáůiäBŚ_§đđ‚…EăĆGŕşBh‚öŞ>¬ÖkfYr7ö‡}ŔĘÉÉçxń˝ú‡™{$gßš¸jeăÁ>řj>.·¸ -qú}çĹ"QUˇäC-î0…Ą‰ÎäŐ0Ĺ”đ -ň|Í0+ -X˙IŕĹĚnžaD°žI:Y‘ßž…}GŻ9JU|TŠA9ýgâüě—yą´4·’Ň1q‰ĐfŞ,ńűn@G ČxĚaEú¨ŤC¬Ë*Ż$<ôš$ě€8.ëB*žG?Ie“}ň(ňdD—ˇ#–ćrBJ©á»z»p¤í…‘8~Ćo†\ŹŐ*XeŔŮÇ´âŘĽ‰/ł¶vX9ΰYÓ„•ńĄ•‡'÷ůČFEO›e;tË4Č'óW{‹Ľ¶L
sżŻ¤W犹%
קÔ3+,ů2ô´+Â_› -ŹÇ¸xţ;)X&.ĘS󹥴MÇčĐ7Ú¤ Ýd@vŇĽ7LĘ$ä=oşY,ÝńíÂîÓź¤Á`'CTJ?±/äk¶|HGä§Ě0†N ¦+e#đ1B ŘC'Pm gÖ ä5˝8r!hűçűëÔ=Ť†–M.ú:t`·S…üaŘÂă!“żŹIEÍzÓ#M3…ů.LRË'Wa€HĎT¦KßBúšŁâ1ü“!ždm˛3wňÄ×|·nnVkק%Jm;CŻ© -)v ÚŢ*TˉňŻ‚6N÷gŞůŔ÷ŔFxÝM‘fş -Đg°}řřIKĂ®®«XwŞâJűböcŤ˘ěĎqn˛×;vLHŁgTTţHTǡçöaŞSěďŘ…ÝpóJD…iř)8Ő°@ŹÜľ›đ}J Ň·íB€®?ěË)ĽÎ+–řČ©ťó\N…ŰĘó:É®Lčdxw‚ÇşSşFß!D¦?)ëúăG—€Ď´ľ¦çCîtO˙¶Ç1róL*W'Ţ{Ţ„&.śQeÄźŃ˙‚čŘY€Źüb„Ă&Â~m¦Ú&ć—ÍÚŔµ—´/ĄIéU‚Řŕęś»&Ť”¶ß˘}żm5;^tńQĎLwL’mYgďm‚˛ňńÁIc_b—Ł‘ćýPÍ
5‘©¸č›'‘plZbČŮ&ŐłÓ€‡ÜΰB/YbYť€nrÉJµ`äĂ`m +
č±D˝óńĂ~z€@!ßIü:ę9|ńČ}E%_RA\ő|ďé…Ź*°ňŽ5N-EÓqžVľŰÝ˝H…®2¤l–±˛1¤ Ü {”ÎÉě‹ÜÝĐě˙vCkÔZů#¶çO±ÖcIqŁ¤-—ˇ\१P+ˇ§ĘŁ‡L€†ŻçhéPmjŁšIzDj'(„ÖíúhˇSÎq2Ň>-¶ęÁˇJő»gdťĎä -ŘpyřšŘămWýP˙Eg˝áŤúţĹ~ÚOď:ô©Ńů8čݱ@cašţ˘Áż˘CëoH¦ Ę©ýÔgL5ZÄ -͆ą\P,S5–B -™÷¶Ň6čż(aŤg?udŁˇO<—¬H`ăâ§ę2˛VŮR^_vM$ĽÎÝn1’¬Ű»ú˘2§®RĐÂş]ŠŃ#&3‡ŞôiĂáVꩢTýÓ¨)é8n#ĎL`tĚ%:(×®Ńb˝„ł"‘ÉŇĄ®HÔ†Hˇi'đ7+ŇčÍu5Ô“×â§Óý#±{jЦô´NŘŔ«˛hSk”e°É«Úh«,]Ô4ŇoŻféŇó §ÖÜÄ9H† -Ît¦W`§źýV!”G;ŮP5üĎc˙ź /Ž¤ź,iUýyof¸Żo"ĽöaŢŠ ýn%$Ţ‹Âuěmr€”Čaçâ¤5ÚęńE™°ű>!ţK?č\šÄŢ÷‰©ýŐ˛'Ҩ%¸¦nýď0n –±Xćŕ0Ç‹wSĐ$BÖ®Q˛á7đ±N5剏‡ťĐ“»ŹÖFNëAŻQȡ÷e®ĺUkě<§GeÖzë·‚îđNÓ»ÝYz~éť9ýÓč2ôŃŃ_•óĚđűÍ6÷Ř˝ÍÜFŰpö‚°¨ł‹żOšs",Ě1>H/Ňq«śý©ťç\NÉ~`~Ľ@e_Äv2ŐÔrúXĆs,üňC -ä^ˇć‚t´&F1É8X•P("±B(Ž0
đ¤ăśZÁŻ!RM¤’’‰lÄ$đÍ?`ł“›Ëv*đ_.R0Ś›~]¤€ĎĺQ•JČA#ěvV9íŢŰR#ĘĆböĄ™*9ťâA¸<DĎ™&Â4A&§H'ăf2á© śîe×Ódô
[ -.Üě»đVö˙DÎ(:DŔÖŚx:#Ô¨1XŚ~ěłEA¤«CGző<„ŞtÎł]Ó-RĘő˝žO"`PĆ»şş^aŚŕúh3ęöK5;çaš”{;u –óÓÂÖ–f˝}qfąőĺ6úäń(Ěşŕ*-•ÓĂÓM’nôaX}±p¬]¬ŮŔłµ‚MüĂp!Ý“Ř%HÓgŇG -̱łđ·ÜvŞE÷őŐżľ±Ë†1TB^Ň*†fa\î4Î;›Î±rpîßSLFŤíŐa g…l˙<âÉŻ;™Q"tT\24Ëďž× -š´^ĹŤÖßÉŮ6M zęĚR9—v±šú°Ĺ.˘,ýF2ßYę…şJ[X_¨…ŠÜÇ•ŐiĎKŔÚČXżŚ€ółv«Ę
wóÇ+xLešĺY/Ź*ÄâŞĚ” `qÚvÎľĺ!Q…xÍľţ˘ć©ř9‹K×ÓO"®Q:ł™‹?·ŇÝ -C‚vŰ‚ő]tMí˝ŃZť{d¤h‹ínJ/?Ý~ĺ§ĺ`ő;˛0ÇÄDŠŞ°ZŁ™˝,µŻí_űîao3«Yű$ů”ůPi×pwšë~8Ĺ@9Zź9vMĽ´ -˝«ëä=Žl´¤ (MüŢf6łom$F
ÎqcŤ¸ű+Ź˘´ţ7Äţóđď¦"–ľ×KR:NwŢĽŤŠd°3=9áŃm/ĂÇń‚öŞöá,‚Eą)ňáҤ°·ŽSTćŻű7ĎŻş/P-x‘Pw‡Ď¬˘-AĹpůˇ_‚öărŰĄú@e6bŃ}WS“ÎŽBÝâý7čú™ŮBÜÜ -“˝c§©ĆLů2ÚÖJ·Ęľ{·Í”O ‰_ÄŁ‹Ą×€t\1ż^€ăI±+š®ěÄďţán˘ĹńŹĚ‚Ś2é«ý“ž=dŇnµ6ÔÇ«×yđyv%Ök’߉9N‹ëŤô@Đ×vcţ‰ ^)ĄŰ„őöl~}KŽ -CŔ}qyţAá–•ěÎTsőV -Ů„ŤX®7”•ĺšÁs"¤I_ŘZ)=\PĽý=Ńîň–†‘Í^ËŤ8ĹëoŹ˘f`â93Ö˛ç-„ľîɤžcÓuąc¤Ç‹.YkŹŮ-ţŽŕ7ľbśÄ)ˇŇ÷V®Ű_€e.tlˇ ŐÍÔÝA\’ë-ypd±1`k]Ék-˙éż<¬ć<Ö“Źçô¬Í¸ä$č/^]ĆB‚ž|”é
-ĂP=,DN]=îâëÖŮGlFä/NYµćecŻĚ„ OŠ~{íôVÁ›enđZP —j‚sŞĂúr5«?J~m§-Ţ*ÝŘů–92÷Ź1Zę {Ćú1ÇíxýN* óèEi FÎjĹQVN¨‡YtÖ®7ČlŞëĆň6Őą[`Fý5đÂ&S[Şá/N)yIŽĂábĽĽß(N\“sGíńĘBűńd'SZvd)!aeéůŁ'ŐB…(“Ěí“´Xlµ”ň5˝÷¨r‰/4.ᎄ͑ŇE±¤ÎáwóűÁ@2•r RG“öćĘš:điŐcvĎĄmBµšô¦Ú§&ůqv‡TńSĹé |†iTC^RŰĽ?o–Ŕˇ’˛2f+q`—^ĎîďµlYšĽ©.ľtJŔ;ůp*uDůÖggSóyµ€”ĐĄNŢÄ ·Oš‚źröO§úÇOŻˇasč/ŽuÎ;g\ý;QqĆd…V(ŕâ2ńÉqI‘‘–Ô°Âoő‹€ůóˇ=Ľ -w6M` ĐŔrţńl@ťNť.F•N|™‚…t˙ä -Łbn2˙±5U9K„20zăĽdVĆ6¦Âś©śÖůpţ«w (¤a‹HĐŔĘů†“Ď,˙' ŢäźĹśrY·;ÔGŽcćS?hX—“4KU¨Ó}sO»¬fµlq µ ŤIݨô†Đ±ŠÄŰiŻ.ž]7ţ”±‚^ŻáY倎Áˇ=)Ó@킸§¸ ç6|·^ĹöűâŹŃŃ˙´jĆ$Ľť4°ČIlgOüY"hâşp-Ő,UżĂŤˇ0ŇĂ©Ď–ąěŇň܆?EěĽtÝ>"â¸c·¸Í€ł)˙.Ƈ<k<ß=Ń78ćqc3N$ď˝Ů—Ű}ĎŚĐŹLâc§¨$µ©›ÖĎ5a
űsr˘,Ä §łýK‘ç…nm§;ÓTg¤˝Â¶Đ§PHižv-Ç}Ćß{•#Q˛3Ü8Ó¬ü8z¬µLôz}bSŕbžňžVbŤť™äťśO߸|;1Ě!?śă׳’>YçZ†zg3$ÜŤśEÇĂ,xěĆëĆ]Y‡ëˇ˙P´ëťÓ¸ŽŘ!$-6ź çŔSâ4Ă‹`›Ű3˘[ý–\đÝ—»ş=W9ńą|aA_~–Q‚ś‘oőÍóĚžÍ˙5 Ęö+ý¤¦ŞĚÚ8TĎż˝S¤*ő=ŘkE”řĐب‡˝eoż†ŻiP3ŁPWÎŢŤ‡ ¨
ą‰ÚÇ€S˘ăá¨3ұŹ…Du˙ww˛Ľü“ěy\ÁăN.^tۡr7f’şŃ»Ei#My„59–$ťxľOě5tŐRůÄ[ht”˛,g›&ÜŁőxř{¦"ŇnlNQČ'U˙QŕlŇPŁ^ţzMj†m#8ÎÄëąĘĘü° -aMÉY®Ľ 1SÚáç=M‚ýoő'VNŮ1«)ąh3WČ3ĽÉŤËť‡,ÔmSNŞĚ“şů'$kçd_ÝŚéÍQŕRňěó5«<]~®Ç`úO¦7®66<ż»Đ×—Ť•8‰@’Lw‘”zq•řsŘŻľ›<P k™MZ<LkźlŠ€pp% đEźTŻżŚNş©C|‘ď
č—m=2ůřQÁ°Lh%ÉŤł¤ -€‘J#‚ëTůű_ĺ@÷) î˝üĆ5řęÇŐőđâ?´u!rw‡á»ĚčOW޵đťäĂÔwIµ,ř¬˝xwÍUĽtD\8‚G7¦î·ĎĚr?¨^ęĆö(^?˝¬4á±UźŹ¸3Ű`󢇞ËSYn׊K©VŔpsĹöPTwą#uOu~lva¤–ó´ŚňÇŠŽÜ1e‹™
$EUeĎ·¨2ĚČ-×í*®–Đ©JľwŁ"÷•<ľţću-z¶SGPxQGrŔŢč -ŕ„$D4mwŰĺ5^ĚD‚Ľ°ŢRÁŮăT\ŘÎFŠ´fw˘5săäŰŤ”‘ŢŢß ¸Š[\źY&çE -´•^3t•ĐÁ¬Ďtn@Áh}“—‡tĘÇnî.ş±µesäŕ>b´ßNoU{O JŰý¸ŃFßµ1¤·3Hż4IKÚPę3ŇV›3S‰yÉŇ]ž—E/ŇŚËö•˝ĂśżĐFOÓqÖĺv&ş -p!ľÇ[éľ‚\w˙ƶ뇸!ĐĎŢflńÇ‘ÉeňRNKlʦńč -ŇŇxŃ<qu~Ş*#ě_.rî]pJQE<m@ůő€Š@Ú.ŚĹŕJŠ‘đ@”Ňf¨µJ}»3Ă`IŃvD¶NcdŽ:ˇľŹz±Ű˛€°Ť#:ĹŠčŃĚIy˙(˝MXjžŤ÷Á¶öB -[Ś›ČąŐ´» «Řq›Eď:ań©|ĐŇ,n˙QXH`‹ŘMÄ‚)#Ţ”±5uŁ‰‘y¦W+OEĆ ¸w¤đŁ
$HÍŔ?çH,ő˘Ŕ@Ö&)íĂk‹čÚÔ:ňD“‘oNwî1¸ĺŔ”`~µa%ŢŹ”:°ň`UŘĄŘĆö™ˇ÷ˇú °v öWɬń\â</I>Ď(Č—5ŠóöĎh…
8ß·ąË˘ĺ˘śP†–ş&.)J˝)‡đĽÔ[{ź-üŔ?@«´éůQ©ŔD7Ĺh÷Ę@đ_ľvČ“ŚŐĆS˘k™lćÝ4$ÚŁ%?ŘŰB«g5Ĺj‚n Ł¤ŘŇ_Ę éL@F®(Äđ{uaŚ&jý#5Ěő…Ş}q¤ălđlűs›půóµ°ăËüë,ŢÉZOâŽ:zGÔCŤF/vŽ
·¦ůd\X3A ?ćnŰÎ×ě5jŚ×L—]ŢÉDßřd)Á9N˛‚Éő†Elţ‡đlđUŕŹCKĆŁc&ň¦_âß…€Ź·sn¸Íă˝ëÁ<7;'+ˇ`šp†=DâŇŮžřECäÁ®– É%Qµa}-ŚëđŢéBJ"Ľ––8’źÍóßí -‰‡ş¬$ˇÓşÓ’G:¤Ň”ŤŔÖ’¨ŔßQęW-†z-d§°\{u=8±ţ€ąŠ!,e7ëúnłńˇDŹżÇ‹üm9_5-,xďčQÄĹ•Ż!µI§(4DĘľ*ůSTó‚fúŁH‹ű±łŇV‡ůCćĄ
mžôŻ2\4řťUxM}í®Öş{ńpĽhÁ«ä¨€D˛Ţ¶čLL>9mzi€$^˙Úö$\?rĆ Ën”A@j1é9Ö°Ň3çőÇÇzüJ?dÚĽ°L°oň'-Č&«.ĎpSPlU4“ď…yóÄŰos5€ćvóölÉ«¤w#¦Ű»óM`“m{äK@űľŐ'ÚZ±d#ń«°Ş‰P†bżhsÔJ|×xŢüÉ -ö¸6kĘľujtđDvIĹ)E5Ĺ'1ţUů´Ľţ=¤:cđĄ - T -Yů)ÓŢIŹN€÷ÁꑨsjäöČ»ň<®4!4śI‡Žá'Ź>éˇT'0ă™wŽű+’Ř.h“sę„ŹŇuŹč$ő<©Jx¬˘3ÝťĆĺűpJʤ.üţÜĽÔgĚ1ä[ýxţůxr@\*Ýý˘łćÁž;$|¬
[§)ŇÁ5ż?Ł2đúŮ+Ě -Đ+Ý"WűY÷ş& -ŃvQË‘ˇń¸óAƵPëeţ[çěVÓs‘üd;$KI´°¦«>
Q·¦ăON^űŹµ—yn…űăs ¸<ĂÚŃăĄMŁ-©ź–ýŁ}P2P˘Éř–ÚŰŁ‚RŢLçűpß,ŤŕĆkŁ€Ť6ęµ:‰DŐY÷ľx$•v˘›Äo‚ˇĆ›ßë‰>¬-^ä¨OÍí.ßÍţY¶`Ľ—äôwO““˘*şĺ\‡TÓĚr‡Ę˘Á”´ú(r»‹ÝtŤâ}yw$ŕuDY¬ł=źŤĐç˝ë{gzÄĚcŘ ł{řg~cŹ¤evő0ěřÇ€Ez -ç&™$¦ŁJÂó‡3
ŹÇg{óäl+c]ˇ -ú}e` bÍFÄ9±ľ‹Ćł¶î·ŁL§Ťk +xÚ¬¶eTśÝÖ% +A‚Cp‚îNp‚»»;…Cáŕîîîîîîîîîî¸yĎéîŻÇą}˙ôý~ÔĎ^2×\k®˝G‘É+Ń ˘ G:&zF.€¬ąµˇ“ČFšNhęřküGF&d4p4Ů8ą +ÂHĎřoŁą¨ąĐXŢÜŃČ`b`őwR˙˛«ŘíĚm€ý×0tLŚŚ˙áS637˛´ůgô?ţíÚ˙'ůż"ý‹:¨„†¦Íľ©˙Š’˙«˝Ł˛«í_b˙Łń˙:ü!(r¸Ńý˝tĚ,ě +ŁĄµ:ďôŚ<îř鑢dhp ëŞg—&3 +–ŚŰ +©čgĽuéZŘ@9 »ű;ovmxc +ŚŁ•´ó–ÜőPW{Nü Ľid÷{‚1OĽ&™Ń…ŘD +cbßď{-*~*čŘxV/ËöŞĚVďc·ž˝÷Ű×*Ł÷ď"µrĂ}ő^öç‡Ür]…ć×i,`-RĂ«)ýôp:
UíłCKČVZŮ_ÄâüN@-c‡‚·Î'ŕ¬Vç<54ĺÉáľźŤőĎ]ŇW*r˘âCoéăPަ«7}
7ŰĽőťať®WbŇčíBnLHŮ8:>%ÇţHMâ +*G +ŕzP¦;hÎt‹®N¬jLěDŞŮř-ZÓÝú˘ĄWdCZÁ–Ü ¬ë›?0Ő*+ďç"«(ĘŔNzDÁ{¸ŤäźłĚmŽäZ5cÚâI·”ŘčkČ4G8Ms˝~»ÖFţ’ŁĐmizIŰ]đ~L¦*ńĺj:’v'8q°%6»BŮZČě«"4ýX0"ĘxČú°˘ÖXřgÓôc_0/ŽŞÁ(në©ŰŔBOÔĄż’Zć.VŔ7z¦Áĺ“óf3\Ň(„˝ĄßW,Yő*w>îOŘt„Ő?Bśŕ:€Bť-}‚p_7tl‰’šĺłxŞňá,Ić'ç‰ĂX’ß:Ĺ€Ł3.…/<ŠXdbżzş:XLy´ +"iľ`x/ň8wáĹřhCM+hÔŘŤ@Č®Mä‚čć‚ŘDĽ&8Ŕ8|-¤ź—jv˝y¦zFŢ©;˛)đXPĹŘŕ˝h/Ő+ŇŻp™ő×v;Z;IrŹ†¤O”=Oé®fâŃ̲–v&µć5Ž-‘ĂSwÜęé}s«7e…~šÄĄĎsđqP®‚‚'é§őAÚäžtâă•úJ$ZRĆ•J± +|”±ŹÇŮöĚŕ_gď´M?F! „˝1áFţ‰
şAÔëŚŔ/ů±Ě™¸‰¦ŻF<^Ăję^~W5ćŇÔB]•žĽĚŇkĚGŘ—l4wÉ!ß܉ŹĚŮQd{6—öZýŚß™ +Ă/ˇwjË=GS¦¸mšR¤ˇxeť§I1Đő .“©”©>ëFdîH(/ö €ŔĺśRCř!Js%±žsjśŃ·Ů +ń/Đϵu ¤ą»“ąđÄŤ›Ě?.{Dy¤‘qaŠo⥇/KË‘@* íÁp
b%HągŢ%^ŠDęB…n”˘źŞqcŇţęo8F`č~Ňmw'Čč/‘ŃJCfŰnLşŇ™ÜAąFe\·Ź’/«*U<ףL©Îhn’˝PľęŕS~¬Ş6˙žB±Óµ×řŢč,HQÚV"-,ŹÍ‡–Q´C÷ČáR]u=í®p@”›Úň +é{˛^-4e+‡ŐŃóJčÚ:D¶řľ‘j‹ô©cŽŹá0_ř«¤¦®ßďÍS®ú!hÂĐN¤ eĆ'`ˇ+`ďSpe#_. +$˛źSY^™Âż5ŰÍO”[r¤…†Éé&»Ën]ÉÖíj8•OČÂ+uTr[kö
ő:ŻklíSOoÎÓŰx.ĐŰÖÝČËčáIeyxU4„·a‚Qž:×z@ăYůŻ|{[¦µTR˛źúäm%›& +ńŢňŘízPĹ'éÖŻĘ|^‚q`hĂźůOj»]bí7!dňÇş®’đŚu, çŰ‘?|) îŕ0\ĄŽÚżů;©ćôX cD††2‰„Î"ŰbSŢé•ČóŮfÉ?¶o†˝0ńëhF$†z¦;źÄÔ&”n`B,ëŻ&\iŘd+Ă ]25ëw.ĺž)=0©¤U°ĽÍ+ÜíĘžXAŢźrŢş«Ô=DŢi_ňéř63cEâąHo÷ôIéZÖČKź™&Ú¤Pä6>
Źi0ÇöćÁK?eŇ„Il®§Ą<·0Ď`šf’
Ż>‚§ĺa*?»f°í©Ur4ś!w™¬˘ë¬cŁ|kaŔ¬Č›u)í”ŢÇcő ‰Ó#Üh)Ęă!$ˇpE/´óvąîňôR,µo“űwt“g)‹pvFĚŽ¦‹4Óú&žúsŘ& +StâÖöľVâv6X˙-4ă®ňZ_`ßç©1â˛o'°/xńO"¶µ_6Ú<‰6A@ł5~~âuYČK\˙D)‘ĺÉřD¤iF̤ESO¨č4áZĂ˝Ëd"Ű˙/?0żÚ+é#Qiőě÷d˛bk–ßW/dO籹őË]~ĂÉ/
Ą¬ąŰŞŠXôc|Đ +ÔZúLťďçłÔ +—7§EáűăóĄčëńŞźp·ËrddmĂîóDëĽ:1& ţ +´*©…ÜŠÁKcr—L§Ł»äĚS\¸ęÇoć ć=ń?ôúó=,ÓĚď_>CCÜĄ¤´¤Đ[•†őŹX("Ń'cËľ7dŇ)ÉĺI†5ŕ$FƬÇůî%űëäTfŘ„ÓsC±óíše ľ»HaúĄ_ë"ŕpRŹl«RÄŻašÂoĄ~бE3˝SS'ŻG‘´“D/'íÂÖB‘ŢW°«óç©ĆÄx׉˙±şlXŤ”â˨Ä[ľcč˘4pQ’*%Ůá]ÜC®‹¬˙Éŕ ZpGNe‚2ŚsđŻźí?‹ó‡S‚˛8Ž’ťlýĄO űPd)ošµ÷ueş“ęÝä¦hëâď‹GĆĂĽ=KSç—7–1s#Ü6ó|Äěi«s9M»Öĺ őpš^ČDtríHY
zŞ_ĹIt¬ÂWîzM=Wę‚nčAh泯XÔtĚČŽü÷c‰ř¬źęż§úŔŇ8Áô"oZđ(íÁgř!¤řˇÖGăćł…żçëňŹ%§ŘVUśë+Ý›HÓĘ`ÚŁY-dú
˛őă ® +„˛ž0;V6c>2ˇ@›$tdL]Š++ĹÚ¸Ęň‡®ťxőĺµĘbď•-ŢZđÂč^¤=ďÁýV´Ł’ýdä˝Â§UVŮĐ‹gXw8ĎR[cšô;ÚS“Ĺ“í@ÜśSIöGN§ľ +ĚyźbíN°ŕ@ţĘ– Vht2ĺ™’#"¶VËO®Ó +=â•m‰±BwćEůüŤŞ| $-=§P©VZáL†÷Jżg$€:O3WŔoVkL Ľ˝ç˘%Ň4—K˙¤”ĂŰř Ö~3×&w¤EŁ¦Ć™´ŤmKŃrę}ÓčÍý¨/VŚµ“Ś’ ‚ŁžPç3†ň
/fÁD}xđî–X%'Îuű}E ÝOQĄ†îvy'r`A˝LśgBÍäVćeiQvŤ¨µ~»pĄfí‘{j$é+â/Ś®1/¤ +ĄT4ă€Öč~ôJüń-2Ó'huGÖ5žĎŻ’ú(.°đĎXÂt·.őHdIęh\ŇźĐ×äĚćVš¬číÎ?˛î”4\”I!‘É:§‚>ń‹ěęyě +˛Jqú/cb+ç8őÂüÖöp"É–[őظŢĆAŔŁîMŚOďł•ŤĐŢ0‹† +ŘCľ?’ň…G +ŕ >R˛“›¬OjD¨5ĺbâ1îâ?ɸ픥óLQÝ“rm™üĆ|S˘f†& +]<& QItü˘†3yÚđ¬ËÝ[Ěh‘°â==Mup˘ń<}í'UĆ6Zkďjp“ó™Q6öl§Ű‘ľÉ u°— +zŠulî·z‡n}«Ŕ´—O :ŐŁ×ĂÍź·=ÉÚ)´k}Fe¸őnré;o[?ľ=ĐĎL§Ł¤±— e@2ĂëânpúoŹęßŰ^„żZ§-kĘŕNCÍ~ľ9ťŞLđ|Ľ4Ŕ@DLÄóVńŐďĺMbźMŘŢ*Čfg¬qV
`T¬Č?ߢÔëEŚÝĄ<Pr¨ŘO5“6n^JĎ4Š(›®O&Ň’<‘—Üi(˙¸†}©Ź§Ĺm Cçi»ňJfĘŢÎa? 7 â‘XW$g[hzły2†ýŤµjŻÍő‚p§Ľ€ë<Ää@Îá2Ę_ąEk]äA=/ŐáéÉ»°4@1µsĂ˝<!n^ĽÎZľˇ×ËM=q·ÖĆŚšŘAŔűJž6üĆŻµ~%Br·:lDEdéŁ7(Ľ†CMť12ŃĆ°gń˙YaŔŠĺŽ QźÍůÍx7%)a\ńŢš€…¤S@6%'đř¬°k88¤äWÍů8WĎ|ˇßľË̬Xf‹]Ň r©Ĺkt¸bÜíő7 +;ŽľÚÖü–ĂzקV#cÓ3[Y`
łŚŽ¬ÍŁ›T)ľ:u‹’Ë…8ľĚQÖ„¦Ž÷V“{HŢîllFH^ˇřĚyeĄčçŃ—Ž˛@«ş8`Ëň¨ťcŻaĽëHgpĎ;îŞ÷íéJ®ĺ¨=kXiBĐĐÎô”O§óuú÷„ lÎ@_w÷>+ă5Đ-46}švűş@µéúăţąŕ€÷q_,bĆ‘účŹfËȦăŤ"ťň&GIĂ +ńN§<|AŘŠçqáČA‹c%‘xťČ}pµ{ĺW8řyŘ›Ş5=ćfWL;Ȣȕńŕ%8źďĺj°/_—꣪‡‰ó˛Î
×™Žşňíňń¶çüGĽľiRÓců–ôSĎűŕű›Ć|‚ąT+>-ĽĎщyÉ}‹DŘ٢ݛRź©ąŞéÚŇbą1ę+z„Š3@ŕ—ěł_RJ3Ąër©”Ë®ÂiżÎČʵ€Íq:U(gťFS”|¤=×çgč|úQä{†ŘzÍ"+T8I Ą»ÂĄ“w¶ĆÂsa5˝%xUxýWBN÷°iŠ3›!ę¬×ĽN«ĽuR6XÇ4b{®`+éĹJ”ęJT>;3»¤V‚’ŮĹíÔ˝"t •Ł~ąDWh~SˇĂxě¬o9-9RN/§×ç¸Őô„áâ*LÚ2m|ňýâ6ŃÜşF+5Ëp>qÝJA“ťáuÖa~ŁoGÜř0dż.
7ř>¤O~c°N®”‘ő›‹C€ŔŠ°
X%î\a…¤$Ükú˛ć=,-V‹–~˘´UbćP{wmwŞŃs815Ć·ňŁ)eć˘ +Üw„ŐkZîą|ńä +!Đgͱտ±ÜKŕrUŔRµćôľ +™1µ·;,™0ćr†8đ¤XŻd/ĺ ťEčOÇ'g#•ľ61j=˙‡
gě(˛a[xŻ”tŔâ\ţI2i‰äTU¤Ĺ/ͤ#`•[Z/¬J™xËš&ą ¤Z\ű‚¶T39Ňឧ˶0öőĐ”öËîÝ$×=é>Ö˘P:ˇ=ą‡XÇ|?÷SűřĘ+Â#ÜĹu[“oAŢ8<Ú‘ÂŰŃâE¬šßö˘7â "Yř
Ć}a\OOf‹’Îw2ŐuŽÔ‚dŹ?•Veˇ}şŠ#˝ă’ť”±rt’Ő,Ň&VŚŽ˘E÷•<9(;żv-©űÔ}IĄK„@€—l÷Už°—ŞVësFR¶ÚDKŠPWĹąß<ĺµNŚ®¶{‡ë±ŢĆŕ|"ĺŐGxşLrRŁpŤÖłAí,-bDYÉĽŞ%c>Žă1vű¨b<żBDŐń“ńŹő˛ČÚŽk”©Ęk‰^ĆűĐ‘€G'ÖĽ]YůiŁÎxśĆ'@‰uűT~™ü(%K#V5Jżnd +o-O:ţ˝Ŕ8‹YZ<µ˘9Đ`¬r<S?7ë‹ŤzÉîCd,'f,śbWőĘ0÷”ĹqF¦S3řÉSŰ)đÚ?ߣąxéngŔ‚ +75z†čgŤŻŘíîÇ=EĎ.tă +Pdďş]ŤmĆ5ŕÉTŰ'çĆ5śÓn¸Ę&©t +ÄćWˇ#čHAľdolŕDUs)ŕ–ŘWbgäÚş¸?†cG¦â¨ÝMŇĚ`UÇx5ňúÖ»ďvüćNg?ż˙,yľľDUĚCŕ_2XŰÓÂ}T[ …“Š2ÚĽqBâďu’nk'µä±7•t„JÔŻťhpM±_Ó>\™ŐÓ‹”RďżÓŽŃ0¤Ľź&~+ÇW°đ(Mş‹(©uf÷ăh
'ęčřęŚj3‰AyqíÚŹę™'Eˇş"{Đ0ö©.‡´şqŽşéçrł>6ăN›âČďúT6/řŢŹ´˘[÷‰ NߧܾpÇŤ§ŠwÜ3™>MUńóaîÂW¤w}Te|Íj·XĎŚ&®rlĂżlˇZfÉ@Oů€©~VËĄß
€×÷}Ľ„dÇŃř„zq0€‘ŃČuĘ'ŞEęg-7†# +ąĚę㋲ě^—łö/ml\P¶¦ÚBѱµ)ĺżG…ď +şÔDh]ms×çV”Ś7Ěč®ÜOĐŞO߼Ž`Wĺ"ÍHa.?ü¤íÔu|É㮎QA©qŹőĄ-öÉ´'—ůqQ)eĄ2ĂďŁĆ:ŽńDúy3-”Ž«Ęđ]»¦ć„ĐÎ
+8w—đVL Í])®5dÇ`›ăŽ)Ş8’LG¦ĺlgkk±6±—úŢÔţeŤ[ź.ń"n·m^%®ŢÝůŽ~&M±řxˇ™Ż«"f»Ł¸çčŚőJőGŘ,(×-|Ď<Ň3šx *˛xŚřd¶…íäŰľW”•¨B&u1”¸˘ĺŤůx +»=|]^˘µ‰)cú.”ámË.Q/m\lä+J'Uu\p‰1‰¶=kňձⲴĎ~Ľ|ţ-ß,:K<%ĎD÷ŐëEj†‚č×đTúąŚ—xŁS8$'
Aüws´ź46Á{ZBHtŁ›Ť&ë/cfľD6Bű´6‹bą”íz_Í3”Ç+ÜşŔ‚ĚÁ …ă{„Jô<N
~2ËCż":śg¶Ż±BŐĆCűhK‘”¬c +ĽiHýŮV€z)DĹć?Ńz@jsĹ%ü…™âPçh_Š+(ä~§ôXrĘ[I“Nb¨Ç1[VĂoŠ~ꙸr 8Ͷî*IÚÚ¤źÂ\—lYM> Ôç|™\$ÁŘ9uŚóĺcKwó§×L%žôsöĹDţ„50ü9rĸŔĹ‹S82V˝žů‡Ú‹ü›wŇ1Şű~Ő8ZfŕŽďÍ™Óeđ'ů97’ÄY˛ąůŔ™ęąś-Rc”żąIťzq7F§S˘'jűÉ:ËăxšĽ,áç¸AÚŻT'č?ÜGgľÍ‚c&ú5ö9eW̨Mň +Ţ2_V嵏5ěj¨WC <§hâ3†EěćňşűŤ’ĐiŘkÖ‡InŤ%Eť˛H*ęŰöéU
ĺŚB°uĐ|Ś]¤Ú4 LëkWŻĎ…,˘@‡4"Ž´&´Şés…aěLMPĺC:Ş-č“jôkŞ1´O˝ëZĚř4BSY@—d°%v誸kÁąćÚ]Ü7?h‚±m•ßS ,ŽŞÓ,¦¦]\şlĺ¬Áć`Ř0#(–üĘ#3 Íbęď}}i•YŮ&—…—¸FľëëLî‹dnŃq… ©/°űi®šŤë“]ik´ä"ăţ‰ą˙ž(%Maed-ëă¦ÚĺŃÂŔnćŁ Ůš<Ď8^QĚ s9YáŐ3śÂ¸+uŹ$QÉë8—Ňrx@éh籤‹9ĐV»Ę8ĽŞ¨@xA¨ŃÝčmłŔťVdőĄ@Ů+'̵…újëł~Ă:đü´4gÔkŘrěů0@†ÇŢş'z_§B6`‹~Ź#‹ď8ť>kŇZ +áç!|k
o. +Ë ŔfĆ,,dĎ÷JláĹ·
†;[»€C|TSůţ;¬x›±í +3tăz‡•Ü!Ďžß4ĺ î{3Qů_ Xv}./ĆůteŽáÇ×ňéV™79?ŰöJčTČž
bO„î¦.ť +ߣ‹J<BTµ»"ř¨ŠŮ-ŕ”Ää»bžš÷ĘyékďÂĄË?
—é-đ\ŰxżÝË©"ß]ŕ/Ň»Z´NcâbĚ=˨#›?{űĄOlJ°ń¸m%¦5ÚFÍb3?šłŇ-`8nÉŐ9Ů2šÖő¬„¨Íݶ&ŚśęńŁ8Ä–jďŠW6jĂŤűCľGjĂ»|yť űÉr‘ +9Úä8š,“Ă™MÓGŃ›z"*:÷ĚreoĂŇRÁ6źŕ/Í3,z©™ß+‹§Ű3č^ëľ5Téů°čW]'ů•ă˛Ô?zŰ&ű\„qgnŇÝ-ţÔqřÍr/ätuߏÍ<ş˛óvqQÖ +Ö*^0č 9h9.¦ LGeĄkQ‘µ/É7«Ľű É˙pe
Z…iě(×q?T‰lŐ÷ŘJ'…¬/q÷lťĘ,Ł.iaćŘŮ˲™ä”‹.ˆ(®Ál$˘Feś}m¸€‚O#t^!fl—ń… qô"×˝˙†2öe›aM2ď~ë^S;ť™qnćIͤ°¨©d÷Ó7>Ë”1g–‹/¶Y‹ľ§ +ŹáôÁ*:Óĺ{2/zSFË˝u»ą5ɬŞMóaIAđa>čfżţ:îĚ$ІUb95ŚęN'BK„H‰0~ +ěĆŢ)§m˙Q?Ô1öü +Ĺv-ýTěkC@Ü×*,¬RŚµŕ‡6¸5"Č0e⚦ĹęÁÖ\íô6ó&‹%i2´xݻʯÇČuşí0Hu—ĺ<¦m3Ć{ˇý¦]MP¦Tp?,˛čęѤŚŁćV¨Ďü®&ĎvOSg˝‘ŘÓĄ/ŻÖpJ$ÜČO^˘eâş$řD·7!˙‰y„ +7Oá0ÂEi ¬RµČ‡ëy–ü +=?OňJwyhµ÷l‡žńűbř66JšqŮŤźź_¦0îXŽŰV[‡!CőĺÉÝvf3ôA.ä€Öë¦Ý€hOl^˝%!†ĘŰÖ>%n˙Nâ.ÖÚNӢ𠶜ۗ„S’!F\\ěqÖ^Řý/ÎŢ/“ßTϤĎ+‹>’”ď-r$ÁQ6™,0[–“©îC¶U›»©ď‹¸j5.·W’M p….+8R7¨ ‹úyżJ”ĺgĎAE±W” +öŐďŞÚ‹ĺĚ‹1>vgfXb^ČM8´T©ŢI 0o¨eHî¬'^~Ţ®6O˘H/ç <š +<’¶›ŽL|ń}G?Â-Jl µ™EŢĽ°őŠś¶ě´\׺žź3ňývJŹ86%ż”UWgX:Ç6†ZőüvÇşE/7 NĆô®Ţ!¤Ćî„>ŁĐ9'Y4ć!SĘĆYĺ/•×‡Ý‹đjąZ'‚Ö±Á +ŞÎĽpwľŮrba\NËF?ď8í4Hë:Ăô‘ߦ +z˘UjýËXŠeLÚÇą—Ď@›Q{č3¬áAř»š`¤Đą]-Ż×-ž
3NRŐD©%µw—;ŽIĺožöj@Š¸ŕs16â,mÚćKoîQůZäz"˛Ó=®!¶ąś\KŢźłńžTD+śpíoŔuRO±PRŮ$–!IŐŰąsř}Óu#$ną§=&ÂŽéµŇLrXŢVLŹ-ČďÔ‘˛šôý$ÓsadLMűŞ29Š^¶MnżĹÄtI)™‰ŁÔ +[ádĺŕ\FŹj?˛ĎV騴ТŰĺl+¸¸ŮBÍőÝ‚p%Čű(ŮeGŘÓŰťŁ'–=N'žĎlf$˛â\·Ô9«ö/ńqŇŔűŐŮVÁ‰2w_Ż„&Î˙K·¶Đĺ^•ő@ŢÔ«ů żÇC+†ą@őbľÂ.?ţqbH§;ž\Pz‚(—ýô ¶h›ćń‰\Óá‚/ôk-ĘY9ŘÓ=·% +T¦C~O¦iqyÍ„ +Ăs6Ą€éĆwě±3z’÷§ąZózÂ%űáő4ó)Ă`›ňŹ +0€‡ż*ż\Ą%9ŹňD= u ć‚AˇČu¨µł¸Ń(ńwŹ’čO_.§¤†Bkď~Q©;N©‰[\ÇÚňžkŢpśÜc\m7ĺ âŐ˘g\ĘQ$úA‰ăöçĘŻJăđ—ŁÎ…RŢĆËŚÇ›•ělSŢRŠ‡$EâŞß\Ě•ŹPJČkp!>ĺŢąőžŇ>V™ C(Řn}1…˝…őßžV@pű‹ő»5·ó”ŹĘM^’ÁrYHąě)s×îĹ ‚ü|0aµŘ&ΩVćŁĚw:A«ňzxÉÇ–i‚Ín§ÁőČiĐ`m_g‘ş‘şŇëqĽĄÚr#ŢĽŚ÷PkrŢ„+{–óřl2 ßľsf~foOŃz‚e´Ű‚ÇŚŤÎOá:řÓ:ýmÜĹb·T +^q&SůčâĂ^™üLxÂŕÝ5KÝ!ŐNĆ»°=Š'~÷Ť<źţlň¬±Ĺ˝÷š==x\´ő‚Ţ /PŮ®ŔĺĐNŽc4XÚGמ†T«sÚseHFyŠĎʢýëŁV–ę•,pĐ +קоf«sź7ę×ů-Žřx$‘ ł +=F˙lĹśNm“Ú˝2ËT©”Áµs§čkUÔĹ
˘ç +‰;*tf Z6ú +b›É>/„›”,Á÷w:}ŚFíŕxäťUb0
¦ß"ĂŁp¦ężV[#\‘“ĘRšëŮěčőFň›ľŽ!jď˝ \Ó1ĚeOJؤs e/ŤŮŰtéÂűÝť +ą?C”ÍßL–akđ‹kť«¤ĎÓŰG+9ϸQÄëEĹ°/%m‰‚”˙ş©Ĺl;ŔŤîâ·„îŚ +™ĺiP@J+E’(ÓĎëăšCŕĺî꺌ĐF]75Ô°ĘúňSŐąńÝźhľ»‘ěV% 2ť§ËSi¨¤Z¦¶ZßS=D@‚¸¶«á˘ť%rŕ„>Ejη ˙´ÝühŽ»Ë.˙¶ď…ţ{3{:LŘ~Ëî żW§ciqO±ŢčcµžY*EĆëćţ€ +żéĎZřÔřťH‰ÝVź™łĺ˸•KrÎÝň8Ó
×ţČŰő?šű‰ú,|ćËú®ş1Qěuĺ
Vż·*h0] +SŢ9ô+d¨ĹxĽŠ,pn®ťB'ôp 1ŔJY‚;€{ë€ĺJůŁÂ6I»{d)Îďd(áón5Qř1Ěŕ»ń0Sť“7ŮékŇ·™É}Fť„äí/í(äŠ\{Ýräkç‡=˝G|Çu +ś đ:ëŔ +”‡—ő”ş@ŻKŢŃߨŹŞeA›]>#űŘ0ps3 Ť®ŘWˇ>÷•xŰťn¬=6ů]9ď űͪ⩶7H›Ő‚ŃTĽ¬µIä56ˇÉ˘ćX‰ôb±ŻIşŁCJ>c- +ÂÂüúĽŕ•¨z%ű—éô:yů82F +¦nçÎ1a“;Ś—P–lžćĺBiĎé(Âóă/ęµWfÖĎDřA=Ö˘ľĺŹT@Z`g¶¨¶Öx +»šVCzŠ•Z˝;zśü˘SĹĹűP×Ń6YT7H¬E„ĐHČÍ +ˇÓ=\XCý†!•B§±ĎtßaŮÂK‘9ó™ę®‡ ›ă†‰0¨ŠhƉ˙} ô;{‹.’`+ĄÚNĺלçŹ].íýěľĚSžď"˙ˇÖşjkFoq®ł%°Ż“0˛*1çÍQůh*§*JNČ+hO´ÄÉ5u-éG±Ú]"i¶wşýź +6äŮôÄBdqnXń.ˤ¨ă®DŃú%äď¦ý•CšVP¤Äk˛%]0_tU^6–É*ÄׄőËőĄ×·5K®W;\r=ű;ó)Wâ^äÁÖ×Vv:ëĐîśü®JiqşÄŠ˛¤a°:&)ă]Ŕrsv€Š†GC¤ß˘é5Ő»Ă)M—ˇ¶Ë¨vňąĘÄ+ßr“w%9<+łČĚI„ż9ÚĚßódF"źů+~Z÷1ĎM UôŃβ=1ůˇ˙1ĹŹňÖ°1†čՓƪЧÜI3ŕóÍřÓ…ÇU}÷˙ÓKňHZ⤬]0˙”LXú‡˘˙ç5É›-4.–ü%|N
}8€?g"ŘPÜz=€Đ,†V›@†Ř‡[äÚĺž3ň1Â$MP:„¸32۸řVĘ%.ĘÂW=Zwkş®Í;H€„RĽmŽÍ–ëL†J,´űiT´÷+ä›í’–.šíADc[€‚˛J}—-4^-7™;żňá´,kwůZĹ°gf‘'ÁĽ4č´AŢ_¦”›Ą9Źö#X ×ŮăiW4ĺ5’«ŢEw|As
F۬×\âqý%¨kçecĹÖtäSĹóŰ„:şMVěč;řŕ™9¶ĺţ/pá =Ď PdÔk6ła[ÉčU~{án&yMuyĆw5řÎřT’Dܡč—ËţÇś{ź7õ|&ĺbˇDIňp_ňÍ\”EË…Mx&Žâ)ßA¤”×%‹ł¦ţW¬ŞGđsČÝŞVš˘ŇRŰĆß ßáý3„)/«·&»B@.Ůi¶;™~쾬׎ňŚ#’:õ@XnÍűCp߇L^]ú“eŹ•RżÂšĐfżlChăňs!´´·E}n…Ąv×WPRőýáń[ŁTě…Gëbďzš×Ă^ŢĹŠ´řµPIňsÔQŇF™{‹ +ÓZŮĺ§hJS‹Ü‚Ĺ(ÇY92ŢŘvß ĆYWj*ź–“ČČźô0ʵň +µG_čKtg“Ć®r·»‹XűĆĘ©qíuĺë®R“ŽŮ0»öD-ŢÓP€TĎ/ŁAŠąBŹP
˛ĺ™“ ľ [oŁt#O>¸lÜg©—ĆřOK`÷ąôĎź4đ@)|ŐX +®ĹÇ‚ŇúÓäËľÔKśýSň‰rRńôŹŔčc¸÷64ţ
ĄÚ»|íTŢ~jMĄ˘`b˛ŃA\ĆBLKťÝ-i±ˇŠĽöÉyöů$-Ź×,î5aFYŞ»ý§2O\Ëů^–ťĐÂ'Óh;~š5Ri6Liż üŽÎS6óŐĘŔ»AC.Jí|dč•„hť%G·´dt ¸ţ#MčÚ¬Űä4“ă禡€q—nŮ{xĚčÖč%“Ű~°'
y˝~˛ Ý›t5#¨I\fĆĐ‹CůU¬‘eA¶lŁpŁ–'{tů˝ń đŔeŁ[tŚ|ü×äbhuŞ$ŇM‹Í?š?η¬Ďz§ZgvĚ[^˛¸ÓrlŔ}É@ü6ß;75‡ćŐľ6ëŹvőeB”Ľ}„Ťáe–ů
6ĺ>—Ţzz~+ިřÂ㍔Śu°úş_Vaë¬SI”K¬Ŕ"%w3µĐ
ŻŻÔ¶‹é<ĐńěUŹ“ńšlľíFŤţŁIżŤ$'2´D¸–·¸k‡ÓöçY0:4)ţˇ,q„GÜŮ»mš6űłćjZµůFéX‹%pX‚ŮűţĂ˝×Něp¦•u«í$Só çÖ«5Qµń ĄKŔ·CŢÉ"<Ö¬ëR +YľşC!~άĽĐ=<ĚÖXŠ\ŮpÔ~N7îúDZîÚr® ,n6}Üţ…™eÁAĚă'-Isç8BŐ}ě˙'µJřF`yő
Eťf«¶´‰ps~4|¶•îŰ‚B=Ĺ÷ +Ń+É8`<gYK5PÜ6ÍźóˇtČWşÖÎK4BZlĚůÍ÷¨lŐ®Cßëe•o:ňÖíŘ ×dĂCÓŞmpeçMřŽQŕ$ľq˛Ž ăíńŚ˝™nKIżÓŇŐt§ŹzZZGq…{©¶ö!éĎW˝Śő†ó)PżĆď€"7g4’Ůi<’dÁě7•nĐ`¸hZUś%rĆ”2«Űyꪋ%L;"WźĂYżÚţÜü§pD1čüE#ejţ>Dü»Rů CGV—Z +Ę—µ,Př*Íçű®`Űu‚Ĺżľň•:ŇŃŘîöĘĺđ‹ŠŁjťäąÖřjjPŕŤřLŃĄH»™¸ž˙ #Ł#»ĐđZČ“™cŕ¦ěÜ–D"†a +ůťŽE;Ţ+ô¤Ăć+4{¬ˇÍ)ĂŚĚčâNv§łŰôţ–ţľč¦uÎüřÚűÁ:ݸ-39ŢDzďd2H˙ôş9őčôz –łĎ?÷¦ŘV[FĐ@ág“zŇß:NŤF‰ç4¦oĘ6 >ZkGgq˙»ÔŇ–§>¬Fř•ýÄ4‚ă*d%:Tnń†@µnűśÚr}éUÚ«ŢńČ +Ş7BčşG„óÍËSKí§rh± â?ŇßLRÍÇ& ¶ľżB¨Ô„0}DĎ‚T$,uâŠ^·č9‹ď T˙ł€ąŃĹ/ď(˝HµÔ Â0jJŤüG‡ˇ·†ĺH˘FťIxm†ůQő3k˝b« +ŤüV´V2Ą9ç®6·]ŕ˙µŃŔ|Ĺ„|˙…űĘĘSČ)Ôugőt–cűšůĎŔ™ąŹ”.ÍdŁÂ_/»¨˛`稙Kak_=ž·ˇRcřžN”źó„Çiýű?Tŕá ă«°4©n¤łâ3Č ă§ę•c˛”mčýtísO»¤M0†ä„^K×qă&ŰÉ×*˙!ŽĐÁ'ŤŢ=Ö‹oô„0ˢřw‡be˘Zuďř}Ř9µA:ńâB«V_fďĹ'7B Ků+V…±Ž"Ş)Ő´Â$‘ÜlďA9(Ý"ČýŻT4‚ßĺ€mŞďĽ1´?Ń`čOt“$ÁSIŃ3‡ř #Ýéo‡7v=ţžöXTQäővYµ’c%4ŕ·ű…BşëQ 0ôB$uď]LęU˝ýĚľšQŠť8e ǧZ+äHŢ*Ď…ŁiČńFJ‘ŚŚg2¨ë.Á—îiŰ endstream endobj -1339 0 obj << +1262 0 obj << /Type /FontDescriptor -/FontName /QUTYHC+NimbusMonL-Regu +/FontName /FIYGZI+NimbusMonL-Regu /Flags 4 /FontBBox [-12 -237 650 811] /Ascent 625 @@ -7470,10 +7000,10 @@ endobj /ItalicAngle 0 /StemV 41 /XHeight 426 -/CharSet (/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/R/S/T/U/V/W/X/Y/Z/a/ampersand/asterisk/b/backslash/bar/braceleft/braceright/bracketleft/bracketright/c/colon/comma/d/e/eight/equal/exclam/f/five/four/g/greater/h/hyphen/i/j/k/l/less/m/n/nine/numbersign/o/one/p/parenleft/parenright/percent/period/plus/q/quotedbl/r/s/semicolon/seven/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero) -/FontFile 1338 0 R +/CharSet (/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/R/S/T/U/V/W/X/Y/a/ampersand/asterisk/b/bar/braceleft/braceright/bracketleft/bracketright/c/colon/comma/d/e/eight/equal/exclam/f/five/four/g/greater/h/hyphen/i/j/k/l/less/m/n/nine/numbersign/o/one/p/parenleft/parenright/period/plus/q/quotedbl/r/s/semicolon/seven/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero) +/FontFile 1261 0 R >> endobj -1340 0 obj << +1263 0 obj << /Length1 1626 /Length2 15654 /Length3 0 @@ -7545,7 +7075,7 @@ z)1€¬¨ąĎ[«¸ĽÓBTiZĹĂ—é,n¶}âwX°2Ö^Eţç3ÂJśĐç!7Ź6Ăĺąů7DĹFEŠŮMíRS©r–"¶6b FŕŃ”úłR:…{pIč?TRQýAjŢ×7@ß*×›(»FF uXFěR;ŕŁŔŻÝčÍkś{jým. endstream endobj -1341 0 obj << +1264 0 obj << /Type /FontDescriptor /FontName /NGPWFR+NimbusRomNo9L-Medi /Flags 4 @@ -7557,73 +7087,60 @@ endobj /StemV 140 /XHeight 461 /CharSet (/A/B/C/D/E/F/G/H/I/L/M/N/O/P/Q/R/S/T/U/X/a/ampersand/b/bracketleft/bracketright/c/colon/comma/d/e/eight/endash/f/fi/five/four/g/h/hyphen/i/l/m/n/nine/o/one/p/parenleft/parenright/period/q/r/s/seven/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero) -/FontFile 1340 0 R +/FontFile 1263 0 R >> endobj -1342 0 obj << +1265 0 obj << /Length1 1642 -/Length2 12001 +/Length2 11828 /Length3 0 -/Length 12853 +/Length 12677 /Filter /FlateDecode >> stream -xÚtUT]í’-îwŰÁ=¸»»;Ý׍»'hp·ŕ®ÁÝ]‚—ŕÜťË˙ź{úô8÷öKw?¬5ÖWłjVŐ7kŐGu&Q )HĘÁŢ…‰•™… degęę¬ć`§äŔ«Ŕ¤ZÉşŘŢ1N$**q0ČÄĹĘÁ^ÂÄÄĐ 3 - îŕč ¶˛°tĐjŞiÓ100ţËň—ŔÔóźČ{¤ł•…=€úýĂ
dëŕh˛wy§řoŞ@ -·Ľ -k‡Ę˘śŁ¤®đ@ş»t×i¤Ă[Żpţ¬Ý4ŕÉá.ˇ:đě™3pâ›}ÔĚŘí Bµˇ$ôĐnĽźmĐĽµídzCľ\!¦˙1Y/Pűő•Ô™#uěŮýĐŠČÓ8Žy -4×NZmÔs˛ě*F‹MůmES}^u40ąlJłSŃÔéb‡§ÍTdK&u}™:X$ši¦+(RX„1”b·YyÓŞ"¬‚ä©—˛ô]Ž4MS7YŃLü<¬îé tŇŘËŇoěX=kîÔ†}'î+: -—Pă°Š!LzAâ-N¨˛Ňx©FFî¤Z<ýH–¨iýöÇ\ŽWlâçˇ×É»´ŃnČ…ˇˇ8"ëÍľŚ1rvzßÜÔp
ZgŞr@ŤŚbľ´Ŕ‘–/HđJĄm'´ňé˝Pp˘«í§füwť6~#”É5 ĺ%›çÁÝ(żŔÚ=BÖ§c -HŢÁśŕ<Ă8ôî=ČƱ+čf -AßżáöË*–t” €†ÎČ ťzě,‚ź×ʧŽK˝ÓwęPr]úV®Fd$§ôżšŰ—Ă8tmm…ę*LŘp€Y‹€;í6a˛/sKU–
ě?ŇÉ?¦QWŚgoţĽ'mĚ6‰)ˇ{ť›§<°QŐ6„ŤIĹGú6çČŻ$*™S»ś~U‰Ôäě
cNŔ¤L\ČžxÝź•řËŰąşH!ľ9jtµg˝ -„k¨űÚ%ޱ;„ŠÂ7˛ó%WĆföĎ7zG|:)¦ěâ}t|)\÷tą(8ÖGeĽúô«Ę˘=łnTX†ř»Čł—_ún•Jµľá$˛iőü>”Ě=đ=P7Ű ĺN4¦Ę’„ę÷[1‰g - Ü"cŃ{˘žt?9f˙Ré*ę7±” -W{–řjP˛úţ)١ěżĹ<B…Á—ź
ű™ů‚Ó†ám8Ća¨ojŠ#řë{¶”B˝ąŕ®Yá˝Đ0¦¤N«!ůöÍôĺ -Á <b‡e.\®żäצ0Šáo+č -r‘ńĘW€ş+„ŚĽ›¸“e˝>R±D‹F¸ŕꢶł9Ń’CiÍĆÇVČđQ"rż‘ ^Ö±ÎĘç/7Őůť“«_ž)Čôđ <P÷$~‹Ź#~ě„wÔĄy)łăŹkżÉ&PZďöřĺ¬jÂŘX·j$1cíK0Č×GĎ´ź˙ag©[YÇeŇ‚(Šx›˙A`ŹD–Ł‹TşĺĂź,ßóĎę.=ŞF}ĆľÓj~dYĘ’ ˙Uţrň=X^WL|ă\˝L”mĂrčó{ ^3w -˛ĐçO´obÖ8ó+nÉ'űţăj˘
Ůľ…ÎŇë_ˇuŞl÷¦-TžXn`őÜ7.k¨J%ş>ŕס˘©Wt<S9Âíű?W÷Ź–1ą-Wő0`ŻAÉę.m3÷‚€R˘}+<!šeKŘŻkC?Ďĺ¶CHĐ‘úy¤ďĹ8Pëžg‘ŮŮşŠx•>}ó䆄ő<©Ŕ„¶:(uŽB'„CJ·Žá(IôA÷yFî”»#So5\,“t2rőćx=]ď ź
®Ś/rGÚËCÜşx„ŘÖÔäם†TeáÇąß8a -łĐmęŽFA ‹ź%ŔŔŽ÷ËĂB°tŞ'ěVĄR‰čč·ĹŻĺňb§SÄęMžlů´"Çźé°ů¨]€{3J`'ý‘,ęťózs&I”;řÚµŹŐmŔ3ćA˛eźĽ§b/›_UĂX\Ьcâ©š%”´Î–…ł® ÓS$:Ű;ŁKáj/Ńzĺ+ůđ4i`şI{Ăjóç…#?$.
¨ŠŻuvĺÓĐ&Ź»úR=féĘ%×EyŐňG6~´µ}v&yhćóÂŕ*ťü*í)v\ŰÇ~Se>)áD±a .«EÜîŤÍm«.1sá'w6Ú)€űă:›§€11 Á4ëž™ˇ›BÝ@ŕSǸ@1ÝĹÍ”Ŕ IÖe\«éČŮT7“›ŹHŔ>¸„˝ ýĹ(1}‚écęŚVGz„M'E†Š˙|ĚĘ>łŻ`ăk¬ íŰŕRţ>ôZJµŮŚHŠIGľoîĎzTA54ŇYűXMáeěXľcH‚2ěťÉÚ§źĽ « ň($¸}Yąç -‘é9®¶lěŰőňŘńüűŞă.—˙ľŮł€jrŽ•[ę(HZëǡ„aS‚•1d¨ĆÚb>˛÷k¨×öľńöÂsPjŚ&JšÄiš7(,tt/dćÔLśoüÁmuŽAÖÄ'Ëożâ‹!iľ>§´łas„‚˘ŢĽöÚ üi”˛#ö§ş›F®—ąSlŻpŁ¬FQ&”@c „+‡Vč˘t«‰ľ—ö;!x6Açŕas-ŞR¬ÄK†ůE`ˇ—ěťE÷ĄĚ°č€.˛Řă•}j~H;ľ VhŰKĆ1IsŚĚ[ÝŢK×Z—8®xPNÔmʲX·î<Ś4ëÜÇ
HÜż}pC+âD6_öÖřb…}`ç$uËQÉŚŔ„ąž±fHÓÓ< ŔFéxćîfŔĆŻ|ńŰůGň:ĂýP•o Ĺߤ»•¤e”p *‘ěYˇŹŐnŐę‰ä)PńŐÇ'ßaÔp%MĹ5lÝ.u0\ČÜ|SžÁř7†Ö¨ÚŢĐ9©Ô¨{¨uń -„™LÍ´ ”Ç71bťĘg‚ĎBÁý,;Ć˝=á»˝®iŘoĐt(âdÜ\›Ý"=Ń× éD÷Čo9Ż}»ŘÇßvŁXsËçK“ËY· -ŃRĽ›GŕňŚaŔŁcłAYVqSçí9ójTë3aŽňBxt<M VkšzZęUyŕ‘íÝ4MWĐ<nPÂQî‚ł -ýH©.ţ\ËIźńäńŃ+
ÍVő¦•'™J…ĎťÄöS¦ľÄp8Íľ4«O@Ź4^ö «;Š ·ą<Őů`:ł´FY„«ůe˘(b8</—Q”ˇłĄŃâdŁ©6ś<• VŠŕ7qŢÉöśó´&DH -!źv¬5,Hn{DŽţl۶oÝŁnµĺ«ŞŮ=Źä˛_’JUW‹˛Ę±[öČĎĽů̡‡Żń™iŠr§ŮG»ąD -JŚâŰ2´ ăŇx
PHă)ř¶¸Le[=™Ľ.Ą3Âý9ÉtüúvČ/¬{+‡"Ď “ČQŽŞ4ĺĐä·8R-÷ÁLźţ˛»vrQġVˇ•ń Ćž;Hezčä¬,·ňŘVł”pĄq6<»7óIâ‡>Ă·`0j~FU(>§čódkŢńďSGë@>2Y{)ťÖšeJ¶&ťËfĽ#sßµď DĂdđ»jrKIŻRÇG€ ,ű8gwTŚx“26z>Şň¨ő˘"°A'h*&v -e0«ţqdăÔóţ'¶k ˇ‹˛‰ă\Ćôß±ż2—žO7j9‹č–^Qc«”l¨ś÷z;jě>· jŕ€đĚÍśÝ f4qĆB7çjL0Ă ËŮe‘IÇš˝†*EŽgś›a ‡IXŽ‘2şÇ;:Ž‘&¬ć *żĎĽ°A ké=Żp&+ÍűVŁÉ¨Ă˛P2Ś©•SçV|đ€ -6ΆĹÉע~fNÁŚ·§@ýI´'Eş\‘ Ţ™aŰá7ľ -o‡S§łKőč]łŇ8ş
şÝ2UA†B/]`‹ţ˘ŃdĆđÄř[ 1ť6ę)!üĂ.Ó8˘ţHú5Ş9>Z–ÎOY÷„ źÄŹŃ§bA[á”Ćé˝âOOŃłjűK–îyČTťčŠĽU@$QhRĐô6yWńKřĚ1¤3ÔH.r$#bꢪ›}ć*I)2yż+ęçXř?@‹2JćŢV{á˛JYO§v5ur‚»š]"@Qčož¨áÖŻ¤†rhĐÚŞłµ OňĆÝ“Ĺşâm\1e–\w~ťS)VD0,NlÄć´aiěÄ~ń®ě8ÜŠ¦AGAظ¬Eáěľ"řesŁ ç ău?dxĆKđÇV‹sçß -|¦””]¸(˛řť–ݨ1Ăl‹rŇ>tąc#7p‘v÷ -ŁjÔňŰđĄ‘J<8=<łqbM2&IF…,Ë -“§ŮŽÓ ‚t‘`Q¬<Ď:˛ dČŁD˛Âc_I‚ŃłyÍůćČ–ö†ť;ô€î^úýÄbqęÓ#Ŕ~~jűęŐ’©uÉĘŘ6Ŕ Ď` ‚K -ap?÷ÄjMĂ–˛O)űů„»2*Ęž8©˝˘JұIęÇ€”Zjż;Wý›Źj19šŠë•`7ꄆÁą–\pŃsőăźĺK^!!š[~Uűô–ëÓ[â§&‘„®´˘Ţ‚'Ppť¸óôá|ˇîyÚúUwËq?Ö,a]»›„mZzhĆ"¸5®˝Z‹‚>ŻÝ¤×_v’óüý;…5¶d„¬Ůk&XŁói-<USb07„3-bŃÖ‚+ -Ź^1— -§žĹ—ľp×Â4Ý-ŮÉE˙č'QSţHăĎ#‚ő äU -ćůîěRk*ş§ËŰšşö‰#7Äż´gźo-"ą¤}Žß˝;y›óŔ,‡tIĘ5R‘úôwš%ŐĹ%–?ě
euŠö’8çCYŽX;ň´].Ay*čăöŮÎ]Hy]Mnö˘
í§^—×tĚF\ý řŁa›ěčM“S):ńů‰ň®ÜąCzOU[:- UX>„Uň <t˝Mćš -R_ÜnkcśhŇW…×…nU'.Iw—~ŕŐ˘¬®o<¶÷D’ŽU3ěWkFÍFó]µ{¸¸ş7«’±i-«fkÍL"Ď—_Ź=aläą#(‡"X Ŕpµo`ŃąŔeqQJßEŚs—ÖXť4đ§J÷nIĘGmxc–‡Ę㹡›UncÔX:‘źX®?Cy:ľJę]Ć{ŽM%yü¶×Ŕ[{°YęŘ·‘6@®ŮURÖâ®ú-îíÚČv±ĹUPÓĘxű&~pC‡xđM$ÚP˙A ócNöĐ!ÄJŹ łQ#âĂM¦zn÷n›uĎ ćÇľ¬CâY-ĺ’†Ťf+Ü"MéŹëh9"¤…ŢULx©ěŇ|
ˇ6#)ŁG…=ĎŻ?8đwSŢ I¦ô\nv$qTg‰c“a -Ła1'SŻ{”źc,OXµG`áU9ű
_ůđSR -‚ aXC|VY‡U‚Â~^'@9ŻÍ>+Ç} ŐŰă)$_…ŐÝĽŃu†mquĘ€vęˢˇ•Ľ2·– ř§8™ôE‰ľ<HĆť›ž÷¦óŁWŕ,Cý·ívYřđ·37Ú
V‹ău“âÉCś©ÜŇĄ…ž%ŚĘű1P+°2ú»ë…ücyÔqÎ -N^:FżvĽ^%eOy -›1ÉĐ2îµ˝r俉\7‡Ç
¦Ý5ÜIJbçę},ź‰Ú5*.ö@ŇĄ»ş‡ŠłF«g˙úvQĺÁ4ě«}`žw5·˙Î}»/XY|IçvűăGâ/Ąß;YQyŐhÄxgĺţ#S°Ťˇć©"o.P
—ő‰YíâqSJŕL¸Ä#Ą5Ę{!¬úŔśŁ“u0aVÉKFŘ5é0éĂËzŇE“}4śđ'VÁd<ň,žç”äelÇőôźĆ´b$
RĘ–™WĹ>ŁRÉZ+f}íŃ*Vň±s'1&»Ö?X2öśs:v2 1µ˝ -¨“¨Ç;AiÖ˛5µ{Ő¤ŹŮúlĆë¸óŞ$Ń`G`u!l¸éĄ§™NÂd -:A…TŁ‚ô˛ŞdËĆj&ŁxÜRłú8OĽđKÖEĚŰs×gÓ‚Oh-íF"ků+Ó0í^"‘±u©m{ ź‚dD•ăäÎ9BĽc†ÎŽćä ßÍĆÄŻŞťů«ďš,›őM˛‹,`LĐĚ84DwëóąTH±%<Őe#öwnz·eHź{ş°u”ęŸ6úČć%®1űőI~Ięzř¦”ÖżĽ ¤v¸ŰÄĽíÝÇYťčCÍiĽo>}&$˝ö;żÚVö†š¶FtçŁÄZsľČ©ÔŐą©ua«'Š©‹ř5z÷ýUâVÜŽ<Yöá*řfń.ÍĄ)2)t@ĽÚ“šDCÝňu6ĺâJD!šŕk–8€Ł·÷żp$^ĄĘÔµeHnĄOŕp÷‘÷"ňůÖę'!UxĂiCfE¬ńĘO4.ŰŐQz8–YňŠćy{Q˘]uSŠ\ŘSÎ\îˇ?Q<ťô«qs-&ż‚űŤçi1ťĚÁ„TtqĺXĎ
đĺž<?xšxr~›]Zňőn˝Ů<NZR"˛-Öç)öłźĺ
Ä<ĆúĐÜ1?Ź8ßÇ&űpŞ˘ŇŚe“ŹX.*ÎŚ‡±ŽżýAÄŁý\U,í˝ÖłI×oб˝1ÓV;{™”¦'˛»QđĹ;U -Ľěˇ—WaëŢ ´çë…˙űQFZ–¨ąAw‘ÇžIO–±»MŻăH‚^eż1Ú-ĘL¨€ÜtĚo¤ź–FśDAR{š»0Čç’.yńŮńÎŢçŕő~ą¸Ę˙ňCĚJp_ľqĚ“;Ŕł#ŞÜžcrţ)Z_íĆ—řveaŇĂÉý%}‰é÷%ć7“ń…őJâs˙Á?·‹b -Šą«ˇU—l$CdСJ1ůöt^±Ë+Ć[ţç9şđ-şú€–‡™—˛óqvˇJ]Oüş‘¤âö<‚†Çoc6íĂ„…?ńâ6îW¦¨ĹŃK ĐWc÷˛GO«2jč -b–ť OÝE…eŽ)HŐ(ęW¦ěüŻŇŔŐG›ô<70Gjjî¸ŮßDaŹQ;Kă¦ű°MŁb_,¨Ďsý˛g‰9ŔÍEř_đF<3˝Őy,p·RĚ[ -=÷VĹMd†A]‘´ăŘAj‡oĽiU8#zMdGU~ҢV÷ŰľS^íŔăÝKČÚEŹíŃóxpÎa¬«ôDsŞŘMľŇĘĂöţo÷ę…@c.f^ČTžć)ŮoFf‰Ü,”Î-…ý|Iú˛DĚŰѤzH?#¤;†"ťń÷«p Mľ—©‚““ów ®,ĺn7!o¤p4ĄçýáBh#Ƥ’ c‹Üü>‡FÍó˘Ěg–ú姜ş=űzťĚPvL8ŐśFŤ‘ä–¨Y˘š|쯹ĄÎyy“ă»eVȦinňuMŽć)3÷«ÁŮéËVÚe+˝‰ř€ă5\^Ü}úV"«ryS3*ąxóŠ°ŻoLj=ÁT_‘šČ[>,cöXçřg§0ţ „čĆ9E+ť°5âÚĺ>Ă/‚X’‘ç*»ĺě_µ±âvhA}%źo¤ Ö -˘Á– -F#"T‰ÜÉů¬@ş„2Ě·}ŞľŐŠ=§Ĺ_şŤö
ć¶&ďµ’«Öń[Řáis©óOLˇypÉ`¨9÷ÓđÄ}Ž*Í ŕ«ÓO¶Ż®ˇÇ7çj<˛^&鱼*5źm¦t
‚^2:eTȱvyƨĘB§Ś -ź¤M((ćS™SňĂ‚ŞE<Ś‚’Ąćc°\üyęśŮ:űlóÝaď} ďú1N [ÓšKt(ŹÄPšrs&ĆĆőpřΛft†7×€ľ|ĽşSł˝xUŰňąVSčhËĺÓÍhkóŽ™d“Çţنł(¨ü‰PO@ńŔ”®‘m*«_Ń\ÎÜnĺvx˙Ń>\źŇ墒ÉP8†1O^ĽŽluôOdÉd(ł@•TJ -Ü_Ě]{ÍyBô0Č -śĚŰ™ --vśŔfֱŒĄÔ'^»ˇ6lsę’ĚŚł‰Ż+šC[!1Ne÷¶x VÓn¦Ť+ńĐ°~HMOUtťËś˘É Ź"4ňą_’í…•Sűň0~*¬î’Nm<ŞŐT´đ/iD×Ě<Ř"ź˛W}1Ě›; -=YŻ>%aéB:ÂŐÜď=ş.Ž–rľâµ?‡Äă>…Ť»ŇśŻÝvk†Ü9h®E^5aWőŘçŮÁâÜëë`…šů|@oͧ&¶= $‘˘ś -j,3ś5͸±Śa»]ôśüëHëÓχ&DOP”Ďߤ8FfhUÍm⏷K>%`|Óy -€ÄX -6bĎÉ")Ea+¨z›ümőŮŔűacߍcŮÁ<u»Ä‚ ĎF ~‹OÚĺç1“dű¦Ĺ8pÔÄL1 VDś{"uxzLµĎxvÖí5ăů8Ý«ü˘’9ů +xÚweTśí’-îîNÁÝÝww§qşq· +N€7Ś…–VÚ
dáa-<@B +X +Äú?QIIA| +8H÷ććSĺIGc·0ÎëíÇH…çůĄj»oÜ
™ÔTt5Ć9ßď)šr,âĘ_ćg˘Ţí;jč™ÂÇĄˇÄλ«JĘäÖ-g^Uˇ4»űĂ9%FłŞ‘s'_d'˙ôwŻ)QNlɆ[í]+" š@˛6/y®jBĹ€[ÜŁn<÷]CÜĂúe+®ˇ›ŽJ´Ŕyˇí™‚ý>›’Ť¬Ü'á&Ĺ?U$E>Ď/ö"}y7(š|ăĆý´=l÷al›ß^°B?hŐŃ9@¨ßĂą#ßq5GVKc–‘ö¸[ŇZM˛ë^í˙g|60 ŠEúćÍ<ÝxÄÝaÚnŃ™
BVşJ\/€ôůÇö‡¶çš@mV¤×űźRÂĆÖŕ_M‹żbŚEV–3¬Ja§;žˇOöcůăUżuÇM$Ž4Ąď|/>˙á\Đ)±ĘQĽ(Ĺn9˛‰cSDŢléSęl+Í3Ü›űT•Ri$ń]Ľ,ýü‘nŁKv©°˝ňωüÍ pçń»úŽĽćC%#Ý$!~ŽŮDÍe ´ž˘ÜŮ‹$Ďź;´Tű°Żş_e.ô”âçq[Ş×9ś¦ééÇň…Ǹsř͸q§‘?đ:źié©
ŁŠĚĚÂĹmDik:'“hrC>H"6qĄVĆç÷ +4ÎMz2Á“s*[äPQ]Íą‘Čűły•"Iť +ýͲáŘďöeąáŮŠ—/Ey”ŚÄ™BĚâ„Ű‹:‰3í;‹^L –Ú—ąäćyyŰď1Ř~BMjMÇ+öMU>ďqîú®şÄb?I/ľ+Dđ’ľŢ#=Ł‰ÇŻ€F_áżtĺűlĐ=ăO·ő+l“K’–E•ö—¨^_K69.›5IYW
IôgvUO›;ęŔQĘR¨‡Ľ_ˇ2Ě]1tôÝä]¤çuŘɰʨfŇ…Ŕp7Ó¸łă‰®"Z[žň— +ýEĘ]ĺŰEbk´9ŢÍ›čńüÖ5“±|0UÄŞŚýŽÖÄJ¦_°-I¶îŹ®îíâň[ŻáÜü†djşő¬Ľ‹BĘI÷썇éÔětă?ţţ~®¸Nń€…2 w/=ČAŻšCĺćę.TeŹő准÷=©Äµß/w˙Ś9<A‚řŠ’éÇSöĂőűFoWxŁŇ—|»X&ďbáëËőűs˝ŤRz6´2±Č
V‚şőđŮwŞ-¬?
ŻÎ&JđľqĹ8„}Ü>¦ů˙ +ţ”âű9ţ¬ÁýÂ×Ë9~”HŰTŐ=[Ďľ‚ÍLvutĹ”-".Ô]bö)U ëĐĂőPôE*×ţ˙$Š‘Ľ,6¨!ý«“¤»ž!uTÚ3îđ1Ű@1µţł_ťpt•¨ÝÄťüˇEČ›Ż|꣜ŻÔq]?÷\µÍĐ•fÝXZA—¬ĂŹßI8{á› x6Ö%ŹDđű:G %9$É2űžŤą‡FËXPϲ@3ÓÍĎZÂ,CŮm^§ăÂŰ\?›_LĚ=´„· a–ś9ÉJ•>«Ű™ůɱ‹ć‹zđŹ¸•=¶@Ѧ—xQ†×ˇĄÂ=Ř_i5A”łiť…ą¤ßŃE51)ć îăuÄ—ńâ…⎡‰O(ńrő§ęţ|8-PÇ Ý:–Őz÷«‘Yźę:ÝĚ»ź;ź~_uŢĺß·řŃNÍ!pňˆĘé6 +MŹÓAË +!)XdíUFŘ’PńĘą›¶|RV1üˇ÷kHéôłš{ýMßó|™%ł_”YvS°¤>+Ú{s Ňľ=¤“¶$Ó~˛˙ąăN‘KÔ=lÄF7@¤ş7ůÄŽůǢu±źÂťm/˙Ąü&hź1şÔç…{úÇ°^bQťŘ8žźśKŠ8Î8…›`MGc[}ň„Ę=@-sČ ą0ÔVd͡ë ÚŞkŹ $yďöÁł„ŐÔí˛Ż6Ď,›—Â+W=ëÜĹȬs†ˇÎţ;<´Î'ţf<˘Şç íź ä/łüՅƲÂ͛١şfIűŔTwčJ#Üţ(ű6__‘ĘŹfÂř…1Ó•uĎČ5çôˇ(1›
%fóß\ŘŞ¸cš»Ăç0˛cŢJW ¬äkg< +öұ\Á +ńąA‹B»Ëpeu—S:ĂĂ~E?čÁŮĹj
Ç ăGÜÎ1î]4 ÔĄŁxé6 +ňY%™»Z›ˇ0d"Y,ő”hEuÓDcĄmWd:âđĎ3š‘ˇiÄ:p·5qˇ±ůńÁČ<9Ní±=c^u«9˝ŹĐÔ +)ĺ«%ĆŮx»ÔgţÂ60¦Ă.×Dlô%ů3Üc=|ĆEef‰!_ôH2ŤŃ(†h„6ů,Ú|Yý.ĺľDóRęőoSŠ&_:ôU
G‡ť#“¤PŁVkł)b±Ř+mň¤Űíą±˛Ir{v
Jň›Ń$ Wc~@Ź?‡Čfůčç®,· 8U‡q”ńeđ~+zsëY7-$O6AlĹfŃ1AW.=§é÷ĺjŮîŠÔÂěDÝź6
_”z.źŃťcMu ĎaąŁôŢ÷ľÇÄaşjöJˬÖ"B‚{˙•jŢů°ů4.m|ě|LýQ÷Y]*dť"AÔRJ$ŃzŘşYx†ü+d ü‹ ę™ăý™ď“óšÓź}N(qęż>ţž~řaTkśmţ[á÷ĹřŻV9ŘźŻM<•ać „SĐ_o$/ŤňQ‰´ś‡Ęí\ĚśŢű%Ľb~žőÔ$#0‘ĽDőTBÄt8ć>†s*“ęDČ0¸ü3Cě® +bŠ˙S÷SÚjňYh’ęR?DÇir⎜OěŰʸłűa™ZWO6ARßsĂł˛ärVÁŮD{‹§8Εź Î*ŚŤ¦öÔ“x.¦±µ1C}FŤ>
qé:·,-śÜUÄĂĘŘv8
«*Aά-”žź-)vÖ3¨Á1CöËĆŤýȢőcúU4â¤FlHŹŞňvg4u4Ѳ +oEâŞWĺçá9ŻF@Fý.ÂNŤÉTÓ~“ŠĺbɆώ 014%RM7…I´ +k“kÍ}d\y#Í +Ä}ś‘/_x{LKÔ!ű÷ŘřyÍ´Ç +N7ŮĎ2Ew÷l5í•ńúc%f®DQ%çd{…Ź‡Ŕ7µgô0ÔČVâęÁ˛[dv§Ë¨+–p–*eöŚ— rŹFf%@VŤíj6ăÚ‹^z¤b>‰,¶ťç5Oü§]úçUMȤ˝¸&ÜÄ,R/ň©çŤč%Ł›ń!‚¨?~d&Ń©hÓ,Ed‚Rş óLN"ý;Óá®,ĹŻ°Ę$}¬®(§Î ń¨UDgüzýÚG˙Ú•¦±-Đí¦Ą:*ňDńŘWL„vłí'Lć?,aď‹4e2|ţŽ…1n€Â:l4‰u-śnC„™˙]Á;i2 ™*ćTĘ6˛őŮ<łOúĎźą"Í˝%;ďTÚ.,dÁjkIX +ĐĚuwésÔě1´;Ěh>j4rú˘†8k•Ľ•zŔÝ$ńhŇÚöë;¶ľ6f¨{ńŻU +ľ®šZÔÄßśżŃďđ“J>üř<Ňö‘ÂTÓGOăh(Gú¤`Â;UŞ;ŃŃG~Ésűçą[:ÍŠ¶í‰ŁÔĽüOííř˙z8Ŕ6äV2ö3”ŁÇŻ´ťTŚĽĎŽ‘đqʆľp~÷æg‚ÄGNşĽř/DĆxN´ň…Đź*urąź}ĘÓýńWÁýőś)ŞĂ"ĹLóĽÎýĺÁt戮âĚÝh
´6©{+‚—Áź42h)Â[—cŰ֡ʒýśý”ĎęŘ– –RőďĐ3vŰ€BQgŤP—ÚË.®meYWÂzÜcăÇu_ˇX}č¶Řę°gd«>^ÚöîäJ1)ćVŚw_ďľ6aÖ™SŽÄiJş' 33u€—)*}‰;{Ďż¬©YQť‡\~¨÷ŰN'M4[áP…UŽ÷lyąCŽmVNq+P;Ř\ŃČŹÎG–çHÜĘé{Ö€ŻZ%J»IJٶ¶čÚj°5
ýBqŹß3m~ŢY€ü©§úo)Ćť¶©»˛kÖÍVD} IZ. \ŔšJŢ`©ü$&Łűľ˘X¤*Ş,€>]l<p4&ţ˛4Y . +ęÓ’ł®EäĆFîQôC±v„ňËÜŽ2ĚŚĘ(ó&ÖďAZ6.źŮ€ÖZ\¦ŻŞZʡÎŘ=ŁÓCZę*ašë›“RÍúń‰p2oă%˛}+E1ÍOŐyźˇ/KűŹňŢ’Á‰ďß+OˇŐľ`!eű'_r,±ŘIę¸1đ=đóiÇĆńTc‹Q:řÇmcĂąVDç!ĎËx[E‘?2rů€˝#W\15q•Ęu}]}ć˘hÎś±˘Ěá‚ťÍ*ç†áůĂô>H^môOA‡–[Pą'uQX‘˝iŕ@óÁŠ–`ÂHů©k`Łw«Zĺs¶S`$aq;(ŚŘyÝ·'tťŁ—TLŘ4;Éç›ŘŹ
V8Ę1ÖŤö8fÝ0}˙87đÇî©O‰—l˘ëË +Š‰Ńß +k€3líÖög6ĄO-˘I<$ý'EO`Śş~0ńDµ }đ.Đ3Şľ[NhXł·÷ěiwléĄ˙ÄŻ}í×J˘b˝(đŇCq±ťZÜ%®
Ů”s஝DâŚ)d°n¨žÜź–‚»!™mk•Š)r]Ŕűú–RÄ»šhs+î4¶!‘‹,Őw>N+çZ˝Óů~¸óGx7Ů2?XoC=Í«Â*ť™·^›Šˇ} +†˘ThŹL!ÂČŻW‹şm&—>eX×á
ˇ%·+ŞN#–bÍS&@ŠĽîëy/µ™W™xŮm®ĚETŰĐ
pćL/a?.ČŮ«7$ÚđúD
-Ě–g®ÝřúäNv&{>Qѧę +Âś• +«MGâś2ÝkămPmQúńĐ'®ď¬ÝwĘáĘĐŹ +¬Wíßµ˙öă9OŮü%$wíďřŽź… +R€<NY÷nIŰѧ
a‘ľĽá:†^‘eˇoQ6§ĽP[¬ÝLÖěQy×÷cŃ6KÚ+4ů´ˇÇͶľĆYX|*`ń ŢnĎfęi.ę–K±Q,o< -˘ż‹`kş#zŠŃ!¬ +ĄlH0ăÇĽ ĺő.=…Mž\˛ĹĎßş6?S$zÉNgŘâ{•śă”úě卪±‡AUËíJ•Ţ9}‹ă4Â<ĐěçLŹě¦E»E®r{VXlŇ-·ň·]Ţ«™ľŮU1Ő7ápÄŘäŠEŐ
ÁIâOdŁŃZŹeň–‘AÄĎ«śË É·.2˙j’V‰;í¬;ňřtxÂm—Fx ¸$ťĄGń3OŞOg=h
K§evK2*(ŁMË9Á^CJVyá(ŕIzÄS
đúę Ĺ—rÁHŰL8ńß…ß‚©ő&ł)ö`€1‘M!j¤:}\0ŠśˇíŰÔ äJE-Y}»ź±›cMçľ1cŤňł*‡ĽW+s×3Âwuť}1Îť›j±^YÁţĚWËXý:±Đ~Ę`dÍŽ8—ěK}Ă"śŘ—ű¨Śí‚~ř‰ýŔd"¦h‚— HËFˡńjHKmŃűÁŹă>ÉIìV8h»:>qYĺČä<’Ť+Ä^ČřÂńB'}®Eś˛MĚ}6ŠFÍÉiX?"1
ç¬;Ró?kq^/᛿rDý´ă™ŃWEź“ŐÍ×kgŹÁÖĎ.>xĆWw1IyČŇYG–_ăg’–ŞoU#kIßź{ÄłdmĹ6ůMZ "ł÷±±ű(ţôÇ
óHŬd‰~¬ć`hĄ˝sµă{Ăhvëĺ +A\‘{;˝Brĺ¬\\+ąíË~Ďj´EäZ¤IGŁ9ŃZ»CU@é$~€b?iÓËu (¡#%·Ů†?NT]ŠŐnt[8ő1q˙B†{#‰ńOŕZ«–Ö{iëH[ĚšŔ9]c×Úv”0”5gĄdąá{®BÄľ±«ĺ0ٸ§:"PZôś0˙cžXBaĹóxx“wú…"yŘ+ěÇŞZyÚđĂß[‡ľ!cÚáĺ{rŽÇJQÇv×\QÇ} Eö¤vTŻGgµbS=Ćß ćL-L©µá˙hĄţTďéţV®ďŽV±áIdg=©¨Ň™ă’ťćß?OŃGÜŕʉřáő+ă¬ţňńřĄÔÓžý×䟊v0]Ľyă‡E™ÁňŠUáŔ,Ő"ŘŮ”yb×sż‡¦ŐđjJ'*ĐfĄÜ˝óďÜk&™yұ>›hr§©®^2Ń“]rĎŘ…µ<ĹćFs;JŮ‚ľŕ#ÚŐ +hş«eq§ŻăÖĄK‚Éîęš°Rg©˙ČÜŠ +ő4ÖuH&éĘŰIň´ăć;'4LgXłíĚş +WţC# 2§7±äăÍkI¬ ŔÔš*\2¸Ă;Ho.ůęKĚÉW‰WÂ<T!ŰfČď+bůi÷¬H«=e?p˘†\Ä5Bh©ŹĚđ.Ú,?čÓMLď{FL&&â +ÔJä%L’(ŕłĄé §ćŽ=“ĽćÂű†śĐ‹b}."€¬kÝ©ţ~ç’,Hă>ĺŽ2̵ůŢűUQüXGĂ÷[źWzôÉJVOhnj“ł˝m)A&/ä"E +Ţk“¨TYD=Jc8÷şćFHPúFóiU… ÓëŮY:ÁÔť&•¸žq€śbCôęÚ}áNń1ĐĎ\ŢM¸‚řćt€»ÇÁ +v;P†ÉYÇę•1†ĎŽ°űÖ"’I‹cťý‘¶G™Ř^Îł9iŽňř§32?%;vóFó’2vOĹ™JŰć¬×]¸ks€á»1ş!čiɉďH(°•q·9™zĺżQŁş·Gł«; +li4V㍼{®VŰšţs˘$a=Z1—÷9éź~?@€|aíF_•żKŘ®J˛÷n|Uj’]’”kkb9Ŕ:Đh$9R˝iŢޤóOľN×9Ä»BÉxqŻDqđţx¦{8öŔ9ÚHyń9€ő>vŰ 2©ąę\ł« |ŚvY5ĽžÜř»Ĺw-éź(Ë
K?懮ło±sëüQF˛dŘ9#—
ůyEJ˘H†ť„"ÁPť~V¸ó®KéÂąĺ”l¤=:ôĂĐźłdĆđYĚĂÄüfX.nۆ-*µPżkcfś*OĐđTWu7ˇÍ„H˙,ń7 endstream endobj -1343 0 obj << +1266 0 obj << /Type /FontDescriptor -/FontName /JBRKUP+NimbusRomNo9L-MediItal +/FontName /YXHWDV+NimbusRomNo9L-MediItal /Flags 4 /FontBBox [-200 -324 996 964] /Ascent 688 @@ -7632,10 +7149,10 @@ endobj /ItalicAngle -15 /StemV 120 /XHeight 462 -/CharSet (/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/R/S/T/U/V/W/X/Y/Z/a/bracketleft/bracketright/c/comma/d/e/f/g/h/i/l/m/n/o/p/r/s/t/u/underscore/v/x) -/FontFile 1342 0 R +/CharSet (/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/R/S/T/U/V/W/X/Y/Z/a/c/comma/d/e/f/g/h/i/l/m/n/o/p/r/s/t/u/underscore/v/x) +/FontFile 1265 0 R >> endobj -1344 0 obj << +1267 0 obj << /Length1 1630 /Length2 19291 /Length3 0 @@ -7718,7 +7235,7 @@ EWkl‘1ÖdÄxé’Űoú#ôµ‘®E+Öćäšľú4ŐY”cĆvř5źčkÓŽ«Ě45ýĚbXOj:Ţüő~.@€‚Ě‚Í' ˘b™®Üqăż~§%ků[d6Őý§ĂÚîne6¶óşô0îÇD›ÎF3Ů)T˛±>çú·‰˘EÄw endstream endobj -1345 0 obj << +1268 0 obj << /Type /FontDescriptor /FontName /BFWHCH+NimbusRomNo9L-Regu /Flags 4 @@ -7730,9 +7247,9 @@ endobj /StemV 85 /XHeight 450 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/a/adieresis/ampersand/b/braceleft/braceright/bracketleft/bracketright/bullet/c/colon/comma/d/e/eight/equal/f/fi/five/fl/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/percent/period/plus/q/quotedbl/quoteright/r/s/semicolon/seven/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero) -/FontFile 1344 0 R +/FontFile 1267 0 R >> endobj -1346 0 obj << +1269 0 obj << /Length1 1647 /Length2 9103 /Length3 0 @@ -7792,7 +7309,7 @@ $Ä=Q{řEÝĄČ#·yîÜ«%í*\>sÔ¨‚XDäĽýĺ©1T÷˘X§¬?’ĐHżč;ňpś§|tsŠžÉqĐ7ď5ű1őŹSW^á2w 3T†Ű—oZ%‘Íx‡ľÖ@ÝJ–Xť6y$
Ń~ę–"—\±čÄŚÔZĎ>žŃűݵšcůîiéíĂp.Sę1iiJ}…'ÂđvÇÂä›űó“GY1RÇĘ_áy±‡ršő¬Ş–§tŠ¨kjŐM8ły:’bd1_dĹŁ5í|ôVŘ·ĺöä±c:ř2Ó|,?še]O¸×ł¨•u6űk‰9n¬ŻŞ1&#éÁĚľ¸Ž„ťžę›Ň˙ÎČńµ endstream endobj -1347 0 obj << +1270 0 obj << /Type /FontDescriptor /FontName /NDZOVZ+NimbusRomNo9L-ReguItal /Flags 4 @@ -7804,369 +7321,318 @@ endobj /StemV 78 /XHeight 441 /CharSet (/A/C/E/G/O/S/a/b/c/d/e/f/g/h/i/l/m/n/o/p/period/q/r/s/t/u/y) -/FontFile 1346 0 R +/FontFile 1269 0 R >> endobj -1320 0 obj << +1243 0 obj << /Type /Encoding -/Differences [2/fi/fl 33/exclam/quotedbl/numbersign 37/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater 65/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright 95/underscore 97/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright 149/bullet/endash 228/adieresis] +/Differences [2/fi/fl 33/exclam/quotedbl/numbersign 37/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater 65/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft 93/bracketright 95/underscore 97/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright 149/bullet/endash 228/adieresis] >> endobj -698 0 obj << +673 0 obj << /Type /Font /Subtype /Type1 /BaseFont /AIRNDP+CMMI10 -/FontDescriptor 1331 0 R +/FontDescriptor 1254 0 R /FirstChar 58 /LastChar 84 -/Widths 1326 0 R +/Widths 1249 0 R >> endobj -707 0 obj << +682 0 obj << /Type /Font /Subtype /Type1 /BaseFont /VYDKHY+CMR10 -/FontDescriptor 1333 0 R +/FontDescriptor 1256 0 R /FirstChar 48 /LastChar 61 -/Widths 1325 0 R +/Widths 1248 0 R >> endobj -778 0 obj << +726 0 obj << /Type /Font /Subtype /Type1 /BaseFont /NBBWCW+CMSY10 -/FontDescriptor 1335 0 R +/FontDescriptor 1258 0 R /FirstChar 3 /LastChar 106 -/Widths 1324 0 R +/Widths 1247 0 R >> endobj -854 0 obj << +789 0 obj << /Type /Font /Subtype /Type1 /BaseFont /LAJUWJ+CMSY7 -/FontDescriptor 1337 0 R +/FontDescriptor 1260 0 R /FirstChar 94 /LastChar 94 -/Widths 1323 0 R +/Widths 1246 0 R >> endobj -577 0 obj << +546 0 obj << /Type /Font /Subtype /Type1 -/BaseFont /QUTYHC+NimbusMonL-Regu -/FontDescriptor 1339 0 R +/BaseFont /FIYGZI+NimbusMonL-Regu +/FontDescriptor 1262 0 R /FirstChar 33 /LastChar 125 -/Widths 1327 0 R -/Encoding 1320 0 R +/Widths 1250 0 R +/Encoding 1243 0 R >> endobj -424 0 obj << +400 0 obj << /Type /Font /Subtype /Type1 /BaseFont /NGPWFR+NimbusRomNo9L-Medi -/FontDescriptor 1341 0 R +/FontDescriptor 1264 0 R /FirstChar 2 /LastChar 150 -/Widths 1329 0 R -/Encoding 1320 0 R +/Widths 1252 0 R +/Encoding 1243 0 R >> endobj -1045 0 obj << +984 0 obj << /Type /Font /Subtype /Type1 -/BaseFont /JBRKUP+NimbusRomNo9L-MediItal -/FontDescriptor 1343 0 R +/BaseFont /YXHWDV+NimbusRomNo9L-MediItal +/FontDescriptor 1266 0 R /FirstChar 44 /LastChar 120 -/Widths 1321 0 R -/Encoding 1320 0 R +/Widths 1244 0 R +/Encoding 1243 0 R >> endobj -425 0 obj << +401 0 obj << /Type /Font /Subtype /Type1 /BaseFont /BFWHCH+NimbusRomNo9L-Regu -/FontDescriptor 1345 0 R +/FontDescriptor 1268 0 R /FirstChar 2 /LastChar 228 -/Widths 1328 0 R -/Encoding 1320 0 R +/Widths 1251 0 R +/Encoding 1243 0 R >> endobj -980 0 obj << +964 0 obj << /Type /Font /Subtype /Type1 /BaseFont /NDZOVZ+NimbusRomNo9L-ReguItal -/FontDescriptor 1347 0 R +/FontDescriptor 1270 0 R /FirstChar 46 /LastChar 121 -/Widths 1322 0 R -/Encoding 1320 0 R +/Widths 1245 0 R +/Encoding 1243 0 R >> endobj -426 0 obj << -/Type /Pages -/Count 6 -/Parent 1348 0 R -/Kids [418 0 R 429 0 R 460 0 R 498 0 R 537 0 R 546 0 R] ->> endobj -555 0 obj << +402 0 obj << /Type /Pages /Count 6 -/Parent 1348 0 R -/Kids [549 0 R 557 0 R 570 0 R 597 0 R 609 0 R 617 0 R] +/Parent 1271 0 R +/Kids [394 0 R 405 0 R 436 0 R 475 0 R 513 0 R 516 0 R] >> endobj -643 0 obj << +525 0 obj << /Type /Pages /Count 6 -/Parent 1348 0 R -/Kids [637 0 R 658 0 R 671 0 R 677 0 R 683 0 R 688 0 R] +/Parent 1271 0 R +/Kids [519 0 R 527 0 R 539 0 R 565 0 R 577 0 R 585 0 R] >> endobj -700 0 obj << +611 0 obj << /Type /Pages /Count 6 -/Parent 1348 0 R -/Kids [693 0 R 703 0 R 713 0 R 721 0 R 725 0 R 729 0 R] +/Parent 1271 0 R +/Kids [605 0 R 628 0 R 644 0 R 650 0 R 656 0 R 662 0 R] >> endobj -746 0 obj << +675 0 obj << /Type /Pages /Count 6 -/Parent 1348 0 R -/Kids [743 0 R 751 0 R 759 0 R 763 0 R 774 0 R 791 0 R] +/Parent 1271 0 R +/Kids [668 0 R 678 0 R 694 0 R 701 0 R 707 0 R 711 0 R] >> endobj -816 0 obj << +731 0 obj << /Type /Pages /Count 6 -/Parent 1348 0 R -/Kids [806 0 R 835 0 R 851 0 R 862 0 R 874 0 R 909 0 R] +/Parent 1271 0 R +/Kids [722 0 R 744 0 R 755 0 R 783 0 R 801 0 R 810 0 R] >> endobj -981 0 obj << +832 0 obj << /Type /Pages /Count 6 -/Parent 1349 0 R -/Kids [977 0 R 1038 0 R 1049 0 R 1059 0 R 1064 0 R 1071 0 R] +/Parent 1271 0 R +/Kids [827 0 R 885 0 R 961 0 R 980 0 R 991 0 R 997 0 R] >> endobj -1083 0 obj << +1004 0 obj << /Type /Pages /Count 6 -/Parent 1349 0 R -/Kids [1080 0 R 1092 0 R 1098 0 R 1106 0 R 1180 0 R 1267 0 R] +/Parent 1272 0 R +/Kids [1001 0 R 1009 0 R 1018 0 R 1027 0 R 1035 0 R 1039 0 R] >> endobj -1319 0 obj << +1107 0 obj << /Type /Pages -/Count 1 -/Parent 1349 0 R -/Kids [1316 0 R] +/Count 3 +/Parent 1272 0 R +/Kids [1104 0 R 1192 0 R 1240 0 R] >> endobj -1348 0 obj << +1271 0 obj << /Type /Pages /Count 36 -/Parent 1350 0 R -/Kids [426 0 R 555 0 R 643 0 R 700 0 R 746 0 R 816 0 R] +/Parent 1273 0 R +/Kids [402 0 R 525 0 R 611 0 R 675 0 R 731 0 R 832 0 R] >> endobj -1349 0 obj << +1272 0 obj << /Type /Pages -/Count 13 -/Parent 1350 0 R -/Kids [981 0 R 1083 0 R 1319 0 R] +/Count 9 +/Parent 1273 0 R +/Kids [1004 0 R 1107 0 R] >> endobj -1350 0 obj << +1273 0 obj << /Type /Pages -/Count 49 -/Kids [1348 0 R 1349 0 R] +/Count 45 +/Kids [1271 0 R 1272 0 R] >> endobj -1351 0 obj << +1274 0 obj << /Type /Outlines /First 3 0 R -/Last 327 0 R -/Count 8 ->> endobj -415 0 obj << -/Title 416 0 R -/A 413 0 R -/Parent 411 0 R ->> endobj -411 0 obj << -/Title 412 0 R -/A 409 0 R -/Parent 403 0 R -/Prev 407 0 R -/First 415 0 R -/Last 415 0 R -/Count -1 ->> endobj -407 0 obj << -/Title 408 0 R -/A 405 0 R -/Parent 403 0 R -/Next 411 0 R ->> endobj -403 0 obj << -/Title 404 0 R -/A 401 0 R -/Parent 327 0 R -/Prev 331 0 R -/First 407 0 R -/Last 411 0 R -/Count -2 ->> endobj -399 0 obj << -/Title 400 0 R -/A 397 0 R -/Parent 371 0 R -/Prev 395 0 R ->> endobj -395 0 obj << -/Title 396 0 R -/A 393 0 R -/Parent 371 0 R -/Prev 391 0 R -/Next 399 0 R +/Last 319 0 R +/Count 7 >> endobj 391 0 obj << /Title 392 0 R /A 389 0 R -/Parent 371 0 R +/Parent 363 0 R /Prev 387 0 R -/Next 395 0 R >> endobj 387 0 obj << /Title 388 0 R /A 385 0 R -/Parent 371 0 R +/Parent 363 0 R /Prev 383 0 R /Next 391 0 R >> endobj 383 0 obj << /Title 384 0 R /A 381 0 R -/Parent 371 0 R +/Parent 363 0 R /Prev 379 0 R /Next 387 0 R >> endobj 379 0 obj << /Title 380 0 R /A 377 0 R -/Parent 371 0 R +/Parent 363 0 R /Prev 375 0 R /Next 383 0 R >> endobj 375 0 obj << /Title 376 0 R /A 373 0 R -/Parent 371 0 R +/Parent 363 0 R +/Prev 371 0 R /Next 379 0 R >> endobj 371 0 obj << /Title 372 0 R /A 369 0 R -/Parent 331 0 R -/Prev 347 0 R -/First 375 0 R -/Last 399 0 R -/Count -7 +/Parent 363 0 R +/Prev 367 0 R +/Next 375 0 R >> endobj 367 0 obj << /Title 368 0 R /A 365 0 R -/Parent 347 0 R -/Prev 363 0 R +/Parent 363 0 R +/Next 371 0 R >> endobj 363 0 obj << /Title 364 0 R /A 361 0 R -/Parent 347 0 R -/Prev 359 0 R -/Next 367 0 R +/Parent 323 0 R +/Prev 339 0 R +/First 367 0 R +/Last 391 0 R +/Count -7 >> endobj 359 0 obj << /Title 360 0 R /A 357 0 R -/Parent 347 0 R +/Parent 339 0 R /Prev 355 0 R -/Next 363 0 R >> endobj 355 0 obj << /Title 356 0 R /A 353 0 R -/Parent 347 0 R +/Parent 339 0 R /Prev 351 0 R /Next 359 0 R >> endobj 351 0 obj << /Title 352 0 R /A 349 0 R -/Parent 347 0 R +/Parent 339 0 R +/Prev 347 0 R /Next 355 0 R >> endobj 347 0 obj << /Title 348 0 R /A 345 0 R -/Parent 331 0 R -/Prev 339 0 R -/Next 371 0 R -/First 351 0 R -/Last 367 0 R -/Count -5 +/Parent 339 0 R +/Prev 343 0 R +/Next 351 0 R >> endobj 343 0 obj << /Title 344 0 R /A 341 0 R /Parent 339 0 R +/Next 347 0 R >> endobj 339 0 obj << /Title 340 0 R /A 337 0 R -/Parent 331 0 R -/Prev 335 0 R -/Next 347 0 R +/Parent 323 0 R +/Prev 331 0 R +/Next 363 0 R /First 343 0 R -/Last 343 0 R -/Count -1 +/Last 359 0 R +/Count -5 >> endobj 335 0 obj << /Title 336 0 R /A 333 0 R /Parent 331 0 R -/Next 339 0 R >> endobj 331 0 obj << /Title 332 0 R /A 329 0 R -/Parent 327 0 R -/Next 403 0 R +/Parent 323 0 R +/Prev 327 0 R +/Next 339 0 R /First 335 0 R -/Last 371 0 R -/Count -4 +/Last 335 0 R +/Count -1 >> endobj 327 0 obj << /Title 328 0 R /A 325 0 R -/Parent 1351 0 R -/Prev 147 0 R -/First 331 0 R -/Last 403 0 R -/Count -2 +/Parent 323 0 R +/Next 331 0 R >> endobj 323 0 obj << /Title 324 0 R /A 321 0 R -/Parent 311 0 R -/Prev 319 0 R +/Parent 319 0 R +/First 327 0 R +/Last 363 0 R +/Count -4 >> endobj 319 0 obj << /Title 320 0 R /A 317 0 R -/Parent 311 0 R -/Prev 315 0 R -/Next 323 0 R +/Parent 1274 0 R +/Prev 139 0 R +/First 323 0 R +/Last 323 0 R +/Count -1 >> endobj 315 0 obj << /Title 316 0 R /A 313 0 R -/Parent 311 0 R -/Next 319 0 R +/Parent 303 0 R +/Prev 311 0 R >> endobj 311 0 obj << /Title 312 0 R /A 309 0 R /Parent 303 0 R /Prev 307 0 R -/First 315 0 R -/Last 323 0 R -/Count -3 +/Next 315 0 R >> endobj 307 0 obj << /Title 308 0 R @@ -8177,85 +7643,87 @@ endobj 303 0 obj << /Title 304 0 R /A 301 0 R -/Parent 147 0 R -/Prev 247 0 R +/Parent 295 0 R +/Prev 299 0 R /First 307 0 R -/Last 311 0 R -/Count -2 +/Last 315 0 R +/Count -3 >> endobj 299 0 obj << /Title 300 0 R /A 297 0 R -/Parent 255 0 R -/Prev 295 0 R +/Parent 295 0 R +/Next 303 0 R >> endobj 295 0 obj << /Title 296 0 R /A 293 0 R -/Parent 255 0 R -/Prev 291 0 R -/Next 299 0 R +/Parent 139 0 R +/Prev 239 0 R +/First 299 0 R +/Last 303 0 R +/Count -2 >> endobj 291 0 obj << /Title 292 0 R /A 289 0 R -/Parent 255 0 R +/Parent 247 0 R /Prev 287 0 R -/Next 295 0 R >> endobj 287 0 obj << /Title 288 0 R /A 285 0 R -/Parent 255 0 R +/Parent 247 0 R /Prev 283 0 R /Next 291 0 R >> endobj 283 0 obj << /Title 284 0 R /A 281 0 R -/Parent 255 0 R +/Parent 247 0 R /Prev 279 0 R /Next 287 0 R >> endobj 279 0 obj << /Title 280 0 R /A 277 0 R -/Parent 255 0 R +/Parent 247 0 R /Prev 275 0 R /Next 283 0 R >> endobj 275 0 obj << /Title 276 0 R /A 273 0 R -/Parent 255 0 R +/Parent 247 0 R /Prev 271 0 R /Next 279 0 R >> endobj 271 0 obj << /Title 272 0 R /A 269 0 R -/Parent 255 0 R +/Parent 247 0 R /Prev 267 0 R /Next 275 0 R >> endobj 267 0 obj << /Title 268 0 R /A 265 0 R -/Parent 255 0 R +/Parent 247 0 R /Prev 263 0 R /Next 271 0 R >> endobj 263 0 obj << /Title 264 0 R /A 261 0 R -/Parent 255 0 R +/Parent 247 0 R /Prev 259 0 R /Next 267 0 R >> endobj 259 0 obj << /Title 260 0 R /A 257 0 R -/Parent 255 0 R +/Parent 247 0 R +/Prev 255 0 R /Next 263 0 R >> endobj 255 0 obj << @@ -8263,9 +7731,7 @@ endobj /A 253 0 R /Parent 247 0 R /Prev 251 0 R -/First 259 0 R -/Last 299 0 R -/Count -11 +/Next 259 0 R >> endobj 251 0 obj << /Title 252 0 R @@ -8276,65 +7742,67 @@ endobj 247 0 obj << /Title 248 0 R /A 245 0 R -/Parent 147 0 R -/Prev 203 0 R -/Next 303 0 R +/Parent 239 0 R +/Prev 243 0 R /First 251 0 R -/Last 255 0 R -/Count -2 +/Last 291 0 R +/Count -11 >> endobj 243 0 obj << /Title 244 0 R /A 241 0 R -/Parent 211 0 R -/Prev 239 0 R +/Parent 239 0 R +/Next 247 0 R >> endobj 239 0 obj << /Title 240 0 R /A 237 0 R -/Parent 211 0 R -/Prev 235 0 R -/Next 243 0 R +/Parent 139 0 R +/Prev 195 0 R +/Next 295 0 R +/First 243 0 R +/Last 247 0 R +/Count -2 >> endobj 235 0 obj << /Title 236 0 R /A 233 0 R -/Parent 211 0 R +/Parent 203 0 R /Prev 231 0 R -/Next 239 0 R >> endobj 231 0 obj << /Title 232 0 R /A 229 0 R -/Parent 211 0 R +/Parent 203 0 R /Prev 227 0 R /Next 235 0 R >> endobj 227 0 obj << /Title 228 0 R /A 225 0 R -/Parent 211 0 R +/Parent 203 0 R /Prev 223 0 R /Next 231 0 R >> endobj 223 0 obj << /Title 224 0 R /A 221 0 R -/Parent 211 0 R +/Parent 203 0 R /Prev 219 0 R /Next 227 0 R >> endobj 219 0 obj << /Title 220 0 R /A 217 0 R -/Parent 211 0 R +/Parent 203 0 R /Prev 215 0 R /Next 223 0 R >> endobj 215 0 obj << /Title 216 0 R /A 213 0 R -/Parent 211 0 R +/Parent 203 0 R +/Prev 211 0 R /Next 219 0 R >> endobj 211 0 obj << @@ -8342,9 +7810,7 @@ endobj /A 209 0 R /Parent 203 0 R /Prev 207 0 R -/First 215 0 R -/Last 243 0 R -/Count -8 +/Next 215 0 R >> endobj 207 0 obj << /Title 208 0 R @@ -8355,33 +7821,33 @@ endobj 203 0 obj << /Title 204 0 R /A 201 0 R -/Parent 147 0 R -/Prev 183 0 R -/Next 247 0 R +/Parent 195 0 R +/Prev 199 0 R /First 207 0 R -/Last 211 0 R -/Count -2 +/Last 235 0 R +/Count -8 >> endobj 199 0 obj << /Title 200 0 R /A 197 0 R -/Parent 191 0 R -/Prev 195 0 R +/Parent 195 0 R +/Next 203 0 R >> endobj 195 0 obj << /Title 196 0 R /A 193 0 R -/Parent 191 0 R -/Next 199 0 R +/Parent 139 0 R +/Prev 175 0 R +/Next 239 0 R +/First 199 0 R +/Last 203 0 R +/Count -2 >> endobj 191 0 obj << /Title 192 0 R /A 189 0 R /Parent 183 0 R /Prev 187 0 R -/First 195 0 R -/Last 199 0 R -/Count -2 >> endobj 187 0 obj << /Title 188 0 R @@ -8392,9 +7858,8 @@ endobj 183 0 obj << /Title 184 0 R /A 181 0 R -/Parent 147 0 R -/Prev 151 0 R -/Next 203 0 R +/Parent 175 0 R +/Prev 179 0 R /First 187 0 R /Last 191 0 R /Count -2 @@ -8402,34 +7867,37 @@ endobj 179 0 obj << /Title 180 0 R /A 177 0 R -/Parent 159 0 R -/Prev 175 0 R +/Parent 175 0 R +/Next 183 0 R >> endobj 175 0 obj << /Title 176 0 R /A 173 0 R -/Parent 159 0 R -/Prev 171 0 R -/Next 179 0 R +/Parent 139 0 R +/Prev 143 0 R +/Next 195 0 R +/First 179 0 R +/Last 183 0 R +/Count -2 >> endobj 171 0 obj << /Title 172 0 R /A 169 0 R -/Parent 159 0 R +/Parent 151 0 R /Prev 167 0 R -/Next 175 0 R >> endobj 167 0 obj << /Title 168 0 R /A 165 0 R -/Parent 159 0 R +/Parent 151 0 R /Prev 163 0 R /Next 171 0 R >> endobj 163 0 obj << /Title 164 0 R /A 161 0 R -/Parent 159 0 R +/Parent 151 0 R +/Prev 159 0 R /Next 167 0 R >> endobj 159 0 obj << @@ -8437,9 +7905,7 @@ endobj /A 157 0 R /Parent 151 0 R /Prev 155 0 R -/First 163 0 R -/Last 179 0 R -/Count -5 +/Next 163 0 R >> endobj 155 0 obj << /Title 156 0 R @@ -8450,36 +7916,36 @@ endobj 151 0 obj << /Title 152 0 R /A 149 0 R -/Parent 147 0 R -/Next 183 0 R +/Parent 143 0 R +/Prev 147 0 R /First 155 0 R -/Last 159 0 R -/Count -2 +/Last 171 0 R +/Count -5 >> endobj 147 0 obj << /Title 148 0 R /A 145 0 R -/Parent 1351 0 R -/Prev 139 0 R -/Next 327 0 R -/First 151 0 R -/Last 303 0 R -/Count -5 +/Parent 143 0 R +/Next 151 0 R >> endobj 143 0 obj << /Title 144 0 R /A 141 0 R /Parent 139 0 R +/Next 175 0 R +/First 147 0 R +/Last 151 0 R +/Count -2 >> endobj 139 0 obj << /Title 140 0 R /A 137 0 R -/Parent 1351 0 R +/Parent 1274 0 R /Prev 131 0 R -/Next 147 0 R +/Next 319 0 R /First 143 0 R -/Last 143 0 R -/Count -1 +/Last 295 0 R +/Count -5 >> endobj 135 0 obj << /Title 136 0 R @@ -8489,8 +7955,8 @@ endobj 131 0 obj << /Title 132 0 R /A 129 0 R -/Parent 1351 0 R -/Prev 115 0 R +/Parent 1274 0 R +/Prev 123 0 R /Next 139 0 R /First 135 0 R /Last 135 0 R @@ -8499,110 +7965,109 @@ endobj 127 0 obj << /Title 128 0 R /A 125 0 R -/Parent 119 0 R -/Prev 123 0 R +/Parent 123 0 R >> endobj 123 0 obj << /Title 124 0 R /A 121 0 R -/Parent 119 0 R -/Next 127 0 R +/Parent 1274 0 R +/Prev 103 0 R +/Next 131 0 R +/First 127 0 R +/Last 127 0 R +/Count -1 >> endobj 119 0 obj << /Title 120 0 R /A 117 0 R -/Parent 115 0 R -/First 123 0 R -/Last 127 0 R -/Count -2 +/Parent 103 0 R +/Prev 111 0 R >> endobj 115 0 obj << /Title 116 0 R /A 113 0 R -/Parent 1351 0 R -/Prev 95 0 R -/Next 131 0 R -/First 119 0 R -/Last 119 0 R -/Count -1 +/Parent 111 0 R >> endobj 111 0 obj << /Title 112 0 R /A 109 0 R -/Parent 95 0 R -/Prev 103 0 R +/Parent 103 0 R +/Prev 107 0 R +/Next 119 0 R +/First 115 0 R +/Last 115 0 R +/Count -1 >> endobj 107 0 obj << /Title 108 0 R /A 105 0 R /Parent 103 0 R +/Next 111 0 R >> endobj 103 0 obj << /Title 104 0 R /A 101 0 R -/Parent 95 0 R -/Prev 99 0 R -/Next 111 0 R +/Parent 1274 0 R +/Prev 15 0 R +/Next 123 0 R /First 107 0 R -/Last 107 0 R -/Count -1 +/Last 119 0 R +/Count -3 >> endobj 99 0 obj << /Title 100 0 R /A 97 0 R -/Parent 95 0 R -/Next 103 0 R +/Parent 87 0 R +/Prev 95 0 R >> endobj 95 0 obj << /Title 96 0 R /A 93 0 R -/Parent 1351 0 R -/Prev 15 0 R -/Next 115 0 R -/First 99 0 R -/Last 111 0 R -/Count -3 +/Parent 87 0 R +/Prev 91 0 R +/Next 99 0 R >> endobj 91 0 obj << /Title 92 0 R /A 89 0 R -/Parent 83 0 R -/Prev 87 0 R +/Parent 87 0 R +/Next 95 0 R >> endobj 87 0 obj << /Title 88 0 R /A 85 0 R -/Parent 83 0 R -/Next 91 0 R +/Parent 15 0 R +/Prev 83 0 R +/First 91 0 R +/Last 99 0 R +/Count -3 >> endobj 83 0 obj << /Title 84 0 R /A 81 0 R /Parent 15 0 R /Prev 79 0 R -/First 87 0 R -/Last 91 0 R -/Count -2 +/Next 87 0 R >> endobj 79 0 obj << /Title 80 0 R /A 77 0 R /Parent 15 0 R -/Prev 75 0 R +/Prev 59 0 R /Next 83 0 R >> endobj 75 0 obj << /Title 76 0 R /A 73 0 R -/Parent 15 0 R -/Prev 59 0 R -/Next 79 0 R +/Parent 59 0 R +/Prev 71 0 R >> endobj 71 0 obj << /Title 72 0 R /A 69 0 R /Parent 59 0 R /Prev 67 0 R +/Next 75 0 R >> endobj 67 0 obj << /Title 68 0 R @@ -8622,10 +8087,10 @@ endobj /A 57 0 R /Parent 15 0 R /Prev 55 0 R -/Next 75 0 R +/Next 79 0 R /First 63 0 R -/Last 71 0 R -/Count -3 +/Last 75 0 R +/Count -4 >> endobj 55 0 obj << /Title 56 0 R @@ -8700,11 +8165,11 @@ endobj 15 0 obj << /Title 16 0 R /A 13 0 R -/Parent 1351 0 R +/Parent 1274 0 R /Prev 3 0 R -/Next 95 0 R +/Next 103 0 R /First 19 0 R -/Last 83 0 R +/Last 87 0 R /Count -12 >> endobj 11 0 obj << @@ -8722,1702 +8187,1605 @@ endobj 3 0 obj << /Title 4 0 R /A 1 0 R -/Parent 1351 0 R +/Parent 1274 0 R /Next 15 0 R /First 7 0 R /Last 11 0 R /Count -2 >> endobj -1352 0 obj << -/Names [(CommandLineUsage) 701 0 R (CommandLineUsage_ARGS) 716 0 R (CommandLineUsage_MANARGS) 717 0 R (CommandLineUsage_OPTARGS) 718 0 R (Doc-Start) 423 0 R (ENCODERBEHAVIOUR) 696 0 R] -/Limits [(CommandLineUsage) (ENCODERBEHAVIOUR)] ->> endobj -1353 0 obj << -/Names [(ENCODERBEHAVIOUR_BEHAVIOUR_BANDWIDTH) 697 0 R (ENCODERBEHAVIOUR_BEHAVIOUR_ESTIM_AVG_FRAMESIZES) 706 0 R (ENCODERBEHAVIOUR_BEHAVIOUR_TOOLS) 667 0 R (ENCODERBEHAVIOUR_FRAMESIZES_AND_BIT_RESERVOIR) 699 0 R (Item.1) 576 0 R (Item.2) 578 0 R] -/Limits [(ENCODERBEHAVIOUR_BEHAVIOUR_BANDWIDTH) (Item.2)] ->> endobj -1354 0 obj << -/Names [(Item.3) 579 0 R (Item.4) 580 0 R (Item.5) 600 0 R (Item.6) 601 0 R (LIBUSE) 573 0 R (LIBUSE_CallingSequence) 575 0 R] -/Limits [(Item.3) (LIBUSE_CallingSequence)] ->> endobj -1355 0 obj << -/Names [(LIBUSE_InterfaceDescription) 574 0 R (LIBUSE_allocIOBufs) 612 0 R (LIBUSE_argLists) 620 0 R (LIBUSE_audiochCfg) 664 0 R (LIBUSE_bufDes) 603 0 R (LIBUSE_cfgMetaData) 640 0 R] -/Limits [(LIBUSE_InterfaceDescription) (LIBUSE_cfgMetaData)] ->> endobj -1356 0 obj << -/Names [(LIBUSE_channelMode) 661 0 R (LIBUSE_encMandatory) 642 0 R (LIBUSE_encOpen) 584 0 R (LIBUSE_encParams) 586 0 R (LIBUSE_encQual) 663 0 R (LIBUSE_encReconf) 588 0 R] -/Limits [(LIBUSE_channelMode) (LIBUSE_encReconf)] +1275 0 obj << +/Names [(Doc-Start) 399 0 R (ENCODERBEHAVIOUR) 671 0 R (ENCODERBEHAVIOUR_BEHAVIOUR_BANDWIDTH) 672 0 R (ENCODERBEHAVIOUR_BEHAVIOUR_ESTIM_AVG_FRAMESIZES) 681 0 R (ENCODERBEHAVIOUR_BEHAVIOUR_TOOLS) 638 0 R (ENCODERBEHAVIOUR_FRAMESIZES_AND_BIT_RESERVOIR) 674 0 R] +/Limits [(Doc-Start) (ENCODERBEHAVIOUR_FRAMESIZES_AND_BIT_RESERVOIR)] >> endobj -1357 0 obj << -/Names [(LIBUSE_feedInBuf) 602 0 R (LIBUSE_reommendedConfig) 680 0 R (LIBUSE_reommendedConfigLC) 681 0 R (LIBUSE_reommendedConfigLD) 686 0 R (LIBUSE_suppBitrates) 674 0 R (LIBUSE_writeOutData) 604 0 R] -/Limits [(LIBUSE_feedInBuf) (LIBUSE_writeOutData)] +1276 0 obj << +/Names [(Item.1) 545 0 R (Item.2) 547 0 R (Item.3) 548 0 R (Item.4) 549 0 R (Item.5) 568 0 R (Item.6) 569 0 R] +/Limits [(Item.1) (Item.6)] >> endobj -1358 0 obj << -/Names [(aacenc__lib_8h) 581 0 R (aacenc__lib_8h_a04ddaeecd6dc422bb72175b9e0ab3fea) 583 0 R (aacenc__lib_8h_a079ac614039555edf1d131e5fb87573b) 923 0 R (aacenc__lib_8h_a28cbc417258c73ad55d613526df8fad5) 1046 0 R (aacenc__lib_8h_a2a5f6ec334fff553f0fd9e36d9408e94) 605 0 R (aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846) 992 0 R] -/Limits [(aacenc__lib_8h) (aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846)] +1277 0 obj << +/Names [(LIBUSE) 542 0 R (LIBUSE_CallingSequence) 544 0 R (LIBUSE_InterfaceDescription) 543 0 R (LIBUSE_allocIOBufs) 580 0 R (LIBUSE_argLists) 588 0 R (LIBUSE_audiochCfg) 647 0 R] +/Limits [(LIBUSE) (LIBUSE_audiochCfg)] >> endobj -1359 0 obj << -/Names [(aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846a08acd30267f5bd8c4047259fbc40fd98) 998 0 R (aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846a82028e22ad9293b97d10ee57abf67bdf) 996 0 R (aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846a96d66031cde3d5d89d8457e45036bd94) 994 0 R (aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846ab97edc65b5ed3be8c11f3ba9bcca22f3) 993 0 R (aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846abcbfac74b1bcd90099e3cf6b1fcd19f3) 997 0 R (aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846afcd151f12c441417e69746762d34ea33) 995 0 R] -/Limits [(aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846a08acd30267f5bd8c4047259fbc40fd98) (aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846afcd151f12c441417e69746762d34ea33)] +1278 0 obj << +/Names [(LIBUSE_bufDes) 571 0 R (LIBUSE_cfgMetaData) 608 0 R (LIBUSE_channelMode) 631 0 R (LIBUSE_encELD) 634 0 R (LIBUSE_encMandatory) 610 0 R (LIBUSE_encOpen) 552 0 R] +/Limits [(LIBUSE_bufDes) (LIBUSE_encOpen)] >> endobj -1360 0 obj << -/Names [(aacenc__lib_8h_a5743dca1ec3746f9c5ecb839a132ba7e) 585 0 R (aacenc__lib_8h_a68ca23c646df4d306e2412b926292a47) 784 0 R (aacenc__lib_8h_a68ca23c646df4d306e2412b926292a47a510ae495f7636503ecfe111f75f66d50) 646 0 R (aacenc__lib_8h_a68ca23c646df4d306e2412b926292a47a51cb08659a6af422761d58090766faa8) 985 0 R (aacenc__lib_8h_a68ca23c646df4d306e2412b926292a47a6a362853fb508e259718dabe65c7a57e) 984 0 R (aacenc__lib_8h_a68ca23c646df4d306e2412b926292a47a857575621d11cca83fab4d5c70b55181) 983 0 R] -/Limits [(aacenc__lib_8h_a5743dca1ec3746f9c5ecb839a132ba7e) (aacenc__lib_8h_a68ca23c646df4d306e2412b926292a47a857575621d11cca83fab4d5c70b55181)] +1279 0 obj << +/Names [(LIBUSE_encParams) 554 0 R (LIBUSE_encQual) 633 0 R (LIBUSE_encReconf) 556 0 R (LIBUSE_feedInBuf) 570 0 R (LIBUSE_reommendedConfig) 654 0 R (LIBUSE_reommendedConfigELD) 665 0 R] +/Limits [(LIBUSE_encParams) (LIBUSE_reommendedConfigELD)] >> endobj -1361 0 obj << -/Names [(aacenc__lib_8h_a68ca23c646df4d306e2412b926292a47aea749d078297e7079337d6d47171a8b6) 982 0 R (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483e) 924 0 R (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea10b93e7c1f1def31f634b6fb7a894409) 926 0 R (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea189c4a7532530a89ab214aba35b1e982) 930 0 R (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea1a79b7f1cefc5f89ba7c10cfa020116f) 928 0 R (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea3b7906c278268857fa6f8d7e39b2b5c3) 936 0 R] -/Limits [(aacenc__lib_8h_a68ca23c646df4d306e2412b926292a47aea749d078297e7079337d6d47171a8b6) (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea3b7906c278268857fa6f8d7e39b2b5c3)] +1280 0 obj << +/Names [(LIBUSE_reommendedConfigLC) 659 0 R (LIBUSE_reommendedConfigLD) 660 0 R (LIBUSE_suppBitrates) 653 0 R (LIBUSE_writeOutData) 572 0 R (aacenc__lib_8h) 550 0 R (aacenc__lib_8h_a04ddaeecd6dc422bb72175b9e0ab3fea) 551 0 R] +/Limits [(LIBUSE_reommendedConfigLC) (aacenc__lib_8h_a04ddaeecd6dc422bb72175b9e0ab3fea)] >> endobj -1362 0 obj << -/Names [(aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea47979433239c09930ed98e85f5b81971) 929 0 R (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea51de868cffa67ffe361085555a6e5ea2) 933 0 R (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea5a631fa755a8d02a97a8184725da4b57) 935 0 R (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea5af1b153eb8f1a28a543419d10562cbf) 931 0 R (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea8e8c0fd770036a2bc58fc062f5044454) 934 0 R (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea98f5f419028ff1b93551adb910ca0281) 925 0 R] -/Limits [(aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea47979433239c09930ed98e85f5b81971) (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea98f5f419028ff1b93551adb910ca0281)] +1281 0 obj << +/Names [(aacenc__lib_8h_a079ac614039555edf1d131e5fb87573b) 841 0 R (aacenc__lib_8h_a28cbc417258c73ad55d613526df8fad5) 976 0 R (aacenc__lib_8h_a2a5f6ec334fff553f0fd9e36d9408e94) 573 0 R (aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846) 912 0 R (aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846a08acd30267f5bd8c4047259fbc40fd98) 918 0 R (aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846a82028e22ad9293b97d10ee57abf67bdf) 916 0 R] +/Limits [(aacenc__lib_8h_a079ac614039555edf1d131e5fb87573b) (aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846a82028e22ad9293b97d10ee57abf67bdf)] >> endobj -1363 0 obj << -/Names [(aacenc__lib_8h_a692c324a5fe0f8335387264357bd483eae9b8c1b6153a63fbf152a60e422ca433) 932 0 R (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483eaf35935e997b3321eda6d083c9322f347) 927 0 R (aacenc__lib_8h_a6ccf4948de12c1cde8ca22a1216c5d3e) 587 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4) 651 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a017e2a6349d3ae944338a6f0ba892947) 1006 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a02f49b93eaadb6a903b87670849255a5) 665 0 R] -/Limits [(aacenc__lib_8h_a692c324a5fe0f8335387264357bd483eae9b8c1b6153a63fbf152a60e422ca433) (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a02f49b93eaadb6a903b87670849255a5)] +1282 0 obj << +/Names [(aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846a96d66031cde3d5d89d8457e45036bd94) 914 0 R (aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846ab97edc65b5ed3be8c11f3ba9bcca22f3) 913 0 R (aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846abcbfac74b1bcd90099e3cf6b1fcd19f3) 917 0 R (aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846afcd151f12c441417e69746762d34ea33) 915 0 R (aacenc__lib_8h_a5743dca1ec3746f9c5ecb839a132ba7e) 553 0 R (aacenc__lib_8h_a68ca23c646df4d306e2412b926292a47) 733 0 R] +/Limits [(aacenc__lib_8h_a43cc9e24ab8d23e6f3241a30b502b846a96d66031cde3d5d89d8457e45036bd94) (aacenc__lib_8h_a68ca23c646df4d306e2412b926292a47)] >> endobj -1364 0 obj << -/Names [(aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a0ee251ffa58317c7ea29364d344c4660) 644 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a2e2b4d3e563dc169c06d590d8c833243) 1003 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a3869e3bae5904258eff0b77d2ebed3b1) 1009 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a3923cb84146e101030271772fe33ea5a) 1010 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a39b30031d8438b4018173388aead5bdf) 1007 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a443da990a60343083e72726a65f4509b) 668 0 R] -/Limits [(aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a0ee251ffa58317c7ea29364d344c4660) (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a443da990a60343083e72726a65f4509b)] +1283 0 obj << +/Names [(aacenc__lib_8h_a68ca23c646df4d306e2412b926292a47a510ae495f7636503ecfe111f75f66d50) 614 0 R (aacenc__lib_8h_a68ca23c646df4d306e2412b926292a47a51cb08659a6af422761d58090766faa8) 905 0 R (aacenc__lib_8h_a68ca23c646df4d306e2412b926292a47a6a362853fb508e259718dabe65c7a57e) 904 0 R (aacenc__lib_8h_a68ca23c646df4d306e2412b926292a47a857575621d11cca83fab4d5c70b55181) 903 0 R (aacenc__lib_8h_a68ca23c646df4d306e2412b926292a47aea749d078297e7079337d6d47171a8b6) 902 0 R (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483e) 889 0 R] +/Limits [(aacenc__lib_8h_a68ca23c646df4d306e2412b926292a47a510ae495f7636503ecfe111f75f66d50) (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483e)] >> endobj -1365 0 obj << -/Names [(aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a5e46c726aadf91189ccb4f1ec3e4b52f) 999 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a730a1ba1041f8671a11ca824fcd0455d) 1002 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a80b535c275f9f60c644d91263f0638a5) 1000 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a87c7912a645d479132465e6d8e694b36) 1008 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a8a8be3fdebec2693c86e3e63f35ee228) 1001 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a955c106558ebb10a74a555a38b45ae1c) 1005 0 R] -/Limits [(aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a5e46c726aadf91189ccb4f1ec3e4b52f) (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a955c106558ebb10a74a555a38b45ae1c)] +1284 0 obj << +/Names [(aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea10b93e7c1f1def31f634b6fb7a894409) 891 0 R (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea189c4a7532530a89ab214aba35b1e982) 895 0 R (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea1a79b7f1cefc5f89ba7c10cfa020116f) 893 0 R (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea3b7906c278268857fa6f8d7e39b2b5c3) 901 0 R (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea47979433239c09930ed98e85f5b81971) 894 0 R (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea51de868cffa67ffe361085555a6e5ea2) 898 0 R] +/Limits [(aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea10b93e7c1f1def31f634b6fb7a894409) (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea51de868cffa67ffe361085555a6e5ea2)] >> endobj -1366 0 obj << -/Names [(aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4aab4d4c3cfcad7bd7bdebfd947fea8e75) 1004 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4aaf0644b51fd01b31c73eb2ebc140a1a1) 1012 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4ad2accfe182077bfe80ba43a3f22cf7bb) 675 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4ae6283b321f75b769e9306c6482f2acd5) 1011 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4aef811ce5aab93dcba6584109d266b579) 666 0 R (aacenc__lib_8h_a9b64b2026a1475eb5c7a67fc1364ed94) 589 0 R] -/Limits [(aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4aab4d4c3cfcad7bd7bdebfd947fea8e75) (aacenc__lib_8h_a9b64b2026a1475eb5c7a67fc1364ed94)] +1285 0 obj << +/Names [(aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea5a631fa755a8d02a97a8184725da4b57) 900 0 R (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea5af1b153eb8f1a28a543419d10562cbf) 896 0 R (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea8e8c0fd770036a2bc58fc062f5044454) 899 0 R (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea98f5f419028ff1b93551adb910ca0281) 890 0 R (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483eae9b8c1b6153a63fbf152a60e422ca433) 897 0 R (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483eaf35935e997b3321eda6d083c9322f347) 892 0 R] +/Limits [(aacenc__lib_8h_a692c324a5fe0f8335387264357bd483ea5a631fa755a8d02a97a8184725da4b57) (aacenc__lib_8h_a692c324a5fe0f8335387264357bd483eaf35935e997b3321eda6d083c9322f347)] >> endobj -1367 0 obj << -/Names [(aacenc__lib_8h_aac28c7c3724b8bc87558bc35a22bf23c) 650 0 R (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1) 647 0 R (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1a7560bc907e827954b0b55f87751fdbeb) 986 0 R (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1a95efe9f7b6df0a6628ec7e2c61646fe9) 988 0 R (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1aa0dc03a5dc38b25ac1ea9d8ddf892fb5) 991 0 R (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1aa9315468e85d31968b147a4080e352a7) 990 0 R] -/Limits [(aacenc__lib_8h_aac28c7c3724b8bc87558bc35a22bf23c) (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1aa9315468e85d31968b147a4080e352a7)] +1286 0 obj << +/Names [(aacenc__lib_8h_a6ccf4948de12c1cde8ca22a1216c5d3e) 555 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4) 619 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a017e2a6349d3ae944338a6f0ba892947) 969 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a02f49b93eaadb6a903b87670849255a5) 636 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a0ee251ffa58317c7ea29364d344c4660) 612 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a2e2b4d3e563dc169c06d590d8c833243) 922 0 R] +/Limits [(aacenc__lib_8h_a6ccf4948de12c1cde8ca22a1216c5d3e) (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a2e2b4d3e563dc169c06d590d8c833243)] >> endobj -1368 0 obj << -/Names [(aacenc__lib_8h_aee37ab1a371397d239178df6194911d1af4a650d61726dd5bbbb560042bb0b8a2) 989 0 R (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1af88950dea139037d728aefe7722191ec) 987 0 R (chapter*.1) 462 0 R (chapter.1) 2 0 R (chapter.2) 14 0 R (chapter.3) 94 0 R] -/Limits [(aacenc__lib_8h_aee37ab1a371397d239178df6194911d1af4a650d61726dd5bbbb560042bb0b8a2) (chapter.3)] +1287 0 obj << +/Names [(aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a3869e3bae5904258eff0b77d2ebed3b1) 972 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a3923cb84146e101030271772fe33ea5a) 973 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a39b30031d8438b4018173388aead5bdf) 970 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a443da990a60343083e72726a65f4509b) 639 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a5e46c726aadf91189ccb4f1ec3e4b52f) 919 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a730a1ba1041f8671a11ca824fcd0455d) 640 0 R] +/Limits [(aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a3869e3bae5904258eff0b77d2ebed3b1) (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a730a1ba1041f8671a11ca824fcd0455d)] >> endobj -1369 0 obj << -/Names [(chapter.4) 114 0 R (chapter.5) 130 0 R (chapter.6) 138 0 R (chapter.7) 146 0 R (chapter.8) 326 0 R (index) 552 0 R] -/Limits [(chapter.4) (index)] +1288 0 obj << +/Names [(aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a80b535c275f9f60c644d91263f0638a5) 920 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a87c7912a645d479132465e6d8e694b36) 971 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a8a8be3fdebec2693c86e3e63f35ee228) 921 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a955c106558ebb10a74a555a38b45ae1c) 968 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4aab4d4c3cfcad7bd7bdebfd947fea8e75) 676 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4aaf0644b51fd01b31c73eb2ebc140a1a1) 975 0 R] +/Limits [(aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a80b535c275f9f60c644d91263f0638a5) (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4aaf0644b51fd01b31c73eb2ebc140a1a1)] >> endobj -1370 0 obj << -/Names [(index_Scope) 553 0 R (index_encBasics) 554 0 R (main_8cpp) 582 0 R (main_8cpp_adacbe0175a79dff748855d8c9839f82b) 719 0 R (page.1) 551 0 R (page.10) 679 0 R] -/Limits [(index_Scope) (page.10)] +1289 0 obj << +/Names [(aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4ab381330bdc59b0213ad3dedcb4f2f0f7) 641 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4ad2accfe182077bfe80ba43a3f22cf7bb) 648 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4ae6283b321f75b769e9306c6482f2acd5) 974 0 R (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4aef811ce5aab93dcba6584109d266b579) 637 0 R (aacenc__lib_8h_a9b64b2026a1475eb5c7a67fc1364ed94) 557 0 R (aacenc__lib_8h_aac28c7c3724b8bc87558bc35a22bf23c) 618 0 R] +/Limits [(aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4ab381330bdc59b0213ad3dedcb4f2f0f7) (aacenc__lib_8h_aac28c7c3724b8bc87558bc35a22bf23c)] >> endobj -1371 0 obj << -/Names [(page.11) 685 0 R (page.12) 690 0 R (page.13) 695 0 R (page.14) 705 0 R (page.15) 715 0 R (page.16) 723 0 R] -/Limits [(page.11) (page.16)] +1290 0 obj << +/Names [(aacenc__lib_8h_aee37ab1a371397d239178df6194911d1) 615 0 R (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1a7560bc907e827954b0b55f87751fdbeb) 906 0 R (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1a95efe9f7b6df0a6628ec7e2c61646fe9) 908 0 R (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1aa0dc03a5dc38b25ac1ea9d8ddf892fb5) 911 0 R (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1aa9315468e85d31968b147a4080e352a7) 910 0 R (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1af4a650d61726dd5bbbb560042bb0b8a2) 909 0 R] +/Limits [(aacenc__lib_8h_aee37ab1a371397d239178df6194911d1) (aacenc__lib_8h_aee37ab1a371397d239178df6194911d1af4a650d61726dd5bbbb560042bb0b8a2)] >> endobj -1372 0 obj << -/Names [(page.17) 727 0 R (page.18) 731 0 R (page.19) 745 0 R (page.2) 559 0 R (page.20) 753 0 R (page.21) 761 0 R] -/Limits [(page.17) (page.21)] +1291 0 obj << +/Names [(aacenc__lib_8h_aee37ab1a371397d239178df6194911d1af88950dea139037d728aefe7722191ec) 907 0 R (chapter*.1) 438 0 R (chapter.1) 2 0 R (chapter.2) 14 0 R (chapter.3) 102 0 R (chapter.4) 122 0 R] +/Limits [(aacenc__lib_8h_aee37ab1a371397d239178df6194911d1af88950dea139037d728aefe7722191ec) (chapter.4)] >> endobj -1373 0 obj << -/Names [(page.22) 765 0 R (page.23) 776 0 R (page.24) 793 0 R (page.25) 808 0 R (page.26) 837 0 R (page.27) 853 0 R] -/Limits [(page.22) (page.27)] +1292 0 obj << +/Names [(chapter.5) 130 0 R (chapter.6) 138 0 R (chapter.7) 318 0 R (index) 522 0 R (index_Scope) 523 0 R (index_encBasics) 524 0 R] +/Limits [(chapter.5) (index_encBasics)] >> endobj -1374 0 obj << -/Names [(page.28) 864 0 R (page.29) 876 0 R (page.3) 572 0 R (page.30) 911 0 R (page.31) 979 0 R (page.32) 1040 0 R] -/Limits [(page.28) (page.32)] +1293 0 obj << +/Names [(page.1) 521 0 R (page.10) 652 0 R (page.11) 658 0 R (page.12) 664 0 R (page.13) 670 0 R (page.14) 680 0 R] +/Limits [(page.1) (page.14)] >> endobj -1375 0 obj << -/Names [(page.33) 1051 0 R (page.34) 1061 0 R (page.35) 1066 0 R (page.36) 1073 0 R (page.37) 1082 0 R (page.38) 1094 0 R] -/Limits [(page.33) (page.38)] +1294 0 obj << +/Names [(page.15) 696 0 R (page.16) 703 0 R (page.17) 709 0 R (page.18) 713 0 R (page.19) 724 0 R (page.2) 529 0 R] +/Limits [(page.15) (page.2)] >> endobj -1376 0 obj << -/Names [(page.39) 1100 0 R (page.4) 599 0 R (page.40) 1108 0 R (page.41) 1182 0 R (page.42) 1269 0 R (page.43) 1318 0 R] -/Limits [(page.39) (page.43)] +1295 0 obj << +/Names [(page.20) 746 0 R (page.21) 757 0 R (page.22) 785 0 R (page.23) 803 0 R (page.24) 812 0 R (page.25) 829 0 R] +/Limits [(page.20) (page.25)] >> endobj -1377 0 obj << -/Names [(page.5) 611 0 R (page.6) 619 0 R (page.7) 639 0 R (page.8) 660 0 R (page.9) 673 0 R (section*.10) 1041 0 R] -/Limits [(page.5) (section*.10)] +1296 0 obj << +/Names [(page.26) 887 0 R (page.27) 963 0 R (page.28) 982 0 R (page.29) 993 0 R (page.3) 541 0 R (page.30) 999 0 R] +/Limits [(page.26) (page.30)] >> endobj -1378 0 obj << -/Names [(section*.11) 1109 0 R (section*.2) 777 0 R (section*.3) 794 0 R (section*.4) 809 0 R (section*.5) 838 0 R (section*.6) 865 0 R] -/Limits [(section*.11) (section*.6)] +1297 0 obj << +/Names [(page.31) 1003 0 R (page.32) 1011 0 R (page.33) 1020 0 R (page.34) 1029 0 R (page.35) 1037 0 R (page.36) 1041 0 R] +/Limits [(page.31) (page.36)] >> endobj -1379 0 obj << -/Names [(section*.7) 912 0 R (section*.8) 913 0 R (section*.9) 914 0 R (section.1.1) 6 0 R (section.1.2) 10 0 R (section.2.1) 18 0 R] -/Limits [(section*.7) (section.2.1)] +1298 0 obj << +/Names [(page.37) 1106 0 R (page.38) 1194 0 R (page.39) 1242 0 R (page.4) 567 0 R (page.5) 579 0 R (page.6) 587 0 R] +/Limits [(page.37) (page.6)] >> endobj -1380 0 obj << -/Names [(section.2.10) 74 0 R (section.2.11) 78 0 R (section.2.12) 82 0 R (section.2.2) 22 0 R (section.2.3) 26 0 R (section.2.4) 30 0 R] -/Limits [(section.2.10) (section.2.4)] +1299 0 obj << +/Names [(page.7) 607 0 R (page.8) 630 0 R (page.9) 646 0 R (section*.10) 965 0 R (section*.2) 725 0 R (section*.3) 747 0 R] +/Limits [(page.7) (section*.3)] >> endobj -1381 0 obj << -/Names [(section.2.5) 42 0 R (section.2.6) 46 0 R (section.2.7) 50 0 R (section.2.8) 54 0 R (section.2.9) 58 0 R (section.3.1) 98 0 R] -/Limits [(section.2.5) (section.3.1)] +1300 0 obj << +/Names [(section*.4) 758 0 R (section*.5) 786 0 R (section*.6) 813 0 R (section*.7) 830 0 R (section*.8) 831 0 R (section*.9) 888 0 R] +/Limits [(section*.4) (section*.9)] >> endobj -1382 0 obj << -/Names [(section.3.2) 102 0 R (section.3.3) 110 0 R (section.4.1) 118 0 R (section.5.1) 134 0 R (section.6.1) 142 0 R (section.7.1) 150 0 R] -/Limits [(section.3.2) (section.7.1)] +1301 0 obj << +/Names [(section.1.1) 6 0 R (section.1.2) 10 0 R (section.2.1) 18 0 R (section.2.10) 78 0 R (section.2.11) 82 0 R (section.2.12) 86 0 R] +/Limits [(section.1.1) (section.2.12)] >> endobj -1383 0 obj << -/Names [(section.7.2) 182 0 R (section.7.3) 202 0 R (section.7.4) 246 0 R (section.7.5) 302 0 R (section.8.1) 330 0 R (section.8.2) 402 0 R] -/Limits [(section.7.2) (section.8.2)] +1302 0 obj << +/Names [(section.2.2) 22 0 R (section.2.3) 26 0 R (section.2.4) 30 0 R (section.2.5) 42 0 R (section.2.6) 46 0 R (section.2.7) 50 0 R] +/Limits [(section.2.2) (section.2.7)] >> endobj -1384 0 obj << -/Names [(structAACENC__BufDesc) 613 0 R (structAACENC__BufDesc_a2c09424d3a61cdbdb80c8d9ebb42ce71) 780 0 R (structAACENC__BufDesc_a324387bb8e5f44650c6e17c209bb05a9) 782 0 R (structAACENC__BufDesc_ab13b6a5c10505c3defd8bb1c19eac81d) 781 0 R (structAACENC__BufDesc_ac32946f846b95272038017687a96f2c1) 779 0 R (structAACENC__BufDesc_ace97d9ab9ad2f7b24041ee253ad7372f) 783 0 R] -/Limits [(structAACENC__BufDesc) (structAACENC__BufDesc_ace97d9ab9ad2f7b24041ee253ad7372f)] +1303 0 obj << +/Names [(section.2.8) 54 0 R (section.2.9) 58 0 R (section.3.1) 106 0 R (section.3.2) 110 0 R (section.3.3) 118 0 R (section.4.1) 126 0 R] +/Limits [(section.2.8) (section.4.1)] >> endobj -1385 0 obj << -/Names [(structAACENC__InArgs) 747 0 R (structAACENC__InArgs_aa33d59e07bbd49bfe4dd6793763c6d48) 795 0 R (structAACENC__InArgs_aefc45c133d4f9775d8d0aadf56302ae4) 796 0 R (structAACENC__InfoStruct) 748 0 R (structAACENC__InfoStruct_a06f045f69acad8125b1fb814d565549c) 817 0 R (structAACENC__InfoStruct_a3356592232c6536392a58a6c9e185cb6) 811 0 R] -/Limits [(structAACENC__InArgs) (structAACENC__InfoStruct_a3356592232c6536392a58a6c9e185cb6)] +1304 0 obj << +/Names [(section.5.1) 134 0 R (section.6.1) 142 0 R (section.6.2) 174 0 R (section.6.3) 194 0 R (section.6.4) 238 0 R (section.6.5) 294 0 R] +/Limits [(section.5.1) (section.6.5)] >> endobj -1386 0 obj << -/Names [(structAACENC__InfoStruct_a5187acfd8fb7585377ebf162fbb9db39) 818 0 R (structAACENC__InfoStruct_a5bb3228c5af5584f97c54bdf8ed946e3) 810 0 R (structAACENC__InfoStruct_a993149bc5985d79c40d6e96a2d90a228) 813 0 R (structAACENC__InfoStruct_ab5c902598267b09b625e440b53937c76) 812 0 R (structAACENC__InfoStruct_ab919b721d3ef5d4dd56c46614cdf0047) 814 0 R (structAACENC__InfoStruct_ac786a4ebf4dc7f2357cbc142265f5dd8) 815 0 R] -/Limits [(structAACENC__InfoStruct_a5187acfd8fb7585377ebf162fbb9db39) (structAACENC__InfoStruct_ac786a4ebf4dc7f2357cbc142265f5dd8)] +1305 0 obj << +/Names [(section.7.1) 322 0 R (structAACENC__BufDesc) 581 0 R (structAACENC__BufDesc_a2c09424d3a61cdbdb80c8d9ebb42ce71) 728 0 R (structAACENC__BufDesc_a324387bb8e5f44650c6e17c209bb05a9) 732 0 R (structAACENC__BufDesc_ab13b6a5c10505c3defd8bb1c19eac81d) 729 0 R (structAACENC__BufDesc_ac32946f846b95272038017687a96f2c1) 727 0 R] +/Limits [(section.7.1) (structAACENC__BufDesc_ac32946f846b95272038017687a96f2c1)] >> endobj -1387 0 obj << -/Names [(structAACENC__MetaData) 645 0 R (structAACENC__MetaData_a06cce4e89d53d956d27fb20892461aa0) 648 0 R (structAACENC__MetaData_a0ad6337da83fa3a43a22f87d4ee8b192) 847 0 R (structAACENC__MetaData_a1e67ac741a9080f11325d0c02223f046) 839 0 R (structAACENC__MetaData_a47e42d88c7abcaaa2fa9a72f6b6eaa24) 844 0 R (structAACENC__MetaData_a77fd2ae629044c75369a51760a00d57f) 840 0 R] -/Limits [(structAACENC__MetaData) (structAACENC__MetaData_a77fd2ae629044c75369a51760a00d57f)] +1306 0 obj << +/Names [(structAACENC__BufDesc_ace97d9ab9ad2f7b24041ee253ad7372f) 730 0 R (structAACENC__InArgs) 697 0 R (structAACENC__InArgs_aa33d59e07bbd49bfe4dd6793763c6d48) 748 0 R (structAACENC__InArgs_aefc45c133d4f9775d8d0aadf56302ae4) 749 0 R (structAACENC__InfoStruct) 698 0 R (structAACENC__InfoStruct_a06f045f69acad8125b1fb814d565549c) 766 0 R] +/Limits [(structAACENC__BufDesc_ace97d9ab9ad2f7b24041ee253ad7372f) (structAACENC__InfoStruct_a06f045f69acad8125b1fb814d565549c)] >> endobj -1388 0 obj << -/Names [(structAACENC__MetaData_a9274bda31c82bd154ddb3767b74be6b2) 649 0 R (structAACENC__MetaData_aa2fbd6a3c66ac05e69e42782807e7ba4) 843 0 R (structAACENC__MetaData_ace0f370c1026d179ea122c0820e1d17c) 845 0 R (structAACENC__MetaData_ad2646dc407b31f38dbf71178b6780916) 846 0 R (structAACENC__MetaData_aeb0d2d7748c98809112088d0bd997f61) 842 0 R (structAACENC__MetaData_af001f70f58df01e7e65105bf752a44bd) 841 0 R] -/Limits [(structAACENC__MetaData_a9274bda31c82bd154ddb3767b74be6b2) (structAACENC__MetaData_af001f70f58df01e7e65105bf752a44bd)] +1307 0 obj << +/Names [(structAACENC__InfoStruct_a3356592232c6536392a58a6c9e185cb6) 760 0 R (structAACENC__InfoStruct_a5187acfd8fb7585377ebf162fbb9db39) 765 0 R (structAACENC__InfoStruct_a5bb3228c5af5584f97c54bdf8ed946e3) 759 0 R (structAACENC__InfoStruct_a993149bc5985d79c40d6e96a2d90a228) 762 0 R (structAACENC__InfoStruct_ab5c902598267b09b625e440b53937c76) 761 0 R (structAACENC__InfoStruct_ab919b721d3ef5d4dd56c46614cdf0047) 763 0 R] +/Limits [(structAACENC__InfoStruct_a3356592232c6536392a58a6c9e185cb6) (structAACENC__InfoStruct_ab919b721d3ef5d4dd56c46614cdf0047)] >> endobj -1389 0 obj << -/Names [(structAACENC__OutArgs) 749 0 R (structAACENC__OutArgs_a7d481a0e52142dcdbdfa34677b111d7e) 866 0 R (structAACENC__OutArgs_aa08d19137d0dbd54d3d86f88a85eb149) 868 0 R (structAACENC__OutArgs_ad4d8784f4d5504a5f87ef44af1e7b6db) 867 0 R (subsection.2.12.1) 86 0 R (subsection.2.12.2) 90 0 R] -/Limits [(structAACENC__OutArgs) (subsection.2.12.2)] +1308 0 obj << +/Names [(structAACENC__InfoStruct_ac786a4ebf4dc7f2357cbc142265f5dd8) 764 0 R (structAACENC__MetaData) 613 0 R (structAACENC__MetaData_a06cce4e89d53d956d27fb20892461aa0) 616 0 R (structAACENC__MetaData_a0ad6337da83fa3a43a22f87d4ee8b192) 790 0 R (structAACENC__MetaData_a1e67ac741a9080f11325d0c02223f046) 787 0 R (structAACENC__MetaData_a47e42d88c7abcaaa2fa9a72f6b6eaa24) 794 0 R] +/Limits [(structAACENC__InfoStruct_ac786a4ebf4dc7f2357cbc142265f5dd8) (structAACENC__MetaData_a47e42d88c7abcaaa2fa9a72f6b6eaa24)] >> endobj -1390 0 obj << -/Names [(subsection.2.4.1) 34 0 R (subsection.2.4.2) 38 0 R (subsection.2.9.1) 62 0 R (subsection.2.9.2) 66 0 R (subsection.2.9.3) 70 0 R (subsection.3.2.1) 106 0 R] -/Limits [(subsection.2.4.1) (subsection.3.2.1)] +1309 0 obj << +/Names [(structAACENC__MetaData_a77fd2ae629044c75369a51760a00d57f) 791 0 R (structAACENC__MetaData_a9274bda31c82bd154ddb3767b74be6b2) 617 0 R (structAACENC__MetaData_aa2fbd6a3c66ac05e69e42782807e7ba4) 793 0 R (structAACENC__MetaData_ace0f370c1026d179ea122c0820e1d17c) 795 0 R (structAACENC__MetaData_ad2646dc407b31f38dbf71178b6780916) 796 0 R (structAACENC__MetaData_aeb0d2d7748c98809112088d0bd997f61) 792 0 R] +/Limits [(structAACENC__MetaData_a77fd2ae629044c75369a51760a00d57f) (structAACENC__MetaData_aeb0d2d7748c98809112088d0bd997f61)] >> endobj -1391 0 obj << -/Names [(subsection.4.1.1) 122 0 R (subsection.4.1.2) 126 0 R (subsection.7.1.1) 154 0 R (subsection.7.1.2) 158 0 R (subsection.7.2.1) 186 0 R (subsection.7.2.2) 190 0 R] -/Limits [(subsection.4.1.1) (subsection.7.2.2)] +1310 0 obj << +/Names [(structAACENC__MetaData_af001f70f58df01e7e65105bf752a44bd) 788 0 R (structAACENC__OutArgs) 699 0 R (structAACENC__OutArgs_a7d481a0e52142dcdbdfa34677b111d7e) 814 0 R (structAACENC__OutArgs_aa08d19137d0dbd54d3d86f88a85eb149) 816 0 R (structAACENC__OutArgs_ad4d8784f4d5504a5f87ef44af1e7b6db) 815 0 R (subsection.2.12.1) 90 0 R] +/Limits [(structAACENC__MetaData_af001f70f58df01e7e65105bf752a44bd) (subsection.2.12.1)] >> endobj -1392 0 obj << -/Names [(subsection.7.3.1) 206 0 R (subsection.7.3.2) 210 0 R (subsection.7.4.1) 250 0 R (subsection.7.4.2) 254 0 R (subsection.7.5.1) 306 0 R (subsection.7.5.2) 310 0 R] -/Limits [(subsection.7.3.1) (subsection.7.5.2)] +1311 0 obj << +/Names [(subsection.2.12.2) 94 0 R (subsection.2.12.3) 98 0 R (subsection.2.4.1) 34 0 R (subsection.2.4.2) 38 0 R (subsection.2.9.1) 62 0 R (subsection.2.9.2) 66 0 R] +/Limits [(subsection.2.12.2) (subsection.2.9.2)] >> endobj -1393 0 obj << -/Names [(subsection.8.1.1) 334 0 R (subsection.8.1.2) 338 0 R (subsection.8.1.3) 346 0 R (subsection.8.1.4) 370 0 R (subsection.8.2.1) 406 0 R (subsection.8.2.2) 410 0 R] -/Limits [(subsection.8.1.1) (subsection.8.2.2)] +1312 0 obj << +/Names [(subsection.2.9.3) 70 0 R (subsection.2.9.4) 74 0 R (subsection.3.2.1) 114 0 R (subsection.6.1.1) 146 0 R (subsection.6.1.2) 150 0 R (subsection.6.2.1) 178 0 R] +/Limits [(subsection.2.9.3) (subsection.6.2.1)] >> endobj -1394 0 obj << -/Names [(subsubsection.7.1.2.1) 162 0 R (subsubsection.7.1.2.2) 166 0 R (subsubsection.7.1.2.3) 170 0 R (subsubsection.7.1.2.4) 174 0 R (subsubsection.7.1.2.5) 178 0 R (subsubsection.7.2.2.1) 194 0 R] -/Limits [(subsubsection.7.1.2.1) (subsubsection.7.2.2.1)] +1313 0 obj << +/Names [(subsection.6.2.2) 182 0 R (subsection.6.3.1) 198 0 R (subsection.6.3.2) 202 0 R (subsection.6.4.1) 242 0 R (subsection.6.4.2) 246 0 R (subsection.6.5.1) 298 0 R] +/Limits [(subsection.6.2.2) (subsection.6.5.1)] >> endobj -1395 0 obj << -/Names [(subsubsection.7.2.2.2) 198 0 R (subsubsection.7.3.2.1) 214 0 R (subsubsection.7.3.2.2) 218 0 R (subsubsection.7.3.2.3) 222 0 R (subsubsection.7.3.2.4) 226 0 R (subsubsection.7.3.2.5) 230 0 R] -/Limits [(subsubsection.7.2.2.2) (subsubsection.7.3.2.5)] +1314 0 obj << +/Names [(subsection.6.5.2) 302 0 R (subsection.7.1.1) 326 0 R (subsection.7.1.2) 330 0 R (subsection.7.1.3) 338 0 R (subsection.7.1.4) 362 0 R (subsubsection.6.1.2.1) 154 0 R] +/Limits [(subsection.6.5.2) (subsubsection.6.1.2.1)] >> endobj -1396 0 obj << -/Names [(subsubsection.7.3.2.6) 234 0 R (subsubsection.7.3.2.7) 238 0 R (subsubsection.7.3.2.8) 242 0 R (subsubsection.7.4.2.1) 258 0 R (subsubsection.7.4.2.10) 294 0 R (subsubsection.7.4.2.11) 298 0 R] -/Limits [(subsubsection.7.3.2.6) (subsubsection.7.4.2.11)] +1315 0 obj << +/Names [(subsubsection.6.1.2.2) 158 0 R (subsubsection.6.1.2.3) 162 0 R (subsubsection.6.1.2.4) 166 0 R (subsubsection.6.1.2.5) 170 0 R (subsubsection.6.2.2.1) 186 0 R (subsubsection.6.2.2.2) 190 0 R] +/Limits [(subsubsection.6.1.2.2) (subsubsection.6.2.2.2)] >> endobj -1397 0 obj << -/Names [(subsubsection.7.4.2.2) 262 0 R (subsubsection.7.4.2.3) 266 0 R (subsubsection.7.4.2.4) 270 0 R (subsubsection.7.4.2.5) 274 0 R (subsubsection.7.4.2.6) 278 0 R (subsubsection.7.4.2.7) 282 0 R] -/Limits [(subsubsection.7.4.2.2) (subsubsection.7.4.2.7)] +1316 0 obj << +/Names [(subsubsection.6.3.2.1) 206 0 R (subsubsection.6.3.2.2) 210 0 R (subsubsection.6.3.2.3) 214 0 R (subsubsection.6.3.2.4) 218 0 R (subsubsection.6.3.2.5) 222 0 R (subsubsection.6.3.2.6) 226 0 R] +/Limits [(subsubsection.6.3.2.1) (subsubsection.6.3.2.6)] >> endobj -1398 0 obj << -/Names [(subsubsection.7.4.2.8) 286 0 R (subsubsection.7.4.2.9) 290 0 R (subsubsection.7.5.2.1) 314 0 R (subsubsection.7.5.2.2) 318 0 R (subsubsection.7.5.2.3) 322 0 R (subsubsection.8.1.2.1) 342 0 R] -/Limits [(subsubsection.7.4.2.8) (subsubsection.8.1.2.1)] +1317 0 obj << +/Names [(subsubsection.6.3.2.7) 230 0 R (subsubsection.6.3.2.8) 234 0 R (subsubsection.6.4.2.1) 250 0 R (subsubsection.6.4.2.10) 286 0 R (subsubsection.6.4.2.11) 290 0 R (subsubsection.6.4.2.2) 254 0 R] +/Limits [(subsubsection.6.3.2.7) (subsubsection.6.4.2.2)] >> endobj -1399 0 obj << -/Names [(subsubsection.8.1.3.1) 350 0 R (subsubsection.8.1.3.2) 354 0 R (subsubsection.8.1.3.3) 358 0 R (subsubsection.8.1.3.4) 362 0 R (subsubsection.8.1.3.5) 366 0 R (subsubsection.8.1.4.1) 374 0 R] -/Limits [(subsubsection.8.1.3.1) (subsubsection.8.1.4.1)] +1318 0 obj << +/Names [(subsubsection.6.4.2.3) 258 0 R (subsubsection.6.4.2.4) 262 0 R (subsubsection.6.4.2.5) 266 0 R (subsubsection.6.4.2.6) 270 0 R (subsubsection.6.4.2.7) 274 0 R (subsubsection.6.4.2.8) 278 0 R] +/Limits [(subsubsection.6.4.2.3) (subsubsection.6.4.2.8)] >> endobj -1400 0 obj << -/Names [(subsubsection.8.1.4.2) 378 0 R (subsubsection.8.1.4.3) 382 0 R (subsubsection.8.1.4.4) 386 0 R (subsubsection.8.1.4.5) 390 0 R (subsubsection.8.1.4.6) 394 0 R (subsubsection.8.1.4.7) 398 0 R] -/Limits [(subsubsection.8.1.4.2) (subsubsection.8.1.4.7)] +1319 0 obj << +/Names [(subsubsection.6.4.2.9) 282 0 R (subsubsection.6.5.2.1) 306 0 R (subsubsection.6.5.2.2) 310 0 R (subsubsection.6.5.2.3) 314 0 R (subsubsection.7.1.2.1) 334 0 R (subsubsection.7.1.3.1) 342 0 R] +/Limits [(subsubsection.6.4.2.9) (subsubsection.7.1.3.1)] >> endobj -1401 0 obj << -/Names [(subsubsection.8.2.2.1) 414 0 R] -/Limits [(subsubsection.8.2.2.1) (subsubsection.8.2.2.1)] +1320 0 obj << +/Names [(subsubsection.7.1.3.2) 346 0 R (subsubsection.7.1.3.3) 350 0 R (subsubsection.7.1.3.4) 354 0 R (subsubsection.7.1.3.5) 358 0 R (subsubsection.7.1.4.1) 366 0 R (subsubsection.7.1.4.2) 370 0 R] +/Limits [(subsubsection.7.1.3.2) (subsubsection.7.1.4.2)] >> endobj -1402 0 obj << -/Kids [1352 0 R 1353 0 R 1354 0 R 1355 0 R 1356 0 R 1357 0 R] -/Limits [(CommandLineUsage) (LIBUSE_writeOutData)] +1321 0 obj << +/Names [(subsubsection.7.1.4.3) 374 0 R (subsubsection.7.1.4.4) 378 0 R (subsubsection.7.1.4.5) 382 0 R (subsubsection.7.1.4.6) 386 0 R (subsubsection.7.1.4.7) 390 0 R] +/Limits [(subsubsection.7.1.4.3) (subsubsection.7.1.4.7)] >> endobj -1403 0 obj << -/Kids [1358 0 R 1359 0 R 1360 0 R 1361 0 R 1362 0 R 1363 0 R] -/Limits [(aacenc__lib_8h) (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a02f49b93eaadb6a903b87670849255a5)] +1322 0 obj << +/Kids [1275 0 R 1276 0 R 1277 0 R 1278 0 R 1279 0 R 1280 0 R] +/Limits [(Doc-Start) (aacenc__lib_8h_a04ddaeecd6dc422bb72175b9e0ab3fea)] >> endobj -1404 0 obj << -/Kids [1364 0 R 1365 0 R 1366 0 R 1367 0 R 1368 0 R 1369 0 R] -/Limits [(aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a0ee251ffa58317c7ea29364d344c4660) (index)] +1323 0 obj << +/Kids [1281 0 R 1282 0 R 1283 0 R 1284 0 R 1285 0 R 1286 0 R] +/Limits [(aacenc__lib_8h_a079ac614039555edf1d131e5fb87573b) (aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a2e2b4d3e563dc169c06d590d8c833243)] >> endobj -1405 0 obj << -/Kids [1370 0 R 1371 0 R 1372 0 R 1373 0 R 1374 0 R 1375 0 R] -/Limits [(index_Scope) (page.38)] +1324 0 obj << +/Kids [1287 0 R 1288 0 R 1289 0 R 1290 0 R 1291 0 R 1292 0 R] +/Limits [(aacenc__lib_8h_a962fbff5778f83a2a1915cbb56adc2a4a3869e3bae5904258eff0b77d2ebed3b1) (index_encBasics)] >> endobj -1406 0 obj << -/Kids [1376 0 R 1377 0 R 1378 0 R 1379 0 R 1380 0 R 1381 0 R] -/Limits [(page.39) (section.3.1)] +1325 0 obj << +/Kids [1293 0 R 1294 0 R 1295 0 R 1296 0 R 1297 0 R 1298 0 R] +/Limits [(page.1) (page.6)] >> endobj -1407 0 obj << -/Kids [1382 0 R 1383 0 R 1384 0 R 1385 0 R 1386 0 R 1387 0 R] -/Limits [(section.3.2) (structAACENC__MetaData_a77fd2ae629044c75369a51760a00d57f)] +1326 0 obj << +/Kids [1299 0 R 1300 0 R 1301 0 R 1302 0 R 1303 0 R 1304 0 R] +/Limits [(page.7) (section.6.5)] >> endobj -1408 0 obj << -/Kids [1388 0 R 1389 0 R 1390 0 R 1391 0 R 1392 0 R 1393 0 R] -/Limits [(structAACENC__MetaData_a9274bda31c82bd154ddb3767b74be6b2) (subsection.8.2.2)] +1327 0 obj << +/Kids [1305 0 R 1306 0 R 1307 0 R 1308 0 R 1309 0 R 1310 0 R] +/Limits [(section.7.1) (subsection.2.12.1)] >> endobj -1409 0 obj << -/Kids [1394 0 R 1395 0 R 1396 0 R 1397 0 R 1398 0 R 1399 0 R] -/Limits [(subsubsection.7.1.2.1) (subsubsection.8.1.4.1)] +1328 0 obj << +/Kids [1311 0 R 1312 0 R 1313 0 R 1314 0 R 1315 0 R 1316 0 R] +/Limits [(subsection.2.12.2) (subsubsection.6.3.2.6)] >> endobj -1410 0 obj << -/Kids [1400 0 R 1401 0 R] -/Limits [(subsubsection.8.1.4.2) (subsubsection.8.2.2.1)] +1329 0 obj << +/Kids [1317 0 R 1318 0 R 1319 0 R 1320 0 R 1321 0 R] +/Limits [(subsubsection.6.3.2.7) (subsubsection.7.1.4.7)] >> endobj -1411 0 obj << -/Kids [1402 0 R 1403 0 R 1404 0 R 1405 0 R 1406 0 R 1407 0 R] -/Limits [(CommandLineUsage) (structAACENC__MetaData_a77fd2ae629044c75369a51760a00d57f)] +1330 0 obj << +/Kids [1322 0 R 1323 0 R 1324 0 R 1325 0 R 1326 0 R 1327 0 R] +/Limits [(Doc-Start) (subsection.2.12.1)] >> endobj -1412 0 obj << -/Kids [1408 0 R 1409 0 R 1410 0 R] -/Limits [(structAACENC__MetaData_a9274bda31c82bd154ddb3767b74be6b2) (subsubsection.8.2.2.1)] +1331 0 obj << +/Kids [1328 0 R 1329 0 R] +/Limits [(subsection.2.12.2) (subsubsection.7.1.4.7)] >> endobj -1413 0 obj << -/Kids [1411 0 R 1412 0 R] -/Limits [(CommandLineUsage) (subsubsection.8.2.2.1)] +1332 0 obj << +/Kids [1330 0 R 1331 0 R] +/Limits [(Doc-Start) (subsubsection.7.1.4.7)] >> endobj -1414 0 obj << -/Dests 1413 0 R +1333 0 obj << +/Dests 1332 0 R >> endobj -1415 0 obj << +1334 0 obj << /Type /Catalog -/Pages 1350 0 R -/Outlines 1351 0 R -/Names 1414 0 R +/Pages 1273 0 R +/Outlines 1274 0 R +/Names 1333 0 R /PageMode/UseOutlines/PageLabels<</Nums[0<</S/D>>2<</S/r>>6<</S/D>>]>> -/OpenAction 417 0 R +/OpenAction 393 0 R >> endobj -1416 0 obj << +1335 0 obj << /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.10)/Keywords() -/CreationDate (D:20120927164403+02'00') -/ModDate (D:20120927164403+02'00') +/CreationDate (D:20130902144953+02'00') +/ModDate (D:20130902144953+02'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-1.40.10-2.2 (TeX Live 2009/Debian) kpathsea version 5.0.0) >> endobj xref -0 1417 +0 1336 0000000000 65535 f 0000000015 00000 n -0000187333 00000 n -0000488698 00000 n +0000185384 00000 n +0000472226 00000 n 0000000060 00000 n 0000000146 00000 n -0000187502 00000 n -0000488628 00000 n +0000185553 00000 n +0000472156 00000 n 0000000193 00000 n 0000000244 00000 n -0000187619 00000 n -0000488557 00000 n +0000185670 00000 n +0000472085 00000 n 0000000291 00000 n 0000000391 00000 n -0000191743 00000 n -0000488431 00000 n +0000189632 00000 n +0000471958 00000 n 0000000437 00000 n 0000000532 00000 n -0000191913 00000 n -0000488357 00000 n +0000189802 00000 n +0000471884 00000 n 0000000580 00000 n 0000000655 00000 n -0000192031 00000 n -0000488270 00000 n +0000189920 00000 n +0000471797 00000 n 0000000703 00000 n 0000000813 00000 n -0000195683 00000 n -0000488183 00000 n +0000193572 00000 n +0000471710 00000 n 0000000861 00000 n 0000001029 00000 n -0000198534 00000 n -0000488059 00000 n +0000196426 00000 n +0000471586 00000 n 0000001077 00000 n 0000001217 00000 n -0000198647 00000 n -0000487985 00000 n +0000196539 00000 n +0000471512 00000 n 0000001270 00000 n 0000001433 00000 n -0000201120 00000 n -0000487911 00000 n +0000199022 00000 n +0000471438 00000 n 0000001486 00000 n 0000001697 00000 n -0000201233 00000 n -0000487824 00000 n +0000199135 00000 n +0000471351 00000 n 0000001745 00000 n 0000001863 00000 n -0000201345 00000 n -0000487737 00000 n +0000199247 00000 n +0000471264 00000 n 0000001911 00000 n 0000002049 00000 n -0000207101 00000 n -0000487650 00000 n +0000205003 00000 n +0000471177 00000 n 0000002097 00000 n 0000002245 00000 n -0000207214 00000 n -0000487563 00000 n +0000205116 00000 n +0000471090 00000 n 0000002293 00000 n 0000002438 00000 n -0000207326 00000 n -0000487439 00000 n +0000205228 00000 n +0000470966 00000 n 0000002486 00000 n 0000002631 00000 n -0000210824 00000 n -0000487365 00000 n +0000209491 00000 n +0000470892 00000 n 0000002684 00000 n 0000002857 00000 n -0000210937 00000 n -0000487278 00000 n +0000209604 00000 n +0000470805 00000 n 0000002910 00000 n 0000003073 00000 n -0000211050 00000 n -0000487204 00000 n +0000209717 00000 n +0000470718 00000 n 0000003126 00000 n 0000003299 00000 n -0000211163 00000 n -0000487117 00000 n -0000003348 00000 n -0000003516 00000 n -0000216282 00000 n -0000487030 00000 n -0000003565 00000 n -0000003685 00000 n -0000216400 00000 n -0000486919 00000 n -0000003734 00000 n -0000004026 00000 n -0000216518 00000 n -0000486845 00000 n -0000004080 00000 n -0000004238 00000 n -0000218066 00000 n -0000486771 00000 n -0000004292 00000 n -0000004501 00000 n -0000221444 00000 n -0000486643 00000 n -0000004547 00000 n -0000004662 00000 n -0000221614 00000 n -0000486567 00000 n -0000004710 00000 n -0000004783 00000 n -0000221731 00000 n -0000486437 00000 n -0000004832 00000 n -0000005010 00000 n -0000224678 00000 n -0000486372 00000 n -0000005064 00000 n -0000005251 00000 n -0000224795 00000 n -0000486294 00000 n -0000005300 00000 n -0000005396 00000 n -0000227320 00000 n -0000486162 00000 n -0000005443 00000 n -0000005564 00000 n -0000227496 00000 n -0000486058 00000 n -0000005613 00000 n -0000005686 00000 n -0000227610 00000 n -0000485979 00000 n -0000005740 00000 n -0000005866 00000 n -0000227724 00000 n -0000485900 00000 n -0000005920 00000 n -0000006041 00000 n -0000233537 00000 n -0000485767 00000 n -0000006088 00000 n -0000006174 00000 n -0000233594 00000 n -0000485702 00000 n -0000006223 00000 n -0000006304 00000 n -0000235481 00000 n -0000485569 00000 n -0000006351 00000 n -0000006432 00000 n -0000235538 00000 n -0000485504 00000 n -0000006481 00000 n -0000006557 00000 n -0000238595 00000 n -0000485371 00000 n -0000006604 00000 n -0000006730 00000 n -0000238709 00000 n -0000485253 00000 n -0000006779 00000 n -0000006971 00000 n -0000238823 00000 n -0000485174 00000 n -0000007025 00000 n -0000007156 00000 n -0000238880 00000 n -0000485056 00000 n -0000007210 00000 n -0000007369 00000 n -0000238994 00000 n -0000484977 00000 n -0000007428 00000 n -0000007506 00000 n -0000239108 00000 n -0000484884 00000 n -0000007565 00000 n -0000007678 00000 n -0000239222 00000 n -0000484791 00000 n -0000007737 00000 n -0000007785 00000 n -0000241506 00000 n -0000484698 00000 n -0000007844 00000 n -0000007912 00000 n -0000241620 00000 n -0000484619 00000 n -0000007971 00000 n -0000008034 00000 n -0000241734 00000 n -0000484487 00000 n -0000008083 00000 n -0000008270 00000 n -0000241848 00000 n -0000484408 00000 n -0000008324 00000 n -0000008455 00000 n -0000241905 00000 n -0000484290 00000 n -0000008509 00000 n -0000008668 00000 n -0000242019 00000 n -0000484211 00000 n -0000008727 00000 n -0000008810 00000 n -0000242133 00000 n -0000484132 00000 n -0000008869 00000 n -0000008957 00000 n -0000245417 00000 n -0000484000 00000 n -0000009006 00000 n -0000009213 00000 n -0000245531 00000 n -0000483921 00000 n -0000009267 00000 n -0000009398 00000 n -0000245588 00000 n -0000483803 00000 n -0000009452 00000 n -0000009611 00000 n -0000245702 00000 n -0000483724 00000 n -0000009670 00000 n -0000009733 00000 n -0000245816 00000 n -0000483631 00000 n -0000009792 00000 n -0000009860 00000 n -0000245930 00000 n -0000483538 00000 n -0000009919 00000 n -0000010007 00000 n -0000246048 00000 n -0000483445 00000 n -0000010066 00000 n -0000010149 00000 n -0000246162 00000 n -0000483352 00000 n -0000010208 00000 n -0000010306 00000 n -0000250664 00000 n -0000483259 00000 n -0000010365 00000 n -0000010458 00000 n -0000250778 00000 n -0000483166 00000 n -0000010517 00000 n -0000010600 00000 n -0000250897 00000 n -0000483087 00000 n -0000010659 00000 n -0000010757 00000 n -0000251011 00000 n -0000482955 00000 n -0000010806 00000 n -0000011003 00000 n -0000251125 00000 n -0000482876 00000 n -0000011057 00000 n -0000011188 00000 n -0000251182 00000 n -0000482757 00000 n -0000011242 00000 n -0000011401 00000 n -0000251296 00000 n -0000482678 00000 n -0000011460 00000 n -0000011558 00000 n -0000253185 00000 n -0000482585 00000 n -0000011617 00000 n -0000011708 00000 n -0000253304 00000 n -0000482492 00000 n -0000011767 00000 n -0000011893 00000 n -0000253423 00000 n -0000482399 00000 n -0000011952 00000 n -0000012065 00000 n -0000253537 00000 n -0000482306 00000 n -0000012124 00000 n -0000012210 00000 n -0000253655 00000 n -0000482213 00000 n -0000012269 00000 n +0000209830 00000 n +0000470644 00000 n +0000003352 00000 n +0000003523 00000 n +0000212481 00000 n +0000470557 00000 n +0000003572 00000 n +0000003740 00000 n +0000215144 00000 n +0000470470 00000 n +0000003789 00000 n +0000003909 00000 n +0000216751 00000 n +0000470359 00000 n +0000003958 00000 n +0000004250 00000 n +0000216869 00000 n +0000470285 00000 n +0000004304 00000 n +0000004579 00000 n +0000216982 00000 n +0000470198 00000 n +0000004633 00000 n +0000004959 00000 n +0000218364 00000 n +0000470123 00000 n +0000005013 00000 n +0000005264 00000 n +0000221258 00000 n +0000469991 00000 n +0000005311 00000 n +0000005427 00000 n +0000221429 00000 n +0000469912 00000 n +0000005476 00000 n +0000005549 00000 n +0000221547 00000 n +0000469780 00000 n +0000005598 00000 n +0000005776 00000 n +0000224654 00000 n +0000469715 00000 n +0000005830 00000 n +0000006017 00000 n +0000224773 00000 n +0000469636 00000 n +0000006066 00000 n +0000006162 00000 n +0000227260 00000 n +0000469503 00000 n +0000006209 00000 n +0000006295 00000 n +0000227317 00000 n +0000469438 00000 n +0000006344 00000 n +0000006425 00000 n +0000228843 00000 n +0000469305 00000 n +0000006472 00000 n +0000006553 00000 n +0000228900 00000 n +0000469240 00000 n +0000006602 00000 n +0000006678 00000 n +0000231931 00000 n +0000469107 00000 n +0000006725 00000 n +0000006851 00000 n +0000232045 00000 n +0000468989 00000 n +0000006900 00000 n +0000007092 00000 n +0000232159 00000 n +0000468910 00000 n +0000007146 00000 n +0000007277 00000 n +0000232216 00000 n +0000468792 00000 n +0000007331 00000 n +0000007490 00000 n +0000232330 00000 n +0000468713 00000 n +0000007549 00000 n +0000007627 00000 n +0000232448 00000 n +0000468620 00000 n +0000007686 00000 n +0000007799 00000 n +0000232567 00000 n +0000468527 00000 n +0000007858 00000 n +0000007906 00000 n +0000234839 00000 n +0000468434 00000 n +0000007965 00000 n +0000008033 00000 n +0000234957 00000 n +0000468355 00000 n +0000008092 00000 n +0000008155 00000 n +0000235071 00000 n +0000468223 00000 n +0000008204 00000 n +0000008391 00000 n +0000235185 00000 n +0000468144 00000 n +0000008445 00000 n +0000008576 00000 n +0000235242 00000 n +0000468026 00000 n +0000008630 00000 n +0000008789 00000 n +0000235356 00000 n +0000467947 00000 n +0000008848 00000 n +0000008931 00000 n +0000235475 00000 n +0000467868 00000 n +0000008990 00000 n +0000009078 00000 n +0000235589 00000 n +0000467736 00000 n +0000009127 00000 n +0000009334 00000 n +0000238873 00000 n +0000467657 00000 n +0000009388 00000 n +0000009519 00000 n +0000238930 00000 n +0000467539 00000 n +0000009573 00000 n +0000009732 00000 n +0000239044 00000 n +0000467460 00000 n +0000009791 00000 n +0000009854 00000 n +0000239163 00000 n +0000467367 00000 n +0000009913 00000 n +0000009981 00000 n +0000239281 00000 n +0000467274 00000 n +0000010040 00000 n +0000010128 00000 n +0000239398 00000 n +0000467181 00000 n +0000010187 00000 n +0000010270 00000 n +0000239517 00000 n +0000467088 00000 n +0000010329 00000 n +0000010427 00000 n +0000239636 00000 n +0000466995 00000 n +0000010486 00000 n +0000010579 00000 n +0000239754 00000 n +0000466902 00000 n +0000010638 00000 n +0000010721 00000 n +0000244504 00000 n +0000466823 00000 n +0000010780 00000 n +0000010878 00000 n +0000244618 00000 n +0000466691 00000 n +0000010927 00000 n +0000011124 00000 n +0000244732 00000 n +0000466612 00000 n +0000011178 00000 n +0000011309 00000 n +0000244789 00000 n +0000466493 00000 n +0000011363 00000 n +0000011522 00000 n +0000244903 00000 n +0000466414 00000 n +0000011581 00000 n +0000011679 00000 n +0000245022 00000 n +0000466321 00000 n +0000011738 00000 n +0000011829 00000 n +0000245140 00000 n +0000466228 00000 n +0000011888 00000 n +0000012014 00000 n +0000247148 00000 n +0000466135 00000 n +0000012073 00000 n +0000012186 00000 n +0000247262 00000 n +0000466042 00000 n +0000012245 00000 n +0000012331 00000 n +0000247381 00000 n +0000465949 00000 n 0000012390 00000 n -0000253774 00000 n -0000482120 00000 n -0000012449 00000 n -0000012578 00000 n -0000253893 00000 n -0000482027 00000 n -0000012637 00000 n -0000012789 00000 n -0000254011 00000 n -0000481934 00000 n -0000012848 00000 n -0000012952 00000 n -0000254130 00000 n -0000481841 00000 n -0000013012 00000 n -0000013159 00000 n -0000256827 00000 n -0000481762 00000 n -0000013219 00000 n -0000013327 00000 n -0000256941 00000 n -0000481644 00000 n -0000013376 00000 n -0000013568 00000 n -0000257054 00000 n -0000481565 00000 n -0000013622 00000 n -0000013753 00000 n -0000257111 00000 n -0000481447 00000 n -0000013807 00000 n -0000013966 00000 n -0000257225 00000 n -0000481368 00000 n -0000014025 00000 n -0000014108 00000 n -0000257339 00000 n -0000481275 00000 n -0000014167 00000 n -0000014255 00000 n -0000257453 00000 n -0000481196 00000 n -0000014314 00000 n -0000014397 00000 n -0000262220 00000 n -0000481077 00000 n -0000014444 00000 n +0000012511 00000 n +0000247498 00000 n +0000465856 00000 n +0000012570 00000 n +0000012699 00000 n +0000247617 00000 n +0000465763 00000 n +0000012758 00000 n +0000012910 00000 n +0000247736 00000 n +0000465670 00000 n +0000012969 00000 n +0000013073 00000 n +0000247855 00000 n +0000465577 00000 n +0000013133 00000 n +0000013280 00000 n +0000247974 00000 n +0000465498 00000 n +0000013340 00000 n +0000013448 00000 n +0000248088 00000 n +0000465380 00000 n +0000013497 00000 n +0000013689 00000 n +0000250415 00000 n +0000465301 00000 n +0000013743 00000 n +0000013874 00000 n +0000250472 00000 n +0000465183 00000 n +0000013928 00000 n +0000014087 00000 n +0000250586 00000 n +0000465104 00000 n +0000014146 00000 n +0000014229 00000 n +0000250705 00000 n +0000465011 00000 n +0000014288 00000 n +0000014376 00000 n +0000250824 00000 n +0000464932 00000 n +0000014435 00000 n +0000014518 00000 n +0000256838 00000 n +0000464813 00000 n 0000014565 00000 n -0000262334 00000 n -0000480959 00000 n -0000014614 00000 n -0000014786 00000 n -0000288956 00000 n -0000480880 00000 n -0000014840 00000 n -0000014971 00000 n -0000289013 00000 n -0000480748 00000 n -0000015025 00000 n -0000015161 00000 n -0000289129 00000 n -0000480683 00000 n -0000015220 00000 n -0000015336 00000 n -0000289187 00000 n -0000480551 00000 n -0000015390 00000 n -0000015574 00000 n -0000289303 00000 n -0000480472 00000 n -0000015633 00000 n -0000015779 00000 n -0000291916 00000 n -0000480379 00000 n -0000015838 00000 n -0000015949 00000 n -0000292409 00000 n -0000480286 00000 n -0000016008 00000 n -0000016099 00000 n -0000296785 00000 n -0000480193 00000 n -0000016158 00000 n -0000016330 00000 n -0000297279 00000 n -0000480114 00000 n -0000016389 00000 n -0000016480 00000 n -0000304162 00000 n -0000479996 00000 n -0000016534 00000 n -0000016675 00000 n -0000304277 00000 n -0000479917 00000 n -0000016734 00000 n -0000016817 00000 n -0000304393 00000 n -0000479824 00000 n -0000016876 00000 n -0000016964 00000 n -0000307766 00000 n -0000479731 00000 n -0000017023 00000 n -0000017131 00000 n -0000310763 00000 n -0000479638 00000 n -0000017190 00000 n -0000017268 00000 n -0000310878 00000 n -0000479545 00000 n -0000017327 00000 n -0000017453 00000 n -0000310994 00000 n -0000479452 00000 n -0000017512 00000 n -0000017638 00000 n -0000314195 00000 n -0000479373 00000 n -0000017697 00000 n -0000017775 00000 n -0000321606 00000 n -0000479255 00000 n -0000017824 00000 n -0000017973 00000 n -0000321723 00000 n -0000479176 00000 n -0000018027 00000 n -0000018158 00000 n -0000321781 00000 n -0000479058 00000 n -0000018212 00000 n -0000018353 00000 n -0000321897 00000 n -0000478993 00000 n -0000018412 00000 n -0000018460 00000 n -0000019522 00000 n -0000019656 00000 n -0000162979 00000 n -0000163107 00000 n -0000018512 00000 n -0000163050 00000 n -0000476875 00000 n -0000477233 00000 n -0000477590 00000 n -0000131382 00000 n -0000163447 00000 n -0000163328 00000 n -0000163228 00000 n -0000164904 00000 n -0000165055 00000 n -0000165209 00000 n -0000165363 00000 n -0000165514 00000 n -0000165668 00000 n -0000165822 00000 n -0000165976 00000 n -0000166130 00000 n -0000166288 00000 n -0000166447 00000 n -0000166600 00000 n -0000166754 00000 n -0000166907 00000 n -0000167061 00000 n -0000167215 00000 n -0000167374 00000 n -0000167533 00000 n -0000167692 00000 n -0000167846 00000 n -0000168001 00000 n -0000168156 00000 n -0000168315 00000 n -0000168475 00000 n -0000168624 00000 n -0000168777 00000 n -0000168931 00000 n -0000170697 00000 n -0000169146 00000 n -0000164557 00000 n -0000163488 00000 n -0000169089 00000 n -0000170851 00000 n -0000171002 00000 n -0000171156 00000 n -0000171315 00000 n -0000171474 00000 n -0000171625 00000 n -0000171779 00000 n -0000171930 00000 n -0000172084 00000 n -0000172234 00000 n -0000172388 00000 n -0000172547 00000 n -0000172706 00000 n -0000172869 00000 n -0000173032 00000 n -0000173196 00000 n -0000173360 00000 n -0000173524 00000 n -0000173676 00000 n -0000173835 00000 n -0000173994 00000 n -0000174158 00000 n -0000174322 00000 n -0000174476 00000 n -0000174635 00000 n -0000174794 00000 n -0000174958 00000 n -0000175121 00000 n -0000175285 00000 n -0000175448 00000 n -0000175610 00000 n -0000175773 00000 n -0000175937 00000 n -0000177764 00000 n -0000176100 00000 n -0000170294 00000 n -0000169231 00000 n -0000177918 00000 n -0000178076 00000 n -0000178235 00000 n -0000178399 00000 n -0000178563 00000 n -0000178727 00000 n -0000178889 00000 n -0000179052 00000 n -0000179216 00000 n -0000179379 00000 n -0000179542 00000 n -0000179706 00000 n -0000179871 00000 n -0000180035 00000 n -0000180189 00000 n -0000180348 00000 n -0000180506 00000 n -0000180670 00000 n -0000180834 00000 n -0000180998 00000 n -0000181149 00000 n -0000181303 00000 n -0000181462 00000 n -0000181621 00000 n -0000181784 00000 n -0000181943 00000 n -0000182107 00000 n -0000182270 00000 n -0000182434 00000 n -0000182598 00000 n -0000182762 00000 n -0000182921 00000 n -0000183085 00000 n -0000183248 00000 n -0000183412 00000 n -0000184347 00000 n -0000183575 00000 n -0000177345 00000 n -0000176185 00000 n -0000184511 00000 n -0000184675 00000 n -0000184838 00000 n -0000184991 00000 n -0000185150 00000 n -0000185309 00000 n -0000185472 00000 n -0000184160 00000 n -0000183660 00000 n -0000187674 00000 n -0000187158 00000 n -0000185557 00000 n -0000187277 00000 n -0000187388 00000 n -0000187445 00000 n -0000187557 00000 n -0000477708 00000 n -0000188161 00000 n -0000187986 00000 n -0000187759 00000 n -0000188105 00000 n +0000014686 00000 n +0000256952 00000 n +0000464709 00000 n +0000014735 00000 n +0000014907 00000 n +0000280174 00000 n +0000464630 00000 n +0000014961 00000 n +0000015092 00000 n +0000280231 00000 n +0000464498 00000 n +0000015146 00000 n +0000015282 00000 n +0000280344 00000 n +0000464433 00000 n +0000015341 00000 n +0000015457 00000 n +0000280401 00000 n +0000464301 00000 n +0000015511 00000 n +0000015695 00000 n +0000280515 00000 n +0000464222 00000 n +0000015754 00000 n +0000015900 00000 n +0000280938 00000 n +0000464129 00000 n +0000015959 00000 n +0000016070 00000 n +0000281423 00000 n +0000464036 00000 n +0000016129 00000 n +0000016220 00000 n +0000284893 00000 n +0000463943 00000 n +0000016279 00000 n +0000016451 00000 n +0000285378 00000 n +0000463864 00000 n +0000016510 00000 n +0000016601 00000 n +0000296126 00000 n +0000463746 00000 n +0000016655 00000 n +0000016796 00000 n +0000296242 00000 n +0000463667 00000 n +0000016855 00000 n +0000016938 00000 n +0000299721 00000 n +0000463574 00000 n +0000016997 00000 n +0000017085 00000 n +0000302731 00000 n +0000463481 00000 n +0000017144 00000 n +0000017252 00000 n +0000302847 00000 n +0000463388 00000 n +0000017311 00000 n +0000017389 00000 n +0000302962 00000 n +0000463295 00000 n +0000017448 00000 n +0000017574 00000 n +0000306214 00000 n +0000463202 00000 n +0000017633 00000 n +0000017759 00000 n +0000306330 00000 n +0000463123 00000 n +0000017818 00000 n +0000017896 00000 n +0000018960 00000 n +0000019094 00000 n +0000162417 00000 n +0000162545 00000 n +0000017948 00000 n +0000162488 00000 n +0000461120 00000 n +0000461477 00000 n +0000461834 00000 n +0000130820 00000 n +0000162885 00000 n +0000162766 00000 n +0000162666 00000 n +0000164345 00000 n +0000164496 00000 n +0000164650 00000 n +0000164804 00000 n +0000164955 00000 n +0000165109 00000 n +0000165263 00000 n +0000165417 00000 n +0000165571 00000 n +0000165729 00000 n +0000165888 00000 n +0000166041 00000 n +0000166195 00000 n +0000166348 00000 n +0000166502 00000 n +0000166656 00000 n +0000166815 00000 n +0000166974 00000 n +0000167133 00000 n +0000167291 00000 n +0000167446 00000 n +0000167601 00000 n +0000167756 00000 n +0000167916 00000 n +0000168076 00000 n +0000168236 00000 n +0000168386 00000 n +0000170168 00000 n +0000168595 00000 n +0000163998 00000 n +0000162926 00000 n +0000168538 00000 n +0000170322 00000 n +0000170477 00000 n +0000170631 00000 n +0000170782 00000 n +0000170936 00000 n +0000171087 00000 n +0000171241 00000 n +0000171391 00000 n +0000171544 00000 n +0000171703 00000 n +0000171862 00000 n +0000172025 00000 n +0000172188 00000 n +0000172352 00000 n +0000172516 00000 n +0000172680 00000 n +0000172833 00000 n +0000172992 00000 n +0000173150 00000 n +0000173313 00000 n +0000173477 00000 n +0000173630 00000 n +0000173789 00000 n +0000173948 00000 n +0000174112 00000 n +0000174273 00000 n +0000174437 00000 n +0000174601 00000 n +0000174764 00000 n +0000174928 00000 n +0000175092 00000 n +0000175256 00000 n +0000175410 00000 n +0000175569 00000 n +0000177433 00000 n +0000175727 00000 n +0000169757 00000 n +0000168680 00000 n +0000177597 00000 n +0000177761 00000 n +0000177924 00000 n +0000178085 00000 n +0000178249 00000 n +0000178413 00000 n +0000178576 00000 n +0000178739 00000 n +0000178903 00000 n +0000179066 00000 n +0000179231 00000 n +0000179385 00000 n +0000179543 00000 n +0000179702 00000 n +0000179866 00000 n +0000180030 00000 n +0000180194 00000 n +0000180345 00000 n +0000180499 00000 n +0000180658 00000 n +0000180817 00000 n +0000180981 00000 n +0000181139 00000 n +0000181301 00000 n +0000181465 00000 n +0000181629 00000 n +0000181793 00000 n +0000181957 00000 n +0000182116 00000 n +0000182280 00000 n +0000182444 00000 n +0000182608 00000 n +0000182771 00000 n +0000182935 00000 n +0000183099 00000 n +0000183263 00000 n +0000177014 00000 n +0000175812 00000 n +0000183567 00000 n +0000183448 00000 n +0000183348 00000 n +0000185725 00000 n +0000185209 00000 n +0000183608 00000 n +0000185328 00000 n +0000185439 00000 n +0000185496 00000 n +0000185608 00000 n +0000461952 00000 n +0000186212 00000 n +0000186037 00000 n +0000185810 00000 n +0000186156 00000 n +0000188185 00000 n +0000188341 00000 n +0000188532 00000 n +0000188688 00000 n +0000188879 00000 n +0000189037 00000 n +0000189227 00000 n +0000189386 00000 n +0000190202 00000 n +0000187990 00000 n +0000186284 00000 n +0000189576 00000 n +0000189688 00000 n +0000189745 00000 n +0000189858 00000 n +0000189974 00000 n +0000460946 00000 n +0000190031 00000 n +0000190088 00000 n 0000190145 00000 n -0000190301 00000 n -0000190452 00000 n -0000190643 00000 n -0000190799 00000 n -0000190990 00000 n -0000191148 00000 n -0000191338 00000 n -0000191497 00000 n -0000192313 00000 n -0000189942 00000 n -0000188233 00000 n -0000191687 00000 n -0000191799 00000 n -0000191856 00000 n -0000191969 00000 n -0000192085 00000 n -0000476701 00000 n -0000192142 00000 n -0000192199 00000 n -0000192256 00000 n -0000262277 00000 n -0000314253 00000 n -0000314137 00000 n -0000195626 00000 n -0000310936 00000 n -0000207269 00000 n -0000304335 00000 n -0000207157 00000 n -0000310705 00000 n -0000194413 00000 n -0000194571 00000 n -0000194725 00000 n -0000194913 00000 n -0000195075 00000 n -0000195265 00000 n -0000195738 00000 n -0000194234 00000 n -0000192411 00000 n -0000195456 00000 n -0000195512 00000 n -0000195569 00000 n -0000201176 00000 n -0000198477 00000 n -0000201289 00000 n -0000304219 00000 n -0000198067 00000 n -0000198231 00000 n -0000198703 00000 n -0000197920 00000 n -0000195836 00000 n -0000198421 00000 n -0000198590 00000 n -0000238652 00000 n -0000200626 00000 n -0000200817 00000 n -0000201401 00000 n -0000200479 00000 n -0000198801 00000 n -0000201007 00000 n -0000201063 00000 n -0000203944 00000 n -0000204101 00000 n -0000204325 00000 n -0000204706 00000 n -0000204871 00000 n -0000205035 00000 n -0000205258 00000 n -0000205449 00000 n -0000205648 00000 n -0000205846 00000 n -0000206037 00000 n -0000206227 00000 n -0000206418 00000 n -0000206608 00000 n -0000206798 00000 n -0000207443 00000 n -0000203685 00000 n -0000201499 00000 n -0000206988 00000 n -0000207044 00000 n -0000204516 00000 n -0000207382 00000 n -0000477826 00000 n -0000303971 00000 n -0000250954 00000 n -0000291669 00000 n -0000293222 00000 n -0000253480 00000 n -0000251353 00000 n -0000310820 00000 n -0000297221 00000 n -0000209540 00000 n -0000209764 00000 n -0000209988 00000 n -0000210369 00000 n -0000210544 00000 n -0000211218 00000 n -0000209361 00000 n -0000207541 00000 n -0000210768 00000 n -0000210880 00000 n -0000210179 00000 n -0000210993 00000 n -0000211106 00000 n -0000297400 00000 n -0000300380 00000 n -0000224734 00000 n -0000300505 00000 n -0000213595 00000 n -0000213930 00000 n -0000213456 00000 n -0000211316 00000 n -0000213818 00000 n -0000213874 00000 n -0000300443 00000 n -0000216574 00000 n -0000216107 00000 n -0000214028 00000 n -0000216226 00000 n -0000216338 00000 n -0000216456 00000 n -0000218122 00000 n -0000217834 00000 n -0000216672 00000 n -0000217953 00000 n -0000218009 00000 n -0000218613 00000 n -0000218438 00000 n -0000218207 00000 n -0000218557 00000 n -0000221231 00000 n -0000221788 00000 n -0000221092 00000 n -0000218685 00000 n -0000221388 00000 n -0000221500 00000 n -0000221557 00000 n -0000476123 00000 n -0000221670 00000 n -0000477944 00000 n -0000227377 00000 n -0000224852 00000 n -0000224441 00000 n -0000221886 00000 n -0000224560 00000 n -0000224616 00000 n -0000476268 00000 n -0000226584 00000 n -0000226736 00000 n -0000226921 00000 n -0000227073 00000 n -0000227781 00000 n -0000226421 00000 n -0000224962 00000 n -0000227264 00000 n -0000227434 00000 n -0000227553 00000 n -0000227667 00000 n -0000321839 00000 n -0000229369 00000 n -0000229194 00000 n -0000227879 00000 n -0000229313 00000 n -0000230639 00000 n -0000230464 00000 n -0000229454 00000 n -0000230583 00000 n -0000231142 00000 n -0000230967 00000 n -0000230737 00000 n -0000231086 00000 n -0000231890 00000 n -0000232054 00000 n -0000232208 00000 n -0000232370 00000 n -0000232524 00000 n -0000232691 00000 n -0000232845 00000 n -0000233010 00000 n -0000233164 00000 n -0000233327 00000 n -0000233651 00000 n -0000231679 00000 n -0000231214 00000 n -0000233481 00000 n -0000478062 00000 n -0000241677 00000 n -0000242190 00000 n -0000256884 00000 n -0000234139 00000 n -0000233964 00000 n -0000233736 00000 n -0000234083 00000 n -0000234809 00000 n -0000234966 00000 n -0000235120 00000 n -0000235271 00000 n -0000235595 00000 n -0000234646 00000 n -0000234211 00000 n -0000235425 00000 n -0000236080 00000 n -0000235905 00000 n -0000235680 00000 n -0000236024 00000 n -0000237170 00000 n -0000237368 00000 n -0000237565 00000 n -0000237763 00000 n -0000237961 00000 n -0000238158 00000 n -0000238348 00000 n -0000239279 00000 n -0000236983 00000 n -0000236152 00000 n -0000238539 00000 n -0000238766 00000 n -0000476412 00000 n -0000238937 00000 n -0000239051 00000 n -0000239165 00000 n -0000241563 00000 n -0000241449 00000 n -0000289245 00000 n -0000240498 00000 n -0000240654 00000 n -0000240850 00000 n -0000241047 00000 n -0000241238 00000 n -0000242246 00000 n -0000240327 00000 n -0000239403 00000 n -0000241393 00000 n -0000241791 00000 n -0000241962 00000 n -0000242076 00000 n -0000243756 00000 n -0000243957 00000 n -0000244158 00000 n -0000244359 00000 n -0000244560 00000 n -0000244761 00000 n -0000244962 00000 n -0000245161 00000 n -0000246279 00000 n -0000243561 00000 n -0000242370 00000 n -0000245361 00000 n -0000245474 00000 n -0000245645 00000 n -0000245759 00000 n -0000245873 00000 n -0000245987 00000 n -0000246105 00000 n -0000246218 00000 n -0000478180 00000 n -0000250835 00000 n -0000250721 00000 n -0000247892 00000 n -0000248047 00000 n -0000248236 00000 n -0000248435 00000 n -0000248624 00000 n -0000248823 00000 n -0000249022 00000 n -0000249220 00000 n -0000249418 00000 n -0000249617 00000 n -0000249815 00000 n -0000250013 00000 n -0000250212 00000 n -0000250410 00000 n -0000252747 00000 n -0000251414 00000 n -0000247649 00000 n -0000246390 00000 n -0000250608 00000 n -0000251068 00000 n -0000251239 00000 n -0000253594 00000 n -0000253242 00000 n -0000254068 00000 n -0000253949 00000 n -0000253831 00000 n -0000253712 00000 n -0000254186 00000 n -0000253361 00000 n -0000252938 00000 n -0000255485 00000 n -0000254247 00000 n -0000252600 00000 n -0000251525 00000 n -0000253129 00000 n -0000476557 00000 n -0000255641 00000 n -0000255838 00000 n -0000256036 00000 n -0000256234 00000 n -0000256425 00000 n -0000256616 00000 n -0000257510 00000 n -0000255298 00000 n -0000254358 00000 n -0000256771 00000 n -0000256998 00000 n -0000257168 00000 n -0000257282 00000 n -0000257396 00000 n -0000258195 00000 n -0000262097 00000 n -0000263599 00000 n -0000266824 00000 n -0000262391 00000 n -0000258061 00000 n -0000257623 00000 n -0000262164 00000 n -0000259007 00000 n -0000259137 00000 n -0000259277 00000 n -0000259548 00000 n -0000259934 00000 n -0000260138 00000 n -0000260159 00000 n -0000262075 00000 n -0000266891 00000 n -0000267058 00000 n -0000267222 00000 n -0000267385 00000 n -0000267548 00000 n -0000267712 00000 n -0000267903 00000 n -0000268094 00000 n -0000268317 00000 n -0000268540 00000 n -0000268763 00000 n -0000268986 00000 n -0000269209 00000 n -0000269432 00000 n -0000269654 00000 n -0000269877 00000 n -0000270100 00000 n -0000270323 00000 n -0000270545 00000 n -0000272497 00000 n -0000272688 00000 n -0000272910 00000 n -0000273133 00000 n -0000270994 00000 n -0000263301 00000 n -0000262517 00000 n -0000270767 00000 n -0000270823 00000 n -0000270880 00000 n -0000270937 00000 n -0000264250 00000 n -0000264380 00000 n -0000264520 00000 n -0000264759 00000 n -0000265113 00000 n -0000265317 00000 n -0000265338 00000 n -0000266802 00000 n -0000289071 00000 n -0000292351 00000 n -0000292467 00000 n -0000292530 00000 n -0000292593 00000 n -0000292655 00000 n -0000292718 00000 n -0000292781 00000 n -0000292844 00000 n -0000292907 00000 n -0000292970 00000 n -0000293033 00000 n -0000293096 00000 n -0000293159 00000 n -0000273356 00000 n -0000273578 00000 n -0000273801 00000 n -0000273992 00000 n -0000274215 00000 n -0000274438 00000 n -0000274660 00000 n -0000274883 00000 n -0000275105 00000 n -0000275328 00000 n -0000275519 00000 n -0000275742 00000 n -0000275965 00000 n -0000276188 00000 n -0000276411 00000 n -0000276634 00000 n -0000276857 00000 n -0000277047 00000 n -0000277269 00000 n -0000277492 00000 n -0000277715 00000 n -0000277938 00000 n -0000278160 00000 n -0000278383 00000 n -0000278606 00000 n -0000278828 00000 n -0000279051 00000 n -0000279274 00000 n -0000279497 00000 n -0000279718 00000 n -0000279941 00000 n -0000280164 00000 n -0000280386 00000 n -0000280609 00000 n -0000280832 00000 n -0000281055 00000 n -0000283253 00000 n -0000283441 00000 n -0000283630 00000 n -0000281334 00000 n -0000272046 00000 n -0000271120 00000 n -0000281278 00000 n -0000477409 00000 n -0000478298 00000 n -0000289361 00000 n -0000291606 00000 n -0000291732 00000 n -0000291795 00000 n -0000296843 00000 n -0000296906 00000 n -0000296969 00000 n -0000297032 00000 n -0000297095 00000 n -0000297158 00000 n -0000291858 00000 n -0000291974 00000 n -0000292037 00000 n -0000292100 00000 n -0000292163 00000 n -0000292225 00000 n -0000292288 00000 n -0000297337 00000 n -0000297463 00000 n -0000297527 00000 n -0000297591 00000 n -0000300317 00000 n -0000300568 00000 n -0000300631 00000 n -0000300695 00000 n -0000300759 00000 n -0000303780 00000 n -0000303843 00000 n -0000303907 00000 n -0000304034 00000 n -0000304098 00000 n -0000283818 00000 n -0000284008 00000 n -0000284199 00000 n -0000284390 00000 n -0000284581 00000 n -0000284773 00000 n -0000284965 00000 n -0000285128 00000 n -0000285292 00000 n -0000285455 00000 n -0000285620 00000 n -0000285811 00000 n -0000286003 00000 n -0000286194 00000 n -0000286529 00000 n -0000286720 00000 n -0000286912 00000 n -0000287102 00000 n -0000287293 00000 n -0000287485 00000 n -0000287676 00000 n -0000288059 00000 n -0000288250 00000 n -0000288442 00000 n -0000289423 00000 n -0000282852 00000 n -0000281432 00000 n -0000288839 00000 n -0000288897 00000 n -0000286362 00000 n -0000287868 00000 n -0000288641 00000 n -0000477051 00000 n -0000307707 00000 n -0000291325 00000 n -0000293279 00000 n -0000291182 00000 n -0000289549 00000 n -0000291548 00000 n -0000295507 00000 n -0000295699 00000 n -0000295891 00000 n -0000296114 00000 n -0000296339 00000 n -0000296502 00000 n -0000297655 00000 n -0000295319 00000 n -0000293379 00000 n -0000296727 00000 n -0000300079 00000 n -0000300823 00000 n -0000299936 00000 n -0000297755 00000 n -0000300259 00000 n -0000303200 00000 n -0000303364 00000 n -0000303530 00000 n -0000304451 00000 n -0000303039 00000 n -0000300923 00000 n -0000303722 00000 n -0000306796 00000 n -0000306993 00000 n -0000307157 00000 n -0000307322 00000 n -0000307486 00000 n -0000307824 00000 n -0000306616 00000 n -0000304564 00000 n -0000307649 00000 n -0000478421 00000 n -0000309711 00000 n -0000309879 00000 n -0000310071 00000 n -0000310263 00000 n -0000310455 00000 n -0000313314 00000 n -0000313506 00000 n -0000311051 00000 n -0000309531 00000 n -0000307937 00000 n -0000310647 00000 n -0000313698 00000 n -0000313887 00000 n -0000314310 00000 n -0000313143 00000 n -0000311164 00000 n -0000314079 00000 n -0000315940 00000 n -0000321128 00000 n -0000321196 00000 n -0000321383 00000 n -0000321955 00000 n -0000315771 00000 n -0000314437 00000 n -0000321548 00000 n -0000321664 00000 n -0000317417 00000 n -0000317548 00000 n -0000317691 00000 n -0000317996 00000 n -0000318420 00000 n -0000318626 00000 n -0000318648 00000 n -0000321105 00000 n -0000323556 00000 n -0000323707 00000 n -0000323857 00000 n -0000324008 00000 n -0000324159 00000 n -0000324310 00000 n -0000324461 00000 n -0000324612 00000 n -0000324763 00000 n -0000324913 00000 n -0000325064 00000 n -0000325215 00000 n -0000325366 00000 n -0000325517 00000 n -0000325668 00000 n -0000325818 00000 n -0000325969 00000 n -0000326120 00000 n -0000326271 00000 n -0000326422 00000 n -0000326573 00000 n -0000326724 00000 n -0000326874 00000 n -0000327024 00000 n -0000327174 00000 n -0000327324 00000 n -0000327475 00000 n -0000327623 00000 n -0000327774 00000 n -0000327925 00000 n -0000328076 00000 n -0000328227 00000 n -0000328378 00000 n -0000328528 00000 n -0000328678 00000 n -0000328827 00000 n -0000328978 00000 n -0000329129 00000 n -0000329278 00000 n -0000329429 00000 n -0000329579 00000 n -0000329730 00000 n -0000329881 00000 n -0000330032 00000 n -0000330183 00000 n -0000330333 00000 n -0000330482 00000 n -0000330633 00000 n -0000330784 00000 n -0000330934 00000 n -0000331085 00000 n -0000331236 00000 n -0000331387 00000 n -0000331538 00000 n -0000331689 00000 n -0000331839 00000 n -0000331990 00000 n -0000332136 00000 n -0000332285 00000 n -0000332436 00000 n -0000334840 00000 n -0000332644 00000 n -0000322881 00000 n -0000322110 00000 n -0000332586 00000 n -0000334990 00000 n -0000335141 00000 n -0000335292 00000 n -0000335442 00000 n -0000335593 00000 n -0000335743 00000 n -0000335894 00000 n -0000336045 00000 n -0000336195 00000 n -0000336346 00000 n -0000336497 00000 n -0000336647 00000 n -0000336798 00000 n -0000336949 00000 n -0000337100 00000 n -0000337251 00000 n -0000337402 00000 n -0000337553 00000 n -0000337704 00000 n -0000337855 00000 n -0000338006 00000 n -0000338157 00000 n -0000338307 00000 n -0000338457 00000 n -0000338607 00000 n -0000338758 00000 n -0000338909 00000 n -0000339060 00000 n -0000339211 00000 n -0000339362 00000 n -0000339513 00000 n -0000339664 00000 n -0000339815 00000 n -0000339965 00000 n -0000340116 00000 n -0000340267 00000 n -0000340418 00000 n -0000340568 00000 n -0000340718 00000 n -0000340868 00000 n -0000341019 00000 n -0000341170 00000 n -0000341321 00000 n -0000341472 00000 n -0000341623 00000 n -0000341773 00000 n -0000341924 00000 n -0000342074 00000 n -0000342224 00000 n -0000342373 00000 n -0000342524 00000 n -0000342675 00000 n -0000342825 00000 n -0000342976 00000 n -0000343127 00000 n -0000343278 00000 n -0000343429 00000 n -0000343580 00000 n +0000256895 00000 n +0000306272 00000 n +0000193515 00000 n +0000303020 00000 n +0000205171 00000 n +0000299663 00000 n +0000205059 00000 n +0000302789 00000 n +0000192302 00000 n +0000192460 00000 n +0000192614 00000 n +0000192802 00000 n +0000192964 00000 n +0000193154 00000 n +0000193627 00000 n +0000192123 00000 n +0000190300 00000 n +0000193345 00000 n +0000193401 00000 n +0000193458 00000 n +0000199078 00000 n +0000196369 00000 n +0000199191 00000 n +0000296184 00000 n +0000195959 00000 n +0000196123 00000 n +0000196595 00000 n +0000195812 00000 n +0000193725 00000 n +0000196313 00000 n +0000196482 00000 n +0000231988 00000 n +0000198528 00000 n +0000198719 00000 n +0000199303 00000 n +0000198381 00000 n +0000196693 00000 n +0000198909 00000 n +0000198965 00000 n +0000201846 00000 n +0000202003 00000 n +0000202227 00000 n +0000202608 00000 n +0000202773 00000 n +0000202937 00000 n +0000203160 00000 n +0000203351 00000 n +0000203550 00000 n +0000203748 00000 n +0000203939 00000 n +0000204129 00000 n +0000204320 00000 n +0000204510 00000 n +0000204700 00000 n +0000205345 00000 n +0000201587 00000 n +0000199401 00000 n +0000204890 00000 n +0000204946 00000 n +0000202418 00000 n +0000205284 00000 n +0000462070 00000 n +0000295938 00000 n +0000244561 00000 n +0000280696 00000 n +0000284836 00000 n +0000247205 00000 n +0000244960 00000 n +0000302904 00000 n +0000285322 00000 n +0000207540 00000 n +0000207764 00000 n +0000207988 00000 n +0000208369 00000 n +0000208543 00000 n +0000208767 00000 n +0000208990 00000 n +0000209886 00000 n +0000207337 00000 n +0000205443 00000 n +0000209435 00000 n +0000209547 00000 n +0000208179 00000 n +0000209660 00000 n +0000209773 00000 n +0000209213 00000 n +0000289118 00000 n +0000289428 00000 n +0000224711 00000 n +0000289613 00000 n +0000289304 00000 n +0000289551 00000 n +0000212146 00000 n +0000212537 00000 n +0000212007 00000 n +0000209984 00000 n +0000212368 00000 n +0000212424 00000 n +0000289490 00000 n +0000215260 00000 n +0000214912 00000 n +0000212635 00000 n +0000215031 00000 n +0000215087 00000 n +0000215199 00000 n +0000217038 00000 n +0000216576 00000 n +0000215358 00000 n +0000216695 00000 n +0000216807 00000 n +0000216925 00000 n +0000218420 00000 n +0000218132 00000 n +0000217136 00000 n +0000218251 00000 n +0000218307 00000 n +0000220978 00000 n +0000221604 00000 n +0000220839 00000 n +0000218505 00000 n +0000221202 00000 n +0000221315 00000 n +0000221372 00000 n +0000460368 00000 n +0000221486 00000 n +0000462188 00000 n +0000289675 00000 n +0000224829 00000 n +0000224417 00000 n +0000221715 00000 n +0000224536 00000 n +0000224592 00000 n +0000460513 00000 n +0000225613 00000 n +0000225777 00000 n +0000225931 00000 n +0000226093 00000 n +0000226247 00000 n +0000226414 00000 n +0000226568 00000 n +0000226733 00000 n +0000226887 00000 n +0000227050 00000 n +0000227374 00000 n +0000225402 00000 n +0000224939 00000 n +0000227204 00000 n +0000235014 00000 n +0000235532 00000 n +0000248031 00000 n +0000227862 00000 n +0000227687 00000 n +0000227459 00000 n +0000227806 00000 n +0000228476 00000 n +0000228633 00000 n +0000228957 00000 n +0000228329 00000 n +0000227934 00000 n +0000228787 00000 n +0000229443 00000 n +0000229268 00000 n +0000229042 00000 n +0000229387 00000 n +0000230506 00000 n +0000230703 00000 n +0000230901 00000 n +0000231099 00000 n +0000231296 00000 n +0000231494 00000 n +0000231684 00000 n +0000232684 00000 n +0000230319 00000 n +0000229515 00000 n +0000231875 00000 n +0000232102 00000 n +0000460657 00000 n +0000232273 00000 n +0000232387 00000 n +0000232505 00000 n +0000232624 00000 n +0000462306 00000 n +0000234896 00000 n +0000280458 00000 n +0000233887 00000 n +0000234042 00000 n +0000234239 00000 n +0000234436 00000 n +0000234627 00000 n +0000237156 00000 n +0000237357 00000 n +0000237558 00000 n +0000237759 00000 n +0000235646 00000 n +0000233716 00000 n +0000232808 00000 n +0000234783 00000 n +0000235128 00000 n +0000235299 00000 n +0000235413 00000 n +0000237960 00000 n +0000238161 00000 n +0000238361 00000 n +0000238560 00000 n +0000239872 00000 n +0000236961 00000 n +0000235770 00000 n +0000238760 00000 n +0000238816 00000 n +0000238987 00000 n +0000239101 00000 n +0000239219 00000 n +0000239338 00000 n +0000239455 00000 n +0000239574 00000 n +0000239693 00000 n +0000239811 00000 n +0000241538 00000 n +0000241694 00000 n +0000241883 00000 n +0000242082 00000 n +0000242271 00000 n +0000242470 00000 n +0000242669 00000 n +0000242868 00000 n +0000243067 00000 n +0000243266 00000 n +0000243464 00000 n +0000243662 00000 n +0000243861 00000 n +0000244059 00000 n +0000244257 00000 n +0000245258 00000 n +0000241287 00000 n +0000239957 00000 n +0000244448 00000 n +0000244675 00000 n +0000244846 00000 n +0000245079 00000 n +0000460802 00000 n +0000245197 00000 n +0000247319 00000 n +0000247793 00000 n +0000247674 00000 n +0000247555 00000 n +0000247437 00000 n +0000247912 00000 n +0000246746 00000 n +0000246937 00000 n +0000249170 00000 n +0000248145 00000 n +0000246599 00000 n +0000245395 00000 n +0000247092 00000 n +0000249368 00000 n +0000249566 00000 n +0000249764 00000 n +0000249955 00000 n +0000250146 00000 n +0000250881 00000 n +0000248991 00000 n +0000248282 00000 n +0000250302 00000 n +0000250358 00000 n +0000250529 00000 n +0000250643 00000 n +0000250762 00000 n +0000251800 00000 n +0000255702 00000 n +0000255769 00000 n +0000255936 00000 n +0000256100 00000 n +0000256263 00000 n +0000256427 00000 n +0000256592 00000 n +0000258549 00000 n +0000257123 00000 n +0000251606 00000 n +0000250967 00000 n +0000256782 00000 n +0000257009 00000 n +0000257066 00000 n +0000462424 00000 n +0000252612 00000 n +0000252742 00000 n +0000252882 00000 n +0000253153 00000 n +0000253539 00000 n +0000253743 00000 n +0000253764 00000 n +0000255680 00000 n +0000280287 00000 n +0000258740 00000 n +0000258963 00000 n +0000259186 00000 n +0000259407 00000 n +0000259630 00000 n +0000259853 00000 n +0000260072 00000 n +0000260295 00000 n +0000260518 00000 n +0000260741 00000 n +0000260964 00000 n +0000261187 00000 n +0000261410 00000 n +0000261601 00000 n +0000261824 00000 n +0000262046 00000 n +0000262269 00000 n +0000262492 00000 n +0000262715 00000 n +0000262906 00000 n +0000263129 00000 n +0000263350 00000 n +0000263573 00000 n +0000263796 00000 n +0000264016 00000 n +0000264239 00000 n +0000264430 00000 n +0000264653 00000 n +0000264876 00000 n +0000265098 00000 n +0000265321 00000 n +0000265544 00000 n +0000265767 00000 n +0000265957 00000 n +0000266180 00000 n +0000266403 00000 n +0000266626 00000 n +0000266849 00000 n +0000267071 00000 n +0000269295 00000 n +0000269518 00000 n +0000269741 00000 n +0000267405 00000 n +0000258098 00000 n +0000257262 00000 n +0000267293 00000 n +0000267349 00000 n +0000281366 00000 n +0000281480 00000 n +0000284155 00000 n +0000284217 00000 n +0000284279 00000 n +0000284341 00000 n +0000284403 00000 n +0000284465 00000 n +0000284527 00000 n +0000284589 00000 n +0000284651 00000 n +0000284713 00000 n +0000284774 00000 n +0000280572 00000 n +0000280634 00000 n +0000280758 00000 n +0000280820 00000 n +0000284950 00000 n +0000285012 00000 n +0000285074 00000 n +0000285136 00000 n +0000285198 00000 n +0000285260 00000 n +0000280882 00000 n +0000280995 00000 n +0000281057 00000 n +0000281119 00000 n +0000281181 00000 n +0000281243 00000 n +0000281305 00000 n +0000285435 00000 n +0000289180 00000 n +0000289242 00000 n +0000289366 00000 n +0000269964 00000 n +0000270187 00000 n +0000270410 00000 n +0000270633 00000 n +0000270856 00000 n +0000271079 00000 n +0000271302 00000 n +0000271525 00000 n +0000271748 00000 n +0000271971 00000 n +0000272194 00000 n +0000272417 00000 n +0000272607 00000 n +0000272798 00000 n +0000272988 00000 n +0000273178 00000 n +0000273369 00000 n +0000273560 00000 n +0000273750 00000 n +0000273941 00000 n +0000274132 00000 n +0000274295 00000 n +0000274459 00000 n +0000274622 00000 n +0000274786 00000 n +0000274976 00000 n +0000275167 00000 n +0000275357 00000 n +0000275690 00000 n +0000275880 00000 n +0000276071 00000 n +0000276260 00000 n +0000276449 00000 n +0000276638 00000 n +0000276826 00000 n +0000277205 00000 n +0000277395 00000 n +0000277699 00000 n +0000268828 00000 n +0000267490 00000 n +0000277586 00000 n +0000461653 00000 n +0000277642 00000 n +0000275524 00000 n +0000277015 00000 n +0000292266 00000 n +0000292329 00000 n +0000292391 00000 n +0000295751 00000 n +0000295814 00000 n +0000295876 00000 n +0000296001 00000 n +0000296063 00000 n +0000299779 00000 n +0000279501 00000 n +0000279896 00000 n +0000281541 00000 n +0000279346 00000 n +0000277810 00000 n +0000280118 00000 n +0000279699 00000 n +0000461296 00000 n +0000283493 00000 n +0000283684 00000 n +0000283875 00000 n +0000288274 00000 n +0000288497 00000 n +0000285497 00000 n +0000283338 00000 n +0000281652 00000 n +0000284099 00000 n +0000288659 00000 n +0000288883 00000 n +0000289737 00000 n +0000288111 00000 n +0000285595 00000 n +0000289062 00000 n +0000292454 00000 n +0000292085 00000 n +0000289835 00000 n +0000292208 00000 n +0000462542 00000 n +0000295172 00000 n +0000295336 00000 n +0000295502 00000 n +0000296300 00000 n +0000295010 00000 n +0000292553 00000 n +0000295693 00000 n +0000298750 00000 n +0000298947 00000 n +0000299112 00000 n +0000299276 00000 n +0000299440 00000 n +0000299836 00000 n +0000298570 00000 n +0000296412 00000 n +0000299605 00000 n +0000301738 00000 n +0000301906 00000 n +0000302097 00000 n +0000302289 00000 n +0000302481 00000 n +0000303077 00000 n +0000301558 00000 n +0000299948 00000 n +0000302673 00000 n +0000305391 00000 n +0000305582 00000 n +0000305774 00000 n +0000305964 00000 n +0000306388 00000 n +0000305220 00000 n +0000303189 00000 n +0000306156 00000 n +0000307052 00000 n +0000306871 00000 n +0000306513 00000 n +0000306994 00000 n +0000308597 00000 n +0000308748 00000 n +0000308898 00000 n +0000309049 00000 n +0000309200 00000 n +0000309351 00000 n +0000309502 00000 n +0000309653 00000 n +0000309804 00000 n +0000309954 00000 n +0000310105 00000 n +0000310256 00000 n +0000310407 00000 n +0000310558 00000 n +0000310709 00000 n +0000310859 00000 n +0000311010 00000 n +0000311161 00000 n +0000311312 00000 n +0000311463 00000 n +0000311614 00000 n +0000311765 00000 n +0000311915 00000 n +0000312065 00000 n +0000312215 00000 n +0000312365 00000 n +0000312516 00000 n +0000312664 00000 n +0000312815 00000 n +0000312966 00000 n +0000313117 00000 n +0000313268 00000 n +0000313419 00000 n +0000313569 00000 n +0000313719 00000 n +0000313868 00000 n +0000314019 00000 n +0000314170 00000 n +0000314319 00000 n +0000314470 00000 n +0000314620 00000 n +0000314771 00000 n +0000314922 00000 n +0000315073 00000 n +0000315224 00000 n +0000315374 00000 n +0000315523 00000 n +0000315674 00000 n +0000315825 00000 n +0000315975 00000 n +0000316126 00000 n +0000316277 00000 n +0000316428 00000 n +0000316579 00000 n +0000316730 00000 n +0000316880 00000 n +0000317031 00000 n +0000317177 00000 n +0000317326 00000 n +0000317477 00000 n +0000319882 00000 n +0000317685 00000 n +0000307922 00000 n +0000307138 00000 n +0000317627 00000 n +0000462667 00000 n +0000320032 00000 n +0000320183 00000 n +0000320334 00000 n +0000320484 00000 n +0000320634 00000 n +0000320784 00000 n +0000320935 00000 n +0000321085 00000 n +0000321235 00000 n +0000321386 00000 n +0000321537 00000 n +0000321688 00000 n +0000321838 00000 n +0000321988 00000 n +0000322138 00000 n +0000322288 00000 n +0000322439 00000 n +0000322590 00000 n +0000322741 00000 n +0000322892 00000 n +0000323043 00000 n +0000323194 00000 n +0000323345 00000 n +0000323496 00000 n +0000323647 00000 n +0000323798 00000 n +0000323949 00000 n +0000324100 00000 n +0000324250 00000 n +0000324400 00000 n +0000324550 00000 n +0000324701 00000 n +0000324851 00000 n +0000325002 00000 n +0000325152 00000 n +0000325302 00000 n +0000325453 00000 n +0000325604 00000 n +0000325754 00000 n +0000325903 00000 n +0000326052 00000 n +0000326202 00000 n +0000326353 00000 n +0000326504 00000 n +0000326654 00000 n +0000326805 00000 n +0000326955 00000 n +0000327106 00000 n +0000327256 00000 n +0000327407 00000 n +0000327557 00000 n +0000327706 00000 n +0000327857 00000 n +0000328007 00000 n +0000328157 00000 n +0000328308 00000 n +0000328459 00000 n +0000328610 00000 n +0000328761 00000 n +0000328912 00000 n +0000329063 00000 n +0000329214 00000 n +0000329364 00000 n +0000329515 00000 n +0000329665 00000 n +0000329815 00000 n +0000329966 00000 n +0000330116 00000 n +0000330266 00000 n +0000330417 00000 n +0000330568 00000 n +0000330719 00000 n +0000330869 00000 n +0000331020 00000 n +0000331171 00000 n +0000331320 00000 n +0000331469 00000 n +0000331619 00000 n +0000331770 00000 n +0000331920 00000 n +0000332070 00000 n +0000332220 00000 n +0000334003 00000 n +0000332428 00000 n +0000319000 00000 n +0000317771 00000 n +0000332370 00000 n +0000334154 00000 n +0000334305 00000 n +0000334456 00000 n +0000334606 00000 n +0000334756 00000 n +0000334906 00000 n +0000335057 00000 n +0000335208 00000 n +0000335359 00000 n +0000335510 00000 n +0000335661 00000 n +0000335812 00000 n +0000335963 00000 n +0000336114 00000 n +0000336265 00000 n +0000336416 00000 n +0000336567 00000 n +0000336717 00000 n +0000336867 00000 n +0000337018 00000 n +0000337169 00000 n +0000337320 00000 n +0000337469 00000 n +0000337619 00000 n +0000337769 00000 n +0000337919 00000 n +0000338068 00000 n +0000338218 00000 n +0000338368 00000 n +0000338519 00000 n +0000338670 00000 n +0000338821 00000 n +0000338972 00000 n +0000339123 00000 n +0000339274 00000 n +0000339422 00000 n +0000339573 00000 n +0000339724 00000 n +0000339875 00000 n +0000340025 00000 n +0000340175 00000 n +0000340326 00000 n +0000340477 00000 n +0000340628 00000 n +0000340837 00000 n +0000333463 00000 n +0000332514 00000 n +0000340779 00000 n +0000459888 00000 n +0000340923 00000 n +0000341251 00000 n +0000341575 00000 n +0000341601 00000 n +0000342202 00000 n +0000342286 00000 n +0000342460 00000 n +0000342852 00000 n 0000343731 00000 n -0000343882 00000 n -0000344032 00000 n -0000344183 00000 n -0000344334 00000 n -0000344484 00000 n -0000344635 00000 n -0000344784 00000 n -0000344935 00000 n -0000345085 00000 n -0000345236 00000 n -0000345387 00000 n -0000345537 00000 n -0000345688 00000 n -0000345839 00000 n -0000345989 00000 n -0000346138 00000 n -0000346289 00000 n -0000346439 00000 n -0000346590 00000 n -0000346740 00000 n -0000346890 00000 n -0000347040 00000 n -0000347191 00000 n -0000348995 00000 n -0000347399 00000 n -0000333958 00000 n -0000332730 00000 n -0000347341 00000 n -0000349146 00000 n -0000349297 00000 n -0000349448 00000 n -0000349599 00000 n -0000349750 00000 n -0000349901 00000 n -0000350052 00000 n -0000350202 00000 n -0000350352 00000 n -0000350503 00000 n -0000350653 00000 n -0000350804 00000 n -0000350955 00000 n -0000351106 00000 n -0000351257 00000 n -0000351408 00000 n -0000351558 00000 n -0000351708 00000 n -0000351859 00000 n -0000352010 00000 n -0000352160 00000 n -0000352311 00000 n -0000352462 00000 n -0000352613 00000 n -0000352763 00000 n -0000352913 00000 n -0000353063 00000 n -0000353214 00000 n -0000353365 00000 n -0000353516 00000 n -0000353667 00000 n -0000353818 00000 n -0000353969 00000 n -0000354120 00000 n -0000354271 00000 n -0000354422 00000 n -0000354572 00000 n -0000354723 00000 n -0000354873 00000 n -0000355024 00000 n -0000355173 00000 n -0000355322 00000 n -0000355472 00000 n -0000355622 00000 n -0000355771 00000 n -0000355980 00000 n -0000348446 00000 n -0000347485 00000 n -0000355922 00000 n -0000478546 00000 n -0000475636 00000 n -0000356066 00000 n -0000356394 00000 n -0000356718 00000 n -0000356744 00000 n -0000357345 00000 n -0000357429 00000 n -0000357603 00000 n -0000357995 00000 n -0000358874 00000 n -0000359449 00000 n -0000369659 00000 n -0000369929 00000 n -0000379312 00000 n -0000379582 00000 n -0000386776 00000 n -0000387015 00000 n -0000394044 00000 n -0000394276 00000 n -0000413394 00000 n -0000413984 00000 n -0000430608 00000 n -0000431089 00000 n -0000444064 00000 n -0000444431 00000 n -0000464691 00000 n -0000465270 00000 n -0000475338 00000 n -0000478626 00000 n -0000478746 00000 n -0000478844 00000 n -0000478917 00000 n -0000488807 00000 n -0000489064 00000 n -0000489393 00000 n -0000489588 00000 n -0000489856 00000 n -0000490102 00000 n +0000344306 00000 n +0000354516 00000 n +0000354786 00000 n +0000364169 00000 n +0000364439 00000 n +0000371633 00000 n +0000371872 00000 n +0000378901 00000 n +0000379133 00000 n +0000397867 00000 n +0000398437 00000 n +0000415061 00000 n +0000415542 00000 n +0000428341 00000 n +0000428683 00000 n +0000448943 00000 n +0000449522 00000 n +0000459590 00000 n +0000462765 00000 n +0000462885 00000 n +0000462974 00000 n +0000463047 00000 n +0000472335 00000 n +0000472689 00000 n +0000472852 00000 n +0000473095 00000 n +0000473332 00000 n +0000473600 00000 n +0000473938 00000 n +0000474536 00000 n +0000475200 00000 n +0000475897 00000 n +0000476660 00000 n +0000477423 00000 n +0000478087 00000 n +0000478850 00000 n +0000479613 00000 n +0000480277 00000 n +0000480974 00000 n +0000481303 00000 n +0000481500 00000 n +0000481669 00000 n +0000481838 00000 n +0000482009 00000 n +0000482179 00000 n +0000482356 00000 n +0000482526 00000 n +0000482706 00000 n +0000482901 00000 n +0000483101 00000 n +0000483298 00000 n +0000483499 00000 n +0000483702 00000 n +0000484135 00000 n +0000484628 00000 n +0000485207 00000 n +0000485740 00000 n +0000486303 00000 n +0000486749 00000 n +0000486989 00000 n +0000487230 00000 n +0000487473 00000 n +0000487726 00000 n +0000488009 00000 n +0000488292 00000 n +0000488577 00000 n +0000488860 00000 n +0000489143 00000 n +0000489426 00000 n +0000489677 00000 n +0000489836 00000 n +0000490067 00000 n +0000490265 00000 n 0000490379 00000 n -0000490811 00000 n -0000491574 00000 n -0000492238 00000 n -0000492968 00000 n -0000493731 00000 n -0000494429 00000 n -0000495196 00000 n -0000495964 00000 n -0000496664 00000 n -0000497328 00000 n -0000497728 00000 n -0000497907 00000 n -0000498131 00000 n -0000498302 00000 n -0000498472 00000 n -0000498643 00000 n -0000498814 00000 n -0000498991 00000 n -0000499166 00000 n -0000499340 00000 n -0000499538 00000 n -0000499733 00000 n -0000499934 00000 n -0000500131 00000 n -0000500334 00000 n -0000500537 00000 n -0000501024 00000 n -0000501485 00000 n -0000502064 00000 n -0000502559 00000 n -0000503122 00000 n -0000503493 00000 n -0000503731 00000 n -0000503974 00000 n -0000504217 00000 n -0000504460 00000 n -0000504743 00000 n -0000505026 00000 n -0000505312 00000 n -0000505595 00000 n -0000505878 00000 n -0000506161 00000 n -0000506444 00000 n -0000506567 00000 n -0000506704 00000 n -0000506901 00000 n -0000507089 00000 n -0000507209 00000 n -0000507329 00000 n -0000507498 00000 n -0000507672 00000 n -0000507816 00000 n -0000507924 00000 n -0000508098 00000 n -0000508250 00000 n -0000508353 00000 n -0000508393 00000 n -0000508574 00000 n +0000490498 00000 n +0000490628 00000 n +0000490768 00000 n +0000490903 00000 n +0000491031 00000 n +0000491135 00000 n +0000491231 00000 n +0000491271 00000 n +0000491452 00000 n trailer -<< /Size 1417 -/Root 1415 0 R -/Info 1416 0 R -/ID [<6568D5E6D3D414DEC0C8E7A6930872CF> <6568D5E6D3D414DEC0C8E7A6930872CF>] >> +<< /Size 1336 +/Root 1334 0 R +/Info 1335 0 R +/ID [<DF0BD4413253B81F550BF5F2F8C5F1D3> <DF0BD4413253B81F550BF5F2F8C5F1D3>] >> startxref -508901 +491779 %%EOF diff --git a/libAACdec/include/aacdecoder_lib.h b/libAACdec/include/aacdecoder_lib.h index 79b4ba1..60efe8d 100644 --- a/libAACdec/include/aacdecoder_lib.h +++ b/libAACdec/include/aacdecoder_lib.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -504,7 +504,8 @@ typedef struct INT aacSamplesPerFrame; /*!< Samples per frame for the AAC core (from ASC). \n 1024 or 960 for AAC-LC \n 512 or 480 for AAC-LD and AAC-ELD */ - + INT aacNumChannels; /*!< The number of audio channels after AAC core processing (before PS or MPS processing). + CAUTION: This are not the final number of output channels! */ AUDIO_OBJECT_TYPE extAot; /*!< Extension Audio Object Type (from ASC) */ INT extSamplingRate; /*!< Extension sampling rate in Hz (from ASC) */ diff --git a/libAACdec/src/aac_ram.cpp b/libAACdec/src/aac_ram.cpp index 75c9a94..a38f57c 100644 --- a/libAACdec/src/aac_ram.cpp +++ b/libAACdec/src/aac_ram.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/aac_ram.h b/libAACdec/src/aac_ram.h index 2130ca1..4527e27 100644 --- a/libAACdec/src/aac_ram.h +++ b/libAACdec/src/aac_ram.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/aac_rom.cpp b/libAACdec/src/aac_rom.cpp index dd51919..fa04c42 100644 --- a/libAACdec/src/aac_rom.cpp +++ b/libAACdec/src/aac_rom.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/aac_rom.h b/libAACdec/src/aac_rom.h index beec2ee..536d184 100644 --- a/libAACdec/src/aac_rom.h +++ b/libAACdec/src/aac_rom.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/aacdec_drc.cpp b/libAACdec/src/aacdec_drc.cpp index ebc6975..2666454 100644 --- a/libAACdec/src/aacdec_drc.cpp +++ b/libAACdec/src/aacdec_drc.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -135,10 +135,13 @@ void aacDecoder_drcInit ( /* init params */ pParams = &self->params; pParams->bsDelayEnable = 0; - pParams->cut = FL2FXCONST_DBL(0.0f); - pParams->boost = FL2FXCONST_DBL(0.0f); + pParams->cut = FL2FXCONST_DBL(0.0f); + pParams->usrCut = FL2FXCONST_DBL(0.0f); + pParams->boost = FL2FXCONST_DBL(0.0f); + pParams->usrBoost = FL2FXCONST_DBL(0.0f); pParams->targetRefLevel = AACDEC_DRC_DEFAULT_REF_LEVEL; pParams->expiryFrame = AACDEC_DRC_DFLT_EXPIRY_FRAMES; + pParams->applyHeavyCompression = 0; /* initial program ref level = target ref level */ self->progRefLevel = pParams->targetRefLevel; @@ -193,7 +196,9 @@ AAC_DECODER_ERROR aacDecoder_drcSetParam ( if (self == NULL) { return AAC_DEC_INVALID_HANDLE; } - self->params.cut = (FIXP_DBL)((INT)(DRC_PARAM_QUANT_STEP>>DRC_PARAM_SCALE) * (INT)value); + self->params.usrCut = (FIXP_DBL)((INT)(DRC_PARAM_QUANT_STEP>>DRC_PARAM_SCALE) * (INT)value); + if (self->params.applyHeavyCompression == 0) + self->params.cut = self->params.usrCut; break; case DRC_BOOST_SCALE: /* set boost factor */ @@ -204,7 +209,9 @@ AAC_DECODER_ERROR aacDecoder_drcSetParam ( if (self == NULL) { return AAC_DEC_INVALID_HANDLE; } - self->params.boost = (FIXP_DBL)((INT)(DRC_PARAM_QUANT_STEP>>DRC_PARAM_SCALE) * (INT)value); + self->params.usrBoost = (FIXP_DBL)((INT)(DRC_PARAM_QUANT_STEP>>DRC_PARAM_SCALE) * (INT)value); + if (self->params.applyHeavyCompression == 0) + self->params.boost = self->params.usrBoost; break; case TARGET_REF_LEVEL: if ( value > MAX_REFERENCE_LEVEL @@ -220,9 +227,11 @@ AAC_DECODER_ERROR aacDecoder_drcSetParam ( else { /* ref_level must be between 0 and MAX_REFERENCE_LEVEL, inclusive */ self->digitalNorm = 1; - self->params.targetRefLevel = value; - self->progRefLevel = (SCHAR)value; /* Set the program reference level equal to the target - level according to 4.5.2.7.3 of ISO/IEC 14496-3. */ + if (self->params.targetRefLevel != (SCHAR)value) { + self->params.targetRefLevel = (SCHAR)value; + self->progRefLevel = (SCHAR)value; /* Always set the program reference level equal to the + target level according to 4.5.2.7.3 of ISO/IEC 14496-3. */ + } } break; case APPLY_HEAVY_COMPRESSION: @@ -232,7 +241,19 @@ AAC_DECODER_ERROR aacDecoder_drcSetParam ( if (self == NULL) { return AAC_DEC_INVALID_HANDLE; } - self->params.applyHeavyCompression = (UCHAR)value; + if (self->params.applyHeavyCompression != (UCHAR)value) { + if (value == 1) { + /* Disable scaling of DRC values by setting the max values */ + self->params.boost = FL2FXCONST_DBL(1.0f/(float)(1<<DRC_PARAM_SCALE)); + self->params.cut = FL2FXCONST_DBL(1.0f/(float)(1<<DRC_PARAM_SCALE)); + } else { + /* Restore the user params */ + self->params.boost = self->params.usrBoost; + self->params.cut = self->params.usrCut; + } + /* Store new parameter value */ + self->params.applyHeavyCompression = (UCHAR)value; + } break; case DRC_BS_DELAY: if (value < 0 || value > 1) { @@ -473,7 +494,7 @@ static int aacDecoder_drcParse ( } } else { - pDrcBs->channelData.bandTop[0] = 255; + pDrcBs->channelData.bandTop[0] = (1024 >> 2) - 1; /* ... comprising the whole spectrum. */; } pDrcBs->channelData.numBands = numBands; @@ -627,10 +648,17 @@ static int aacDecoder_drcExtractAndMap ( { CDrcPayload threadBs[MAX_DRC_THREADS]; CDrcPayload *validThreadBs[MAX_DRC_THREADS]; + CDrcParams *pParams; UINT backupBsPosition; int i, thread, validThreads = 0; int numExcludedChns[MAX_DRC_THREADS]; + FDK_ASSERT(self != NULL); + FDK_ASSERT(hBs != NULL); + FDK_ASSERT(pAacDecoderStaticChannelInfo != NULL); + + pParams = &self->params; + self->numThreads = 0; backupBsPosition = FDKgetValidBits(hBs); @@ -752,6 +780,7 @@ static int aacDecoder_drcExtractAndMap ( */ if (pThreadBs->progRefLevel >= 0) { self->progRefLevel = pThreadBs->progRefLevel; + self->prlExpiryCount = 0; /* Got a new value -> Reset counter */ } /* SCE, CPE and LFE */ @@ -769,6 +798,14 @@ static int aacDecoder_drcExtractAndMap ( /* CCEs not supported by now */ } + /* Increment and check expiry counter for the program reference level: */ + if ( (pParams->expiryFrame > 0) + && (self->prlExpiryCount++ > pParams->expiryFrame) ) + { /* The program reference level is too old, so set it back to the target level. */ + self->progRefLevel = pParams->targetRefLevel; + self->prlExpiryCount = 0; + } + return 0; } diff --git a/libAACdec/src/aacdec_drc.h b/libAACdec/src/aacdec_drc.h index 9c90e32..2ebae2c 100644 --- a/libAACdec/src/aacdec_drc.h +++ b/libAACdec/src/aacdec_drc.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -143,6 +143,16 @@ int aacDecoder_drcProlog ( UCHAR channelMapping[], int numChannels ); +/** + * \brief Apply DRC. If SBR is present, DRC data is handed over to the SBR decoder. + * \param self AAC decoder instance + * \param pSbrDec pointer to SBR decoder instance + * \param pAacDecoderChannelInfo AAC decoder channel instance to be processed + * \param pDrcDat DRC channel data + * \param ch channel index + * \param aacFrameSize AAC frame size + * \param bSbrPresent flag indicating that SBR is present, in which case DRC is handed over to the SBR instance pSbrDec + */ void aacDecoder_drcApply ( HANDLE_AAC_DRC self, void *pSbrDec, diff --git a/libAACdec/src/aacdec_drc_types.h b/libAACdec/src/aacdec_drc_types.h index 3871b4b..1b5cd76 100644 --- a/libAACdec/src/aacdec_drc_types.h +++ b/libAACdec/src/aacdec_drc_types.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -132,8 +132,10 @@ typedef struct typedef struct { - FIXP_DBL cut; - FIXP_DBL boost; + FIXP_DBL cut; /* The attenuation scale factor currently used. */ + FIXP_DBL usrCut; /* The latest attenuation scale factor set by user. */ + FIXP_DBL boost; /* The boost scale factor currently used. */ + FIXP_DBL usrBoost; /* The latest boost scale factor set by user. */ UINT expiryFrame; SCHAR targetRefLevel; @@ -154,6 +156,8 @@ typedef struct USHORT numThreads; /* The number of DRC data threads extracted from the found payload elements */ SCHAR progRefLevel; /* Program reference level for all channels */ + UINT prlExpiryCount; /* Counter that can be used to monitor the life time of the program reference level. */ + UCHAR dvbAncDataAvailable; /* Flag that indicates whether DVB ancillary data is present or not */ UINT dvbAncDataPosition; /* Used to store the DVB ancillary data payload position in the bitstream (only one per frame) */ UINT drcPayloadPosition[MAX_DRC_THREADS]; /* Used to store the DRC payload positions in the bitstream */ diff --git a/libAACdec/src/aacdec_hcr.cpp b/libAACdec/src/aacdec_hcr.cpp index 5b86833..e314e27 100644 --- a/libAACdec/src/aacdec_hcr.cpp +++ b/libAACdec/src/aacdec_hcr.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/aacdec_hcr.h b/libAACdec/src/aacdec_hcr.h index f8f3abf..6fc527b 100644 --- a/libAACdec/src/aacdec_hcr.h +++ b/libAACdec/src/aacdec_hcr.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/aacdec_hcr_bit.cpp b/libAACdec/src/aacdec_hcr_bit.cpp index ab82ca3..df2685b 100644 --- a/libAACdec/src/aacdec_hcr_bit.cpp +++ b/libAACdec/src/aacdec_hcr_bit.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/aacdec_hcr_bit.h b/libAACdec/src/aacdec_hcr_bit.h index c191b1d..8994ff1 100644 --- a/libAACdec/src/aacdec_hcr_bit.h +++ b/libAACdec/src/aacdec_hcr_bit.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/aacdec_hcr_types.h b/libAACdec/src/aacdec_hcr_types.h index 54b3dbd..323ec4e 100644 --- a/libAACdec/src/aacdec_hcr_types.h +++ b/libAACdec/src/aacdec_hcr_types.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/aacdec_hcrs.cpp b/libAACdec/src/aacdec_hcrs.cpp index 74ecb65..c0b2173 100644 --- a/libAACdec/src/aacdec_hcrs.cpp +++ b/libAACdec/src/aacdec_hcrs.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/aacdec_hcrs.h b/libAACdec/src/aacdec_hcrs.h index 7a004c4..678ba26 100644 --- a/libAACdec/src/aacdec_hcrs.h +++ b/libAACdec/src/aacdec_hcrs.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/aacdec_pns.cpp b/libAACdec/src/aacdec_pns.cpp index a3f7a78..541ef07 100644 --- a/libAACdec/src/aacdec_pns.cpp +++ b/libAACdec/src/aacdec_pns.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/aacdec_pns.h b/libAACdec/src/aacdec_pns.h index c07656c..fc9bdcb 100644 --- a/libAACdec/src/aacdec_pns.h +++ b/libAACdec/src/aacdec_pns.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/aacdec_tns.cpp b/libAACdec/src/aacdec_tns.cpp index 702196f..352f04a 100644 --- a/libAACdec/src/aacdec_tns.cpp +++ b/libAACdec/src/aacdec_tns.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/aacdec_tns.h b/libAACdec/src/aacdec_tns.h index 499f763..f029d96 100644 --- a/libAACdec/src/aacdec_tns.h +++ b/libAACdec/src/aacdec_tns.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/aacdecoder.cpp b/libAACdec/src/aacdecoder.cpp index 8d3c18d..3a2a561 100644 --- a/libAACdec/src/aacdecoder.cpp +++ b/libAACdec/src/aacdecoder.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -183,7 +183,7 @@ void CAacDecoder_SyncQmfMode(HANDLE_AACDECODER self) if ( self->qmfModeCurr == NOT_DEFINED ) { if ( (IS_LOWDELAY(self->streamInfo.aot) && (self->flags & AC_MPS_PRESENT)) - || ( (self->ascChannels == 1) + || ( (self->streamInfo.aacNumChannels == 1) && ( (CAN_DO_PS(self->streamInfo.aot) && !(self->flags & AC_MPS_PRESENT)) || ( IS_USAC(self->streamInfo.aot) && (self->flags & AC_MPS_PRESENT)) ) ) ) { @@ -196,7 +196,7 @@ void CAacDecoder_SyncQmfMode(HANDLE_AACDECODER self) /* Set SBR to current QMF mode. Error does not matter. */ sbrDecoder_SetParam(self->hSbrDecoder, SBR_QMF_MODE, (self->qmfModeCurr == MODE_LP)); - self->psPossible = ((CAN_DO_PS(self->streamInfo.aot) && self->aacChannels == 1 && ! (self->flags & AC_MPS_PRESENT))) && self->qmfModeCurr == MODE_HQ ; + self->psPossible = ((CAN_DO_PS(self->streamInfo.aot) && self->streamInfo.aacNumChannels == 1 && ! (self->flags & AC_MPS_PRESENT))) && self->qmfModeCurr == MODE_HQ ; FDK_ASSERT( ! ( (self->flags & AC_MPS_PRESENT) && self->psPossible ) ); } @@ -373,7 +373,7 @@ static AAC_DECODER_ERROR CDataStreamElement_Read ( { INT readBits, dataBits = count<<3; - + /* Move to the beginning of the data junk */ FDKpushBack(bs, dataStart-FDKgetValidBits(bs)); @@ -394,23 +394,26 @@ static AAC_DECODER_ERROR CDataStreamElement_Read ( \brief Read Program Config Element \bs Bitstream Handle - \count Pointer to program config element. + \pTp Transport decoder handle for CRC handling + \pce Pointer to PCE buffer + \channelConfig Current channel configuration + \alignAnchor Anchor for byte alignment - \return Error code + \return PCE status (-1: fail, 0: no new PCE, 1: PCE updated, 2: PCE updated need re-config). */ -static AAC_DECODER_ERROR CProgramConfigElement_Read ( +static int CProgramConfigElement_Read ( HANDLE_FDK_BITSTREAM bs, HANDLE_TRANSPORTDEC pTp, CProgramConfig *pce, - UINT channelConfig, - UINT alignAnchor ) + const UINT channelConfig, + const UINT alignAnchor ) { - AAC_DECODER_ERROR error = AAC_DEC_OK; + int pceStatus = 0; int crcReg; /* read PCE to temporal buffer first */ C_ALLOC_SCRATCH_START(tmpPce, CProgramConfig, 1); - + CProgramConfig_Init(tmpPce); CProgramConfig_Reset(tmpPce); @@ -421,22 +424,43 @@ static AAC_DECODER_ERROR CProgramConfigElement_Read ( transportDec_CrcEndReg(pTp, crcReg); if ( CProgramConfig_IsValid(tmpPce) - && ( (channelConfig == 6 && (tmpPce->NumChannels == 6)) - || (channelConfig == 5 && (tmpPce->NumChannels == 5)) - || (channelConfig == 0 && (tmpPce->NumChannels == pce->NumChannels)) ) - && (tmpPce->NumFrontChannelElements == 2) - && (tmpPce->NumSideChannelElements == 0) - && (tmpPce->NumBackChannelElements == 1) && (tmpPce->Profile == 1) ) - { /* Copy the complete PCE including metadata. */ - FDKmemcpy(pce, tmpPce, sizeof(CProgramConfig)); + { + if ( !pce->isValid && (channelConfig > 0) ) { + /* Create a standard channel config PCE to compare with */ + CProgramConfig_GetDefault( pce, channelConfig ); + } + + if (pce->isValid) { + /* Compare the new and the old PCE (tags ignored) */ + switch ( CProgramConfig_Compare( pce, tmpPce ) ) + { + case 1: /* Channel configuration not changed. Just new metadata. */ + FDKmemcpy(pce, tmpPce, sizeof(CProgramConfig)); /* Store the complete PCE */ + pceStatus = 1; /* New PCE but no change of config */ + break; + case 2: /* The number of channels are identical but not the config */ + if (channelConfig == 0) { + FDKmemcpy(pce, tmpPce, sizeof(CProgramConfig)); /* Store the complete PCE */ + pceStatus = 2; /* Decoder needs re-configuration */ + } + break; + case -1: /* The channel configuration is completely different */ + pceStatus = -1; /* Not supported! */ + break; + case 0: /* Nothing to do because PCE matches the old one exactly. */ + default: + /* pceStatus = 0; */ + break; + } + } } C_ALLOC_SCRATCH_END(tmpPce, CProgramConfig, 1); - return error; + return pceStatus; } -#endif +#endif /* TP_PCE_ENABLE */ /*! \brief Parse Extension Payload @@ -591,7 +615,7 @@ AAC_DECODER_ERROR CAacDecoder_ExtPayloadParse (HANDLE_AACDECODER self, { /* ... created to circumvent the missing length in ER-Syntax. */ int bitCnt, len = FDKreadBits(hBs, 4); *count -= 4; - + if (len == 15) { int add_len = FDKreadBits(hBs, 8); *count -= 8; @@ -609,9 +633,7 @@ AAC_DECODER_ERROR CAacDecoder_ExtPayloadParse (HANDLE_AACDECODER self, /* Check NOTE 2: The extension_payload() included here must not have extension_type == EXT_DATA_LENGTH. */ error = AAC_DEC_PARSE_ERROR; - goto bail; - } - else { + } else { /* rewind and call myself again. */ FDKpushBack(hBs, 4); @@ -622,7 +644,7 @@ AAC_DECODER_ERROR CAacDecoder_ExtPayloadParse (HANDLE_AACDECODER self, &bitCnt, previous_element, elIndex, - 1 ); /* Treat same as fill element */ + 0 ); *count -= len - bitCnt; } @@ -754,8 +776,12 @@ LINKSPEC_CPP void CAacDecoder_Close(HANDLE_AACDECODER self) for (ch=0; ch<(6); ch++) { if (self->pAacDecoderStaticChannelInfo[ch] != NULL) { - FreeOverlapBuffer (&self->pAacDecoderStaticChannelInfo[ch]->pOverlapBuffer); - FreeAacDecoderStaticChannelInfo (&self->pAacDecoderStaticChannelInfo[ch]); + if (self->pAacDecoderStaticChannelInfo[ch]->pOverlapBuffer != NULL) { + FreeOverlapBuffer (&self->pAacDecoderStaticChannelInfo[ch]->pOverlapBuffer); + } + if (self->pAacDecoderStaticChannelInfo[ch] != NULL) { + FreeAacDecoderStaticChannelInfo (&self->pAacDecoderStaticChannelInfo[ch]); + } } if (self->pAacDecoderChannelInfo[ch] != NULL) { FreeAacDecoderChannelInfo (&self->pAacDecoderChannelInfo[ch]); @@ -768,8 +794,12 @@ LINKSPEC_CPP void CAacDecoder_Close(HANDLE_AACDECODER self) FreeDrcInfo(&self->hDrcInfo); } - FreeWorkBufferCore1 (&self->aacCommonData.workBufferCore1); - FreeWorkBufferCore2 (&self->aacCommonData.workBufferCore2); + if (self->aacCommonData.workBufferCore1 != NULL) { + FreeWorkBufferCore1 (&self->aacCommonData.workBufferCore1); + } + if (self->aacCommonData.workBufferCore2 != NULL) { + FreeWorkBufferCore2 (&self->aacCommonData.workBufferCore2); + } FreeAacDecoder ( &self); } @@ -994,12 +1024,14 @@ LINKSPEC_CPP AAC_DECODER_ERROR CAacDecoder_Init(HANDLE_AACDECODER self, const CS CPns_InitPns(&self->pAacDecoderChannelInfo[ch]->data.aac.PnsData, &self->aacCommonData.pnsInterChannelData, &self->aacCommonData.pnsCurrentSeed, self->aacCommonData.pnsRandomSeed); } + if (ascChannels > self->aacChannels) + { + /* Make allocated channel count persistent in decoder context. */ + self->aacChannels = ascChannels; + } HcrInitRom(&self->aacCommonData.overlay.aac.erHcrInfo); setHcrType(&self->aacCommonData.overlay.aac.erHcrInfo, ID_SCE); - - /* Make allocated channel count persistent in decoder context. */ - self->aacChannels = ascChannels; } /* Make amount of signalled channels persistent in decoder context. */ @@ -1009,8 +1041,10 @@ LINKSPEC_CPP AAC_DECODER_ERROR CAacDecoder_Init(HANDLE_AACDECODER self, const CS /* Update structures */ if (ascChanged) { - /* Things to be done for each channel, which do not involved allocating memory. */ - for (ch = 0; ch < ascChannels; ch++) { + /* Things to be done for each channel, which do not involve allocating memory. + Doing these things only on the channels needed for the current configuration + (ascChannels) could lead to memory access violation later (error concealment). */ + for (ch = 0; ch < self->aacChannels; ch++) { switch (self->streamInfo.aot) { case AOT_ER_AAC_ELD: case AOT_ER_AAC_LD: @@ -1241,10 +1275,10 @@ LINKSPEC_CPP AAC_DECODER_ERROR CAacDecoder_DecodeFrame( else { self->frameOK = 0; } - /* Create SBR element for SBR for upsampling. */ - if ( (type == ID_LFE) - && ( (self->flags & AC_SBR_PRESENT) - || (self->sbrEnabled == 1) ) ) + /* Create SBR element for SBR for upsampling for LFE elements, + and if SBR was explicitly signaled, because the first frame(s) + may not contain SBR payload (broken encoder, bit errors). */ + if ( (self->flags & AC_SBR_PRESENT) || (self->sbrEnabled == 1) ) { SBR_ERROR sbrError; @@ -1254,7 +1288,7 @@ LINKSPEC_CPP AAC_DECODER_ERROR CAacDecoder_DecodeFrame( self->streamInfo.extSamplingRate, self->streamInfo.aacSamplesPerFrame, self->streamInfo.aot, - ID_LFE, + type, previous_element_index ); if (sbrError != SBRDEC_OK) { @@ -1394,26 +1428,34 @@ LINKSPEC_CPP AAC_DECODER_ERROR CAacDecoder_DecodeFrame( #ifdef TP_PCE_ENABLE case ID_PCE: - - if ( CProgramConfigElement_Read( bs, + { + int result = CProgramConfigElement_Read( + bs, self->hInput, pce, self->streamInfo.channelConfig, - auStartAnchor ) ) - { /* Built element table */ - int elIdx = CProgramConfig_GetElementTable(pce, self->elements, 7); - /* Reset the remaining tabs */ - for ( ; elIdx<7; elIdx++) { - self->elements[elIdx] = ID_NONE; - } - /* Make new number of channel persistant */ - self->ascChannels = pce->NumChannels; - /* If PCE is not first element conceal this frame to avoid inconsistencies */ - if ( element_count != 0 ) { + auStartAnchor ); + if ( result < 0 ) { + /* Something went wrong */ + ErrorStatus = AAC_DEC_PARSE_ERROR; self->frameOK = 0; } + else if ( result > 1 ) { + /* Built element table */ + int elIdx = CProgramConfig_GetElementTable(pce, self->elements, 7); + /* Reset the remaining tabs */ + for ( ; elIdx<7; elIdx++) { + self->elements[elIdx] = ID_NONE; + } + /* Make new number of channel persistant */ + self->ascChannels = pce->NumChannels; + /* If PCE is not first element conceal this frame to avoid inconsistencies */ + if ( element_count != 0 ) { + self->frameOK = 0; + } + } + pceRead = (result>=0) ? 1 : 0; } - pceRead = 1; break; #endif /* TP_PCE_ENABLE */ @@ -1573,7 +1615,7 @@ LINKSPEC_CPP AAC_DECODER_ERROR CAacDecoder_DecodeFrame( } /* Update number of output channels */ - self->streamInfo.numChannels = aacChannels; + self->streamInfo.aacNumChannels = aacChannels; #ifdef TP_PCE_ENABLE if (pceRead == 1 && CProgramConfig_IsValid(pce)) { diff --git a/libAACdec/src/aacdecoder.h b/libAACdec/src/aacdecoder.h index f153c84..16351e6 100644 --- a/libAACdec/src/aacdecoder.h +++ b/libAACdec/src/aacdecoder.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/aacdecoder_lib.cpp b/libAACdec/src/aacdecoder_lib.cpp index a3db39e..ec8f41e 100644 --- a/libAACdec/src/aacdecoder_lib.cpp +++ b/libAACdec/src/aacdecoder_lib.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -109,8 +109,8 @@ amm-info@iis.fraunhofer.de /* Decoder library info */ #define AACDECODER_LIB_VL0 2 -#define AACDECODER_LIB_VL1 4 -#define AACDECODER_LIB_VL2 7 +#define AACDECODER_LIB_VL1 5 +#define AACDECODER_LIB_VL2 5 #define AACDECODER_LIB_TITLE "AAC Decoder Lib" #define AACDECODER_LIB_BUILD_DATE __DATE__ #define AACDECODER_LIB_BUILD_TIME __TIME__ @@ -261,7 +261,7 @@ setConcealMethod ( const HANDLE_AACDECODER self, /*!< Handle of the decoder i HANDLE_SBRDECODER hSbrDec = NULL; HANDLE_AAC_DRC hDrcInfo = NULL; HANDLE_PCM_DOWNMIX hPcmDmx = NULL; - CConcealmentMethod backupMethod; + CConcealmentMethod backupMethod = ConcealMethodNone; int backupDelay = 0; int bsDelay = 0; @@ -396,11 +396,15 @@ aacDecoder_SetParam ( const HANDLE_AACDECODER self, /*!< Handle of the decode AAC_DECODER_ERROR errorStatus = AAC_DEC_OK; CConcealParams *pConcealData = NULL; HANDLE_AAC_DRC hDrcInfo = NULL; + HANDLE_PCM_DOWNMIX hPcmDmx = NULL; /* check decoder handle */ if (self != NULL) { pConcealData = &self->concealCommonData; hDrcInfo = self->hDrcInfo; + hPcmDmx = self->hPcmUtils; + } else { + errorStatus = AAC_DEC_INVALID_HANDLE; } /* configure the subsystems */ @@ -417,11 +421,14 @@ aacDecoder_SetParam ( const HANDLE_AACDECODER self, /*!< Handle of the decode break; case AAC_PCM_OUTPUT_CHANNELS: + if (value < -1 || value > (6)) { + return AAC_DEC_SET_PARAM_FAIL; + } { PCMDMX_ERROR err; err = pcmDmx_SetParam ( - self->hPcmUtils, + hPcmDmx, NUMBER_OF_OUTPUT_CHANNELS, value ); @@ -441,7 +448,7 @@ aacDecoder_SetParam ( const HANDLE_AACDECODER self, /*!< Handle of the decode PCMDMX_ERROR err; err = pcmDmx_SetParam ( - self->hPcmUtils, + hPcmDmx, DUAL_CHANNEL_DOWNMIX_MODE, value ); @@ -459,10 +466,14 @@ aacDecoder_SetParam ( const HANDLE_AACDECODER self, /*!< Handle of the decode case AAC_PCM_OUTPUT_CHANNEL_MAPPING: switch (value) { case 0: - self->channelOutputMapping = channelMappingTablePassthrough; + if (self != NULL) { + self->channelOutputMapping = channelMappingTablePassthrough; + } break; case 1: - self->channelOutputMapping = channelMappingTableWAV; + if (self != NULL) { + self->channelOutputMapping = channelMappingTableWAV; + } break; default: errorStatus = AAC_DEC_SET_PARAM_FAIL; @@ -472,6 +483,9 @@ aacDecoder_SetParam ( const HANDLE_AACDECODER self, /*!< Handle of the decode case AAC_QMF_LOWPOWER: + if (value < -1 || value > 1) { + return AAC_DEC_SET_PARAM_FAIL; + } if (self == NULL) { return AAC_DEC_INVALID_HANDLE; } @@ -794,8 +808,8 @@ LINKSPEC_CPP AAC_DECODER_ERROR aacDecoder_DecodeFrame( /* Export data into streaminfo structure */ self->streamInfo.sampleRate = self->streamInfo.aacSampleRate; self->streamInfo.frameSize = self->streamInfo.aacSamplesPerFrame; - self->streamInfo.numChannels = self->aacChannels; } + self->streamInfo.numChannels = self->streamInfo.aacNumChannels; @@ -832,7 +846,7 @@ LINKSPEC_CPP AAC_DECODER_ERROR aacDecoder_DecodeFrame( pTimeData, &self->streamInfo.numChannels, &self->streamInfo.sampleRate, - self->channelOutputMapping[self->aacChannels-1], + self->channelOutputMapping[self->streamInfo.numChannels-1], interleaved, self->frameOK, &self->psPossible); diff --git a/libAACdec/src/arm/block_arm.cpp b/libAACdec/src/arm/block_arm.cpp index 4c0fcdd..fbc1bf3 100644 --- a/libAACdec/src/arm/block_arm.cpp +++ b/libAACdec/src/arm/block_arm.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/block.cpp b/libAACdec/src/block.cpp index 1f82780..9d703cc 100644 --- a/libAACdec/src/block.cpp +++ b/libAACdec/src/block.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -589,7 +589,6 @@ AAC_DECODER_ERROR CBlock_ReadSpectralData(HANDLE_FDK_BITSTREAM bs, { H_HCR_INFO hHcr = &pAacDecoderChannelInfo->pComData->overlay.aac.erHcrInfo; int hcrStatus = 0; - int hcrConcealWholeFrame = 0; /* advanced Huffman decoding starts here (HCR decoding :) */ if ( pAacDecoderChannelInfo->pDynData->specificTo.aac.lenOfReorderedSpectralData != 0 ) { @@ -598,24 +597,19 @@ AAC_DECODER_ERROR CBlock_ReadSpectralData(HANDLE_FDK_BITSTREAM bs, hcrStatus = HcrInit(hHcr, pAacDecoderChannelInfo, pSamplingRateInfo, bs); if (hcrStatus != 0) { -#if HCR_ERROR_CONCEALMENT - hcrConcealWholeFrame = 1; - return AAC_DEC_DECODE_FRAME_ERROR; /* concealment is muting in the first step, therefore return now */ - // hcr decoding is not skipped because of returning above -#else return AAC_DEC_DECODE_FRAME_ERROR; -#endif } /* HCR decoding short */ hcrStatus = HcrDecoder(hHcr, pAacDecoderChannelInfo, pSamplingRateInfo, bs); - + if (hcrStatus != 0) { #if HCR_ERROR_CONCEALMENT - HcrMuteErroneousLines(hHcr); + HcrMuteErroneousLines(hHcr); #else - return AAC_DEC_DECODE_FRAME_ERROR; + return AAC_DEC_DECODE_FRAME_ERROR; #endif /* HCR_ERROR_CONCEALMENT */ + } FDKpushFor (bs, pAacDecoderChannelInfo->pDynData->specificTo.aac.lenOfReorderedSpectralData); } diff --git a/libAACdec/src/block.h b/libAACdec/src/block.h index f97b85c..f9394f6 100644 --- a/libAACdec/src/block.h +++ b/libAACdec/src/block.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/channel.cpp b/libAACdec/src/channel.cpp index 21517f5..5475079 100644 --- a/libAACdec/src/channel.cpp +++ b/libAACdec/src/channel.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/channel.h b/libAACdec/src/channel.h index 4c428c8..1146998 100644 --- a/libAACdec/src/channel.h +++ b/libAACdec/src/channel.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/channelinfo.cpp b/libAACdec/src/channelinfo.cpp index 6e520c0..76d5895 100644 --- a/libAACdec/src/channelinfo.cpp +++ b/libAACdec/src/channelinfo.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/channelinfo.h b/libAACdec/src/channelinfo.h index 9be07da..e092ab3 100644 --- a/libAACdec/src/channelinfo.h +++ b/libAACdec/src/channelinfo.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/conceal.cpp b/libAACdec/src/conceal.cpp index dc5d99f..c26051c 100644 --- a/libAACdec/src/conceal.cpp +++ b/libAACdec/src/conceal.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -441,7 +441,7 @@ AAC_DECODER_ERROR /* set confort noise level which will be inserted while in state 'muting' */ if (comfNoiseLevel != AACDEC_CONCEAL_PARAM_NOT_SPECIFIED) { - if ( (comfNoiseLevel < 0) + if ( (comfNoiseLevel < -1) || (comfNoiseLevel > 127) ) { return AAC_DEC_SET_PARAM_FAIL; } @@ -1527,8 +1527,13 @@ static void { case ConcealState_Ok: if (!frameOk) { - /* change to state SINGLE-FRAME-LOSS */ - pConcealmentInfo->concealState = ConcealState_Single; + if (pConcealCommonData->numFadeOutFrames > 0) { + /* change to state SINGLE-FRAME-LOSS */ + pConcealmentInfo->concealState = ConcealState_Single; + } else { + /* change to state MUTE */ + pConcealmentInfo->concealState = ConcealState_Mute; + } pConcealmentInfo->cntFadeFrames = 0; pConcealmentInfo->cntValidFrames = 0; } @@ -1561,11 +1566,16 @@ static void case ConcealState_FadeOut: pConcealmentInfo->cntFadeFrames += 1; /* used to address the fade-out factors */ if (pConcealmentInfo->cntValidFrames > pConcealCommonData->numMuteReleaseFrames) { - /* change to state FADE-IN */ - pConcealmentInfo->concealState = ConcealState_FadeIn; - pConcealmentInfo->cntFadeFrames = findEquiFadeFrame( pConcealCommonData, - pConcealmentInfo->cntFadeFrames-1, - 0 /* FadeOut -> FadeIn */); + if (pConcealCommonData->numFadeInFrames > 0) { + /* change to state FADE-IN */ + pConcealmentInfo->concealState = ConcealState_FadeIn; + pConcealmentInfo->cntFadeFrames = findEquiFadeFrame( pConcealCommonData, + pConcealmentInfo->cntFadeFrames-1, + 0 /* FadeOut -> FadeIn */); + } else { + /* change to state OK */ + pConcealmentInfo->concealState = ConcealState_Ok; + } } else { if (pConcealmentInfo->cntFadeFrames >= pConcealCommonData->numFadeOutFrames) { /* change to state MUTE */ @@ -1576,9 +1586,14 @@ static void case ConcealState_Mute: if (pConcealmentInfo->cntValidFrames > pConcealCommonData->numMuteReleaseFrames) { - /* change to state FADE-IN */ - pConcealmentInfo->concealState = ConcealState_FadeIn; - pConcealmentInfo->cntFadeFrames = pConcealCommonData->numFadeInFrames - 1; + if (pConcealCommonData->numFadeInFrames > 0) { + /* change to state FADE-IN */ + pConcealmentInfo->concealState = ConcealState_FadeIn; + pConcealmentInfo->cntFadeFrames = pConcealCommonData->numFadeInFrames - 1; + } else { + /* change to state OK */ + pConcealmentInfo->concealState = ConcealState_Ok; + } } break; @@ -1590,11 +1605,16 @@ static void pConcealmentInfo->concealState = ConcealState_Ok; } } else { - /* change to state FADE-OUT */ - pConcealmentInfo->concealState = ConcealState_FadeOut; - pConcealmentInfo->cntFadeFrames = findEquiFadeFrame( pConcealCommonData, - pConcealmentInfo->cntFadeFrames+1, - 1 /* FadeIn -> FadeOut */); + if (pConcealCommonData->numFadeOutFrames > 0) { + /* change to state FADE-OUT */ + pConcealmentInfo->concealState = ConcealState_FadeOut; + pConcealmentInfo->cntFadeFrames = findEquiFadeFrame( pConcealCommonData, + pConcealmentInfo->cntFadeFrames+1, + 1 /* FadeIn -> FadeOut */); + } else { + /* change to state MUTE */ + pConcealmentInfo->concealState = ConcealState_Mute; + } } break; @@ -1625,8 +1645,13 @@ static void case ConcealState_Ok: if (!(pConcealmentInfo->prevFrameOk[1] || (pConcealmentInfo->prevFrameOk[0] && !pConcealmentInfo->prevFrameOk[1] && frameOk))) { - /* Fade out only if the energy interpolation algorithm can not be applied! */ - pConcealmentInfo->concealState = ConcealState_FadeOut; + if (pConcealCommonData->numFadeOutFrames > 0) { + /* Fade out only if the energy interpolation algorithm can not be applied! */ + pConcealmentInfo->concealState = ConcealState_FadeOut; + } else { + /* change to state MUTE */ + pConcealmentInfo->concealState = ConcealState_Mute; + } pConcealmentInfo->cntFadeFrames = 0; pConcealmentInfo->cntValidFrames = 0; } @@ -1640,11 +1665,16 @@ static void pConcealmentInfo->cntFadeFrames += 1; if (pConcealmentInfo->cntValidFrames > pConcealCommonData->numMuteReleaseFrames) { - /* change to state FADE-IN */ - pConcealmentInfo->concealState = ConcealState_FadeIn; - pConcealmentInfo->cntFadeFrames = findEquiFadeFrame( pConcealCommonData, - pConcealmentInfo->cntFadeFrames-1, - 0 /* FadeOut -> FadeIn */); + if (pConcealCommonData->numFadeInFrames > 0) { + /* change to state FADE-IN */ + pConcealmentInfo->concealState = ConcealState_FadeIn; + pConcealmentInfo->cntFadeFrames = findEquiFadeFrame( pConcealCommonData, + pConcealmentInfo->cntFadeFrames-1, + 0 /* FadeOut -> FadeIn */); + } else { + /* change to state OK */ + pConcealmentInfo->concealState = ConcealState_Ok; + } } else { if (pConcealmentInfo->cntFadeFrames >= pConcealCommonData->numFadeOutFrames) { /* change to state MUTE */ @@ -1655,9 +1685,14 @@ static void case ConcealState_Mute: if (pConcealmentInfo->cntValidFrames > pConcealCommonData->numMuteReleaseFrames) { - /* change to state FADE-IN */ - pConcealmentInfo->concealState = ConcealState_FadeIn; - pConcealmentInfo->cntFadeFrames = pConcealCommonData->numFadeInFrames - 1; + if (pConcealCommonData->numFadeInFrames > 0) { + /* change to state FADE-IN */ + pConcealmentInfo->concealState = ConcealState_FadeIn; + pConcealmentInfo->cntFadeFrames = pConcealCommonData->numFadeInFrames - 1; + } else { + /* change to state OK */ + pConcealmentInfo->concealState = ConcealState_Ok; + } } break; @@ -1670,11 +1705,16 @@ static void pConcealmentInfo->concealState = ConcealState_Ok; } } else { - /* change to state FADE-OUT */ - pConcealmentInfo->concealState = ConcealState_FadeOut; - pConcealmentInfo->cntFadeFrames = findEquiFadeFrame( pConcealCommonData, - pConcealmentInfo->cntFadeFrames+1, - 1 /* FadeIn -> FadeOut */); + if (pConcealCommonData->numFadeOutFrames > 0) { + /* change to state FADE-OUT */ + pConcealmentInfo->concealState = ConcealState_FadeOut; + pConcealmentInfo->cntFadeFrames = findEquiFadeFrame( pConcealCommonData, + pConcealmentInfo->cntFadeFrames+1, + 1 /* FadeIn -> FadeOut */); + } else { + /* change to state MUTE */ + pConcealmentInfo->concealState = ConcealState_Mute; + } } break; } /* End switch(pConcealmentInfo->concealState) */ diff --git a/libAACdec/src/conceal.h b/libAACdec/src/conceal.h index 2abc26a..20e674f 100644 --- a/libAACdec/src/conceal.h +++ b/libAACdec/src/conceal.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/conceal_types.h b/libAACdec/src/conceal_types.h index c1cc6f2..31bc645 100644 --- a/libAACdec/src/conceal_types.h +++ b/libAACdec/src/conceal_types.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/debug.h b/libAACdec/src/debug.h index 9486c66..e903291 100644 --- a/libAACdec/src/debug.h +++ b/libAACdec/src/debug.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/ldfiltbank.cpp b/libAACdec/src/ldfiltbank.cpp index 8f719c8..c08cc41 100644 --- a/libAACdec/src/ldfiltbank.cpp +++ b/libAACdec/src/ldfiltbank.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/ldfiltbank.h b/libAACdec/src/ldfiltbank.h index 97c71b3..d1f9402 100644 --- a/libAACdec/src/ldfiltbank.h +++ b/libAACdec/src/ldfiltbank.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/overlapadd.h b/libAACdec/src/overlapadd.h index 08bef69..1469be7 100644 --- a/libAACdec/src/overlapadd.h +++ b/libAACdec/src/overlapadd.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/pulsedata.cpp b/libAACdec/src/pulsedata.cpp index 4edfd39..0f2f0ec 100644 --- a/libAACdec/src/pulsedata.cpp +++ b/libAACdec/src/pulsedata.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/pulsedata.h b/libAACdec/src/pulsedata.h index 7b10666..fa97d99 100644 --- a/libAACdec/src/pulsedata.h +++ b/libAACdec/src/pulsedata.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/rvlc.cpp b/libAACdec/src/rvlc.cpp index 7b533a5..16f0bf5 100644 --- a/libAACdec/src/rvlc.cpp +++ b/libAACdec/src/rvlc.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/rvlc.h b/libAACdec/src/rvlc.h index 7903659..18d5fa3 100644 --- a/libAACdec/src/rvlc.h +++ b/libAACdec/src/rvlc.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/rvlc_info.h b/libAACdec/src/rvlc_info.h index e245090..63934af 100644 --- a/libAACdec/src/rvlc_info.h +++ b/libAACdec/src/rvlc_info.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/rvlcbit.cpp b/libAACdec/src/rvlcbit.cpp index 9ddc5a6..6efbb93 100644 --- a/libAACdec/src/rvlcbit.cpp +++ b/libAACdec/src/rvlcbit.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/rvlcbit.h b/libAACdec/src/rvlcbit.h index 176e816..02fba88 100644 --- a/libAACdec/src/rvlcbit.h +++ b/libAACdec/src/rvlcbit.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/rvlcconceal.cpp b/libAACdec/src/rvlcconceal.cpp index 682e6eb..ae6b4da 100644 --- a/libAACdec/src/rvlcconceal.cpp +++ b/libAACdec/src/rvlcconceal.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/rvlcconceal.h b/libAACdec/src/rvlcconceal.h index fdc5795..750cbcd 100644 --- a/libAACdec/src/rvlcconceal.h +++ b/libAACdec/src/rvlcconceal.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/stereo.cpp b/libAACdec/src/stereo.cpp index 79ebc7d..4f28244 100644 --- a/libAACdec/src/stereo.cpp +++ b/libAACdec/src/stereo.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACdec/src/stereo.h b/libAACdec/src/stereo.h index 1ed0d9d..899b485 100644 --- a/libAACdec/src/stereo.h +++ b/libAACdec/src/stereo.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/include/aacenc_lib.h b/libAACenc/include/aacenc_lib.h index 862dcb5..8c0e1cd 100644 --- a/libAACenc/include/aacenc_lib.h +++ b/libAACenc/include/aacenc_lib.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -316,7 +316,8 @@ if the parameter was not set from extern. The bitrate depends on the number of e channels and sampling rate and is determined as follows. \code AAC-LC (AOT_AAC_LC): 1.5 bits per sample -HE-AAC (AOT_SBR): 0.625 bits per sample +HE-AAC (AOT_SBR): 0.625 bits per sample (dualrate sbr) +HE-AAC (AOT_SBR): 1.125 bits per sample (downsampled sbr) HE-AAC v2 (AOT_PS): 0.5 bits per sample \endcode @@ -341,6 +342,33 @@ increase which might be significant. If workload is not an issue in the applicat we recommended to activate this feature. \code aacEncoder_SetParam(hAacEncoder, AACENC_AFTERBURNER, 1); \endcode +\subsection encELD ELD Auto Configuration Mode +For ELD configuration a so called auto configurator is available which configures SBR and the SBR ratio by itself. +The configurator is used when the encoder parameter ::AACENC_SBR_MODE and ::AACENC_SBR_RATIO are not set explicitely. + +Based on sampling rate and chosen bitrate per channel a reasonable SBR configuration will be used. +\verbatim +------------------------------------------------------------ + Sampling Rate | Channel Bitrate | SBR | SBR Ratio +-----------------+-----------------+------+----------------- + ]min, 16] kHz | min - 27999 | on | downsampled SBR + | 28000 - max | off | --- +-----------------+-----------------+------+----------------- + ]16 - 24] kHz | min - 39999 | on | downsampled SBR + | 40000 - max | off | --- +-----------------+-----------------+------+----------------- + ]24 - 32] kHz | min - 27999 | on | dualrate SBR + | 28000 - 55999 | on | downsampled SBR + | 56000 - max | off | --- +-----------------+-----------------+------+----------------- + ]32 - 44.1] kHz | min - 63999 | on | dualrate SBR + | 64000 - max | off | --- +-----------------+-----------------+------+----------------- + ]44.1 - 48] kHz | min - 63999 | on | dualrate SBR + | 64000 - max | off | --- +------------------------------------------------------------ +\endverbatim + \section audiochCfg Audio Channel Configuration The MPEG standard refers often to the so-called Channel Configuration. This Channel Configuration is used for a fixed Channel @@ -349,16 +377,20 @@ For user defined Configurations the Channel Configuration is set to 0 and the Ch Program Config Element. The present Encoder implementation does not allow the user to configure this Channel Configuration from extern. The Encoder implementation supports fixed Channel Modes which are mapped to Channel Configuration as follow. \verbatim --------------------------------------------------------------------- - ChannelMode | ChCfg | front_El | side_El | back_El | lfe_El ------------------+--------+----------+----------+----------+-------- -MODE_1 | 1 | SCE | | | -MODE_2 | 2 | CPE | | | -MODE_1_2 | 3 | SCE, CPE | | | -MODE_1_2_1 | 4 | SCE, CPE | | SCE | -MODE_1_2_2 | 5 | SCE, CPE | | CPE | -MODE_1_2_2_1 | 6 | SCE, CPE | | CPE | LFE --------------------------------------------------------------------- +------------------------------------------------------------------------------- + ChannelMode | ChCfg | front_El | side_El | back_El | lfe_El +-----------------------+--------+---------------+----------+----------+-------- +MODE_1 | 1 | SCE | | | +MODE_2 | 2 | CPE | | | +MODE_1_2 | 3 | SCE, CPE | | | +MODE_1_2_1 | 4 | SCE, CPE | | SCE | +MODE_1_2_2 | 5 | SCE, CPE | | CPE | +MODE_1_2_2_1 | 6 | SCE, CPE | | CPE | LFE +MODE_1_2_2_2_1 | 7 | SCE, CPE, CPE | | CPE | LFE +-----------------------+--------+---------------+----------+----------+-------- +MODE_7_1_REAR_SURROUND | 0 | SCE, CPE | | CPE, CPE | LFE +MODE_7_1_FRONT_CENTER | 0 | SCE, CPE, CPE | | CPE | LFE +------------------------------------------------------------------------------- - SCE: Single Channel Element. - CPE: Channel Pair. - SCE: Low Frequency Element. @@ -374,16 +406,20 @@ Beside the Channel Element assignment the Channel Modes are resposible for audio of the audio data depends on the selected ::AACENC_CHANNELORDER which can be MPEG or WAV like order.\n Following Table describes the complete channel mapping for both Channel Order configurations. \verbatim ---------------------------------------------------------------------------------- -ChannelMode | MPEG-Channelorder | WAV-Channelorder ------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+--- -MODE_1 | 0 | | | | | | | | 0 | | | | | | | -MODE_2 | 0 | 1 | | | | | | | 0 | 1 | | | | | | -MODE_1_2 | 0 | 1 | 2 | | | | | | 2 | 0 | 1 | | | | | -MODE_1_2_1 | 0 | 1 | 2 | 3 | | | | | 2 | 0 | 1 | 3 | | | | -MODE_1_2_2 | 0 | 1 | 2 | 3 | 4 | | | | 2 | 0 | 1 | 3 | 4 | | | -MODE_1_2_2_1 | 0 | 1 | 2 | 3 | 4 | 5 | | | 2 | 0 | 1 | 4 | 5 | 3 | | ---------------------------------------------------------------------------------- +--------------------------------------------------------------------------------------- +ChannelMode | MPEG-Channelorder | WAV-Channelorder +-----------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+--- +MODE_1 | 0 | | | | | | | | 0 | | | | | | | +MODE_2 | 0 | 1 | | | | | | | 0 | 1 | | | | | | +MODE_1_2 | 0 | 1 | 2 | | | | | | 2 | 0 | 1 | | | | | +MODE_1_2_1 | 0 | 1 | 2 | 3 | | | | | 2 | 0 | 1 | 3 | | | | +MODE_1_2_2 | 0 | 1 | 2 | 3 | 4 | | | | 2 | 0 | 1 | 3 | 4 | | | +MODE_1_2_2_1 | 0 | 1 | 2 | 3 | 4 | 5 | | | 2 | 0 | 1 | 4 | 5 | 3 | | +MODE_1_2_2_2_1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 2 | 6 | 7 | 0 | 1 | 4 | 5 | 3 +-----------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+--- +MODE_7_1_REAR_SURROUND | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 2 | 0 | 1 | 6 | 7 | 4 | 5 | 3 +MODE_7_1_FRONT_CENTER | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 2 | 6 | 7 | 0 | 1 | 4 | 5 | 3 +--------------------------------------------------------------------------------------- \endverbatim The denoted mapping is important for correct audio channel assignment when using MPEG or WAV ordering. The incoming audio @@ -416,8 +452,9 @@ determines the maximum allowed bitrate for AAC-LC. For HE-AAC and HE-AAC v2 a li look-up table is used. A good working point in terms of audio quality, sampling rate and bitrate, is at 1 to 1.5 -bits/audio sample for AAC-LC, 0.625 bits/audio sample for HE-AAC and 0.5 bits/audio sample -for HE-AAC v2. For example for one channel with a sampling frequency of 48 kHz, the range from +bits/audio sample for AAC-LC, 0.625 bits/audio sample for dualrate HE-AAC, 1.125 bits/audio sample +for downsampled HE-AAC and 0.5 bits/audio sample for HE-AAC v2. +For example for one channel with a sampling frequency of 48 kHz, the range from 48 kbit/s to 72 kbit/s achieves reasonable audio quality for AAC-LC. For HE-AAC and HE-AAC v2 the lowest possible audio input sampling frequency is 16 kHz because then the @@ -434,7 +471,7 @@ quality at that bitrate than HE-AAC or HE-AAC v2. The following table provides an overview of recommended encoder configuration parameters which we determined by virtue of numerous listening tests. -\subsection reommendedConfigLC AAC-LC, HE-AAC, HE-AACv2. +\subsection reommendedConfigLC AAC-LC, HE-AAC, HE-AACv2 in Dualrate SBR mode. \verbatim ----------------------------------------------------------------------------------- Audio Object Type | Bit Rate Range | Supported | Preferred | No. of @@ -457,8 +494,8 @@ AAC LC + SBR | 64000 - 128000 | 32.00, 44.10, 48.00 | 48.00 | -------------------+------------------+-----------------------+------------+------- AAC LC + SBR | 64000 - 69999 | 32.00, 44.10, 48.00 | 32.00 | 5, 5.1 AAC LC + SBR | 70000 - 159999 | 32.00, 44.10, 48.00 | 44.10 | 5, 5.1 -AAC LC + SBR | 160000 - 319999 | 32.00, 44.10, 48.00 | 48.00 | 5, 5.1 -AAC LC + SBR | 320000 - 640000 | 64.00, 88.20, 96.00 | 96.00 | 5, 5.1 +AAC LC + SBR | 160000 - 245999 | 32.00, 44.10, 48.00 | 48.00 | 5 +AAC LC + SBR | 160000 - 265999 | 32.00, 44.10, 48.00 | 48.00 | 5.1 -------------------+------------------+-----------------------+------------+------- AAC LC | 8000 - 15999 | 11.025, 12.00, 16.00 | 12.00 | 1 AAC LC | 16000 - 23999 | 16.00 | 16.00 | 1 @@ -481,7 +518,7 @@ AAC LC | 280000 - 800000 | 32.00, 44.10, 48.00 | 44.10 | 5, ----------------------------------------------------------------------------------- \endverbatim \n -\subsection reommendedConfigLD AAC-LD, AAC-ELD, AAC-ELD with SBR. +\subsection reommendedConfigLD AAC-LD, AAC-ELD, AAC-ELD with SBR in Dualrate SBR mode. \verbatim ----------------------------------------------------------------------------------- Audio Object Type | Bit Rate Range | Supported | Preferred | No. of @@ -489,18 +526,20 @@ Audio Object Type | Bit Rate Range | Supported | Preferred | No. | | [kHz] | Rate | | | | [kHz] | -------------------+------------------+-----------------------+------------+------- -ELD + SBR | 16000 - 24999 | 32.00 - 44.10 | 32.00 | 1 +ELD + SBR | 18000 - 24999 | 32.00 - 44.10 | 32.00 | 1 ELD + SBR | 25000 - 31999 | 32.00 - 48.00 | 32.00 | 1 ELD + SBR | 32000 - 64000 | 32.00 - 48.00 | 48.00 | 1 -------------------+------------------+-----------------------+------------+------- ELD + SBR | 32000 - 51999 | 32.00 - 48.00 | 44.10 | 2 ELD + SBR | 52000 - 128000 | 32.00 - 48.00 | 48.00 | 2 -------------------+------------------+-----------------------+------------+------- -ELD + SBR | 72000 - 192000 | 44.10 - 48.00 | 48.00 | 3 +ELD + SBR | 72000 - 160000 | 44.10 - 48.00 | 48.00 | 3 +-------------------+------------------+-----------------------+------------+------- +ELD + SBR | 96000 - 212000 | 44.10 - 48.00 | 48.00 | 4 -------------------+------------------+-----------------------+------------+------- -ELD + SBR | 96000 - 256000 | 44.10 - 48.00 | 48.00 | 4 +ELD + SBR | 120000 - 246000 | 44.10 - 48.00 | 48.00 | 5 -------------------+------------------+-----------------------+------------+------- -ELD + SBR | 120000 - 320000 | 44.10 - 48.00 | 48.00 | 5 +ELD + SBR | 120000 - 266000 | 44.10 - 48.00 | 48.00 | 5.1 -------------------+------------------+-----------------------+------------+------- LD, ELD | 16000 - 19999 | 16.00 - 24.00 | 16.00 | 1 LD, ELD | 20000 - 39999 | 16.00 - 32.00 | 24.00 | 1 @@ -531,13 +570,33 @@ LD, ELD | 340000 - 960000 | 44.10 - 48.00 | 48.00 | ----------------------------------------------------------------------------------- \endverbatim \n +\subsection reommendedConfigELD AAC-ELD with SBR in Downsampled SBR mode. +\verbatim +----------------------------------------------------------------------------------- +Audio Object Type | Bit Rate Range | Supported | Preferred | No. of + | [bit/s] | Sampling Rates | Sampl. | Chan. + | | [kHz] | Rate | + | | | [kHz] | +-------------------+------------------+-----------------------+------------+------- +ELD + SBR | 18000 - 24999 | 16.00 - 22.05 | 22.05 | 1 +(downsampled SBR) | 25000 - 35999 | 22.05 - 32.00 | 24.00 | 1 + | 36000 - 64000 | 32.00 - 48.00 | 32.00 | 1 +----------------------------------------------------------------------------------- +\endverbatim \n + + \page ENCODERBEHAVIOUR Encoder Behaviour \section BEHAVIOUR_BANDWIDTH Bandwidth The FDK AAC encoder usually does not use the full frequency range of the input signal, but restricts the bandwidth according to certain library-internal settings. They can be changed in the table "bandWidthTable" in the -file bandwidth.cpp (if available), or via command-line argument "-w" (see chapter \ref CommandLineUsage). +file bandwidth.cpp (if available). + +The encoder API provides the ::AACENC_BANDWIDTH parameter to adjust the bandwidth explicitly. +\code +aacEncoder_SetParam(hAacEncoder, AACENC_BANDWIDTH, value); +\endcode However it is not recommended to change these settings, because they are based on numerious listening tests and careful tweaks to ensure the best overall encoding quality. @@ -638,7 +697,6 @@ an MPEG-2 AOT is choosen since PNS is an MPEG-4 AAC feature. If SBR is activated, the encoder automatically deactivates PNS internally. If TNS is disabled but PNS is allowed, the encoder deactivates PNS calculation internally. - */ #ifndef _AAC_ENC_LIB_H_ @@ -858,8 +916,9 @@ typedef enum AACENC_SAMPLERATE = 0x0103, /*!< Audio input data sampling rate. Encoder supports following sampling rates: 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000, 64000, 88200, 96000 */ - AACENC_SBR_MODE = 0x0104, /*!< Configure SBR independently of the chosen Audio Object Type ::AUDIO_OBJECT_TYPE:. - This parameter is only available for ELD. + AACENC_SBR_MODE = 0x0104, /*!< Configure SBR independently of the chosen Audio Object Type ::AUDIO_OBJECT_TYPE. + This parameter is for ELD audio object type only. + - -1: Use ELD SBR auto configurator (default). - 0: Disable Spectral Band Replication. - 1: Enable Spectral Band Replication. */ @@ -869,12 +928,21 @@ typedef enum - 480: Optional length in LD/ELD configuration. */ AACENC_CHANNELMODE = 0x0106, /*!< Set explicit channel mode. Channel mode must match with number of input channels. - - 1-6: MPEG channel modes supported, see ::CHANNEL_MODE in FDK_audio.h. */ + - 1-7 and 33,34: MPEG channel modes supported, see ::CHANNEL_MODE in FDK_audio.h. */ AACENC_CHANNELORDER = 0x0107, /*!< Input audio data channel ordering scheme: - 0: MPEG channel ordering (e. g. 5.1: C, L, R, SL, SR, LFE). (default) - 1: WAVE file format channel ordering (e. g. 5.1: L, R, C, LFE, SL, SR). */ + AACENC_SBR_RATIO = 0x0108, /*!< Controls activation of downsampled SBR. With downsampled SBR, the delay will be + shorter. On the other hand, for achieving the same quality level, downsampled SBR + needs more bits than dual-rate SBR. + With downsampled SBR, the AAC encoder will work at the same sampling rate as the + SBR encoder (single rate). + Downsampled SBR is supported for AAC-ELD and HE-AACv1. + - 1: Downsampled SBR (default for ELD). + - 2: Dual-rate SBR (default for HE-AAC). */ + AACENC_AFTERBURNER = 0x0200, /*!< This parameter controls the use of the afterburner feature. The afterburner is a type of analysis by synthesis algorithm which increases the audio quality but also the required processing power. It is recommended to always @@ -906,14 +974,50 @@ typedef enum - n: Frame count period. */ AACENC_SIGNALING_MODE = 0x0302, /*!< Signaling mode of the extension AOT: - - 0: Implicit backward compatible signaling. (default) - - 1: Explicit SBR and implicit PS signaling. - - 2: Explicit hierarchical signaling. - - The use of backward-compatible implicit signaling is recommended if the user specically - aims at preserving compatibility with decoders only capable of decoding AAC-LC. Otherwise - use non-backward-compatible explicit signaling. - Bitstream formats ADTS and ADIF can only do implicit signaling. */ + - 0: Implicit backward compatible signaling (default for non-MPEG-4 based + AOT's and for the transport formats ADIF and ADTS) + - A stream that uses implicit signaling can be decoded by every AAC decoder, even AAC-LC-only decoders + - An AAC-LC-only decoder will only decode the low-frequency part of the stream, resulting in a band-limited output + - This method works with all transport formats + - This method does not work with downsampled SBR + - 1: Explicit backward compatible signaling + - A stream that uses explicit backward compatible signaling can be decoded by every AAC decoder, even AAC-LC-only decoders + - An AAC-LC-only decoder will only decode the low-frequency part of the stream, resulting in a band-limited output + - A decoder not capable of decoding PS will only decode the AAC-LC+SBR part. + If the stream contained PS, the result will be a a decoded mono downmix + - This method does not work with ADIF or ADTS. For LOAS/LATM, it only works with AudioMuxVersion==1 + - This method does work with downsampled SBR + - 2: Explicit hierarchical signaling (default for MPEG-4 based AOT's and for all transport formats excluding ADIF and ADTS) + - A stream that uses explicit hierarchical signaling can be decoded only by HE-AAC decoders + - An AAC-LC-only decoder will not decode a stream that uses explicit hierarchical signaling + - A decoder not capable of decoding PS will not decode the stream at all if it contained PS + - This method does not work with ADIF or ADTS. It works with LOAS/LATM and the MPEG-4 File format + - This method does work with downsampled SBR + + For making sure that the listener always experiences the best audio quality, + explicit hierarchical signaling should be used. + This makes sure that only a full HE-AAC-capable decoder will decode those streams. + The audio is played at full bandwidth. + For best backwards compatibility, it is recommended to encode with implicit SBR signaling. + A decoder capable of AAC-LC only will then only decode the AAC part, which means the decoded + audio will sound band-limited. + + For MPEG-2 transport types (ADTS,ADIF), only implicit signaling is possible. + + For LOAS and LATM, explicit backwards compatible signaling only works together with AudioMuxVersion==1. + The reason is that, for explicit backwards compatible signaling, additional information will be appended to the ASC. + A decoder that is only capable of decoding AAC-LC will skip this part. + Nevertheless, for jumping to the end of the ASC, it needs to know the ASC length. + Transmitting the length of the ASC is a feature of AudioMuxVersion==1, it is not possible to transmit the + length of the ASC with AudioMuxVersion==0, therefore an AAC-LC-only decoder will not be able to parse a + LOAS/LATM stream that was being encoded with AudioMuxVersion==0. + + For downsampled SBR, explicit signaling is mandatory. The reason for this is that the + extension sampling frequency (which is in case of SBR the sampling frequqncy of the SBR part) + can only be signaled in explicit mode. + + For AAC-ELD, the SBR information is transmitted in the ELDSpecific Config, which is part of the + AudioSpecificConfig. Therefore, the settings here will have no effect on AAC-ELD.*/ AACENC_TPSUBFRAMES = 0x0303, /*!< Number of sub frames in a transport frame for LOAS/LATM or ADTS (default 1). - ADTS: Maximum number of sub frames restricted to 4. diff --git a/libAACenc/src/aacEnc_ram.cpp b/libAACenc/src/aacEnc_ram.cpp index 45bca93..be3eea2 100644 --- a/libAACenc/src/aacEnc_ram.cpp +++ b/libAACenc/src/aacEnc_ram.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -89,7 +89,7 @@ amm-info@iis.fraunhofer.de ******************************************************************************/ /*! \file - \brief Memory layout + \brief Memory layout \author Markus Lohwasser */ @@ -119,12 +119,12 @@ C_ALLOC_MEM (Ram_aacEnc_AacEncoder, AAC_ENC, 1) PsyInputBuffer. */ -C_ALLOC_MEM2 (Ram_aacEnc_PsyElement, PSY_ELEMENT, 1, (6)) +C_ALLOC_MEM2 (Ram_aacEnc_PsyElement, PSY_ELEMENT, 1, (8)) C_ALLOC_MEM (Ram_aacEnc_PsyInternal, PSY_INTERNAL, 1) -C_ALLOC_MEM2 (Ram_aacEnc_PsyStatic, PSY_STATIC, 1, (6)) +C_ALLOC_MEM2 (Ram_aacEnc_PsyStatic, PSY_STATIC, 1, (8)) -C_ALLOC_MEM2 (Ram_aacEnc_PsyInputBuffer, INT_PCM, MAX_INPUT_BUFFER_SIZE, (6)) +C_ALLOC_MEM2 (Ram_aacEnc_PsyInputBuffer, INT_PCM, MAX_INPUT_BUFFER_SIZE, (8)) PSY_DYNAMIC *GetRam_aacEnc_PsyDynamic (int n, UCHAR* dynamic_RAM) { FDK_ASSERT(dynamic_RAM!=0); @@ -139,8 +139,8 @@ C_ALLOC_MEM2 (Ram_aacEnc_PsyInputBuffer, INT_PCM, MAX_INPUT_BUFFER_SIZE, (6)) */ C_ALLOC_MEM2 (Ram_aacEnc_PsyOut, PSY_OUT, 1, (1)) -C_ALLOC_MEM2 (Ram_aacEnc_PsyOutElements, PSY_OUT_ELEMENT, 1, (1)*(6)) -C_ALLOC_MEM2 (Ram_aacEnc_PsyOutChannel, PSY_OUT_CHANNEL, 1, (1)*(6)) +C_ALLOC_MEM2 (Ram_aacEnc_PsyOutElements, PSY_OUT_ELEMENT, 1, (1)*(8)) +C_ALLOC_MEM2 (Ram_aacEnc_PsyOutChannel, PSY_OUT_CHANNEL, 1, (1)*(8)) /* @@ -155,8 +155,8 @@ C_ALLOC_MEM2 (Ram_aacEnc_PsyOutChannel, PSY_OUT_CHANNEL, 1, (1)*(6)) C_ALLOC_MEM (Ram_aacEnc_QCstate, QC_STATE, 1) C_ALLOC_MEM (Ram_aacEnc_AdjustThreshold, ADJ_THR_STATE, 1) -C_ALLOC_MEM2 (Ram_aacEnc_AdjThrStateElement, ATS_ELEMENT, 1, (6)) -C_ALLOC_MEM2 (Ram_aacEnc_ElementBits, ELEMENT_BITS, 1, (6)) +C_ALLOC_MEM2 (Ram_aacEnc_AdjThrStateElement, ATS_ELEMENT, 1, (8)) +C_ALLOC_MEM2 (Ram_aacEnc_ElementBits, ELEMENT_BITS, 1, (8)) C_ALLOC_MEM (Ram_aacEnc_BitCntrState, BITCNTR_STATE, 1) INT *GetRam_aacEnc_BitLookUp(int n, UCHAR* dynamic_RAM) { @@ -175,7 +175,7 @@ C_ALLOC_MEM (Ram_aacEnc_BitCntrState, BITCNTR_STATE, 1) */ C_ALLOC_MEM2 (Ram_aacEnc_QCout, QC_OUT, 1, (1)) -C_ALLOC_MEM2 (Ram_aacEnc_QCelement, QC_OUT_ELEMENT, 1, (1)*(6)) +C_ALLOC_MEM2 (Ram_aacEnc_QCelement, QC_OUT_ELEMENT, (1), (8)) QC_OUT_CHANNEL *GetRam_aacEnc_QCchannel (int n, UCHAR* dynamic_RAM) { FDK_ASSERT(dynamic_RAM!=0); return ((QC_OUT_CHANNEL*) (dynamic_RAM + P_BUF_0 + n*sizeof(QC_OUT_CHANNEL))); diff --git a/libAACenc/src/aacEnc_ram.h b/libAACenc/src/aacEnc_ram.h index 918e279..cf7da7c 100644 --- a/libAACenc/src/aacEnc_ram.h +++ b/libAACenc/src/aacEnc_ram.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -118,7 +118,7 @@ amm-info@iis.fraunhofer.de */ /* define hBitstream size: max AAC framelength is 6144 bits/channel */ -/*#define BUFFER_BITSTR_SIZE ((6400*(6)/bbWordSize) +((bbWordSize - 1) / bbWordSize))*/ +/*#define BUFFER_BITSTR_SIZE ((6400*(8)/bbWordSize) +((bbWordSize - 1) / bbWordSize))*/ struct AAC_ENC { @@ -173,7 +173,7 @@ struct AAC_ENC { ++++++++++++++++++++++++++++++++++++++++++++ */ -#define BUF_SIZE_0 ( ALIGN_SIZE(sizeof(QC_OUT_CHANNEL)*(6)) ) +#define BUF_SIZE_0 ( ALIGN_SIZE(sizeof(QC_OUT_CHANNEL)*(8)) ) #define BUF_SIZE_1 ( ALIGN_SIZE(maxSize(sizeof(PSY_DYNAMIC), \ (BIT_LOOK_UP_SIZE+MERGE_GAIN_LOOK_UP_SIZE))) ) diff --git a/libAACenc/src/aacEnc_rom.cpp b/libAACenc/src/aacEnc_rom.cpp index 48ba668..0cdf5fe 100644 --- a/libAACenc/src/aacEnc_rom.cpp +++ b/libAACenc/src/aacEnc_rom.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/aacEnc_rom.h b/libAACenc/src/aacEnc_rom.h index f25d327..37e5012 100644 --- a/libAACenc/src/aacEnc_rom.h +++ b/libAACenc/src/aacEnc_rom.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/aacenc.cpp b/libAACenc/src/aacenc.cpp index d3f36aa..569662b 100644 --- a/libAACenc/src/aacenc.cpp +++ b/libAACenc/src/aacenc.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -393,7 +393,7 @@ AAC_ENCODER_ERROR FDKaacEnc_Initialize(HANDLE_AAC_ENC hAacEnc, /******************* sanity checks *******************/ /* check config structure */ - if (config->nChannels < 1 || config->nChannels > (6)) { + if (config->nChannels < 1 || config->nChannels > (8)) { return AAC_ENC_UNSUPPORTED_CHANNELCONFIG; } @@ -558,6 +558,13 @@ AAC_ENCODER_ERROR FDKaacEnc_Initialize(HANDLE_AAC_ENC hAacEnc, qcInit.channelMapping = &hAacEnc->channelMapping; qcInit.sceCpe = 0; + if ((config->bitrateMode>=1) && (config->bitrateMode<=5)) { + qcInit.averageBits = (averageBitsPerFrame+7)&~7; + qcInit.bitRes = MIN_BUFSIZE_PER_EFF_CHAN*cm->nChannelsEff; + qcInit.maxBits = MIN_BUFSIZE_PER_EFF_CHAN*cm->nChannelsEff; + qcInit.minBits = 0; + } + else { int maxBitres; qcInit.averageBits = (averageBitsPerFrame+7)&~7; @@ -571,6 +578,8 @@ AAC_ENCODER_ERROR FDKaacEnc_Initialize(HANDLE_AAC_ENC hAacEnc, qcInit.minBits = (config->minBitsPerFrame!=-1) ? fixMax(qcInit.minBits, config->minBitsPerFrame) : qcInit.minBits; } + qcInit.sampleRate = config->sampleRate; + qcInit.advancedBitsToPe = isLowDelay(config->audioObjectType) ? 1 : 0 ; qcInit.nSubFrames = config->nSubFrames; qcInit.padding.paddingRest = config->sampleRate; diff --git a/libAACenc/src/aacenc.h b/libAACenc/src/aacenc.h index 517b0dc..ed167c2 100644 --- a/libAACenc/src/aacenc.h +++ b/libAACenc/src/aacenc.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -113,7 +113,7 @@ typedef enum { /* initialization errors */ aac_enc_init_error_start = 0x2000, AAC_ENC_INVALID_HANDLE = 0x2020, /*!< The handle passed to the function call was invalid (probably NULL). */ - AAC_ENC_INVALID_FRAME_LENGTH = 0x2080, /*!< Invalid frame length (must be 1024 or 960). */ + AAC_ENC_INVALID_FRAME_LENGTH = 0x2080, /*!< Invalid frame length. */ AAC_ENC_INVALID_N_CHANNELS = 0x20e0, /*!< Invalid amount of audio input channels. */ AAC_ENC_INVALID_SFB_TABLE = 0x2140, /*!< Internal encoder error. */ @@ -154,7 +154,7 @@ typedef enum { #define ANC_DATA_BUFFERSIZE 1024 /* ancBuffer size */ -#define MAX_TOTAL_EXT_PAYLOADS (((6) * (1)) + (2+2)) +#define MAX_TOTAL_EXT_PAYLOADS (((8) * (1)) + (2+2)) typedef enum { @@ -205,6 +205,8 @@ struct AACENC_CONFIG { INT maxBitsPerFrame; /* maximum number of bits in AU */ INT bitreservoir; /* size of bitreservoir */ + UINT sbrRatio; /* sbr sampling rate ratio: dual- or single-rate */ + UCHAR useTns; /* flag: use temporal noise shaping */ UCHAR usePns; /* flag: use perceptual noise substitution */ UCHAR useIS; /* flag: use intensity coding */ diff --git a/libAACenc/src/aacenc_hcr.cpp b/libAACenc/src/aacenc_hcr.cpp index 91c46a9..316623a 100644 --- a/libAACenc/src/aacenc_hcr.cpp +++ b/libAACenc/src/aacenc_hcr.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/aacenc_hcr.h b/libAACenc/src/aacenc_hcr.h index 257459c..934247a 100644 --- a/libAACenc/src/aacenc_hcr.h +++ b/libAACenc/src/aacenc_hcr.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/aacenc_lib.cpp b/libAACenc/src/aacenc_lib.cpp index a4291d5..95c08b3 100644 --- a/libAACenc/src/aacenc_lib.cpp +++ b/libAACenc/src/aacenc_lib.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -97,8 +97,8 @@ amm-info@iis.fraunhofer.de /* Encoder library info */ #define AACENCODER_LIB_VL0 3 -#define AACENCODER_LIB_VL1 3 -#define AACENCODER_LIB_VL2 3 +#define AACENCODER_LIB_VL1 4 +#define AACENCODER_LIB_VL2 12 #define AACENCODER_LIB_TITLE "AAC Encoder" #define AACENCODER_LIB_BUILD_DATE __DATE__ #define AACENCODER_LIB_BUILD_TIME __TIME__ @@ -118,10 +118,12 @@ amm-info@iis.fraunhofer.de #define SBL(fl) (fl/8) /*!< Short block length (hardcoded to 8 short blocks per long block) */ #define BSLA(fl) (4*SBL(fl)+SBL(fl)/2) /*!< AAC block switching look-ahead */ #define DELAY_AAC(fl) (fl+BSLA(fl)) /*!< MDCT + blockswitching */ -#define DELAY_AACELD(fl) ( (fl) + ((fl)/2) ) /*!< ELD FB delay */ +#define DELAY_AACELD(fl) ((fl)/2) /*!< ELD FB delay (no framing delay included) */ #define INPUTBUFFER_SIZE (1537+100+2048) +#define DEFAULT_HEADER_PERIOD_REPETITION_RATE 10 /*!< Default header repetition rate used in transport library and for SBR header. */ + //////////////////////////////////////////////////////////////////////////////////// /** * Flags to characterize encoder modules to be supported in present instance. @@ -164,7 +166,8 @@ typedef struct { UCHAR userMetaDataMode; /*!< Meta data library configuration. */ - UCHAR userSbrEnabled; + UCHAR userSbrEnabled; /*!< Enable SBR for ELD. */ + UINT userSbrRatio; /*!< SBR sampling rate ratio. Dual- or single-rate. */ } USER_PARAM; @@ -212,8 +215,8 @@ struct AACENCODER AACENC_EXT_PAYLOAD extPayload [MAX_TOTAL_EXT_PAYLOADS]; /* Extension payload */ - UCHAR extPayloadData [(1)][(6)][MAX_PAYLOAD_SIZE]; - UINT extPayloadSize [(1)][(6)]; /* payload sizes in bits */ + UCHAR extPayloadData [(1)][(8)][MAX_PAYLOAD_SIZE]; + UINT extPayloadSize [(1)][(8)]; /* payload sizes in bits */ ULONG InitFlags; /* internal status to treggier re-initialization */ @@ -227,12 +230,92 @@ struct AACENCODER UINT encoder_modis; - /* Capabity flags */ + /* Capability flags */ UINT CAPF_tpEnc; } ; -//////////////////////////////////////////////////////////////////////////////////// +typedef struct +{ + ULONG samplingRate; /*!< Encoder output sampling rate. */ + ULONG bitrateRange; /*!< Lower bitrate range for config entry. */ + + UCHAR lowDelaySbr; /*!< 0: ELD sbr off, + 1: ELD sbr on */ + + UCHAR downsampledSbr; /*!< 0: ELD with dualrate sbr, + 1: ELD with downsampled sbr */ + +} ELD_SBR_CONFIGURATOR; + +/** + * \brief This table defines ELD/SBR default configurations. + */ +static const ELD_SBR_CONFIGURATOR eldSbrAutoConfigTab[] = +{ + { 48000, 0, 1, 0 }, + { 48000, 64001, 0, 0 }, + + { 44100, 0, 1, 0 }, + { 44100, 64001, 0, 0 }, + + { 32000, 0, 1, 0 }, + { 32000, 28000, 1, 1 }, + { 32000, 56000, 0, 0 }, + + { 24000, 0, 1, 1 }, + { 24000, 40000, 0, 0 }, + + { 16000, 0, 1, 1 }, + { 16000, 28000, 0, 0 } + +}; + +/* + * \brief Configure SBR for ELD configuration. + * + * This function finds default SBR configuration for ELD based on sampling rate and channel bitrate. + * Outputparameters are SBR on/off, and SBR ratio. + * + * \param samplingRate Audio signal sampling rate. + * \param channelMode Channel configuration to be used. + * \param totalBitrate Overall bitrate. + * \param eldSbr Pointer to eldSbr parameter, filled on return. + * \param eldSbrRatio Pointer to eldSbrRatio parameter, filled on return. + * + * \return - AACENC_OK, all fine. + * - AACENC_INVALID_CONFIG, on failure. + */ +static AACENC_ERROR eldSbrConfigurator( + const ULONG samplingRate, + const CHANNEL_MODE channelMode, + const ULONG totalBitrate, + UINT * const eldSbr, + UINT * const eldSbrRatio + ) +{ + AACENC_ERROR err = AACENC_OK; + int i, cfgIdx = -1; + const ULONG channelBitrate = totalBitrate / FDKaacEnc_GetChannelModeConfiguration(channelMode)->nChannelsEff; + + for (i=0; i<(sizeof(eldSbrAutoConfigTab)/sizeof(ELD_SBR_CONFIGURATOR)); i++) { + if ( (samplingRate <= eldSbrAutoConfigTab[i].samplingRate) + && (channelBitrate >= eldSbrAutoConfigTab[i].bitrateRange) ) + { + cfgIdx = i; + } + } + + if (cfgIdx != -1) { + *eldSbr = (eldSbrAutoConfigTab[cfgIdx].lowDelaySbr==0) ? 0 : 1; + *eldSbrRatio = (eldSbrAutoConfigTab[cfgIdx].downsampledSbr==0) ? 2 : 1; + } + else { + err = AACENC_INVALID_CONFIG; /* no default configuration for eld-sbr available. */ + } + + return err; +} static inline INT isSbrActive(const HANDLE_AACENC_CONFIG hAacConfig) { @@ -253,6 +336,70 @@ static inline INT isSbrActive(const HANDLE_AACENC_CONFIG hAacConfig) return ( sbrUsed ); } +static inline INT isPsActive(const AUDIO_OBJECT_TYPE audioObjectType) +{ + INT psUsed = 0; + + if ( (audioObjectType==AOT_PS) + || (audioObjectType==AOT_MP2_PS) + || (audioObjectType==AOT_DABPLUS_PS) + || (audioObjectType==AOT_DRM_MPEG_PS) ) + { + psUsed = 1; + } + + return ( psUsed ); +} + +static SBR_PS_SIGNALING getSbrSignalingMode( + const AUDIO_OBJECT_TYPE audioObjectType, + const TRANSPORT_TYPE transportType, + const UCHAR transportSignaling, + const UINT sbrRatio + ) + +{ + SBR_PS_SIGNALING sbrSignaling; + + if (transportType==TT_UNKNOWN || sbrRatio==0) { + sbrSignaling = SIG_UNKNOWN; /* Needed parameters have not been set */ + return sbrSignaling; + } else { + sbrSignaling = SIG_IMPLICIT; /* default: implicit signaling */ + } + + if ((audioObjectType==AOT_AAC_LC) || (audioObjectType==AOT_SBR) || (audioObjectType==AOT_PS) || + (audioObjectType==AOT_MP2_AAC_LC) || (audioObjectType==AOT_MP2_SBR) || (audioObjectType==AOT_MP2_PS) ) { + switch (transportType) { + case TT_MP4_ADIF: + case TT_MP4_ADTS: + sbrSignaling = SIG_IMPLICIT; /* For MPEG-2 transport types, only implicit signaling is possible */ + break; + + case TT_MP4_RAW: + case TT_MP4_LATM_MCP1: + case TT_MP4_LATM_MCP0: + case TT_MP4_LOAS: + default: + if ( transportSignaling==0xFF ) { + /* Defaults */ + if ( sbrRatio==1 ) { + sbrSignaling = SIG_EXPLICIT_HIERARCHICAL; /* For downsampled SBR, explicit signaling is mandatory */ + } else { + sbrSignaling = SIG_IMPLICIT; /* For dual-rate SBR, implicit signaling is default */ + } + } else { + /* User set parameters */ + /* Attention: Backward compatible explicit signaling does only work with AMV1 for LATM/LOAS */ + sbrSignaling = (SBR_PS_SIGNALING)transportSignaling; + } + break; + } + } + + return sbrSignaling; +} + /**************************************************************************** Allocate Encoder ****************************************************************************/ @@ -266,8 +413,12 @@ C_ALLOC_MEM (_AacEncoder, AACENCODER, 1) /* * Map Encoder specific config structures to CODER_CONFIG. */ -static -void FDKaacEnc_MapConfig(CODER_CONFIG *cc, USER_PARAM *extCfg, HANDLE_AACENC_CONFIG hAacConfig) +static void FDKaacEnc_MapConfig( + CODER_CONFIG *const cc, + const USER_PARAM *const extCfg, + const SBR_PS_SIGNALING sbrSignaling, + const HANDLE_AACENC_CONFIG hAacConfig + ) { AUDIO_OBJECT_TYPE transport_AOT = AOT_NULL_OBJECT; FDKmemclear(cc, sizeof(CODER_CONFIG)); @@ -304,17 +455,26 @@ void FDKaacEnc_MapConfig(CODER_CONFIG *cc, USER_PARAM *extCfg, HANDLE_AACENC_CON } /* Configure extension aot. */ - if (extCfg->userTpSignaling==0) { + if (sbrSignaling==SIG_IMPLICIT) { cc->extAOT = AOT_NULL_OBJECT; /* implicit */ } else { - if ( (extCfg->userTpSignaling==1) && ( (transport_AOT==AOT_SBR) || (transport_AOT==AOT_PS) ) ) { + if ( (sbrSignaling==SIG_EXPLICIT_BW_COMPATIBLE) && ( (transport_AOT==AOT_SBR) || (transport_AOT==AOT_PS) ) ) { cc->extAOT = AOT_SBR; /* explicit backward compatible */ } else { cc->extAOT = transport_AOT; /* explicit hierarchical */ } } + + if ( (transport_AOT==AOT_SBR) || (transport_AOT==AOT_PS) ) { + cc->sbrPresent=1; + if (transport_AOT==AOT_PS) { + cc->psPresent=1; + } + } + cc->sbrSignaling = sbrSignaling; + cc->extSamplingRate = extCfg->userSamplerate; cc->bitRate = hAacConfig->bitRate; cc->noChannels = hAacConfig->nChannels; @@ -335,7 +495,7 @@ void FDKaacEnc_MapConfig(CODER_CONFIG *cc, USER_PARAM *extCfg, HANDLE_AACENC_CON case TT_MP4_ADTS: case TT_MP4_LOAS: case TT_MP4_LATM_MCP1: - cc->headerPeriod = 10; + cc->headerPeriod = DEFAULT_HEADER_PERIOD_REPETITION_RATE; break; default: cc->headerPeriod = 0; @@ -351,7 +511,6 @@ void FDKaacEnc_MapConfig(CODER_CONFIG *cc, USER_PARAM *extCfg, HANDLE_AACENC_CON case AOT_MP2_SBR: case AOT_MP2_PS: cc->flags &= ~CC_MPEG_ID; /* Required for ADTS. */ - //config->userTpSignaling=0; cc->extAOT = AOT_NULL_OBJECT; break; default: @@ -411,7 +570,7 @@ AAC_ENCODER_ERROR aacEncDefaultConfig(HANDLE_AACENC_CONFIG hAacConfig, /* make reasonable default settings */ FDKaacEnc_AacInitDefaultConfig (hAacConfig); - /* clear confure structure and copy default settings */ + /* clear configuration structure and copy default settings */ FDKmemclear(config, sizeof(USER_PARAM)); /* copy encoder configuration settings */ @@ -438,7 +597,7 @@ AAC_ENCODER_ERROR aacEncDefaultConfig(HANDLE_AACENC_CONFIG hAacConfig, /* initialize transport parameters */ config->userTpType = TT_UNKNOWN; config->userTpAmxv = 0; - config->userTpSignaling = 0; /* default, implicit signaling */ + config->userTpSignaling = 0xFF; /* choose signaling automatically */ config->userTpNsubFrames = 1; config->userTpProtection = 0; /* not crc protected*/ config->userTpHeaderPeriod = 0xFF; /* header period in auto mode */ @@ -447,6 +606,14 @@ AAC_ENCODER_ERROR aacEncDefaultConfig(HANDLE_AACENC_CONFIG hAacConfig, config->userAncDataRate = 0; + /* SBR rate is set to 0 here, which means it should be set automatically + in FDKaacEnc_AdjustEncSettings() if the user did not set a rate + expilicitely. */ + config->userSbrRatio = 0; + + /* SBR enable set to -1 means to inquire ELD audio configurator for reasonable configuration. */ + config->userSbrEnabled = -1; + return AAC_ENC_OK; } @@ -481,6 +648,7 @@ INT aacEncoder_LimitBitrate( INT bitRate, const INT nSubFrames, const INT sbrActive, + const INT sbrDownSampleRate, const AUDIO_OBJECT_TYPE aot ) { @@ -490,8 +658,7 @@ INT aacEncoder_LimitBitrate( FDKaacEnc_InitChannelMapping(channelMode, CH_ORDER_MPEG, &cm); if (sbrActive) { - /* Assume SBR rate ratio of 2:1 */ - coreSamplingRate = samplingRate / 2; + coreSamplingRate = samplingRate >> (sbrEncoder_IsSingleRatePossible(aot) ? (sbrDownSampleRate-1):1); } else { coreSamplingRate = samplingRate; } @@ -506,7 +673,7 @@ INT aacEncoder_LimitBitrate( bitRate = FDKmin(576000*nChannels, bitRate); /*bitRate = FDKmax(0*nChannels, bitRate);*/ } - + /* Limit bit rate in respect to the core coder */ bitRate = FDKaacEnc_LimitBitrate( @@ -525,56 +692,58 @@ INT aacEncoder_LimitBitrate( /* Limit bit rate in respect to available SBR modes if active */ if (sbrActive) { - SBR_ELEMENT_INFO sbrElInfo[6]; - INT sbrBitRate = 0; - int e, tooBig=-1; + int numIterations = 0; + INT initialBitrate, adjustedBitrate; + initialBitrate = adjustedBitrate = bitRate; - FDK_ASSERT(cm.nElements <= (6)); + /* Find total bitrate which provides valid configuration for each SBR element. */ + do { + int e; + SBR_ELEMENT_INFO sbrElInfo[(8)]; + FDK_ASSERT(cm.nElements <= (8)); - /* Get bit rate for each SBR element */ - aacEncDistributeSbrBits(&cm, sbrElInfo, bitRate); + initialBitrate = adjustedBitrate; - for (e=0; e<cm.nElements; e++) - { - INT sbrElementBitRateIn, sbrBitRateOut; + /* Get bit rate for each SBR element */ + aacEncDistributeSbrBits(&cm, sbrElInfo, initialBitrate); - if (cm.elInfo[e].elType != ID_SCE && cm.elInfo[e].elType != ID_CPE) { - continue; - } - sbrElementBitRateIn = sbrElInfo[e].bitRate; - sbrBitRateOut = sbrEncoder_LimitBitRate(sbrElementBitRateIn , cm.elInfo[e].nChannelsInEl, coreSamplingRate, aot); - if (sbrBitRateOut == 0) { - return 0; - } - if (sbrElementBitRateIn < sbrBitRateOut) { - FDK_ASSERT(tooBig != 1); - tooBig = 0; - if (e == 0) { - sbrBitRate = 0; - } - } - if (sbrElementBitRateIn > sbrBitRateOut) { - FDK_ASSERT(tooBig != 0); - tooBig = 1; - if (e == 0) { - sbrBitRate = 5000000; - } - } - if (tooBig != -1) + for (e=0; e<cm.nElements; e++) { - INT sbrBitRateLimit = (INT)fDivNorm((FIXP_DBL)sbrBitRateOut, cm.elInfo[e].relativeBits); - if (tooBig) { - sbrBitRate = fMin(sbrBitRate, sbrBitRateLimit-16); - FDK_ASSERT( (INT)fMultNorm(cm.elInfo[e].relativeBits, (FIXP_DBL)sbrBitRate) < sbrBitRateOut); - } else { - sbrBitRate = fMax(sbrBitRate, sbrBitRateLimit+16); - FDK_ASSERT( (INT)fMultNorm(cm.elInfo[e].relativeBits, (FIXP_DBL)sbrBitRate) >= sbrBitRateOut); + INT sbrElementBitRateIn, sbrBitRateOut; + + if (cm.elInfo[e].elType != ID_SCE && cm.elInfo[e].elType != ID_CPE) { + continue; } - } - } - if (tooBig != -1) { - bitRate = sbrBitRate; - } + sbrElementBitRateIn = sbrElInfo[e].bitRate; + sbrBitRateOut = sbrEncoder_LimitBitRate(sbrElementBitRateIn , cm.elInfo[e].nChannelsInEl, coreSamplingRate, aot); + if (sbrBitRateOut == 0) { + return 0; + } + + /* If bitrates don't match, distribution and limiting needs to be determined again. + Abort element loop and restart with adapted bitrate. */ + if (sbrElementBitRateIn != sbrBitRateOut) { + + if (sbrElementBitRateIn < sbrBitRateOut) { + adjustedBitrate = fMax(initialBitrate, (INT)fDivNorm((FIXP_DBL)(sbrBitRateOut+8), cm.elInfo[e].relativeBits)); + break; + } + + if (sbrElementBitRateIn > sbrBitRateOut) { + adjustedBitrate = fMin(initialBitrate, (INT)fDivNorm((FIXP_DBL)(sbrBitRateOut-8), cm.elInfo[e].relativeBits)); + break; + } + + } /* sbrElementBitRateIn != sbrBitRateOut */ + + } /* elements */ + + numIterations++; /* restrict iteration to worst case of num elements */ + + } while ( (initialBitrate!=adjustedBitrate) && (numIterations<=cm.nElements) ); + + /* Unequal bitrates mean that no reasonable bitrate configuration found. */ + bitRate = (initialBitrate==adjustedBitrate) ? adjustedBitrate : 0; } FDK_ASSERT(bitRate > 0); @@ -624,26 +793,12 @@ AACENC_ERROR FDKaacEnc_AdjustEncSettings(HANDLE_AACENCODER hAacEncoder, case AOT_MP2_SBR: case AOT_MP2_PS: hAacConfig->usePns = 0; - if (config->userTpSignaling!=0) { - return AACENC_INVALID_CONFIG; /* only implicit signaling allowed */ - } case AOT_AAC_LC: case AOT_SBR: case AOT_PS: config->userTpType = (config->userTpType!=TT_UNKNOWN) ? config->userTpType : TT_MP4_ADTS; hAacConfig->framelength = (config->userFramelength!=(UINT)-1) ? config->userFramelength : 1024; - if (hAacConfig->framelength != 1024 && hAacConfig->framelength != 960) { - return AACENC_INVALID_CONFIG; - } - break; - case AOT_ER_AAC_LC: - hAacConfig->epConfig = 0; - hAacConfig->syntaxFlags |= AC_ER; - hAacConfig->syntaxFlags |= ((config->userErTools & 0x1) ? AC_ER_VCB11 : 0); - hAacConfig->syntaxFlags |= ((config->userErTools & 0x2) ? AC_ER_HCR : 0); - config->userTpType = (config->userTpType!=TT_UNKNOWN) ? config->userTpType : TT_MP4_LOAS; - hAacConfig->framelength = (config->userFramelength!=(UINT)-1) ? config->userFramelength : 1024; - if (hAacConfig->framelength != 1024 && hAacConfig->framelength != 960) { + if (hAacConfig->framelength != 1024) { return AACENC_INVALID_CONFIG; } break; @@ -665,7 +820,7 @@ AACENC_ERROR FDKaacEnc_AdjustEncSettings(HANDLE_AACENCODER hAacEncoder, hAacConfig->syntaxFlags |= ((config->userErTools & 0x1) ? AC_ER_VCB11 : 0); hAacConfig->syntaxFlags |= ((config->userErTools & 0x2) ? AC_ER_HCR : 0); hAacConfig->syntaxFlags |= ((config->userErTools & 0x4) ? AC_ER_RVLC : 0); - hAacConfig->syntaxFlags |= ((config->userSbrEnabled) ? AC_SBR_PRESENT : 0); + hAacConfig->syntaxFlags |= ((config->userSbrEnabled==1) ? AC_SBR_PRESENT : 0); config->userTpType = (config->userTpType!=TT_UNKNOWN) ? config->userTpType : TT_MP4_LOAS; hAacConfig->framelength = (config->userFramelength!=(UINT)-1) ? config->userFramelength : 512; if (hAacConfig->framelength != 512 && hAacConfig->framelength != 480) { @@ -676,19 +831,6 @@ AACENC_ERROR FDKaacEnc_AdjustEncSettings(HANDLE_AACENCODER hAacEncoder, break; } - /* We need the frame length to call aacEncoder_LimitBitrate() */ - hAacConfig->bitRate = aacEncoder_LimitBitrate( - NULL, - hAacConfig->sampleRate, - hAacConfig->framelength, - hAacConfig->nChannels, - hAacConfig->channelMode, - config->userBitrate, - hAacConfig->nSubFrames, - isSbrActive(hAacConfig), - hAacConfig->audioObjectType - ); - switch ( hAacConfig->audioObjectType ) { case AOT_ER_AAC_LD: case AOT_ER_AAC_ELD: @@ -696,7 +838,7 @@ AACENC_ERROR FDKaacEnc_AdjustEncSettings(HANDLE_AACENCODER hAacEncoder, hAacConfig->bitrateMode = 0; } if (config->userBitrateMode==0) { - hAacConfig->bitreservoir = 50*config->nChannels; /* default, reduced bitreservoir */ + hAacConfig->bitreservoir = 100*config->nChannels; /* default, reduced bitreservoir */ } if (hAacConfig->bitrateMode!=0) { return AACENC_INVALID_CONFIG; @@ -706,24 +848,7 @@ AACENC_ERROR FDKaacEnc_AdjustEncSettings(HANDLE_AACENCODER hAacEncoder, break; } - if (hAacConfig->epConfig >= 0) { - hAacConfig->syntaxFlags |= AC_ER; - if (((INT)hAacConfig->channelMode < 1) || ((INT)hAacConfig->channelMode > 7)) { - return AACENC_INVALID_CONFIG; /* Cannel config 0 not supported. */ - } - } - - if ( FDKaacEnc_DetermineEncoderMode(&hAacConfig->channelMode, hAacConfig->nChannels) != AAC_ENC_OK) { - return AACENC_INVALID_CONFIG; /* nChannels doesn't match chMode, this is just a check-up */ - } - - if ( (hAacConfig->nChannels > hAacEncoder->nMaxAacChannels) - || ( (FDKaacEnc_GetChannelModeConfiguration(hAacConfig->channelMode)->nChannelsEff > hAacEncoder->nMaxSbrChannels) && - isSbrActive(hAacConfig) ) - ) - { - return AACENC_INVALID_CONFIG; /* not enough channels allocated */ - } + hAacConfig->bitRate = config->userBitrate; /* get bitrate in VBR configuration */ if ( (hAacConfig->bitrateMode>=1) && (hAacConfig->bitrateMode<=5) ) { @@ -734,25 +859,92 @@ AACENC_ERROR FDKaacEnc_AdjustEncSettings(HANDLE_AACENCODER hAacEncoder, /* Set default bitrate if no external bitrate declared. */ - if (hAacConfig->bitRate==-1) { + if ( (hAacConfig->bitrateMode==0) && (config->userBitrate==(UINT)-1) ) { INT bitrate = FDKaacEnc_GetChannelModeConfiguration(hAacConfig->channelMode)->nChannelsEff * hAacConfig->sampleRate; - switch (hAacConfig->audioObjectType) + + if ( isPsActive(hAacConfig->audioObjectType) ) { + hAacConfig->bitRate = (bitrate>>1); /* 0.5 bit per sample */ + } + else if ( isSbrActive(hAacConfig) ) + { + if ( (config->userSbrRatio==2) || ((config->userSbrRatio==0)&&(hAacConfig->audioObjectType!=AOT_ER_AAC_ELD)) ) { + hAacConfig->bitRate = (bitrate + (bitrate>>2))>>1; /* 0.625 bits per sample */ + } + if ( (config->userSbrRatio==1) || ((config->userSbrRatio==0)&&(hAacConfig->audioObjectType==AOT_ER_AAC_ELD)) ) { + hAacConfig->bitRate = (bitrate + (bitrate>>3)); /* 1.125 bits per sample */ + } + } else { - case AOT_AAC_LC: hAacConfig->bitRate = bitrate + (bitrate>>1); /* 1.5 bits per sample */ - break; - case AOT_SBR: - hAacConfig->bitRate = (bitrate + (bitrate>>2))>>1; /* 0.625 bits per sample */ - break; - case AOT_PS: - hAacConfig->bitRate = (bitrate>>1); /* 0.5 bit per sample */ - break; - default: - hAacConfig->bitRate = bitrate; - break; } } + /* Initialize SBR parameters */ + if ( (hAacConfig->audioObjectType==AOT_ER_AAC_ELD) + && (config->userSbrEnabled == (UCHAR)-1) && (config->userSbrRatio==0) ) + { + UINT eldSbr = 0; + UINT eldSbrRatio = 0; + + if ( AACENC_OK!=(err=eldSbrConfigurator( + hAacConfig->sampleRate, + hAacConfig->channelMode, + hAacConfig->bitRate, + &eldSbr, + &eldSbrRatio)) ) + { + return err; + } + + hAacConfig->syntaxFlags |= ((eldSbr) ? AC_SBR_PRESENT : 0); + hAacConfig->sbrRatio = eldSbrRatio; + } + else + if ( (config->userSbrRatio==0) && (isSbrActive(hAacConfig)) ) { + /* Automatic SBR ratio configuration + * - downsampled SBR for ELD + * - otherwise always dualrate SBR + */ + hAacConfig->sbrRatio = (hAacConfig->audioObjectType==AOT_ER_AAC_ELD) ? 1 : 2; + } + else { + /* SBR ratio has been set by the user, so use it. */ + hAacConfig->sbrRatio = config->userSbrRatio; + } + + { + UCHAR tpSignaling=getSbrSignalingMode(hAacConfig->audioObjectType, config->userTpType, config->userTpSignaling, hAacConfig->sbrRatio); + + if ( (hAacConfig->audioObjectType==AOT_AAC_LC || hAacConfig->audioObjectType==AOT_SBR || hAacConfig->audioObjectType==AOT_PS) && + (config->userTpType==TT_MP4_LATM_MCP1 || config->userTpType==TT_MP4_LATM_MCP0 || config->userTpType==TT_MP4_LOAS) && + (tpSignaling==1) && (config->userTpAmxv==0) ) { + /* For backward compatible explicit signaling, AMV1 has to be active */ + return AACENC_INVALID_CONFIG; + } + + if ( (hAacConfig->audioObjectType==AOT_AAC_LC || hAacConfig->audioObjectType==AOT_SBR || hAacConfig->audioObjectType==AOT_PS) && + (tpSignaling==0) && (hAacConfig->sbrRatio==1)) { + /* Downsampled SBR has to be signaled explicitely (for transmission of SBR sampling fequency) */ + return AACENC_INVALID_CONFIG; + } + } + + + + /* We need the frame length to call aacEncoder_LimitBitrate() */ + hAacConfig->bitRate = aacEncoder_LimitBitrate( + NULL, + hAacConfig->sampleRate, + hAacConfig->framelength, + hAacConfig->nChannels, + hAacConfig->channelMode, + hAacConfig->bitRate, + hAacConfig->nSubFrames, + isSbrActive(hAacConfig), + hAacConfig->sbrRatio, + hAacConfig->audioObjectType + ); + /* Configure PNS */ if ( ((hAacConfig->bitrateMode>=1) && (hAacConfig->bitrateMode<=5)) /* VBR without PNS. */ || (hAacConfig->useTns == 0) ) /* TNS required. */ @@ -760,12 +952,32 @@ AACENC_ERROR FDKaacEnc_AdjustEncSettings(HANDLE_AACENCODER hAacEncoder, hAacConfig->usePns = 0; } + if (hAacConfig->epConfig >= 0) { + hAacConfig->syntaxFlags |= AC_ER; + if (((INT)hAacConfig->channelMode < 1) || ((INT)hAacConfig->channelMode > 7)) { + return AACENC_INVALID_CONFIG; /* Cannel config 0 not supported. */ + } + } + + if ( FDKaacEnc_DetermineEncoderMode(&hAacConfig->channelMode, hAacConfig->nChannels) != AAC_ENC_OK) { + return AACENC_INVALID_CONFIG; /* nChannels doesn't match chMode, this is just a check-up */ + } + + if ( (hAacConfig->nChannels > hAacEncoder->nMaxAacChannels) + || ( (FDKaacEnc_GetChannelModeConfiguration(hAacConfig->channelMode)->nChannelsEff > hAacEncoder->nMaxSbrChannels) && + isSbrActive(hAacConfig) ) + ) + { + return AACENC_INVALID_CONFIG; /* not enough channels allocated */ + } + /* Meta data restriction. */ switch (hAacConfig->audioObjectType) { /* Allow metadata support */ case AOT_AAC_LC: case AOT_SBR: + case AOT_PS: hAacEncoder->metaDataAllowed = 1; if (((INT)hAacConfig->channelMode < 1) || ((INT)hAacConfig->channelMode > 7)) { config->userMetaDataMode = 0; @@ -849,10 +1061,8 @@ static AACENC_ERROR aacEncInit(HANDLE_AACENCODER hAacEncoder, ((InitFlags & AACENC_INIT_CONFIG) || (InitFlags & AACENC_INIT_STATES)) ) { INT sbrError; - SBR_ELEMENT_INFO sbrElInfo[(6)]; + SBR_ELEMENT_INFO sbrElInfo[(8)]; CHANNEL_MAPPING channelMapping; - - AUDIO_OBJECT_TYPE aot = hAacConfig->audioObjectType; if ( FDKaacEnc_InitChannelMapping(hAacConfig->channelMode, hAacConfig->channelOrder, @@ -862,7 +1072,7 @@ static AACENC_ERROR aacEncInit(HANDLE_AACENCODER hAacEncoder, } /* Check return value and if the SBR encoder can handle enough elements */ - if (channelMapping.nElements > (6)) { + if (channelMapping.nElements > (8)) { return AACENC_INIT_ERROR; } @@ -881,15 +1091,17 @@ static AACENC_ERROR aacEncInit(HANDLE_AACENCODER hAacEncoder, &aacBufferOffset, &hAacConfig->nChannels, &hAacConfig->sampleRate, + &hAacConfig->sbrRatio, &frameLength, - &hAacConfig->audioObjectType, + hAacConfig->audioObjectType, &hAacEncoder->nDelay, (hAacConfig->audioObjectType == AOT_ER_AAC_ELD) ? 1 : TRANS_FAC, + (config->userTpHeaderPeriod!=0xFF) ? config->userTpHeaderPeriod : DEFAULT_HEADER_PERIOD_REPETITION_RATE, initFlag ); /* Suppress AOT reconfiguration and check error status. */ - if ( sbrError || (hAacConfig->audioObjectType!=aot) ) { + if (sbrError) { return AACENC_INIT_SBR_ERROR; } @@ -915,7 +1127,11 @@ static AACENC_ERROR aacEncInit(HANDLE_AACENCODER hAacEncoder, { UINT flags = 0; - FDKaacEnc_MapConfig(&hAacEncoder->coderConfig, config, hAacConfig); + FDKaacEnc_MapConfig( + &hAacEncoder->coderConfig, + config, + getSbrSignalingMode(hAacConfig->audioObjectType, config->userTpType, config->userTpSignaling, hAacConfig->sbrRatio), + hAacConfig); /* create flags for transport encoder */ if (config->userTpAmxv == 1) { @@ -958,7 +1174,7 @@ static AACENC_ERROR aacEncInit(HANDLE_AACENCODER hAacEncoder, INT inputDataDelay = DELAY_AAC(hAacConfig->framelength); if ( isSbrActive(hAacConfig) && hSbrEncoder!=NULL) { - inputDataDelay = 2*inputDataDelay + sbrEncoder_GetInputDataDelay(*hSbrEncoder); + inputDataDelay = hAacConfig->sbrRatio*inputDataDelay + sbrEncoder_GetInputDataDelay(*hSbrEncoder); } if ( FDK_MetadataEnc_Init(hAacEncoder->hMetadataEnc, @@ -1033,8 +1249,8 @@ AACENC_ERROR aacEncOpen( /* Determine max channel configuration. */ if (maxChannels==0) { - hAacEncoder->nMaxAacChannels = (6); - hAacEncoder->nMaxSbrChannels = (6); + hAacEncoder->nMaxAacChannels = (8); + hAacEncoder->nMaxSbrChannels = (8); } else { hAacEncoder->nMaxAacChannels = (maxChannels&0x00FF); @@ -1042,15 +1258,15 @@ AACENC_ERROR aacEncOpen( hAacEncoder->nMaxSbrChannels = (maxChannels&0xFF00) ? (maxChannels>>8) : hAacEncoder->nMaxAacChannels; } - if ( (hAacEncoder->nMaxAacChannels>(6)) || (hAacEncoder->nMaxSbrChannels>(6)) ) { + if ( (hAacEncoder->nMaxAacChannels>(8)) || (hAacEncoder->nMaxSbrChannels>(8)) ) { err = AACENC_INVALID_CONFIG; goto bail; } } /* maxChannels==0 */ /* Max number of elements could be tuned any more. */ - hAacEncoder->nMaxAacElements = fixMin((6), hAacEncoder->nMaxAacChannels); - hAacEncoder->nMaxSbrElements = fixMin((6), hAacEncoder->nMaxSbrChannels); + hAacEncoder->nMaxAacElements = fixMin((8), hAacEncoder->nMaxAacChannels); + hAacEncoder->nMaxSbrElements = fixMin((8), hAacEncoder->nMaxSbrChannels); hAacEncoder->nMaxSubFrames = (1); @@ -1108,7 +1324,7 @@ AACENC_ERROR aacEncOpen( goto bail; } else { - C_ALLOC_SCRATCH_START(pLibInfo, LIB_INFO, FDK_MODULE_LAST); + C_ALLOC_SCRATCH_START(pLibInfo, LIB_INFO, FDK_MODULE_LAST); FDKinitLibInfo( pLibInfo); transportEnc_GetLibInfo( pLibInfo ); @@ -1343,8 +1559,12 @@ AACENC_ERROR aacEncEncode( for (i=0; i<(INT)nMetaDataExtensions; i++) { /* Get meta data extension payload. */ hAacEncoder->extPayload[nExtensions++] = pMetaDataExtPayload[i]; } - if (matrix_mixdown_idx!=-1) { /* Set matrix mixdown coefficient. */ - UINT pceValue = (UINT)( (1<<3) | ((matrix_mixdown_idx&0x2)<<1) | 1 ); + + if ( (matrix_mixdown_idx!=-1) + && ((hAacEncoder->extParam.userChannelMode==MODE_1_2_2)||(hAacEncoder->extParam.userChannelMode==MODE_1_2_2_1)) ) + { + /* Set matrix mixdown coefficient. */ + UINT pceValue = (UINT)( (1<<3) | ((matrix_mixdown_idx&0x3)<<1) | 1 ); if (hAacEncoder->extParam.userPceAdditions != pceValue) { hAacEncoder->extParam.userPceAdditions = pceValue; hAacEncoder->InitFlags |= AACENC_INIT_TRANSPORT; @@ -1375,7 +1595,7 @@ AACENC_ERROR aacEncEncode( } else { /* Add SBR extension payload */ - for (i = 0; i < (6); i++) { + for (i = 0; i < (8); i++) { if (hAacEncoder->extPayloadSize[nPayload][i] > 0) { hAacEncoder->extPayload[nExtensions].pData = hAacEncoder->extPayloadData[nPayload][i]; { @@ -1573,7 +1793,6 @@ AACENC_ERROR aacEncoder_SetParam( } case AOT_AAC_LC: case AOT_MP2_AAC_LC: - case AOT_ER_AAC_LC: case AOT_ER_AAC_LD: case AOT_ER_AAC_ELD: if (!(hAacEncoder->encoder_modis & (ENC_MODE_FLAG_AAC))) { @@ -1636,7 +1855,7 @@ AACENC_ERROR aacEncoder_SetParam( } if ( (pConfig->nElements > hAacEncoder->nMaxAacElements) || (pConfig->nChannelsEff > hAacEncoder->nMaxAacChannels) - || !((value>=1) && (value<=6)) + || !(((value>=1) && (value<=7))||((value>=33) && (value<=34))) ) { err = AACENC_INVALID_CONFIG; @@ -1691,6 +1910,16 @@ AACENC_ERROR aacEncoder_SetParam( } } break; + case AACENC_SBR_RATIO: + if (settings->userSbrRatio != value) { + if (! ((value==0) || (value==1) || (value==2)) ) { + err = AACENC_INVALID_CONFIG; + break; + } + settings->userSbrRatio = value; + hAacEncoder->InitFlags |= AACENC_INIT_CONFIG | AACENC_INIT_STATES | AACENC_INIT_TRANSPORT; + } + break; case AACENC_SBR_MODE: if (settings->userSbrEnabled != value) { settings->userSbrEnabled = value; @@ -1812,7 +2041,7 @@ UINT aacEncoder_GetParam( value = (UINT)hAacEncoder->aacConfig.bitrateMode; break; case AACENC_SAMPLERATE: - value = (UINT)settings->userSamplerate; + value = (UINT)hAacEncoder->coderConfig.extSamplingRate; break; case AACENC_CHANNELMODE: value = (UINT)hAacEncoder->aacConfig.channelMode; @@ -1829,6 +2058,9 @@ UINT aacEncoder_GetParam( case AACENC_GRANULE_LENGTH: value = (UINT)hAacEncoder->aacConfig.framelength; break; + case AACENC_SBR_RATIO: + value = isSbrActive(&hAacEncoder->aacConfig) ? hAacEncoder->aacConfig.sbrRatio : 0; + break; case AACENC_SBR_MODE: value = (UINT) (hAacEncoder->aacConfig.syntaxFlags & AC_SBR_PRESENT) ? 1 : 0; break; @@ -1836,7 +2068,7 @@ UINT aacEncoder_GetParam( value = (UINT)settings->userTpType; break; case AACENC_SIGNALING_MODE: - value = (UINT)settings->userTpSignaling; + value = (UINT)getSbrSignalingMode(hAacEncoder->aacConfig.audioObjectType, settings->userTpType, settings->userTpSignaling, hAacEncoder->aacConfig.sbrRatio); break; case AACENC_PROTECTION: value = (UINT)settings->userTpProtection; diff --git a/libAACenc/src/aacenc_pns.cpp b/libAACenc/src/aacenc_pns.cpp index 4d81268..b9640d9 100644 --- a/libAACenc/src/aacenc_pns.cpp +++ b/libAACenc/src/aacenc_pns.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/aacenc_pns.h b/libAACenc/src/aacenc_pns.h index ce82071..3bda9de 100644 --- a/libAACenc/src/aacenc_pns.h +++ b/libAACenc/src/aacenc_pns.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/aacenc_tns.cpp b/libAACenc/src/aacenc_tns.cpp index 00b2bca..85aea65 100644 --- a/libAACenc/src/aacenc_tns.cpp +++ b/libAACenc/src/aacenc_tns.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -83,7 +83,7 @@ amm-info@iis.fraunhofer.de /******************************** MPEG Audio Encoder ************************** - Initial author: Alex Groeschel + Initial author: Alex Groeschel, Tobias Chalupka contents/description: Temporal noise shaping ******************************************************************************/ @@ -281,7 +281,6 @@ static INT getTnsMaxBands( int maxBandsTabSize = 0; switch (granuleLength) { - case 960: case 1024: pMaxBandsTab = tnsMaxBandsTab1024; maxBandsTabSize = sizeof(tnsMaxBandsTab1024)/sizeof(TNS_MAX_TAB_ENTRY); @@ -404,7 +403,6 @@ AAC_ENCODER_ERROR FDKaacEnc_InitTnsConfiguration(INT bitRate, tC->lpcStopLine = pC->sfbOffset[tC->lpcStopBand]; switch (granuleLength) { - case 960: case 1024: /* TNS start line: skip lower MDCT lines to prevent artifacts due to filter mismatch */ tC->lpcStartBand[LOFILT] = (blockType == SHORT_WINDOW) ? 0 : ((sampleRate < 18783) ? 4 : 8); diff --git a/libAACenc/src/aacenc_tns.h b/libAACenc/src/aacenc_tns.h index 519fd69..f2b731f 100644 --- a/libAACenc/src/aacenc_tns.h +++ b/libAACenc/src/aacenc_tns.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/adj_thr.cpp b/libAACenc/src/adj_thr.cpp index a779357..6433633 100644 --- a/libAACenc/src/adj_thr.cpp +++ b/libAACenc/src/adj_thr.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -123,6 +123,117 @@ static const FIXP_DBL SnrLdMin4 = (FIXP_DBL)0x02000000; /*FL2FXCONST_DBL(FDKlog static const FIXP_DBL SnrLdMin5 = (FIXP_DBL)0xfc000000; /*FL2FXCONST_DBL(FDKlog(0.25) /FDKlog(2.0)/LD_DATA_SCALING);*/ +/* +The bits2Pe factors are choosen for the case that some times +the crash recovery strategy will be activated once. +*/ + +typedef struct { + INT bitrate; + LONG bits2PeFactor_mono; + LONG bits2PeFactor_mono_slope; + LONG bits2PeFactor_stereo; + LONG bits2PeFactor_stereo_slope; + LONG bits2PeFactor_mono_scfOpt; + LONG bits2PeFactor_mono_scfOpt_slope; + LONG bits2PeFactor_stereo_scfOpt; + LONG bits2PeFactor_stereo_scfOpt_slope; + +} BIT_PE_SFAC; + +typedef struct { + const INT sampleRate; + const BIT_PE_SFAC * pPeTab; + const INT nEntries; + +} BITS2PE_CFG_TAB; + +static const BIT_PE_SFAC S_Bits2PeTab16000[] = { + { 10000, 0x228F5C29, 0x02FEF55D, 0x1D70A3D7, 0x09BC9D6D, 0x228F5C29, 0x02FEF55D, 0x1C28F5C3, 0x0CBB92CA}, + { 24000, 0x23D70A3D, 0x029F16B1, 0x2199999A, 0x07DD4413, 0x23D70A3D, 0x029F16B1, 0x2199999A, 0x07DD4413}, + { 32000, 0x247AE148, 0x11B1D92B, 0x23851EB8, 0x01F75105, 0x247AE148, 0x110A137F, 0x23851EB8, 0x01F75105}, + { 48000, 0x2D1EB852, 0x6833C600, 0x247AE148, 0x014F8B59, 0x2CCCCCCD, 0x68DB8BAC, 0x247AE148, 0x01F75105}, + { 64000, 0x60000000, 0x00000000, 0x251EB852, 0x154C985F, 0x60000000, 0x00000000, 0x2570A3D7, 0x154C985F}, + { 96000, 0x60000000, 0x00000000, 0x39EB851F, 0x088509C0, 0x60000000, 0x00000000, 0x3A3D70A4, 0x088509C0}, + {128000, 0x60000000, 0x00000000, 0x423D70A4, 0x18A43BB4, 0x60000000, 0x00000000, 0x428F5C29, 0x181E03F7}, + {148000, 0x60000000, 0x00000000, 0x5147AE14, 0x00000000, 0x60000000, 0x00000000, 0x5147AE14, 0x00000000} +}; + +static const BIT_PE_SFAC S_Bits2PeTab22050[] = { + { 16000, 0x1a8f5c29, 0x1797cc3a, 0x128f5c29, 0x18e75793, 0x175c28f6, 0x221426fe, 0x00000000, 0x5a708ede}, + { 24000, 0x2051eb85, 0x092ccf6c, 0x18a3d70a, 0x13a92a30, 0x1fae147b, 0xbcbe61d, 0x16147ae1, 0x18e75793}, + { 32000, 0x228f5c29, 0x029f16b1, 0x1d70a3d7, 0x088509c0, 0x228f5c29, 0x29f16b1, 0x1c28f5c3, 0x0b242071}, + { 48000, 0x23d70a3d, 0x014f8b59, 0x2199999a, 0x03eea20a, 0x23d70a3d, 0x14f8b59, 0x2199999a, 0x03eea20a}, + { 64000, 0x247ae148, 0x08d8ec96, 0x23851eb8, 0x00fba882, 0x247ae148, 0x88509c0, 0x23851eb8, 0x00fba882}, + { 96000, 0x2d1eb852, 0x3419e300, 0x247ae148, 0x00a7c5ac, 0x2ccccccd, 0x346dc5d6, 0x247ae148, 0x00fba882}, + {128000, 0x60000000, 0x00000000, 0x251eb852, 0x029f16b1, 0x60000000, 0x00000000, 0x2570a3d7, 0x009f16b1}, + {148000, 0x60000000, 0x00000000, 0x26b851ec, 0x00000000, 0x60000000, 0x00000000, 0x270a3d71, 0x00000000} +}; + +static const BIT_PE_SFAC S_Bits2PeTab24000[] = { + { 16000, 0x19eb851f, 0x13a92a30, 0x1147ae14, 0x164840e1, 0x1999999a, 0x12599ed8, 0x00000000, 0x46c764ae}, + { 24000, 0x1eb851ec, 0x0d1b7176, 0x16b851ec, 0x18e75793, 0x1e147ae1, 0x0fba8827, 0x1147ae14, 0x2c9081c3}, + { 32000, 0x21eb851f, 0x049667b6, 0x1ccccccd, 0x07357e67, 0x21eb851f, 0x03eea20a, 0x1c28f5c3, 0x07357e67}, + { 48000, 0x2428f5c3, 0x014f8b59, 0x2051eb85, 0x053e2d62, 0x23d70a3d, 0x01f75105, 0x1fae147b, 0x07357e67}, + { 64000, 0x24cccccd, 0x05e5f30e, 0x22e147ae, 0x01a36e2f, 0x24cccccd, 0x05e5f30e, 0x23333333, 0x014f8b59}, + { 96000, 0x2a8f5c29, 0x24b33db0, 0x247ae148, 0x00fba882, 0x2a8f5c29, 0x26fe718b, 0x247ae148, 0x00fba882}, + {128000, 0x4e666666, 0x1cd5f99c, 0x2570a3d7, 0x010c6f7a, 0x50a3d70a, 0x192a7371, 0x2570a3d7, 0x010c6f7a}, + {148000, 0x60000000, 0x00000000, 0x26147ae1, 0x00000000, 0x60000000, 0x00000000, 0x26147ae1, 0x00000000} +}; + +static const BIT_PE_SFAC S_Bits2PeTab32000[] = { + { 16000, 0x1199999a, 0x20c49ba6, 0x00000000, 0x4577d955, 0x00000000, 0x60fe4799, 0x00000000, 0x00000000}, + { 24000, 0x1999999a, 0x0fba8827, 0x10f5c28f, 0x1b866e44, 0x17ae147b, 0x0fba8827, 0x00000000, 0x4d551d69}, + { 32000, 0x1d70a3d7, 0x07357e67, 0x17ae147b, 0x09d49518, 0x1b851eb8, 0x0a7c5ac4, 0x12e147ae, 0x110a137f}, + { 48000, 0x20f5c28f, 0x049667b6, 0x1c7ae148, 0x053e2d62, 0x20a3d70a, 0x053e2d62, 0x1b333333, 0x05e5f30e}, + { 64000, 0x23333333, 0x029f16b1, 0x1f0a3d71, 0x02f2f987, 0x23333333, 0x029f16b1, 0x1e147ae1, 0x03eea20a}, + { 96000, 0x25c28f5c, 0x2c3c9eed, 0x21eb851f, 0x01f75105, 0x25c28f5c, 0x0a7c5ac4, 0x21eb851f, 0x01a36e2f}, + {128000, 0x50f5c28f, 0x18a43bb4, 0x23d70a3d, 0x010c6f7a, 0x30000000, 0x168b5cc0, 0x23851eb8, 0x0192a737}, + {148000, 0x60000000, 0x00000000, 0x247ae148, 0x00dfb23b, 0x3dc28f5c, 0x300f4aaf, 0x247ae148, 0x01bf6476}, + {160000, 0x60000000, 0xb15b5740, 0x24cccccd, 0x053e2d62, 0x4f5c28f6, 0xbefd0072, 0x251eb852, 0x04fb1184}, + {200000, 0x00000000, 0x00000000, 0x2b333333, 0x0836be91, 0x00000000, 0x00000000, 0x2b333333, 0x0890390f}, + {320000, 0x00000000, 0x00000000, 0x4947ae14, 0x00000000, 0x00000000, 0x00000000, 0x4a8f5c29, 0x00000000} +}; + +static const BIT_PE_SFAC S_Bits2PeTab44100[] = { + { 16000, 0x10a3d70a, 0x1797cc3a, 0x00000000, 0x00000000, 0x00000000, 0x59210386, 0x00000000, 0x00000000}, + { 24000, 0x16666666, 0x1797cc3a, 0x00000000, 0x639d5e4a, 0x15c28f5c, 0x12599ed8, 0x00000000, 0x5bc01a37}, + { 32000, 0x1c28f5c3, 0x049667b6, 0x1851eb85, 0x049667b6, 0x1a3d70a4, 0x088509c0, 0x16666666, 0x053e2d62}, + { 48000, 0x1e666666, 0x05e5f30e, 0x1a8f5c29, 0x049667b6, 0x1e666666, 0x05e5f30e, 0x18f5c28f, 0x05e5f30e}, + { 64000, 0x2147ae14, 0x0346dc5d, 0x1ccccccd, 0x02f2f987, 0x2147ae14, 0x02f2f987, 0x1bd70a3d, 0x039abf34}, + { 96000, 0x247ae148, 0x068db8bb, 0x1fae147b, 0x029f16b1, 0x2428f5c3, 0x0639d5e5, 0x1f5c28f6, 0x029f16b1}, + {128000, 0x2ae147ae, 0x1b435265, 0x223d70a4, 0x0192a737, 0x2a3d70a4, 0x1040bfe4, 0x21eb851f, 0x0192a737}, + {148000, 0x3b851eb8, 0x2832069c, 0x23333333, 0x00dfb23b, 0x3428f5c3, 0x2054c288, 0x22e147ae, 0x00dfb23b}, + {160000, 0x4a3d70a4, 0xc32ebe5a, 0x23851eb8, 0x01d5c316, 0x40000000, 0xcb923a2b, 0x23333333, 0x01d5c316}, + {200000, 0x00000000, 0x00000000, 0x25c28f5c, 0x0713f078, 0x00000000, 0x00000000, 0x2570a3d7, 0x072a4f17}, + {320000, 0x00000000, 0x00000000, 0x3fae147b, 0x00000000, 0x00000000, 0x00000000, 0x3fae147b, 0x00000000} +}; + +static const BIT_PE_SFAC S_Bits2PeTab48000[] = { + { 16000, 0x0f5c28f6, 0x31ceaf25, 0x00000000, 0x00000000, 0x00000000, 0x74a771c9, 0x00000000, 0x00000000}, + { 24000, 0x1b851eb8, 0x029f16b1, 0x00000000, 0x663c74fb, 0x1c7ae148, 0xe47991bd, 0x00000000, 0x49667b5f}, + { 32000, 0x1c28f5c3, 0x029f16b1, 0x18f5c28f, 0x07357e67, 0x15c28f5c, 0x0f12c27a, 0x11eb851f, 0x13016484}, + { 48000, 0x1d70a3d7, 0x053e2d62, 0x1c7ae148, 0xfe08aefc, 0x1d1eb852, 0x068db8bb, 0x1b333333, 0xfeb074a8}, + { 64000, 0x20000000, 0x03eea20a, 0x1b851eb8, 0x0346dc5d, 0x2051eb85, 0x0346dc5d, 0x1a8f5c29, 0x039abf34}, + { 96000, 0x23d70a3d, 0x053e2d62, 0x1eb851ec, 0x029f16b1, 0x23851eb8, 0x04ea4a8c, 0x1e147ae1, 0x02f2f987}, + {128000, 0x28f5c28f, 0x14727dcc, 0x2147ae14, 0x0218def4, 0x2851eb85, 0x0e27e0f0, 0x20f5c28f, 0x0218def4}, + {148000, 0x3570a3d7, 0x1cd5f99c, 0x228f5c29, 0x01bf6476, 0x30f5c28f, 0x18777e75, 0x223d70a4, 0x01bf6476}, + {160000, 0x40000000, 0xcb923a2b, 0x23333333, 0x0192a737, 0x39eb851f, 0xd08d4bae, 0x22e147ae, 0x0192a737}, + {200000, 0x00000000, 0x00000000, 0x251eb852, 0x06775a1b, 0x00000000, 0x00000000, 0x24cccccd, 0x06a4175a}, + {320000, 0x00000000, 0x00000000, 0x3ccccccd, 0x00000000, 0x00000000, 0x00000000, 0x3d1eb852, 0x00000000} +}; + +static const BITS2PE_CFG_TAB bits2PeConfigTab[] = { + { 16000, S_Bits2PeTab16000, sizeof(S_Bits2PeTab16000)/sizeof(BIT_PE_SFAC) }, + { 22050, S_Bits2PeTab22050, sizeof(S_Bits2PeTab22050)/sizeof(BIT_PE_SFAC) }, + { 24000, S_Bits2PeTab24000, sizeof(S_Bits2PeTab24000)/sizeof(BIT_PE_SFAC) }, + { 32000, S_Bits2PeTab32000, sizeof(S_Bits2PeTab32000)/sizeof(BIT_PE_SFAC) }, + { 44100, S_Bits2PeTab44100, sizeof(S_Bits2PeTab44100)/sizeof(BIT_PE_SFAC) }, + { 48000, S_Bits2PeTab48000, sizeof(S_Bits2PeTab48000)/sizeof(BIT_PE_SFAC) } +}; + + + /* values for avoid hole flag */ enum _avoid_hole_state { NO_AH =0, @@ -135,6 +246,99 @@ enum _avoid_hole_state { #define Q_BITFAC (24) /* Q scaling used in FDKaacEnc_bitresCalcBitFac() calculation */ #define Q_AVGBITS (17) /* scale bit values */ + +/***************************************************************************** + functionname: FDKaacEnc_InitBits2PeFactor + description: retrieve bits2PeFactor from table +*****************************************************************************/ +static void FDKaacEnc_InitBits2PeFactor( + FIXP_DBL *bits2PeFactor_m, + INT *bits2PeFactor_e, + const INT bitRate, + const INT nChannels, + const INT sampleRate, + const INT advancedBitsToPe, + const INT invQuant + ) +{ + /* default bits2pe factor */ + FIXP_DBL bit2PE_m = FL2FXCONST_DBL(1.18f/(1<<(1))); + INT bit2PE_e = 1; + + /* make use of advanced bits to pe factor table */ + if (advancedBitsToPe) { + + int i; + const BIT_PE_SFAC *peTab = NULL; + INT size = 0; + + + /* Get correct table entry */ + for (i=0; i<(INT)(sizeof(bits2PeConfigTab)/sizeof(BITS2PE_CFG_TAB)); i++) { + if (sampleRate >= bits2PeConfigTab[i].sampleRate) { + peTab = bits2PeConfigTab[i].pPeTab; + size = bits2PeConfigTab[i].nEntries; + } + } + + if ( (peTab!=NULL) && (size!=0) ) { + + INT startB = -1; + LONG startPF = 0; + LONG peSlope = 0; + + /* stereo or mono mode and invQuant used or not */ + for (i=0; i<size-1; i++) + { + if ((peTab[i].bitrate<=bitRate) && ((peTab[i+1].bitrate>bitRate) || ((i==size-2)) )) + { + if (nChannels==1) + { + startPF = (!invQuant) ? peTab[i].bits2PeFactor_mono : peTab[i].bits2PeFactor_mono_scfOpt; + peSlope = (!invQuant) ? peTab[i].bits2PeFactor_mono_slope : peTab[i].bits2PeFactor_mono_scfOpt_slope; + /*endPF = (!invQuant) ? peTab[i+1].bits2PeFactor_mono : peTab[i+1].bits2PeFactor_mono_scfOpt; + endB=peTab[i+1].bitrate;*/ + startB=peTab[i].bitrate; + break; + } + else + { + startPF = (!invQuant) ? peTab[i].bits2PeFactor_stereo : peTab[i].bits2PeFactor_stereo_scfOpt; + peSlope = (!invQuant) ? peTab[i].bits2PeFactor_stereo_slope : peTab[i].bits2PeFactor_stereo_scfOpt_slope; + /*endPF = (!invQuant) ? peTab[i+1].bits2PeFactor_stereo : peTab[i+1].bits2PeFactor_stereo_scfOpt; + endB=peTab[i+1].bitrate;*/ + startB=peTab[i].bitrate; + break; + } + } + } /* for i */ + + /* if a configuration is available */ + if (startB!=-1) { + /* linear interpolate to actual PEfactor */ + FIXP_DBL peFac = fMult((FIXP_DBL)(bitRate-startB)<<14, (FIXP_DBL)peSlope) << 2; + FIXP_DBL bit2PE = peFac + (FIXP_DBL)startPF; /* startPF_float = startPF << 2 */ + + /* sanity check if bits2pe value is high enough */ + if ( bit2PE >= (FL2FXCONST_DBL(0.35f) >> 2) ) { + bit2PE_m = bit2PE; + bit2PE_e = 2; /* table is fixed scaled */ + } + } /* br */ + } /* sr */ + } /* advancedBitsToPe */ + + + /* return bits2pe factor */ + *bits2PeFactor_m = bit2PE_m; + *bits2PeFactor_e = bit2PE_e; +} + + +/***************************************************************************** +functionname: FDKaacEnc_bits2pe2 +description: convert from bits to pe +*****************************************************************************/ static INT FDKaacEnc_bits2pe2( const INT bits, const FIXP_DBL factor_m, @@ -450,22 +654,23 @@ void FDKaacEnc_calcWeighting(PE_DATA *peData, FIXP_DBL nrgSum14, nrgSum12, nrgSum34, nrgTotal; FIXP_DBL nrgFacLd_14, nrgFacLd_12, nrgFacLd_34; INT usePatch, exePatch; - int sfb, nLinesSum = 0; + int sfb, sfbGrp, nLinesSum = 0; nrgSum14 = nrgSum12 = nrgSum34 = nrgTotal = FL2FXCONST_DBL(0.f); /* calculate flatness of audible spectrum, i.e. spectrum above masking threshold. */ - for (sfb = 0; sfb < psyOutChan->sfbCnt; sfb++) { - - FIXP_DBL nrgFac12 = CalcInvLdData(psyOutChan->sfbEnergyLdData[sfb]>>1); /* nrg^(1/2) */ - FIXP_DBL nrgFac14 = CalcInvLdData(psyOutChan->sfbEnergyLdData[sfb]>>2); /* nrg^(1/4) */ + for (sfbGrp = 0;sfbGrp < psyOutChannel[ch]->sfbCnt; sfbGrp+=psyOutChannel[ch]->sfbPerGroup) { + for (sfb=0; sfb<psyOutChannel[ch]->maxSfbPerGroup; sfb++) { + FIXP_DBL nrgFac12 = CalcInvLdData(psyOutChan->sfbEnergyLdData[sfbGrp+sfb]>>1); /* nrg^(1/2) */ + FIXP_DBL nrgFac14 = CalcInvLdData(psyOutChan->sfbEnergyLdData[sfbGrp+sfb]>>2); /* nrg^(1/4) */ /* maximal number of bands is 64, results scaling factor 6 */ - nLinesSum += peData->peChannelData[ch].sfbNLines[sfb]; /* relevant lines */ - nrgTotal += ( psyOutChan->sfbEnergy[sfb] >> 6 ); /* sum up nrg */ + nLinesSum += peData->peChannelData[ch].sfbNLines[sfbGrp+sfb]; /* relevant lines */ + nrgTotal += ( psyOutChan->sfbEnergy[sfbGrp+sfb] >> 6 ); /* sum up nrg */ nrgSum12 += ( nrgFac12 >> 6 ); /* sum up nrg^(2/4) */ nrgSum14 += ( nrgFac14 >> 6 ); /* sum up nrg^(1/4) */ nrgSum34 += ( fMult(nrgFac14, nrgFac12) >> 6 ); /* sum up nrg^(3/4) */ + } } nrgTotal = CalcLdData(nrgTotal); /* get ld64 of total nrg */ @@ -479,32 +684,35 @@ void FDKaacEnc_calcWeighting(PE_DATA *peData, usePatch = (adjThrStateElement->chaosMeasureEnFac[ch] > FL2FXCONST_DBL(0.78125f)); exePatch = ((usePatch) && (adjThrStateElement->lastEnFacPatch[ch])); - for (sfb = 0; sfb < psyOutChan->sfbCnt; sfb++) { + for (sfbGrp = 0;sfbGrp < psyOutChannel[ch]->sfbCnt; sfbGrp+=psyOutChannel[ch]->sfbPerGroup) { + for (sfb=0; sfb<psyOutChannel[ch]->maxSfbPerGroup; sfb++) { + INT sfbExePatch; /* for MS coupled SFBs, also execute patch in side channel if done in mid channel */ - if ((ch == 1) && (toolsInfo->msMask[sfb])) { + if ((ch == 1) && (toolsInfo->msMask[sfbGrp+sfb])) { sfbExePatch = exePatchM; } else { sfbExePatch = exePatch; } - if ( (sfbExePatch) && (psyOutChan->sfbEnergy[sfb]>FL2FXCONST_DBL(0.f)) ) + if ( (sfbExePatch) && (psyOutChan->sfbEnergy[sfbGrp+sfb]>FL2FXCONST_DBL(0.f)) ) { /* execute patch based on spectral flatness calculated above */ if (adjThrStateElement->chaosMeasureEnFac[ch] > FL2FXCONST_DBL(0.8125f)) { - qcOutChannel[ch]->sfbEnFacLd[sfb] = ( (nrgFacLd_14 + (psyOutChan->sfbEnergyLdData[sfb]+(psyOutChan->sfbEnergyLdData[sfb]>>1)))>>1 ); /* sfbEnergy^(3/4) */ + qcOutChannel[ch]->sfbEnFacLd[sfbGrp+sfb] = ( (nrgFacLd_14 + (psyOutChan->sfbEnergyLdData[sfbGrp+sfb]+(psyOutChan->sfbEnergyLdData[sfbGrp+sfb]>>1)))>>1 ); /* sfbEnergy^(3/4) */ } else if (adjThrStateElement->chaosMeasureEnFac[ch] > FL2FXCONST_DBL(0.796875f)) { - qcOutChannel[ch]->sfbEnFacLd[sfb] = ( (nrgFacLd_12 + psyOutChan->sfbEnergyLdData[sfb])>>1 ); /* sfbEnergy^(2/4) */ + qcOutChannel[ch]->sfbEnFacLd[sfbGrp+sfb] = ( (nrgFacLd_12 + psyOutChan->sfbEnergyLdData[sfbGrp+sfb])>>1 ); /* sfbEnergy^(2/4) */ } else { - qcOutChannel[ch]->sfbEnFacLd[sfb] = ( (nrgFacLd_34 + (psyOutChan->sfbEnergyLdData[sfb]>>1))>>1 ); /* sfbEnergy^(1/4) */ + qcOutChannel[ch]->sfbEnFacLd[sfbGrp+sfb] = ( (nrgFacLd_34 + (psyOutChan->sfbEnergyLdData[sfbGrp+sfb]>>1))>>1 ); /* sfbEnergy^(1/4) */ } - qcOutChannel[ch]->sfbEnFacLd[sfb] = fixMin(qcOutChannel[ch]->sfbEnFacLd[sfb],(FIXP_DBL)0); + qcOutChannel[ch]->sfbEnFacLd[sfbGrp+sfb] = fixMin(qcOutChannel[ch]->sfbEnFacLd[sfbGrp+sfb],(FIXP_DBL)0); } + } } /* sfb loop */ adjThrStateElement->lastEnFacPatch[ch] = usePatch; @@ -735,7 +943,6 @@ static FIXP_DBL FDKaacEnc_calcChaosMeasure(PSY_OUT_CHANNEL *psyOutChannel, return chaosMeasure; } - /* apply reduction formula for VBR-mode */ static void FDKaacEnc_reduceThresholdsVBR(QC_OUT_CHANNEL* qcOutChannel[(2)], PSY_OUT_CHANNEL* psyOutChannel[(2)], @@ -923,7 +1130,6 @@ static void FDKaacEnc_reduceThresholdsVBR(QC_OUT_CHANNEL* qcOutChannel[(2)], } } - /***************************************************************************** functionname: FDKaacEnc_correctThresh description: if pe difference deltaPe between desired pe and real pe is small enough, @@ -931,12 +1137,12 @@ the difference can be distributed among the scale factor bands. New thresholds can be derived from this pe-difference *****************************************************************************/ static void FDKaacEnc_correctThresh(CHANNEL_MAPPING* cm, - QC_OUT_ELEMENT* qcElement[(6)], - PSY_OUT_ELEMENT* psyOutElement[(6)], - UCHAR ahFlag[(6)][(2)][MAX_GROUPED_SFB], - FIXP_DBL thrExp[(6)][(2)][MAX_GROUPED_SFB], - const FIXP_DBL redVal[(6)], - const SCHAR redValScaling[(6)], + QC_OUT_ELEMENT* qcElement[(8)], + PSY_OUT_ELEMENT* psyOutElement[(8)], + UCHAR ahFlag[(8)][(2)][MAX_GROUPED_SFB], + FIXP_DBL thrExp[(8)][(2)][MAX_GROUPED_SFB], + const FIXP_DBL redVal[(8)], + const SCHAR redValScaling[(8)], const INT deltaPe, const INT processElements, const INT elementOffset) @@ -947,8 +1153,8 @@ static void FDKaacEnc_correctThresh(CHANNEL_MAPPING* cm, PE_CHANNEL_DATA *peChanData; FIXP_DBL thrFactorLdData; FIXP_DBL sfbEnLdData, sfbThrLdData, sfbThrReducedLdData; - FIXP_DBL *sfbPeFactorsLdData[(6)][(2)]; - FIXP_DBL sfbNActiveLinesLdData[(2)][MAX_GROUPED_SFB]; + FIXP_DBL *sfbPeFactorsLdData[(8)][(2)]; + FIXP_DBL sfbNActiveLinesLdData[(8)][(2)][MAX_GROUPED_SFB]; INT normFactorInt; FIXP_DBL normFactorLdData; @@ -979,13 +1185,13 @@ static void FDKaacEnc_correctThresh(CHANNEL_MAPPING* cm, for (sfb=0; sfb<psyOutChan->maxSfbPerGroup; sfb++) { if ( peChanData->sfbNActiveLines[sfbGrp+sfb] == 0 ) { - sfbNActiveLinesLdData[ch][sfbGrp+sfb] = FL2FXCONST_DBL(-1.0f); + sfbNActiveLinesLdData[elementId][ch][sfbGrp+sfb] = FL2FXCONST_DBL(-1.0f); } else { /* Both CalcLdInt and CalcLdData can be used! * No offset has to be subtracted, because sfbNActiveLinesLdData * is shorted while thrFactor calculation */ - sfbNActiveLinesLdData[ch][sfbGrp+sfb] = CalcLdInt(peChanData->sfbNActiveLines[sfbGrp+sfb]); + sfbNActiveLinesLdData[elementId][ch][sfbGrp+sfb] = CalcLdInt(peChanData->sfbNActiveLines[sfbGrp+sfb]); } if ( ((ahFlag[elementId][ch][sfbGrp+sfb] < AH_ACTIVE) || (deltaPe > 0)) && peChanData->sfbNActiveLines[sfbGrp+sfb] != 0 ) @@ -1002,14 +1208,14 @@ static void FDKaacEnc_correctThresh(CHANNEL_MAPPING* cm, - (FIXP_DBL)(minScale<<(DFRACT_BITS-1-LD_DATA_SHIFT)); if (sumLd < FL2FXCONST_DBL(0.f)) { - sfbPeFactorsLdData[elementId][ch][sfbGrp+sfb] = sfbNActiveLinesLdData[ch][sfbGrp+sfb] - sumLd; + sfbPeFactorsLdData[elementId][ch][sfbGrp+sfb] = sfbNActiveLinesLdData[elementId][ch][sfbGrp+sfb] - sumLd; } else { - if ( sfbNActiveLinesLdData[ch][sfbGrp+sfb] > (FL2FXCONST_DBL(-1.f) + sumLd) ) { - sfbPeFactorsLdData[elementId][ch][sfbGrp+sfb] = sfbNActiveLinesLdData[ch][sfbGrp+sfb] - sumLd; + if ( sfbNActiveLinesLdData[elementId][ch][sfbGrp+sfb] > (FL2FXCONST_DBL(-1.f) + sumLd) ) { + sfbPeFactorsLdData[elementId][ch][sfbGrp+sfb] = sfbNActiveLinesLdData[elementId][ch][sfbGrp+sfb] - sumLd; } else { - sfbPeFactorsLdData[elementId][ch][sfbGrp+sfb] = sfbNActiveLinesLdData[ch][sfbGrp+sfb]; + sfbPeFactorsLdData[elementId][ch][sfbGrp+sfb] = sfbNActiveLinesLdData[elementId][ch][sfbGrp+sfb]; } } @@ -1050,7 +1256,7 @@ static void FDKaacEnc_correctThresh(CHANNEL_MAPPING* cm, } else { /* new threshold */ - FIXP_DBL tmp = CalcInvLdData(sfbPeFactorsLdData[elementId][ch][sfbGrp+sfb] + normFactorLdData - sfbNActiveLinesLdData[ch][sfbGrp+sfb] - FL2FXCONST_DBL((float)LD_DATA_SHIFT/LD_DATA_SCALING)); + FIXP_DBL tmp = CalcInvLdData(sfbPeFactorsLdData[elementId][ch][sfbGrp+sfb] + normFactorLdData - sfbNActiveLinesLdData[elementId][ch][sfbGrp+sfb] - FL2FXCONST_DBL((float)LD_DATA_SHIFT/LD_DATA_SCALING)); /* limit thrFactor to 60dB */ tmp = (deltaPe<0) ? tmp : (-tmp); @@ -1102,9 +1308,9 @@ static void FDKaacEnc_correctThresh(CHANNEL_MAPPING* cm, reducing minSnr *****************************************************************************/ void FDKaacEnc_reduceMinSnr(CHANNEL_MAPPING* cm, - QC_OUT_ELEMENT* qcElement[(6)], - PSY_OUT_ELEMENT* psyOutElement[(6)], - UCHAR ahFlag[(6)][(2)][MAX_GROUPED_SFB], + QC_OUT_ELEMENT* qcElement[(8)], + PSY_OUT_ELEMENT* psyOutElement[(8)], + UCHAR ahFlag[(8)][(2)][MAX_GROUPED_SFB], const INT desiredPe, INT* redPeGlobal, const INT processElements, @@ -1204,10 +1410,10 @@ bail: bands have to be quantized to zero *****************************************************************************/ static void FDKaacEnc_allowMoreHoles(CHANNEL_MAPPING* cm, - QC_OUT_ELEMENT* qcElement[(6)], - PSY_OUT_ELEMENT* psyOutElement[(6)], - ATS_ELEMENT* AdjThrStateElement[(6)], - UCHAR ahFlag[(6)][(2)][MAX_GROUPED_SFB], + QC_OUT_ELEMENT* qcElement[(8)], + PSY_OUT_ELEMENT* psyOutElement[(8)], + ATS_ELEMENT* AdjThrStateElement[(8)], + UCHAR ahFlag[(8)][(2)][MAX_GROUPED_SFB], const INT desiredPe, const INT currentPe, const int processElements, @@ -1439,17 +1645,17 @@ functionname: FDKaacEnc_adaptThresholdsToPe description: two guesses for the reduction value and one final correction of the thresholds *****************************************************************************/ static void FDKaacEnc_adaptThresholdsToPe(CHANNEL_MAPPING* cm, - ATS_ELEMENT* AdjThrStateElement[(6)], - QC_OUT_ELEMENT* qcElement[(6)], - PSY_OUT_ELEMENT* psyOutElement[(6)], + ATS_ELEMENT* AdjThrStateElement[(8)], + QC_OUT_ELEMENT* qcElement[(8)], + PSY_OUT_ELEMENT* psyOutElement[(8)], const INT desiredPe, const INT processElements, const INT elementOffset) { - FIXP_DBL redValue[(6)]; - SCHAR redValScaling[(6)]; - UCHAR pAhFlag[(6)][(2)][MAX_GROUPED_SFB]; - FIXP_DBL pThrExp[(6)][(2)][MAX_GROUPED_SFB]; + FIXP_DBL redValue[(8)]; + SCHAR redValScaling[(8)]; + UCHAR pAhFlag[(8)][(2)][MAX_GROUPED_SFB]; + FIXP_DBL pThrExp[(8)][(2)][MAX_GROUPED_SFB]; int iter; INT constPartGlobal, noRedPeGlobal, nActiveLinesGlobal, redPeGlobal; @@ -1683,7 +1889,6 @@ static void FDKaacEnc_adaptThresholdsToPe(CHANNEL_MAPPING* cm, } - /* similar to FDKaacEnc_adaptThresholdsToPe(), for VBR-mode */ void FDKaacEnc_AdaptThresholdsVBR(QC_OUT_CHANNEL* qcOutChannel[(2)], PSY_OUT_CHANNEL* psyOutChannel[(2)], @@ -1692,8 +1897,14 @@ void FDKaacEnc_AdaptThresholdsVBR(QC_OUT_CHANNEL* qcOutChannel[(2)], PE_DATA *peData, const INT nChannels) { - UCHAR pAhFlag[(2)][MAX_GROUPED_SFB]; - FIXP_DBL pThrExp[(2)][MAX_GROUPED_SFB]; + UCHAR (*pAhFlag)[MAX_GROUPED_SFB]; + FIXP_DBL (*pThrExp)[MAX_GROUPED_SFB]; + + /* allocate scratch memory */ + C_ALLOC_SCRATCH_START(_pAhFlag, UCHAR, (2)*MAX_GROUPED_SFB) + C_ALLOC_SCRATCH_START(_pThrExp, FIXP_DBL, (2)*MAX_GROUPED_SFB) + pAhFlag = (UCHAR(*)[MAX_GROUPED_SFB])_pAhFlag; + pThrExp = (FIXP_DBL(*)[MAX_GROUPED_SFB])_pThrExp; /* thresholds to the power of redExp */ FDKaacEnc_calcThreshExp(pThrExp, qcOutChannel, psyOutChannel, nChannels); @@ -1711,6 +1922,9 @@ void FDKaacEnc_AdaptThresholdsVBR(QC_OUT_CHANNEL* qcOutChannel[(2)], AdjThrStateElement->vbrQualFactor, &AdjThrStateElement->chaosMeasureOld); + /* free scratch memory */ + C_ALLOC_SCRATCH_END(_pThrExp, FIXP_DBL, (2)*MAX_GROUPED_SFB) + C_ALLOC_SCRATCH_END(_pAhFlag, UCHAR, (2)*MAX_GROUPED_SFB) } @@ -2002,95 +2216,112 @@ bail: functionname: FDKaacEnc_AdjThrInit description: initialize ADJ_THR_STATE *****************************************************************************/ -void FDKaacEnc_AdjThrInit(ADJ_THR_STATE *hAdjThr, - const INT meanPe, - ELEMENT_BITS *elBits[(6)], - INT nElements, - FIXP_DBL vbrQualFactor) +void FDKaacEnc_AdjThrInit( + ADJ_THR_STATE *hAdjThr, + const INT meanPe, + ELEMENT_BITS *elBits[(8)], + INT invQuant, + INT nElements, + INT nChannelsEff, + INT sampleRate, + INT advancedBitsToPe, + FIXP_DBL vbrQualFactor + ) { - INT i; - - FIXP_DBL POINT8 = FL2FXCONST_DBL(0.8f); - FIXP_DBL POINT6 = FL2FXCONST_DBL(0.6f); + INT i; + + FIXP_DBL POINT8 = FL2FXCONST_DBL(0.8f); + FIXP_DBL POINT6 = FL2FXCONST_DBL(0.6f); + + /* common for all elements: */ + /* parameters for bitres control */ + hAdjThr->bresParamLong.clipSaveLow = (FIXP_DBL)0x1999999a; /* FL2FXCONST_DBL(0.2f); */ + hAdjThr->bresParamLong.clipSaveHigh = (FIXP_DBL)0x7999999a; /* FL2FXCONST_DBL(0.95f); */ + hAdjThr->bresParamLong.minBitSave = (FIXP_DBL)0xf999999a; /* FL2FXCONST_DBL(-0.05f); */ + hAdjThr->bresParamLong.maxBitSave = (FIXP_DBL)0x26666666; /* FL2FXCONST_DBL(0.3f); */ + hAdjThr->bresParamLong.clipSpendLow = (FIXP_DBL)0x1999999a; /* FL2FXCONST_DBL(0.2f); */ + hAdjThr->bresParamLong.clipSpendHigh = (FIXP_DBL)0x7999999a; /* FL2FXCONST_DBL(0.95f); */ + hAdjThr->bresParamLong.minBitSpend = (FIXP_DBL)0xf3333333; /* FL2FXCONST_DBL(-0.10f); */ + hAdjThr->bresParamLong.maxBitSpend = (FIXP_DBL)0x33333333; /* FL2FXCONST_DBL(0.4f); */ + + hAdjThr->bresParamShort.clipSaveLow = (FIXP_DBL)0x199999a0; /* FL2FXCONST_DBL(0.2f); */ + hAdjThr->bresParamShort.clipSaveHigh = (FIXP_DBL)0x5fffffff; /* FL2FXCONST_DBL(0.75f); */ + hAdjThr->bresParamShort.minBitSave = (FIXP_DBL)0x00000000; /* FL2FXCONST_DBL(0.0f); */ + hAdjThr->bresParamShort.maxBitSave = (FIXP_DBL)0x199999a0; /* FL2FXCONST_DBL(0.2f); */ + hAdjThr->bresParamShort.clipSpendLow = (FIXP_DBL)0x199999a0; /* FL2FXCONST_DBL(0.2f); */ + hAdjThr->bresParamShort.clipSpendHigh = (FIXP_DBL)0x5fffffff; /* FL2FXCONST_DBL(0.75f); */ + hAdjThr->bresParamShort.minBitSpend = (FIXP_DBL)0xf9999998; /* FL2FXCONST_DBL(-0.05f); */ + hAdjThr->bresParamShort.maxBitSpend = (FIXP_DBL)0x40000000; /* FL2FXCONST_DBL(0.5f); */ + + /* specific for each element: */ + for (i=0; i<nElements; i++) { + ATS_ELEMENT* atsElem = hAdjThr->adjThrStateElem[i]; + MINSNR_ADAPT_PARAM *msaParam = &atsElem->minSnrAdaptParam; + INT chBitrate = elBits[i]->chBitrateEl; - /* common for all elements: */ /* parameters for bitres control */ - hAdjThr->bresParamLong.clipSaveLow = (FIXP_DBL)0x1999999a; /* FL2FXCONST_DBL(0.2f); */ - hAdjThr->bresParamLong.clipSaveHigh = (FIXP_DBL)0x7999999a; /* FL2FXCONST_DBL(0.95f); */ - hAdjThr->bresParamLong.minBitSave = (FIXP_DBL)0xf999999a; /* FL2FXCONST_DBL(-0.05f); */ - hAdjThr->bresParamLong.maxBitSave = (FIXP_DBL)0x26666666; /* FL2FXCONST_DBL(0.3f); */ - hAdjThr->bresParamLong.clipSpendLow = (FIXP_DBL)0x1999999a; /* FL2FXCONST_DBL(0.2f); */ - hAdjThr->bresParamLong.clipSpendHigh = (FIXP_DBL)0x7999999a; /* FL2FXCONST_DBL(0.95f); */ - hAdjThr->bresParamLong.minBitSpend = (FIXP_DBL)0xf3333333; /* FL2FXCONST_DBL(-0.10f); */ - hAdjThr->bresParamLong.maxBitSpend = (FIXP_DBL)0x33333333; /* FL2FXCONST_DBL(0.4f); */ - - hAdjThr->bresParamShort.clipSaveLow = (FIXP_DBL)0x199999a0; /* FL2FXCONST_DBL(0.2f); */ - hAdjThr->bresParamShort.clipSaveHigh = (FIXP_DBL)0x5fffffff; /* FL2FXCONST_DBL(0.75f); */ - hAdjThr->bresParamShort.minBitSave = (FIXP_DBL)0x00000000; /* FL2FXCONST_DBL(0.0f); */ - hAdjThr->bresParamShort.maxBitSave = (FIXP_DBL)0x199999a0; /* FL2FXCONST_DBL(0.2f); */ - hAdjThr->bresParamShort.clipSpendLow = (FIXP_DBL)0x199999a0; /* FL2FXCONST_DBL(0.2f); */ - hAdjThr->bresParamShort.clipSpendHigh = (FIXP_DBL)0x5fffffff; /* FL2FXCONST_DBL(0.75f); */ - hAdjThr->bresParamShort.minBitSpend = (FIXP_DBL)0xf9999998; /* FL2FXCONST_DBL(-0.05f); */ - hAdjThr->bresParamShort.maxBitSpend = (FIXP_DBL)0x40000000; /* FL2FXCONST_DBL(0.5f); */ - - /* specific for each element: */ - for (i=0; i<nElements; i++) { - ATS_ELEMENT* atsElem = hAdjThr->adjThrStateElem[i]; - MINSNR_ADAPT_PARAM *msaParam = &atsElem->minSnrAdaptParam; - INT chBitrate = elBits[i]->chBitrateEl; + atsElem->peMin = fMultI(POINT8, meanPe) >> 1; + atsElem->peMax = fMultI(POINT6, meanPe); - /* parameters for bitres control */ - atsElem->peMin = fMultI(POINT8, meanPe) >> 1; - atsElem->peMax = fMultI(POINT6, meanPe); + /* for use in FDKaacEnc_reduceThresholdsVBR */ + atsElem->chaosMeasureOld = FL2FXCONST_DBL(0.3f); - /* for use in FDKaacEnc_reduceThresholdsVBR */ - atsElem->chaosMeasureOld = FL2FXCONST_DBL(0.3f); + /* additional pe offset to correct pe2bits for low bitrates */ + atsElem->peOffset = 0; - /* additional pe offset to correct pe2bits for low bitrates */ - atsElem->peOffset = 0; + /* vbr initialisation */ + atsElem->vbrQualFactor = vbrQualFactor; + if (chBitrate < 32000) + { + atsElem->peOffset = fixMax(50, 100-fMultI((FIXP_DBL)0x666667, chBitrate)); + } - /* vbr initialisation */ - atsElem->vbrQualFactor = vbrQualFactor; - if (chBitrate < 32000) - { - atsElem->peOffset = fixMax(50, 100-fMultI((FIXP_DBL)0x666667, chBitrate)); - } + /* avoid hole parameters */ + if (chBitrate > 20000) { + atsElem->ahParam.modifyMinSnr = TRUE; + atsElem->ahParam.startSfbL = 15; + atsElem->ahParam.startSfbS = 3; + } + else { + atsElem->ahParam.modifyMinSnr = FALSE; + atsElem->ahParam.startSfbL = 0; + atsElem->ahParam.startSfbS = 0; + } - /* avoid hole parameters */ - if (chBitrate > 20000) { - atsElem->ahParam.modifyMinSnr = TRUE; - atsElem->ahParam.startSfbL = 15; - atsElem->ahParam.startSfbS = 3; - } - else { - atsElem->ahParam.modifyMinSnr = FALSE; - atsElem->ahParam.startSfbL = 0; - atsElem->ahParam.startSfbS = 0; - } + /* minSnr adaptation */ + msaParam->maxRed = FL2FXCONST_DBL(0.00390625f); /* 0.25f/64.0f */ + /* start adaptation of minSnr for avgEn/sfbEn > startRatio */ + msaParam->startRatio = FL2FXCONST_DBL(0.05190512648f); /* ld64(10.0f) */ + /* maximum minSnr reduction to minSnr^maxRed is reached for + avgEn/sfbEn >= maxRatio */ + /* msaParam->maxRatio = 1000.0f; */ + /*msaParam->redRatioFac = ((float)1.0f - msaParam->maxRed) / ((float)10.0f*log10(msaParam->startRatio/msaParam->maxRatio)/log10(2.0f)*(float)0.3010299956f);*/ + msaParam->redRatioFac = FL2FXCONST_DBL(-0.375f); /* -0.0375f * 10.0f */ + /*msaParam->redOffs = (float)1.0f - msaParam->redRatioFac * (float)10.0f * log10(msaParam->startRatio)/log10(2.0f) * (float)0.3010299956f;*/ + msaParam->redOffs = FL2FXCONST_DBL(0.021484375); /* 1.375f/64.0f */ + + /* init pe correction */ + atsElem->peCorrectionFactor_m = FL2FXCONST_DBL(0.5f); /* 1.0 */ + atsElem->peCorrectionFactor_e = 1; + + atsElem->dynBitsLast = -1; + atsElem->peLast = 0; + + /* init bits to pe factor */ + + /* init bits2PeFactor */ + FDKaacEnc_InitBits2PeFactor( + &atsElem->bits2PeFactor_m, + &atsElem->bits2PeFactor_e, + chBitrate, /* bitrate/channel*/ + nChannelsEff, /* number of channels */ + sampleRate, + advancedBitsToPe, + invQuant + ); + + } /* for nElements */ - /* minSnr adaptation */ - msaParam->maxRed = FL2FXCONST_DBL(0.00390625f); /* 0.25f/64.0f */ - /* start adaptation of minSnr for avgEn/sfbEn > startRatio */ - msaParam->startRatio = FL2FXCONST_DBL(0.05190512648f); /* ld64(10.0f) */ - /* maximum minSnr reduction to minSnr^maxRed is reached for - avgEn/sfbEn >= maxRatio */ - /* msaParam->maxRatio = 1000.0f; */ - /*msaParam->redRatioFac = ((float)1.0f - msaParam->maxRed) / ((float)10.0f*log10(msaParam->startRatio/msaParam->maxRatio)/log10(2.0f)*(float)0.3010299956f);*/ - msaParam->redRatioFac = FL2FXCONST_DBL(-0.375f); /* -0.0375f * 10.0f */ - /*msaParam->redOffs = (float)1.0f - msaParam->redRatioFac * (float)10.0f * log10(msaParam->startRatio)/log10(2.0f) * (float)0.3010299956f;*/ - msaParam->redOffs = FL2FXCONST_DBL(0.021484375); /* 1.375f/64.0f */ - - /* init pe correction */ - atsElem->peCorrectionFactor_m = FL2FXCONST_DBL(0.5f); /* 1.0 */ - atsElem->peCorrectionFactor_e = 1; - - atsElem->dynBitsLast = -1; - atsElem->peLast = 0; - - /* init bits to pe factor */ - atsElem->bits2PeFactor_m = FL2FXCONST_DBL(1.18f/(1<<(1))); - atsElem->bits2PeFactor_e = 1; - } } @@ -2154,6 +2385,67 @@ static void FDKaacEnc_FDKaacEnc_calcPeCorrection( } +static void FDKaacEnc_calcPeCorrectionLowBitRes( + FIXP_DBL *const correctionFac_m, + INT *const correctionFac_e, + const INT peLast, + const INT bitsLast, + const INT bitresLevel, + const INT nChannels, + const FIXP_DBL bits2PeFactor_m, + const INT bits2PeFactor_e + ) +{ + /* tuning params */ + const FIXP_DBL amp = FL2FXCONST_DBL(0.005); + const FIXP_DBL maxDiff = FL2FXCONST_DBL(0.25f); + + if (bitsLast > 0) { + + /* Estimate deviation of granted and used dynamic bits in previous frame, in PE units */ + const int bitsBalLast = peLast - FDKaacEnc_bits2pe2( + bitsLast, + bits2PeFactor_m, + bits2PeFactor_e); + + /* reserve n bits per channel */ + int headroom = (bitresLevel>=50*nChannels) ? 0 : (100*nChannels); + + /* in PE units */ + headroom = FDKaacEnc_bits2pe2( + headroom, + bits2PeFactor_m, + bits2PeFactor_e); + + /* + * diff = amp * ((bitsBalLast - headroom) / (bitresLevel + headroom) + * diff = max ( min ( diff, maxDiff, -maxDiff)) / 2 + */ + FIXP_DBL denominator = (FIXP_DBL)FDKaacEnc_bits2pe2(bitresLevel, bits2PeFactor_m, bits2PeFactor_e) + (FIXP_DBL)headroom; + + int scaling = 0; + FIXP_DBL diff = (bitsBalLast>=headroom) + ? fMult(amp, fDivNorm( (FIXP_DBL)(bitsBalLast - headroom), denominator, &scaling)) + : -fMult(amp, fDivNorm(-(FIXP_DBL)(bitsBalLast - headroom), denominator, &scaling)) ; + + scaling -= 1; /* divide by 2 */ + + diff = (scaling<=0) ? FDKmax( FDKmin (diff>>(-scaling), maxDiff>>1), -maxDiff>>1) + : FDKmax( FDKmin (diff, maxDiff>>(1+scaling)), -maxDiff>>(1+scaling)) << scaling; + + /* + * corrFac += diff + * corrFac = max ( min ( corrFac/2.f, 1.f/2.f, 0.75f/2.f ) ) + */ + *correctionFac_m = FDKmax(FDKmin((*correctionFac_m)+diff, FL2FXCONST_DBL(1.0f/2.f)), FL2FXCONST_DBL(0.75f/2.f)) ; + *correctionFac_e = 1; + } + else { + *correctionFac_m = FL2FXCONST_DBL(0.75/2.f); + *correctionFac_e = 1; + } +} + void FDKaacEnc_DistributeBits(ADJ_THR_STATE *adjThrState, ATS_ELEMENT *AdjThrStateElement, PSY_OUT_CHANNEL *psyOutChannel[(2)], @@ -2166,7 +2458,7 @@ void FDKaacEnc_DistributeBits(ADJ_THR_STATE *adjThrState, const INT bitresBits, const INT maxBitresBits, const FIXP_DBL maxBitFac, - const INT bitDistributenMode) + const INT bitDistributionMode) { FIXP_DBL bitFactor; INT noRedPe = peData->pe; @@ -2184,7 +2476,7 @@ void FDKaacEnc_DistributeBits(ADJ_THR_STATE *adjThrState, } if (grantedDynBits >= 1) { - if (bitDistributenMode!=0) { + if (bitDistributionMode!=0) { *grantedPe = FDKaacEnc_bits2pe2(grantedDynBits, AdjThrStateElement->bits2PeFactor_m, AdjThrStateElement->bits2PeFactor_e); } else @@ -2208,16 +2500,32 @@ void FDKaacEnc_DistributeBits(ADJ_THR_STATE *adjThrState, } /* correction of pe value */ - { - FDKaacEnc_FDKaacEnc_calcPeCorrection( - &AdjThrStateElement->peCorrectionFactor_m, - &AdjThrStateElement->peCorrectionFactor_e, - fixMin(*grantedPe, noRedPe), - AdjThrStateElement->peLast, - AdjThrStateElement->dynBitsLast, - AdjThrStateElement->bits2PeFactor_m, - AdjThrStateElement->bits2PeFactor_e + switch (bitDistributionMode) { + case 2: + case 1: + FDKaacEnc_calcPeCorrectionLowBitRes( + &AdjThrStateElement->peCorrectionFactor_m, + &AdjThrStateElement->peCorrectionFactor_e, + AdjThrStateElement->peLast, + AdjThrStateElement->dynBitsLast, + bitresBits, + nChannels, + AdjThrStateElement->bits2PeFactor_m, + AdjThrStateElement->bits2PeFactor_e ); + break; + case 0: + default: + FDKaacEnc_FDKaacEnc_calcPeCorrection( + &AdjThrStateElement->peCorrectionFactor_m, + &AdjThrStateElement->peCorrectionFactor_e, + fixMin(*grantedPe, noRedPe), + AdjThrStateElement->peLast, + AdjThrStateElement->dynBitsLast, + AdjThrStateElement->bits2PeFactor_m, + AdjThrStateElement->bits2PeFactor_e + ); + break; } *grantedPeCorr = (INT)(fMult((FIXP_DBL)(*grantedPe<<Q_AVGBITS), AdjThrStateElement->peCorrectionFactor_m) >> (Q_AVGBITS-AdjThrStateElement->peCorrectionFactor_e)); @@ -2232,10 +2540,10 @@ void FDKaacEnc_DistributeBits(ADJ_THR_STATE *adjThrState, functionname: FDKaacEnc_AdjustThresholds description: adjust thresholds *****************************************************************************/ -void FDKaacEnc_AdjustThresholds(ATS_ELEMENT* AdjThrStateElement[(6)], - QC_OUT_ELEMENT* qcElement[(6)], +void FDKaacEnc_AdjustThresholds(ATS_ELEMENT* AdjThrStateElement[(8)], + QC_OUT_ELEMENT* qcElement[(8)], QC_OUT* qcOut, - PSY_OUT_ELEMENT* psyOutElement[(6)], + PSY_OUT_ELEMENT* psyOutElement[(8)], INT CBRbitrateMode, CHANNEL_MAPPING* cm) { @@ -2291,20 +2599,19 @@ void FDKaacEnc_AdjustThresholds(ATS_ELEMENT* AdjThrStateElement[(6)], } /* -end- element loop */ } - for (i=0; i<cm->nElements; i++) { - int ch,sfb,sfbGrp; - /* no weighting of threholds and energies for mlout */ - /* weight energies and thresholds */ - for (ch=0; ch<cm->elInfo[i].nChannelsInEl; ch++) { - QC_OUT_CHANNEL* pQcOutCh = qcElement[i]->qcOutChannel[ch]; - for (sfbGrp = 0;sfbGrp < psyOutElement[i]->psyOutChannel[ch]->sfbCnt; sfbGrp+=psyOutElement[i]->psyOutChannel[ch]->sfbPerGroup) { - for (sfb=0; sfb<psyOutElement[i]->psyOutChannel[ch]->maxSfbPerGroup; sfb++) { - pQcOutCh->sfbThresholdLdData[sfb+sfbGrp] += pQcOutCh->sfbEnFacLd[sfb+sfbGrp]; - } + for (i=0; i<cm->nElements; i++) { + int ch,sfb,sfbGrp; + /* no weighting of threholds and energies for mlout */ + /* weight energies and thresholds */ + for (ch=0; ch<cm->elInfo[i].nChannelsInEl; ch++) { + QC_OUT_CHANNEL* pQcOutCh = qcElement[i]->qcOutChannel[ch]; + for (sfbGrp = 0;sfbGrp < psyOutElement[i]->psyOutChannel[ch]->sfbCnt; sfbGrp+=psyOutElement[i]->psyOutChannel[ch]->sfbPerGroup) { + for (sfb=0; sfb<psyOutElement[i]->psyOutChannel[ch]->maxSfbPerGroup; sfb++) { + pQcOutCh->sfbThresholdLdData[sfb+sfbGrp] += pQcOutCh->sfbEnFacLd[sfb+sfbGrp]; } } } - + } } void FDKaacEnc_AdjThrClose(ADJ_THR_STATE** phAdjThr) @@ -2313,7 +2620,7 @@ void FDKaacEnc_AdjThrClose(ADJ_THR_STATE** phAdjThr) ADJ_THR_STATE* hAdjThr = *phAdjThr; if (hAdjThr!=NULL) { - for (i=0; i<(6); i++) { + for (i=0; i<(8); i++) { if (hAdjThr->adjThrStateElem[i]!=NULL) { FreeRam_aacEnc_AdjThrStateElement(&hAdjThr->adjThrStateElem[i]); } diff --git a/libAACenc/src/adj_thr.h b/libAACenc/src/adj_thr.h index 83d4c49..69b1dcc 100644 --- a/libAACenc/src/adj_thr.h +++ b/libAACenc/src/adj_thr.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -98,23 +98,28 @@ amm-info@iis.fraunhofer.de #include "interface.h" - -void FDKaacEnc_peCalculation(PE_DATA *peData, - PSY_OUT_CHANNEL* psyOutChannel[(2)], - QC_OUT_CHANNEL* qcOutChannel[(2)], - struct TOOLSINFO *toolsInfo, - ATS_ELEMENT* adjThrStateElement, - const INT nChannels); +void FDKaacEnc_peCalculation( + PE_DATA *peData, + PSY_OUT_CHANNEL* psyOutChannel[(2)], + QC_OUT_CHANNEL* qcOutChannel[(2)], + struct TOOLSINFO *toolsInfo, + ATS_ELEMENT* adjThrStateElement, + const INT nChannels + ); INT FDKaacEnc_AdjThrNew(ADJ_THR_STATE** phAdjThr, INT nElements); void FDKaacEnc_AdjThrInit(ADJ_THR_STATE *hAdjThr, const INT peMean, - ELEMENT_BITS* elBits[(6)], + ELEMENT_BITS* elBits[(8)], + INT invQuant, INT nElements, + INT nChannelsEff, + INT sampleRate, + INT advancedBitsToPe, FIXP_DBL vbrQualFactor); - + void FDKaacEnc_DistributeBits(ADJ_THR_STATE *adjThrState, ATS_ELEMENT *AdjThrStateElement, @@ -128,12 +133,12 @@ void FDKaacEnc_DistributeBits(ADJ_THR_STATE *adjThrState, const INT bitresBits, const INT maxBitresBits, const FIXP_DBL maxBitFac, - const INT bitDistributenMode); + const INT bitDistributionMode); -void FDKaacEnc_AdjustThresholds(ATS_ELEMENT* AdjThrStateElement[(6)], - QC_OUT_ELEMENT* qcElement[(6)], +void FDKaacEnc_AdjustThresholds(ATS_ELEMENT* AdjThrStateElement[(8)], + QC_OUT_ELEMENT* qcElement[(8)], QC_OUT* qcOut, - PSY_OUT_ELEMENT* psyOutElement[(6)], + PSY_OUT_ELEMENT* psyOutElement[(8)], INT CBRbitrateMode, CHANNEL_MAPPING* cm); diff --git a/libAACenc/src/adj_thr_data.h b/libAACenc/src/adj_thr_data.h index d209a51..3eb7678 100644 --- a/libAACenc/src/adj_thr_data.h +++ b/libAACenc/src/adj_thr_data.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -144,7 +144,7 @@ typedef struct { typedef struct { BRES_PARAM bresParamLong, bresParamShort; - ATS_ELEMENT* adjThrStateElem[(6)]; + ATS_ELEMENT* adjThrStateElem[(8)]; } ADJ_THR_STATE; #endif diff --git a/libAACenc/src/band_nrg.cpp b/libAACenc/src/band_nrg.cpp index 0e46b45..861f7a8 100644 --- a/libAACenc/src/band_nrg.cpp +++ b/libAACenc/src/band_nrg.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/band_nrg.h b/libAACenc/src/band_nrg.h index cf4c4cb..540a8ef 100644 --- a/libAACenc/src/band_nrg.h +++ b/libAACenc/src/band_nrg.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/bandwidth.cpp b/libAACenc/src/bandwidth.cpp index f6ca8ef..6fc7d87 100644 --- a/libAACenc/src/bandwidth.cpp +++ b/libAACenc/src/bandwidth.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -204,7 +204,6 @@ static INT GetBandwidthEntry( INT bwTabSize = 0; switch (frameLength) { - case 960: case 1024: pBwTab = bandWidthTable; bwTabSize = sizeof(bandWidthTable)/sizeof(BANDWIDTH_TAB); @@ -253,7 +252,6 @@ static INT GetBandwidthEntry( chanBitRate < pBwTab[i+1].chanBitRate) { switch (frameLength) { - case 960: case 1024: bandwidth = (entryNo==0) ? pBwTab[i].bandWidthMono @@ -318,6 +316,8 @@ AAC_ENCODER_ERROR FDKaacEnc_DetermineBandWidth(INT* bandWidth, case MODE_1_2_2: case MODE_1_2_2_1: case MODE_1_2_2_2_1: + case MODE_7_1_REAR_SURROUND: + case MODE_7_1_FRONT_CENTER: *bandWidth = bandWidthTableVBR[bitrateMode].bandWidth2AndMoreChan; break; default: @@ -348,6 +348,8 @@ AAC_ENCODER_ERROR FDKaacEnc_DetermineBandWidth(INT* bandWidth, case MODE_1_2_2: /* sce + cpe + cpe */ case MODE_1_2_2_1: /* (5.1) sce + cpe + cpe + lfe */ case MODE_1_2_2_2_1: /* (7.1) sce + cpe + cpe + cpe + lfe */ + case MODE_7_1_REAR_SURROUND: + case MODE_7_1_FRONT_CENTER: entryNo = 1; /* use stereo bandwith settings */ break; diff --git a/libAACenc/src/bandwidth.h b/libAACenc/src/bandwidth.h index 61c7f93..2e92453 100644 --- a/libAACenc/src/bandwidth.h +++ b/libAACenc/src/bandwidth.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/bit_cnt.cpp b/libAACenc/src/bit_cnt.cpp index e89710e..926ee49 100644 --- a/libAACenc/src/bit_cnt.cpp +++ b/libAACenc/src/bit_cnt.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/bit_cnt.h b/libAACenc/src/bit_cnt.h index 8650566..7c4b59e 100644 --- a/libAACenc/src/bit_cnt.h +++ b/libAACenc/src/bit_cnt.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/bitenc.cpp b/libAACenc/src/bitenc.cpp index d2cb5af..8e477aa 100644 --- a/libAACenc/src/bitenc.cpp +++ b/libAACenc/src/bitenc.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -1360,7 +1360,7 @@ AAC_ENCODER_ERROR FDKaacEnc_WriteBitstream(HANDLE_TRANSPORTENC hTpEnc, if ( (syntaxFlags & AC_ER) && !(syntaxFlags & AC_DRM) ) { - UCHAR channelElementExtensionWritten[(6)][(1)]; /* 0: extension not touched, 1: extension already written */ + UCHAR channelElementExtensionWritten[(8)][(1)]; /* 0: extension not touched, 1: extension already written */ FDKmemclear(channelElementExtensionWritten, sizeof(channelElementExtensionWritten)); diff --git a/libAACenc/src/bitenc.h b/libAACenc/src/bitenc.h index 337ce38..498be7c 100644 --- a/libAACenc/src/bitenc.h +++ b/libAACenc/src/bitenc.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/block_switch.cpp b/libAACenc/src/block_switch.cpp index 96fcb08..7b3e275 100644 --- a/libAACenc/src/block_switch.cpp +++ b/libAACenc/src/block_switch.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -83,7 +83,7 @@ amm-info@iis.fraunhofer.de /***************************** MPEG-4 AAC Encoder ************************** - Author(s): M. Werner + Author(s): M. Werner, Tobias Chalupka Description: Block switching ******************************************************************************/ @@ -100,9 +100,11 @@ amm-info@iis.fraunhofer.de static FIXP_DBL FDKaacEnc_GetWindowEnergy(const FIXP_DBL in[], const INT blSwWndIdx); -static void FDKaacEnc_CalcWindowEnergy( BLOCK_SWITCHING_CONTROL *RESTRICT blockSwitchingControl, - INT windowLen); - +static void FDKaacEnc_CalcWindowEnergy( + BLOCK_SWITCHING_CONTROL *RESTRICT blockSwitchingControl, + INT windowLen, + const INT_PCM *pTimeSignal + ); /****************** Constants *****************************/ /* LONG START SHORT STOP LOWOV */ @@ -145,20 +147,9 @@ static const FIXP_DBL minAttackNrg = (FL2FXCONST_DBL(1e+6f*NORM_PCM_ENERGY)>>BLO /**************** internal function prototypes ***********/ -static INT FDKaacEnc_GetWindowIndex(INT blockSwWindowIndex); - -static FIXP_DBL FDKaacEnc_GetWindowEnergy(const FIXP_DBL in[], const INT shortWndIdx); - -static void FDKaacEnc_CalcWindowEnergy( BLOCK_SWITCHING_CONTROL *RESTRICT blockSwitchingControl, - INT windowLen); - - - /****************** Routines ****************************/ void FDKaacEnc_InitBlockSwitching(BLOCK_SWITCHING_CONTROL *blockSwitchingControl, INT isLowDelay) { - /* note: the pointer to timeSignal can be zeroed here, because it is initialized for every call - to FDKaacEnc_BlockSwitching anew */ FDKmemclear (blockSwitchingControl, sizeof(BLOCK_SWITCHING_CONTROL)); if (isLowDelay) @@ -214,7 +205,7 @@ static const INT chgWndSqLkAhd[2][2][N_BLOCKTYPES] = /*attack */ {START_WINDOW, SHORT_WINDOW, SHORT_WINDOW, START_WINDOW, WRONG_WINDOW, WRONG_WINDOW} } /* attack */ }; -int FDKaacEnc_BlockSwitching(BLOCK_SWITCHING_CONTROL *blockSwitchingControl, const INT granuleLength, const int isLFE) +int FDKaacEnc_BlockSwitching(BLOCK_SWITCHING_CONTROL *blockSwitchingControl, const INT granuleLength, const int isLFE, const INT_PCM *pTimeSignal) { UINT i; FIXP_DBL enM1, enMax; @@ -263,7 +254,7 @@ int FDKaacEnc_BlockSwitching(BLOCK_SWITCHING_CONTROL *blockSwitchingControl, con /* Calculate unfiltered and filtered energies in subwindows and combine to segments */ - FDKaacEnc_CalcWindowEnergy(blockSwitchingControl, granuleLength>>(nBlockSwitchWindows==4? 2:3 )); + FDKaacEnc_CalcWindowEnergy(blockSwitchingControl, granuleLength>>(nBlockSwitchWindows==4? 2:3 ), pTimeSignal); /* now calculate if there is an attack */ @@ -335,8 +326,7 @@ static FIXP_DBL FDKaacEnc_GetWindowEnergy(const FIXP_DBL in[], const INT blSwWnd } - -static void FDKaacEnc_CalcWindowEnergy(BLOCK_SWITCHING_CONTROL *RESTRICT blockSwitchingControl, INT windowLen) +static void FDKaacEnc_CalcWindowEnergy(BLOCK_SWITCHING_CONTROL *RESTRICT blockSwitchingControl, INT windowLen, const INT_PCM *pTimeSignal) { INT i; UINT w; @@ -344,8 +334,6 @@ static void FDKaacEnc_CalcWindowEnergy(BLOCK_SWITCHING_CONTROL *RESTRICT blockSw FIXP_SGL hiPassCoeff0 = hiPassCoeff[0]; FIXP_SGL hiPassCoeff1 = hiPassCoeff[1]; - INT_PCM *timeSignal = blockSwitchingControl->timeSignal; - /* sum up scalarproduct of timesignal as windowed Energies */ for (w=0; w < blockSwitchingControl->nBlockSwitchWindows; w++) { @@ -361,9 +349,9 @@ static void FDKaacEnc_CalcWindowEnergy(BLOCK_SWITCHING_CONTROL *RESTRICT blockSw FIXP_DBL tempUnfiltered, tempFiltred, t1, t2; /* tempUnfiltered is scaled with 1 to prevent overflows during calculation of tempFiltred */ #if SAMPLE_BITS == DFRACT_BITS - tempUnfiltered = (FIXP_DBL) *timeSignal++ >> 1; + tempUnfiltered = (FIXP_DBL) *pTimeSignal++ >> 1; #else - tempUnfiltered = (FIXP_DBL) *timeSignal++ << (DFRACT_BITS-SAMPLE_BITS-1); + tempUnfiltered = (FIXP_DBL) *pTimeSignal++ << (DFRACT_BITS-SAMPLE_BITS-1); #endif t1 = fMultDiv2(hiPassCoeff1, tempUnfiltered-temp_iirState0); t2 = fMultDiv2(hiPassCoeff0, temp_iirState1); diff --git a/libAACenc/src/block_switch.h b/libAACenc/src/block_switch.h index 179e16b..e94b6f5 100644 --- a/libAACenc/src/block_switch.h +++ b/libAACenc/src/block_switch.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -107,7 +107,6 @@ amm-info@iis.fraunhofer.de /****************** Structures ***************************/ typedef struct{ - INT_PCM *timeSignal; INT lastWindowSequence; INT windowShape; INT lastWindowShape; @@ -136,7 +135,7 @@ typedef struct{ void FDKaacEnc_InitBlockSwitching(BLOCK_SWITCHING_CONTROL *blockSwitchingControl, INT isLowDelay); -int FDKaacEnc_BlockSwitching(BLOCK_SWITCHING_CONTROL *blockSwitchingControl, const INT granuleLength, const int isLFE); +int FDKaacEnc_BlockSwitching(BLOCK_SWITCHING_CONTROL *blockSwitchingControl, const INT granuleLength, const int isLFE, const INT_PCM *pTimeSignal); int FDKaacEnc_SyncBlockSwitching( BLOCK_SWITCHING_CONTROL *blockSwitchingControlLeft, diff --git a/libAACenc/src/channel_map.cpp b/libAACenc/src/channel_map.cpp index 6eddd47..99ed2b5 100644 --- a/libAACenc/src/channel_map.cpp +++ b/libAACenc/src/channel_map.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -124,7 +124,7 @@ amm-info@iis.fraunhofer.de typedef struct { CHANNEL_MODE encoderMode; - INT channel_assignment[/*(6)*/12]; + INT channel_assignment[/*(8)*/12]; } CHANNEL_ASSIGNMENT_INFO_TAB; @@ -139,6 +139,8 @@ static const CHANNEL_ASSIGNMENT_INFO_TAB assignmentInfoTabMpeg[] = { MODE_1_2_2, { 0, 1, 2, 3, 4,-1,-1,-1,-1,-1,-1,-1} }, /* 5ch */ { MODE_1_2_2_1, { 0, 1, 2, 3, 4, 5,-1,-1,-1,-1,-1,-1} }, /* 5.1ch */ { MODE_1_2_2_2_1, { 0, 1, 2, 3, 4, 5, 6, 7,-1,-1,-1,-1} }, /* 7.1ch */ + { MODE_7_1_REAR_SURROUND, { 0, 1, 2, 3, 4, 5, 6, 7,-1,-1,-1,-1} }, /* 7.1ch */ + { MODE_7_1_FRONT_CENTER, { 0, 1, 2, 3, 4, 5, 6, 7,-1,-1,-1,-1} } /* 7.1ch */ }; static const CHANNEL_ASSIGNMENT_INFO_TAB assignmentInfoTabWav[] = @@ -150,7 +152,9 @@ static const CHANNEL_ASSIGNMENT_INFO_TAB assignmentInfoTabWav[] = { MODE_1_2_1, { 2, 0, 1, 3,-1,-1,-1,-1,-1,-1,-1,-1} }, /* 4ch */ { MODE_1_2_2, { 2, 0, 1, 3, 4,-1,-1,-1,-1,-1,-1,-1} }, /* 5ch */ { MODE_1_2_2_1, { 2, 0, 1, 4, 5, 3,-1,-1,-1,-1,-1,-1} }, /* 5.1ch */ - { MODE_1_2_2_2_1, { 2, 0, 1, 6, 7, 4, 5, 3,-1,-1,-1,-1} }, /* 7.1ch */ + { MODE_1_2_2_2_1, { 2, 6, 7, 0, 1, 4, 5, 3,-1,-1,-1,-1} }, /* 7.1ch */ + { MODE_7_1_REAR_SURROUND, { 2, 0, 1, 6, 7, 4, 5, 3,-1,-1,-1,-1} }, /* 7.1ch */ + { MODE_7_1_FRONT_CENTER, { 2, 6, 7, 0, 1, 4, 5, 3,-1,-1,-1,-1} }, /* 7.1ch */ }; static const CHANNEL_ASSIGNMENT_INFO_TAB assignmentInfoTabWg4[] = @@ -177,6 +181,8 @@ static const CHANNEL_MODE_CONFIG_TAB channelModeConfig[] = { MODE_1_2_2, 5, 5, 3 }, /* SCE,CPE,CPE */ { MODE_1_2_2_1, 6, 5, 4 }, /* SCE,CPE,CPE,LFE */ { MODE_1_2_2_2_1, 8, 7, 5 }, /* SCE,CPE,CPE,CPE,LFE */ + { MODE_7_1_REAR_SURROUND, 8, 7, 5 }, + { MODE_7_1_FRONT_CENTER, 8, 7, 5 }, }; #define MAX_MODES (sizeof(assignmentInfoTabWav)/sizeof(CHANNEL_ASSIGNMENT_INFO_TAB)) @@ -329,6 +335,8 @@ AAC_ENCODER_ERROR FDKaacEnc_InitChannelMapping(CHANNEL_MODE mode, CHANNEL_ORDER break; case MODE_1_2_2_2_1: + case MODE_7_1_REAR_SURROUND: + case MODE_7_1_FRONT_CENTER: /* (7.1) sce + cpe + cpe + cpe + lfe */ FDKaacEnc_initElement(&cm->elInfo[0], ID_SCE, &count, mode, co, it_cnt, FL2FXCONST_DBL(0.18f)); FDKaacEnc_initElement(&cm->elInfo[1], ID_CPE, &count, mode, co, it_cnt, FL2FXCONST_DBL(0.26f)); @@ -336,14 +344,13 @@ AAC_ENCODER_ERROR FDKaacEnc_InitChannelMapping(CHANNEL_MODE mode, CHANNEL_ORDER FDKaacEnc_initElement(&cm->elInfo[3], ID_CPE, &count, mode, co, it_cnt, FL2FXCONST_DBL(0.26f)); FDKaacEnc_initElement(&cm->elInfo[4], ID_LFE, &count, mode, co, it_cnt, FL2FXCONST_DBL(0.04f)); break; - default: //*chMap=0; return AAC_ENC_UNSUPPORTED_CHANNELCONFIG; }; - FDK_ASSERT(cm->nElements<=(6)); + FDK_ASSERT(cm->nElements<=(8)); return AAC_ENC_OK; @@ -456,19 +463,18 @@ AAC_ENCODER_ERROR FDKaacEnc_InitElementBits(QC_STATE *hQC, break; } - - case MODE_1_2_2_2_1:{ - /* (7.1) sce + cpe + cpe + cpe + lfe */ - hQC->elementBits[0]->relativeBitsEl = cm->elInfo[0].relativeBits; - hQC->elementBits[1]->relativeBitsEl = cm->elInfo[1].relativeBits; - hQC->elementBits[2]->relativeBitsEl = cm->elInfo[2].relativeBits; - hQC->elementBits[3]->relativeBitsEl = cm->elInfo[3].relativeBits; - hQC->elementBits[4]->relativeBitsEl = cm->elInfo[4].relativeBits; - FIXP_DBL sceRate = cm->elInfo[0].relativeBits; - FIXP_DBL cpe1Rate = cm->elInfo[1].relativeBits; - FIXP_DBL cpe2Rate = cm->elInfo[2].relativeBits; - FIXP_DBL cpe3Rate = cm->elInfo[3].relativeBits; - FIXP_DBL lfeRate = cm->elInfo[4].relativeBits; + case MODE_7_1_REAR_SURROUND: + case MODE_7_1_FRONT_CENTER: + case MODE_1_2_2_2_1: { + int cpe3Idx = 3; + int lfeIdx = 4; + + /* (7.1) sce + cpe + cpe + cpe + lfe */ + FIXP_DBL sceRate = hQC->elementBits[0]->relativeBitsEl = cm->elInfo[0].relativeBits; + FIXP_DBL cpe1Rate = hQC->elementBits[1]->relativeBitsEl = cm->elInfo[1].relativeBits; + FIXP_DBL cpe2Rate = hQC->elementBits[2]->relativeBitsEl = cm->elInfo[2].relativeBits; + FIXP_DBL cpe3Rate = hQC->elementBits[cpe3Idx]->relativeBitsEl = cm->elInfo[cpe3Idx].relativeBits; + FIXP_DBL lfeRate = hQC->elementBits[lfeIdx]->relativeBitsEl = cm->elInfo[lfeIdx].relativeBits; int maxBitsTot = maxChannelBits * 7; /* LFE does not add to bit reservoir */ int sc = CountLeadingBits(fixMax(maxChannelBits,averageBitsTot)); @@ -480,17 +486,16 @@ AAC_ENCODER_ERROR FDKaacEnc_InitElementBits(QC_STATE *hQC, hQC->elementBits[0]->chBitrateEl = fMult(sceRate, (FIXP_DBL)(bitrateTot<<sc_brTot))>>sc_brTot; hQC->elementBits[1]->chBitrateEl = fMult(cpe1Rate, (FIXP_DBL)(bitrateTot<<sc_brTot))>>(sc_brTot+1); hQC->elementBits[2]->chBitrateEl = fMult(cpe2Rate, (FIXP_DBL)(bitrateTot<<sc_brTot))>>(sc_brTot+1); - hQC->elementBits[3]->chBitrateEl = fMult(cpe3Rate, (FIXP_DBL)(bitrateTot<<sc_brTot))>>(sc_brTot+1); - hQC->elementBits[4]->chBitrateEl = fMult(lfeRate, (FIXP_DBL)(bitrateTot<<sc_brTot))>>sc_brTot; + hQC->elementBits[cpe3Idx]->chBitrateEl = fMult(cpe3Rate, (FIXP_DBL)(bitrateTot<<sc_brTot))>>(sc_brTot+1); + hQC->elementBits[lfeIdx]->chBitrateEl = fMult(lfeRate, (FIXP_DBL)(bitrateTot<<sc_brTot))>>sc_brTot; hQC->elementBits[0]->maxBitsEl = maxChannelBits; hQC->elementBits[1]->maxBitsEl = 2*maxChannelBits; hQC->elementBits[2]->maxBitsEl = 2*maxChannelBits; - hQC->elementBits[3]->maxBitsEl = 2*maxChannelBits; - hQC->elementBits[4]->maxBitsEl = maxLfeBits; + hQC->elementBits[cpe3Idx]->maxBitsEl = 2*maxChannelBits; + hQC->elementBits[lfeIdx]->maxBitsEl = maxLfeBits; break; } - default: return AAC_ENC_UNSUPPORTED_CHANNELCONFIG; } @@ -532,6 +537,8 @@ ELEMENT_MODE FDKaacEnc_GetMonoStereoMode(const CHANNEL_MODE mode){ case MODE_1_2_2: case MODE_1_2_2_1: case MODE_1_2_2_2_1: + case MODE_7_1_REAR_SURROUND: + case MODE_7_1_FRONT_CENTER: monoStereoSetting = EL_MODE_STEREO; break; default: /* error */ diff --git a/libAACenc/src/channel_map.h b/libAACenc/src/channel_map.h index 6d135d2..2cfb486 100644 --- a/libAACenc/src/channel_map.h +++ b/libAACenc/src/channel_map.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/chaosmeasure.cpp b/libAACenc/src/chaosmeasure.cpp index 9d6d77e..4e56e9e 100644 --- a/libAACenc/src/chaosmeasure.cpp +++ b/libAACenc/src/chaosmeasure.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/chaosmeasure.h b/libAACenc/src/chaosmeasure.h index 732cb09..44301c5 100644 --- a/libAACenc/src/chaosmeasure.h +++ b/libAACenc/src/chaosmeasure.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/dyn_bits.cpp b/libAACenc/src/dyn_bits.cpp index 8cac2ef..0c07109 100644 --- a/libAACenc/src/dyn_bits.cpp +++ b/libAACenc/src/dyn_bits.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/dyn_bits.h b/libAACenc/src/dyn_bits.h index e7f219b..ae78a4c 100644 --- a/libAACenc/src/dyn_bits.h +++ b/libAACenc/src/dyn_bits.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/grp_data.cpp b/libAACenc/src/grp_data.cpp index 4355295..465865f 100644 --- a/libAACenc/src/grp_data.cpp +++ b/libAACenc/src/grp_data.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/grp_data.h b/libAACenc/src/grp_data.h index eddd694..f061855 100644 --- a/libAACenc/src/grp_data.h +++ b/libAACenc/src/grp_data.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/intensity.cpp b/libAACenc/src/intensity.cpp index 632620a..3807233 100644 --- a/libAACenc/src/intensity.cpp +++ b/libAACenc/src/intensity.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -450,23 +450,24 @@ FDKaacEnc_finalizeIntensityDecision(const FIXP_DBL *hrrErr, const INT maxSfbPerGroup) { INT sfb,sfboffs, j; - INT startIsSfb = 0; - INT inIsBlock; - INT currentIsSfbCount; - FIXP_DBL overallHrrError; FIXP_DBL isScaleLast = FL2FXCONST_DBL(0.0f); - FIXP_DBL isRegionLoudness; + INT isStartValueFound = 0; for (sfboffs = 0; sfboffs < sfbCnt; sfboffs += sfbPerGroup) { - inIsBlock = 0; - currentIsSfbCount = 0; - overallHrrError = FL2FXCONST_DBL(0.0f); - isRegionLoudness = FL2FXCONST_DBL(0.0f); + INT startIsSfb = 0; + INT inIsBlock = 0; + INT currentIsSfbCount = 0; + FIXP_DBL overallHrrError = FL2FXCONST_DBL(0.0f); + FIXP_DBL isRegionLoudness = FL2FXCONST_DBL(0.0f); + for (sfb = 0; sfb < maxSfbPerGroup; sfb++) { if (isMask[sfboffs + sfb] == 1) { if (currentIsSfbCount == 0) { startIsSfb = sfboffs + sfb; + } + if (isStartValueFound==0) { isScaleLast = realIsScale[sfboffs + sfb]; + isStartValueFound = 1; } inIsBlock = 1; currentIsSfbCount++; @@ -510,6 +511,14 @@ FDKaacEnc_finalizeIntensityDecision(const FIXP_DBL *hrrErr, for(j = startIsSfb; j <= sfboffs + sfb; j++) { isMask[j] = 0; } + isScaleLast = FL2FXCONST_DBL(0.0f); + isStartValueFound = 0; + for (j=0; j < startIsSfb; j++) { + if (isMask[j]!=0) { + isScaleLast = realIsScale[j]; + isStartValueFound = 1; + } + } } currentIsSfbCount = 0; overallHrrError = FL2FXCONST_DBL(0.0f); diff --git a/libAACenc/src/intensity.h b/libAACenc/src/intensity.h index 12be8bc..2acc292 100644 --- a/libAACenc/src/intensity.h +++ b/libAACenc/src/intensity.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/interface.h b/libAACenc/src/interface.h index a1c3a96..51fb72a 100644 --- a/libAACenc/src/interface.h +++ b/libAACenc/src/interface.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -92,6 +92,7 @@ amm-info@iis.fraunhofer.de #define _INTERFACE_H #include "common_fix.h" +#include "FDK_audio.h" #include "psy_data.h" #include "aacenc_tns.h" @@ -155,9 +156,14 @@ typedef struct { typedef struct { - PSY_OUT_ELEMENT* psyOutElement[(6)]; - PSY_OUT_CHANNEL* pPsyOutChannels[(6)]; + PSY_OUT_ELEMENT* psyOutElement[(8)]; + PSY_OUT_CHANNEL* pPsyOutChannels[(8)]; }PSY_OUT; +inline int isLowDelay( AUDIO_OBJECT_TYPE aot ) +{ + return (aot==AOT_ER_AAC_LD || aot==AOT_ER_AAC_ELD); +} + #endif /* _INTERFACE_H */ diff --git a/libAACenc/src/line_pe.cpp b/libAACenc/src/line_pe.cpp index ba7a25d..f3c0dab 100644 --- a/libAACenc/src/line_pe.cpp +++ b/libAACenc/src/line_pe.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/line_pe.h b/libAACenc/src/line_pe.h index 2fcc958..3d5cfd5 100644 --- a/libAACenc/src/line_pe.h +++ b/libAACenc/src/line_pe.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/metadata_compressor.cpp b/libAACenc/src/metadata_compressor.cpp index 852c8bc..876de57 100644 --- a/libAACenc/src/metadata_compressor.cpp +++ b/libAACenc/src/metadata_compressor.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -421,7 +421,7 @@ static FIXP_DBL tc2Coeff( result = f2Pow(-exponent, DFRACT_BITS-1-METADATA_FRACT_BITS, &e_res); /* result = 1.0 - exp(-1.0/((t) * (f))) */ - result = FL2FXCONST_DBL(1.0f) - scaleValue(result, e_res); + result = (FIXP_DBL)MAXVAL_DBL - scaleValue(result, e_res); return result; } @@ -539,14 +539,25 @@ INT FDK_DRC_Generator_Initialize( drcComp->channelIdx[RS] = channelMapping.elInfo[2].ChannelIndex[1]; break; case MODE_1_2_2_2_1: /* 7.1 ch */ - drcComp->channelIdx[L] = channelMapping.elInfo[1].ChannelIndex[0]; - drcComp->channelIdx[R] = channelMapping.elInfo[1].ChannelIndex[1]; - drcComp->channelIdx[C] = channelMapping.elInfo[0].ChannelIndex[0]; - drcComp->channelIdx[LFE] = channelMapping.elInfo[4].ChannelIndex[0]; - drcComp->channelIdx[LS] = channelMapping.elInfo[2].ChannelIndex[0]; - drcComp->channelIdx[RS] = channelMapping.elInfo[2].ChannelIndex[1]; - drcComp->channelIdx[LS2] = channelMapping.elInfo[3].ChannelIndex[0]; - drcComp->channelIdx[RS2] = channelMapping.elInfo[3].ChannelIndex[1]; + case MODE_7_1_FRONT_CENTER: + drcComp->channelIdx[L] = channelMapping.elInfo[2].ChannelIndex[0]; /* l */ + drcComp->channelIdx[R] = channelMapping.elInfo[2].ChannelIndex[1]; /* r */ + drcComp->channelIdx[C] = channelMapping.elInfo[0].ChannelIndex[0]; /* c */ + drcComp->channelIdx[LFE] = channelMapping.elInfo[4].ChannelIndex[0]; /* lfe */ + drcComp->channelIdx[LS] = channelMapping.elInfo[3].ChannelIndex[0]; /* ls */ + drcComp->channelIdx[RS] = channelMapping.elInfo[3].ChannelIndex[1]; /* rs */ + drcComp->channelIdx[LS2] = channelMapping.elInfo[1].ChannelIndex[0]; /* lc */ + drcComp->channelIdx[RS2] = channelMapping.elInfo[1].ChannelIndex[1]; /* rc */ + break; + case MODE_7_1_REAR_SURROUND: + drcComp->channelIdx[L] = channelMapping.elInfo[1].ChannelIndex[0]; /* l */ + drcComp->channelIdx[R] = channelMapping.elInfo[1].ChannelIndex[1]; /* r */ + drcComp->channelIdx[C] = channelMapping.elInfo[0].ChannelIndex[0]; /* c */ + drcComp->channelIdx[LFE] = channelMapping.elInfo[4].ChannelIndex[0]; /* lfe */ + drcComp->channelIdx[LS] = channelMapping.elInfo[3].ChannelIndex[0]; /* lrear */ + drcComp->channelIdx[RS] = channelMapping.elInfo[3].ChannelIndex[1]; /* rrear */ + drcComp->channelIdx[LS2] = channelMapping.elInfo[2].ChannelIndex[0]; /* ls */ + drcComp->channelIdx[RS2] = channelMapping.elInfo[2].ChannelIndex[1]; /* rs */ break; case MODE_1_1: case MODE_1_1_1_1: @@ -832,12 +843,12 @@ INT FDK_DRC_Generator_Calc( FIXP_DBL accu; /* drcComp->smoothLevel[i] = (1-alpha) * drcComp->smoothLevel[i] + alpha * level; */ - accu = fMult((FL2FXCONST_DBL(1.f)-alpha), drcComp->smoothLevel[i]); + accu = fMult(((FIXP_DBL)MAXVAL_DBL-alpha), drcComp->smoothLevel[i]); accu += fMult(alpha,level); drcComp->smoothLevel[i] = accu; /* drcComp->smoothGain[i] = (1-alpha) * drcComp->smoothGain[i] + alpha * gain; */ - accu = fMult((FL2FXCONST_DBL(1.f)-alpha), drcComp->smoothGain[i]); + accu = fMult(((FIXP_DBL)MAXVAL_DBL-alpha), drcComp->smoothGain[i]); accu += fMult(alpha,gain); drcComp->smoothGain[i] = accu; } @@ -941,7 +952,7 @@ INT FDK_DRC_Generator_Calc( if ((drcComp->channelIdx[LS] >= 0) && (drcComp->channelIdx[LS2] >= 0)) tmp = fMult(FL2FXCONST_DBL(0.707f), tmp); /* 7.1ch */ /*if ((drcComp->channelIdx[RS] >= 0) && (drcComp->channelIdx[RS2] >= 0)) tmp *=0.707f;*/ /* 7.1ch */ if (drcComp->channelIdx[S] >= 0) tmp += fMultDiv2(slev, fMult(FL2FXCONST_DBL(0.7f), (FIXP_PCM)pSamples[drcComp->channelIdx[S]]))>>(DOWNMIX_SHIFT-1); /* S */ - if (drcComp->channelIdx[C] >= 0) tmp += fMultDiv2(clev, (FIXP_PCM)pSamples[drcComp->channelIdx[C]])>>(DOWNMIX_SHIFT-1); /* C */ + if (drcComp->channelIdx[C] >= 0) tmp += fMult(clev, (FIXP_PCM)pSamples[drcComp->channelIdx[C]])>>(DOWNMIX_SHIFT-1); /* C (2*clev) */ tmp += (FX_PCM2FX_DBL((FIXP_PCM)pSamples[drcComp->channelIdx[L]])>>DOWNMIX_SHIFT); /* L */ tmp += (FX_PCM2FX_DBL((FIXP_PCM)pSamples[drcComp->channelIdx[R]])>>DOWNMIX_SHIFT); /* R */ @@ -973,7 +984,7 @@ INT FDK_DRC_Generator_Calc( * + 0.2f*2^(-METADATA_FRACT_BITS) + drcComp->smoothGain[i] */ peak[i] = fMult((FIXP_DBL)(10<<(METADATA_FRACT_BITS+LD_DATA_SHIFT)), fMult( FL2FX_DBL(2*0.30102999566398119521373889472449f), ld_peak)); - peak[i] += (FL2FX_DBL(0.2f)>>METADATA_INT_BITS); /* add a little bit headroom */ + peak[i] += (FL2FX_DBL(0.5f)>>METADATA_INT_BITS); /* add a little bit headroom */ peak[i] += drcComp->smoothGain[i]; } diff --git a/libAACenc/src/metadata_compressor.h b/libAACenc/src/metadata_compressor.h index c77e79e..ff639b5 100644 --- a/libAACenc/src/metadata_compressor.h +++ b/libAACenc/src/metadata_compressor.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/metadata_main.cpp b/libAACenc/src/metadata_main.cpp index 45763a1..e920793 100644 --- a/libAACenc/src/metadata_main.cpp +++ b/libAACenc/src/metadata_main.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/metadata_main.h b/libAACenc/src/metadata_main.h index f747f9f..bfc8ae1 100644 --- a/libAACenc/src/metadata_main.h +++ b/libAACenc/src/metadata_main.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/ms_stereo.cpp b/libAACenc/src/ms_stereo.cpp index ab0cb1c..306d490 100644 --- a/libAACenc/src/ms_stereo.cpp +++ b/libAACenc/src/ms_stereo.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/ms_stereo.h b/libAACenc/src/ms_stereo.h index 5657ae2..2f3addb 100644 --- a/libAACenc/src/ms_stereo.h +++ b/libAACenc/src/ms_stereo.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/noisedet.cpp b/libAACenc/src/noisedet.cpp index 178a2ad..f3c51de 100644 --- a/libAACenc/src/noisedet.cpp +++ b/libAACenc/src/noisedet.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/noisedet.h b/libAACenc/src/noisedet.h index bccf4ee..8d5e365 100644 --- a/libAACenc/src/noisedet.h +++ b/libAACenc/src/noisedet.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/pns_func.h b/libAACenc/src/pns_func.h index d1d8fb1..efa44ef 100644 --- a/libAACenc/src/pns_func.h +++ b/libAACenc/src/pns_func.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/pnsparam.cpp b/libAACenc/src/pnsparam.cpp index 3426ac3..afc5bdd 100644 --- a/libAACenc/src/pnsparam.cpp +++ b/libAACenc/src/pnsparam.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/pnsparam.h b/libAACenc/src/pnsparam.h index 53a2704..08bb83e 100644 --- a/libAACenc/src/pnsparam.h +++ b/libAACenc/src/pnsparam.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/pre_echo_control.cpp b/libAACenc/src/pre_echo_control.cpp index b1f9041..3dfd8ed 100644 --- a/libAACenc/src/pre_echo_control.cpp +++ b/libAACenc/src/pre_echo_control.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/pre_echo_control.h b/libAACenc/src/pre_echo_control.h index c2743d7..9224db0 100644 --- a/libAACenc/src/pre_echo_control.h +++ b/libAACenc/src/pre_echo_control.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/psy_configuration.cpp b/libAACenc/src/psy_configuration.cpp index 96f6a71..4393fa1 100644 --- a/libAACenc/src/psy_configuration.cpp +++ b/libAACenc/src/psy_configuration.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/psy_configuration.h b/libAACenc/src/psy_configuration.h index 3d8ad0b..3629246 100644 --- a/libAACenc/src/psy_configuration.h +++ b/libAACenc/src/psy_configuration.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/psy_const.h b/libAACenc/src/psy_const.h index 0195931..d9c9f43 100644 --- a/libAACenc/src/psy_const.h +++ b/libAACenc/src/psy_const.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -98,7 +98,6 @@ amm-info@iis.fraunhofer.de #define FRAME_MAXLEN_SHORT ((1024)/TRANS_FAC) #define FRAME_LEN_SHORT_128 ((1024)/TRANS_FAC) -#define FRAME_LEN_SHORT_120 (FRAME_LEN_LONG_960/TRANS_FAC) /* Filterbank type*/ enum FB_TYPE { diff --git a/libAACenc/src/psy_data.h b/libAACenc/src/psy_data.h index 2219f24..7183955 100644 --- a/libAACenc/src/psy_data.h +++ b/libAACenc/src/psy_data.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/psy_main.cpp b/libAACenc/src/psy_main.cpp index 672619e..59193c7 100644 --- a/libAACenc/src/psy_main.cpp +++ b/libAACenc/src/psy_main.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -116,11 +116,6 @@ static const FIXP_DBL fadeOutFactor[FADE_OUT_LEN] = {1840644096, 1533870080, 122 /* forward definitions */ -static inline int isLowDelay( AUDIO_OBJECT_TYPE aot ) -{ - return (aot==AOT_ER_AAC_LD || aot==AOT_ER_AAC_ELD); -} - /***************************************************************************** functionname: FDKaacEnc_PsyNew @@ -513,28 +508,28 @@ AAC_ENCODER_ERROR FDKaacEnc_psyMain(INT channels, for(ch = 0; ch < channels; ch++) { - C_ALLOC_SCRATCH_START(timeSignal, INT_PCM, (1024)); - psyStatic[ch]->blockSwitchingControl.timeSignal = timeSignal; + C_ALLOC_SCRATCH_START(pTimeSignal, INT_PCM, (1024)) /* deinterleave input data and use for block switching */ - FDKaacEnc_deinterleaveInputBuffer( psyStatic[ch]->blockSwitchingControl.timeSignal, + FDKaacEnc_deinterleaveInputBuffer( pTimeSignal, &pInput[chIdx[ch]], psyConf->granuleLength, totalChannels); FDKaacEnc_BlockSwitching (&psyStatic[ch]->blockSwitchingControl, - psyConf->granuleLength - ,psyStatic[ch]->isLFE + psyConf->granuleLength, + psyStatic[ch]->isLFE, + pTimeSignal ); /* fill up internal input buffer, to 2xframelength samples */ FDKmemcpy(psyStatic[ch]->psyInputBuffer+blockSwitchingOffset, - psyStatic[ch]->blockSwitchingControl.timeSignal, + pTimeSignal, (2*psyConf->granuleLength-blockSwitchingOffset)*sizeof(INT_PCM)); - C_ALLOC_SCRATCH_END(timeSignal, INT_PCM, (1024)); + C_ALLOC_SCRATCH_END(pTimeSignal, INT_PCM, (1024)) } /* synch left and right block type */ @@ -1345,7 +1340,7 @@ void FDKaacEnc_PsyClose(PSY_INTERNAL **phPsyInternal, if (hPsyInternal) { - for (i=0; i<(6); i++) { + for (i=0; i<(8); i++) { if (hPsyInternal->pStaticChannels[i]) { if (hPsyInternal->pStaticChannels[i]->psyInputBuffer) FreeRam_aacEnc_PsyInputBuffer(&hPsyInternal->pStaticChannels[i]->psyInputBuffer); /* AUDIO INPUT BUFFER */ @@ -1354,7 +1349,7 @@ void FDKaacEnc_PsyClose(PSY_INTERNAL **phPsyInternal, } } - for (i=0; i<(6); i++) { + for (i=0; i<(8); i++) { if (hPsyInternal->psyElement[i]) FreeRam_aacEnc_PsyElement(&hPsyInternal->psyElement[i]); /* PSY_ELEMENT */ } @@ -1368,12 +1363,12 @@ void FDKaacEnc_PsyClose(PSY_INTERNAL **phPsyInternal, for (n=0; n<(1); n++) { if (phPsyOut[n]) { - for (i=0; i<(6); i++) { + for (i=0; i<(8); i++) { if (phPsyOut[n]->pPsyOutChannels[i]) FreeRam_aacEnc_PsyOutChannel(&phPsyOut[n]->pPsyOutChannels[i]); /* PSY_OUT_CHANNEL */ } - for (i=0; i<(6); i++) { + for (i=0; i<(8); i++) { if (phPsyOut[n]->psyOutElement[i]) FreeRam_aacEnc_PsyOutElements(&phPsyOut[n]->psyOutElement[i]); /* PSY_OUT_ELEMENTS */ } diff --git a/libAACenc/src/psy_main.h b/libAACenc/src/psy_main.h index 9670f4a..7bdcc38 100644 --- a/libAACenc/src/psy_main.h +++ b/libAACenc/src/psy_main.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -117,8 +117,8 @@ typedef struct { typedef struct { PSY_CONFIGURATION psyConf[2]; /* LONG / SHORT */ - PSY_ELEMENT* psyElement[(6)]; - PSY_STATIC* pStaticChannels[(6)]; + PSY_ELEMENT* psyElement[(8)]; + PSY_STATIC* pStaticChannels[(8)]; PSY_DYNAMIC* psyDynamic; INT granuleLength; diff --git a/libAACenc/src/qc_data.h b/libAACenc/src/qc_data.h index d37ea92..a9309c8 100644 --- a/libAACenc/src/qc_data.h +++ b/libAACenc/src/qc_data.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -127,7 +127,7 @@ typedef struct { INT nChannels; INT nChannelsEff; INT nElements; - ELEMENT_INFO elInfo[(6)]; + ELEMENT_INFO elInfo[(8)]; } CHANNEL_MAPPING; typedef struct { @@ -143,6 +143,8 @@ struct QC_INIT{ INT maxBits; /* maximum number of bits in reservoir */ INT averageBits; /* average number of bits we should use */ INT bitRes; + INT sampleRate; /* output sample rate */ + INT advancedBitsToPe; /* if set, calc bits2PE factor depending on samplerate */ INT staticBits; /* Bits per frame consumed by transport layers. */ QCDATA_BR_MODE bitrateMode; INT meanPe; @@ -215,8 +217,8 @@ typedef struct typedef struct { - QC_OUT_ELEMENT *qcElement[(6)]; - QC_OUT_CHANNEL *pQcOutChannels[(6)]; + QC_OUT_ELEMENT *qcElement[(8)]; + QC_OUT_CHANNEL *pQcOutChannels[(8)]; QC_OUT_EXTENSION extension[(2+2)]; /* global extension payload */ INT nExtensions; /* number of extension payloads for this AU */ INT maxDynBits; /* maximal allowed dynamic bits in frame */ @@ -252,7 +254,7 @@ typedef struct INT minBitsPerFrame; /* minimal allowd bits per fram, superframing - DRM */ INT nElements; QCDATA_BR_MODE bitrateMode; - INT bitDistributenMode; /* 0: full bitreservoir, 1: reduced bitreservoir, 2: disabled bitreservoir */ + INT bitDistributionMode; /* 0: full bitreservoir, 1: reduced bitreservoir, 2: disabled bitreservoir */ INT bitResTot; INT bitResTotMax; INT maxIterations; /* Maximum number of allowed iterations before FDKaacEnc_crashRecovery() is applied. */ @@ -263,7 +265,7 @@ typedef struct PADDING padding; - ELEMENT_BITS *elementBits[(6)]; + ELEMENT_BITS *elementBits[(8)]; BITCNTR_STATE *hBitCounter; ADJ_THR_STATE *hAdjThr; diff --git a/libAACenc/src/qc_main.cpp b/libAACenc/src/qc_main.cpp index d7e76c7..b74510a 100644 --- a/libAACenc/src/qc_main.cpp +++ b/libAACenc/src/qc_main.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -382,10 +382,10 @@ AAC_ENCODER_ERROR FDKaacEnc_QCInit(QC_STATE *hQC, if ( isConstantBitrateMode(hQC->bitrateMode) ) { INT bitresPerChannel = (hQC->bitResTotMax / init->channelMapping->nChannelsEff); /* 0: full bitreservoir, 1: reduced bitreservoir, 2: disabled bitreservoir */ - hQC->bitDistributenMode = (bitresPerChannel>50) ? 0 : (bitresPerChannel>0) ? 1 : 2; + hQC->bitDistributionMode = (bitresPerChannel>100) ? 0 : (bitresPerChannel>0) ? 1 : 2; } else { - hQC->bitDistributenMode = 0; /* full bitreservoir */ + hQC->bitDistributionMode = 0; /* full bitreservoir */ } @@ -420,11 +420,17 @@ AAC_ENCODER_ERROR FDKaacEnc_QCInit(QC_STATE *hQC, break; } - FDKaacEnc_AdjThrInit(hQC->hAdjThr, - init->meanPe, - hQC->elementBits, /* or channelBitrates, was: channelBitrate */ - init->channelMapping->nElements, - hQC->vbrQualFactor); + FDKaacEnc_AdjThrInit( + hQC->hAdjThr, + init->meanPe, + hQC->elementBits, /* or channelBitrates, was: channelBitrate */ + hQC->invQuant, + init->channelMapping->nElements, + init->channelMapping->nChannelsEff, + init->sampleRate, /* output sample rate */ + init->advancedBitsToPe, /* if set, calc bits2PE factor depending on samplerate */ + hQC->vbrQualFactor + ); return AAC_ENC_OK; } @@ -505,7 +511,7 @@ AAC_ENCODER_ERROR FDKaacEnc_AdjustBitrate(QC_STATE *RESTRICT hQC, } static AAC_ENCODER_ERROR FDKaacEnc_distributeElementDynBits(QC_STATE* hQC, - QC_OUT_ELEMENT* qcElement[(6)], + QC_OUT_ELEMENT* qcElement[(8)], CHANNEL_MAPPING* cm, INT codeBits) { @@ -604,7 +610,7 @@ static AAC_ENCODER_ERROR FDKaacEnc_prepareBitDistribution(QC_STATE* h PSY_OUT** psyOut, QC_OUT** qcOut, CHANNEL_MAPPING* cm, - QC_OUT_ELEMENT* qcElement[(1)][(6)], + QC_OUT_ELEMENT* qcElement[(1)][(8)], INT avgTotalBits, INT *totalAvailableBits, INT *avgTotalDynBits) @@ -655,7 +661,7 @@ static AAC_ENCODER_ERROR FDKaacEnc_prepareBitDistribution(QC_STATE* h hQC->elementBits[i]->bitResLevelEl, hQC->elementBits[i]->maxBitResBitsEl, hQC->maxBitFac, - hQC->bitDistributenMode); + hQC->bitDistributionMode); *totalAvailableBits += hQC->elementBits[i]->bitResLevelEl; /* get total corrected granted PE */ @@ -671,7 +677,7 @@ static AAC_ENCODER_ERROR FDKaacEnc_prepareBitDistribution(QC_STATE* h //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// static AAC_ENCODER_ERROR FDKaacEnc_updateUsedDynBits(INT* sumDynBitsConsumed, - QC_OUT_ELEMENT* qcElement[(6)], + QC_OUT_ELEMENT* qcElement[(8)], CHANNEL_MAPPING* cm) { INT i; @@ -714,7 +720,7 @@ static INT FDKaacEnc_getTotalConsumedDynBits(QC_OUT** qcOut, } static INT FDKaacEnc_getTotalConsumedBits(QC_OUT** qcOut, - QC_OUT_ELEMENT* qcElement[(1)][(6)], + QC_OUT_ELEMENT* qcElement[(1)][(8)], CHANNEL_MAPPING* cm, INT globHdrBits, INT nSubFrames) @@ -814,7 +820,7 @@ AAC_ENCODER_ERROR FDKaacEnc_QCMain(QC_STATE* RESTRICT hQC, /*-------------------------------------------- */ /* helper pointer */ - QC_OUT_ELEMENT* qcElement[(1)][(6)]; + QC_OUT_ELEMENT* qcElement[(1)][(8)]; /* work on a copy of qcChannel and qcElement */ for (i=0; i<cm->nElements; i++) @@ -891,10 +897,10 @@ AAC_ENCODER_ERROR FDKaacEnc_QCMain(QC_STATE* RESTRICT hQC, } /* -end- sub frame counter */ /*-------------------------------------------- */ - INT iterations[(1)][(6)]; - INT chConstraintsFulfilled[(1)][(6)][(2)]; - INT calculateQuant[(1)][(6)][(2)]; - INT constraintsFulfilled[(1)][(6)]; + INT iterations[(1)][(8)]; + INT chConstraintsFulfilled[(1)][(8)][(2)]; + INT calculateQuant[(1)][(8)][(2)]; + INT constraintsFulfilled[(1)][(8)]; /*-------------------------------------------- */ @@ -1241,7 +1247,7 @@ static AAC_ENCODER_ERROR FDKaacEnc_reduceBitConsumption(int* iterati AAC_ENCODER_ERROR FDKaacEnc_updateFillBits(CHANNEL_MAPPING* cm, QC_STATE* qcKernel, - ELEMENT_BITS* RESTRICT elBits[(6)], + ELEMENT_BITS* RESTRICT elBits[(8)], QC_OUT** qcOut) { switch (qcKernel->bitrateMode) { @@ -1597,10 +1603,10 @@ void FDKaacEnc_QCClose (QC_STATE **phQCstate, QC_OUT **phQC) for (n=0;n<(1);n++) { if (phQC[n] != NULL) { QC_OUT *hQC = phQC[n]; - for (i=0; i<(6); i++) { + for (i=0; i<(8); i++) { } - for (i=0; i<(6); i++) { + for (i=0; i<(8); i++) { if (hQC->qcElement[i]) FreeRam_aacEnc_QCelement(&hQC->qcElement[i]); } @@ -1620,7 +1626,7 @@ void FDKaacEnc_QCClose (QC_STATE **phQCstate, QC_OUT **phQC) if (hQCstate->hBitCounter != NULL) FDKaacEnc_BCClose(&hQCstate->hBitCounter); - for (i=0; i<(6); i++) { + for (i=0; i<(8); i++) { if (hQCstate->elementBits[i]!=NULL) { FreeRam_aacEnc_ElementBits(&hQCstate->elementBits[i]); } diff --git a/libAACenc/src/qc_main.h b/libAACenc/src/qc_main.h index dadac8e..4e8c042 100644 --- a/libAACenc/src/qc_main.h +++ b/libAACenc/src/qc_main.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -140,7 +140,7 @@ AAC_ENCODER_ERROR FDKaacEnc_QCMain(QC_STATE* RESTRICT hQC, AAC_ENCODER_ERROR FDKaacEnc_updateFillBits(CHANNEL_MAPPING* cm, QC_STATE* qcKernel, - ELEMENT_BITS* RESTRICT elBits[(6)], + ELEMENT_BITS* RESTRICT elBits[(8)], QC_OUT** qcOut); diff --git a/libAACenc/src/quantize.cpp b/libAACenc/src/quantize.cpp index 1f7402b..5380e35 100644 --- a/libAACenc/src/quantize.cpp +++ b/libAACenc/src/quantize.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -127,10 +127,7 @@ static void FDKaacEnc_quantizeLines(INT gain, accu = fMultDiv2(FDKaacEnc_mTab_3_4[tabIndex],FDKaacEnc_quantTableE[totalShift&3]); totalShift = (16-4)-(3*(totalShift>>2)); FDK_ASSERT(totalShift >=0); /* MAX_QUANT_VIOLATION */ - if (totalShift < 32) - accu>>=totalShift; - else - accu = 0; + accu >>= fixMin(totalShift,DFRACT_BITS-1); quaSpectrum[line] = (SHORT)(-((LONG)(k + accu) >> (DFRACT_BITS-1-16))); } else if(accu > FL2FXCONST_DBL(0.0f)) @@ -143,10 +140,7 @@ static void FDKaacEnc_quantizeLines(INT gain, accu = fMultDiv2(FDKaacEnc_mTab_3_4[tabIndex],FDKaacEnc_quantTableE[totalShift&3]); totalShift = (16-4)-(3*(totalShift>>2)); FDK_ASSERT(totalShift >=0); /* MAX_QUANT_VIOLATION */ - if (totalShift < 32) - accu>>=totalShift; - else - accu = 0; + accu >>= fixMin(totalShift,DFRACT_BITS-1); quaSpectrum[line] = (SHORT)((LONG)(k + accu) >> (DFRACT_BITS-1-16)); } else diff --git a/libAACenc/src/quantize.h b/libAACenc/src/quantize.h index 72dd851..975b98e 100644 --- a/libAACenc/src/quantize.h +++ b/libAACenc/src/quantize.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/sf_estim.cpp b/libAACenc/src/sf_estim.cpp index c5512cb..72b75a6 100644 --- a/libAACenc/src/sf_estim.cpp +++ b/libAACenc/src/sf_estim.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/sf_estim.h b/libAACenc/src/sf_estim.h index 3338a26..b5ac000 100644 --- a/libAACenc/src/sf_estim.h +++ b/libAACenc/src/sf_estim.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/spreading.cpp b/libAACenc/src/spreading.cpp index 5141b6e..852da1e 100644 --- a/libAACenc/src/spreading.cpp +++ b/libAACenc/src/spreading.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/spreading.h b/libAACenc/src/spreading.h index 078cc7f..e1b506c 100644 --- a/libAACenc/src/spreading.h +++ b/libAACenc/src/spreading.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/tns_func.h b/libAACenc/src/tns_func.h index 8f9bd26..6ee0edb 100644 --- a/libAACenc/src/tns_func.h +++ b/libAACenc/src/tns_func.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/tonality.cpp b/libAACenc/src/tonality.cpp index befff74..7246a34 100644 --- a/libAACenc/src/tonality.cpp +++ b/libAACenc/src/tonality.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/tonality.h b/libAACenc/src/tonality.h index dcd82a8..fbe78ee 100644 --- a/libAACenc/src/tonality.h +++ b/libAACenc/src/tonality.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/transform.cpp b/libAACenc/src/transform.cpp index fb57b14..690b82e 100644 --- a/libAACenc/src/transform.cpp +++ b/libAACenc/src/transform.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libAACenc/src/transform.h b/libAACenc/src/transform.h index 212f5f0..5053174 100644 --- a/libAACenc/src/transform.h +++ b/libAACenc/src/transform.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -105,7 +105,7 @@ amm-info@iis.fraunhofer.de * LONG_WINDOW, START_WINDOW, SHORT_WINDOW or STOP_WINDOW. * \param windowShape index indicating the window slope type to be used. * Values allowed are either SINE_WINDOW or KBD_WINDOW. - * \param frameLength length of the block. Either 1024 or 960. + * \param frameLength length of the block. * \param mdctData_e pointer to an INT where the exponent of the frequency * domain output data is stored into. * \return 0 in case of success, non-zero in case of error (inconsistent parameters). diff --git a/libFDK/include/FDK_archdef.h b/libFDK/include/FDK_archdef.h index a963f55..da63aee 100644 --- a/libFDK/include/FDK_archdef.h +++ b/libFDK/include/FDK_archdef.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/FDK_bitbuffer.h b/libFDK/include/FDK_bitbuffer.h index 963ada8..65fa04b 100644 --- a/libFDK/include/FDK_bitbuffer.h +++ b/libFDK/include/FDK_bitbuffer.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/FDK_bitstream.h b/libFDK/include/FDK_bitstream.h index 3ef4799..fc8d7de 100644 --- a/libFDK/include/FDK_bitstream.h +++ b/libFDK/include/FDK_bitstream.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/FDK_core.h b/libFDK/include/FDK_core.h index ef0c032..10a6a8e 100644 --- a/libFDK/include/FDK_core.h +++ b/libFDK/include/FDK_core.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/FDK_crc.h b/libFDK/include/FDK_crc.h index b5b8d6b..b1fed88 100644 --- a/libFDK/include/FDK_crc.h +++ b/libFDK/include/FDK_crc.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/FDK_hybrid.h b/libFDK/include/FDK_hybrid.h index 3d355d6..63f2d70 100644 --- a/libFDK/include/FDK_hybrid.h +++ b/libFDK/include/FDK_hybrid.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/FDK_tools_rom.h b/libFDK/include/FDK_tools_rom.h index e9e126e..9361c81 100644 --- a/libFDK/include/FDK_tools_rom.h +++ b/libFDK/include/FDK_tools_rom.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -171,6 +171,9 @@ extern const FIXP_WTP sin_twiddle_L64[]; extern const FIXP_QTW qmf_phaseshift_cos32[32]; extern const FIXP_QTW qmf_phaseshift_sin32[32]; +/* Adapted analysis post-twiddles for down-sampled HQ SBR */ +extern const FIXP_QTW qmf_phaseshift_cos_downsamp32[32]; +extern const FIXP_QTW qmf_phaseshift_sin_downsamp32[32]; extern const FIXP_QTW qmf_phaseshift_cos64[64]; extern const FIXP_QTW qmf_phaseshift_sin64[64]; diff --git a/libFDK/include/FDK_trigFcts.h b/libFDK/include/FDK_trigFcts.h index d2ca4ee..c32c0f2 100644 --- a/libFDK/include/FDK_trigFcts.h +++ b/libFDK/include/FDK_trigFcts.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/abs.h b/libFDK/include/abs.h index d3576cb..0837e3c 100644 --- a/libFDK/include/abs.h +++ b/libFDK/include/abs.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/arm/clz_arm.h b/libFDK/include/arm/clz_arm.h index b33b800..f43a7b1 100644 --- a/libFDK/include/arm/clz_arm.h +++ b/libFDK/include/arm/clz_arm.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/arm/cplx_mul.h b/libFDK/include/arm/cplx_mul.h index 2416f98..8b48031 100644 --- a/libFDK/include/arm/cplx_mul.h +++ b/libFDK/include/arm/cplx_mul.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/arm/fixmadd_arm.h b/libFDK/include/arm/fixmadd_arm.h index e12d211..111147b 100644 --- a/libFDK/include/arm/fixmadd_arm.h +++ b/libFDK/include/arm/fixmadd_arm.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/arm/fixmul_arm.h b/libFDK/include/arm/fixmul_arm.h index d42d677..2f04705 100644 --- a/libFDK/include/arm/fixmul_arm.h +++ b/libFDK/include/arm/fixmul_arm.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/arm/scale.h b/libFDK/include/arm/scale.h index 41f94a4..cbb81dc 100644 --- a/libFDK/include/arm/scale.h +++ b/libFDK/include/arm/scale.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/arm/scramble.h b/libFDK/include/arm/scramble.h index ddf34bd..82d0338 100644 --- a/libFDK/include/arm/scramble.h +++ b/libFDK/include/arm/scramble.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/autocorr2nd.h b/libFDK/include/autocorr2nd.h index 227d52b..c2e9595 100644 --- a/libFDK/include/autocorr2nd.h +++ b/libFDK/include/autocorr2nd.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/clz.h b/libFDK/include/clz.h index 38c5073..fc612e1 100644 --- a/libFDK/include/clz.h +++ b/libFDK/include/clz.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/common_fix.h b/libFDK/include/common_fix.h index a39548e..79c87ac 100644 --- a/libFDK/include/common_fix.h +++ b/libFDK/include/common_fix.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/cplx_mul.h b/libFDK/include/cplx_mul.h index 68a49e1..093ffa6 100644 --- a/libFDK/include/cplx_mul.h +++ b/libFDK/include/cplx_mul.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/dct.h b/libFDK/include/dct.h index 59b7319..af1edd3 100644 --- a/libFDK/include/dct.h +++ b/libFDK/include/dct.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/fft.h b/libFDK/include/fft.h index 5bd49d1..616f350 100644 --- a/libFDK/include/fft.h +++ b/libFDK/include/fft.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/fft_rad2.h b/libFDK/include/fft_rad2.h index 97ddf5f..90d14da 100644 --- a/libFDK/include/fft_rad2.h +++ b/libFDK/include/fft_rad2.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/fixmadd.h b/libFDK/include/fixmadd.h index 71413ee..851b7a2 100644 --- a/libFDK/include/fixmadd.h +++ b/libFDK/include/fixmadd.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/fixminmax.h b/libFDK/include/fixminmax.h index a6aa623..5a52824 100644 --- a/libFDK/include/fixminmax.h +++ b/libFDK/include/fixminmax.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/fixmul.h b/libFDK/include/fixmul.h index 31c92b4..ea4bc6c 100644 --- a/libFDK/include/fixmul.h +++ b/libFDK/include/fixmul.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/fixpoint_math.h b/libFDK/include/fixpoint_math.h index ae554cb..df141d3 100644 --- a/libFDK/include/fixpoint_math.h +++ b/libFDK/include/fixpoint_math.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/mdct.h b/libFDK/include/mdct.h index 0d04e4b..e1c2d74 100644 --- a/libFDK/include/mdct.h +++ b/libFDK/include/mdct.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/mips/abs_mips.h b/libFDK/include/mips/abs_mips.h index e2ad607..3b9f876 100644 --- a/libFDK/include/mips/abs_mips.h +++ b/libFDK/include/mips/abs_mips.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/mips/clz_mips.h b/libFDK/include/mips/clz_mips.h index 48d465b..ff40a09 100644 --- a/libFDK/include/mips/clz_mips.h +++ b/libFDK/include/mips/clz_mips.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/mips/cplx_mul.h b/libFDK/include/mips/cplx_mul.h index fb777ce..e05d2b6 100644 --- a/libFDK/include/mips/cplx_mul.h +++ b/libFDK/include/mips/cplx_mul.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/mips/fixmadd_mips.h b/libFDK/include/mips/fixmadd_mips.h index 564268b..a9575fb 100644 --- a/libFDK/include/mips/fixmadd_mips.h +++ b/libFDK/include/mips/fixmadd_mips.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/mips/fixmul_mips.h b/libFDK/include/mips/fixmul_mips.h index 62d059e..73693e2 100644 --- a/libFDK/include/mips/fixmul_mips.h +++ b/libFDK/include/mips/fixmul_mips.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/mips/scale.h b/libFDK/include/mips/scale.h index 9279391..edf29da 100644 --- a/libFDK/include/mips/scale.h +++ b/libFDK/include/mips/scale.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/mips/scramble.h b/libFDK/include/mips/scramble.h index 95c4d74..3f2fe6e 100644 --- a/libFDK/include/mips/scramble.h +++ b/libFDK/include/mips/scramble.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/qmf.h b/libFDK/include/qmf.h index 16d2b70..be69477 100644 --- a/libFDK/include/qmf.h +++ b/libFDK/include/qmf.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -137,6 +137,8 @@ amm-info@iis.fraunhofer.de #define QMF_FLAG_MPSLDFB 16 /* Complex Low Delay Filter Bank used in MPEG Surround Encoder allows a optimized calculation of the modulation in qmfForwardModulationHQ() */ #define QMF_FLAG_MPSLDFB_OPTIMIZE_MODULATION 32 +/* Flag to indicate HE-AAC down-sampled SBR mode (decoder) -> adapt analysis post twiddling */ +#define QMF_FLAG_DOWNSAMPLED 64 typedef struct diff --git a/libFDK/include/scale.h b/libFDK/include/scale.h index d60ed2c..1587f9f 100644 --- a/libFDK/include/scale.h +++ b/libFDK/include/scale.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/scramble.h b/libFDK/include/scramble.h index 552081a..ceaf527 100644 --- a/libFDK/include/scramble.h +++ b/libFDK/include/scramble.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/x86/abs_x86.h b/libFDK/include/x86/abs_x86.h index 64add9f..96374ec 100644 --- a/libFDK/include/x86/abs_x86.h +++ b/libFDK/include/x86/abs_x86.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/x86/clz_x86.h b/libFDK/include/x86/clz_x86.h index db7970d..1bc43e5 100644 --- a/libFDK/include/x86/clz_x86.h +++ b/libFDK/include/x86/clz_x86.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/include/x86/fixmul_x86.h b/libFDK/include/x86/fixmul_x86.h index d10bc9a..7b74cc7 100644 --- a/libFDK/include/x86/fixmul_x86.h +++ b/libFDK/include/x86/fixmul_x86.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/src/FDK_bitbuffer.cpp b/libFDK/src/FDK_bitbuffer.cpp index 113c819..680ceae 100644 --- a/libFDK/src/FDK_bitbuffer.cpp +++ b/libFDK/src/FDK_bitbuffer.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/src/FDK_core.cpp b/libFDK/src/FDK_core.cpp index 8a07aa9..6db648d 100644 --- a/libFDK/src/FDK_core.cpp +++ b/libFDK/src/FDK_core.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -92,8 +92,8 @@ amm-info@iis.fraunhofer.de /* FDK tools library info */ #define FDK_TOOLS_LIB_VL0 2 -#define FDK_TOOLS_LIB_VL1 2 -#define FDK_TOOLS_LIB_VL2 8 +#define FDK_TOOLS_LIB_VL1 3 +#define FDK_TOOLS_LIB_VL2 2 #define FDK_TOOLS_LIB_TITLE "FDK Tools" #define FDK_TOOLS_LIB_BUILD_DATE __DATE__ #define FDK_TOOLS_LIB_BUILD_TIME __TIME__ diff --git a/libFDK/src/FDK_crc.cpp b/libFDK/src/FDK_crc.cpp index 1b03903..17d47ad 100644 --- a/libFDK/src/FDK_crc.cpp +++ b/libFDK/src/FDK_crc.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/src/FDK_hybrid.cpp b/libFDK/src/FDK_hybrid.cpp index 3d3ab7b..20816f5 100644 --- a/libFDK/src/FDK_hybrid.cpp +++ b/libFDK/src/FDK_hybrid.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/src/FDK_tools_rom.cpp b/libFDK/src/FDK_tools_rom.cpp index 4fc80ce..c6e517e 100644 --- a/libFDK/src/FDK_tools_rom.cpp +++ b/libFDK/src/FDK_tools_rom.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -1462,6 +1462,26 @@ const FIXP_PFT qmf_64[QMF640_PFT_TABLE_SIZE+QMF_NO_POLY] = QFC(0xfe4d1be3), QFC(0xd1c58ace), QFC(0x2e3a7532), QFC(0x01b2e41d), QFC(0x00000000), }; +RAM_ALIGN +LNK_SECTION_CONSTDATA +const FIXP_QTW qmf_phaseshift_cos_downsamp32[] = +{ + QTC(0x7fd8878e), QTC(0x7e9d55fc), QTC(0x7c29fbee), QTC(0x78848414), QTC(0x73b5ebd1), QTC(0x6dca0d14), QTC(0x66cf8120), QTC(0x5ed77c8a), + QTC(0x55f5a4d2), QTC(0x4c3fdff4), QTC(0x41ce1e65), QTC(0x36ba2014), QTC(0x2b1f34eb), QTC(0x1f19f97b), QTC(0x12c8106f), QTC(0x0647d97c), + QTC(0xf9b82684), QTC(0xed37ef91), QTC(0xe0e60685), QTC(0xd4e0cb15), QTC(0xc945dfec), QTC(0xbe31e19b), QTC(0xb3c0200c), QTC(0xaa0a5b2e), + QTC(0xa1288376), QTC(0x99307ee0), QTC(0x9235f2ec), QTC(0x8c4a142f), QTC(0x877b7bec), QTC(0x83d60412), QTC(0x8162aa04), QTC(0x80277872), +}; + +RAM_ALIGN +LNK_SECTION_CONSTDATA +const FIXP_QTW qmf_phaseshift_sin_downsamp32[] = +{ + QTC(0x0647d97c), QTC(0x12c8106f), QTC(0x1f19f97b), QTC(0x2b1f34eb), QTC(0x36ba2014), QTC(0x41ce1e65), QTC(0x4c3fdff4), QTC(0x55f5a4d2), + QTC(0x5ed77c8a), QTC(0x66cf8120), QTC(0x6dca0d14), QTC(0x73b5ebd1), QTC(0x78848414), QTC(0x7c29fbee), QTC(0x7e9d55fc), QTC(0x7fd8878e), + QTC(0x7fd8878e), QTC(0x7e9d55fc), QTC(0x7c29fbee), QTC(0x78848414), QTC(0x73b5ebd1), QTC(0x6dca0d14), QTC(0x66cf8120), QTC(0x5ed77c8a), + QTC(0x55f5a4d2), QTC(0x4c3fdff4), QTC(0x41ce1e65), QTC(0x36ba2014), QTC(0x2b1f34eb), QTC(0x1f19f97b), QTC(0x12c8106f), QTC(0x0647d97c), +}; + #else /* QMF_NO_POLY == 5 */ #endif /* QMF_NO_POLY==5 */ diff --git a/libFDK/src/FDK_trigFcts.cpp b/libFDK/src/FDK_trigFcts.cpp index 2f8655c..1f3a017 100644 --- a/libFDK/src/FDK_trigFcts.cpp +++ b/libFDK/src/FDK_trigFcts.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/src/arm/autocorr2nd.cpp b/libFDK/src/arm/autocorr2nd.cpp index 18c4e43..cc76e30 100644 --- a/libFDK/src/arm/autocorr2nd.cpp +++ b/libFDK/src/arm/autocorr2nd.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/src/arm/dct_arm.cpp b/libFDK/src/arm/dct_arm.cpp index 187c843..59b773e 100644 --- a/libFDK/src/arm/dct_arm.cpp +++ b/libFDK/src/arm/dct_arm.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/src/arm/fft_rad2_arm.cpp b/libFDK/src/arm/fft_rad2_arm.cpp index 34d71c3..a6e2e42 100644 --- a/libFDK/src/arm/fft_rad2_arm.cpp +++ b/libFDK/src/arm/fft_rad2_arm.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/src/arm/qmf_arm.cpp b/libFDK/src/arm/qmf_arm.cpp index 39795d7..0c0ce80 100644 --- a/libFDK/src/arm/qmf_arm.cpp +++ b/libFDK/src/arm/qmf_arm.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/src/arm/scale_arm.cpp b/libFDK/src/arm/scale_arm.cpp index 02f3b71..e2837ef 100644 --- a/libFDK/src/arm/scale_arm.cpp +++ b/libFDK/src/arm/scale_arm.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/src/autocorr2nd.cpp b/libFDK/src/autocorr2nd.cpp index e73ef14..b7eae7c 100644 --- a/libFDK/src/autocorr2nd.cpp +++ b/libFDK/src/autocorr2nd.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/src/dct.cpp b/libFDK/src/dct.cpp index 5dc9e78..3c755bd 100644 --- a/libFDK/src/dct.cpp +++ b/libFDK/src/dct.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/src/fft.cpp b/libFDK/src/fft.cpp index bbf3d99..653a71a 100644 --- a/libFDK/src/fft.cpp +++ b/libFDK/src/fft.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/src/fft_rad2.cpp b/libFDK/src/fft_rad2.cpp index 4eaa27e..9cdadb5 100644 --- a/libFDK/src/fft_rad2.cpp +++ b/libFDK/src/fft_rad2.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/src/fixpoint_math.cpp b/libFDK/src/fixpoint_math.cpp index 000820c..30283ff 100644 --- a/libFDK/src/fixpoint_math.cpp +++ b/libFDK/src/fixpoint_math.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -242,30 +242,72 @@ FIXP_DBL mul_dbl_sgl_rnd (const FIXP_DBL op1, const FIXP_SGL op2) *****************************************************************************/ LNK_SECTION_CODE_L1 -FIXP_DBL CalcInvLdData(FIXP_DBL op) +/* This table is used for lookup 2^x with */ +/* x in range [0...1.0[ in steps of 1/32 */ +LNK_SECTION_DATA_L1 static const UINT exp2_tab_long[32]={ +0x40000000,0x4166C34C,0x42D561B4,0x444C0740, +0x45CAE0F2,0x47521CC6,0x48E1E9BA,0x4A7A77D4, +0x4C1BF829,0x4DC69CDD,0x4F7A9930,0x51382182, +0x52FF6B55,0x54D0AD5A,0x56AC1F75,0x5891FAC1, +0x5A82799A,0x5C7DD7A4,0x5E8451D0,0x60962665, +0x62B39509,0x64DCDEC3,0x6712460B,0x69540EC9, +0x6BA27E65,0x6DFDDBCC,0x70666F76,0x72DC8374, +0x75606374,0x77F25CCE,0x7A92BE8B,0x7D41D96E +// 0x80000000 +}; + +/* This table is used for lookup 2^x with */ +/* x in range [0...1/32[ in steps of 1/1024 */ +LNK_SECTION_DATA_L1 static const UINT exp2w_tab_long[32]={ +0x40000000,0x400B1818,0x4016321B,0x40214E0C, +0x402C6BE9,0x40378BB4,0x4042AD6D,0x404DD113, +0x4058F6A8,0x40641E2B,0x406F479E,0x407A7300, +0x4085A051,0x4090CF92,0x409C00C4,0x40A733E6, +0x40B268FA,0x40BD9FFF,0x40C8D8F5,0x40D413DD, +0x40DF50B8,0x40EA8F86,0x40F5D046,0x410112FA, +0x410C57A2,0x41179E3D,0x4122E6CD,0x412E3152, +0x41397DCC,0x4144CC3B,0x41501CA0,0x415B6EFB, +// 0x4166C34C, +}; +/* This table is used for lookup 2^x with */ +/* x in range [0...1/1024[ in steps of 1/32768 */ +LNK_SECTION_DATA_L1 static const UINT exp2x_tab_long[32]={ +0x40000000,0x400058B9,0x4000B173,0x40010A2D, +0x400162E8,0x4001BBA3,0x4002145F,0x40026D1B, +0x4002C5D8,0x40031E95,0x40037752,0x4003D011, +0x400428CF,0x4004818E,0x4004DA4E,0x4005330E, +0x40058BCE,0x4005E48F,0x40063D51,0x40069613, +0x4006EED5,0x40074798,0x4007A05B,0x4007F91F, +0x400851E4,0x4008AAA8,0x4009036E,0x40095C33, +0x4009B4FA,0x400A0DC0,0x400A6688,0x400ABF4F, +//0x400B1818 +}; + +LNK_SECTION_CODE_L1 FIXP_DBL CalcInvLdData(FIXP_DBL x) { - FIXP_DBL result_m; + int set_zero = (x < FL2FXCONST_DBL(-31.0/64.0))? 0 : 1; + int set_max = (x >= FL2FXCONST_DBL( 31.0/64.0)) | (x == FL2FXCONST_DBL(0.0)); - if ( op == FL2FXCONST_DBL(0.0f) ) { - result_m = (FIXP_DBL)MAXVAL_DBL; - } - else if ( op < FL2FXCONST_DBL(0.0f) ) { - result_m = f2Pow(op, LD_DATA_SHIFT); - } - else { - int result_e; + FIXP_SGL frac = (FIXP_SGL)(LONG)(x & 0x3FF); + UINT index3 = (UINT)(LONG)(x >> 10) & 0x1F; + UINT index2 = (UINT)(LONG)(x >> 15) & 0x1F; + UINT index1 = (UINT)(LONG)(x >> 20) & 0x1F; + int exp = (x > FL2FXCONST_DBL(0.0f)) ? (31 - (int)(x>>25)) : (int)(-(x>>25)); - result_m = f2Pow(op, LD_DATA_SHIFT, &result_e); - result_e = fixMin(fixMax(result_e+1-(DFRACT_BITS-1), -(DFRACT_BITS-1)), (DFRACT_BITS-1)); /* rounding and saturation */ + UINT lookup1 = exp2_tab_long[index1]*set_zero; + UINT lookup2 = exp2w_tab_long[index2]; + UINT lookup3 = exp2x_tab_long[index3]; + UINT lookup3f = lookup3 + (UINT)(LONG)fMultDiv2((FIXP_DBL)(0x0016302F),(FIXP_SGL)frac); + + UINT lookup12 = (UINT)(LONG)fMult((FIXP_DBL)lookup1, (FIXP_DBL) lookup2); + UINT lookup = (UINT)(LONG)fMult((FIXP_DBL)lookup12, (FIXP_DBL) lookup3f); - if ( (result_e>0) && ( result_m > (((FIXP_DBL)MAXVAL_DBL)>>result_e) ) ) { - result_m = (FIXP_DBL)MAXVAL_DBL; /* saturate to max representable value */ - } - else { - result_m = (scaleValue(result_m, result_e)+(FIXP_DBL)1)>>1; /* descale result + rounding */ - } - } - return result_m; + FIXP_DBL retVal = (lookup<<3) >> exp; + + if (set_max) + retVal=FL2FXCONST_DBL(1.0f); + + return retVal; } diff --git a/libFDK/src/mdct.cpp b/libFDK/src/mdct.cpp index 7b9864f..9a29aa1 100644 --- a/libFDK/src/mdct.cpp +++ b/libFDK/src/mdct.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/src/mips/fft_rad2_mips.cpp b/libFDK/src/mips/fft_rad2_mips.cpp index 8518c79..f93ee98 100644 --- a/libFDK/src/mips/fft_rad2_mips.cpp +++ b/libFDK/src/mips/fft_rad2_mips.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/src/mips/mips_fft_twiddles.cpp b/libFDK/src/mips/mips_fft_twiddles.cpp index 080c61e..e15a09b 100644 --- a/libFDK/src/mips/mips_fft_twiddles.cpp +++ b/libFDK/src/mips/mips_fft_twiddles.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/src/mips/scale.cpp b/libFDK/src/mips/scale.cpp index 9e5964a..88a3a00 100644 --- a/libFDK/src/mips/scale.cpp +++ b/libFDK/src/mips/scale.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libFDK/src/qmf.cpp b/libFDK/src/qmf.cpp index 314b9fe..54526dd 100644 --- a/libFDK/src/qmf.cpp +++ b/libFDK/src/qmf.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -1017,8 +1017,14 @@ qmfInitFilterBank (HANDLE_QMF_FILTER_BANK h_Qmf, /*!< Handle to return */ break; case 32: h_Qmf->p_filter = qmf_64; + if (flags & QMF_FLAG_DOWNSAMPLED) { + h_Qmf->t_cos = qmf_phaseshift_cos_downsamp32; + h_Qmf->t_sin = qmf_phaseshift_sin_downsamp32; + } + else { h_Qmf->t_cos = qmf_phaseshift_cos32; h_Qmf->t_sin = qmf_phaseshift_sin32; + } h_Qmf->p_stride = 2; h_Qmf->FilterSize = 640; h_Qmf->filterScale = 0; diff --git a/libFDK/src/scale.cpp b/libFDK/src/scale.cpp index 96c0165..5829443 100644 --- a/libFDK/src/scale.cpp +++ b/libFDK/src/scale.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libMpegTPDec/include/mpegFileRead.h b/libMpegTPDec/include/mpegFileRead.h index d45bee2..1fbfb58 100644 --- a/libMpegTPDec/include/mpegFileRead.h +++ b/libMpegTPDec/include/mpegFileRead.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libMpegTPDec/include/tp_data.h b/libMpegTPDec/include/tp_data.h index 6e8218a..5269858 100644 --- a/libMpegTPDec/include/tp_data.h +++ b/libMpegTPDec/include/tp_data.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libMpegTPDec/include/tpdec_lib.h b/libMpegTPDec/include/tpdec_lib.h index 7317204..fb4c41d 100644 --- a/libMpegTPDec/include/tpdec_lib.h +++ b/libMpegTPDec/include/tpdec_lib.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -186,6 +186,27 @@ int CProgramConfig_IsValid ( const CProgramConfig *pPce ); void CProgramConfig_Read ( CProgramConfig *pPce, HANDLE_FDK_BITSTREAM bs, UINT alignAnchor ); + +/*! + \brief Compare two Program Config Elements. + \param pPce1 Pointer to first Program Config Element structure. + \param pPce2 Pointer to second Program Config Element structure. + \return -1 if PCEs are completely different, + 0 if PCEs are completely equal, + 1 if PCEs are different but have the same channel config, + 2 if PCEs have different channel config but same number of channels. +*/ +int CProgramConfig_Compare ( const CProgramConfig * const pPce1, + const CProgramConfig * const pPce2 ); + +/*! + \brief Get a Program Config Element that matches the predefined MPEG-4 channel configurations 1-14. + \param pPce Program Config Element structure. + \param channelConfig MPEG-4 channel configuration. + \return void +*/ +void CProgramConfig_GetDefault ( CProgramConfig *pPce, + const UINT channelConfig ); #endif /* TP_PCE_ENABLE */ /** @@ -206,7 +227,7 @@ void CProgramConfig_Read ( CProgramConfig *pPce, */ int CProgramConfig_LookupElement( CProgramConfig *pPce, - const UINT channelConfig, + UINT channelConfig, const UINT tag, const UINT channelIdx, UCHAR chMapping[], diff --git a/libMpegTPDec/src/mpegFileFormat.h b/libMpegTPDec/src/mpegFileFormat.h index 7ddaa0d..b0cfe9e 100644 --- a/libMpegTPDec/src/mpegFileFormat.h +++ b/libMpegTPDec/src/mpegFileFormat.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libMpegTPDec/src/tpdec_adif.cpp b/libMpegTPDec/src/tpdec_adif.cpp index b6d6087..237e881 100644 --- a/libMpegTPDec/src/tpdec_adif.cpp +++ b/libMpegTPDec/src/tpdec_adif.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libMpegTPDec/src/tpdec_adif.h b/libMpegTPDec/src/tpdec_adif.h index 7b9b071..d6780a7 100644 --- a/libMpegTPDec/src/tpdec_adif.h +++ b/libMpegTPDec/src/tpdec_adif.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libMpegTPDec/src/tpdec_adts.cpp b/libMpegTPDec/src/tpdec_adts.cpp index 92e2e59..c455681 100644 --- a/libMpegTPDec/src/tpdec_adts.cpp +++ b/libMpegTPDec/src/tpdec_adts.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -374,12 +374,12 @@ int adtsRead_GetRawDataBlockLength( length = -1; /* raw data block length is unknown */ } else { if (blockNum < 0 || blockNum > 3) { - return TRANSPORTDEC_INVALID_PARAMETER; + length = -1; } length = (pAdts->rawDataBlockDist[blockNum] << 3) - 16; } } - if (blockNum == 0) { + if (blockNum == 0 && length > 0) { length -= pAdts->bs.num_pce_bits; } return length; diff --git a/libMpegTPDec/src/tpdec_adts.h b/libMpegTPDec/src/tpdec_adts.h index def6aa0..a3b83a5 100644 --- a/libMpegTPDec/src/tpdec_adts.h +++ b/libMpegTPDec/src/tpdec_adts.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libMpegTPDec/src/tpdec_asc.cpp b/libMpegTPDec/src/tpdec_asc.cpp index d6e1a0b..4d7cc02 100644 --- a/libMpegTPDec/src/tpdec_asc.cpp +++ b/libMpegTPDec/src/tpdec_asc.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -205,6 +205,145 @@ void CProgramConfig_Read( pPce->isValid = 1; } + +/* + * Compare two program configurations. + * Returns the result of the comparison: + * -1 - completely different + * 0 - completely equal + * 1 - different but same channel configuration + * 2 - different channel configuration but same number of channels + */ +int CProgramConfig_Compare ( const CProgramConfig * const pPce1, + const CProgramConfig * const pPce2 ) +{ + int result = 0; /* Innocent until proven false. */ + + if (FDKmemcmp(pPce1, pPce2, sizeof(CProgramConfig)) != 0) + { /* Configurations are not completely different. + So look into details and analyse the channel configurations: */ + result = -1; + + if (pPce1->NumChannels == pPce2->NumChannels) + { /* Now the logic changes. We first assume to have the same channel configuration + and then prove if this assumption is true. */ + result = 1; + + /* Front channels */ + if (pPce1->NumFrontChannelElements != pPce2->NumFrontChannelElements) { + result = 2; /* different number of front channel elements */ + } else { + int el, numCh1 = 0, numCh2 = 0; + for (el = 0; el < pPce1->NumFrontChannelElements; el += 1) { + numCh1 += pPce1->FrontElementIsCpe[el] ? 2 : 1; + numCh2 += pPce2->FrontElementIsCpe[el] ? 2 : 1; + } + if (numCh1 != numCh2) { + result = 2; /* different number of front channels */ + } + } + /* Side channels */ + if (pPce1->NumSideChannelElements != pPce2->NumSideChannelElements) { + result = 2; /* different number of side channel elements */ + } else { + int el, numCh1 = 0, numCh2 = 0; + for (el = 0; el < pPce1->NumSideChannelElements; el += 1) { + numCh1 += pPce1->SideElementIsCpe[el] ? 2 : 1; + numCh2 += pPce2->SideElementIsCpe[el] ? 2 : 1; + } + if (numCh1 != numCh2) { + result = 2; /* different number of side channels */ + } + } + /* Back channels */ + if (pPce1->NumBackChannelElements != pPce2->NumBackChannelElements) { + result = 2; /* different number of back channel elements */ + } else { + int el, numCh1 = 0, numCh2 = 0; + for (el = 0; el < pPce1->NumBackChannelElements; el += 1) { + numCh1 += pPce1->BackElementIsCpe[el] ? 2 : 1; + numCh2 += pPce2->BackElementIsCpe[el] ? 2 : 1; + } + if (numCh1 != numCh2) { + result = 2; /* different number of back channels */ + } + } + /* LFE channels */ + if (pPce1->NumLfeChannelElements != pPce2->NumLfeChannelElements) { + result = 2; /* different number of lfe channels */ + } + /* LFEs are always SCEs so we don't need to count the channels. */ + } + } + + return result; +} + +void CProgramConfig_GetDefault( CProgramConfig *pPce, + const UINT channelConfig ) +{ + FDK_ASSERT(pPce != NULL); + + /* Init PCE */ + CProgramConfig_Init(pPce); + pPce->Profile = 1; /* Set AAC LC because it is the only supported object type. */ + + switch (channelConfig) { + /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + case 6: /* 3/0/2.1ch */ + pPce->NumLfeChannelElements += 1; + pPce->NumChannels += 1; + case 5: /* 3/0/2.0ch */ + case 4: /* 3/0/1.0ch */ + pPce->NumBackChannelElements += 1; + pPce->BackElementIsCpe[0] = (channelConfig>4) ? 1 : 0; + pPce->NumChannels += (channelConfig>4) ? 2 : 1; + pPce->NumEffectiveChannels += (channelConfig>4) ? 2 : 1; + case 3: /* 3/0/0.0ch */ + pPce->NumFrontChannelElements += 1; + pPce->FrontElementIsCpe[1] = 1; + pPce->NumChannels += 2; + pPce->NumEffectiveChannels += 2; + case 1: /* 1/0/0.0ch */ + pPce->NumFrontChannelElements += 1; + pPce->FrontElementIsCpe[0] = 0; + pPce->NumChannels += 1; + pPce->NumEffectiveChannels += 1; + pPce->isValid = 1; + break; + /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + case 2: /* 2/0/0.ch */ + pPce->NumFrontChannelElements = 1; + pPce->FrontElementIsCpe[0] = 1; + pPce->NumChannels += 2; + pPce->NumEffectiveChannels += 2; + pPce->isValid = 1; + break; + /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + default: + pPce->isValid = 0; /* To be explicit! */ + break; + } + + if (pPce->isValid) { + /* Create valid element instance tags */ + int el, elTagSce = 0, elTagCpe = 0; + + for (el = 0; el < pPce->NumFrontChannelElements; el += 1) { + pPce->FrontElementTagSelect[el] = (pPce->FrontElementIsCpe) ? elTagCpe++ : elTagSce++; + } + for (el = 0; el < pPce->NumSideChannelElements; el += 1) { + pPce->SideElementTagSelect[el] = (pPce->SideElementIsCpe) ? elTagCpe++ : elTagSce++; + } + for (el = 0; el < pPce->NumBackChannelElements; el += 1) { + pPce->BackElementTagSelect[el] = (pPce->BackElementIsCpe) ? elTagCpe++ : elTagSce++; + } + elTagSce = 0; + for (el = 0; el < pPce->NumLfeChannelElements; el += 1) { + pPce->LfeElementTagSelect[el] = elTagSce++; + } + } +} #endif /* TP_PCE_ENABLE */ /** @@ -267,7 +406,7 @@ void getImplicitAudioChannelTypeAndIndex( int CProgramConfig_LookupElement( CProgramConfig *pPce, - const UINT channelConfig, + UINT channelConfig, const UINT tag, const UINT channelIdx, UCHAR chMapping[], @@ -289,7 +428,13 @@ int CProgramConfig_LookupElement( *elMapping = pPce->elCounter; if (elList[pPce->elCounter] != elType) { /* Not in the list */ - return 0; + if ( (channelConfig == 2) && (elType == ID_SCE) ) + { /* This scenario occurs with HE-AAC v2 streams of buggy encoders. + Due to other decoder implementations decoding of these kind of streams is desired. */ + channelConfig = 1; + } else { + return 0; + } } /* Assume all front channels */ getImplicitAudioChannelTypeAndIndex(&chType[channelIdx], &chIndex[channelIdx], channelConfig, channelIdx); @@ -583,18 +728,18 @@ static INT ld_sbr_header( const CSAudioSpecificConfig *asc, } switch ( channelConfiguration ) { + case 7: + error |= cb->cbSbr(cb->cbSbrData, hBs, asc->m_samplingFrequency, asc->m_extensionSamplingFrequency, asc->m_samplesPerFrame, AOT_ER_AAC_ELD, ID_CPE, i++); + case 6: case 5: error |= cb->cbSbr(cb->cbSbrData, hBs, asc->m_samplingFrequency, asc->m_extensionSamplingFrequency, asc->m_samplesPerFrame, AOT_ER_AAC_ELD, ID_CPE, i++); case 3: error |= cb->cbSbr(cb->cbSbrData, hBs, asc->m_samplingFrequency, asc->m_extensionSamplingFrequency, asc->m_samplesPerFrame, AOT_ER_AAC_ELD, ID_CPE, i++); break; - case 7: - error |= cb->cbSbr(cb->cbSbrData, hBs, asc->m_samplingFrequency, asc->m_extensionSamplingFrequency, asc->m_samplesPerFrame, AOT_ER_AAC_ELD, ID_SCE, i++); - case 6: - error |= cb->cbSbr(cb->cbSbrData, hBs, asc->m_samplingFrequency, asc->m_extensionSamplingFrequency, asc->m_samplesPerFrame, AOT_ER_AAC_ELD, ID_CPE, i++); case 4: error |= cb->cbSbr(cb->cbSbrData, hBs, asc->m_samplingFrequency, asc->m_extensionSamplingFrequency, asc->m_samplesPerFrame, AOT_ER_AAC_ELD, ID_CPE, i++); + error |= cb->cbSbr(cb->cbSbrData, hBs, asc->m_samplingFrequency, asc->m_extensionSamplingFrequency, asc->m_samplesPerFrame, AOT_ER_AAC_ELD, ID_SCE, i++); break; } @@ -689,6 +834,62 @@ bail: #endif /* TP_ELD_ENABLE */ +static +TRANSPORTDEC_ERROR AudioSpecificConfig_ExtensionParse(CSAudioSpecificConfig *self, HANDLE_FDK_BITSTREAM bs, CSTpCallBacks *cb) +{ + TP_ASC_EXTENSION_ID lastAscExt, ascExtId = ASCEXT_UNKOWN; + INT bitsAvailable = (INT)FDKgetValidBits(bs); + + while (bitsAvailable >= 11) + { + lastAscExt = ascExtId; + ascExtId = (TP_ASC_EXTENSION_ID)FDKreadBits(bs, 11); + bitsAvailable -= 11; + + switch (ascExtId) { + case ASCEXT_SBR: /* 0x2b7 */ + if ( (self->m_extensionAudioObjectType != AOT_SBR) && (bitsAvailable >= 5) ) { + self->m_extensionAudioObjectType = getAOT(bs); + + if ( (self->m_extensionAudioObjectType == AOT_SBR) + || (self->m_extensionAudioObjectType == AOT_ER_BSAC) ) + { /* Get SBR extension configuration */ + self->m_sbrPresentFlag = FDKreadBits(bs, 1); + bitsAvailable -= 1; + + if ( self->m_sbrPresentFlag == 1 ) { + self->m_extensionSamplingFrequency = getSampleRate(bs, &self->m_extensionSamplingFrequencyIndex, 4); + + if ((INT)self->m_extensionSamplingFrequency <= 0) { + return TRANSPORTDEC_PARSE_ERROR; + } + } + if ( self->m_extensionAudioObjectType == AOT_ER_BSAC ) { + self->m_extensionChannelConfiguration = FDKreadBits(bs, 4); + bitsAvailable -= 4; + } + } + /* Update counter because of variable length fields (AOT and sampling rate) */ + bitsAvailable = (INT)FDKgetValidBits(bs); + } + break; + case ASCEXT_PS: /* 0x548 */ + if ( (lastAscExt == ASCEXT_SBR) + && (self->m_extensionAudioObjectType == AOT_SBR) + && (bitsAvailable > 0) ) + { /* Get PS extension configuration */ + self->m_psPresentFlag = FDKreadBits(bs, 1); + bitsAvailable -= 1; + } + break; + default: + /* Just ignore anything. */ + return TRANSPORTDEC_OK; + } + } + + return TRANSPORTDEC_OK; +} /* * API Functions @@ -839,6 +1040,9 @@ TRANSPORTDEC_ERROR AudioSpecificConfig_Parse( break; } + if (fExplicitBackwardCompatible) { + ErrorStatus = AudioSpecificConfig_ExtensionParse(self, bs, cb); + } return (ErrorStatus); } diff --git a/libMpegTPDec/src/tpdec_latm.cpp b/libMpegTPDec/src/tpdec_latm.cpp index 99b905c..5710d77 100644 --- a/libMpegTPDec/src/tpdec_latm.cpp +++ b/libMpegTPDec/src/tpdec_latm.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -120,7 +120,8 @@ TRANSPORTDEC_ERROR CLatmDemux_ReadAudioMuxElement( CLatmDemux *pLatmDemux, int m_muxConfigPresent, CSTpCallBacks *pTpDecCallbacks, - CSAudioSpecificConfig *pAsc + CSAudioSpecificConfig *pAsc, + int *pfConfigFound ) { TRANSPORTDEC_ERROR ErrorStatus = TRANSPORTDEC_OK; @@ -129,12 +130,17 @@ TRANSPORTDEC_ERROR CLatmDemux_ReadAudioMuxElement( pLatmDemux->m_useSameStreamMux = FDKreadBits(bs,1); if (!pLatmDemux->m_useSameStreamMux) { - if ((ErrorStatus = CLatmDemux_ReadStreamMuxConfig(bs, pLatmDemux, pTpDecCallbacks, pAsc))) { + if ((ErrorStatus = CLatmDemux_ReadStreamMuxConfig(bs, pLatmDemux, pTpDecCallbacks, pAsc, pfConfigFound))) { return (ErrorStatus); } } } + /* If there was no configuration read, its not possible to parse PayloadLengthInfo below. */ + if (! *pfConfigFound) { + return TRANSPORTDEC_SYNC_ERROR; + } + if (pLatmDemux->m_AudioMuxVersionA == 0) { /* Do only once per call, because parsing and decoding is done in-line. */ if ((ErrorStatus = CLatmDemux_ReadPayloadLengthInfo(bs,pLatmDemux))) { @@ -154,6 +160,7 @@ TRANSPORTDEC_ERROR CLatmDemux_Read( TRANSPORT_TYPE tt, CSTpCallBacks *pTpDecCallbacks, CSAudioSpecificConfig *pAsc, + int *pfConfigFound, const INT ignoreBufferFullness ) { @@ -168,7 +175,7 @@ TRANSPORTDEC_ERROR CLatmDemux_Read( return TRANSPORTDEC_NOT_ENOUGH_BITS; } - if ((ErrorStatus = CLatmDemux_ReadAudioMuxElement(bs, pLatmDemux, (tt != TT_MP4_LATM_MCP0), pTpDecCallbacks, pAsc))) + if ((ErrorStatus = CLatmDemux_ReadAudioMuxElement(bs, pLatmDemux, (tt != TT_MP4_LATM_MCP0), pTpDecCallbacks, pAsc, pfConfigFound))) return (ErrorStatus); if (!ignoreBufferFullness) @@ -205,7 +212,8 @@ TRANSPORTDEC_ERROR CLatmDemux_ReadStreamMuxConfig( HANDLE_FDK_BITSTREAM bs, CLatmDemux *pLatmDemux, CSTpCallBacks *pTpDecCallbacks, - CSAudioSpecificConfig *pAsc + CSAudioSpecificConfig *pAsc, + int * pfConfigFound ) { LATM_LAYER_INFO *p_linfo = NULL; @@ -272,6 +280,7 @@ TRANSPORTDEC_ERROR CLatmDemux_ReadStreamMuxConfig( if ((ErrorStatus = AudioSpecificConfig_Parse(&pAsc[TPDEC_TRACKINDEX(prog,lay)], &tmpBs, 1, pTpDecCallbacks))) { return (ErrorStatus); } + *pfConfigFound = 1; /* The field p_linfo->m_ascLen could be wrong, so check if */ if ( 0 > (INT)FDKgetValidBits(&tmpBs)) { @@ -292,6 +301,7 @@ TRANSPORTDEC_ERROR CLatmDemux_ReadStreamMuxConfig( if (cbError != 0) { return TRANSPORTDEC_UNKOWN_ERROR; } + *pfConfigFound = 1; } } @@ -377,7 +387,7 @@ TRANSPORTDEC_ERROR CLatmDemux_ReadPayloadLengthInfo(HANDLE_FDK_BITSTREAM bs, CLa else { ErrorStatus = TRANSPORTDEC_PARSE_ERROR; //AAC_DEC_LATM_TIMEFRAMING; } - if (pLatmDemux->m_audioMuxLengthBytes > 0 && totalPayloadBits > pLatmDemux->m_audioMuxLengthBytes*8) { + if (pLatmDemux->m_audioMuxLengthBytes > (UINT)0 && totalPayloadBits > (int)pLatmDemux->m_audioMuxLengthBytes*8) { return TRANSPORTDEC_PARSE_ERROR; } return (ErrorStatus); diff --git a/libMpegTPDec/src/tpdec_latm.h b/libMpegTPDec/src/tpdec_latm.h index f1fcc19..6dc13e8 100644 --- a/libMpegTPDec/src/tpdec_latm.h +++ b/libMpegTPDec/src/tpdec_latm.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -144,14 +144,25 @@ TRANSPORTDEC_ERROR CLatmDemux_Read( TRANSPORT_TYPE tt, CSTpCallBacks *pTpDecCallbacks, CSAudioSpecificConfig *pAsc, + int *pfConfigFound, const INT ignoreBufferFullness ); +/** + * \brief Read StreamMuxConfig + * \param bs bit stream handle as data source + * \param pLatmDemux pointer to CLatmDemux struct of current LATM context + * \param pTpDecCallbacks Call back structure for configuration callbacks + * \param pAsc pointer to a ASC for configuration storage + * \param pfConfigFound pointer to a flag which is set to 1 if a configuration was found and processed successfully + * \return error code + */ TRANSPORTDEC_ERROR CLatmDemux_ReadStreamMuxConfig( HANDLE_FDK_BITSTREAM bs, CLatmDemux *pLatmDemux, CSTpCallBacks *pTpDecCallbacks, - CSAudioSpecificConfig *pAsc + CSAudioSpecificConfig *pAsc, + int * pfConfigFound ); TRANSPORTDEC_ERROR CLatmDemux_ReadPayloadLengthInfo(HANDLE_FDK_BITSTREAM bs, CLatmDemux *pLatmDemux); diff --git a/libMpegTPDec/src/tpdec_lib.cpp b/libMpegTPDec/src/tpdec_lib.cpp index 2dca5d5..1f9f29b 100644 --- a/libMpegTPDec/src/tpdec_lib.cpp +++ b/libMpegTPDec/src/tpdec_lib.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -197,8 +197,7 @@ HANDLE_TRANSPORTDEC transportDec_Open( const TRANSPORT_TYPE transportFmt, const if (hInput != NULL) { /* Create bitstream */ - if ( (transportFmt == TT_MP4_RAW) - || (transportFmt == TT_DRM) ){ + if ( TT_IS_PACKET(transportFmt) ) { hInput->bsBuffer = NULL; } else { hInput->bsBuffer = GetRam_TransportDecoderBuffer(0); @@ -222,7 +221,9 @@ TRANSPORTDEC_ERROR transportDec_OutOfBandConfig(HANDLE_TRANSPORTDEC hTp, UCHAR * FDK_BITSTREAM bs; HANDLE_FDK_BITSTREAM hBs = &bs; - FDKinitBitStream(hBs, conf, 0x80000000, length<<3, BS_READER); + FDKinitBitStream(hBs, conf, 0x10000000, length<<3, BS_READER); + + int fConfigFound = 0; /* config transport decoder */ switch (hTp->transportFmt) { @@ -234,27 +235,27 @@ TRANSPORTDEC_ERROR transportDec_OutOfBandConfig(HANDLE_TRANSPORTDEC hTp, UCHAR * return TRANSPORTDEC_INVALID_PARAMETER; } CLatmDemux *pLatmDemux = &hTp->parser.latm; - err = CLatmDemux_ReadStreamMuxConfig(hBs, pLatmDemux, &hTp->callbacks, hTp->asc); + err = CLatmDemux_ReadStreamMuxConfig(hBs, pLatmDemux, &hTp->callbacks, hTp->asc, &fConfigFound); if (err != TRANSPORTDEC_OK) { return err; } } break; default: - case TT_MP4_RAW: + fConfigFound = 1; err = AudioSpecificConfig_Parse(&hTp->asc[layer], hBs, 1, &hTp->callbacks); - break; - } - if (err == TRANSPORTDEC_OK) { - int errC; + if (err == TRANSPORTDEC_OK) { + int errC; - errC = hTp->callbacks.cbUpdateConfig(hTp->callbacks.cbUpdateConfigData, &hTp->asc[layer]); - if (errC != 0) { - err = TRANSPORTDEC_PARSE_ERROR; - } + errC = hTp->callbacks.cbUpdateConfig(hTp->callbacks.cbUpdateConfigData, &hTp->asc[layer]); + if (errC != 0) { + err = TRANSPORTDEC_PARSE_ERROR; + } + } + break; } - if (err == TRANSPORTDEC_OK) { + if (err == TRANSPORTDEC_OK && fConfigFound) { hTp->flags |= TPDEC_CONFIG_FOUND; } @@ -313,18 +314,16 @@ TRANSPORTDEC_ERROR transportDec_FillData( /* set bitbuffer shortcut */ hBs = &hTp->bitStream[layer]; - switch (hTp->transportFmt) { - case TT_MP4_RAW: - case TT_DRM: + if ( TT_IS_PACKET(hTp->transportFmt) ) { + if (hTp->numberOfRawDataBlocks == 0) { /* For packet based transport, pass input buffer to bitbuffer without copying the data. Unfortunately we do not know the actual buffer size. And the FDK bit buffer implementation needs a number 2^x. So we assume the maximum of 48 channels with 6144 bits per channel and round it up to the next power of 2 => 65536 bytes */ FDKinitBitStream(hBs, pBuffer, 0x10000, (*pBytesValid)<<3, BS_READER); *pBytesValid = 0; - break; - - default: + } + } else { /* ... else feed bitbuffer with new stream data (append). */ if (hTp->numberOfRawDataBlocks <= 0) { FDKfeedBuffer (hBs, pBuffer, bufferSize, pBytesValid) ; @@ -369,6 +368,82 @@ INT transportDec_GetBufferFullness( const HANDLE_TRANSPORTDEC hTp ) } /** + * \brief adjust bit stream position and the end of an access unit. + * \param hTp transport decoder handle. + * \return error code. + */ +static +TRANSPORTDEC_ERROR transportDec_AdjustEndOfAccessUnit(HANDLE_TRANSPORTDEC hTp) +{ + HANDLE_FDK_BITSTREAM hBs = &hTp->bitStream[0]; + TRANSPORTDEC_ERROR err = TRANSPORTDEC_OK; + + switch (hTp->transportFmt) { + case TT_MP4_LOAS: + case TT_MP4_LATM_MCP0: + case TT_MP4_LATM_MCP1: + if ( hTp->numberOfRawDataBlocks == 0 ) + { + /* Do byte align at the end of AudioMuxElement. */ + FDKbyteAlign(hBs, hTp->globalFramePos); + + /* Check global frame length */ + if (hTp->transportFmt == TT_MP4_LOAS && hTp->parser.latm.m_audioMuxLengthBytes > 0) + { + int loasOffset; + + loasOffset = (hTp->parser.latm.m_audioMuxLengthBytes*8 + FDKgetValidBits(hBs)) - hTp->globalFramePos; + if (loasOffset != 0) { + FDKpushBiDirectional(hBs, loasOffset); + /* For ELD and other payloads there is an unknown amount of padding, so ignore unread bits, but + throw an error only if too many bits where read. */ + if (loasOffset < 0) { + err = TRANSPORTDEC_PARSE_ERROR; + } + } + } + } + break; + + case TT_MP4_ADTS: + if (hTp->parser.adts.bs.protection_absent == 0) + { + int offset; + + /* Calculate offset to end of AU */ + offset = hTp->parser.adts.rawDataBlockDist[hTp->parser.adts.bs.num_raw_blocks-hTp->numberOfRawDataBlocks]<<3; + /* CAUTION: The PCE (if available) is declared to be a part of the header! */ + offset -= hTp->accessUnitAnchor[0] - FDKgetValidBits(hBs) + 16 + hTp->parser.adts.bs.num_pce_bits; + FDKpushBiDirectional(hBs, offset); + } + if (hTp->parser.adts.bs.num_raw_blocks > 0 && hTp->parser.adts.bs.protection_absent == 0) { + /* Note this CRC read currently happens twice because of transportDec_CrcCheck() */ + hTp->parser.adts.crcReadValue = FDKreadBits(hBs, 16); + } + if ( hTp->numberOfRawDataBlocks == 0 ) + { + /* Check global frame length */ + if (hTp->parser.adts.bs.protection_absent == 0) + { + int offset; + + offset = (hTp->parser.adts.bs.frame_length*8 - ADTS_SYNCLENGTH + FDKgetValidBits(hBs)) - hTp->globalFramePos; + if (offset != 0) { + FDKpushBiDirectional(hBs, offset); + } + } + } + break; + + default: + break; + } + + return err; +} + + +/** * \brief Determine additional buffer fullness contraint due to burst data reception. * The parameter TPDEC_PARAM_BURSTPERIOD must have been set as a precondition. * \param hTp transport decoder handle. @@ -432,51 +507,152 @@ TRANSPORTDEC_ERROR additionalHoldOffNeeded( } } -/** - * \brief adjust bit stream position and the end of an access unit. - * \param hTp transport decoder handle. - * \return error code. - */ -static -TRANSPORTDEC_ERROR transportDec_AdjustEndOfAccessUnit(HANDLE_TRANSPORTDEC hTp) +static TRANSPORTDEC_ERROR transportDec_readHeader( + HANDLE_TRANSPORTDEC hTp, + HANDLE_FDK_BITSTREAM hBs, + int syncLength, + int ignoreBufferFullness, + int *pRawDataBlockLength, + int *pfTraverseMoreFrames, + int *pSyncLayerFrameBits, + int *pfConfigFound, + int *pHeaderBits + ) { - HANDLE_FDK_BITSTREAM hBs = &hTp->bitStream[0]; TRANSPORTDEC_ERROR err = TRANSPORTDEC_OK; + int rawDataBlockLength = *pRawDataBlockLength; + int fTraverseMoreFrames = (pfTraverseMoreFrames != NULL) ? *pfTraverseMoreFrames : 0; + int syncLayerFrameBits = (pSyncLayerFrameBits != NULL) ? *pSyncLayerFrameBits : 0; + int fConfigFound = (pfConfigFound != NULL) ? *pfConfigFound : 0; + int startPos; + + startPos = FDKgetValidBits(hBs); switch (hTp->transportFmt) { - case TT_MP4_LOAS: - case TT_MP4_LATM_MCP0: - case TT_MP4_LATM_MCP1: - if ( hTp->numberOfRawDataBlocks == 0 ) + case TT_MP4_ADTS: + if (hTp->numberOfRawDataBlocks <= 0) { - /* Check global frame length */ - if (hTp->transportFmt == TT_MP4_LOAS && hTp->parser.latm.m_audioMuxLengthBytes > 0) - { - int loasOffset; + int errC; - loasOffset = (hTp->parser.latm.m_audioMuxLengthBytes*8 + FDKgetValidBits(hBs)) - hTp->globalFramePos; - if (loasOffset != 0) { - FDKpushBiDirectional(hBs, loasOffset); - /* For ELD and other payloads there is an unknown amount of padding, so ignore unread bits, but - throw an error only if too many bits where read. */ - if (loasOffset < 0) { - err = TRANSPORTDEC_PARSE_ERROR; + hTp->globalFramePos = FDKgetValidBits(hBs); + + /* Parse ADTS header */ + err = adtsRead_DecodeHeader( &hTp->parser.adts, &hTp->asc[0], hBs, ignoreBufferFullness ); + if (err != TRANSPORTDEC_OK) { + if (err != TRANSPORTDEC_NOT_ENOUGH_BITS) { + err = TRANSPORTDEC_SYNC_ERROR; + } + } else { + errC = hTp->callbacks.cbUpdateConfig(hTp->callbacks.cbUpdateConfigData, &hTp->asc[0]); + if (errC != 0) { + if (errC == TRANSPORTDEC_NEED_TO_RESTART) { + err = TRANSPORTDEC_NEED_TO_RESTART; + goto bail; + } else { + err = TRANSPORTDEC_SYNC_ERROR; } + } else { + fConfigFound = 1; + hTp->numberOfRawDataBlocks = hTp->parser.adts.bs.num_raw_blocks+1; } } + } + else { + /* Reset CRC because the next bits are the beginning of a raw_data_block() */ + FDKcrcReset(&hTp->parser.adts.crcInfo); + hTp->parser.adts.bs.num_pce_bits = 0; + } + if (err == TRANSPORTDEC_OK) { + hTp->numberOfRawDataBlocks--; + rawDataBlockLength = adtsRead_GetRawDataBlockLength(&hTp->parser.adts, (hTp->parser.adts.bs.num_raw_blocks-hTp->numberOfRawDataBlocks)); + if (rawDataBlockLength <= 0) { + /* No further frame traversal possible. */ + fTraverseMoreFrames = 0; + } + syncLayerFrameBits = (hTp->parser.adts.bs.frame_length<<3) - (startPos - FDKgetValidBits(hBs)) - syncLength; + if (syncLayerFrameBits <= 0) { + err = TRANSPORTDEC_SYNC_ERROR; + } + } else { + hTp->numberOfRawDataBlocks = 0; + } + break; + case TT_MP4_LOAS: + if (hTp->numberOfRawDataBlocks <= 0) + { + syncLayerFrameBits = FDKreadBits(hBs, 13); + hTp->parser.latm.m_audioMuxLengthBytes = syncLayerFrameBits; + syncLayerFrameBits <<= 3; + } + case TT_MP4_LATM_MCP1: + case TT_MP4_LATM_MCP0: + if (hTp->numberOfRawDataBlocks <= 0) + { + hTp->globalFramePos = FDKgetValidBits(hBs); - /* Do global LOAS/LATM audioMuxElement byte alignment */ - FDKbyteAlign(hBs, hTp->globalFramePos); + err = CLatmDemux_Read( + hBs, + &hTp->parser.latm, + hTp->transportFmt, + &hTp->callbacks, + hTp->asc, + &fConfigFound, + ignoreBufferFullness); + + if (err != TRANSPORTDEC_OK) { + if (err != TRANSPORTDEC_NOT_ENOUGH_BITS) { + err = TRANSPORTDEC_SYNC_ERROR; + } + } else { + hTp->numberOfRawDataBlocks = CLatmDemux_GetNrOfSubFrames(&hTp->parser.latm); + if (hTp->transportFmt == TT_MP4_LOAS) { + syncLayerFrameBits -= startPos - FDKgetValidBits(hBs) - (13); + } + } + } else { + err = CLatmDemux_ReadPayloadLengthInfo(hBs, &hTp->parser.latm); + if (err != TRANSPORTDEC_OK) { + err = TRANSPORTDEC_SYNC_ERROR; + } + } + if (err == TRANSPORTDEC_OK) { + rawDataBlockLength = CLatmDemux_GetFrameLengthInBits(&hTp->parser.latm); + hTp->numberOfRawDataBlocks--; + } else { + hTp->numberOfRawDataBlocks = 0; } break; default: + { + syncLayerFrameBits = 0; + } break; } +bail: + + *pRawDataBlockLength = rawDataBlockLength; + + if (pHeaderBits != NULL) { + *pHeaderBits += startPos - (INT)FDKgetValidBits(hBs); + } + if (pfConfigFound != NULL) { + *pfConfigFound = fConfigFound; + } + + if (pfTraverseMoreFrames != NULL) { + *pfTraverseMoreFrames = fTraverseMoreFrames; + } + if (pSyncLayerFrameBits != NULL) { + *pSyncLayerFrameBits = syncLayerFrameBits; + } + if (pfConfigFound != NULL) { + *pfConfigFound = fConfigFound; + } + return err; } - /* How many bits to advance for synchronization search. */ #define TPDEC_SYNCSKIP 8 @@ -493,9 +669,9 @@ TRANSPORTDEC_ERROR synchronization( INT rawDataBlockLength = 0, rawDataBlockLengthPrevious; INT totalBits; INT headerBits = 0, headerBitsFirstFrame = 0, headerBitsPrevious; - INT numFramesTraversed = 0, fTraverseMoreFrames, fConfigFound = 0, startPos, startPosFirstFrame = -1; + INT numFramesTraversed = 0, fTraverseMoreFrames, fConfigFound = (hTp->flags & TPDEC_CONFIG_FOUND), startPosFirstFrame = -1; INT numRawDataBlocksFirstFrame = 0, numRawDataBlocksPrevious, globalFramePosFirstFrame = 0, rawDataBlockLengthFirstFrame = 0; - INT ignoreBufferFullness = hTp->flags & (TPDEC_IGNORE_BUFFERFULLNESS|TPDEC_SYNCOK); + INT ignoreBufferFullness = hTp->flags & (TPDEC_LOST_FRAMES_PENDING|TPDEC_IGNORE_BUFFERFULLNESS|TPDEC_SYNCOK); /* Synch parameters */ INT syncLength; /* Length of sync word in bits */ @@ -506,10 +682,7 @@ TRANSPORTDEC_ERROR synchronization( totalBits = (INT)FDKgetValidBits(hBs); if (totalBits <= 0) { - /* Return sync error, because this happens only in case of severly damaged bit streams. - Returning TRANSPORTDEC_NOT_ENOUGH_BITS here is very dangerous. */ - /* numberOfRawDataBlocks must be always reset in case of sync errors. */ - hTp->numberOfRawDataBlocks = 0; + err = TRANSPORTDEC_NOT_ENOUGH_BITS; goto bail; } @@ -579,100 +752,22 @@ TRANSPORTDEC_ERROR synchronization( numRawDataBlocksPrevious = hTp->numberOfRawDataBlocks; /* Parse transport header (raw data block granularity) */ - startPos = FDKgetValidBits(hBs); if (err == TRANSPORTDEC_OK ) { - switch (hTp->transportFmt) { - case TT_MP4_ADTS: - if (hTp->numberOfRawDataBlocks <= 0) - { - int errC; - - /* Parse ADTS header */ - err = adtsRead_DecodeHeader( &hTp->parser.adts, &hTp->asc[0], hBs, ignoreBufferFullness ); - if (err != TRANSPORTDEC_OK) { - if (err != TRANSPORTDEC_NOT_ENOUGH_BITS) { - err = TRANSPORTDEC_SYNC_ERROR; - } - } else { - errC = hTp->callbacks.cbUpdateConfig(hTp->callbacks.cbUpdateConfigData, &hTp->asc[0]); - if (errC != 0) { - err = TRANSPORTDEC_SYNC_ERROR; - } else { - hTp->numberOfRawDataBlocks = hTp->parser.adts.bs.num_raw_blocks+1; - /* CAUTION: The PCE (if available) is declared to be a part of the header! */ - hTp->globalFramePos = FDKgetValidBits(hBs) + hTp->parser.adts.bs.num_pce_bits; - } - } - } - else { - /* Reset CRC because the next bits are the beginning of a raw_data_block() */ - FDKcrcReset(&hTp->parser.adts.crcInfo); - hTp->globalFramePos = FDKgetValidBits(hBs); - } - if (err == TRANSPORTDEC_OK) { - hTp->numberOfRawDataBlocks--; - rawDataBlockLength = adtsRead_GetRawDataBlockLength(&hTp->parser.adts, (hTp->parser.adts.bs.num_raw_blocks-hTp->numberOfRawDataBlocks)); - syncLayerFrameBits = (hTp->parser.adts.bs.frame_length<<3) - (startPos - FDKgetValidBits(hBs)) - syncLength; - if (syncLayerFrameBits <= 0) { - err = TRANSPORTDEC_SYNC_ERROR; - } - } else { - hTp->numberOfRawDataBlocks = 0; - } - break; - case TT_MP4_LOAS: - if (hTp->numberOfRawDataBlocks <= 0) - { - syncLayerFrameBits = FDKreadBits(hBs, 13); - hTp->parser.latm.m_audioMuxLengthBytes = syncLayerFrameBits; - syncLayerFrameBits <<= 3; - } - case TT_MP4_LATM_MCP1: - case TT_MP4_LATM_MCP0: - if (hTp->numberOfRawDataBlocks <= 0) - { - hTp->globalFramePos = FDKgetValidBits(hBs); - - err = CLatmDemux_Read( - hBs, - &hTp->parser.latm, - hTp->transportFmt, - &hTp->callbacks, - hTp->asc, - ignoreBufferFullness); - - if (err != TRANSPORTDEC_OK) { - if (err != TRANSPORTDEC_NOT_ENOUGH_BITS) { - err = TRANSPORTDEC_SYNC_ERROR; - } - } else { - hTp->numberOfRawDataBlocks = CLatmDemux_GetNrOfSubFrames(&hTp->parser.latm); - syncLayerFrameBits -= startPos - FDKgetValidBits(hBs) - (13); - } - } else { - err = CLatmDemux_ReadPayloadLengthInfo(hBs, &hTp->parser.latm); - if (err != TRANSPORTDEC_OK) { - err = TRANSPORTDEC_SYNC_ERROR; - } - } - if (err == TRANSPORTDEC_OK) { - rawDataBlockLength = CLatmDemux_GetFrameLengthInBits(&hTp->parser.latm); - hTp->numberOfRawDataBlocks--; - } else { - hTp->numberOfRawDataBlocks = 0; - } - break; - default: - { - syncLayerFrameBits = 0; - } - break; - } + err = transportDec_readHeader( + hTp, + hBs, + syncLength, + ignoreBufferFullness, + &rawDataBlockLength, + &fTraverseMoreFrames, + &syncLayerFrameBits, + &fConfigFound, + &headerBits + ); } - headerBits += startPos - (INT)FDKgetValidBits(hBs); bitsAvail -= headerBits; checkLengthBits = syncLayerFrameBits; @@ -702,12 +797,12 @@ TRANSPORTDEC_ERROR synchronization( /* Enforce re-sync of transport headers. */ hTp->numberOfRawDataBlocks = 0; - /* Ensure that the bit amount lands and a multiple of TPDEC_SYNCSKIP */ + /* Ensure that the bit amount lands at a multiple of TPDEC_SYNCSKIP */ bits = (bitsAvail + headerBits) % TPDEC_SYNCSKIP; /* Rewind - TPDEC_SYNCSKIP, in order to look for a synch one bit ahead next time. */ FDKpushBiDirectional(hBs, -(headerBits - TPDEC_SYNCSKIP) + bits); bitsAvail += headerBits - TPDEC_SYNCSKIP - bits; - headerBits = 0; + headerBits = 0; } /* Frame traversal */ @@ -731,7 +826,15 @@ TRANSPORTDEC_ERROR synchronization( } /* Break when config was found or it is not possible anymore to find a config */ - if (startPosFirstFrame != -1 && (fConfigFound || err != TRANSPORTDEC_OK)) { + if (startPosFirstFrame != -1 && (fConfigFound || err != TRANSPORTDEC_OK)) + { + /* In case of ECD and sync error, do not rewind anywhere. */ + if (err == TRANSPORTDEC_SYNC_ERROR) + { + startPosFirstFrame = -1; + fConfigFound = 0; + numFramesTraversed = 0; + } break; } } @@ -759,7 +862,7 @@ TRANSPORTDEC_ERROR synchronization( } /* Additional burst data mode buffer fullness check. */ - if ( !(hTp->flags & (TPDEC_IGNORE_BUFFERFULLNESS|TPDEC_SYNCOK)) && err == TRANSPORTDEC_OK) { + if ( !(hTp->flags & (TPDEC_LOST_FRAMES_PENDING|TPDEC_IGNORE_BUFFERFULLNESS|TPDEC_SYNCOK)) && err == TRANSPORTDEC_OK) { err = additionalHoldOffNeeded(hTp, transportDec_GetBufferFullness(hTp), FDKgetValidBits(hBs) - syncLayerFrameBits); if (err == TRANSPORTDEC_NOT_ENOUGH_BITS) { hTp->holdOffFrames++; @@ -789,10 +892,22 @@ TRANSPORTDEC_ERROR synchronization( bail: hTp->auLength[0] = rawDataBlockLength; + /* Detect pointless TRANSPORTDEC_NOT_ENOUGH_BITS error case, were the bit buffer is already full, + or no new burst packet fits. Recover by advancing the bit buffer. */ + if ( (TRANSPORTDEC_NOT_ENOUGH_BITS == err) && (FDKgetValidBits(hBs) >= ((TRANSPORTDEC_INBUF_SIZE*8 - ((hTp->avgBitRate*hTp->burstPeriod)/1000)) - 7)) ) + { + FDKpushFor(hBs, TPDEC_SYNCSKIP); + err = TRANSPORTDEC_SYNC_ERROR; + } + if (err == TRANSPORTDEC_OK) { hTp->flags |= TPDEC_SYNCOK; } + if (fConfigFound) { + hTp->flags |= TPDEC_CONFIG_FOUND; + } + if (pHeaderBits != NULL) { *pHeaderBits = headerBits; } @@ -925,6 +1040,10 @@ TRANSPORTDEC_ERROR transportDec_ReadAccessUnit( const HANDLE_TRANSPORTDEC hTp, c hBs = &hTp->bitStream[layer]; + if ((INT)FDKgetValidBits(hBs) <= 0) { + err = TRANSPORTDEC_NOT_ENOUGH_BITS; + } + switch (hTp->transportFmt) { case TT_MP4_ADIF: @@ -964,20 +1083,26 @@ TRANSPORTDEC_ERROR transportDec_ReadAccessUnit( const HANDLE_TRANSPORTDEC hTp, c break; case TT_MP4_RAW: - if ((INT)FDKgetValidBits(hBs) <= 0 && layer == 0) { - err = TRANSPORTDEC_NOT_ENOUGH_BITS; - } /* One Access Unit was filled into buffer. So get the length out of the buffer. */ hTp->auLength[layer] = FDKgetValidBits(hBs); hTp->flags |= TPDEC_SYNCOK; break; + case TT_MP4_LATM_MCP0: + case TT_MP4_LATM_MCP1: + { + int fConfigFound = hTp->flags & TPDEC_CONFIG_FOUND; + err = transportDec_readHeader(hTp, hBs, 0, 1, &hTp->auLength[layer], NULL, NULL, &fConfigFound, NULL); + if (fConfigFound) { + hTp->flags |= TPDEC_CONFIG_FOUND; + } + } + break; + case TT_RSVD50: case TT_MP4_ADTS: case TT_MP4_LOAS: - case TT_MP4_LATM_MCP0: - case TT_MP4_LATM_MCP1: err = transportDec_readStream(hTp, layer); break; @@ -1026,13 +1151,10 @@ TRANSPORTDEC_ERROR transportDec_EndAccessUnit(HANDLE_TRANSPORTDEC hTp) { TRANSPORTDEC_ERROR err = TRANSPORTDEC_OK; + err = transportDec_AdjustEndOfAccessUnit(hTp); switch (hTp->transportFmt) { - case TT_MP4_LOAS: - case TT_MP4_LATM_MCP0: - case TT_MP4_LATM_MCP1: - break; default: break; } @@ -1082,8 +1204,11 @@ TRANSPORTDEC_ERROR transportDec_SetParam ( const HANDLE_TRANSPORTDEC hTp, FDKresetBitbuffer(&hTp->bitStream[i]); hTp->auLength[i] = 0; hTp->accessUnitAnchor[i] = 0; - } + } hTp->flags &= ~(TPDEC_SYNCOK|TPDEC_LOST_FRAMES_PENDING); + if (hTp->transportFmt != TT_MP4_ADIF) { + hTp->flags &= ~TPDEC_CONFIG_FOUND; + } hTp->remainder = 0; hTp->avgBitRate = 0; hTp->missingAccessUnits = 0; @@ -1117,7 +1242,7 @@ void transportDec_Close(HANDLE_TRANSPORTDEC *phTp) if (phTp != NULL) { if (*phTp != NULL) { - if ((*phTp)->transportFmt != TT_MP4_RAW && (*phTp)->transportFmt != TT_DRM) { + if ( ! TT_IS_PACKET((*phTp)->transportFmt) ) { FreeRam_TransportDecoderBuffer(&(*phTp)->bsBuffer); } if (*phTp != NULL) { @@ -1188,13 +1313,8 @@ TRANSPORTDEC_ERROR transportDec_CrcCheck(HANDLE_TRANSPORTDEC pTp) if ( (pTp->parser.adts.bs.num_raw_blocks > 0) && (pTp->parser.adts.bs.protection_absent == 0) ) { HANDLE_FDK_BITSTREAM hBs = &pTp->bitStream[0]; - int bitDiff; - /* Calculate possible offset to CRC value. */ - bitDiff = pTp->parser.adts.rawDataBlockDist[pTp->parser.adts.bs.num_raw_blocks-pTp->numberOfRawDataBlocks]<<3; - bitDiff -= pTp->globalFramePos - FDKgetValidBits(hBs) + 16; - FDKpushBiDirectional(hBs, bitDiff); - pTp->parser.adts.crcReadValue = FDKreadBits(hBs, 16); + transportDec_AdjustEndOfAccessUnit(pTp); } return adtsRead_CrcCheck(&pTp->parser.adts); default: diff --git a/libMpegTPDec/src/version b/libMpegTPDec/src/version index 5b9a425..2803347 100644 --- a/libMpegTPDec/src/version +++ b/libMpegTPDec/src/version @@ -1,8 +1,8 @@ /* library info */ #define TP_LIB_VL0 2 -#define TP_LIB_VL1 2 -#define TP_LIB_VL2 1 +#define TP_LIB_VL1 3 +#define TP_LIB_VL2 3 #define TP_LIB_TITLE "MPEG Transport" #define TP_LIB_BUILD_DATE __DATE__ #define TP_LIB_BUILD_TIME __TIME__ diff --git a/libMpegTPEnc/include/mpegFileWrite.h b/libMpegTPEnc/include/mpegFileWrite.h index 6716d8f..f886a0b 100644 --- a/libMpegTPEnc/include/mpegFileWrite.h +++ b/libMpegTPEnc/include/mpegFileWrite.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libMpegTPEnc/include/tp_data.h b/libMpegTPEnc/include/tp_data.h index 6e8218a..5269858 100644 --- a/libMpegTPEnc/include/tp_data.h +++ b/libMpegTPEnc/include/tp_data.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libMpegTPEnc/include/tpenc_lib.h b/libMpegTPEnc/include/tpenc_lib.h index a06e7a7..2833e82 100644 --- a/libMpegTPEnc/include/tpenc_lib.h +++ b/libMpegTPEnc/include/tpenc_lib.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libMpegTPEnc/src/tpenc_adif.cpp b/libMpegTPEnc/src/tpenc_adif.cpp index 06bd30b..b48a32e 100644 --- a/libMpegTPEnc/src/tpenc_adif.cpp +++ b/libMpegTPEnc/src/tpenc_adif.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libMpegTPEnc/src/tpenc_adif.h b/libMpegTPEnc/src/tpenc_adif.h index 0921712..d590354 100644 --- a/libMpegTPEnc/src/tpenc_adif.h +++ b/libMpegTPEnc/src/tpenc_adif.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libMpegTPEnc/src/tpenc_adts.cpp b/libMpegTPEnc/src/tpenc_adts.cpp index 39460f0..f4f3178 100644 --- a/libMpegTPEnc/src/tpenc_adts.cpp +++ b/libMpegTPEnc/src/tpenc_adts.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libMpegTPEnc/src/tpenc_adts.h b/libMpegTPEnc/src/tpenc_adts.h index 9123f1e..c12c7c7 100644 --- a/libMpegTPEnc/src/tpenc_adts.h +++ b/libMpegTPEnc/src/tpenc_adts.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libMpegTPEnc/src/tpenc_asc.cpp b/libMpegTPEnc/src/tpenc_asc.cpp index 6200c14..bc4302e 100644 --- a/libMpegTPEnc/src/tpenc_asc.cpp +++ b/libMpegTPEnc/src/tpenc_asc.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -127,8 +127,7 @@ typedef struct { * * The number of channel element parameter describes the kind of consecutively elements. * E.g. MODE_1_2_2_2_1 means: - * - First 2 elements (SCE,CPE) are front channel elements. - * - Following element (CPE) is a side channel element. + * - First 3 elements (SCE,CPE,CPE) are front channel elements. * - Next element (CPE) is a back channel element. * - Last element (LFE) is a lfe channel element. */ @@ -140,7 +139,8 @@ static const CHANNEL_CONFIGURATION pceConfigTab[] = { MODE_1_2_1, { 2, 0, 1, 0, { ID_SCE, ID_CPE, ID_SCE, ID_NONE, ID_NONE, ID_NONE, ID_NONE, ID_NONE } } }, { MODE_1_2_2, { 2, 0, 1, 0, { ID_SCE, ID_CPE, ID_CPE, ID_NONE, ID_NONE, ID_NONE, ID_NONE, ID_NONE } } }, { MODE_1_2_2_1, { 2, 0, 1, 1, { ID_SCE, ID_CPE, ID_CPE, ID_LFE, ID_NONE, ID_NONE, ID_NONE, ID_NONE } } }, - { MODE_1_2_2_2_1, { 2, 1, 1, 1, { ID_SCE, ID_CPE, ID_CPE, ID_CPE, ID_LFE, ID_NONE, ID_NONE, ID_NONE } } }, + { MODE_1_2_2_2_1, { 3, 0, 1, 1, { ID_SCE, ID_CPE, ID_CPE, ID_CPE, ID_LFE, ID_NONE, ID_NONE, ID_NONE } } }, + { MODE_1_1, { 2, 0, 0, 0, { ID_SCE, ID_SCE, ID_NONE, ID_NONE, ID_NONE, ID_NONE, ID_NONE, ID_NONE } } }, { MODE_1_1_1_1, { 2, 2, 0, 0, { ID_SCE, ID_SCE, ID_SCE, ID_SCE, ID_NONE, ID_NONE, ID_NONE, ID_NONE } } }, @@ -151,7 +151,11 @@ static const CHANNEL_CONFIGURATION pceConfigTab[] = { MODE_2_2_2, { 1, 1, 1, 0, { ID_CPE, ID_CPE, ID_CPE, ID_NONE, ID_NONE, ID_NONE, ID_NONE, ID_NONE } } }, { MODE_2_2_2_2, { 4, 0, 0, 0, { ID_CPE, ID_CPE, ID_CPE, ID_CPE, ID_NONE, ID_NONE, ID_NONE, ID_NONE } } }, - { MODE_2_1, { 1, 0, 1, 0, { ID_CPE, ID_SCE, ID_NONE, ID_NONE, ID_NONE, ID_NONE, ID_NONE, ID_NONE } } } + { MODE_2_1, { 1, 0, 1, 0, { ID_CPE, ID_SCE, ID_NONE, ID_NONE, ID_NONE, ID_NONE, ID_NONE, ID_NONE } } }, + + { MODE_7_1_REAR_SURROUND, { 2, 0, 2, 1, { ID_SCE, ID_CPE, ID_CPE, ID_CPE, ID_LFE, ID_NONE, ID_NONE, ID_NONE } } }, + { MODE_7_1_FRONT_CENTER, { 3, 0, 1, 1, { ID_SCE, ID_CPE, ID_CPE, ID_CPE, ID_LFE, ID_NONE, ID_NONE, ID_NONE } } }, + }; @@ -255,7 +259,7 @@ int transportEnc_writePCE(HANDLE_FDK_BITSTREAM hBs, if ( matrixMixdownA!=0 && ((channelMode==MODE_1_2_2)||(channelMode==MODE_1_2_2_1)) ) { FDKwriteBits(hBs, 1, 1); /* Matrix mixdown present */ FDKwriteBits(hBs, (matrixMixdownA-1)&0x3, 2); /* matrix_mixdown_idx */ - FDKwriteBits(hBs, pseudoSurroundEnable&0x1, 1); /* pseudo_surround_enable */ + FDKwriteBits(hBs, (pseudoSurroundEnable)?1:0, 1); /* pseudo_surround_enable */ } else { FDKwriteBits(hBs, 0, 1); /* Matrix mixdown not present */ @@ -379,7 +383,7 @@ int transportEnc_writeGASpecificConfig( /* Write PCE if channel config is not 1-7 */ if (getChannelConfig(config->channelMode) == 0) { - transportEnc_writePCE(asc, config->channelMode, config->samplingRate, 0, 1, 0, 0, alignAnchor); + transportEnc_writePCE(asc, config->channelMode, config->samplingRate, 0, 1, config->matrixMixdownA, (config->flags&CC_PSEUDO_SURROUND)?1:0, alignAnchor); } if (extFlg) { if (aot == AOT_ER_BSAC) { @@ -474,7 +478,7 @@ int transportEnc_writeASC ( break; } - if (config->extAOT == AOT_SBR || config->extAOT == AOT_PS) + if (config->sbrSignaling==SIG_EXPLICIT_HIERARCHICAL && config->sbrPresent) writeAot(asc, config->extAOT); else writeAot(asc, config->aot); @@ -492,7 +496,7 @@ int transportEnc_writeASC ( FDKwriteBits( asc, getChannelConfig(config->channelMode), 4 ); - if (config->extAOT == AOT_SBR || config->extAOT == AOT_PS) { + if (config->sbrSignaling==SIG_EXPLICIT_HIERARCHICAL && config->sbrPresent) { writeSampleRate(asc, config->extSamplingRate); writeAot(asc, config->aot); } @@ -545,6 +549,26 @@ int transportEnc_writeASC ( break; } + /* backward compatible explicit signaling of extension AOT */ + if (config->sbrSignaling==SIG_EXPLICIT_BW_COMPATIBLE) + { + TP_ASC_EXTENSION_ID ascExtId = ASCEXT_UNKOWN; + + if (config->sbrPresent) { + ascExtId=ASCEXT_SBR; + FDKwriteBits( asc, ascExtId, 11 ); + writeAot(asc, config->extAOT); + FDKwriteBits( asc, 1, 1 ); /* sbrPresentFlag=1 */ + writeSampleRate(asc, config->extSamplingRate); + if (config->psPresent) { + ascExtId=ASCEXT_PS; + FDKwriteBits( asc, ascExtId, 11 ); + FDKwriteBits( asc, 1, 1 ); /* psPresentFlag=1 */ + } + } + + } + /* Make sure all bits are sync'ed */ FDKsyncCache( asc ); diff --git a/libMpegTPEnc/src/tpenc_asc.h b/libMpegTPEnc/src/tpenc_asc.h index 990f74f..47fe7a1 100644 --- a/libMpegTPEnc/src/tpenc_asc.h +++ b/libMpegTPEnc/src/tpenc_asc.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libMpegTPEnc/src/tpenc_latm.cpp b/libMpegTPEnc/src/tpenc_latm.cpp index 54fd717..58e51ef 100644 --- a/libMpegTPEnc/src/tpenc_latm.cpp +++ b/libMpegTPEnc/src/tpenc_latm.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libMpegTPEnc/src/tpenc_latm.h b/libMpegTPEnc/src/tpenc_latm.h index fd95a60..34eea58 100644 --- a/libMpegTPEnc/src/tpenc_latm.h +++ b/libMpegTPEnc/src/tpenc_latm.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libMpegTPEnc/src/tpenc_lib.cpp b/libMpegTPEnc/src/tpenc_lib.cpp index 4f3177d..d0a2fec 100644 --- a/libMpegTPEnc/src/tpenc_lib.cpp +++ b/libMpegTPEnc/src/tpenc_lib.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -150,12 +150,18 @@ C_ALLOC_MEM(Ram_TransportEncoder, TRANSPORTENC, 1) TRANSPORTENC_ERROR transportEnc_Open( HANDLE_TRANSPORTENC *phTpEnc ) { - HANDLE_TRANSPORTENC hTpEnc = GetRam_TransportEncoder(0); + HANDLE_TRANSPORTENC hTpEnc; - if ( hTpEnc == NULL ) { + if ( phTpEnc == NULL ){ return TRANSPORTENC_INVALID_PARAMETER; } + hTpEnc = GetRam_TransportEncoder(0); + + if ( hTpEnc == NULL ) { + return TRANSPORTENC_NO_MEM; + } + *phTpEnc = hTpEnc; return TRANSPORTENC_OK; } @@ -417,7 +423,7 @@ TRANSPORTENC_ERROR transportEnc_WriteAccessUnit( } /* Write PCE as first raw_data_block element */ - transportEnc_writePCE(&hTp->bitStream, hTp->config.channelMode, hTp->config.samplingRate, 0, 1, hTp->config.matrixMixdownA, hTp->config.flags & CC_PSEUDO_SURROUND, alignAnchor); + transportEnc_writePCE(&hTp->bitStream, hTp->config.channelMode, hTp->config.samplingRate, 0, 1, hTp->config.matrixMixdownA, (hTp->config.flags&CC_PSEUDO_SURROUND)?1:0, alignAnchor); if ( (hTp->transportFmt==TT_MP4_ADTS) && !hTp->writer.adts.protection_absent) { adtsWrite_CrcEndReg(&hTp->writer.adts, &hTp->bitStream, crcIndex); diff --git a/libMpegTPEnc/src/version b/libMpegTPEnc/src/version index 5b9a425..2803347 100644 --- a/libMpegTPEnc/src/version +++ b/libMpegTPEnc/src/version @@ -1,8 +1,8 @@ /* library info */ #define TP_LIB_VL0 2 -#define TP_LIB_VL1 2 -#define TP_LIB_VL2 1 +#define TP_LIB_VL1 3 +#define TP_LIB_VL2 3 #define TP_LIB_TITLE "MPEG Transport" #define TP_LIB_BUILD_DATE __DATE__ #define TP_LIB_BUILD_TIME __TIME__ diff --git a/libPCMutils/include/pcmutils_lib.h b/libPCMutils/include/pcmutils_lib.h index fd4a26d..5ba74be 100644 --- a/libPCMutils/include/pcmutils_lib.h +++ b/libPCMutils/include/pcmutils_lib.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libPCMutils/src/pcmutils_lib.cpp b/libPCMutils/src/pcmutils_lib.cpp index e0a9817..a84a050 100644 --- a/libPCMutils/src/pcmutils_lib.cpp +++ b/libPCMutils/src/pcmutils_lib.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -96,8 +96,8 @@ amm-info@iis.fraunhofer.de /* Decoder library info */ #define PCMDMX_LIB_VL0 2 -#define PCMDMX_LIB_VL1 3 -#define PCMDMX_LIB_VL2 1 +#define PCMDMX_LIB_VL1 4 +#define PCMDMX_LIB_VL2 0 #define PCMDMX_LIB_TITLE "PCM Downmix Lib" #define PCMDMX_LIB_BUILD_DATE __DATE__ #define PCMDMX_LIB_BUILD_TIME __TIME__ diff --git a/libSBRdec/include/sbrdecoder.h b/libSBRdec/include/sbrdecoder.h index 300a6d9..13707e0 100644 --- a/libSBRdec/include/sbrdecoder.h +++ b/libSBRdec/include/sbrdecoder.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRdec/src/arm/env_calc_arm.cpp b/libSBRdec/src/arm/env_calc_arm.cpp index 4e3a6de..12b17d8 100644 --- a/libSBRdec/src/arm/env_calc_arm.cpp +++ b/libSBRdec/src/arm/env_calc_arm.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRdec/src/arm/lpp_tran_arm.cpp b/libSBRdec/src/arm/lpp_tran_arm.cpp index 541e7c7..78bbc2c 100644 --- a/libSBRdec/src/arm/lpp_tran_arm.cpp +++ b/libSBRdec/src/arm/lpp_tran_arm.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRdec/src/env_calc.cpp b/libSBRdec/src/env_calc.cpp index 11df761..ade57fc 100644 --- a/libSBRdec/src/env_calc.cpp +++ b/libSBRdec/src/env_calc.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRdec/src/env_calc.h b/libSBRdec/src/env_calc.h index d21e0b3..8154166 100644 --- a/libSBRdec/src/env_calc.h +++ b/libSBRdec/src/env_calc.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRdec/src/env_dec.cpp b/libSBRdec/src/env_dec.cpp index ac6c299..24b2d3b 100644 --- a/libSBRdec/src/env_dec.cpp +++ b/libSBRdec/src/env_dec.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -624,8 +624,8 @@ timeCompensateFirstEnvelope (HANDLE_SBR_HEADER_DATA hHeaderData, /*!< Static con deltaExp = FDK_getNumOctavesDiv8(newLen, refLen); - /* Shift by -3 to rescale ld-table, 1-ampRes to enable coarser steps */ - shift = (FRACT_BITS - 1 - ENV_EXP_FRACT + 1 - h_sbr_data->ampResolutionCurrentFrame - 3); + /* Shift by -3 to rescale ld-table, ampRes-1 to enable coarser steps */ + shift = (FRACT_BITS - 1 - ENV_EXP_FRACT - 1 + h_sbr_data->ampResolutionCurrentFrame - 3); deltaExp = deltaExp >> shift; pFrameInfo->borders[0] = estimatedStartPos; pFrameInfo->bordersNoise[0] = estimatedStartPos; diff --git a/libSBRdec/src/env_dec.h b/libSBRdec/src/env_dec.h index 3e656ed..6f6dae3 100644 --- a/libSBRdec/src/env_dec.h +++ b/libSBRdec/src/env_dec.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRdec/src/env_extr.cpp b/libSBRdec/src/env_extr.cpp index 716fb91..6cb0b99 100644 --- a/libSBRdec/src/env_extr.cpp +++ b/libSBRdec/src/env_extr.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRdec/src/env_extr.h b/libSBRdec/src/env_extr.h index be46246..5db6d3d 100644 --- a/libSBRdec/src/env_extr.h +++ b/libSBRdec/src/env_extr.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRdec/src/huff_dec.cpp b/libSBRdec/src/huff_dec.cpp index 6e00b23..31d686d 100644 --- a/libSBRdec/src/huff_dec.cpp +++ b/libSBRdec/src/huff_dec.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRdec/src/huff_dec.h b/libSBRdec/src/huff_dec.h index 7b2b50b..5443658 100644 --- a/libSBRdec/src/huff_dec.h +++ b/libSBRdec/src/huff_dec.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRdec/src/lpp_tran.cpp b/libSBRdec/src/lpp_tran.cpp index 2d51831..117e739 100644 --- a/libSBRdec/src/lpp_tran.cpp +++ b/libSBRdec/src/lpp_tran.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -875,22 +875,8 @@ resetLppTransposer (HANDLE_SBR_LPP_TRANS hLppTrans, /*!< Handle of lpp transpos /* * Initialize the patching parameter */ - desiredBorder = 21; - if (fs < 92017) { - desiredBorder = 23; - } - if (fs < 75132) { - desiredBorder = 32; - } - if (fs < 55426) { - desiredBorder = 43; - } - if (fs < 46009) { - desiredBorder = 46; - } - if (fs < 35777) { - desiredBorder = 64; - } + /* ISO/IEC 14496-3 (Figure 4.48): goalSb = round( 2.048e6 / fs ) */ + desiredBorder = (((2048000*2) / fs) + 1) >> 1; desiredBorder = findClosestEntry(desiredBorder, v_k_master, numMaster, 1); /* Adapt region to master-table */ diff --git a/libSBRdec/src/lpp_tran.h b/libSBRdec/src/lpp_tran.h index 1838c06..003a547 100644 --- a/libSBRdec/src/lpp_tran.h +++ b/libSBRdec/src/lpp_tran.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRdec/src/psbitdec.cpp b/libSBRdec/src/psbitdec.cpp index dfd532f..29bddf7 100644 --- a/libSBRdec/src/psbitdec.cpp +++ b/libSBRdec/src/psbitdec.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRdec/src/psbitdec.h b/libSBRdec/src/psbitdec.h index 3b65468..a2d4d6c 100644 --- a/libSBRdec/src/psbitdec.h +++ b/libSBRdec/src/psbitdec.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRdec/src/psdec.cpp b/libSBRdec/src/psdec.cpp index d494c65..965917a 100644 --- a/libSBRdec/src/psdec.cpp +++ b/libSBRdec/src/psdec.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRdec/src/psdec.h b/libSBRdec/src/psdec.h index e3a0424..3dbc76d 100644 --- a/libSBRdec/src/psdec.h +++ b/libSBRdec/src/psdec.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRdec/src/psdec_hybrid.cpp b/libSBRdec/src/psdec_hybrid.cpp index 7fc2c0a..cbd0e92 100644 --- a/libSBRdec/src/psdec_hybrid.cpp +++ b/libSBRdec/src/psdec_hybrid.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRdec/src/psdec_hybrid.h b/libSBRdec/src/psdec_hybrid.h index 6503df9..fcf9e3e 100644 --- a/libSBRdec/src/psdec_hybrid.h +++ b/libSBRdec/src/psdec_hybrid.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRdec/src/sbr_crc.cpp b/libSBRdec/src/sbr_crc.cpp index 760bd1f..a495f10 100644 --- a/libSBRdec/src/sbr_crc.cpp +++ b/libSBRdec/src/sbr_crc.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRdec/src/sbr_crc.h b/libSBRdec/src/sbr_crc.h index 542843d..30b8329 100644 --- a/libSBRdec/src/sbr_crc.h +++ b/libSBRdec/src/sbr_crc.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRdec/src/sbr_deb.cpp b/libSBRdec/src/sbr_deb.cpp index aa37ffe..9baff2e 100644 --- a/libSBRdec/src/sbr_deb.cpp +++ b/libSBRdec/src/sbr_deb.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRdec/src/sbr_deb.h b/libSBRdec/src/sbr_deb.h index 324dea9..cb954ba 100644 --- a/libSBRdec/src/sbr_deb.h +++ b/libSBRdec/src/sbr_deb.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRdec/src/sbr_dec.cpp b/libSBRdec/src/sbr_dec.cpp index bd3cd10..1282338 100644 --- a/libSBRdec/src/sbr_dec.cpp +++ b/libSBRdec/src/sbr_dec.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -760,6 +760,8 @@ createSbrDec (SBR_CHANNEL * hSbrChannel, */ { int qmfErr; + /* Adapted QMF analysis post-twiddles for down-sampled HQ SBR */ + const UINT downSampledFlag = (downsampleFac==2) ? QMF_FLAG_DOWNSAMPLED : 0; qmfErr = qmfInitAnalysisFilterBank ( &hs->AnalysiscQMF, @@ -768,7 +770,7 @@ createSbrDec (SBR_CHANNEL * hSbrChannel, hHeaderData->freqBandData.lowSubband, hHeaderData->freqBandData.highSubband, hHeaderData->numberOfAnalysisBands, - qmfFlags & (~QMF_FLAG_KEEP_STATES) + (qmfFlags & (~QMF_FLAG_KEEP_STATES)) | downSampledFlag ); if (qmfErr != 0) { return SBRDEC_UNSUPPORTED_CONFIG; diff --git a/libSBRdec/src/sbr_dec.h b/libSBRdec/src/sbr_dec.h index 309327f..175e7b2 100644 --- a/libSBRdec/src/sbr_dec.h +++ b/libSBRdec/src/sbr_dec.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRdec/src/sbr_ram.cpp b/libSBRdec/src/sbr_ram.cpp index ee95e01..6ae941f 100644 --- a/libSBRdec/src/sbr_ram.cpp +++ b/libSBRdec/src/sbr_ram.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRdec/src/sbr_ram.h b/libSBRdec/src/sbr_ram.h index 5469e51..8fc2dae 100644 --- a/libSBRdec/src/sbr_ram.h +++ b/libSBRdec/src/sbr_ram.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRdec/src/sbr_rom.cpp b/libSBRdec/src/sbr_rom.cpp index 8520b14..e84c3cd 100644 --- a/libSBRdec/src/sbr_rom.cpp +++ b/libSBRdec/src/sbr_rom.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -110,6 +110,8 @@ const UCHAR FDK_sbrDecoder_sbr_start_freq_32[16] = {10, 12, 14, 15, 16, 17, 18, const UCHAR FDK_sbrDecoder_sbr_start_freq_40[16] = {12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 26, 28, 30, 32}; const UCHAR FDK_sbrDecoder_sbr_start_freq_44[16] = { 8, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 23, 25, 28, 32}; const UCHAR FDK_sbrDecoder_sbr_start_freq_48[16] = { 7, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20, 22, 24, 27, 31}; +const UCHAR FDK_sbrDecoder_sbr_start_freq_64[16] = { 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 19, 21, 23, 26, 30}; +const UCHAR FDK_sbrDecoder_sbr_start_freq_88[16] = { 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 18, 20, 23, 27, 31}; //@} diff --git a/libSBRdec/src/sbr_rom.h b/libSBRdec/src/sbr_rom.h index 912f7e4..c318870 100644 --- a/libSBRdec/src/sbr_rom.h +++ b/libSBRdec/src/sbr_rom.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -106,6 +106,8 @@ extern const UCHAR FDK_sbrDecoder_sbr_start_freq_32[16]; extern const UCHAR FDK_sbrDecoder_sbr_start_freq_40[16]; extern const UCHAR FDK_sbrDecoder_sbr_start_freq_44[16]; extern const UCHAR FDK_sbrDecoder_sbr_start_freq_48[16]; +extern const UCHAR FDK_sbrDecoder_sbr_start_freq_64[16]; +extern const UCHAR FDK_sbrDecoder_sbr_start_freq_88[16]; /* Low-Power-Profile Transposer diff --git a/libSBRdec/src/sbr_scale.h b/libSBRdec/src/sbr_scale.h index a98fc05..5fccd71 100644 --- a/libSBRdec/src/sbr_scale.h +++ b/libSBRdec/src/sbr_scale.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRdec/src/sbrdec_drc.cpp b/libSBRdec/src/sbrdec_drc.cpp index 7497b66..a834c0b 100644 --- a/libSBRdec/src/sbrdec_drc.cpp +++ b/libSBRdec/src/sbrdec_drc.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -127,8 +127,8 @@ void sbrDecoder_drcInitChannel ( hDrcData->currFact_exp = 1; hDrcData->nextFact_exp = 1; - hDrcData->numBandsCurr = 0; - hDrcData->numBandsNext = 0; + hDrcData->numBandsCurr = 1; + hDrcData->numBandsNext = 1; hDrcData->winSequenceCurr = 0; hDrcData->winSequenceNext = 0; @@ -490,9 +490,7 @@ void sbrDecoder_drcApply ( if (hDrcData == NULL) { return; } - if ( (hDrcData->enable == 0) - || ((hDrcData->numBandsCurr == 0) && (hDrcData->numBandsNext == 0)) - ) { + if (hDrcData->enable == 0) { return; /* Avoid changing the scaleFactor even though the processing is disabled. */ } diff --git a/libSBRdec/src/sbrdec_drc.h b/libSBRdec/src/sbrdec_drc.h index 14deff7..872c6a0 100644 --- a/libSBRdec/src/sbrdec_drc.h +++ b/libSBRdec/src/sbrdec_drc.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRdec/src/sbrdec_freq_sca.cpp b/libSBRdec/src/sbrdec_freq_sca.cpp index b877545..8adfbb1 100644 --- a/libSBRdec/src/sbrdec_freq_sca.cpp +++ b/libSBRdec/src/sbrdec_freq_sca.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -124,6 +124,13 @@ getStartBand(UINT fs, /*!< Output sampling frequency */ fsMapped = fs; switch (fsMapped) { + case 96000: + case 88200: + band = FDK_sbrDecoder_sbr_start_freq_88[startFreq]; + break; + case 64000: + band = FDK_sbrDecoder_sbr_start_freq_64[startFreq]; + break; case 48000: band = FDK_sbrDecoder_sbr_start_freq_48[startFreq]; break; diff --git a/libSBRdec/src/sbrdec_freq_sca.h b/libSBRdec/src/sbrdec_freq_sca.h index eebdd52..cfe4f0e 100644 --- a/libSBRdec/src/sbrdec_freq_sca.h +++ b/libSBRdec/src/sbrdec_freq_sca.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRdec/src/sbrdecoder.cpp b/libSBRdec/src/sbrdecoder.cpp index 192bdd2..26b2ea2 100644 --- a/libSBRdec/src/sbrdecoder.cpp +++ b/libSBRdec/src/sbrdecoder.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -83,7 +83,7 @@ amm-info@iis.fraunhofer.de /*! \file - \brief SBR decoder frontend + \brief SBR decoder frontend This module provides a frontend to the SBR decoder. The function openSBR() is called for initialization. The function sbrDecoder_Apply() is called for each frame. sbr_Apply() will call the required functions to decode the raw SBR data (provided by env_extr.cpp), to decode the envelope data and noise floor levels [decodeSbrData()], @@ -136,7 +136,7 @@ amm-info@iis.fraunhofer.de /* Decoder library info */ #define SBRDECODER_LIB_VL0 2 -#define SBRDECODER_LIB_VL1 1 +#define SBRDECODER_LIB_VL1 2 #define SBRDECODER_LIB_VL2 3 #define SBRDECODER_LIB_TITLE "SBR Decoder" #define SBRDECODER_LIB_BUILD_DATE __DATE__ @@ -217,14 +217,14 @@ SBR_ERROR sbrDecoder_ResetElement ( /* Check in/out samplerates */ if ( sampleRateIn < 6400 - || sampleRateIn > 24000 + || sampleRateIn > 48000 ) { sbrError = SBRDEC_UNSUPPORTED_CONFIG; goto bail; } - if ( sampleRateOut > 48000 ) + if ( sampleRateOut > 96000 ) { sbrError = SBRDEC_UNSUPPORTED_CONFIG; goto bail; @@ -552,7 +552,7 @@ bail: sbrDecoder_DestroyElement( self, elementIndex ); } else if (self->pSbrElement[elementIndex] != NULL) { /* Set error flag to trigger concealment */ - self->pSbrElement[elementIndex]->frameErrorFlag[self->pSbrElement[elementIndex]->useFrameSlot] = 1;; + self->pSbrElement[elementIndex]->frameErrorFlag[self->pSbrElement[elementIndex]->useFrameSlot] = 1; } } @@ -731,6 +731,12 @@ SBR_ERROR sbrDecoder_SetParam (HANDLE_SBRDECODER self, case SBR_BS_INTERRUPTION: { int elementIndex; + + if (self == NULL) { + errorStatus = SBRDEC_NOT_INITIALIZED; + break; + } + /* Loop over SBR elements */ for (elementIndex = 0; elementIndex < self->numSbrElements; elementIndex++) { @@ -878,7 +884,7 @@ void sbrDecoder_drcDisable ( HANDLE_SBRDECODER self, pSbrDrcChannelData = sbrDecoder_drcGetChannel( self, ch ); if ( pSbrDrcChannelData != NULL ) { - pSbrDrcChannelData->enable = 0; + sbrDecoder_drcInitChannel( pSbrDrcChannelData ); } } diff --git a/libSBRdec/src/transcendent.h b/libSBRdec/src/transcendent.h index f0ee21e..ad88bc9 100644 --- a/libSBRdec/src/transcendent.h +++ b/libSBRdec/src/transcendent.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRenc/include/sbr_encoder.h b/libSBRenc/include/sbr_encoder.h index 992c20c..93dc46d 100644 --- a/libSBRenc/include/sbr_encoder.h +++ b/libSBRenc/include/sbr_encoder.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -101,6 +101,14 @@ amm-info@iis.fraunhofer.de #define MAX_CODEC_FRAME_RATIO 2 #define MAX_PAYLOAD_SIZE 256 +typedef enum codecType +{ + CODEC_AAC=0, + CODEC_AACLD=1, + CODEC_UNSPECIFIED=99 +} CODEC_TYPE; + + typedef struct { INT bitRate; @@ -129,10 +137,11 @@ enum typedef struct { + CODEC_TYPE coreCoder; /*!< LC or ELD */ UINT bitrateFrom; /*!< inclusive */ UINT bitrateTo; /*!< exclusive */ - USHORT sampleRate; /*!< */ + UINT sampleRate; /*!< */ UCHAR numChannels; /*!< */ UCHAR startFreq; /*!< bs_start_freq */ @@ -158,6 +167,7 @@ typedef struct sbrConfiguration INT crcSbr; /*!< Flag: usage of SBR-CRC. */ INT dynBwSupported; /*!< Flag: support for dynamic bandwidth in this combination. */ INT parametricCoding; /*!< Flag: usage of parametric coding tool. */ + INT downSampleFactor; /*!< Sampling rate relation between the SBR and the core encoder. */ int freq_res_fixfix[3]; /*!< Frequency resolution of envelopes in frame class FIXFIX 0=1 Env; 1=2 Env; 2=4 Env; */ /* @@ -194,7 +204,6 @@ typedef struct sbrConfiguration INT useSaPan; /*!< Flag: usage of SAPAN stereo. */ INT dynBwEnabled; /*!< Flag: usage of dynamic bandwidth. */ INT bParametricStereo; /*!< Flag: usage of parametric stereo coding tool. */ - INT bDownSampledSbr; /*!< Signal downsampled SBR is used. */ /* header_extra1 configuration @@ -214,7 +223,7 @@ typedef struct sbrConfiguration UCHAR init_amp_res_FF; } sbrConfiguration, *sbrConfigurationPtr ; -typedef struct +typedef struct SBR_CONFIG_DATA { UINT sbrSyntaxFlags; /**< SBR syntax flags derived from AOT. */ INT nChannels; /**< Number of channels. */ @@ -240,9 +249,7 @@ typedef struct INT xposCtrlSwitch; /**< Flag indicates whether to switch xpos ctrl on the fly. */ INT switchTransposers; /**< Flag indicates whether to switch xpos on the fly . */ UCHAR initAmpResFF; -} SBR_CONFIG_DATA; - -typedef SBR_CONFIG_DATA *HANDLE_SBR_CONFIG_DATA; +} SBR_CONFIG_DATA, *HANDLE_SBR_CONFIG_DATA; typedef struct { MP4_ELEMENT_ID elType; @@ -275,15 +282,26 @@ INT sbrEncoder_Open( ); /** - * \brief get closest working bit rate to specified desired bit rate for a single SBR element - * \param bitRate the desired target bit rate - * \param numChannels the amount of audio channels - * \param coreSampleRate the sample rate of the core coder - * \param the current Audio Object Type - * \return closest working bit rate to bitRate value + * \brief Get closest working bitrate to specified desired + * bitrate for a single SBR element. + * \param bitRate The desired target bit rate + * \param numChannels The amount of audio channels + * \param coreSampleRate The sample rate of the core coder + * \param aot The current Audio Object Type + * \return Closest working bit rate to bitRate value */ UINT sbrEncoder_LimitBitRate(UINT bitRate, UINT numChannels, UINT coreSampleRate, AUDIO_OBJECT_TYPE aot); + +/** + * \brief Check whether downsampled SBR single rate is possible + * with given audio object type. + * \param aot The Audio object type. + * \return 0 when downsampled SBR is not possible, + * 1 when downsampled SBR is possible. + */ +UINT sbrEncoder_IsSingleRatePossible(AUDIO_OBJECT_TYPE aot); + /** * \brief Initialize SBR Encoder instance. * \param phSbrEncoder Pointer to a SBR Encoder instance. @@ -294,26 +312,33 @@ UINT sbrEncoder_LimitBitRate(UINT bitRate, UINT numChannels, UINT coreSampleRate * \param bufferOffset Returns the offset for the audio input data in order to do delay balancing. * \param numChannels Input: Encoder input channels. output: core encoder channels. * \param sampleRate Input: Encoder samplerate. output core encoder samplerate. + * \param downSampleFactor Input: Relation between SBR and core coder sampling rate; * \param frameLength Input: Encoder frameLength. output core encoder frameLength. * \param aot Input: Desired AOT. output AOT to be used after parameter checking. * \param delay Input: core encoder delay. Output: total delay because of SBR. * \param transformFactor The core encoder transform factor (blockswitching). + * \param headerPeriod Repetition rate of the SBR header: + * - (-1) means intern configuration. + * - (1-10) corresponds to header repetition rate in frames. * \return 0 on success, and non-zero if failed. */ -INT sbrEncoder_Init( HANDLE_SBR_ENCODER hSbrEncoder, - SBR_ELEMENT_INFO elInfo[(6)], - int noElements, - INT_PCM *inputBuffer, - INT *bandwidth, - INT *bufferOffset, - INT *numChannels, - INT *sampleRate, - INT *frameLength, - AUDIO_OBJECT_TYPE *aot, - int *delay, - int transformFactor, - ULONG statesInitFlag - ); +INT sbrEncoder_Init( + HANDLE_SBR_ENCODER hSbrEncoder, + SBR_ELEMENT_INFO elInfo[(8)], + int noElements, + INT_PCM *inputBuffer, + INT *coreBandwidth, + INT *inputBufferOffset, + INT *numChannels, + INT *sampleRate, + UINT *downSampleFactor, + INT *frameLength, + AUDIO_OBJECT_TYPE aot, + int *delay, + int transformFactor, + const int headerPeriod, + ULONG statesInitFlag + ); /** * \brief Do delay line buffers housekeeping. To be called after each encoded audio frame. @@ -344,8 +369,8 @@ void sbrEncoder_Close(HANDLE_SBR_ENCODER *phEbrEncoder); INT sbrEncoder_EncodeFrame(HANDLE_SBR_ENCODER hEnvEncoder, INT_PCM *samples, UINT timeInStride, - UINT sbrDataBits[(6)], - UCHAR sbrData[(6)][MAX_PAYLOAD_SIZE] + UINT sbrDataBits[(8)], + UCHAR sbrData[(8)][MAX_PAYLOAD_SIZE] ); /** @@ -356,7 +381,7 @@ INT sbrEncoder_EncodeFrame(HANDLE_SBR_ENCODER hEnvEncoder, * \param fSendHeaders Flag indicating that the SBR encoder should send more headers in the SBR payload or not. * \return void */ -void sbrEncoder_GetHeader(SBR_ENCODER *sbrEncoder, +void sbrEncoder_GetHeader(HANDLE_SBR_ENCODER sbrEncoder, HANDLE_FDK_BITSTREAM hBs, INT element_index, int fSendHeaders); diff --git a/libSBRenc/src/bit_sbr.cpp b/libSBRenc/src/bit_sbr.cpp index 734a8aa..963aeff 100644 --- a/libSBRenc/src/bit_sbr.cpp +++ b/libSBRenc/src/bit_sbr.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRenc/src/bit_sbr.h b/libSBRenc/src/bit_sbr.h index bf170c1..1ce2c1e 100644 --- a/libSBRenc/src/bit_sbr.h +++ b/libSBRenc/src/bit_sbr.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -125,11 +125,6 @@ struct SBR_HEADER_DATA INT freqScale; /* - element of sbrdata - */ - SR_MODE sampleRateMode; - - /* element of channelpairelement */ INT coupling; diff --git a/libSBRenc/src/cmondata.h b/libSBRenc/src/cmondata.h index c3be1d7..32e6993 100644 --- a/libSBRenc/src/cmondata.h +++ b/libSBRenc/src/cmondata.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRenc/src/code_env.cpp b/libSBRenc/src/code_env.cpp index 7c169e6..e1a28d5 100644 --- a/libSBRenc/src/code_env.cpp +++ b/libSBRenc/src/code_env.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRenc/src/code_env.h b/libSBRenc/src/code_env.h index dd2b9ae..50a365e 100644 --- a/libSBRenc/src/code_env.h +++ b/libSBRenc/src/code_env.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRenc/src/env_bit.cpp b/libSBRenc/src/env_bit.cpp index 55c6967..ea31183 100644 --- a/libSBRenc/src/env_bit.cpp +++ b/libSBRenc/src/env_bit.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRenc/src/env_bit.h b/libSBRenc/src/env_bit.h index 38578f8..038a32a 100644 --- a/libSBRenc/src/env_bit.h +++ b/libSBRenc/src/env_bit.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRenc/src/env_est.cpp b/libSBRenc/src/env_est.cpp index a9a7881..929f229 100644 --- a/libSBRenc/src/env_est.cpp +++ b/libSBRenc/src/env_est.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -129,9 +129,6 @@ FDKsbrEnc_getEnergyFromCplxQmfData(FIXP_DBL **RESTRICT energyValues,/*!< the res /* Get Scratch buffer */ C_ALLOC_SCRATCH_START(tmpNrg, FIXP_DBL, QMF_CHANNELS*QMF_MAX_TIME_SLOTS/2); - FDK_ASSERT(numberBands <= QMF_CHANNELS); - FDK_ASSERT(numberCols <= QMF_MAX_TIME_SLOTS); - /* Get max possible scaling of QMF data */ scale = DFRACT_BITS; for (k=0; k<numberCols; k++) { @@ -817,22 +814,22 @@ calculateSbrEnvelope (FIXP_DBL **RESTRICT YBufferLeft, /*! energy buffer left * } /* ld64 to integer conversion */ - nrgLeft = fixMin(fixMax(nrgLeft,FL2FXCONST_DBL(0.0f)),FL2FXCONST_DBL(0.5f)); + nrgLeft = fixMin(fixMax(nrgLeft,FL2FXCONST_DBL(0.0f)),(FL2FXCONST_DBL(0.5f)>>oneBitLess)); nrgLeft = (FIXP_DBL)(LONG)nrgLeft >> (DFRACT_BITS-1-LD_DATA_SHIFT-1-oneBitLess-1); sfb_nrgLeft[m] = ((INT)nrgLeft+1)>>1; /* rounding */ if (stereoMode == SBR_COUPLING) { FIXP_DBL scaleFract; + int sc0, sc1; - if (nrgRight != FL2FXCONST_DBL(0.0f)) { - int sc0 = CountLeadingBits(nrgLeft2); - int sc1 = CountLeadingBits(nrgRight); + nrgLeft2 = fixMax((FIXP_DBL)0x1, nrgLeft2); + nrgRight = fixMax((FIXP_DBL)0x1, nrgRight); - scaleFract = ((FIXP_DBL)(sc0-sc1)) << (DFRACT_BITS-1-LD_DATA_SHIFT); /* scale value in ld64 representation */ - nrgRight = CalcLdData(nrgLeft2<<sc0) - CalcLdData(nrgRight<<sc1) - scaleFract; - } - else - nrgRight = FL2FXCONST_DBL(0.5f); /* ld64(4294967296.0f) */ + sc0 = CountLeadingBits(nrgLeft2); + sc1 = CountLeadingBits(nrgRight); + + scaleFract = ((FIXP_DBL)(sc0-sc1)) << (DFRACT_BITS-1-LD_DATA_SHIFT); /* scale value in ld64 representation */ + nrgRight = CalcLdData(nrgLeft2<<sc0) - CalcLdData(nrgRight<<sc1) - scaleFract; /* ld64 to integer conversion */ nrgRight = (FIXP_DBL)(LONG)(nrgRight) >> (DFRACT_BITS-1-LD_DATA_SHIFT-1-oneBitLess); diff --git a/libSBRenc/src/env_est.h b/libSBRenc/src/env_est.h index 4c30a50..5e632a4 100644 --- a/libSBRenc/src/env_est.h +++ b/libSBRenc/src/env_est.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRenc/src/fram_gen.cpp b/libSBRenc/src/fram_gen.cpp index afef6e4..86c3c81 100644 --- a/libSBRenc/src/fram_gen.cpp +++ b/libSBRenc/src/fram_gen.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRenc/src/fram_gen.h b/libSBRenc/src/fram_gen.h index fe4b262..3769266 100644 --- a/libSBRenc/src/fram_gen.h +++ b/libSBRenc/src/fram_gen.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRenc/src/invf_est.cpp b/libSBRenc/src/invf_est.cpp index 788ab7c..32df6d9 100644 --- a/libSBRenc/src/invf_est.cpp +++ b/libSBRenc/src/invf_est.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRenc/src/invf_est.h b/libSBRenc/src/invf_est.h index 7c66cf6..2bd2a78 100644 --- a/libSBRenc/src/invf_est.h +++ b/libSBRenc/src/invf_est.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRenc/src/mh_det.cpp b/libSBRenc/src/mh_det.cpp index a7fa208..73d1b8b 100644 --- a/libSBRenc/src/mh_det.cpp +++ b/libSBRenc/src/mh_det.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -1244,25 +1244,38 @@ FDKsbrEnc_InitSbrMissingHarmonicsDetector ( FDK_ASSERT(totNoEst <= MAX_NO_OF_ESTIMATES); - switch(frameSize){ - case 2048: - hs->transientPosOffset = FRAME_MIDDLE_SLOT_2048; - hs->timeSlots = NUMBER_TIME_SLOTS_2048; - break; - case 1920: - hs->transientPosOffset = FRAME_MIDDLE_SLOT_1920; - hs->timeSlots = NUMBER_TIME_SLOTS_1920; - break; - case 1024: - hs->transientPosOffset = FRAME_MIDDLE_SLOT_512LD; - hs->timeSlots = 16; - break; - case 960: - hs->transientPosOffset = FRAME_MIDDLE_SLOT_512LD; - hs->timeSlots = 15; - break; - default: - return -1; + if (sbrSyntaxFlags & SBR_SYNTAX_LOW_DELAY) + { + switch(frameSize){ + case 1024: + case 512: + hs->transientPosOffset = FRAME_MIDDLE_SLOT_512LD; + hs->timeSlots = 16; + break; + case 960: + case 480: + hs->transientPosOffset = FRAME_MIDDLE_SLOT_512LD; + hs->timeSlots = 15; + break; + default: + return -1; + } + } else + { + switch(frameSize){ + case 2048: + case 1024: + hs->transientPosOffset = FRAME_MIDDLE_SLOT_2048; + hs->timeSlots = NUMBER_TIME_SLOTS_2048; + break; + case 1920: + case 960: + hs->transientPosOffset = FRAME_MIDDLE_SLOT_1920; + hs->timeSlots = NUMBER_TIME_SLOTS_1920; + break; + default: + return -1; + } } if (sbrSyntaxFlags & SBR_SYNTAX_LOW_DELAY) { diff --git a/libSBRenc/src/mh_det.h b/libSBRenc/src/mh_det.h index ac62532..74c2a99 100644 --- a/libSBRenc/src/mh_det.h +++ b/libSBRenc/src/mh_det.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRenc/src/nf_est.cpp b/libSBRenc/src/nf_est.cpp index 62bcc79..7a3c022 100644 --- a/libSBRenc/src/nf_est.cpp +++ b/libSBRenc/src/nf_est.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -102,7 +102,7 @@ static const FIXP_DBL QuantOffset = (INT)0xfc000000; /* ld64(0.25) */ #define max(a,b) ( a > b ? a:b) #endif -#define NOISE_FLOOR_OFFSET_SCALING (3) +#define NOISE_FLOOR_OFFSET_SCALING (4) @@ -484,11 +484,13 @@ FDKsbrEnc_InitSbrNoiseFloorEstimate (HANDLE_SBR_NOISE_FLOOR_ESTIMATE h_sbrNoise tmp = ((FIXP_DBL)MAXVAL_DBL)>>NOISE_FLOOR_OFFSET_SCALING; } else { - FDK_ASSERT(noiseFloorOffset<=8); /* because of NOISE_FLOOR_OFFSET_SCALING */ + /* noiseFloorOffset has to be smaller than 12, because + the result of the calculation below must be smaller than 1: + (2^(noiseFloorOffset/3))*2^4<1 */ + FDK_ASSERT(noiseFloorOffset<12); - /* Assumes the noise floor offset in tuning table are in q31 */ - /* Currently the table contains only 0 for noise floor offset */ - /* Change the qformat here when non-zero values would be filled */ + /* Assumes the noise floor offset in tuning table are in q31 */ + /* Change the qformat here when non-zero values would be filled */ exp = fDivNorm((FIXP_DBL)noiseFloorOffset, 3, &qexp); tmp = fPow(2, DFRACT_BITS-1, exp, qexp, &qtmp); tmp = scaleValue(tmp, qtmp-NOISE_FLOOR_OFFSET_SCALING); @@ -527,24 +529,30 @@ FDKsbrEnc_resetSbrNoiseFloorEstimate (HANDLE_SBR_NOISE_FLOOR_ESTIMATE h_sbrNoise h_sbrNoiseFloorEstimate->noNoiseBands = 1; } else{ - /* - * Calculate number of noise bands 1,2 or 3 bands/octave + /* + * Calculate number of noise bands 1,2 or 3 bands/octave ********************************************************/ FIXP_DBL tmp, ratio, lg2; - INT ratio_e, qlg2; + INT ratio_e, qlg2, nNoiseBands; ratio = fDivNorm(k2, kx, &ratio_e); lg2 = fLog2(ratio, ratio_e, &qlg2); tmp = fMult((FIXP_DBL)(h_sbrNoiseFloorEstimate->noiseBands<<24), lg2); tmp = scaleValue(tmp, qlg2-23); - h_sbrNoiseFloorEstimate->noNoiseBands = (INT)((tmp + (FIXP_DBL)1) >> 1); + nNoiseBands = (INT)((tmp + (FIXP_DBL)1) >> 1); + + + if (nNoiseBands > MAX_NUM_NOISE_COEFFS ) { + nNoiseBands = MAX_NUM_NOISE_COEFFS; + } + + if( nNoiseBands == 0 ) { + nNoiseBands = 1; + } - if (h_sbrNoiseFloorEstimate->noNoiseBands > MAX_NUM_NOISE_COEFFS) - h_sbrNoiseFloorEstimate->noNoiseBands = MAX_NUM_NOISE_COEFFS; + h_sbrNoiseFloorEstimate->noNoiseBands = nNoiseBands; - if( h_sbrNoiseFloorEstimate->noNoiseBands==0) - h_sbrNoiseFloorEstimate->noNoiseBands=1; } diff --git a/libSBRenc/src/nf_est.h b/libSBRenc/src/nf_est.h index 084899a..d407274 100644 --- a/libSBRenc/src/nf_est.h +++ b/libSBRenc/src/nf_est.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRenc/src/ps_bitenc.cpp b/libSBRenc/src/ps_bitenc.cpp index 419d989..b1fe12e 100644 --- a/libSBRenc/src/ps_bitenc.cpp +++ b/libSBRenc/src/ps_bitenc.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRenc/src/ps_bitenc.h b/libSBRenc/src/ps_bitenc.h index cfc5af7..e98fe58 100644 --- a/libSBRenc/src/ps_bitenc.h +++ b/libSBRenc/src/ps_bitenc.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRenc/src/ps_const.h b/libSBRenc/src/ps_const.h index 08101e2..633d210 100644 --- a/libSBRenc/src/ps_const.h +++ b/libSBRenc/src/ps_const.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRenc/src/ps_encode.cpp b/libSBRenc/src/ps_encode.cpp index e60f83d..2ae2788 100644 --- a/libSBRenc/src/ps_encode.cpp +++ b/libSBRenc/src/ps_encode.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRenc/src/ps_encode.h b/libSBRenc/src/ps_encode.h index a12f7c6..f728d47 100644 --- a/libSBRenc/src/ps_encode.h +++ b/libSBRenc/src/ps_encode.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRenc/src/ps_main.cpp b/libSBRenc/src/ps_main.cpp index bbab25a..ab183e2 100644 --- a/libSBRenc/src/ps_main.cpp +++ b/libSBRenc/src/ps_main.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -227,6 +227,8 @@ FDK_PSENC_ERROR PSEnc_Init( /* clear bs buffer */ FDKmemclear(hParametricStereo->psOut, sizeof(hParametricStereo->psOut)); + hParametricStereo->psOut[0].enablePSHeader = 1; /* write ps header in first frame */ + /* clear scaling buffer */ FDKmemclear(hParametricStereo->dynBandScale, sizeof(UCHAR)*PS_MAX_BANDS); FDKmemclear(hParametricStereo->maxBandValue, sizeof(FIXP_QMF)*PS_MAX_BANDS); @@ -313,7 +315,7 @@ static FDK_PSENC_ERROR DownmixPSQmfData( } else { int n, k; - C_ALLOC_SCRATCH_START(pWorkBuffer, FIXP_QMF, QMF_CHANNELS*2); + C_AALLOC_SCRATCH_START(pWorkBuffer, FIXP_QMF, 2*QMF_CHANNELS) /* define scalings */ int dynQmfScale = fixMax(0, hParametricStereo->dmxScale-1); /* scale one bit more for addition of left and right */ @@ -398,8 +400,7 @@ static FDK_PSENC_ERROR DownmixPSQmfData( *qmfScale = -downmixScale + 7; - C_ALLOC_SCRATCH_END(pWorkBuffer, FIXP_QMF, QMF_CHANNELS*2); - + C_AALLOC_SCRATCH_END(pWorkBuffer, FIXP_QMF, 2*QMF_CHANNELS) { const INT noQmfSlots2 = hParametricStereo->noQmfSlots>>1; @@ -473,10 +474,9 @@ FDK_PSENC_ERROR FDKsbrEnc_PSEnc_ParametricStereoProcessing( ) { FDK_PSENC_ERROR error = PSENC_OK; - INT noQmfBands = hParametricStereo->noQmfBands; INT psQmfScale[MAX_PS_CHANNELS] = {0}; int psCh, i; - C_ALLOC_SCRATCH_START(pWorkBuffer, FIXP_DBL, QMF_CHANNELS*4); + C_AALLOC_SCRATCH_START(pWorkBuffer, FIXP_QMF, 4*QMF_CHANNELS) for (psCh = 0; psCh<MAX_PS_CHANNELS; psCh ++) { @@ -505,7 +505,7 @@ FDK_PSENC_ERROR FDKsbrEnc_PSEnc_ParametricStereoProcessing( } /* for psCh */ - C_ALLOC_SCRATCH_END(pWorkBuffer, FIXP_DBL, QMF_CHANNELS*4); + C_AALLOC_SCRATCH_END(pWorkBuffer, FIXP_QMF, 4*QMF_CHANNELS) /* find best scaling in new QMF and Hybrid data */ psFindBestScaling( hParametricStereo, diff --git a/libSBRenc/src/ps_main.h b/libSBRenc/src/ps_main.h index 6180299..21b32ff 100644 --- a/libSBRenc/src/ps_main.h +++ b/libSBRenc/src/ps_main.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRenc/src/resampler.cpp b/libSBRenc/src/resampler.cpp index e8ab263..4adb243 100644 --- a/libSBRenc/src/resampler.cpp +++ b/libSBRenc/src/resampler.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRenc/src/resampler.h b/libSBRenc/src/resampler.h index 29e170c..0192970 100644 --- a/libSBRenc/src/resampler.h +++ b/libSBRenc/src/resampler.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRenc/src/sbr.h b/libSBRenc/src/sbr.h index 13caadd..c74ad2a 100644 --- a/libSBRenc/src/sbr.h +++ b/libSBRenc/src/sbr.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -105,7 +105,8 @@ amm-info@iis.fraunhofer.de /* SBR bitstream delay */ #define DELAY_FRAMES 2 -typedef struct { + +typedef struct SBR_CHANNEL { struct ENV_CHANNEL hEnvChannel; //INT_PCM *pDSOutBuffer; /**< Pointer to downsampled audio output of SBR encoder */ DOWNSAMPLER downSampler; @@ -113,7 +114,7 @@ typedef struct { } SBR_CHANNEL; typedef SBR_CHANNEL* HANDLE_SBR_CHANNEL; -typedef struct { +typedef struct SBR_ELEMENT { HANDLE_SBR_CHANNEL sbrChannel[2]; QMF_FILTER_BANK *hQmfAnalysis[2]; SBR_CONFIG_DATA sbrConfigData; @@ -126,14 +127,13 @@ typedef struct { UCHAR payloadDelayLine[1+DELAY_FRAMES][MAX_PAYLOAD_SIZE]; UINT payloadDelayLineSize[1+DELAY_FRAMES]; /* Sizes in bits */ -} SBR_ELEMENT; -typedef SBR_ELEMENT* HANDLE_SBR_ELEMENT; +} SBR_ELEMENT, *HANDLE_SBR_ELEMENT; -struct SBR_ENCODER +typedef struct SBR_ENCODER { - HANDLE_SBR_ELEMENT sbrElement[(6)]; - HANDLE_SBR_CHANNEL pSbrChannel[(6)]; - QMF_FILTER_BANK QmfAnalysis[(6)]; + HANDLE_SBR_ELEMENT sbrElement[(8)]; + HANDLE_SBR_CHANNEL pSbrChannel[(8)]; + QMF_FILTER_BANK QmfAnalysis[(8)]; DOWNSAMPLER lfeDownSampler; int lfeChIdx; /* -1 default for no lfe, else assign channel index */ int noElements; /* Number of elements */ @@ -142,6 +142,7 @@ struct SBR_ENCODER int bufferOffset; /* Offset for SBR parameter extraction in time domain input buffer. */ int downsampledOffset; /* Offset of downsampled/mixed output for core encoder. */ int downmixSize; /* Size in samples of downsampled/mixed output for core encoder. */ + INT downSampleFactor; /* Sampling rate relation between the SBR and the core encoder. */ int fTimeDomainDownsampling; /* Flag signalling time domain downsampling instead of QMF downsampling. */ int nBitstrDelay; /* Amount of SBR frames to be delayed in bitstream domain. */ INT estimateBitrate; /* estimate bitrate of SBR encoder */ @@ -158,7 +159,8 @@ struct SBR_ENCODER INT maxChannels; INT supportPS; -} ; + +} SBR_ENCODER; #endif /* __SBR_H */ diff --git a/libSBRenc/src/sbr_def.h b/libSBRenc/src/sbr_def.h index 1d99f7f..8b7cfc6 100644 --- a/libSBRenc/src/sbr_def.h +++ b/libSBRenc/src/sbr_def.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -270,13 +270,6 @@ INVF_MODE; typedef enum { - SINGLE_RATE, - DUAL_RATE -} -SR_MODE; - -typedef enum -{ FREQ_RES_LOW = 0, FREQ_RES_HIGH } diff --git a/libSBRenc/src/sbr_encoder.cpp b/libSBRenc/src/sbr_encoder.cpp index e991199..3e95d6b 100644 --- a/libSBRenc/src/sbr_encoder.cpp +++ b/libSBRenc/src/sbr_encoder.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -83,7 +83,7 @@ amm-info@iis.fraunhofer.de /*************************** Fraunhofer IIS FDK Tools *********************** - Author(s): Andreas Ehret + Author(s): Andreas Ehret, Tobias Chalupka Description: SBR encoder top level processing. ******************************************************************************/ @@ -102,8 +102,8 @@ amm-info@iis.fraunhofer.de #include "ps_main.h" #define SBRENCODER_LIB_VL0 3 -#define SBRENCODER_LIB_VL1 2 -#define SBRENCODER_LIB_VL2 2 +#define SBRENCODER_LIB_VL1 3 +#define SBRENCODER_LIB_VL2 4 @@ -119,34 +119,30 @@ amm-info@iis.fraunhofer.de (core2sbr delay ) ds (read, core and ds area) */ -#define DOWN_SMPL_FAC (2) +#define SFB(dwnsmp) (32 << (dwnsmp-1)) /* SBR Frequency bands: 64 for dual-rate, 32 for single-rate */ +#define STS(fl) (((fl)==1024)?32:30) /* SBR Time Slots: 32 for core frame length 1024, 30 for core frame length 960 */ -#define SFL(fl) (fl*DOWN_SMPL_FAC) /* SBR frame length (hardcoded to downsample factor of 2) */ -#define STS(fl) (SFL(fl)/64) /* SBR Time Slots */ - -#define DELAY_QMF_ANA (640 - 64) /* Full bandwidth */ -#define DELAY_QMF_ANAELD (32) -#define DELAY_HYB_ANA (10*64) /* + 0.5 */ -#define DELAY_HYB_SYN (6*64 - 32) -#define DELAY_QMF_SYNELD (32) -#define DELAY_DEC_QMF (6*64) /* Decoder QMF overlap */ -#define DELAY_QMF_SYN (2) /* NO_POLY/2 */ -#define DELAY_QMF_DS (32) /* QMF synthesis for downsampled time signal */ +#define DELAY_QMF_ANA(dwnsmp) ((320<<((dwnsmp)-1)) - (32<<((dwnsmp)-1))) /* Full bandwidth */ +#define DELAY_HYB_ANA (10*64) /* + 0.5 */ /* */ +#define DELAY_HYB_SYN (6*64 - 32) /* */ +#define DELAY_QMF_POSTPROC(dwnsmp) (32*(dwnsmp)) /* QMF postprocessing delay */ +#define DELAY_DEC_QMF(dwnsmp) (6 * SFB(dwnsmp) ) /* Decoder QMF overlap */ +#define DELAY_QMF_SYN (2) /* NO_POLY/2=2.5, rounded down to 2 */ +#define DELAY_QMF_DS (32) /* QMF synthesis for downsampled time signal */ /* Delay in QMF paths */ -#define DELAY_SBR(fl) (DELAY_QMF_ANA + (64*STS(fl)-1) + DELAY_QMF_SYN) -#define DELAY_PS(fl) (DELAY_QMF_ANA + DELAY_HYB_ANA + DELAY_DEC_QMF + (64*STS(fl)-1) + DELAY_HYB_SYN + DELAY_QMF_SYN) -#define DELAY_ELDSBR(fl) (DELAY_QMF_ANAELD + (((fl)+((fl)/2))*2 - 1) + DELAY_QMF_SYNELD) +#define DELAY_SBR(fl,dwnsmp) (DELAY_QMF_ANA(dwnsmp) + (SFB(dwnsmp)*STS(fl) - 1) + DELAY_QMF_SYN) +#define DELAY_PS(fl,dwnsmp) (DELAY_QMF_ANA(dwnsmp) + DELAY_HYB_ANA + DELAY_DEC_QMF(dwnsmp) + (SFB(dwnsmp)*STS(fl)-1) + DELAY_HYB_SYN + DELAY_QMF_SYN) +#define DELAY_ELDSBR(fl,dwnsmp) ( ( ((fl)/2)*(dwnsmp) ) - 1 + DELAY_QMF_POSTPROC(dwnsmp) ) /* Delay differences for SBR and SBR+PS */ - #define MAX_DS_FILTER_DELAY (34) /* the additional max downsampler filter delay (source fs) */ -#define DELAY_AAC2SBR(fl) ((/*RESAMPLER +*/ /*(DELAY_AAC(fl)*2) + */ DELAY_QMF_ANA + DELAY_DEC_QMF + DELAY_QMF_SYN) - DELAY_SBR(fl)) /* 1537 */ -#define DELAY_ELD2SBR(fl) ((/*RESAMPLER +*/ /*(DELAY_ELD(fl)*2) + */ DELAY_QMF_ANAELD + DELAY_QMF_SYNELD) - DELAY_ELDSBR(fl)) - -#define DELAY_AAC2PS(fl) ((DELAY_QMF_ANA + DELAY_QMF_DS + /*(DELAY_AAC(fl)*2)*/ + DELAY_QMF_ANA + DELAY_DEC_QMF + DELAY_HYB_SYN + DELAY_QMF_SYN) - DELAY_PS(fl)) /* 2048 - 463*2 */ +#define MAX_DS_FILTER_DELAY (5) /* the additional max downsampler filter delay (source fs) */ +#define DELAY_AAC2SBR(fl,dwnsmp) ((DELAY_QMF_ANA(dwnsmp) + DELAY_DEC_QMF(dwnsmp) + DELAY_QMF_SYN) - DELAY_SBR((fl),(dwnsmp))) +#define DELAY_ELD2SBR(fl,dwnsmp) ((DELAY_QMF_POSTPROC(dwnsmp)) - DELAY_ELDSBR(fl,dwnsmp)) +#define DELAY_AAC2PS(fl,dwnsmp) ((DELAY_QMF_ANA(dwnsmp) + DELAY_QMF_DS + /*(DELAY_AAC(fl)*2) + */ DELAY_QMF_ANA(dwnsmp) + DELAY_DEC_QMF(dwnsmp) + DELAY_HYB_SYN + DELAY_QMF_SYN) - DELAY_PS(fl,dwnsmp)) /* 2048 - 463*2 */ -/* Assumption: that the sample delay resulting of of DELAY_AAC2PS is always smaller than the sample delay implied by DELAY_AAC2SBR */ -#define MAX_SAMPLE_DELAY (DELAY_AAC2SBR(1024) + MAX_DS_FILTER_DELAY) +/* Assumption: The sample delay resulting of of DELAY_AAC2PS is always smaller than the sample delay implied by DELAY_AAC2SBR */ +#define MAX_SAMPLE_DELAY (DELAY_AAC2SBR(1024,2) + MAX_DS_FILTER_DELAY) /* maximum delay: frame length of 1024 and dual-rate sbr */ /***************************************************************************/ @@ -172,41 +168,39 @@ getSbrTuningTableIndex(UINT bitrate, /*! the total bitrate in bits/sec */ UINT *pBitRateClosest ) { - int i, paramSetTop, bitRateClosestLowerIndex=-1, bitRateClosestUpperIndex=-1, found = 0; + int i, bitRateClosestLowerIndex=-1, bitRateClosestUpperIndex=-1, found = 0; UINT bitRateClosestUpper = 0, bitRateClosestLower=DISTANCE_CEIL_VALUE; + int isforThisCodec=0; - FDK_ASSERT(SBRENC_TUNING_SIZE == sizeof(sbrTuningTable)/sizeof(sbrTuningTable[0])); - - if (core == AOT_ER_AAC_ELD) { - paramSetTop = SBRENC_TUNING_SIZE; - i = SBRENC_AACLC_TUNING_SIZE; - } else { - paramSetTop = SBRENC_AACLC_TUNING_SIZE; - i = 0; - } + #define isForThisCore(i) \ + ( ( sbrTuningTable[i].coreCoder == CODEC_AACLD && core == AOT_ER_AAC_ELD ) || \ + ( sbrTuningTable[i].coreCoder == CODEC_AAC && core != AOT_ER_AAC_ELD ) ) - for (; i < paramSetTop ; i++) { - if ( numChannels == sbrTuningTable [i].numChannels - && sampleRate == sbrTuningTable [i].sampleRate ) + for (i=0; i < sbrTuningTableSize ; i++) { + if ( isForThisCore(i) ) /* tuning table is for this core codec */ { - found = 1; - if ((bitrate >= sbrTuningTable [i].bitrateFrom) && - (bitrate < sbrTuningTable [i].bitrateTo)) { - bitRateClosestLower = bitrate; - bitRateClosestUpper = bitrate; - //FDKprintf("entry %d\n", i); - return i ; - } else { - if ( sbrTuningTable [i].bitrateFrom > bitrate ) { - if (sbrTuningTable [i].bitrateFrom < bitRateClosestLower) { - bitRateClosestLower = sbrTuningTable [i].bitrateFrom; - bitRateClosestLowerIndex = i; + if ( numChannels == sbrTuningTable [i].numChannels + && sampleRate == sbrTuningTable [i].sampleRate ) + { + found = 1; + if ((bitrate >= sbrTuningTable [i].bitrateFrom) && + (bitrate < sbrTuningTable [i].bitrateTo)) { + bitRateClosestLower = bitrate; + bitRateClosestUpper = bitrate; + //FDKprintf("entry %d\n", i); + return i ; + } else { + if ( sbrTuningTable [i].bitrateFrom > bitrate ) { + if (sbrTuningTable [i].bitrateFrom < bitRateClosestLower) { + bitRateClosestLower = sbrTuningTable [i].bitrateFrom; + bitRateClosestLowerIndex = i; + } } - } - if ( sbrTuningTable [i].bitrateTo <= bitrate ) { - if (sbrTuningTable [i].bitrateTo > bitRateClosestUpper) { - bitRateClosestUpper = sbrTuningTable [i].bitrateTo-1; - bitRateClosestUpperIndex = i; + if ( sbrTuningTable [i].bitrateTo <= bitrate ) { + if (sbrTuningTable [i].bitrateTo > bitRateClosestUpper) { + bitRateClosestUpper = sbrTuningTable [i].bitrateTo-1; + bitRateClosestUpperIndex = i; + } } } } @@ -215,7 +209,7 @@ getSbrTuningTableIndex(UINT bitrate, /*! the total bitrate in bits/sec */ if (pBitRateClosest != NULL) { - /* Is there was at least one matching tuning entry found then pick the least distance bit rate */ + /* If there was at least one matching tuning entry found then pick the least distance bit rate */ if (found) { int distanceUpper=DISTANCE_CEIL_VALUE, distanceLower=DISTANCE_CEIL_VALUE; @@ -295,6 +289,52 @@ getPsTuningTableIndex(UINT bitrate, UINT *pBitRateClosest){ return INVALID_TABLE_IDX; } +/***************************************************************************/ +/*! + + \brief In case of downsampled SBR we may need to lower the stop freq + of a tuning setting to fit into the lower half of the + spectrum ( which is sampleRate/4 ) + + \return the adapted stop frequency index (-1 -> error) + + \ingroup SbrEncCfg + +****************************************************************************/ +static INT +FDKsbrEnc_GetDownsampledStopFreq ( + const INT sampleRateCore, + const INT startFreq, + INT stopFreq, + const INT downSampleFactor + ) +{ + INT maxStopFreqRaw = sampleRateCore / 2; + INT startBand, stopBand; + HANDLE_ERROR_INFO err; + + while (stopFreq > 0 && FDKsbrEnc_getSbrStopFreqRAW(stopFreq, sampleRateCore) > maxStopFreqRaw) { + stopFreq--; + } + + if (FDKsbrEnc_getSbrStopFreqRAW( stopFreq, sampleRateCore) > maxStopFreqRaw) + return -1; + + err = FDKsbrEnc_FindStartAndStopBand ( + sampleRateCore<<(downSampleFactor-1), + sampleRateCore, + 32<<(downSampleFactor-1), + startFreq, + stopFreq, + &startBand, + &stopBand + ); + if (err) + return -1; + + return stopFreq; +} + /***************************************************************************/ /*! @@ -307,15 +347,16 @@ getPsTuningTableIndex(UINT bitrate, UINT *pBitRateClosest){ ****************************************************************************/ static UINT -FDKsbrEnc_IsSbrSettingAvail (UINT bitrate, /*! the total bitrate in bits/sec */ - UINT vbrMode, /*! the vbr paramter, 0 means constant bitrate */ - UINT numOutputChannels,/*! the number of channels for the core coder */ - UINT sampleRateInput, /*! the input sample rate [in Hz] */ - AUDIO_OBJECT_TYPE core - ) +FDKsbrEnc_IsSbrSettingAvail ( + UINT bitrate, /*! the total bitrate in bits/sec */ + UINT vbrMode, /*! the vbr paramter, 0 means constant bitrate */ + UINT numOutputChannels, /*! the number of channels for the core coder */ + UINT sampleRateInput, /*! the input sample rate [in Hz] */ + UINT sampleRateCore, /*! the core's sampling rate */ + AUDIO_OBJECT_TYPE core + ) { INT idx = INVALID_TABLE_IDX; - UINT sampleRateCore; if (sampleRateInput < 16000) return 0; @@ -335,8 +376,6 @@ FDKsbrEnc_IsSbrSettingAvail (UINT bitrate, /*! the total bitrate in bit bitrate *= numOutputChannels; } - /* try DOWN_SMPL_FAC of the input sampling rate */ - sampleRateCore = sampleRateInput/DOWN_SMPL_FAC; idx = getSbrTuningTableIndex(bitrate, numOutputChannels, sampleRateCore, core, NULL); return (idx == INVALID_TABLE_IDX ? 0 : 1); @@ -356,7 +395,8 @@ static UINT FDKsbrEnc_AdjustSbrSettings (const sbrConfigurationPtr config, /*! output, modified */ UINT bitRate, /*! the total bitrate in bits/sec */ UINT numChannels, /*! the core coder number of channels */ - UINT fsCore, /*! the core coder sampling rate in Hz */ + UINT sampleRateCore, /*! the core coder sampling rate in Hz */ + UINT sampleRateSbr, /*! the sbr coder sampling rate in Hz */ UINT transFac, /*! the short block to long block ratio */ UINT standardBitrate, /*! the standard bitrate per channel in bits/sec */ UINT vbrMode, /*! the vbr paramter, 0 poor quality .. 100 high quality*/ @@ -366,15 +406,12 @@ FDKsbrEnc_AdjustSbrSettings (const sbrConfigurationPtr config, /*! output, modif AUDIO_OBJECT_TYPE core) /* Core audio codec object type */ { INT idx = INVALID_TABLE_IDX; - UINT sampleRate; - - /* set the codec settings */ + /* set the core codec settings */ config->codecSettings.bitRate = bitRate; config->codecSettings.nChannels = numChannels; - config->codecSettings.sampleFreq = fsCore; + config->codecSettings.sampleFreq = sampleRateCore; config->codecSettings.transFac = transFac; config->codecSettings.standardBitrate = standardBitrate; - sampleRate = fsCore * DOWN_SMPL_FAC; if (bitRate==0) { /* map vbr quality to bitrate */ @@ -391,13 +428,13 @@ FDKsbrEnc_AdjustSbrSettings (const sbrConfigurationPtr config, /*! output, modif bitRate *= numChannels; /* fix to enable mono vbrMode<40 @ 44.1 of 48kHz */ if (numChannels==1) { - if (sampleRate==44100 || sampleRate==48000) { + if (sampleRateSbr==44100 || sampleRateSbr==48000) { if (vbrMode<40) bitRate = 32000; } } } - idx = getSbrTuningTableIndex(bitRate,numChannels,fsCore, core, NULL); + idx = getSbrTuningTableIndex(bitRate,numChannels,sampleRateCore, core, NULL); if (idx != INVALID_TABLE_IDX) { config->startFreq = sbrTuningTable[idx].startFreq ; @@ -407,6 +444,21 @@ FDKsbrEnc_AdjustSbrSettings (const sbrConfigurationPtr config, /*! output, modif config->stopFreq = sbrTuningTable[idx].stopFreqSpeech; } + /* Adapt stop frequency in case of downsampled SBR - only 32 bands then */ + if (1 == config->downSampleFactor) { + INT dsStopFreq = FDKsbrEnc_GetDownsampledStopFreq( + sampleRateCore, + config->startFreq, + config->stopFreq, + config->downSampleFactor + ); + if (dsStopFreq < 0) { + return 0; + } + + config->stopFreq = dsStopFreq; + } + config->sbr_noise_bands = sbrTuningTable[idx].numNoiseBands ; if (core == AOT_ER_AAC_ELD) config->init_amp_res_FF = SBR_AMP_RES_1_5; @@ -455,19 +507,20 @@ FDKsbrEnc_AdjustSbrSettings (const sbrConfigurationPtr config, /*! output, modif description: initializes the SBR confifuration returns: error status input: - core codec type, - - fac of SBR to core frame length, + - factor of SBR to core frame length, - core frame length output: initialized SBR configuration *****************************************************************************/ static UINT FDKsbrEnc_InitializeSbrDefaults (sbrConfigurationPtr config, - INT coreSbrFrameLenFac, - UINT codecGranuleLen) + INT downSampleFactor, + UINT codecGranuleLen + ) { - if ( (coreSbrFrameLenFac != 2) || - (codecGranuleLen*coreSbrFrameLenFac > QMF_CHANNELS*QMF_MAX_TIME_SLOTS) ) - return(1); + if ( (downSampleFactor < 1 || downSampleFactor > 2) || + (codecGranuleLen*downSampleFactor > QMF_CHANNELS*QMF_MAX_TIME_SLOTS) ) + return(0); /* error */ config->SendHeaderDataTime = 1000; config->useWaveCoding = 0; @@ -476,8 +529,8 @@ FDKsbrEnc_InitializeSbrDefaults (sbrConfigurationPtr config, config->tran_thr = 13000; config->parametricCoding = 1; - config->sbrFrameSize = codecGranuleLen * coreSbrFrameLenFac; - + config->sbrFrameSize = codecGranuleLen * downSampleFactor; + config->downSampleFactor = downSampleFactor; /* sbr default parameters */ config->sbr_data_extra = 0; @@ -497,7 +550,6 @@ FDKsbrEnc_InitializeSbrDefaults (sbrConfigurationPtr config, config->sbr_xpos_level = 0; config->useSaPan = 0; config->dynBwEnabled = 0; - config->bDownSampledSbr = 0; /* the following parameters are overwritten by the FDKsbrEnc_AdjustSbrSettings() function since @@ -601,7 +653,7 @@ void sbrEncoder_Close (HANDLE_SBR_ENCODER *phSbrEncoder) { int el, ch; - for (el=0; el<(6); el++) + for (el=0; el<(8); el++) { if (hSbrEncoder->sbrElement[el]!=NULL) { sbrEncoder_ElementClose(&hSbrEncoder->sbrElement[el]); @@ -609,7 +661,7 @@ void sbrEncoder_Close (HANDLE_SBR_ENCODER *phSbrEncoder) } /* Close sbr Channels */ - for (ch=0; ch<(6); ch++) + for (ch=0; ch<(8); ch++) { if (hSbrEncoder->pSbrChannel[ch]) { sbrEncoder_ChannelClose(hSbrEncoder->pSbrChannel[ch]); @@ -645,46 +697,62 @@ void sbrEncoder_Close (HANDLE_SBR_ENCODER *phSbrEncoder) output: error info *****************************************************************************/ -static INT updateFreqBandTable(HANDLE_SBR_CONFIG_DATA sbrConfigData, - HANDLE_SBR_HEADER_DATA sbrHeaderData, - INT noQmfChannels) +static INT updateFreqBandTable( + HANDLE_SBR_CONFIG_DATA sbrConfigData, + HANDLE_SBR_HEADER_DATA sbrHeaderData, + const INT downSampleFactor + ) { INT k0, k2; - if(FDKsbrEnc_FindStartAndStopBand(sbrConfigData->sampleFreq, - noQmfChannels, - sbrHeaderData->sbr_start_frequency, - sbrHeaderData->sbr_stop_frequency, - sbrHeaderData->sampleRateMode, - &k0, &k2)) + if( FDKsbrEnc_FindStartAndStopBand ( + sbrConfigData->sampleFreq, + sbrConfigData->sampleFreq >> (downSampleFactor-1), + sbrConfigData->noQmfBands, + sbrHeaderData->sbr_start_frequency, + sbrHeaderData->sbr_stop_frequency, + &k0, + &k2 + ) + ) return(1); - if(FDKsbrEnc_UpdateFreqScale(sbrConfigData->v_k_master, &sbrConfigData->num_Master, - k0, k2, sbrHeaderData->freqScale, - sbrHeaderData->alterScale)) + if( FDKsbrEnc_UpdateFreqScale( + sbrConfigData->v_k_master, + &sbrConfigData->num_Master, + k0, + k2, + sbrHeaderData->freqScale, + sbrHeaderData->alterScale + ) + ) return(1); sbrHeaderData->sbr_xover_band=0; - if(FDKsbrEnc_UpdateHiRes(sbrConfigData->freqBandTable[HI], - &sbrConfigData->nSfb[HI], - sbrConfigData->v_k_master, - sbrConfigData->num_Master , - &sbrHeaderData->sbr_xover_band, - sbrHeaderData->sampleRateMode, - noQmfChannels)) + if( FDKsbrEnc_UpdateHiRes( + sbrConfigData->freqBandTable[HI], + &sbrConfigData->nSfb[HI], + sbrConfigData->v_k_master, + sbrConfigData->num_Master, + &sbrHeaderData->sbr_xover_band + ) + ) return(1); - FDKsbrEnc_UpdateLoRes(sbrConfigData->freqBandTable[LO], - &sbrConfigData->nSfb[LO], - sbrConfigData->freqBandTable[HI], - sbrConfigData->nSfb[HI]); + FDKsbrEnc_UpdateLoRes( + sbrConfigData->freqBandTable[LO], + &sbrConfigData->nSfb[LO], + sbrConfigData->freqBandTable[HI], + sbrConfigData->nSfb[HI] + ); + - sbrConfigData->xOverFreq = (sbrConfigData->freqBandTable[LOW_RES][0] * sbrConfigData->sampleFreq / noQmfChannels+1)>>1; + sbrConfigData->xOverFreq = (sbrConfigData->freqBandTable[LOW_RES][0] * sbrConfigData->sampleFreq / sbrConfigData->noQmfBands+1)>>1; return (0); } @@ -866,7 +934,8 @@ FDKsbrEnc_EnvEncodeFrame(HANDLE_SBR_ENCODER hEnvEncoder, */ if(updateFreqBandTable(&hSbrElement->sbrConfigData, &hSbrElement->sbrHeaderData, - hSbrElement->sbrConfigData.noQmfBands)) + hEnvEncoder->downSampleFactor + )) return(1); @@ -891,8 +960,6 @@ FDKsbrEnc_EnvEncodeFrame(HANDLE_SBR_ENCODER hEnvEncoder, &crcInfo, hSbrElement->sbrConfigData.sbrSyntaxFlags); - INT error = noError; - /* Temporal Envelope Data */ SBR_FRAME_TEMP_DATA _fData; SBR_FRAME_TEMP_DATA *fData = &_fData; @@ -923,9 +990,9 @@ FDKsbrEnc_EnvEncodeFrame(HANDLE_SBR_ENCODER hEnvEncoder, if(hSbrElement->elInfo.fParametricStereo == 0) { - C_ALLOC_SCRATCH_START(qmfWorkBuffer, FIXP_DBL, QMF_CHANNELS*2); QMF_SCALE_FACTOR tmpScale; FIXP_DBL **pQmfReal, **pQmfImag; + C_AALLOC_SCRATCH_START(qmfWorkBuffer, FIXP_DBL, QMF_CHANNELS*2) /* Obtain pointers to QMF buffers. */ @@ -940,10 +1007,11 @@ FDKsbrEnc_EnvEncodeFrame(HANDLE_SBR_ENCODER hEnvEncoder, timeInStride, qmfWorkBuffer ); - C_ALLOC_SCRATCH_END(qmfWorkBuffer, FIXP_DBL, QMF_CHANNELS*2); - h_envChan->qmfScale = tmpScale.lb_scale + 7; + + C_AALLOC_SCRATCH_END(qmfWorkBuffer, FIXP_DBL, QMF_CHANNELS*2) + } /* fParametricStereo == 0 */ @@ -952,6 +1020,8 @@ FDKsbrEnc_EnvEncodeFrame(HANDLE_SBR_ENCODER hEnvEncoder, */ if (hSbrElement->elInfo.fParametricStereo) { + INT error = noError; + /* Limit Parametric Stereo to one instance */ FDK_ASSERT(ch == 0); @@ -1177,10 +1247,12 @@ initEnvChannel ( HANDLE_SBR_CONFIG_DATA sbrConfigData, break; case 2048: case 1024: + case 512: timeSlots = 16; break; case 1920: case 960: + case 480: timeSlots = 15; break; case 1152: @@ -1221,9 +1293,9 @@ initEnvChannel ( HANDLE_SBR_CONFIG_DATA sbrConfigData, tran_fc = params->tran_fc; - if (tran_fc == 0) - tran_fc = fixMin (5000, FDKsbrEnc_getSbrStartFreqRAW (sbrHeaderData->sbr_start_frequency,64,sbrConfigData->sampleFreq)); - + if (tran_fc == 0) { + tran_fc = fixMin (5000, FDKsbrEnc_getSbrStartFreqRAW (sbrHeaderData->sbr_start_frequency,params->codecSettings.sampleFreq)); + } tran_fc = (tran_fc*4*sbrConfigData->noQmfBands/sbrConfigData->sampleFreq + 1)>>1; @@ -1233,11 +1305,11 @@ initEnvChannel ( HANDLE_SBR_CONFIG_DATA sbrConfigData, } else { frameShift = 0; - switch (params->sbrFrameSize) { + switch (timeSlots) { /* The factor of 2 is by definition. */ - case 2048: tran_off = 8 + FRAME_MIDDLE_SLOT_2048 * timeStep; break; - case 1920: tran_off = 7 + FRAME_MIDDLE_SLOT_1920 * timeStep; break; - default: return 1; break; + case NUMBER_TIME_SLOTS_2048: tran_off = 8 + FRAME_MIDDLE_SLOT_2048 * timeStep; break; + case NUMBER_TIME_SLOTS_1920: tran_off = 7 + FRAME_MIDDLE_SLOT_1920 * timeStep; break; + default: return 1; } } if ( FDKsbrEnc_InitExtractSbrEnvelope (&hEnv->sbrExtractEnvelope, @@ -1330,7 +1402,6 @@ INT sbrEncoder_Open( hSbrEncoder->pSBRdynamic_RAM = (UCHAR*)GetRam_SbrDynamic_RAM(); hSbrEncoder->dynamicRam = hSbrEncoder->pSBRdynamic_RAM; - for (i=0; i<nElements; i++) { hSbrEncoder->sbrElement[i] = GetRam_SbrElement(i); if (hSbrEncoder->sbrElement[i]==NULL) { @@ -1397,7 +1468,7 @@ bail: static INT FDKsbrEnc_Reallocate( HANDLE_SBR_ENCODER hSbrEncoder, - SBR_ELEMENT_INFO elInfo[(6)], + SBR_ELEMENT_INFO elInfo[(8)], const INT noElements) { INT totalCh = 0; @@ -1462,7 +1533,9 @@ INT FDKsbrEnc_EnvInit ( AUDIO_OBJECT_TYPE aot, int nBitstrDelay, int nElement, - ULONG statesInitFlag + const int headerPeriod, + ULONG statesInitFlag, + int fTimeDomainDownsampling ,UCHAR *dynamic_RAM ) { @@ -1496,8 +1569,16 @@ INT FDKsbrEnc_EnvInit ( hSbrElement->sbrConfigData.sbrSyntaxFlags |= SBR_SYNTAX_CRC; } - hSbrElement->sbrConfigData.noQmfBands = QMF_CHANNELS; - hSbrElement->sbrConfigData.noQmfSlots = params->sbrFrameSize/hSbrElement->sbrConfigData.noQmfBands; + hSbrElement->sbrConfigData.noQmfBands = QMF_CHANNELS>>(2-params->downSampleFactor); + switch (hSbrElement->sbrConfigData.noQmfBands) + { + case 64: hSbrElement->sbrConfigData.noQmfSlots = params->sbrFrameSize>>6; + break; + case 32: hSbrElement->sbrConfigData.noQmfSlots = params->sbrFrameSize>>5; + break; + default: hSbrElement->sbrConfigData.noQmfSlots = params->sbrFrameSize>>6; + return(2); + } FDKinitBitStream(&hSbrElement->CmonData.sbrBitbuf, bitstreamBuffer, MAX_PAYLOAD_SIZE*sizeof(UCHAR), 0, BS_WRITER); @@ -1513,17 +1594,21 @@ INT FDKsbrEnc_EnvInit ( hSbrElement->sbrConfigData.frameSize = params->sbrFrameSize; - /* implicit rule for sampleRateMode */ - /* run in "multirate" mode where sbr fs is 2 * codec fs */ - hSbrElement->sbrHeaderData.sampleRateMode = DUAL_RATE; - hSbrElement->sbrConfigData.sampleFreq = 2 * params->codecSettings.sampleFreq; + hSbrElement->sbrConfigData.sampleFreq = params->downSampleFactor * params->codecSettings.sampleFreq; hSbrElement->sbrBitstreamData.CountSendHeaderData = 0; if (params->SendHeaderDataTime > 0 ) { - hSbrElement->sbrBitstreamData.NrSendHeaderData = (INT)(params->SendHeaderDataTime * hSbrElement->sbrConfigData.sampleFreq + if (headerPeriod==-1) { + + hSbrElement->sbrBitstreamData.NrSendHeaderData = (INT)(params->SendHeaderDataTime * hSbrElement->sbrConfigData.sampleFreq / (1000 * hSbrElement->sbrConfigData.frameSize)); - hSbrElement->sbrBitstreamData.NrSendHeaderData = fixMax(hSbrElement->sbrBitstreamData.NrSendHeaderData,1); + hSbrElement->sbrBitstreamData.NrSendHeaderData = fixMax(hSbrElement->sbrBitstreamData.NrSendHeaderData,1); + } + else { + /* assure header period at least once per second */ + hSbrElement->sbrBitstreamData.NrSendHeaderData = fixMin(fixMax(headerPeriod,1),(hSbrElement->sbrConfigData.sampleFreq/hSbrElement->sbrConfigData.frameSize)); + } } else { hSbrElement->sbrBitstreamData.NrSendHeaderData = 0; @@ -1584,7 +1669,8 @@ INT FDKsbrEnc_EnvInit ( /* init freq band table */ if(updateFreqBandTable(&hSbrElement->sbrConfigData, &hSbrElement->sbrHeaderData, - hSbrElement->sbrConfigData.noQmfBands)) + params->downSampleFactor + )) { return(1); } @@ -1624,6 +1710,9 @@ INT FDKsbrEnc_EnvInit ( hSbrElement->sbrConfigData.noQmfBands, hSbrElement->sbrConfigData.noQmfBands, qmfFlags ); + if (0!=err) { + return err; + } } /* */ @@ -1645,7 +1734,7 @@ INT sbrEncoder_GetInBufferSize(int noChannels) { INT temp; - temp = (1024*DOWN_SMPL_FAC); + temp = (2048); temp += 1024 + MAX_SAMPLE_DELAY; temp *= noChannels; temp *= sizeof(INT_PCM); @@ -1677,8 +1766,8 @@ INT FDKsbrEnc_DelayCompensation ( 1 )) return -1; - sbrEncoder_UpdateBuffers(hEnvEnc, timeBuffer); } + sbrEncoder_UpdateBuffers(hEnvEnc, timeBuffer); } return 0; } @@ -1709,29 +1798,36 @@ UINT sbrEncoder_LimitBitRate(UINT bitRate, UINT numChannels, UINT coreSampleRate return newBitRate; } +UINT sbrEncoder_IsSingleRatePossible(AUDIO_OBJECT_TYPE aot) +{ + UINT isPossible=(AOT_PS==aot)?0:1; + return isPossible; +} INT sbrEncoder_Init( - HANDLE_SBR_ENCODER hSbrEncoder, - SBR_ELEMENT_INFO elInfo[(6)], - int noElements, - INT_PCM *inputBuffer, - INT *coreBandwidth, - INT *inputBufferOffset, - INT *numChannels, - INT *sampleRate, - INT *frameLength, - AUDIO_OBJECT_TYPE *aot, - int *delay, - int transformFactor, - ULONG statesInitFlag - ) + HANDLE_SBR_ENCODER hSbrEncoder, + SBR_ELEMENT_INFO elInfo[(8)], + int noElements, + INT_PCM *inputBuffer, + INT *coreBandwidth, + INT *inputBufferOffset, + INT *numChannels, + INT *coreSampleRate, + UINT *downSampleFactor, + INT *frameLength, + AUDIO_OBJECT_TYPE aot, + int *delay, + int transformFactor, + const int headerPeriod, + ULONG statesInitFlag + ) { HANDLE_ERROR_INFO errorInfo = noError; - sbrConfiguration sbrConfig[(6)]; + sbrConfiguration sbrConfig[(8)]; INT error = 0; INT lowestBandwidth; /* Save input parameters */ - INT inputSampleRate = *sampleRate; + INT inputSampleRate = *coreSampleRate; int coreFrameLength = *frameLength; int inputBandWidth = *coreBandwidth; int inputChannels = *numChannels; @@ -1739,20 +1835,26 @@ INT sbrEncoder_Init( int downsampledOffset = 0; int sbrOffset = 0; int downsamplerDelay = 0; - int downsample = 0; + int timeDomainDownsample = 0; int nBitstrDelay = 0; - int lowestSbrStartFreq, lowestSbrStopFreq; + int highestSbrStartFreq, highestSbrStopFreq; int lowDelay = 0; int usePs = 0; /* check whether SBR setting is available for the current encoder configuration (bitrate, samplerate) */ - if ( (*aot==AOT_PS) || (*aot==AOT_MP2_PS) || (*aot==AOT_DABPLUS_PS) || (*aot==AOT_DRM_MPEG_PS) ) { + if (!sbrEncoder_IsSingleRatePossible(aot)) { + *downSampleFactor = 2; + } + + + + if ( (aot==AOT_PS) || (aot==AOT_MP2_PS) || (aot==AOT_DABPLUS_PS) || (aot==AOT_DRM_MPEG_PS) ) { usePs = 1; } - if ( (*aot==AOT_ER_AAC_ELD) ) { + if ( (aot==AOT_ER_AAC_ELD) ) { lowDelay = 1; } - else if ( (*aot==AOT_ER_AAC_LD) ) { + else if ( (aot==AOT_ER_AAC_LD) ) { error = 1; goto bail; } @@ -1767,25 +1869,25 @@ INT sbrEncoder_Init( /* core encoder gets downmixed mono signal */ *numChannels = 1; } else { - switch (*aot) { - case AOT_MP2_PS: - *aot = AOT_MP2_SBR; - break; - case AOT_DABPLUS_PS: - *aot = AOT_DABPLUS_SBR; - break; - case AOT_DRM_MPEG_PS: - *aot = AOT_DRM_SBR; - break; - case AOT_PS: - default: - *aot = AOT_SBR; - } - usePs = 0; + error = 1; + goto bail; } } /* usePs */ - /* check whether SBR setting is available for the current encoder configuration (bitrate, samplerate) */ + /* set the core's sample rate */ + switch (*downSampleFactor) { + case 1: + *coreSampleRate = inputSampleRate; + break; + case 2: + *coreSampleRate = inputSampleRate>>1; + break; + default: + *coreSampleRate = inputSampleRate>>1; + return 0; /* return error */ + } + + /* check whether SBR setting is available for the current encoder configuration (bitrate, coreSampleRate) */ { int delayDiff = 0; int el, coreEl; @@ -1798,54 +1900,37 @@ INT sbrEncoder_Init( continue; } /* check if desired configuration is available */ - if ( !FDKsbrEnc_IsSbrSettingAvail (elInfo[coreEl].bitRate, 0, elInfo[coreEl].nChannelsInEl, inputSampleRate, *aot) ) + if ( !FDKsbrEnc_IsSbrSettingAvail (elInfo[coreEl].bitRate, 0, elInfo[coreEl].nChannelsInEl, inputSampleRate, *coreSampleRate, aot) ) { - /* otherwise - change to AAC-LC */ - switch (*aot) { - case AOT_MP2_SBR: - case AOT_MP2_PS: - *aot = AOT_MP2_AAC_LC; - break; - case AOT_DABPLUS_SBR: - case AOT_DABPLUS_PS: - *aot = AOT_DABPLUS_AAC_LC; - break; - case AOT_DRM_SBR: - case AOT_DRM_MPEG_PS: - *aot = AOT_DRM_AAC; - break; - case AOT_ER_AAC_ELD: - break; - case AOT_SBR: - case AOT_PS: - default: - *aot = AOT_AAC_LC; - } error = 1; goto bail; } } - *sampleRate /= DOWN_SMPL_FAC; - /* Determine Delay balancing and new encoder delay */ if (lowDelay) { - downsample = 1; /* activate downsampler */ - delayDiff = (*delay*DOWN_SMPL_FAC) + DELAY_ELD2SBR(coreFrameLength); - *delay = DELAY_ELDSBR(coreFrameLength); + { + delayDiff = (*delay * *downSampleFactor) + DELAY_ELD2SBR(coreFrameLength,*downSampleFactor); + *delay = DELAY_ELDSBR(coreFrameLength,*downSampleFactor); + } } else if (usePs) { - delayDiff = (*delay*DOWN_SMPL_FAC) + DELAY_AAC2PS(coreFrameLength); - *delay = DELAY_PS(coreFrameLength); + delayDiff = (*delay * *downSampleFactor) + DELAY_AAC2PS(coreFrameLength,*downSampleFactor); + *delay = DELAY_PS(coreFrameLength,*downSampleFactor); } else { - downsample = 1; /* activate downsampler */ - delayDiff = (*delay*DOWN_SMPL_FAC) + DELAY_AAC2SBR(coreFrameLength); - *delay = DELAY_SBR(coreFrameLength); + delayDiff = DELAY_AAC2SBR(coreFrameLength,*downSampleFactor); + delayDiff += (*delay * *downSampleFactor); + *delay = DELAY_SBR(coreFrameLength,*downSampleFactor); } + if (!usePs) { + timeDomainDownsample = *downSampleFactor-1; /* activate time domain downsampler when downSampleFactor is != 1 */ + } + + /* Take care about downsampled data bound to the SBR path */ - if (!downsample && delayDiff > 0) { + if (!timeDomainDownsample && delayDiff > 0) { /* * We must tweak the balancing into a situation where the downsampled path * is the one to be delayed, because delaying the QMF domain input, also delays @@ -1854,12 +1939,15 @@ INT sbrEncoder_Init( while ( delayDiff > 0 ) { /* Encoder delay increases */ - *delay += coreFrameLength*DOWN_SMPL_FAC; - /* Add one frame delay to SBR path */ - delayDiff -= coreFrameLength*DOWN_SMPL_FAC; + { + *delay += coreFrameLength * *downSampleFactor; + /* Add one frame delay to SBR path */ + delayDiff -= coreFrameLength * *downSampleFactor; + } nBitstrDelay += 1; } - } else { + } else + { *delay += fixp_abs(delayDiff); } @@ -1867,32 +1955,33 @@ INT sbrEncoder_Init( /* Delay AAC data */ delayDiff = -delayDiff; /* Multiply downsampled offset by AAC core channels. Divide by 2 because of half samplerate of downsampled data. */ - downsampledOffset = (delayDiff*(*numChannels))/DOWN_SMPL_FAC; + FDK_ASSERT(*downSampleFactor>0 && *downSampleFactor<=2); + downsampledOffset = (delayDiff*(*numChannels))>>(*downSampleFactor-1); sbrOffset = 0; } else { /* Delay SBR input */ - if ( delayDiff > (int)coreFrameLength*DOWN_SMPL_FAC ) + if ( delayDiff > (int)coreFrameLength * (int)*downSampleFactor ) { /* Do bitstream frame-wise delay balancing if we have more than SBR framelength samples delay difference */ - delayDiff -= coreFrameLength*DOWN_SMPL_FAC; + delayDiff -= coreFrameLength * *downSampleFactor; nBitstrDelay = 1; } /* Multiply input offset by input channels */ sbrOffset = delayDiff*(*numChannels); downsampledOffset = 0; } - - hSbrEncoder->nBitstrDelay = nBitstrDelay; - hSbrEncoder->nChannels = *numChannels; - hSbrEncoder->frameSize = *frameLength*DOWN_SMPL_FAC; - hSbrEncoder->fTimeDomainDownsampling = downsample; - hSbrEncoder->estimateBitrate = 0; - hSbrEncoder->inputDataDelay = 0; + hSbrEncoder->nBitstrDelay = nBitstrDelay; + hSbrEncoder->nChannels = *numChannels; + hSbrEncoder->frameSize = coreFrameLength * *downSampleFactor; + hSbrEncoder->fTimeDomainDownsampling = timeDomainDownsample; + hSbrEncoder->downSampleFactor = *downSampleFactor; + hSbrEncoder->estimateBitrate = 0; + hSbrEncoder->inputDataDelay = 0; /* Open SBR elements */ el = -1; - lowestSbrStartFreq = lowestSbrStopFreq = 9999; + highestSbrStartFreq = highestSbrStopFreq = 0; lowestBandwidth = 99999; /* Loop through each core encoder element and get a matching SBR element config */ @@ -1915,28 +2004,38 @@ INT sbrEncoder_Init( /* * Init sbrConfig structure */ - FDKsbrEnc_InitializeSbrDefaults ( &sbrConfig[el], - DOWN_SMPL_FAC, - coreFrameLength); + if ( ! FDKsbrEnc_InitializeSbrDefaults ( &sbrConfig[el], + *downSampleFactor, + coreFrameLength + ) ) + { + error = 1; + goto bail; + } + /* * Modify sbrConfig structure according to Element parameters */ - FDKsbrEnc_AdjustSbrSettings ( &sbrConfig[el], - elInfo[coreEl].bitRate, - elInfo[coreEl].nChannelsInEl, - *sampleRate, - transformFactor, - 24000, - 0, - 0, /* useSpeechConfig */ - 0, /* lcsMode */ - usePs, /* bParametricStereo */ - *aot); + if ( ! FDKsbrEnc_AdjustSbrSettings (&sbrConfig[el], + elInfo[coreEl].bitRate, + elInfo[coreEl].nChannelsInEl, + *coreSampleRate, + inputSampleRate, + transformFactor, + 24000, + 0, + 0, /* useSpeechConfig */ + 0, /* lcsMode */ + usePs, /* bParametricStereo */ + aot) ) + { + error = 1; + goto bail; + } /* Find common frequency border for all SBR elements */ - lowestSbrStartFreq = fixMin(lowestSbrStartFreq, sbrConfig[el].startFreq); - lowestSbrStopFreq = fixMin(lowestSbrStopFreq, sbrConfig[el].stopFreq); - + highestSbrStartFreq = fixMax(highestSbrStartFreq, sbrConfig[el].startFreq); + highestSbrStopFreq = fixMax(highestSbrStopFreq, sbrConfig[el].stopFreq); } /* first element loop */ @@ -1952,21 +2051,24 @@ INT sbrEncoder_Init( int bandwidth = *coreBandwidth; /* Use lowest common bandwidth */ - sbrConfig[el].startFreq = lowestSbrStartFreq; - sbrConfig[el].stopFreq = lowestSbrStopFreq; + sbrConfig[el].startFreq = highestSbrStartFreq; + sbrConfig[el].stopFreq = highestSbrStopFreq; /* initialize SBR element, and get core bandwidth */ error = FDKsbrEnc_EnvInit(hSbrEncoder->sbrElement[el], &sbrConfig[el], &bandwidth, - *aot, + aot, nBitstrDelay, el, - statesInitFlag + headerPeriod, + statesInitFlag, + hSbrEncoder->fTimeDomainDownsampling ,hSbrEncoder->dynamicRam ); if (error != 0) { + error = 2; goto bail; } @@ -1988,30 +2090,29 @@ INT sbrEncoder_Init( for (ch=0; ch<hSbrEl->elInfo.nChannelsInEl; ch++) { - FDKaacEnc_InitDownsampler (&hSbrEl->sbrChannel[ch]->downSampler, Wc, DOWN_SMPL_FAC); + FDKaacEnc_InitDownsampler (&hSbrEl->sbrChannel[ch]->downSampler, Wc, *downSampleFactor); + FDK_ASSERT (hSbrEl->sbrChannel[ch]->downSampler.delay <=MAX_DS_FILTER_DELAY); } - FDK_ASSERT (hSbrEl->sbrChannel[0]->downSampler.delay <=MAX_DS_FILTER_DELAY && hSbrEl->sbrChannel[0]->downSampler.delay <=MAX_DS_FILTER_DELAY); downsamplerDelay = hSbrEl->sbrChannel[0]->downSampler.delay; } /* third element loop */ /* lfe */ - FDKaacEnc_InitDownsampler (&hSbrEncoder->lfeDownSampler, 0, DOWN_SMPL_FAC); + FDKaacEnc_InitDownsampler (&hSbrEncoder->lfeDownSampler, 0, *downSampleFactor); /* Add the resampler additional delay to get the final delay and buffer offset values. */ - if (sbrOffset > 0 || downsampledOffset <= ((downsamplerDelay * (*numChannels))/DOWN_SMPL_FAC)) { + if (sbrOffset > 0 || downsampledOffset <= ((downsamplerDelay * (*numChannels))>>(*downSampleFactor-1))) { sbrOffset += (downsamplerDelay - downsampledOffset) * (*numChannels) ; *delay += downsamplerDelay - downsampledOffset; downsampledOffset = 0; } else { - downsampledOffset -= (downsamplerDelay * (*numChannels))/DOWN_SMPL_FAC; + downsampledOffset -= (downsamplerDelay * (*numChannels))>>(*downSampleFactor-1); sbrOffset = 0; } hSbrEncoder->inputDataDelay = downsamplerDelay; } - /* Assign core encoder Bandwidth */ *coreBandwidth = lowestBandwidth; @@ -2025,7 +2126,7 @@ INT sbrEncoder_Init( FDK_ASSERT(hSbrEncoder->noElements == 1); INT psTuningTableIdx = getPsTuningTableIndex(elInfo[0].bitRate, NULL); - psEncConfig.frameSize = *frameLength; //sbrConfig.sbrFrameSize; + psEncConfig.frameSize = coreFrameLength; //sbrConfig.sbrFrameSize; psEncConfig.qmfFilterMode = 0; psEncConfig.sbrPsDelay = 0; @@ -2037,7 +2138,7 @@ INT sbrEncoder_Init( /* calculation is not quite linear, increased number of envelopes causes more bits */ /* assume avg. 50 bits per frame for 10 stereo bands / 1 envelope configuration */ - hSbrEncoder->estimateBitrate += ( (((*sampleRate) * 5 * psEncConfig.nStereoBands * psEncConfig.maxEnvelopes) / hSbrEncoder->frameSize)); + hSbrEncoder->estimateBitrate += ( (((*coreSampleRate) * 5 * psEncConfig.nStereoBands * psEncConfig.maxEnvelopes) / hSbrEncoder->frameSize)); } else { error = ERROR(CDI, "Invalid ps tuning table index."); @@ -2066,10 +2167,16 @@ INT sbrEncoder_Init( errorInfo = handBack(errorInfo); } } + + /* QMF analysis + Hybrid analysis + Hybrid synthesis + QMF synthesis + downsampled input buffer delay */ + hSbrEncoder->inputDataDelay = (64*10/2) + (6*64) + (0) + (64*10/2-64+1) + ((*downSampleFactor)*downsampledOffset); } hSbrEncoder->downsampledOffset = downsampledOffset; - hSbrEncoder->downmixSize = coreFrameLength*(*numChannels); + { + hSbrEncoder->downmixSize = coreFrameLength*(*numChannels); + } + hSbrEncoder->bufferOffset = sbrOffset; /* Delay Compensation: fill bitstream delay buffer with zero input signal */ if ( hSbrEncoder->nBitstrDelay > 0 ) @@ -2080,7 +2187,7 @@ INT sbrEncoder_Init( } /* Set Output frame length */ - *frameLength = coreFrameLength*DOWN_SMPL_FAC; + *frameLength = coreFrameLength * *downSampleFactor; /* Input buffer offset */ *inputBufferOffset = fixMax(sbrOffset, downsampledOffset); @@ -2091,7 +2198,7 @@ INT sbrEncoder_Init( bail: /* Restore input settings */ - *sampleRate = inputSampleRate; + *coreSampleRate = inputSampleRate; *frameLength = coreFrameLength; *numChannels = inputChannels; *coreBandwidth = inputBandWidth; @@ -2104,8 +2211,8 @@ INT sbrEncoder_EncodeFrame( HANDLE_SBR_ENCODER hSbrEncoder, INT_PCM *samples, UINT timeInStride, - UINT sbrDataBits[(6)], - UCHAR sbrData[(6)][MAX_PAYLOAD_SIZE] + UINT sbrDataBits[(8)], + UCHAR sbrData[(8)][MAX_PAYLOAD_SIZE] ) { INT error; @@ -2129,8 +2236,8 @@ sbrEncoder_EncodeFrame( HANDLE_SBR_ENCODER hSbrEncoder, } } - if ( (hSbrEncoder->lfeChIdx!=-1) && (hSbrEncoder->fTimeDomainDownsampling) ) - { + if ( ( hSbrEncoder->lfeChIdx!=-1) && (hSbrEncoder->downSampleFactor > 1) ) + { /* lfe downsampler */ INT nOutSamples; FDKaacEnc_Downsample(&hSbrEncoder->lfeDownSampler, @@ -2140,7 +2247,9 @@ sbrEncoder_EncodeFrame( HANDLE_SBR_ENCODER hSbrEncoder, samples + hSbrEncoder->downsampledOffset + hSbrEncoder->lfeChIdx, &nOutSamples, hSbrEncoder->nChannels); - } /* lfe downsampler */ + + + } return 0; } diff --git a/libSBRenc/src/sbr_misc.cpp b/libSBRenc/src/sbr_misc.cpp index c44be22..c673b81 100644 --- a/libSBRenc/src/sbr_misc.cpp +++ b/libSBRenc/src/sbr_misc.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRenc/src/sbr_misc.h b/libSBRenc/src/sbr_misc.h index 33b9cf9..f471974 100644 --- a/libSBRenc/src/sbr_misc.h +++ b/libSBRenc/src/sbr_misc.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRenc/src/sbr_ram.cpp b/libSBRenc/src/sbr_ram.cpp index e304c39..ee6c37f 100644 --- a/libSBRenc/src/sbr_ram.cpp +++ b/libSBRenc/src/sbr_ram.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -107,39 +107,39 @@ C_ALLOC_MEM (Ram_SbrDynamic_RAM, FIXP_DBL, ((SBR_ENC_DYN_RAM_SIZE)/sizeof(FIXP_D in module sbr_ram and sbr rom */ C_ALLOC_MEM (Ram_SbrEncoder, SBR_ENCODER, 1) -C_ALLOC_MEM2(Ram_SbrChannel, SBR_CHANNEL, 1, (6)) -C_ALLOC_MEM2(Ram_SbrElement, SBR_ELEMENT, 1, (6)) +C_ALLOC_MEM2(Ram_SbrChannel, SBR_CHANNEL, 1, (8)) +C_ALLOC_MEM2(Ram_SbrElement, SBR_ELEMENT, 1, (8)) /*! Filter states for QMF-analysis. <br> Dimension: #MAXNRSBRCHANNELS * #SBR_QMF_FILTER_LENGTH */ -C_AALLOC_MEM2_L (Ram_Sbr_QmfStatesAnalysis, FIXP_QAS, QMF_FILTER_LENGTH, (6), SECT_DATA_L1) +C_AALLOC_MEM2_L (Ram_Sbr_QmfStatesAnalysis, FIXP_QAS, QMF_FILTER_LENGTH, (8), SECT_DATA_L1) /*! Matrix holding the quota values for all estimates, all channels Dimension #MAXNRSBRCHANNELS * +#SBR_QMF_CHANNELS* #MAX_NO_OF_ESTIMATES */ -C_ALLOC_MEM2_L (Ram_Sbr_quotaMatrix, FIXP_DBL, (MAX_NO_OF_ESTIMATES*QMF_CHANNELS), (6), SECT_DATA_L1) +C_ALLOC_MEM2_L (Ram_Sbr_quotaMatrix, FIXP_DBL, (MAX_NO_OF_ESTIMATES*QMF_CHANNELS), (8), SECT_DATA_L1) /*! Matrix holding the sign values for all estimates, all channels Dimension #MAXNRSBRCHANNELS * +#SBR_QMF_CHANNELS* #MAX_NO_OF_ESTIMATES */ -C_ALLOC_MEM2 (Ram_Sbr_signMatrix, INT, (MAX_NO_OF_ESTIMATES*QMF_CHANNELS), (6)) +C_ALLOC_MEM2 (Ram_Sbr_signMatrix, INT, (MAX_NO_OF_ESTIMATES*QMF_CHANNELS), (8)) /*! Frequency band table (low res) <br> Dimension #MAX_FREQ_COEFFS/2+1 */ -C_ALLOC_MEM2 (Ram_Sbr_freqBandTableLO, UCHAR, (MAX_FREQ_COEFFS/2+1), (6)) +C_ALLOC_MEM2 (Ram_Sbr_freqBandTableLO, UCHAR, (MAX_FREQ_COEFFS/2+1), (8)) /*! Frequency band table (high res) <br> Dimension #MAX_FREQ_COEFFS +1 */ -C_ALLOC_MEM2 (Ram_Sbr_freqBandTableHI, UCHAR, (MAX_FREQ_COEFFS+1), (6)) +C_ALLOC_MEM2 (Ram_Sbr_freqBandTableHI, UCHAR, (MAX_FREQ_COEFFS+1), (8)) /*! vk matser table <br> Dimension #MAX_FREQ_COEFFS +1 */ -C_ALLOC_MEM2 (Ram_Sbr_v_k_master, UCHAR, (MAX_FREQ_COEFFS+1), (6)) +C_ALLOC_MEM2 (Ram_Sbr_v_k_master, UCHAR, (MAX_FREQ_COEFFS+1), (8)) /* @@ -149,23 +149,23 @@ C_ALLOC_MEM2 (Ram_Sbr_v_k_master, UCHAR, (MAX_FREQ_COEFFS+1), (6)) /*! sbr_detectionVectors <br> Dimension #MAX_NUM_CHANNELS*#MAX_NO_OF_ESTIMATES*#MAX_FREQ_COEFFS] */ -C_ALLOC_MEM2 (Ram_Sbr_detectionVectors, UCHAR, (MAX_NO_OF_ESTIMATES*MAX_FREQ_COEFFS), (6)) +C_ALLOC_MEM2 (Ram_Sbr_detectionVectors, UCHAR, (MAX_NO_OF_ESTIMATES*MAX_FREQ_COEFFS), (8)) /*! sbr_prevCompVec[ <br> Dimension #MAX_NUM_CHANNELS*#MAX_FREQ_COEFFS] */ -C_ALLOC_MEM2 (Ram_Sbr_prevEnvelopeCompensation, UCHAR, MAX_FREQ_COEFFS, (6)) +C_ALLOC_MEM2 (Ram_Sbr_prevEnvelopeCompensation, UCHAR, MAX_FREQ_COEFFS, (8)) /*! sbr_guideScfb[ <br> Dimension #MAX_NUM_CHANNELS*#MAX_FREQ_COEFFS] */ -C_ALLOC_MEM2 (Ram_Sbr_guideScfb, UCHAR, MAX_FREQ_COEFFS, (6)) +C_ALLOC_MEM2 (Ram_Sbr_guideScfb, UCHAR, MAX_FREQ_COEFFS, (8)) /*! sbr_guideVectorDetected <br> Dimension #MAX_NUM_CHANNELS*#MAX_NO_OF_ESTIMATES*#MAX_FREQ_COEFFS] */ -C_ALLOC_MEM2 (Ram_Sbr_guideVectorDetected, UCHAR, (MAX_NO_OF_ESTIMATES*MAX_FREQ_COEFFS), (6)) -C_ALLOC_MEM2 (Ram_Sbr_guideVectorDiff, FIXP_DBL, (MAX_NO_OF_ESTIMATES*MAX_FREQ_COEFFS), (6)) -C_ALLOC_MEM2 (Ram_Sbr_guideVectorOrig, FIXP_DBL, (MAX_NO_OF_ESTIMATES*MAX_FREQ_COEFFS), (6)) +C_ALLOC_MEM2 (Ram_Sbr_guideVectorDetected, UCHAR, (MAX_NO_OF_ESTIMATES*MAX_FREQ_COEFFS), (8)) +C_ALLOC_MEM2 (Ram_Sbr_guideVectorDiff, FIXP_DBL, (MAX_NO_OF_ESTIMATES*MAX_FREQ_COEFFS), (8)) +C_ALLOC_MEM2 (Ram_Sbr_guideVectorOrig, FIXP_DBL, (MAX_NO_OF_ESTIMATES*MAX_FREQ_COEFFS), (8)) /* Static Parametric Stereo memory @@ -191,7 +191,7 @@ C_ALLOC_MEM (Ram_ParamStereo, PARAMETRIC_STEREO, 1) /*! Energy buffer for envelope extraction <br> Dimension #MAXNRSBRCHANNELS * +#SBR_QMF_SLOTS * #SBR_QMF_CHANNELS */ - C_ALLOC_MEM2 (Ram_Sbr_envYBuffer, FIXP_DBL, (QMF_MAX_TIME_SLOTS/2 * QMF_CHANNELS), (6)) + C_ALLOC_MEM2 (Ram_Sbr_envYBuffer, FIXP_DBL, (QMF_MAX_TIME_SLOTS/2 * QMF_CHANNELS), (8)) FIXP_DBL* GetRam_Sbr_envYBuffer (int n, UCHAR* dynamic_RAM) { FDK_ASSERT(dynamic_RAM!=0); diff --git a/libSBRenc/src/sbr_ram.h b/libSBRenc/src/sbr_ram.h index 0f9e9cc..7e3d0c8 100644 --- a/libSBRenc/src/sbr_ram.h +++ b/libSBRenc/src/sbr_ram.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRenc/src/sbr_rom.cpp b/libSBRenc/src/sbr_rom.cpp index c8b945f..a2b6527 100644 --- a/libSBRenc/src/sbr_rom.cpp +++ b/libSBRenc/src/sbr_rom.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -506,216 +506,277 @@ const UCHAR bookSbrNoiseBalanceL11T[25] = /* tuningTable */ -const sbrTuningTable_t sbrTuningTable[SBRENC_TUNING_SIZE] = +const sbrTuningTable_t sbrTuningTable[] = { + /* Some of the low bitrates are commented out here, this is because the + encoder could lose frames at those bitrates and throw an error because + it has insufficient bits to encode for some test items. + */ - /*** AAC ***/ + /*** HE-AAC section ***/ /* sf,sfsp,sf,sfsp,nnb,nfo,saml,SM,FS*/ /*** mono ***/ /* 8/16 kHz dual rate */ - { 8000, 10000, 8000, 1, 7, 6, 11,10, 1, 0, 6, SBR_MONO, 3 }, - { 10000, 12000, 8000, 1, 11, 7, 13,12, 1, 0, 6, SBR_MONO, 3 }, - { 12000, 16001, 8000, 1, 14,10, 13,13, 1, 0, 6, SBR_MONO, 3 }, - { 16000, 24000, 8000, 1, 14,10, 14,14, 2, 0, 3, SBR_MONO, 2 }, /* placebo */ - { 24000, 32000, 8000, 1, 14,10, 14,14, 2, 0, 3, SBR_MONO, 2 }, /* placebo */ - { 32000, 48001, 8000, 1, 14,11, 15,15, 2, 0, 3, SBR_MONO, 2 }, /* placebo */ /* bitrates higher than 48000 not supported by AAC core */ + { CODEC_AAC, 8000, 10000, 8000, 1, 7, 6, 11,10, 1, 0, 6, SBR_MONO, 3 }, + { CODEC_AAC, 10000, 12000, 8000, 1, 11, 7, 13,12, 1, 0, 6, SBR_MONO, 3 }, + { CODEC_AAC, 12000, 16001, 8000, 1, 14,10, 13,13, 1, 0, 6, SBR_MONO, 3 }, + { CODEC_AAC, 16000, 24000, 8000, 1, 14,10, 14,14, 2, 0, 3, SBR_MONO, 2 }, /* placebo */ + { CODEC_AAC, 24000, 32000, 8000, 1, 14,10, 14,14, 2, 0, 3, SBR_MONO, 2 }, /* placebo */ + { CODEC_AAC, 32000, 48001, 8000, 1, 14,11, 15,15, 2, 0, 3, SBR_MONO, 2 }, /* placebo */ /* bitrates higher than 48000 not supported by AAC core */ /* 11/22 kHz dual rate */ - { 8000, 10000, 11025, 1, 5, 4, 6, 6, 1, 0, 6, SBR_MONO, 3 }, - { 10000, 12000, 11025, 1, 8, 5, 12, 9, 1, 0, 6, SBR_MONO, 3 }, - { 12000, 16000, 11025, 1, 12, 8, 13, 8, 1, 0, 6, SBR_MONO, 3 }, - { 16000, 20000, 11025, 1, 12, 8, 13, 8, 1, 0, 6, SBR_MONO, 3 }, /* at such "high" bitrates it's better to upsample the input */ - { 20000, 24001, 11025, 1, 13, 9, 13, 8, 1, 0, 6, SBR_MONO, 3 }, /* signal by a factor of 2 before sending it into the encoder */ - { 24000, 32000, 11025, 1, 14,10, 14, 9, 2, 0, 3, SBR_MONO, 2 }, /* placebo */ - { 32000, 48000, 11025, 1, 15,11, 15,10, 2, 0, 3, SBR_MONO, 2 }, /* placebo */ - { 48000, 64001, 11025, 1, 15,11, 15,10, 2, 0, 3, SBR_MONO, 1 }, /* placebo */ + { CODEC_AAC, 8000, 10000, 11025, 1, 5, 4, 6, 6, 1, 0, 6, SBR_MONO, 3 }, + { CODEC_AAC, 10000, 12000, 11025, 1, 8, 5, 12, 9, 1, 0, 6, SBR_MONO, 3 }, + { CODEC_AAC, 12000, 16000, 11025, 1, 12, 8, 13, 8, 1, 0, 6, SBR_MONO, 3 }, + { CODEC_AAC, 16000, 20000, 11025, 1, 12, 8, 13, 8, 1, 0, 6, SBR_MONO, 3 }, /* at such "high" bitrates it's better to upsample the input */ + { CODEC_AAC, 20000, 24001, 11025, 1, 13, 9, 13, 8, 1, 0, 6, SBR_MONO, 3 }, /* signal by a factor of 2 before sending it into the encoder */ + { CODEC_AAC, 24000, 32000, 11025, 1, 14,10, 14, 9, 2, 0, 3, SBR_MONO, 2 }, /* placebo */ + { CODEC_AAC, 32000, 48000, 11025, 1, 15,11, 15,10, 2, 0, 3, SBR_MONO, 2 }, /* placebo */ + { CODEC_AAC, 48000, 64001, 11025, 1, 15,11, 15,10, 2, 0, 3, SBR_MONO, 1 }, /* placebo */ /* 12/24 kHz dual rate */ - { 8000, 10000, 12000, 1, 4, 3, 6, 6, 1, 0, 6, SBR_MONO, 3 }, /* nominal: 8 kbit/s */ - { 10000, 12000, 12000, 1, 7, 4, 11, 8, 1, 0, 6, SBR_MONO, 3 }, /* nominal: 10 kbit/s */ - { 12000, 16000, 12000, 1, 11, 7, 12, 8, 1, 0, 6, SBR_MONO, 3 }, /* nominal: 12 kbit/s */ - { 16000, 20000, 12000, 1, 11, 7, 12, 8, 1, 0, 6, SBR_MONO, 3 }, /* nominal: 16 kbit/s */ /* at such "high" bitrates it's better to upsample the input */ - { 20000, 24001, 12000, 1, 12, 8, 12, 8, 1, 0, 6, SBR_MONO, 3 }, /* nominal: 20 kbit/s */ /* signal by a factor of 2 before sending it into the encoder */ - { 24000, 32000, 12000, 1, 13, 9, 13, 9, 2, 0, 3, SBR_MONO, 2 }, /* placebo */ - { 32000, 48000, 12000, 1, 14,10, 14,10, 2, 0, 3, SBR_MONO, 2 }, /* placebo */ - { 48000, 64001, 12000, 1, 15,11, 15,11, 2, 0, 3, SBR_MONO, 1 }, /* placebo */ + { CODEC_AAC, 8000, 10000, 12000, 1, 4, 3, 6, 6, 1, 0, 6, SBR_MONO, 3 }, /* nominal: 8 kbit/s */ + { CODEC_AAC, 10000, 12000, 12000, 1, 7, 4, 11, 8, 1, 0, 6, SBR_MONO, 3 }, /* nominal: 10 kbit/s */ + { CODEC_AAC, 12000, 16000, 12000, 1, 11, 7, 12, 8, 1, 0, 6, SBR_MONO, 3 }, /* nominal: 12 kbit/s */ + { CODEC_AAC, 16000, 20000, 12000, 1, 11, 7, 12, 8, 1, 0, 6, SBR_MONO, 3 }, /* nominal: 16 kbit/s */ /* at such "high" bitrates it's better to upsample the input */ + { CODEC_AAC, 20000, 24001, 12000, 1, 12, 8, 12, 8, 1, 0, 6, SBR_MONO, 3 }, /* nominal: 20 kbit/s */ /* signal by a factor of 2 before sending it into the encoder */ + { CODEC_AAC, 24000, 32000, 12000, 1, 13, 9, 13, 9, 2, 0, 3, SBR_MONO, 2 }, /* placebo */ + { CODEC_AAC, 32000, 48000, 12000, 1, 14,10, 14,10, 2, 0, 3, SBR_MONO, 2 }, /* placebo */ + { CODEC_AAC, 48000, 64001, 12000, 1, 14,11, 15,11, 2, 0, 3, SBR_MONO, 1 }, /* placebo */ /* 16/32 kHz dual rate */ - { 8000, 10000, 16000, 1, 1, 1, 0, 0, 1, 0, 6, SBR_MONO, 3 }, /* nominal: 8 kbit/s */ - { 10000, 12000, 16000, 1, 2, 1, 6, 0, 1, 0, 6, SBR_MONO, 3 }, /* nominal: 10 kbit/s */ - { 12000, 16000, 16000, 1, 4, 2, 6, 0, 1, 0, 6, SBR_MONO, 3 }, /* nominal: 12 kbit/s */ - { 16000, 18000, 16000, 1, 4, 2, 8, 3, 1, 0, 6, SBR_MONO, 3 }, /* nominal: 16 kbit/s */ - { 18000, 22000, 16000, 1, 6, 5,11, 7, 2, 0, 6, SBR_MONO, 2 }, /* nominal: 20 kbit/s */ - { 22000, 28000, 16000, 1, 10, 9,12, 8, 2, 0, 6, SBR_MONO, 2 }, /* nominal: 24 kbit/s */ - { 28000, 36000, 16000, 1, 12,12,13,13, 2, 0, 3, SBR_MONO, 2 }, /* nominal: 32 kbit/s */ - { 36000, 44000, 16000, 1, 14,14,13,13, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 40 kbit/s */ - { 44000, 64001, 16000, 1, 15,15,13,13, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 48 kbit/s */ + { CODEC_AAC, 8000, 10000, 16000, 1, 1, 1, 0, 0, 1, 0, 6, SBR_MONO, 3 }, /* nominal: 8 kbit/s */ + { CODEC_AAC, 10000, 12000, 16000, 1, 2, 1, 6, 0, 1, 0, 6, SBR_MONO, 3 }, /* nominal: 10 kbit/s */ + { CODEC_AAC, 12000, 16000, 16000, 1, 4, 2, 6, 0, 1, 0, 6, SBR_MONO, 3 }, /* nominal: 12 kbit/s */ + { CODEC_AAC, 16000, 18000, 16000, 1, 4, 2, 8, 3, 1, 0, 6, SBR_MONO, 3 }, /* nominal: 16 kbit/s */ + { CODEC_AAC, 18000, 22000, 16000, 1, 6, 5,11, 7, 2, 0, 6, SBR_MONO, 2 }, /* nominal: 20 kbit/s */ + { CODEC_AAC, 22000, 28000, 16000, 1, 10, 9,12, 8, 2, 0, 6, SBR_MONO, 2 }, /* nominal: 24 kbit/s */ + { CODEC_AAC, 28000, 36000, 16000, 1, 12,12,13,13, 2, 0, 3, SBR_MONO, 2 }, /* nominal: 32 kbit/s */ + { CODEC_AAC, 36000, 44000, 16000, 1, 14,14,13,13, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 40 kbit/s */ + { CODEC_AAC, 44000, 64001, 16000, 1, 14,14,13,13, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 48 kbit/s */ /* 22.05/44.1 kHz dual rate */ - /* { 8000, 11369, 22050, 1, 1, 1, 1, 1, 1, 0, 6, SBR_MONO, 3 }, */ /* nominal: 8 kbit/s */ /* encoder can not work stable at this extremely low bitrate */ - { 11369, 16000, 22050, 1, 3, 1, 4, 4, 1, 0, 6, SBR_MONO, 3 }, /* nominal: 12 kbit/s */ - { 16000, 18000, 22050, 1, 3, 1, 5, 4, 1, 0, 6, SBR_MONO, 3 }, /* nominal: 16 kbit/s */ - { 18000, 22000, 22050, 1, 4, 4, 8, 5, 2, 0, 6, SBR_MONO, 2 }, /* nominal: 20 kbit/s */ - { 22000, 28000, 22050, 1, 7, 6, 8, 6, 2, 0, 6, SBR_MONO, 2 }, /* nominal: 24 kbit/s */ - { 28000, 36000, 22050, 1, 10,10, 9, 9, 2, 0, 3, SBR_MONO, 2 }, /* nominal: 32 kbit/s */ - { 36000, 44000, 22050, 1, 11,11,10,10, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 40 kbit/s */ - { 44000, 64001, 22050, 1, 13,13,12,12, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 48 kbit/s */ + /* { CODEC_AAC, 8000, 11369, 22050, 1, 1, 1, 1, 1, 1, 0, 6, SBR_MONO, 3 }, */ /* nominal: 8 kbit/s */ /* encoder can not work stable at this extremely low bitrate */ + { CODEC_AAC, 11369, 16000, 22050, 1, 3, 1, 4, 4, 1, 0, 6, SBR_MONO, 3 }, /* nominal: 12 kbit/s */ + { CODEC_AAC, 16000, 18000, 22050, 1, 3, 1, 5, 4, 1, 0, 6, SBR_MONO, 3 }, /* nominal: 16 kbit/s */ + { CODEC_AAC, 18000, 22000, 22050, 1, 4, 4, 8, 5, 2, 0, 6, SBR_MONO, 2 }, /* nominal: 20 kbit/s */ + { CODEC_AAC, 22000, 28000, 22050, 1, 7, 6, 8, 6, 2, 0, 6, SBR_MONO, 2 }, /* nominal: 24 kbit/s */ + { CODEC_AAC, 28000, 36000, 22050, 1, 10,10, 9, 9, 2, 0, 3, SBR_MONO, 2 }, /* nominal: 32 kbit/s */ + { CODEC_AAC, 36000, 44000, 22050, 1, 11,11,10,10, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 40 kbit/s */ + { CODEC_AAC, 44000, 64001, 22050, 1, 13,13,12,12, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 48 kbit/s */ /* 24/48 kHz dual rate */ - /* { 8000, 12000, 24000, 1, 1, 1, 1, 1, 1, 0, 6, SBR_MONO, 3 }, */ /* nominal: 8 kbit/s */ /* encoder can not work stable at this extremely low bitrate */ - { 12000, 16000, 24000, 1, 3, 1, 4, 4, 1, 0, 6, SBR_MONO, 3 }, /* nominal: 12 kbit/s */ - { 16000, 18000, 24000, 1, 3, 1, 5, 4, 1, 0, 6, SBR_MONO, 3 }, /* nominal: 16 kbit/s */ - { 18000, 22000, 24000, 1, 4, 3, 8, 5, 2, 0, 6, SBR_MONO, 2 }, /* nominal: 20 kbit/s */ - { 22000, 28000, 24000, 1, 7, 6, 8, 6, 2, 0, 6, SBR_MONO, 2 }, /* nominal: 24 kbit/s */ - { 28000, 36000, 24000, 1, 10,10, 9, 9, 2, 0, 3, SBR_MONO, 2 }, /* nominal: 32 kbit/s */ - { 36000, 44000, 24000, 1, 11,11,10,10, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 40 kbit/s */ - { 44000, 64001, 24000, 1, 13,13,11,11, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 48 kbit/s */ + /* { CODEC_AAC, 8000, 12000, 24000, 1, 1, 1, 1, 1, 1, 0, 6, SBR_MONO, 3 }, */ /* nominal: 8 kbit/s */ /* encoder can not work stable at this extremely low bitrate */ + { CODEC_AAC, 12000, 16000, 24000, 1, 3, 1, 4, 4, 1, 0, 6, SBR_MONO, 3 }, /* nominal: 12 kbit/s */ + { CODEC_AAC, 16000, 18000, 24000, 1, 3, 1, 5, 4, 1, 0, 6, SBR_MONO, 3 }, /* nominal: 16 kbit/s */ + { CODEC_AAC, 18000, 22000, 24000, 1, 4, 3, 8, 5, 2, 0, 6, SBR_MONO, 2 }, /* nominal: 20 kbit/s */ + { CODEC_AAC, 22000, 28000, 24000, 1, 7, 6, 8, 6, 2, 0, 6, SBR_MONO, 2 }, /* nominal: 24 kbit/s */ + { CODEC_AAC, 28000, 36000, 24000, 1, 10,10, 9, 9, 2, 0, 3, SBR_MONO, 2 }, /* nominal: 32 kbit/s */ + { CODEC_AAC, 36000, 44000, 24000, 1, 11,11,10,10, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 40 kbit/s */ + { CODEC_AAC, 44000, 64001, 24000, 1, 13,13,11,11, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 48 kbit/s */ /* 32/64 kHz dual rate */ /* placebo settings */ - { 24000, 36000, 32000, 1, 4, 4, 4, 4, 2, 0, 3, SBR_MONO, 3 }, /* lowest range */ - { 36000, 60000, 32000, 1, 7, 7, 6, 6, 2, 0, 3, SBR_MONO, 2 }, /* lowest range */ - { 60000, 72000, 32000, 1, 9, 9, 8, 8, 2, 0, 3, SBR_MONO, 1 }, /* low range */ - { 72000,100000, 32000, 1, 11,11,10,10, 2, 0, 3, SBR_MONO, 1 }, /* SBR sweet spot */ - { 100000,160001, 32000, 1, 13,13,11,11, 2, 0, 3, SBR_MONO, 1 }, /* backwards compatible */ + { CODEC_AAC, 24000, 36000, 32000, 1, 4, 4, 4, 4, 2, 0, 3, SBR_MONO, 3 }, /* lowest range */ + { CODEC_AAC, 36000, 60000, 32000, 1, 7, 7, 6, 6, 2, 0, 3, SBR_MONO, 2 }, /* lowest range */ + { CODEC_AAC, 60000, 72000, 32000, 1, 9, 9, 8, 8, 2, 0, 3, SBR_MONO, 1 }, /* low range */ + { CODEC_AAC, 72000,100000, 32000, 1, 11,11,10,10, 2, 0, 3, SBR_MONO, 1 }, /* SBR sweet spot */ + { CODEC_AAC, 100000,160001, 32000, 1, 13,13,11,11, 2, 0, 3, SBR_MONO, 1 }, /* backwards compatible */ /* 44.1/88.2 kHz dual rate */ /* placebo settings */ - { 24000, 36000, 44100, 1, 4, 4, 4, 4, 2, 0, 3, SBR_MONO, 3 }, /* lowest range (multichannel rear) */ - { 36000, 60000, 44100, 1, 7, 7, 6, 6, 2, 0, 3, SBR_MONO, 2 }, /* lowest range (multichannel rear) */ - { 60000, 72000, 44100, 1, 9, 9, 8, 8, 2, 0, 3, SBR_MONO, 1 }, /* low range */ - { 72000,100000, 44100, 1, 11,11,10,10, 2, 0, 3, SBR_MONO, 1 }, /* SBR sweet spot */ - { 100000,160001, 44100, 1, 13,13,11,11, 2, 0, 3, SBR_MONO, 1 }, /* backwards compatible */ + { CODEC_AAC, 24000, 36000, 44100, 1, 4, 4, 4, 4, 2, 0, 3, SBR_MONO, 3 }, /* lowest range (multichannel rear) */ + { CODEC_AAC, 36000, 60000, 44100, 1, 7, 7, 6, 6, 2, 0, 3, SBR_MONO, 2 }, /* lowest range (multichannel rear) */ + { CODEC_AAC, 60000, 72000, 44100, 1, 9, 9, 8, 8, 2, 0, 3, SBR_MONO, 1 }, /* low range */ + { CODEC_AAC, 72000,100000, 44100, 1, 11,11,10,10, 2, 0, 3, SBR_MONO, 1 }, /* SBR sweet spot */ + { CODEC_AAC, 100000,160001, 44100, 1, 13,13,11,11, 2, 0, 3, SBR_MONO, 1 }, /* backwards compatible */ /* 48/96 kHz dual rate */ /* not yet finally tuned */ - { 32000, 36000, 48000, 1, 4, 4, 9, 9, 2, 0, 3, SBR_MONO, 3 }, /* lowest range (multichannel rear) */ - { 36000, 60000, 48000, 1, 7, 7,10,10, 2, 0, 3, SBR_MONO, 2 }, /* nominal: 40 */ - { 60000, 72000, 48000, 1, 9, 9,10,10, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 64 */ - { 72000,100000, 48000, 1, 11,11,11,11, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 80 */ - { 100000,160001, 48000, 1, 13,13,11,11, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 128 */ + { CODEC_AAC, 32000, 36000, 48000, 1, 4, 4, 9, 9, 2, 0, 3, SBR_MONO, 3 }, /* lowest range (multichannel rear) */ + { CODEC_AAC, 36000, 60000, 48000, 1, 7, 7,10,10, 2, 0, 3, SBR_MONO, 2 }, /* nominal: 40 */ + { CODEC_AAC, 60000, 72000, 48000, 1, 9, 9,10,10, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 64 */ + { CODEC_AAC, 72000,100000, 48000, 1, 11,11,11,11, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 80 */ + { CODEC_AAC, 100000,160001, 48000, 1, 13,13,11,11, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 128 */ /*** stereo ***/ /* 08/16 kHz dual rate */ - { 16000, 24000, 8000, 2, 6, 6, 9, 7, 1, 0,-3, SBR_SWITCH_LRC, 3 }, /* nominal: 20 kbit/s */ /* placebo */ - { 24000, 28000, 8000, 2, 9, 9, 11, 9, 1, 0,-3, SBR_SWITCH_LRC, 3 }, /* nominal: 24 kbit/s */ - { 28000, 36000, 8000, 2, 11, 9, 11, 9, 2, 0,-3, SBR_SWITCH_LRC, 2 }, /* nominal: 32 kbit/s */ - { 36000, 44000, 8000, 2, 13,11, 13,11, 2, 0,-3, SBR_SWITCH_LRC, 2 }, /* nominal: 40 kbit/s */ - { 44000, 52000, 8000, 2, 14,12, 13,12, 2, 0,-3, SBR_SWITCH_LRC, 2 }, /* nominal: 48 kbit/s */ - { 52000, 60000, 8000, 2, 15,15, 13,13, 3, 0,-3, SBR_SWITCH_LRC, 1 }, /* nominal: 56 kbit/s */ - { 60000, 76000, 8000, 2, 15,15, 13,13, 3, 0,-3, SBR_LEFT_RIGHT, 1 }, /* nominal: 64 kbit/s */ - { 76000,128001, 8000, 2, 15,15, 13,13, 3, 0,-3, SBR_LEFT_RIGHT, 1 }, /* nominal: 80 kbit/s */ + { CODEC_AAC, 16000, 24000, 8000, 2, 6, 6, 9, 7, 1, 0,-3, SBR_SWITCH_LRC, 3 }, /* nominal: 20 kbit/s */ /* placebo */ + { CODEC_AAC, 24000, 28000, 8000, 2, 9, 9, 11, 9, 1, 0,-3, SBR_SWITCH_LRC, 3 }, /* nominal: 24 kbit/s */ + { CODEC_AAC, 28000, 36000, 8000, 2, 11, 9, 11, 9, 2, 0,-3, SBR_SWITCH_LRC, 2 }, /* nominal: 32 kbit/s */ + { CODEC_AAC, 36000, 44000, 8000, 2, 13,11, 13,11, 2, 0,-3, SBR_SWITCH_LRC, 2 }, /* nominal: 40 kbit/s */ + { CODEC_AAC, 44000, 52000, 8000, 2, 14,12, 13,12, 2, 0,-3, SBR_SWITCH_LRC, 2 }, /* nominal: 48 kbit/s */ + { CODEC_AAC, 52000, 60000, 8000, 2, 14,14, 13,13, 3, 0,-3, SBR_SWITCH_LRC, 1 }, /* nominal: 56 kbit/s */ + { CODEC_AAC, 60000, 76000, 8000, 2, 14,14, 13,13, 3, 0,-3, SBR_LEFT_RIGHT, 1 }, /* nominal: 64 kbit/s */ + { CODEC_AAC, 76000,128001, 8000, 2, 14,14, 13,13, 3, 0,-3, SBR_LEFT_RIGHT, 1 }, /* nominal: 80 kbit/s */ /* 11/22 kHz dual rate */ - { 16000, 24000, 11025, 2, 7, 5, 9, 7, 1, 0, -3, SBR_SWITCH_LRC, 3 }, /* nominal: 20 kbit/s */ /* placebo */ - { 24000, 28000, 11025, 2, 10, 8,10, 8, 1, 0, -3, SBR_SWITCH_LRC, 3 }, /* nominal: 24 kbit/s */ - { 28000, 36000, 11025, 2, 12, 8,12, 8, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 32 kbit/s */ - { 36000, 44000, 11025, 2, 13, 9,13, 9, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 40 kbit/s */ - { 44000, 52000, 11025, 2, 14,11,13,11, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 48 kbit/s */ - { 52000, 60000, 11025, 2, 15,15,13,13, 3, 0, -3, SBR_SWITCH_LRC, 1 }, /* nominal: 56 kbit/s */ - { 60000, 76000, 11025, 2, 15,15,13,13, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 64 kbit/s */ - { 76000,128001, 11025, 2, 15,15,13,13, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 80 kbit/s */ + { CODEC_AAC, 16000, 24000, 11025, 2, 7, 5, 9, 7, 1, 0, -3, SBR_SWITCH_LRC, 3 }, /* nominal: 20 kbit/s */ /* placebo */ + { CODEC_AAC, 24000, 28000, 11025, 2, 10, 8,10, 8, 1, 0, -3, SBR_SWITCH_LRC, 3 }, /* nominal: 24 kbit/s */ + { CODEC_AAC, 28000, 36000, 11025, 2, 12, 8,12, 8, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 32 kbit/s */ + { CODEC_AAC, 36000, 44000, 11025, 2, 13, 9,13, 9, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 40 kbit/s */ + { CODEC_AAC, 44000, 52000, 11025, 2, 14,11,13,11, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 48 kbit/s */ + { CODEC_AAC, 52000, 60000, 11025, 2, 15,15,13,13, 3, 0, -3, SBR_SWITCH_LRC, 1 }, /* nominal: 56 kbit/s */ + { CODEC_AAC, 60000, 76000, 11025, 2, 15,15,13,13, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 64 kbit/s */ + { CODEC_AAC, 76000,128001, 11025, 2, 15,15,13,13, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 80 kbit/s */ /* 12/24 kHz dual rate */ - { 16000, 24000, 12000, 2, 6, 4, 9, 7, 1, 0, -3, SBR_SWITCH_LRC, 3 }, /* nominal: 20 kbit/s */ /* placebo */ - { 24000, 28000, 12000, 2, 9, 7,10, 8, 1, 0, -3, SBR_SWITCH_LRC, 3 }, /* nominal: 24 kbit/s */ - { 28000, 36000, 12000, 2, 11, 7,12, 8, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 32 kbit/s */ - { 36000, 44000, 12000, 2, 12, 9,12, 9, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 40 kbit/s */ - { 44000, 52000, 12000, 2, 13,12,13,12, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 48 kbit/s */ - { 52000, 60000, 12000, 2, 14,14,13,13, 3, 0, -3, SBR_SWITCH_LRC, 1 }, /* nominal: 56 kbit/s */ - { 60000, 76000, 12000, 2, 15,15,13,13, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 64 kbit/s */ - { 76000,128001, 12000, 2, 15,15,13,13, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 80 kbit/s */ + { CODEC_AAC, 16000, 24000, 12000, 2, 6, 4, 9, 7, 1, 0, -3, SBR_SWITCH_LRC, 3 }, /* nominal: 20 kbit/s */ /* placebo */ + { CODEC_AAC, 24000, 28000, 12000, 2, 9, 7,10, 8, 1, 0, -3, SBR_SWITCH_LRC, 3 }, /* nominal: 24 kbit/s */ + { CODEC_AAC, 28000, 36000, 12000, 2, 11, 7,12, 8, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 32 kbit/s */ + { CODEC_AAC, 36000, 44000, 12000, 2, 12, 9,12, 9, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 40 kbit/s */ + { CODEC_AAC, 44000, 52000, 12000, 2, 13,12,13,12, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 48 kbit/s */ + { CODEC_AAC, 52000, 60000, 12000, 2, 14,14,13,13, 3, 0, -3, SBR_SWITCH_LRC, 1 }, /* nominal: 56 kbit/s */ + { CODEC_AAC, 60000, 76000, 12000, 2, 14,14,13,13, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 64 kbit/s */ + { CODEC_AAC, 76000,128001, 12000, 2, 14,14,13,13, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 80 kbit/s */ /* 16/32 kHz dual rate */ - { 16000, 24000, 16000, 2, 4, 2, 1, 0, 1, 0, -3, SBR_SWITCH_LRC, 3 }, /* nominal: 20 kbit/s */ - { 24000, 28000, 16000, 2, 8, 7,10, 8, 1, 0, -3, SBR_SWITCH_LRC, 3 }, /* nominal: 24 kbit/s */ - { 28000, 36000, 16000, 2, 10, 9,12,11, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 32 kbit/s */ - { 36000, 44000, 16000, 2, 13,13,13,13, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 40 kbit/s */ - { 44000, 52000, 16000, 2, 15,15,13,13, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 48 kbit/s */ - { 52000, 60000, 16000, 2, 15,15,13,13, 3, 0, -3, SBR_SWITCH_LRC, 1 }, /* nominal: 56 kbit/s */ - { 60000, 76000, 16000, 2, 15,15,13,13, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 64 kbit/s */ - { 76000,128001, 16000, 2, 15,15,13,13, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 80 kbit/s */ + { CODEC_AAC, 16000, 24000, 16000, 2, 4, 2, 1, 0, 1, 0, -3, SBR_SWITCH_LRC, 3 }, /* nominal: 20 kbit/s */ + { CODEC_AAC, 24000, 28000, 16000, 2, 8, 7,10, 8, 1, 0, -3, SBR_SWITCH_LRC, 3 }, /* nominal: 24 kbit/s */ + { CODEC_AAC, 28000, 36000, 16000, 2, 10, 9,12,11, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 32 kbit/s */ + { CODEC_AAC, 36000, 44000, 16000, 2, 13,13,13,13, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 40 kbit/s */ + { CODEC_AAC, 44000, 52000, 16000, 2, 14,14,13,13, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 48 kbit/s */ + { CODEC_AAC, 52000, 60000, 16000, 2, 14,14,13,13, 3, 0, -3, SBR_SWITCH_LRC, 1 }, /* nominal: 56 kbit/s */ + { CODEC_AAC, 60000, 76000, 16000, 2, 14,14,13,13, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 64 kbit/s */ + { CODEC_AAC, 76000,128001, 16000, 2, 14,14,13,13, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 80 kbit/s */ /* 22.05/44.1 kHz dual rate */ - { 16000, 24000, 22050, 2, 2, 1, 1, 0, 1, 0, -3, SBR_SWITCH_LRC, 3 }, /* nominal: 20 kbit/s */ - { 24000, 28000, 22050, 2, 5, 4, 6, 5, 1, 0, -3, SBR_SWITCH_LRC, 3 }, /* nominal: 24 kbit/s */ - { 28000, 32000, 22050, 2, 5, 4, 8, 7, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 28 kbit/s */ - { 32000, 36000, 22050, 2, 7, 6, 8, 7, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 32 kbit/s */ - { 36000, 44000, 22050, 2, 10,10, 9, 9, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 40 kbit/s */ - { 44000, 52000, 22050, 2, 12,12, 9, 9, 3, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 48 kbit/s */ - { 52000, 60000, 22050, 2, 13,13,10,10, 3, 0, -3, SBR_SWITCH_LRC, 1 }, /* nominal: 56 kbit/s */ - { 60000, 76000, 22050, 2, 14,14,12,12, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 64 kbit/s */ - { 76000,128001, 22050, 2, 14,14,12,12, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 80 kbit/s */ + { CODEC_AAC, 16000, 24000, 22050, 2, 2, 1, 1, 0, 1, 0, -3, SBR_SWITCH_LRC, 3 }, /* nominal: 20 kbit/s */ + { CODEC_AAC, 24000, 28000, 22050, 2, 5, 4, 6, 5, 1, 0, -3, SBR_SWITCH_LRC, 3 }, /* nominal: 24 kbit/s */ + { CODEC_AAC, 28000, 32000, 22050, 2, 5, 4, 8, 7, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 28 kbit/s */ + { CODEC_AAC, 32000, 36000, 22050, 2, 7, 6, 8, 7, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 32 kbit/s */ + { CODEC_AAC, 36000, 44000, 22050, 2, 10,10, 9, 9, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 40 kbit/s */ + { CODEC_AAC, 44000, 52000, 22050, 2, 12,12, 9, 9, 3, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 48 kbit/s */ + { CODEC_AAC, 52000, 60000, 22050, 2, 13,13,10,10, 3, 0, -3, SBR_SWITCH_LRC, 1 }, /* nominal: 56 kbit/s */ + { CODEC_AAC, 60000, 76000, 22050, 2, 14,14,12,12, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 64 kbit/s */ + { CODEC_AAC, 76000,128001, 22050, 2, 14,14,12,12, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 80 kbit/s */ /* 24/48 kHz dual rate */ - { 16000, 24000, 24000, 2, 2, 1, 1, 0, 1, 0, -3, SBR_SWITCH_LRC, 3 }, /* nominal: 20 kbit/s */ - { 24000, 28000, 24000, 2, 5, 5, 6, 6, 1, 0, -3, SBR_SWITCH_LRC, 3 }, /* nominal: 24 kbit/s */ - { 28000, 36000, 24000, 2, 7, 6, 8, 7, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 32 kbit/s */ - { 36000, 44000, 24000, 2, 10,10, 9, 9, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 40 kbit/s */ - { 44000, 52000, 24000, 2, 12,12, 9, 9, 3, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 48 kbit/s */ - { 52000, 60000, 24000, 2, 13,13,10,10, 3, 0, -3, SBR_SWITCH_LRC, 1 }, /* nominal: 56 kbit/s */ - { 60000, 76000, 24000, 2, 14,14,12,12, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 64 kbit/s */ - { 76000,128001, 24000, 2, 15,15,12,12, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 80 kbit/s */ + { CODEC_AAC, 16000, 24000, 24000, 2, 2, 1, 1, 0, 1, 0, -3, SBR_SWITCH_LRC, 3 }, /* nominal: 20 kbit/s */ + { CODEC_AAC, 24000, 28000, 24000, 2, 5, 5, 6, 6, 1, 0, -3, SBR_SWITCH_LRC, 3 }, /* nominal: 24 kbit/s */ + { CODEC_AAC, 28000, 36000, 24000, 2, 7, 6, 8, 7, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 32 kbit/s */ + { CODEC_AAC, 36000, 44000, 24000, 2, 10,10, 9, 9, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 40 kbit/s */ + { CODEC_AAC, 44000, 52000, 24000, 2, 12,12, 9, 9, 3, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 48 kbit/s */ + { CODEC_AAC, 52000, 60000, 24000, 2, 13,13,10,10, 3, 0, -3, SBR_SWITCH_LRC, 1 }, /* nominal: 56 kbit/s */ + { CODEC_AAC, 60000, 76000, 24000, 2, 14,14,12,12, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 64 kbit/s */ + { CODEC_AAC, 76000,128001, 24000, 2, 14,14,12,12, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 80 kbit/s */ /* 32/64 kHz dual rate */ /* placebo settings */ - { 32000, 60000, 32000, 2, 4, 4, 4, 4, 2, 0, -3, SBR_SWITCH_LRC, 3 }, /* lowest range (multichannel rear) */ - { 60000, 80000, 32000, 2, 7, 7, 6, 6, 3, 0, -3, SBR_SWITCH_LRC, 2 }, /* lowest range (multichannel rear) */ - { 80000,112000, 32000, 2, 9, 9, 8, 8, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* low range */ - { 112000,144000, 32000, 2, 11,11,10,10, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* SBR sweet spot */ - { 144000,256001, 32000, 2, 13,13,11,11, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* backwards compatible */ + { CODEC_AAC, 32000, 60000, 32000, 2, 4, 4, 4, 4, 2, 0, -3, SBR_SWITCH_LRC, 3 }, /* lowest range (multichannel rear) */ + { CODEC_AAC, 60000, 80000, 32000, 2, 7, 7, 6, 6, 3, 0, -3, SBR_SWITCH_LRC, 2 }, /* lowest range (multichannel rear) */ + { CODEC_AAC, 80000,112000, 32000, 2, 9, 9, 8, 8, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* low range */ + { CODEC_AAC, 112000,144000, 32000, 2, 11,11,10,10, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* SBR sweet spot */ + { CODEC_AAC, 144000,256001, 32000, 2, 13,13,11,11, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* backwards compatible */ /* 44.1/88.2 kHz dual rate */ /* placebo settings */ - { 32000, 60000, 44100, 2, 4, 4, 4, 4, 2, 0, -3, SBR_SWITCH_LRC, 3 }, /* lowest range (multichannel rear) */ - { 60000, 80000, 44100, 2, 7, 7, 6, 6, 3, 0, -3, SBR_SWITCH_LRC, 2 }, /* lowest range (multichannel rear) */ - { 80000,112000, 44100, 2, 9, 9, 8, 8, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* low range */ - { 112000,144000, 44100, 2, 11,11,10,10, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* SBR sweet spot */ - { 144000,256001, 44100, 2, 13,13,11,11, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* backwards compatible */ + { CODEC_AAC, 32000, 60000, 44100, 2, 4, 4, 4, 4, 2, 0, -3, SBR_SWITCH_LRC, 3 }, /* lowest range (multichannel rear) */ + { CODEC_AAC, 60000, 80000, 44100, 2, 7, 7, 6, 6, 3, 0, -3, SBR_SWITCH_LRC, 2 }, /* lowest range (multichannel rear) */ + { CODEC_AAC, 80000,112000, 44100, 2, 9, 9, 8, 8, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* low range */ + { CODEC_AAC, 112000,144000, 44100, 2, 11,11,10,10, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* SBR sweet spot */ + { CODEC_AAC, 144000,256001, 44100, 2, 13,13,11,11, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* backwards compatible */ /* 48/96 kHz dual rate */ /* not yet finally tuned */ - { 36000, 60000, 48000, 2, 4, 4, 9, 9, 2, 0, -3, SBR_SWITCH_LRC, 3 }, /* lowest range (multichannel rear) */ - { 60000, 80000, 48000, 2, 7, 7, 9, 9, 3, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 64 */ - { 80000,112000, 48000, 2, 9, 9,10,10, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 96 */ - { 112000,144000, 48000, 2, 11,11,11,11, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 128 */ - { 144000,256001, 48000, 2, 13,13,11,11, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 192 */ + { CODEC_AAC, 36000, 60000, 48000, 2, 4, 4, 9, 9, 2, 0, -3, SBR_SWITCH_LRC, 3 }, /* lowest range (multichannel rear) */ + { CODEC_AAC, 60000, 80000, 48000, 2, 7, 7, 9, 9, 3, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 64 */ + { CODEC_AAC, 80000,112000, 48000, 2, 9, 9,10,10, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 96 */ + { CODEC_AAC, 112000,144000, 48000, 2, 11,11,11,11, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 128 */ + { CODEC_AAC, 144000,256001, 48000, 2, 13,13,11,11, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 192 */ + /** AAC LOW DELAY SECTION **/ + /*** mono ***/ + /* 16/32 kHz dual rate not yet tuned ->alb copied from non LD tables*/ + { CODEC_AACLD, 16000, 18000, 16000, 1, 4, 5, 9, 7, 1, 0, 6, SBR_MONO, 3 }, /* nominal: 16 kbit/s wrr: tuned */ + { CODEC_AACLD, 18000, 22000, 16000, 1, 7, 7,12,12, 1, 6, 9, SBR_MONO, 3 }, /* nominal: 20 kbit/s wrr: tuned */ + { CODEC_AACLD, 22000, 28000, 16000, 1, 6, 6, 9, 9, 2, 3, 6, SBR_MONO, 3 }, /* nominal: 24 kbit/s wrr: tuned */ + { CODEC_AACLD, 28000, 36000, 16000, 1, 8, 8,12, 7, 2, 9,12, SBR_MONO, 3 }, /* jgr: special */ /* wrr: tuned */ + { CODEC_AACLD, 36000, 44000, 16000, 1, 10,14,12,13, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 40 kbit/s */ + { CODEC_AACLD, 44000, 64001, 16000, 1, 11,14,13,13, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 48 kbit/s */ + /* 22.05/44.1 kHz dual rate */ - { 18000, 22000, 22050, 1, 4, 4, 5, 5, 2, 0, 6, SBR_MONO, 2 }, /* nominal: 20 kbit/s */ - { 22000, 28000, 22050, 1, 4, 4, 6, 5, 2, 0, 6, SBR_MONO, 2 }, /* nominal: 24 kbit/s */ - { 28000, 36000, 22050, 1, 7, 8, 8, 8, 2, 0, 3, SBR_MONO, 2 }, /* nominal: 32 kbit/s */ - { 36000, 44000, 22050, 1, 9, 9, 9, 9, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 40 kbit/s */ - { 44000, 52000, 22050, 1, 11,11,11,11, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 48 kbit/s */ - { 52000, 64001, 22050, 1, 12,11,11,11, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 56 kbit/s */ + { CODEC_AACLD, 18000, 22000, 22050, 1, 4, 4, 5, 5, 2, 0, 6, SBR_MONO, 3 }, /* nominal: 20 kbit/s */ + { CODEC_AACLD, 22000, 28000, 22050, 1, 5, 5, 6, 6, 2, 0, 6, SBR_MONO, 2 }, /* nominal: 24 kbit/s */ + { CODEC_AACLD, 28000, 36000, 22050, 1, 7, 8, 8, 8, 2, 0, 3, SBR_MONO, 2 }, /* nominal: 32 kbit/s */ + { CODEC_AACLD, 36000, 44000, 22050, 1, 9, 9, 9, 9, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 40 kbit/s */ + { CODEC_AACLD, 44000, 52000, 22050, 1, 12,11,11,11, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 48 kbit/s */ + { CODEC_AACLD, 52000, 64001, 22050, 1, 13,11,11,10, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 56 kbit/s */ /* 24/48 kHz dual rate */ - { 20000, 22000, 24000, 1, 4, 4, 5, 5, 2, 0, 6, SBR_MONO, 2 }, /* nominal: 20 kbit/s */ - { 22000, 28000, 24000, 1, 4, 4, 6, 5, 2, 0, 6, SBR_MONO, 2 }, /* nominal: 24 kbit/s */ - { 28000, 36000, 24000, 1, 6, 8, 8, 8, 2, 0, 3, SBR_MONO, 2 }, /* nominal: 32 kbit/s */ - { 36000, 44000, 24000, 1, 8, 9, 9, 9, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 40 kbit/s */ - { 44000, 52000, 24000, 1, 12,11,11,10, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 48 kbit/s */ - { 52000, 64001, 24000, 1, 13,11,11,10, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 48 kbit/s */ + { CODEC_AACLD, 20000, 22000, 24000, 1, 4, 1, 8, 4, 2, 3, 6, SBR_MONO, 2 }, /* nominal: 20 kbit/s */ + { CODEC_AACLD, 22000, 28000, 24000, 1, 3, 8, 8, 7, 2, 0, 3, SBR_MONO, 2 }, /* nominal: 24 kbit/s */ + { CODEC_AACLD, 28000, 36000, 24000, 1, 4, 8, 8, 7, 2, 0, 3, SBR_MONO, 2 }, /* nominal: 32 kbit/s */ + { CODEC_AACLD, 36000, 56000, 24000, 1, 8, 9, 9, 9, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 40 kbit/s */ + { CODEC_AACLD, 56000, 64001, 24000, 1, 13,11,11,10, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 64 kbit/s */ + + /* 32/64 kHz dual rate */ /* placebo settings */ /*jgr: new, copy from CODEC_AAC */ + { CODEC_AACLD, 24000, 36000, 32000, 1, 4, 4, 4, 4, 2, 0, 3, SBR_MONO, 3 }, /* lowest range */ + { CODEC_AACLD, 36000, 60000, 32000, 1, 7, 7, 6, 6, 2, 0, 3, SBR_MONO, 2 }, /* lowest range */ + { CODEC_AACLD, 60000, 72000, 32000, 1, 9, 9, 8, 8, 2, 0, 3, SBR_MONO, 1 }, /* low range */ + { CODEC_AACLD, 72000,100000, 32000, 1, 11,11,10,10, 2, 0, 3, SBR_MONO, 1 }, /* SBR sweet spot */ + { CODEC_AACLD, 100000,160001, 32000, 1, 13,13,11,11, 2, 0, 3, SBR_MONO, 1 }, /* backwards compatible */ + + /* 44/88 kHz dual rate */ /* not yet finally tuned */ + { CODEC_AACLD, 36000, 60000, 44100, 1, 8, 7, 6, 9, 2, 0, 3, SBR_MONO, 2 }, /* nominal: 40 */ + { CODEC_AACLD, 60000, 72000, 44100, 1, 9, 9,10,10, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 64 */ + { CODEC_AACLD, 72000,100000, 44100, 1, 11,11,11,11, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 80 */ + { CODEC_AACLD, 100000,160001, 44100, 1, 13,13,11,11, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 128 */ + + /* 48/96 kHz dual rate */ /* 32 and 40kbps line tuned for dual-rate SBR */ + { CODEC_AACLD, 36000, 60000, 48000, 1, 8, 7, 6, 9, 2, 0, 3, SBR_MONO, 2 }, /* nominal: 40 */ + { CODEC_AACLD, 60000, 72000, 48000, 1, 9, 9,10,10, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 64 */ + { CODEC_AACLD, 72000,100000, 48000, 1, 11,11,11,11, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 80 */ + { CODEC_AACLD, 100000,160001, 48000, 1, 13,13,11,11, 2, 0, 3, SBR_MONO, 1 }, /* nominal: 128 */ + + /*** stereo ***/ + /* 16/32 kHz dual rate not yet tuned ->alb copied from non LD tables*/ + { CODEC_AACLD, 32000, 36000, 16000, 2, 10, 9,12,11, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 32 kbit/s */ + { CODEC_AACLD, 36000, 44000, 16000, 2, 13,13,13,13, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 40 kbit/s */ + { CODEC_AACLD, 44000, 52000, 16000, 2, 10, 9,11, 9, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* tune12 nominal: 48 kbit/s */ + { CODEC_AACLD, 52000, 60000, 16000, 2, 14,14,13,13, 3, 0, -3, SBR_SWITCH_LRC, 1 }, /* nominal: 56 kbit/s */ + { CODEC_AACLD, 60000, 76000, 16000, 2, 14,14,13,13, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 64 kbit/s */ + { CODEC_AACLD, 76000,128001, 16000, 2, 14,14,13,13, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 80 kbit/s */ /* 22.05/44.1 kHz dual rate */ - { 32000, 36000, 22050, 2, 5, 4, 7, 6, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 32 kbit/s */ - { 36000, 44000, 22050, 2, 5, 8, 8, 8, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 40 kbit/s */ - { 44000, 52000, 22050, 2, 7,10, 8, 8, 3, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 48 kbit/s */ - { 52000, 60000, 22050, 2, 9,11, 9, 9, 3, 0, -3, SBR_SWITCH_LRC, 1 }, /* nominal: 56 kbit/s */ - { 60000, 76000, 22050, 2, 10,12,10,11, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 64 kbit/s */ - { 76000, 82000, 22050, 2, 12,12,11,11, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 80 kbit/s */ - { 82000,128001, 22050, 2, 13,12,11,11, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 80 kbit/s */ + { CODEC_AACLD, 32000, 36000, 22050, 2, 5, 4, 7, 6, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 32 kbit/s */ + { CODEC_AACLD, 36000, 44000, 22050, 2, 5, 8, 8, 8, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 40 kbit/s */ + { CODEC_AACLD, 44000, 52000, 22050, 2, 7,10, 8, 8, 3, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 48 kbit/s */ + { CODEC_AACLD, 52000, 60000, 22050, 2, 9,11, 9, 9, 3, 0, -3, SBR_SWITCH_LRC, 1 }, /* nominal: 56 kbit/s */ + { CODEC_AACLD, 60000, 76000, 22050, 2, 10,12,10,11, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 64 kbit/s */ + { CODEC_AACLD, 76000, 82000, 22050, 2, 12,12,11,11, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 80 kbit/s */ + { CODEC_AACLD, 82000,128001, 22050, 2, 13,12,11,11, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 80 kbit/s */ /* 24/48 kHz dual rate */ - { 32000, 36000, 24000, 2, 5, 4, 7, 6, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 32 kbit/s */ - { 36000, 44000, 24000, 2, 4, 8, 8, 8, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 40 kbit/s */ - { 44000, 52000, 24000, 2, 6,10, 8, 8, 3, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 48 kbit/s */ - { 52000, 60000, 24000, 2, 9,11, 9, 9, 3, 0, -3, SBR_SWITCH_LRC, 1 }, /* nominal: 56 kbit/s */ - { 60000, 76000, 24000, 2, 11,12,10,11, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 64 kbit/s */ - { 76000, 88000, 24000, 2, 12,13,11,11, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 80 kbit/s */ - { 88000,128001, 24000, 2, 13,13,11,11, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 92 kbit/s */ - + { CODEC_AACLD, 32000, 36000, 24000, 2, 5, 4, 7, 6, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 32 kbit/s */ + { CODEC_AACLD, 36000, 44000, 24000, 2, 4, 8, 8, 8, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 40 kbit/s */ + { CODEC_AACLD, 44000, 52000, 24000, 2, 6,10, 8, 8, 3, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 48 kbit/s */ + { CODEC_AACLD, 52000, 60000, 24000, 2, 9,11, 9, 9, 3, 0, -3, SBR_SWITCH_LRC, 1 }, /* nominal: 56 kbit/s */ + { CODEC_AACLD, 60000, 76000, 24000, 2, 11,12,10,11, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 64 kbit/s */ + { CODEC_AACLD, 76000, 88000, 24000, 2, 12,13,11,11, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 80 kbit/s */ + { CODEC_AACLD, 88000,128001, 24000, 2, 13,13,11,11, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 92 kbit/s */ + + /* 32/64 kHz dual rate */ /* placebo settings */ /*jgr: new, copy from CODEC_AAC */ + { CODEC_AACLD, 60000, 80000, 32000, 2, 7, 7, 6, 6, 3, 0, -3, SBR_SWITCH_LRC, 2 }, /* lowest range (multichannel rear) */ + { CODEC_AACLD, 80000,112000, 32000, 2, 9, 9, 8, 8, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* low range */ + { CODEC_AACLD, 112000,144000, 32000, 2, 11,11,10,10, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* SBR sweet spot */ + { CODEC_AACLD, 144000,256001, 32000, 2, 13,13,11,11, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* backwards compatible */ + + /* 44.1/88.2 kHz dual rate */ /* placebo settings */ /*wrr: new, copy from CODEC_AAC */ + { CODEC_AACLD, 60000, 80000, 44100, 2, 7, 7, 6, 6, 3, 0, -3, SBR_SWITCH_LRC, 2 }, /* lowest range (multichannel rear) */ + { CODEC_AACLD, 80000,112000, 44100, 2, 10,10, 8, 8, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* hlm 11-08-29 */ + { CODEC_AACLD, 112000,144000, 44100, 2, 12,12,10,10, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* hlm 11-08-29 */ + { CODEC_AACLD, 144000,256001, 44100, 2, 13,13,11,11, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* backwards compatible */ + + /* 48/96 kHz dual rate */ /* not yet finally tuned */ /*wrr: new, copy from CODEC_AAC */ + { CODEC_AACLD, 60000, 80000, 48000, 2, 7, 7,10,10, 2, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 64 */ + { CODEC_AACLD, 80000,112000, 48000, 2, 9, 9,10,10, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 96 */ + { CODEC_AACLD, 112000,144000, 48000, 2, 11,11,11,11, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* nominal: 128 */ + { CODEC_AACLD, 144000,176000, 48000, 2, 12,12,11,11, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* hlm 09-10-19 */ + { CODEC_AACLD, 176000,256001, 48000, 2, 13,13,11,11, 3, 0, -3, SBR_LEFT_RIGHT, 1 }, /* hlm 09-10-19 */ }; +const int sbrTuningTableSize = sizeof(sbrTuningTable)/sizeof(sbrTuningTable[0]); + const psTuningTable_t psTuningTable[4] = { { 8000, 22000, PSENC_STEREO_BANDS_10, PSENC_NENV_1, FL2FXCONST_DBL(3.0f/4.0f) }, diff --git a/libSBRenc/src/sbr_rom.h b/libSBRenc/src/sbr_rom.h index e79a730..afa924e 100644 --- a/libSBRenc/src/sbr_rom.h +++ b/libSBRenc/src/sbr_rom.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -118,13 +118,8 @@ extern const UCHAR v_Huff_NoiseLevelL11T[63]; extern const INT bookSbrNoiseBalanceC11T[25]; extern const UCHAR bookSbrNoiseBalanceL11T[25]; -#define SBRENC_AACLC_TUNING_SIZE 124 -#define SBRENC_AACELD_TUNING_SIZE (26) -#define SBRENC_AACELD2_TUNING_SIZE (26) - -#define SBRENC_TUNING_SIZE (SBRENC_AACLC_TUNING_SIZE + SBRENC_AACELD_TUNING_SIZE) - -extern const sbrTuningTable_t sbrTuningTable[SBRENC_TUNING_SIZE]; +extern const sbrTuningTable_t sbrTuningTable[]; +extern const int sbrTuningTableSize; extern const psTuningTable_t psTuningTable[4]; diff --git a/libSBRenc/src/sbrenc_freq_sca.cpp b/libSBRenc/src/sbrenc_freq_sca.cpp index bbcb29e..30bc5ca 100644 --- a/libSBRenc/src/sbrenc_freq_sca.cpp +++ b/libSBRenc/src/sbrenc_freq_sca.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -84,6 +84,7 @@ amm-info@iis.fraunhofer.de /*! \file \brief frequency scale + \author Tobias Chalupka */ #include "sbrenc_freq_sca.h" @@ -92,10 +93,10 @@ amm-info@iis.fraunhofer.de #include "genericStds.h" /* StartFreq */ -static INT getStartFreq(INT fs, const INT start_freq); +static INT getStartFreq(INT fsCore, const INT start_freq); /* StopFreq */ -static INT getStopFreq(INT fs, const INT stop_freq, const INT noChannels); +static INT getStopFreq(INT fsCore, const INT stop_freq); static INT numberOfBands(INT b_p_o, INT start, INT stop, FIXP_DBL warp_factor); static void CalcBands(INT * diff, INT start , INT stop , INT num_bands); @@ -115,7 +116,7 @@ static void cumSum(INT start_value, INT* diff, INT length, UCHAR *start_adress) *******************************************************************************/ INT -FDKsbrEnc_getSbrStartFreqRAW (INT startFreq, INT QMFbands, INT fs) +FDKsbrEnc_getSbrStartFreqRAW (INT startFreq, INT fsCore) { INT result; @@ -123,9 +124,9 @@ FDKsbrEnc_getSbrStartFreqRAW (INT startFreq, INT QMFbands, INT fs) return -1; } /* Update startFreq struct */ - result = getStartFreq(fs, startFreq); + result = getStartFreq(fsCore, startFreq); - result = (result*fs/QMFbands+1)>>1; + result = (result*(fsCore>>5)+1)>>1; /* (result*fsSBR/QMFbands+1)>>1; */ return (result); @@ -141,17 +142,16 @@ FDKsbrEnc_getSbrStartFreqRAW (INT startFreq, INT QMFbands, INT fs) Return: *******************************************************************************/ -INT FDKsbrEnc_getSbrStopFreqRAW (INT stopFreq, INT QMFbands, INT fs) +INT FDKsbrEnc_getSbrStopFreqRAW (INT stopFreq, INT fsCore) { INT result; if ( stopFreq < 0 || stopFreq > 13) return -1; - /* Uppdate stopFreq struct */ - result = getStopFreq( fs, stopFreq, QMFbands); - result = (result*fs/QMFbands+1)>>1; + result = getStopFreq(fsCore, stopFreq); + result = (result*(fsCore>>5)+1)>>1; /* (result*fsSBR/QMFbands+1)>>1; */ return (result); } /* End getSbrStopFreq */ @@ -162,69 +162,73 @@ INT FDKsbrEnc_getSbrStopFreqRAW (INT stopFreq, INT QMFbands, INT fs) ******************************************************************************* Description: - Arguments: + Arguments: fsCore - core sampling rate + Return: *******************************************************************************/ static INT -getStartFreq(INT fs, const INT start_freq) +getStartFreq(INT fsCore, const INT start_freq) { INT k0_min; - switch(fs){ - case 16000: k0_min = 24; + switch(fsCore){ + case 8000: k0_min = 24; /* (3000 * nQmfChannels / fsSBR ) + 0.5 */ break; - case 22050: k0_min = 17; + case 11025: k0_min = 17; /* (3000 * nQmfChannels / fsSBR ) + 0.5 */ break; - case 24000: k0_min = 16; + case 12000: k0_min = 16; /* (3000 * nQmfChannels / fsSBR ) + 0.5 */ break; - case 32000: k0_min = 16; + case 16000: k0_min = 16; /* (4000 * nQmfChannels / fsSBR ) + 0.5 */ break; - case 44100: k0_min = 12; + case 22050: k0_min = 12; /* (4000 * nQmfChannels / fsSBR ) + 0.5 */ break; - case 48000: k0_min = 11; + case 24000: k0_min = 11; /* (4000 * nQmfChannels / fsSBR ) + 0.5 */ break; - case 64000: k0_min = 10; + case 32000: k0_min = 10; /* (5000 * nQmfChannels / fsSBR ) + 0.5 */ break; - case 88200: k0_min = 7; + case 44100: k0_min = 7; /* (5000 * nQmfChannels / fsSBR ) + 0.5 */ break; - case 96000: k0_min = 7; + case 48000: k0_min = 7; /* (5000 * nQmfChannels / fsSBR ) + 0.5 */ + break; + case 96000: k0_min = 3; /* (5000 * nQmfChannels / fsSBR ) + 0.5 */ break; default: k0_min=11; /* illegal fs */ } - switch (fs) { + switch (fsCore) { - case 16000: + case 8000: { INT v_offset[]= {-8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7}; return (k0_min + v_offset[start_freq]); } - case 22050: + case 11025: { INT v_offset[]= {-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 9, 11, 13}; return (k0_min + v_offset[start_freq]); } - case 24000: + case 12000: { INT v_offset[]= {-5, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 9, 11, 13, 16}; return (k0_min + v_offset[start_freq]); } - case 32000: + case 16000: { INT v_offset[]= {-6, -4, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 9, 11, 13, 16}; return (k0_min + v_offset[start_freq]); } - case 44100: - case 48000: - case 64000: + case 22050: + case 24000: + case 32000: { INT v_offset[]= {-4, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 9, 11, 13, 16, 20}; return (k0_min + v_offset[start_freq]); } - case 88200: + case 44100: + case 48000: case 96000: { INT v_offset[]= {-2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 9, 11, 13, 16, 20, 24}; @@ -249,13 +253,12 @@ getStartFreq(INT fs, const INT start_freq) Return: *******************************************************************************/ static INT -getStopFreq(INT fs, const INT stop_freq, const INT noChannels) +getStopFreq(INT fsCore, const INT stop_freq) { INT result,i; INT k1_min; INT v_dstop[13]; - INT *v_stop_freq = NULL; INT v_stop_freq_16[14] = {48,49,50,51,52,54,55,56,57,59,60,61,63,64}; INT v_stop_freq_22[14] = {35,37,38,40,42,44,46,48,51,53,56,58,61,64}; @@ -266,40 +269,45 @@ getStopFreq(INT fs, const INT stop_freq, const INT noChannels) INT v_stop_freq_64[14] = {20,22,24,26,29,31,34,37,41,45,49,54,59,64}; INT v_stop_freq_88[14] = {15,17,19,21,23,26,29,33,37,41,46,51,57,64}; INT v_stop_freq_96[14] = {13,15,17,19,21,24,27,31,35,39,44,50,57,64}; + INT v_stop_freq_192[14] = {7, 8,10,12,14,16,19,23,27,32,38,46,54,64}; - switch(fs){ - case 16000: k1_min = 48; + switch(fsCore){ + case 8000: k1_min = 48; v_stop_freq =v_stop_freq_16; break; - case 22050: k1_min = 35; + case 11025: k1_min = 35; v_stop_freq =v_stop_freq_22; break; - case 24000: k1_min = 32; + case 12000: k1_min = 32; v_stop_freq =v_stop_freq_24; break; - case 32000: k1_min = 32; + case 16000: k1_min = 32; v_stop_freq =v_stop_freq_32; break; - case 44100: k1_min = 23; + case 22050: k1_min = 23; v_stop_freq =v_stop_freq_44; break; - case 48000: k1_min = 21; + case 24000: k1_min = 21; v_stop_freq =v_stop_freq_48; break; - case 64000: k1_min = 20; + case 32000: k1_min = 20; v_stop_freq =v_stop_freq_64; break; - case 88200: k1_min = 15; + case 44100: k1_min = 15; v_stop_freq =v_stop_freq_88; break; - case 96000: k1_min = 13; + case 48000: k1_min = 13; v_stop_freq =v_stop_freq_96; break; + case 96000: k1_min = 7; + v_stop_freq =v_stop_freq_192; + break; default: k1_min = 21; /* illegal fs */ } - + /* if no valid core samplingrate is used this loop produces + a segfault, because v_stop_freq is not initialized */ /* Ensure increasing bandwidth */ for(i = 0; i <= 12; i++) { v_dstop[i] = v_stop_freq[i+1] - v_stop_freq[i]; @@ -322,34 +330,41 @@ getStopFreq(INT fs, const INT stop_freq, const INT noChannels) ******************************************************************************* Description: - Arguments: + Arguments: srSbr SBR sampling freqency + srCore AAC core sampling freqency + noChannels Number of QMF channels + startFreq SBR start frequency in QMF bands + stopFreq SBR start frequency in QMF bands - Return: + *k0 Output parameter + *k2 Output parameter + + Return: Error code (0 is OK) *******************************************************************************/ INT -FDKsbrEnc_FindStartAndStopBand(const INT samplingFreq, - const INT noChannels, - const INT startFreq, - const INT stopFreq, - const SR_MODE sampleRateMode, - INT *k0, - INT *k2) +FDKsbrEnc_FindStartAndStopBand( + const INT srSbr, + const INT srCore, + const INT noChannels, + const INT startFreq, + const INT stopFreq, + INT *k0, + INT *k2 + ) { /* Update startFreq struct */ - *k0 = getStartFreq(samplingFreq, startFreq); + *k0 = getStartFreq(srCore, startFreq); /* Test if start freq is outside corecoder range */ - if( ( sampleRateMode == 1 ) && - ( samplingFreq*noChannels < - 2**k0 * samplingFreq) ) { + if( srSbr*noChannels < *k0 * srCore ) { return (1); /* raise the cross-over frequency and/or lower the number of target bands per octave (or lower the sampling frequency) */ } /*Update stopFreq struct */ if ( stopFreq < 14 ) { - *k2 = getStopFreq(samplingFreq, stopFreq, noChannels); + *k2 = getStopFreq(srCore, stopFreq); } else if( stopFreq == 14 ) { *k2 = 2 * *k0; } else { @@ -364,10 +379,10 @@ FDKsbrEnc_FindStartAndStopBand(const INT samplingFreq, /* Test for invalid k0 k2 combinations */ - if ( (samplingFreq == 44100) && ( (*k2 - *k0) > MAX_FREQ_COEFFS_FS44100 ) ) + if ( (srCore == 22050) && ( (*k2 - *k0) > MAX_FREQ_COEFFS_FS44100 ) ) return (1); /* Number of bands exceeds valid range of MAX_FREQ_COEFFS for fs=44.1kHz */ - if ( (samplingFreq >= 48000) && ( (*k2 - *k0) > MAX_FREQ_COEFFS_FS48000 ) ) + if ( (srCore >= 24000) && ( (*k2 - *k0) > MAX_FREQ_COEFFS_FS48000 ) ) return (1); /* Number of bands exceeds valid range of MAX_FREQ_COEFFS for fs>=48kHz */ if ((*k2 - *k0) > MAX_FREQ_COEFFS) @@ -390,15 +405,19 @@ FDKsbrEnc_FindStartAndStopBand(const INT samplingFreq, Return: *******************************************************************************/ INT -FDKsbrEnc_UpdateFreqScale(UCHAR *v_k_master, INT *h_num_bands, - const INT k0, const INT k2, - const INT freqScale, - const INT alterScale) +FDKsbrEnc_UpdateFreqScale( + UCHAR *v_k_master, + INT *h_num_bands, + const INT k0, + const INT k2, + const INT freqScale, + const INT alterScale + ) { INT b_p_o = 0; /* bands_per_octave */ - FIXP_DBL warp = FL2FXCONST_DBL(0.0f); + FIXP_DBL warp = FL2FXCONST_DBL(0.0f); INT dk = 0; /* Internal variables */ @@ -426,7 +445,7 @@ FDKsbrEnc_UpdateFreqScale(UCHAR *v_k_master, INT *h_num_bands, warp = FL2FXCONST_DBL(1.0f/2.6f); /* 1.0/(1.3*2.0); */ - if(4*k2 >= 9*k0) /*two or more regions*/ + if(4*k2 >= 9*k0) /*two or more regions (how many times the basis band is copied)*/ { k1=2*k0; @@ -592,30 +611,31 @@ modifyBands(INT max_band_previous, INT * diff, INT length) ******************************************************************************* Description: + Arguments: Return: *******************************************************************************/ INT -FDKsbrEnc_UpdateHiRes(UCHAR *h_hires, INT *num_hires,UCHAR * v_k_master, - INT num_master , INT *xover_band, SR_MODE drOrSr, - INT noQMFChannels) +FDKsbrEnc_UpdateHiRes( + UCHAR *h_hires, + INT *num_hires, + UCHAR *v_k_master, + INT num_master, + INT *xover_band + ) { INT i; - INT divider; INT max1,max2; - /* Check if we use a Dual rate => diver=2 else 1 */ - divider = (drOrSr == DUAL_RATE) ? 2 : 1; - - if( (v_k_master[*xover_band] > (noQMFChannels/divider) ) || + if( (v_k_master[*xover_band] > 32 ) || /* v_k_master[*xover_band] > noQMFChannels(dualRate)/divider */ ( *xover_band > num_master ) ) { /* xover_band error, too big for this startFreq. Will be clipped */ /* Calculate maximum value for xover_band */ max1=0; max2=num_master; - while( (v_k_master[max1+1] < (noQMFChannels/divider)) && + while( (v_k_master[max1+1] < 32 ) && /* noQMFChannels(dualRate)/divider */ ( (max1+1) < max2) ) { max1++; diff --git a/libSBRenc/src/sbrenc_freq_sca.h b/libSBRenc/src/sbrenc_freq_sca.h index 613694a..6f2bb84 100644 --- a/libSBRenc/src/sbrenc_freq_sca.h +++ b/libSBRenc/src/sbrenc_freq_sca.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -96,34 +96,42 @@ amm-info@iis.fraunhofer.de INT -FDKsbrEnc_UpdateFreqScale(UCHAR *v_k_master, INT *h_num_bands, - const INT k0, const INT k2, - const INT freq_scale, - const INT alter_scale); +FDKsbrEnc_UpdateFreqScale( + UCHAR *v_k_master, + INT *h_num_bands, + const INT k0, + const INT k2, + const INT freq_scale, + const INT alter_scale + ); INT -FDKsbrEnc_UpdateHiRes(UCHAR *h_hires, - INT *num_hires, - UCHAR *v_k_master, - INT num_master , - INT *xover_band, - SR_MODE drOrSr, - INT noQMFChannels); - -void FDKsbrEnc_UpdateLoRes(UCHAR * v_lores, - INT *num_lores, - UCHAR * v_hires, - INT num_hires); +FDKsbrEnc_UpdateHiRes( + UCHAR *h_hires, + INT *num_hires, + UCHAR *v_k_master, + INT num_master, + INT *xover_band + ); + +void FDKsbrEnc_UpdateLoRes( + UCHAR *v_lores, + INT *num_lores, + UCHAR *v_hires, + INT num_hires + ); INT -FDKsbrEnc_FindStartAndStopBand(const INT samplingFreq, - const INT noChannels, - const INT startFreq, - const INT stop_freq, - const SR_MODE sampleRateMode, - INT *k0, - INT *k2); - -INT FDKsbrEnc_getSbrStartFreqRAW (INT startFreq, INT QMFbands, INT fs ); -INT FDKsbrEnc_getSbrStopFreqRAW (INT stopFreq, INT QMFbands, INT fs); +FDKsbrEnc_FindStartAndStopBand( + const INT srSbr, + const INT srCore, + const INT noChannels, + const INT startFreq, + const INT stop_freq, + INT *k0, + INT *k2 + ); + +INT FDKsbrEnc_getSbrStartFreqRAW (INT startFreq, INT fsCore); +INT FDKsbrEnc_getSbrStopFreqRAW (INT stopFreq, INT fsCore); #endif diff --git a/libSBRenc/src/ton_corr.cpp b/libSBRenc/src/ton_corr.cpp index 3142870..224da11 100644 --- a/libSBRenc/src/ton_corr.cpp +++ b/libSBRenc/src/ton_corr.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -303,8 +303,6 @@ FDKsbrEnc_CalculateTonalityQuotas( HANDLE_SBR_TON_CORR_EST hTonCorr, /*!< H } } - FDK_ASSERT(noEstPerFrame == 2); - C_ALLOC_SCRATCH_END(realBuf, FIXP_DBL, 2*BAND_V_SIZE*NUM_V_COMBINE); C_ALLOC_SCRATCH_END(ac, ACORR_COEFS, 1); diff --git a/libSBRenc/src/ton_corr.h b/libSBRenc/src/ton_corr.h index a37eca5..8c8425c 100644 --- a/libSBRenc/src/ton_corr.h +++ b/libSBRenc/src/ton_corr.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRenc/src/tran_det.cpp b/libSBRenc/src/tran_det.cpp index b6cde99..1e0a59f 100644 --- a/libSBRenc/src/tran_det.cpp +++ b/libSBRenc/src/tran_det.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSBRenc/src/tran_det.h b/libSBRenc/src/tran_det.h index 7e9a93c..95b5d2e 100644 --- a/libSBRenc/src/tran_det.h +++ b/libSBRenc/src/tran_det.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSYS/include/FDK_audio.h b/libSYS/include/FDK_audio.h index 8e7041d..c8d9c19 100644 --- a/libSYS/include/FDK_audio.h +++ b/libSYS/include/FDK_audio.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -144,6 +144,12 @@ typedef enum } TRANSPORT_TYPE; +#define TT_IS_PACKET(x) \ + ( ((x) == TT_MP4_RAW) \ + || ((x) == TT_DRM) \ + || ((x) == TT_MP4_LATM_MCP0) \ + || ((x) == TT_MP4_LATM_MCP1) ) + /** * Audio Object Type definitions. */ @@ -228,28 +234,32 @@ typedef enum /** Channel Mode ( 1-7 equals MPEG channel configurations, others are arbitrary). */ typedef enum { - MODE_INVALID = -1, - MODE_UNKNOWN = 0, - MODE_1 = 1, /**< SCE */ - MODE_2 = 2, /**< CPE */ - MODE_1_2 = 3, /**< SCE,CPE */ - MODE_1_2_1 = 4, /**< SCE,CPE,SCE */ - MODE_1_2_2 = 5, /**< SCE,CPE,CPE */ - MODE_1_2_2_1 = 6, /**< SCE,CPE,CPE,LFE */ - MODE_1_2_2_2_1 = 7, /**< SCE,CPE,CPE,CPE,LFE */ - - MODE_1_1 = 16, /**< 2 SCEs (dual mono) */ - MODE_1_1_1_1 = 17, /**< 4 SCEs */ - MODE_1_1_1_1_1_1 = 18, /**< 6 SCEs */ - MODE_1_1_1_1_1_1_1_1 = 19, /**< 8 SCEs */ - MODE_1_1_1_1_1_1_1_1_1_1_1_1 = 20, /**< 12 SCEs */ - - MODE_2_2 = 21, /**< 2 CPEs */ - MODE_2_2_2 = 22, /**< 3 CPEs */ - MODE_2_2_2_2 = 23, /**< 4 CPEs */ - MODE_2_2_2_2_2_2 = 24, /**< 6 CPEs */ - - MODE_2_1 = 30 /**< CPE,SCE (ARIB standard) */ + MODE_INVALID = -1, + MODE_UNKNOWN = 0, + MODE_1 = 1, /**< C */ + MODE_2 = 2, /**< L+R */ + MODE_1_2 = 3, /**< C, L+R */ + MODE_1_2_1 = 4, /**< C, L+R, Rear */ + MODE_1_2_2 = 5, /**< C, L+R, LS+RS */ + MODE_1_2_2_1 = 6, /**< C, L+R, LS+RS, LFE */ + MODE_1_2_2_2_1 = 7, /**< C, LC+RC, L+R, LS+RS, LFE */ + + + MODE_1_1 = 16, /**< 2 SCEs (dual mono) */ + MODE_1_1_1_1 = 17, /**< 4 SCEs */ + MODE_1_1_1_1_1_1 = 18, /**< 6 SCEs */ + MODE_1_1_1_1_1_1_1_1 = 19, /**< 8 SCEs */ + MODE_1_1_1_1_1_1_1_1_1_1_1_1 = 20, /**< 12 SCEs */ + + MODE_2_2 = 21, /**< 2 CPEs */ + MODE_2_2_2 = 22, /**< 3 CPEs */ + MODE_2_2_2_2 = 23, /**< 4 CPEs */ + MODE_2_2_2_2_2_2 = 24, /**< 6 CPEs */ + + MODE_2_1 = 30, /**< CPE,SCE (ARIB standard B32) */ + + MODE_7_1_REAR_SURROUND = 33, /**< C, L+R, LS+RS, Lrear+Rrear, LFE */ + MODE_7_1_FRONT_CENTER = 34 /**< C, LC+RC, L+R, LS+RS, LFE */ } CHANNEL_MODE; @@ -266,6 +276,15 @@ typedef enum { ACT_TOP /* Ts */ } AUDIO_CHANNEL_TYPE; +typedef enum +{ + SIG_UNKNOWN = -1, + SIG_IMPLICIT = 0, + SIG_EXPLICIT_BW_COMPATIBLE = 1, + SIG_EXPLICIT_HIERARCHICAL = 2 + +} SBR_PS_SIGNALING; + /** * Audio Codec flags. */ @@ -328,6 +347,10 @@ typedef struct { UCHAR stereoConfigIndex; /**< USAC MPS stereo mode */ UCHAR sbrMode; /**< USAC SBR mode */ + SBR_PS_SIGNALING sbrSignaling;/**< 0: implicit signaling, 1: backwards compatible explicit signaling, 2: hierarcical explicit signaling */ + + UCHAR sbrPresent; + UCHAR psPresent; } CODER_CONFIG; /** MP4 Element IDs. */ diff --git a/libSYS/include/audio.h b/libSYS/include/audio.h index 7a827cb..6ef83ae 100644 --- a/libSYS/include/audio.h +++ b/libSYS/include/audio.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSYS/include/cmdl_parser.h b/libSYS/include/cmdl_parser.h index 86f20df..266e41d 100644 --- a/libSYS/include/cmdl_parser.h +++ b/libSYS/include/cmdl_parser.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSYS/include/conv_string.h b/libSYS/include/conv_string.h index 1280ae6..0409dc0 100644 --- a/libSYS/include/conv_string.h +++ b/libSYS/include/conv_string.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSYS/include/genericStds.h b/libSYS/include/genericStds.h index 6adf689..fe4dc36 100644 --- a/libSYS/include/genericStds.h +++ b/libSYS/include/genericStds.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSYS/include/machine_type.h b/libSYS/include/machine_type.h index d04a8e8..4745e43 100644 --- a/libSYS/include/machine_type.h +++ b/libSYS/include/machine_type.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSYS/include/wav_file.h b/libSYS/include/wav_file.h index e9c4e70..2bc43b2 100644 --- a/libSYS/include/wav_file.h +++ b/libSYS/include/wav_file.h @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -111,16 +111,36 @@ amm-info@iis.fraunhofer.de extern "C" { #endif +#define SPEAKER_FRONT_LEFT 0x1 +#define SPEAKER_FRONT_RIGHT 0x2 +#define SPEAKER_FRONT_CENTER 0x4 +#define SPEAKER_LOW_FREQUENCY 0x8 +#define SPEAKER_BACK_LEFT 0x10 +#define SPEAKER_BACK_RIGHT 0x20 +#define SPEAKER_FRONT_LEFT_OF_CENTER 0x40 +#define SPEAKER_FRONT_RIGHT_OF_CENTER 0x80 +#define SPEAKER_BACK_CENTER 0x100 +#define SPEAKER_SIDE_LEFT 0x200 +#define SPEAKER_SIDE_RIGHT 0x400 +#define SPEAKER_TOP_CENTER 0x800 +#define SPEAKER_TOP_FRONT_LEFT 0x1000 +#define SPEAKER_TOP_FRONT_CENTER 0x2000 +#define SPEAKER_TOP_FRONT_RIGHT 0x4000 +#define SPEAKER_TOP_BACK_LEFT 0x8000 +#define SPEAKER_TOP_BACK_CENTER 0x10000 +#define SPEAKER_TOP_BACK_RIGHT 0x20000 +#define SPEAKER_RESERVED 0x80000000 + /*! * RIFF WAVE file struct. * For details see WAVE file format documentation (for example at http://www.wotsit.org). */ typedef struct WAV_HEADER { - char riffType[4]; + char riffType[4]; UINT riffSize; - char waveType[4]; - char formatType[4]; + char waveType[4]; + char formatType[4]; UINT formatSize; USHORT compressionCode; USHORT numChannels; @@ -128,7 +148,7 @@ typedef struct WAV_HEADER UINT bytesPerSecond; USHORT blockAlign; USHORT bitsPerSample; - char dataType[4]; + char dataType[4]; UINT dataSize; } WAV_HEADER; @@ -136,6 +156,7 @@ struct WAV { WAV_HEADER header; FDKFILE *fp; + UINT channelMask; }; typedef struct WAV *HANDLE_WAV; diff --git a/libSYS/src/cmdl_parser.cpp b/libSYS/src/cmdl_parser.cpp index bf020ee..24ec0d5 100644 --- a/libSYS/src/cmdl_parser.cpp +++ b/libSYS/src/cmdl_parser.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -465,7 +465,7 @@ INT CheckArg(TEXTCHAR* arg, TEXTCHAR* str, UINT numArgs, TEXTCHAR type, TEXTCHAR for ( i = 0; i < _tcslen(arg); ++i ) { - if ( (type == 'd') && !_istdigit(arg[i]) && arg[i] != 'x' ) + if ( (type == 'd') && !_istdigit(arg[i]) && arg[i] != 'x' && arg[i] != '-') { #ifdef _UNICODE _ftprintf(stderr, _TEXT("\n\nError: Argument '%ls' for switch '%ls' is not a valid number.\n" ), arg, cur_str); @@ -549,7 +549,7 @@ int IIS_ProcessCmdlList(const char* param_filename, int (*pFunction)(int, TEXTCH /* Skip consecutive blanks. */ while (*line_ptr == ' ' && line_ptr < line+CMDL_MAX_STRLEN) line_ptr++; - /* Assign argument. TODO: maybe handle quotes */ + /* Assign argument. */ argv_ptr[argc] = line_ptr; /* Get pointer to next blank. */ line_ptr = (char*)FDKstrchr(line_ptr, ' '); diff --git a/libSYS/src/conv_string.cpp b/libSYS/src/conv_string.cpp index f730337..28cbc83 100644 --- a/libSYS/src/conv_string.cpp +++ b/libSYS/src/conv_string.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSYS/src/genericStds.cpp b/libSYS/src/genericStds.cpp index 6bc4bd2..f0199fb 100644 --- a/libSYS/src/genericStds.cpp +++ b/libSYS/src/genericStds.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -98,8 +98,8 @@ amm-info@iis.fraunhofer.de /* library info */ #define SYS_LIB_VL0 1 -#define SYS_LIB_VL1 2 -#define SYS_LIB_VL2 2 +#define SYS_LIB_VL1 3 +#define SYS_LIB_VL2 4 #define SYS_LIB_TITLE "System Integration Library" #define SYS_LIB_BUILD_DATE __DATE__ #define SYS_LIB_BUILD_TIME __TIME__ diff --git a/libSYS/src/linux/FDK_stackload_linux.cpp b/libSYS/src/linux/FDK_stackload_linux.cpp index 549d99d..82fa9ab 100644 --- a/libSYS/src/linux/FDK_stackload_linux.cpp +++ b/libSYS/src/linux/FDK_stackload_linux.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSYS/src/linux/audio_linux.cpp b/libSYS/src/linux/audio_linux.cpp index d99f876..835b27b 100644 --- a/libSYS/src/linux/audio_linux.cpp +++ b/libSYS/src/linux/audio_linux.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSYS/src/linux/coresup_linux.cpp b/libSYS/src/linux/coresup_linux.cpp index 49a042b..9e6fa85 100644 --- a/libSYS/src/linux/coresup_linux.cpp +++ b/libSYS/src/linux/coresup_linux.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSYS/src/linux/genericStds_linux.cpp b/libSYS/src/linux/genericStds_linux.cpp index f28def7..da375c0 100644 --- a/libSYS/src/linux/genericStds_linux.cpp +++ b/libSYS/src/linux/genericStds_linux.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSYS/src/linux/uart_linux.cpp b/libSYS/src/linux/uart_linux.cpp index 31e0419..dee5694 100644 --- a/libSYS/src/linux/uart_linux.cpp +++ b/libSYS/src/linux/uart_linux.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSYS/src/mips/genericStds_mips.cpp b/libSYS/src/mips/genericStds_mips.cpp index 98a30c3..e08ec48 100644 --- a/libSYS/src/mips/genericStds_mips.cpp +++ b/libSYS/src/mips/genericStds_mips.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION diff --git a/libSYS/src/wav_file.cpp b/libSYS/src/wav_file.cpp index 8764be9..58bcfaa 100644 --- a/libSYS/src/wav_file.cpp +++ b/libSYS/src/wav_file.cpp @@ -2,7 +2,7 @@ /* ----------------------------------------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. +© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -174,7 +174,6 @@ INT WAV_InputOpen (HANDLE_WAV *pWav, const char *filename) 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 }; USHORT extraFormatBytes, validBitsPerSample; - UINT channelMask; UCHAR guid[16]; INT i; @@ -184,7 +183,7 @@ INT WAV_InputOpen (HANDLE_WAV *pWav, const char *filename) if (extraFormatBytes >= 22) { FDKfread_EL(&(validBitsPerSample), 2, 1, wav->fp); - FDKfread_EL(&(channelMask), 4, 1, wav->fp); + FDKfread_EL(&(wav->channelMask), 4, 1, wav->fp); FDKfread_EL(&(guid), 16, 1, wav->fp); /* check for PCM GUID */ @@ -228,12 +227,12 @@ INT WAV_InputOpen (HANDLE_WAV *pWav, const char *filename) /* Error path */ error: - if (wav->fp) { - FDKfclose(wav->fp); - wav->fp = NULL; - } if (wav) { + if (wav->fp) { + FDKfclose(wav->fp); + wav->fp = NULL; + } FDKfree(wav); } @@ -388,6 +387,11 @@ INT WAV_OutputOpen(HANDLE_WAV *pWav, const char *outputFilename, INT sampleRate, HANDLE_WAV wav = (HANDLE_WAV)FDKcalloc(1, sizeof(struct WAV)); UINT size = 0; + if (wav == NULL) { + FDKprintfErr("WAV_OutputOpen(): Unable to allocate WAV struct.\n"); + goto bail; + } + if (bitsPerSample != 16 && bitsPerSample != 24 && bitsPerSample != 32) { FDKprintfErr("WAV_OutputOpen(): Invalid argument (bitsPerSample).\n"); @@ -433,10 +437,12 @@ INT WAV_OutputOpen(HANDLE_WAV *pWav, const char *outputFilename, INT sampleRate, return 0; bail: - if (wav->fp) - FDKfclose(wav->fp); - if (wav) + if (wav) { + if (wav->fp) { + FDKfclose(wav->fp); + } FDKfree(wav); + } pWav = NULL; |